From f856b4d06c65b5d6230eaf1724eb35a192e57711 Mon Sep 17 00:00:00 2001 From: epCode Date: Wed, 13 Oct 2021 12:00:06 -0700 Subject: [PATCH] Git Update --- API.md | 13 +- CONTRIBUTING.md | 77 +- CREDITS.md | 118 + GROUPS.md | 4 +- LEGAL.md | 52 + MISSING_ENGINE_FEATURES.md | 40 - README.md | 189 +- description.txt | 2 +- menu/Header.blend | Bin 0 -> 1670380 bytes menu/header.png | Bin 22240 -> 77528 bytes minetest.conf | 14 + mods/CORE/_mcl_autogroup/README.txt | 5 + mods/CORE/_mcl_autogroup/depends.txt | 0 mods/CORE/_mcl_autogroup/description.txt | 1 - mods/CORE/_mcl_autogroup/init.lua | 448 +- mods/CORE/_mcl_autogroup/mod.conf | 2 + mods/CORE/biomeinfo/init.lua | 10 +- mods/CORE/biomeinfo/mod.conf | 1 + mods/CORE/controls/API.md | 23 + mods/CORE/controls/init.lua | 63 +- mods/CORE/controls/mod.conf | 5 +- mods/CORE/flowlib/API.md | 45 + mods/CORE/flowlib/init.lua | 144 +- mods/CORE/flowlib/mod.conf | 3 + mods/CORE/mcl_attached/description.txt | 1 - mods/CORE/mcl_attached/init.lua | 21 +- mods/CORE/mcl_attached/mod.conf | 3 + mods/CORE/mcl_autogroup/API.md | 27 + mods/CORE/mcl_autogroup/init.lua | 28 + mods/CORE/mcl_autogroup/mod.conf | 3 + mods/CORE/mcl_colors/API.md | 8 + mods/CORE/mcl_colors/init.lua | 36 + mods/CORE/mcl_colors/mod.conf | 3 + mods/CORE/mcl_damage/init.lua | 169 + mods/CORE/mcl_damage/mod.conf | 3 + mods/CORE/mcl_explosions/API.md | 15 + mods/CORE/mcl_explosions/init.lua | 206 +- .../locale/mcl_explosions.de.tr | 2 - .../locale/mcl_explosions.fr.tr | 2 - .../locale/mcl_explosions.pl.tr | 2 + .../locale/mcl_explosions.ru.tr | 2 - mods/CORE/mcl_explosions/locale/template.txt | 2 - mods/CORE/mcl_explosions/mod.conf | 1 + mods/CORE/mcl_init/description.txt | 1 - mods/CORE/mcl_init/init.lua | 141 +- mods/CORE/mcl_init/mod.conf | 2 + mods/CORE/mcl_loot/description.txt | 1 - mods/CORE/mcl_loot/init.lua | 15 +- mods/CORE/mcl_loot/mod.conf | 2 + mods/CORE/mcl_particles/description.txt | 1 - mods/CORE/mcl_particles/init.lua | 71 +- mods/CORE/mcl_particles/mod.conf | 2 + .../textures/mcl_particles_bonemeal.png | Bin 0 -> 3356 bytes .../textures/mcl_particles_sponge1.png | Bin 0 -> 1174 bytes .../textures/mcl_particles_sponge2.png | Bin 0 -> 1149 bytes .../textures/mcl_particles_sponge3.png | Bin 0 -> 1128 bytes .../textures/mcl_particles_sponge4.png | Bin 0 -> 1150 bytes .../textures/mcl_particles_sponge5.png | Bin 0 -> 1170 bytes mods/CORE/mcl_sounds/description.txt | 1 - mods/CORE/mcl_sounds/mod.conf | 2 + mods/CORE/mcl_util/depends.txt | 1 - mods/CORE/mcl_util/description.txt | 1 - mods/CORE/mcl_util/init.lua | 182 +- mods/CORE/mcl_util/mod.conf | 3 + mods/CORE/mcl_worlds/API.md | 81 + mods/CORE/mcl_worlds/depends.txt | 1 - mods/CORE/mcl_worlds/description.txt | 1 - mods/CORE/mcl_worlds/init.lua | 89 +- mods/CORE/mcl_worlds/mod.conf | 5 + mods/CORE/tga_encoder/README.md | 4 + mods/CORE/tga_encoder/init.lua | 78 + mods/CORE/tga_encoder/mod.conf | 3 + mods/CORE/walkover/init.lua | 57 +- mods/CORE/walkover/mod.conf | 4 + mods/ENTITIES/drippingwater/depends.txt | 1 - mods/ENTITIES/drippingwater/init.lua | 85 +- mods/ENTITIES/drippingwater/mod.conf | 4 + mods/ENTITIES/mcl_boats/README.txt | 2 +- mods/ENTITIES/mcl_boats/depends.txt | 3 - mods/ENTITIES/mcl_boats/description.txt | 1 - mods/ENTITIES/mcl_boats/init.lua | 269 +- .../ENTITIES/mcl_boats/locale/mcl_boats.de.tr | 3 +- .../ENTITIES/mcl_boats/locale/mcl_boats.fr.tr | 5 +- .../ENTITIES/mcl_boats/locale/mcl_boats.pl.tr | 12 + mods/ENTITIES/mcl_boats/locale/template.txt | 3 +- mods/ENTITIES/mcl_boats/mod.conf | 6 + .../mcl_boats/models/mcl_boats_boat.b3d | Bin 19221 -> 39715 bytes mods/ENTITIES/mcl_burning/api.lua | 138 + mods/ENTITIES/mcl_burning/engine.lua | 304 - mods/ENTITIES/mcl_burning/init.lua | 117 +- .../mcl_falling_nodes/description.txt | 1 - mods/ENTITIES/mcl_falling_nodes/init.lua | 89 +- .../locale/mcl_falling_nodes.de.tr | 3 - .../locale/mcl_falling_nodes.es.tr | 3 - .../locale/mcl_falling_nodes.fr.tr | 3 - .../locale/mcl_falling_nodes.pl.tr | 3 + .../locale/mcl_falling_nodes.ru.tr | 3 - .../mcl_falling_nodes/locale/template.txt | 3 - mods/ENTITIES/mcl_falling_nodes/mod.conf | 2 + mods/ENTITIES/mcl_item_entity/depends.txt | 2 - mods/ENTITIES/mcl_item_entity/description.txt | 1 - mods/ENTITIES/mcl_item_entity/init.lua | 375 +- mods/ENTITIES/mcl_item_entity/mod.conf | 3 + .../mcl_item_entity/sounds/Attributes.txt | 1 + .../sounds/item_drop_pickup.1.ogg | Bin 5965 -> 0 bytes .../sounds/item_drop_pickup.2.ogg | Bin 6151 -> 0 bytes .../sounds/item_drop_pickup.3.ogg | Bin 5690 -> 0 bytes .../sounds/item_drop_pickup.4.ogg | Bin 5822 -> 0 bytes .../sounds/item_drop_pickup.ogg | Bin 0 -> 4834 bytes mods/ENTITIES/mcl_minecarts/depends.txt | 12 - mods/ENTITIES/mcl_minecarts/description.txt | 1 - mods/ENTITIES/mcl_minecarts/functions.lua | 23 +- mods/ENTITIES/mcl_minecarts/init.lua | 64 +- .../mcl_minecarts/locale/mcl_minecarts.de.tr | 1 + .../mcl_minecarts/locale/mcl_minecarts.fr.tr | 1 + .../mcl_minecarts/locale/mcl_minecarts.pl.tr | 36 + .../mcl_minecarts/locale/mcl_minecarts.ru.tr | 1 + .../mcl_minecarts/locale/template.txt | 1 + mods/ENTITIES/mcl_minecarts/mod.conf | 5 + mods/ENTITIES/mcl_minecarts/rails.lua | 12 +- .../mcl_mobs/{readme.MD => README.md} | 0 mods/ENTITIES/mcl_mobs/api.txt | 32 +- mods/ENTITIES/mcl_mobs/api/api.lua | 736 +++ .../mcl_mobs/api/mob_functions/ai.lua | 1128 ++++ .../mcl_mobs/api/mob_functions/animation.lua | 257 + .../attack_type_instructions.lua | 347 + .../mob_functions/backup_code_api.txt} | 5685 ++++++----------- .../mcl_mobs/api/mob_functions/breeding.lua | 179 + .../mcl_mobs/api/mob_functions/collision.lua | 135 + .../api/mob_functions/death_logic.lua | 158 + .../api/mob_functions/environment.lua | 250 + .../mcl_mobs/api/mob_functions/flow_lib.lua | 78 + .../mcl_mobs/api/mob_functions/head_logic.lua | 98 + .../api/mob_functions/interaction.lua | 276 + .../api/mob_functions/mob_effects.lua | 150 + .../mcl_mobs/api/mob_functions/movement.lua | 390 ++ .../api/mob_functions/projectile_handling.lua | 43 + .../mcl_mobs/api/mob_functions/set_up.lua | 224 + .../api/mob_functions/sound_handling.lua | 59 + mods/ENTITIES/mcl_mobs/{ => api}/mount.lua | 97 +- mods/ENTITIES/mcl_mobs/api/spawning.lua | 709 ++ mods/ENTITIES/mcl_mobs/crafts.lua | 2 +- mods/ENTITIES/mcl_mobs/description.txt | 1 - mods/ENTITIES/mcl_mobs/init.lua | 11 +- mods/ENTITIES/mcl_mobs/locale/mcl_mobs.pl.tr | 11 + mods/ENTITIES/mcl_mobs/lucky_block.lua | 8 - mods/ENTITIES/mcl_mobs/mod.conf | 4 +- mods/ENTITIES/mcl_mobs/sounds/attributes.txt | 4 + .../mcl_mobs/sounds/default_punch.1.ogg | Bin 0 -> 12658 bytes .../mcl_mobs/sounds/default_punch.2.ogg | Bin 0 -> 12801 bytes .../mcl_mobs/sounds/default_punch.3.ogg | Bin 0 -> 12943 bytes .../mcl_mobs/sounds/default_punch.ogg | Bin 5946 -> 0 bytes mods/ENTITIES/mcl_mobs/todo.txt | 1 + mods/ENTITIES/mcl_paintings/init.lua | 35 +- .../mcl_paintings/locale/mcl_paintings.pl.tr | 2 + mods/ENTITIES/mcl_paintings/mod.conf | 4 + mods/ENTITIES/mcl_paintings/paintings.lua | 6 +- mods/ENTITIES/mobs_mc/0_gameconfig.lua | 13 +- mods/ENTITIES/mobs_mc/1_items_default.lua | 70 +- mods/ENTITIES/mobs_mc/2_throwing.lua | 23 +- mods/ENTITIES/mobs_mc/4_heads.lua | 3 +- mods/ENTITIES/mobs_mc/LICENSE-media.md | 5 +- mods/ENTITIES/mobs_mc/agent.lua | 4 +- mods/ENTITIES/mobs_mc/bat.lua | 84 +- mods/ENTITIES/mobs_mc/blaze.lua | 104 +- mods/ENTITIES/mobs_mc/chicken.lua | 107 +- mods/ENTITIES/mobs_mc/cow+mooshroom.lua | 137 +- mods/ENTITIES/mobs_mc/creeper.lua | 217 +- mods/ENTITIES/mobs_mc/depends.txt | 13 +- mods/ENTITIES/mobs_mc/description.txt | 1 - mods/ENTITIES/mobs_mc/ender_dragon.lua | 81 +- mods/ENTITIES/mobs_mc/enderman.lua | 366 +- mods/ENTITIES/mobs_mc/endermite.lua | 6 +- mods/ENTITIES/mobs_mc/ghast.lua | 84 +- mods/ENTITIES/mobs_mc/guardian.lua | 8 +- mods/ENTITIES/mobs_mc/guardian_elder.lua | 10 +- mods/ENTITIES/mobs_mc/horse.lua | 213 +- mods/ENTITIES/mobs_mc/init.lua | 2 +- mods/ENTITIES/mobs_mc/iron_golem.lua | 12 +- mods/ENTITIES/mobs_mc/llama.lua | 154 +- mods/ENTITIES/mobs_mc/locale/mobs_mc.de.tr | 1 + mods/ENTITIES/mobs_mc/locale/mobs_mc.es.tr | 1 + mods/ENTITIES/mobs_mc/locale/mobs_mc.fr.tr | 1 + mods/ENTITIES/mobs_mc/locale/mobs_mc.pl.tr | 75 + mods/ENTITIES/mobs_mc/locale/mobs_mc.ru.tr | 1 + mods/ENTITIES/mobs_mc/locale/template.txt | 1 + mods/ENTITIES/mobs_mc/mod.conf | 5 + mods/ENTITIES/mobs_mc/models/attributes.txt | 1 + mods/ENTITIES/mobs_mc/models/mobs_mc_cat.b3d | Bin 54146 -> 50977 bytes mods/ENTITIES/mobs_mc/models/mobs_mc_cow.b3d | Bin 75074 -> 71850 bytes .../mobs_mc/models/mobs_mc_creeper.b3d | Bin 44319 -> 139359 bytes .../ENTITIES/mobs_mc/models/mobs_mc_ghast.b3d | Bin 75657 -> 69843 bytes .../mobs_mc/models/mobs_mc_mooshroom.b3d | Bin 54175 -> 71850 bytes .../mobs_mc/models/mobs_mc_skeleton.b3d | Bin 221065 -> 212014 bytes .../ENTITIES/mobs_mc/models/mobs_mc_slime.b3d | Bin 4732 -> 6346 bytes .../models/mobs_mc_villager_zombie.b3d | Bin 33648 -> 97769 bytes .../mobs_mc/models/mobs_mc_witherskeleton.b3d | Bin 185727 -> 212014 bytes .../mobs_mc/models/mobs_mc_zombie.b3d | Bin 38539 -> 114629 bytes mods/ENTITIES/mobs_mc/ocelot.lua | 38 +- mods/ENTITIES/mobs_mc/parrot.lua | 32 +- mods/ENTITIES/mobs_mc/pig.lua | 111 +- mods/ENTITIES/mobs_mc/polar_bear.lua | 25 +- mods/ENTITIES/mobs_mc/rabbit.lua | 77 +- mods/ENTITIES/mobs_mc/sheep.lua | 150 +- mods/ENTITIES/mobs_mc/shulker.lua | 22 +- mods/ENTITIES/mobs_mc/silverfish.lua | 16 +- mods/ENTITIES/mobs_mc/skeleton+stray.lua | 247 +- mods/ENTITIES/mobs_mc/skeleton_wither.lua | 25 +- mods/ENTITIES/mobs_mc/slime+magma_cube.lua | 256 +- mods/ENTITIES/mobs_mc/snowman.lua | 11 +- .../mobs_mc/sounds/mobs_mc_villager.1.ogg | Bin 0 -> 14734 bytes .../mobs_mc/sounds/mobs_mc_villager.2.ogg | Bin 0 -> 14564 bytes .../mobs_mc/sounds/mobs_mc_villager.3.ogg | Bin 0 -> 14773 bytes .../mobs_mc/sounds/mobs_mc_villager.4.ogg | Bin 0 -> 14731 bytes .../mobs_mc/sounds/mobs_mc_villager.5.ogg | Bin 0 -> 11187 bytes .../mobs_mc/sounds/mobs_mc_villager.6.ogg | Bin 0 -> 11068 bytes .../sounds/mobs_mc_villager_hurt.1.ogg | Bin 0 -> 10341 bytes mods/ENTITIES/mobs_mc/spider.lua | 170 +- mods/ENTITIES/mobs_mc/squid.lua | 161 +- .../mobs_mc/textures/mobs_mc_ghast_firing.png | Bin 0 -> 1532 bytes .../textures/mobs_mc_horse_skeleton.png | Bin 5972 -> 4115 bytes .../mobs_mc/textures/mobs_mc_horse_zombie.png | Bin 11350 -> 0 bytes .../mobs_mc/textures/mobs_mc_llama_chest.png | Bin 0 -> 20594 bytes .../textures/mobs_mc_llama_decor_black.png | Bin 0 -> 4602 bytes .../textures/mobs_mc_llama_decor_blue.png | Bin 0 -> 6585 bytes .../textures/mobs_mc_llama_decor_brown.png | Bin 0 -> 6231 bytes .../textures/mobs_mc_llama_decor_cyan.png | Bin 0 -> 7612 bytes .../textures/mobs_mc_llama_decor_gray.png | Bin 0 -> 5236 bytes .../textures/mobs_mc_llama_decor_green.png | Bin 0 -> 5809 bytes .../mobs_mc_llama_decor_light_blue.png | Bin 0 -> 7643 bytes .../mobs_mc_llama_decor_light_gray.png | Bin 0 -> 6354 bytes .../textures/mobs_mc_llama_decor_lime.png | Bin 0 -> 7388 bytes .../textures/mobs_mc_llama_decor_magenta.png | Bin 0 -> 7352 bytes .../textures/mobs_mc_llama_decor_orange.png | Bin 0 -> 7396 bytes .../textures/mobs_mc_llama_decor_pink.png | Bin 0 -> 7732 bytes .../textures/mobs_mc_llama_decor_purple.png | Bin 0 -> 5790 bytes .../textures/mobs_mc_llama_decor_red.png | Bin 0 -> 6659 bytes .../textures/mobs_mc_llama_decor_white.png | Bin 0 -> 6866 bytes .../textures/mobs_mc_llama_decor_yellow.png | Bin 0 -> 7571 bytes .../mobs_mc/textures/mobs_mc_slime.png | Bin 992 -> 2052 bytes .../mobs_mc_spawn_icon_rabbit_caerbannog.png | Bin 0 -> 1897 bytes .../mobs_mc/textures/mobs_mc_spit.png | Bin 0 -> 677 bytes .../textures/mobs_mc_stray_overlay.png | Bin 790 -> 1021 bytes .../textures/mobs_mc_wither_half_health.png | Bin 0 -> 1323 bytes mods/ENTITIES/mobs_mc/vex.lua | 4 +- mods/ENTITIES/mobs_mc/villager.lua | 52 +- mods/ENTITIES/mobs_mc/villager_evoker.lua | 7 +- mods/ENTITIES/mobs_mc/villager_illusioner.lua | 11 +- mods/ENTITIES/mobs_mc/villager_vindicator.lua | 7 +- mods/ENTITIES/mobs_mc/villager_zombie.lua | 120 +- mods/ENTITIES/mobs_mc/witch.lua | 11 +- mods/ENTITIES/mobs_mc/wither.lua | 22 +- mods/ENTITIES/mobs_mc/wolf.lua | 80 +- mods/ENTITIES/mobs_mc/zombie.lua | 270 +- mods/ENTITIES/mobs_mc/zombiepig.lua | 57 +- mods/ENTITIES/mobs_mc_gameconfig/depends.txt | 2 - mods/ENTITIES/mobs_mc_gameconfig/init.lua | 16 +- mods/ENTITIES/mobs_mc_gameconfig/mod.conf | 4 + mods/ENVIRONMENT/lightning/API.md | 31 + mods/ENVIRONMENT/lightning/depends.txt | 2 - mods/ENVIRONMENT/lightning/description.txt | 1 - mods/ENVIRONMENT/lightning/init.lua | 173 +- .../lightning/locale/lightning.pl.tr | 4 + mods/ENVIRONMENT/lightning/mod.conf | 4 + mods/ENVIRONMENT/lightning/screenshot.png | Bin 50057 -> 0 bytes mods/ENVIRONMENT/mcl_moon/init.lua | 6 +- mods/ENVIRONMENT/mcl_moon/mod.conf | 1 + mods/ENVIRONMENT/mcl_void_damage/depends.txt | 2 - .../mcl_void_damage/description.txt | 1 - mods/ENVIRONMENT/mcl_void_damage/init.lua | 29 +- .../locale/mcl_void_damage.pl.tr | 3 + mods/ENVIRONMENT/mcl_void_damage/mod.conf | 3 + mods/ENVIRONMENT/mcl_weather/depends.txt | 3 - mods/ENVIRONMENT/mcl_weather/description.txt | 1 - mods/ENVIRONMENT/mcl_weather/init.lua | 4 +- .../mcl_weather/locale/mcl_weather.pl.tr | 8 + mods/ENVIRONMENT/mcl_weather/mod.conf | 4 + mods/ENVIRONMENT/mcl_weather/nether_dust.lua | 4 +- mods/ENVIRONMENT/mcl_weather/rain.lua | 46 +- mods/ENVIRONMENT/mcl_weather/screenshot.png | Bin 30710 -> 0 bytes mods/ENVIRONMENT/mcl_weather/skycolor.lua | 10 +- mods/ENVIRONMENT/mcl_weather/snow.lua | 124 +- mods/ENVIRONMENT/mcl_weather/thunder.lua | 90 +- mods/ENVIRONMENT/mcl_weather/weather_core.lua | 62 +- mods/HELP/doc/description.txt | 1 - mods/HELP/doc/doc/init.lua | 90 +- mods/HELP/doc/doc/locale/doc.pl.tr | 52 + mods/HELP/doc/doc/mod.conf | 3 +- mods/HELP/doc/doc/screenshot.png | Bin 12315 -> 0 bytes mods/HELP/doc/doc_identifier/init.lua | 35 +- .../locale/doc_identifier.pl.tr | 18 + mods/HELP/doc/doc_identifier/mod.conf | 3 +- mods/HELP/doc/doc_identifier/screenshot.png | Bin 28682 -> 0 bytes mods/HELP/doc/doc_items/init.lua | 211 +- .../HELP/doc/doc_items/locale/doc_items.de.tr | 9 +- .../HELP/doc/doc_items/locale/doc_items.fr.tr | 2 +- .../HELP/doc/doc_items/locale/doc_items.pl.tr | 144 + mods/HELP/doc/doc_items/locale/template.txt | 2 +- mods/HELP/doc/doc_items/mod.conf | 3 +- mods/HELP/doc/doc_items/screenshot.png | Bin 15507 -> 0 bytes mods/HELP/doc/modpack.conf | 1 + mods/HELP/mcl_craftguide/depends.txt | 6 - mods/HELP/mcl_craftguide/description.txt | 2 - mods/HELP/mcl_craftguide/init.lua | 32 +- .../locale/mcl_craftguide.pl.tr | 38 + mods/HELP/mcl_craftguide/mod.conf | 4 + mods/HELP/mcl_craftguide/screenshot.png | Bin 35837 -> 0 bytes mods/HELP/mcl_doc/depends.txt | 2 - mods/HELP/mcl_doc/description.txt | 1 - mods/HELP/mcl_doc/init.lua | 18 +- mods/HELP/mcl_doc/locale/mcl_doc.pl.tr | 80 + mods/HELP/mcl_doc/mod.conf | 3 + mods/HELP/mcl_doc_basics/init.lua | 2 +- .../locale/mcl_doc_basics.pl.tr | 512 ++ mods/HELP/mcl_doc_basics/mcl_extension.lua | 2 +- mods/HELP/mcl_doc_basics/mod.conf | 3 +- mods/HELP/mcl_doc_basics/screenshot.png | Bin 44823 -> 0 bytes mods/HELP/mcl_item_id/API.md | 24 + mods/HELP/mcl_item_id/init.lua | 62 + mods/HELP/mcl_item_id/mod.conf | 3 + mods/HELP/mcl_tt/depends.txt | 2 - mods/HELP/mcl_tt/init.lua | 6 +- mods/HELP/mcl_tt/locale/mcl_tt.de.tr | 1 + mods/HELP/mcl_tt/locale/mcl_tt.pl.tr | 48 + mods/HELP/mcl_tt/locale/template.txt | 1 + mods/HELP/mcl_tt/mod.conf | 4 + mods/HELP/mcl_tt/snippets_base.lua | 12 +- mods/HELP/mcl_tt/snippets_mcl.lua | 15 +- mods/HELP/tt/init.lua | 24 +- mods/HELP/tt/mod.conf | 2 + mods/HUD/awards/api.lua | 20 +- mods/HUD/awards/chat_commands.lua | 2 +- mods/HUD/awards/depends.txt | 2 - mods/HUD/awards/description.txt | 1 - mods/HUD/awards/init.lua | 12 +- mods/HUD/awards/locale/awards.de.tr | 7 +- mods/HUD/awards/locale/awards.fr.tr | 20 +- mods/HUD/awards/locale/awards.pl.tr | 63 + mods/HUD/awards/locale/awards.ru.tr | 1 + mods/HUD/awards/locale/template.txt | 12 +- mods/HUD/awards/mod.conf | 2 + mods/HUD/awards/screenshot.png | Bin 63807 -> 0 bytes mods/HUD/awards/sfinv.lua | 2 +- mods/HUD/awards/triggers.lua | 20 +- mods/HUD/awards/unified_inventory.lua | 5 +- mods/HUD/hudbars/API.md | 5 +- mods/HUD/hudbars/default_settings.lua | 6 +- mods/HUD/hudbars/init.lua | 115 +- mods/HUD/hudbars/locale/hudbars.pl.tr | 7 + mods/HUD/hudbars/mod.conf | 1 + mods/HUD/hudbars/screenshot.png | Bin 9556 -> 0 bytes mods/HUD/mcl_achievements/depends.txt | 1 - mods/HUD/mcl_achievements/init.lua | 19 +- .../locale/mcl_achievements.pl.tr | 50 + mods/HUD/mcl_achievements/mod.conf | 3 + mods/HUD/mcl_base_textures/description.txt | 1 - mods/HUD/mcl_base_textures/mod.conf | 2 + .../textures/object_crosshair.png | Bin 150 -> 144 bytes mods/HUD/mcl_bossbars/init.lua | 199 + mods/HUD/mcl_bossbars/mod.conf | 4 + .../mcl_bossbars/textures/mcl_bossbars.png | Bin 0 -> 3689 bytes .../textures/mcl_bossbars_empty.png | Bin 0 -> 3369 bytes mods/HUD/mcl_credits/init.lua | 264 + mods/HUD/mcl_credits/locale/mcl_credits.de.tr | 14 + mods/HUD/mcl_credits/locale/mcl_credits.es.tr | 14 + mods/HUD/mcl_credits/locale/mcl_credits.fr.tr | 14 + mods/HUD/mcl_credits/locale/mcl_credits.pl.tr | 14 + mods/HUD/mcl_credits/locale/mcl_credits.ru.tr | 14 + mods/HUD/mcl_credits/locale/template.txt | 14 + mods/HUD/mcl_credits/mod.conf | 3 + mods/HUD/mcl_credits/textures/credits_bg.png | Bin 0 -> 63056 bytes .../mcl_credits/textures/mineclone2_icon.png | Bin 0 -> 3961 bytes .../mcl_credits/textures/mineclone2_logo.png | Bin 0 -> 77528 bytes mods/HUD/mcl_death_messages/description.txt | 1 - mods/HUD/mcl_death_messages/init.lua | 527 +- .../locale/mcl_death_messages.de.tr | 114 +- .../locale/mcl_death_messages.es.tr | 1 + .../locale/mcl_death_messages.fr.tr | 1 + .../locale/mcl_death_messages.pl.tr | 59 + .../locale/mcl_death_messages.ru.tr | 1 + .../mcl_death_messages/locale/template.txt | 114 +- mods/HUD/mcl_death_messages/mod.conf | 3 + mods/HUD/mcl_experience/init.lua | 92 +- .../locale/mcl_experience.pl.tr | 8 + mods/HUD/mcl_experience/mod.conf | 3 + mods/HUD/mcl_formspec/mod.conf | 2 + mods/HUD/mcl_formspec_prepend/depends.txt | 1 - mods/HUD/mcl_formspec_prepend/mod.conf | 3 + mods/HUD/mcl_hbarmor/description.txt | 1 - mods/HUD/mcl_hbarmor/init.lua | 51 +- mods/HUD/mcl_hbarmor/locale/mcl_hbarmor.pl.tr | 3 + mods/HUD/mcl_hbarmor/mod.conf | 2 + mods/HUD/mcl_inventory/creative.lua | 368 +- mods/HUD/mcl_inventory/depends.txt | 8 - mods/HUD/mcl_inventory/description.txt | 1 - mods/HUD/mcl_inventory/init.lua | 65 +- .../mcl_inventory/locale/mcl_inventory.pl.tr | 22 + mods/HUD/mcl_inventory/mod.conf | 4 + mods/HUD/mcl_title/API.md | 50 + mods/HUD/mcl_title/init.lua | 236 + mods/HUD/mcl_title/mod.conf | 4 + mods/HUD/mcl_tmp_message/init.lua | 44 - mods/HUD/show_wielded_item/depends.txt | 1 - mods/HUD/show_wielded_item/description.txt | 1 - mods/HUD/show_wielded_item/init.lua | 12 +- mods/HUD/show_wielded_item/mod.conf | 3 + mods/HUD/show_wielded_item/screenshot.png | Bin 11859 -> 0 bytes .../REDSTONE/mcl_comparators/depends.txt | 4 - mods/ITEMS/REDSTONE/mcl_comparators/init.lua | 194 +- .../locale/mcl_comparators.pl.tr | 13 + mods/ITEMS/REDSTONE/mcl_comparators/mod.conf | 2 + .../ITEMS/REDSTONE/mcl_dispensers/depends.txt | 12 - mods/ITEMS/REDSTONE/mcl_dispensers/init.lua | 318 +- .../locale/mcl_dispensers.pl.tr | 25 + mods/ITEMS/REDSTONE/mcl_dispensers/mod.conf | 3 + mods/ITEMS/REDSTONE/mcl_droppers/depends.txt | 6 - mods/ITEMS/REDSTONE/mcl_droppers/init.lua | 16 +- mods/ITEMS/REDSTONE/mcl_droppers/init_new.lua | 24 +- .../mcl_droppers/locale/mcl_droppers.pl.tr | 9 + mods/ITEMS/REDSTONE/mcl_droppers/mod.conf | 3 + mods/ITEMS/REDSTONE/mcl_observers/depends.txt | 2 - mods/ITEMS/REDSTONE/mcl_observers/init.lua | 399 +- .../mcl_observers/locale/mcl_observers.pl.tr | 6 + mods/ITEMS/REDSTONE/mcl_observers/mod.conf | 2 + mods/ITEMS/REDSTONE/mesecons/actionqueue.lua | 8 +- mods/ITEMS/REDSTONE/mesecons/depends.txt | 3 - mods/ITEMS/REDSTONE/mesecons/init.lua | 4 +- mods/ITEMS/REDSTONE/mesecons/internal.lua | 163 +- mods/ITEMS/REDSTONE/mesecons/mod.conf | 3 + mods/ITEMS/REDSTONE/mesecons/presets.lua | 4 +- mods/ITEMS/REDSTONE/mesecons/services.lua | 8 +- .../ITEMS/REDSTONE/mesecons_alias/depends.txt | 1 - mods/ITEMS/REDSTONE/mesecons_alias/mod.conf | 2 + .../REDSTONE/mesecons_button/depends.txt | 2 - mods/ITEMS/REDSTONE/mesecons_button/init.lua | 12 +- .../locale/mesecons_button.pl.tr | 14 + mods/ITEMS/REDSTONE/mesecons_button/mod.conf | 3 + .../mesecons_commandblock/depends.txt | 3 - .../REDSTONE/mesecons_commandblock/init.lua | 51 +- .../locale/mesecons_commandblock.de.tr | 1 + .../locale/mesecons_commandblock.es.tr | 1 + .../locale/mesecons_commandblock.fr.tr | 1 + .../locale/mesecons_commandblock.pl.tr | 31 + .../locale/mesecons_commandblock.ru.tr | 1 + .../mesecons_commandblock/locale/template.txt | 1 + .../REDSTONE/mesecons_commandblock/mod.conf | 3 + .../REDSTONE/mesecons_delayer/depends.txt | 3 - mods/ITEMS/REDSTONE/mesecons_delayer/init.lua | 450 +- .../locale/mesecons_delayer.pl.tr | 13 + mods/ITEMS/REDSTONE/mesecons_delayer/mod.conf | 3 + .../REDSTONE/mesecons_lightstone/depends.txt | 2 - .../REDSTONE/mesecons_lightstone/init.lua | 12 +- .../locale/mesecons_lightstone.pl.tr | 4 + .../REDSTONE/mesecons_lightstone/mod.conf | 3 + mods/ITEMS/REDSTONE/mesecons_mvps/depends.txt | 1 - mods/ITEMS/REDSTONE/mesecons_mvps/init.lua | 13 +- mods/ITEMS/REDSTONE/mesecons_mvps/mod.conf | 2 + .../REDSTONE/mesecons_noteblock/depends.txt | 2 - .../REDSTONE/mesecons_noteblock/init.lua | 21 +- .../locale/mesecons_noteblock.pl.tr | 22 + .../REDSTONE/mesecons_noteblock/mod.conf | 2 + .../REDSTONE/mesecons_pistons/depends.txt | 5 - mods/ITEMS/REDSTONE/mesecons_pistons/init.lua | 281 +- .../locale/mesecons_pistons.pl.tr | 9 + mods/ITEMS/REDSTONE/mesecons_pistons/mod.conf | 3 + .../mesecons_pressureplates/depends.txt | 2 - .../REDSTONE/mesecons_pressureplates/init.lua | 4 +- .../locale/mesecons_pressureplates.pl.tr | 16 + .../REDSTONE/mesecons_pressureplates/mod.conf | 3 + .../REDSTONE/mesecons_solarpanel/depends.txt | 2 - .../REDSTONE/mesecons_solarpanel/init.lua | 10 +- .../locale/mesecons_solarpanel.pl.tr | 8 + .../REDSTONE/mesecons_solarpanel/mod.conf | 3 + .../ITEMS/REDSTONE/mesecons_torch/depends.txt | 3 - mods/ITEMS/REDSTONE/mesecons_torch/init.lua | 171 +- .../locale/mesecons_torch.pl.tr | 10 + mods/ITEMS/REDSTONE/mesecons_torch/mod.conf | 3 + .../REDSTONE/mesecons_walllever/depends.txt | 2 - .../REDSTONE/mesecons_walllever/init.lua | 19 +- .../locale/mesecons_walllever.pl.tr | 5 + .../REDSTONE/mesecons_walllever/mod.conf | 3 + .../ITEMS/REDSTONE/mesecons_wires/depends.txt | 2 - mods/ITEMS/REDSTONE/mesecons_wires/init.lua | 22 +- .../locale/mesecons_wires.pl.tr | 11 + mods/ITEMS/REDSTONE/mesecons_wires/mod.conf | 3 + mods/ITEMS/mcl_anvils/depends.txt | 7 - mods/ITEMS/mcl_anvils/init.lua | 98 +- mods/ITEMS/mcl_anvils/locale/mcl_anvils.pl.tr | 16 + mods/ITEMS/mcl_anvils/mod.conf | 4 + .../mcl_anvils_anvil_top_damaged_0.png | Bin 195 -> 6074 bytes .../mcl_anvils_anvil_top_damaged_1.png | Bin 209 -> 5855 bytes .../mcl_anvils_anvil_top_damaged_2.png | Bin 220 -> 5882 bytes mods/ITEMS/mcl_armor/api.lua | 268 + mods/ITEMS/mcl_armor/armor.lua | 648 -- mods/ITEMS/mcl_armor/damage.lua | 102 + mods/ITEMS/mcl_armor/depends.txt | 6 - mods/ITEMS/mcl_armor/description.txt | 1 - mods/ITEMS/mcl_armor/init.lua | 452 +- mods/ITEMS/mcl_armor/locale/mcl_armor.pl.tr | 23 + mods/ITEMS/mcl_armor/mod.conf | 5 + .../mcl_armor/models/mcl_armor_character.b3d | Bin 313165 -> 554680 bytes .../models/mcl_armor_character.blend | Bin 1078600 -> 1242020 bytes .../models/mcl_armor_character_female.b3d | Bin 0 -> 554680 bytes .../models/mcl_armor_character_female.blend | Bin 0 -> 1242244 bytes .../models/mcl_armor_character_female.blend1 | Bin 0 -> 1212956 bytes mods/ITEMS/mcl_armor/player.lua | 173 + mods/ITEMS/mcl_armor/register.lua | 205 + .../mcl_armor/textures/mcl_armor_elytra.png | Bin 0 -> 271 bytes .../textures/mcl_armor_inv_boots_gold.png | Bin 167 -> 409 bytes .../textures/mcl_armor_inv_elytra.png | Bin 0 -> 355 bytes mods/ITEMS/mcl_armor_stand/depends.txt | 5 - mods/ITEMS/mcl_armor_stand/init.lua | 280 +- .../locale/mcl_armor_stand.pl.tr | 6 + mods/ITEMS/mcl_armor_stand/mod.conf | 5 + .../models/3d_armor_entity.obj | 488 +- mods/ITEMS/mcl_banners/depends.txt | 6 - mods/ITEMS/mcl_banners/description.txt | 1 - mods/ITEMS/mcl_banners/init.lua | 141 +- .../mcl_banners/locale/mcl_banners.de.tr | 2 +- .../mcl_banners/locale/mcl_banners.fr.tr | 4 +- .../mcl_banners/locale/mcl_banners.pl.tr | 77 + .../mcl_banners/locale/mcl_banners.ru.tr | 2 +- mods/ITEMS/mcl_banners/locale/template.txt | 2 +- mods/ITEMS/mcl_banners/mod.conf | 4 + mods/ITEMS/mcl_banners/patterncraft.lua | 36 +- mods/ITEMS/mcl_beds/README.txt | 14 +- mods/ITEMS/mcl_beds/api.lua | 156 +- mods/ITEMS/mcl_beds/beds.lua | 2 +- mods/ITEMS/mcl_beds/depends.txt | 9 - mods/ITEMS/mcl_beds/functions.lua | 91 +- mods/ITEMS/mcl_beds/locale/mcl_beds.de.tr | 1 + mods/ITEMS/mcl_beds/locale/mcl_beds.pl.tr | 41 + mods/ITEMS/mcl_beds/locale/template.txt | 1 + mods/ITEMS/mcl_beds/mod.conf | 4 + mods/ITEMS/mcl_books/depends.txt | 5 - mods/ITEMS/mcl_books/init.lua | 30 +- mods/ITEMS/mcl_books/locale/mcl_books.pl.tr | 28 + mods/ITEMS/mcl_books/mod.conf | 3 + mods/ITEMS/mcl_bows/arrow.lua | 201 +- mods/ITEMS/mcl_bows/bow.lua | 44 +- mods/ITEMS/mcl_bows/crossbow.lua | 442 -- mods/ITEMS/mcl_bows/depends.txt | 11 - mods/ITEMS/mcl_bows/init.lua | 1 - mods/ITEMS/mcl_bows/locale/mcl_bows.pl.tr | 16 + mods/ITEMS/mcl_bows/mod.conf | 6 + mods/ITEMS/mcl_bows/models/mcl_bows_arrow.obj | 56 + .../sounds/mcl_bows_crossbow_drawback_0.ogg | Bin 13529 -> 0 bytes .../sounds/mcl_bows_crossbow_drawback_1.ogg | Bin 13401 -> 0 bytes .../sounds/mcl_bows_crossbow_drawback_2.ogg | Bin 10139 -> 0 bytes .../sounds/mcl_bows_crossbow_load.ogg | Bin 7627 -> 0 bytes .../sounds/mcl_bows_crossbow_shoot.ogg | Bin 9767 -> 0 bytes .../mcl_bows/textures/mcl_bows_arrow.png | Bin 173 -> 736 bytes .../mcl_bows/textures/mcl_bows_arrow_back.png | Bin 132 -> 212 bytes .../textures/mcl_bows_arrow_overlay.png | Bin 317 -> 3065 bytes .../mcl_bows/textures/mcl_bows_crossbow.png | Bin 558 -> 0 bytes .../mcl_bows/textures/mcl_bows_crossbow_0.png | Bin 600 -> 0 bytes .../mcl_bows/textures/mcl_bows_crossbow_1.png | Bin 594 -> 0 bytes .../mcl_bows/textures/mcl_bows_crossbow_2.png | Bin 565 -> 0 bytes .../mcl_bows/textures/mcl_bows_crossbow_3.png | Bin 576 -> 0 bytes mods/ITEMS/mcl_brewing/init.lua | 103 +- .../mcl_brewing/locale/mcl_brewing.pl.tr | 10 + mods/ITEMS/mcl_brewing/mod.conf | 3 +- mods/ITEMS/mcl_buckets/API.md | 54 + .../mcl_buckets/{README.txt => README.md} | 11 +- mods/ITEMS/mcl_buckets/depends.txt | 4 - mods/ITEMS/mcl_buckets/init.lua | 553 +- .../mcl_buckets/locale/mcl_buckets.pl.tr | 17 + mods/ITEMS/mcl_buckets/mod.conf | 6 + mods/ITEMS/mcl_buckets/register.lua | 117 + mods/ITEMS/mcl_cake/depends.txt | 7 - mods/ITEMS/mcl_cake/init.lua | 16 +- mods/ITEMS/mcl_cake/locale/mcl_cake.pl.tr | 12 + mods/ITEMS/mcl_cake/mod.conf | 3 + mods/ITEMS/mcl_cauldrons/depends.txt | 4 - mods/ITEMS/mcl_cauldrons/init.lua | 8 +- .../mcl_cauldrons/locale/mcl_cauldrons.de.tr | 4 +- .../mcl_cauldrons/locale/mcl_cauldrons.es.tr | 4 +- .../mcl_cauldrons/locale/mcl_cauldrons.pl.tr | 11 + .../mcl_cauldrons/locale/mcl_chaudrons.fr.tr | 2 +- .../mcl_cauldrons/locale/mcl_chaudrons.ru.tr | 2 +- mods/ITEMS/mcl_cauldrons/locale/template.txt | 2 +- mods/ITEMS/mcl_cauldrons/mod.conf | 2 + mods/ITEMS/mcl_chests/depends.txt | 8 - mods/ITEMS/mcl_chests/init.lua | 1155 ++-- mods/ITEMS/mcl_chests/locale/mcl_chests.pl.tr | 36 + mods/ITEMS/mcl_chests/mod.conf | 3 + .../mcl_chests/textures/mcl_chests_normal.png | Bin 689 -> 672 bytes .../textures/mcl_chests_normal_double.png | Bin 1031 -> 961 bytes .../textures/mcl_chests_trapped.png | Bin 1209 -> 674 bytes .../textures/mcl_chests_trapped_double.png | Bin 2011 -> 965 bytes mods/ITEMS/mcl_clock/depends.txt | 4 - mods/ITEMS/mcl_clock/description.txt | 1 - mods/ITEMS/mcl_clock/init.lua | 43 +- mods/ITEMS/mcl_clock/locale/mcl_clock.pl.tr | 5 + mods/ITEMS/mcl_clock/mod.conf | 3 + mods/ITEMS/mcl_cocoas/depends.txt | 3 - mods/ITEMS/mcl_cocoas/description.txt | 1 - mods/ITEMS/mcl_cocoas/init.lua | 10 +- mods/ITEMS/mcl_cocoas/locale/mcl_cocoas.pl.tr | 6 + mods/ITEMS/mcl_cocoas/mod.conf | 3 + mods/ITEMS/mcl_colorblocks/depends.txt | 5 - mods/ITEMS/mcl_colorblocks/description.txt | 1 - mods/ITEMS/mcl_colorblocks/init.lua | 18 +- .../locale/mcl_colorblocks.pl.tr | 76 + mods/ITEMS/mcl_colorblocks/mod.conf | 3 + mods/ITEMS/mcl_compass/depends.txt | 4 - mods/ITEMS/mcl_compass/description.txt | 1 - mods/ITEMS/mcl_compass/init.lua | 71 +- .../mcl_compass/locale/mcl_compass.de.tr | 2 +- .../mcl_compass/locale/mcl_compass.pl.tr | 4 + mods/ITEMS/mcl_compass/mod.conf | 3 + mods/ITEMS/mcl_core/crafting.lua | 297 +- mods/ITEMS/mcl_core/craftitems.lua | 7 +- mods/ITEMS/mcl_core/depends.txt | 8 - mods/ITEMS/mcl_core/description.txt | 1 - mods/ITEMS/mcl_core/functions.lua | 139 +- mods/ITEMS/mcl_core/init.lua | 15 +- mods/ITEMS/mcl_core/locale/mcl_core.de.tr | 30 +- mods/ITEMS/mcl_core/locale/mcl_core.es.tr | 2 +- mods/ITEMS/mcl_core/locale/mcl_core.fr.tr | 8 +- mods/ITEMS/mcl_core/locale/mcl_core.pl.tr | 277 + mods/ITEMS/mcl_core/locale/mcl_core.ru.tr | 2 +- mods/ITEMS/mcl_core/locale/template.txt | 27 +- mods/ITEMS/mcl_core/mod.conf | 3 + mods/ITEMS/mcl_core/nodes_base.lua | 78 +- mods/ITEMS/mcl_core/nodes_cactuscane.lua | 5 +- mods/ITEMS/mcl_core/nodes_climb.lua | 5 +- mods/ITEMS/mcl_core/nodes_glass.lua | 16 +- mods/ITEMS/mcl_core/nodes_liquid.lua | 30 +- mods/ITEMS/mcl_core/nodes_misc.lua | 23 +- mods/ITEMS/mcl_core/nodes_trees.lua | 95 +- .../mcl_core/textures/default_diamond.png | Bin 374 -> 167 bytes .../default_water_flowing_animated.png | Bin 601 -> 888 bytes .../mcl_core/textures/mcl_core_emerald.png | Bin 393 -> 149 bytes .../mcl_core_stripped_acacia_side.png | Bin 0 -> 2171 bytes .../textures/mcl_core_stripped_acacia_top.png | Bin 0 -> 2025 bytes .../textures/mcl_core_stripped_birch_side.png | Bin 0 -> 611 bytes .../textures/mcl_core_stripped_birch_top.png | Bin 0 -> 681 bytes .../mcl_core_stripped_dark_oak_side.png | Bin 0 -> 2007 bytes .../mcl_core_stripped_dark_oak_top.png | Bin 0 -> 695 bytes .../mcl_core_stripped_jungle_side.png | Bin 0 -> 650 bytes .../textures/mcl_core_stripped_jungle_top.png | Bin 0 -> 637 bytes .../textures/mcl_core_stripped_oak_side.png | Bin 0 -> 2130 bytes .../textures/mcl_core_stripped_oak_top.png | Bin 0 -> 729 bytes .../mcl_core_stripped_spruce_side.png | Bin 0 -> 2054 bytes .../textures/mcl_core_stripped_spruce_top.png | Bin 0 -> 733 bytes mods/ITEMS/mcl_crafting_table/API.md | 6 + mods/ITEMS/mcl_crafting_table/depends.txt | 3 - mods/ITEMS/mcl_crafting_table/description.txt | 1 - mods/ITEMS/mcl_crafting_table/init.lua | 57 +- .../locale/mcl_crafting_table.pl.tr | 8 + mods/ITEMS/mcl_crafting_table/mod.conf | 2 + mods/ITEMS/mcl_doors/api_doors.lua | 135 +- mods/ITEMS/mcl_doors/api_trapdoors.lua | 18 +- mods/ITEMS/mcl_doors/depends.txt | 5 - mods/ITEMS/mcl_doors/locale/mcl_doors.de.tr | 4 +- mods/ITEMS/mcl_doors/locale/mcl_doors.pl.tr | 24 + mods/ITEMS/mcl_doors/mod.conf | 2 + mods/ITEMS/mcl_doors/register.lua | 8 +- mods/ITEMS/mcl_dye/depends.txt | 4 - mods/ITEMS/mcl_dye/init.lua | 68 +- mods/ITEMS/mcl_dye/locale/mcl_dye.pl.tr | 27 + mods/ITEMS/mcl_dye/mod.conf | 1 + mods/ITEMS/mcl_enchanting/enchantments.lua | 186 +- mods/ITEMS/mcl_enchanting/engine.lua | 102 +- mods/ITEMS/mcl_enchanting/groupcaps.lua | 75 + mods/ITEMS/mcl_enchanting/init.lua | 26 +- .../locale/mcl_enchanting.de.tr | 10 +- .../locale/mcl_enchanting.fr.tr | 54 +- .../locale/mcl_enchanting.pl.tr | 100 + .../locale/mcl_enchanting.ru.tr | 100 + mods/ITEMS/mcl_enchanting/locale/template.txt | 4 +- mods/ITEMS/mcl_enchanting/mod.conf | 2 +- mods/ITEMS/mcl_end/building.lua | 16 +- mods/ITEMS/mcl_end/chorus_plant.lua | 38 +- mods/ITEMS/mcl_end/depends.txt | 5 - mods/ITEMS/mcl_end/end_crystal.lua | 89 +- mods/ITEMS/mcl_end/eye_of_ender.lua | 4 +- mods/ITEMS/mcl_end/locale/mcl_end.pl.tr | 33 + mods/ITEMS/mcl_end/mod.conf | 2 + .../mcl_end/textures/mcl_end_crystal_beam.png | Bin 0 -> 2065 bytes mods/ITEMS/mcl_farming/beetroot.lua | 2 +- mods/ITEMS/mcl_farming/carrots.lua | 18 +- mods/ITEMS/mcl_farming/depends.txt | 8 - mods/ITEMS/mcl_farming/hoes.lua | 32 +- .../mcl_farming/locale/mcl_farming.pl.tr | 100 + mods/ITEMS/mcl_farming/melon.lua | 20 +- mods/ITEMS/mcl_farming/mod.conf | 2 + mods/ITEMS/mcl_farming/potatoes.lua | 16 +- mods/ITEMS/mcl_farming/pumpkin.lua | 60 +- mods/ITEMS/mcl_farming/shared_functions.lua | 32 +- mods/ITEMS/mcl_farming/soil.lua | 6 +- .../textures/mcl_farming_pumpkin_face.png | Bin 628 -> 303 bytes .../textures/mcl_farming_pumpkin_hud.png | Bin 0 -> 20377 bytes mods/ITEMS/mcl_farming/wheat.lua | 53 +- mods/ITEMS/mcl_fences/depends.txt | 4 - mods/ITEMS/mcl_fences/init.lua | 24 +- mods/ITEMS/mcl_fences/locale/mcl_fences.de.tr | 2 +- mods/ITEMS/mcl_fences/locale/mcl_fences.pl.tr | 19 + mods/ITEMS/mcl_fences/mod.conf | 2 + mods/ITEMS/mcl_fire/depends.txt | 5 - mods/ITEMS/mcl_fire/fire_charge.lua | 24 +- mods/ITEMS/mcl_fire/flint_and_steel.lua | 24 +- mods/ITEMS/mcl_fire/init.lua | 155 +- mods/ITEMS/mcl_fire/locale/mcl_fire.pl.tr | 19 + mods/ITEMS/mcl_fire/mod.conf | 2 + mods/ITEMS/mcl_fireworks/README.txt | 7 + mods/ITEMS/mcl_fireworks/crafting.lua | 17 + mods/ITEMS/mcl_fireworks/init.lua | 4 + .../mcl_fireworks/locale/mcl_fireworks.de.tr | 3 + .../mcl_fireworks/locale/mcl_fireworks.es.tr | 3 + .../mcl_fireworks/locale/mcl_fireworks.fr.tr | 3 + .../mcl_fireworks/locale/mcl_fireworks.pl.tr | 4 + .../mcl_fireworks/locale/mcl_fireworks.ru.tr | 3 + mods/ITEMS/mcl_fireworks/locale/template.txt | 3 + mods/ITEMS/mcl_fireworks/mod.conf | 2 + mods/ITEMS/mcl_fireworks/register.lua | 28 + .../sounds/mcl_fireworks_rocket.ogg | Bin 0 -> 92125 bytes .../textures/mcl_fireworks_rocket.png | Bin 0 -> 356 bytes mods/ITEMS/mcl_fishing/depends.txt | 5 - mods/ITEMS/mcl_fishing/description.txt | 1 - mods/ITEMS/mcl_fishing/init.lua | 75 +- .../mcl_fishing/locale/mcl_fishing.de.tr | 6 +- .../mcl_fishing/locale/mcl_fishing.pl.tr | 18 + mods/ITEMS/mcl_fishing/mod.conf | 2 + mods/ITEMS/mcl_flowerpots/depends.txt | 5 - mods/ITEMS/mcl_flowerpots/init.lua | 316 +- .../locale/mcl_flowerpots.de.tr | 2 +- .../locale/mcl_flowerpots.es.tr | 4 +- .../locale/mcl_flowerpots.pl.tr | 27 + mods/ITEMS/mcl_flowerpots/mod.conf | 3 + mods/ITEMS/mcl_flowers/API.md | 9 + mods/ITEMS/mcl_flowers/depends.txt | 5 - mods/ITEMS/mcl_flowers/init.lua | 117 +- .../mcl_flowers/locale/mcl_flowers.de.tr | 4 +- .../mcl_flowers/locale/mcl_flowers.pl.tr | 32 + mods/ITEMS/mcl_flowers/mod.conf | 3 + mods/ITEMS/mcl_flowers/register.lua | 62 + mods/ITEMS/mcl_furnaces/depends.txt | 9 - mods/ITEMS/mcl_furnaces/init.lua | 63 +- .../mcl_furnaces/locale/mcl_furnaces.pl.tr | 9 + mods/ITEMS/mcl_furnaces/mod.conf | 2 + mods/ITEMS/mcl_heads/depends.txt | 4 - mods/ITEMS/mcl_heads/description.txt | 1 - mods/ITEMS/mcl_heads/init.lua | 17 +- mods/ITEMS/mcl_heads/locale/mcl_heads.pl.tr | 11 + mods/ITEMS/mcl_heads/mod.conf | 3 + .../mcl_heads/textures/mcl_heads_steve.png | Bin 311 -> 970 bytes .../textures/mcl_heads_steve_node.png | Bin 626 -> 1852 bytes mods/ITEMS/mcl_hoppers/depends.txt | 6 - mods/ITEMS/mcl_hoppers/description.txt | 1 - mods/ITEMS/mcl_hoppers/init.lua | 15 +- .../mcl_hoppers/locale/mcl_hoppers.pl.tr | 16 + mods/ITEMS/mcl_hoppers/mod.conf | 4 + mods/ITEMS/mcl_itemframes/depends.txt | 3 - mods/ITEMS/mcl_itemframes/init.lua | 115 +- .../locale/mcl_itemframes.pl.tr | 5 + mods/ITEMS/mcl_itemframes/mod.conf | 3 + mods/ITEMS/mcl_jukebox/API.md | 18 + mods/ITEMS/mcl_jukebox/depends.txt | 2 - mods/ITEMS/mcl_jukebox/description.txt | 1 - mods/ITEMS/mcl_jukebox/init.lua | 109 +- .../mcl_jukebox/locale/mcl_jukebox.pl.tr | 11 + mods/ITEMS/mcl_jukebox/mod.conf | 2 + mods/ITEMS/mcl_maps/colors.json | 1 + mods/ITEMS/mcl_maps/init.lua | 406 +- 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 | 10 +- mods/ITEMS/mcl_maps/locale/mcl_maps.pl.tr | 8 + mods/ITEMS/mcl_maps/locale/mcl_maps.ru.tr | 5 - mods/ITEMS/mcl_maps/locale/template.txt | 10 +- mods/ITEMS/mcl_maps/mod.conf | 1 + mods/ITEMS/mcl_maps/palettes.json | 1 + .../textures/mcl_maps_map_background.png | Bin 0 -> 1565 bytes .../textures/mcl_maps_player_arrow.png | Bin 0 -> 1528 bytes .../mcl_maps/textures/mcl_maps_player_dot.png | Bin 0 -> 3101 bytes mods/ITEMS/mcl_mobitems/depends.txt | 2 - mods/ITEMS/mcl_mobitems/init.lua | 17 +- .../mcl_mobitems/locale/mcl_mobitems.de.tr | 2 +- .../mcl_mobitems/locale/mcl_mobitems.fr.tr | 2 +- .../mcl_mobitems/locale/mcl_mobitems.pl.tr | 96 + mods/ITEMS/mcl_mobitems/mod.conf | 1 + mods/ITEMS/mcl_mobspawners/depends.txt | 2 - mods/ITEMS/mcl_mobspawners/init.lua | 17 +- .../locale/mcl_mobspawners.pl.tr | 5 + mods/ITEMS/mcl_mobspawners/mod.conf | 1 + mods/ITEMS/mcl_monster_eggs/depends.txt | 2 - mods/ITEMS/mcl_monster_eggs/description.txt | 1 - mods/ITEMS/mcl_monster_eggs/init.lua | 14 +- .../locale/mcl_monster_eggs.pl.tr | 9 + mods/ITEMS/mcl_monster_eggs/mod.conf | 3 + mods/ITEMS/mcl_mushrooms/depends.txt | 3 - mods/ITEMS/mcl_mushrooms/huge.lua | 18 +- .../mcl_mushrooms/locale/mcl_mushrooms.pl.tr | 24 + mods/ITEMS/mcl_mushrooms/mod.conf | 2 + mods/ITEMS/mcl_mushrooms/small.lua | 5 +- mods/ITEMS/mcl_nether/depends.txt | 8 - mods/ITEMS/mcl_nether/init.lua | 67 +- mods/ITEMS/mcl_nether/lava.lua | 10 +- mods/ITEMS/mcl_nether/locale/mcl_nether.de.tr | 2 - mods/ITEMS/mcl_nether/locale/mcl_nether.fr.tr | 14 +- mods/ITEMS/mcl_nether/locale/mcl_nether.pl.tr | 40 + mods/ITEMS/mcl_nether/locale/mcl_nether.ru.tr | 2 - mods/ITEMS/mcl_nether/locale/template.txt | 4 +- mods/ITEMS/mcl_nether/mod.conf | 2 + mods/ITEMS/mcl_nether/nether_wart.lua | 6 +- mods/ITEMS/mcl_ocean/corals.lua | 5 +- mods/ITEMS/mcl_ocean/depends.txt | 6 - mods/ITEMS/mcl_ocean/description.txt | 1 - mods/ITEMS/mcl_ocean/init.lua | 2 + mods/ITEMS/mcl_ocean/kelp.lua | 943 ++- mods/ITEMS/mcl_ocean/locale/mcl_ocean.pl.tr | 60 + mods/ITEMS/mcl_ocean/mod.conf | 2 + mods/ITEMS/mcl_ocean/prismarine.lua | 36 +- mods/ITEMS/mcl_ocean/sea_pickle.lua | 7 +- mods/ITEMS/mcl_ocean/seagrass.lua | 9 +- mods/ITEMS/mcl_portals/depends.txt | 9 - mods/ITEMS/mcl_portals/description.txt | 1 - mods/ITEMS/mcl_portals/init.lua | 12 +- .../mcl_portals/locale/mcl_portals.pl.tr | 15 + mods/ITEMS/mcl_portals/mod.conf | 3 + mods/ITEMS/mcl_portals/portal_end.lua | 39 +- mods/ITEMS/mcl_portals/portal_gateway.lua | 121 + mods/ITEMS/mcl_portals/portal_nether.lua | 1063 ++- mods/ITEMS/mcl_potions/commands.lua | 2 +- mods/ITEMS/mcl_potions/functions.lua | 108 +- mods/ITEMS/mcl_potions/init.lua | 48 +- mods/ITEMS/mcl_potions/lingering.lua | 9 +- .../mcl_potions/locale/mcl_potions.de.tr | 15 - .../mcl_potions/locale/mcl_potions.pl.tr | 115 + mods/ITEMS/mcl_potions/mod.conf | 2 +- mods/ITEMS/mcl_potions/potions.lua | 70 +- mods/ITEMS/mcl_potions/splash.lua | 11 +- mods/ITEMS/mcl_potions/tipped_arrow.lua | 75 +- mods/ITEMS/mcl_signs/depends.txt | 3 - mods/ITEMS/mcl_signs/init.lua | 49 +- mods/ITEMS/mcl_signs/locale/mcl_signs.pl.tr | 9 + mods/ITEMS/mcl_signs/mod.conf | 1 + mods/ITEMS/mcl_sponges/depends.txt | 3 - mods/ITEMS/mcl_sponges/description.txt | 1 - mods/ITEMS/mcl_sponges/init.lua | 52 +- .../mcl_sponges/locale/mcl_sponges.pl.tr | 10 + mods/ITEMS/mcl_sponges/mod.conf | 3 + mods/ITEMS/mcl_stairs/api.lua | 14 +- mods/ITEMS/mcl_stairs/cornerstair.lua | 16 +- mods/ITEMS/mcl_stairs/crafting.lua | 30 +- mods/ITEMS/mcl_stairs/depends.txt | 5 - mods/ITEMS/mcl_stairs/init.lua | 12 +- mods/ITEMS/mcl_stairs/locale/mcl_stairs.fr.tr | 6 +- mods/ITEMS/mcl_stairs/locale/mcl_stairs.pl.tr | 101 + mods/ITEMS/mcl_stairs/mod.conf | 1 + mods/ITEMS/mcl_stairs/register.lua | 2 +- mods/ITEMS/mcl_throwing/API.md | 41 + mods/ITEMS/mcl_throwing/depends.txt | 4 - mods/ITEMS/mcl_throwing/init.lua | 410 +- .../mcl_throwing/locale/mcl_throwing.pl.tr | 12 + mods/ITEMS/mcl_throwing/mod.conf | 2 + mods/ITEMS/mcl_throwing/register.lua | 337 + mods/ITEMS/mcl_tnt/depends.txt | 7 - mods/ITEMS/mcl_tnt/init.lua | 21 +- mods/ITEMS/mcl_tnt/locale/mcl_tnt.pl.tr | 8 + mods/ITEMS/mcl_tnt/mod.conf | 2 + mods/ITEMS/mcl_tools/crafting.lua | 212 +- mods/ITEMS/mcl_tools/depends.txt | 2 - mods/ITEMS/mcl_tools/init.lua | 284 +- mods/ITEMS/mcl_tools/locale/mcl_tools.pl.tr | 33 + mods/ITEMS/mcl_tools/mod.conf | 1 + mods/ITEMS/mcl_tools/textures/wieldhand.png | Bin 170 -> 0 bytes mods/ITEMS/mcl_torches/api.lua | 267 + mods/ITEMS/mcl_torches/depends.txt | 4 - mods/ITEMS/mcl_torches/description.txt | 1 - mods/ITEMS/mcl_torches/init.lua | 336 +- .../mcl_torches/locale/mcl_torches.pl.tr | 3 + mods/ITEMS/mcl_torches/mod.conf | 3 + mods/ITEMS/mcl_torches/register.lua | 27 + mods/ITEMS/mcl_torches/screenshot.png | Bin 36243 -> 0 bytes mods/ITEMS/mcl_totems/depends.txt | 1 - mods/ITEMS/mcl_totems/init.lua | 61 +- mods/ITEMS/mcl_totems/mod.conf | 2 + mods/ITEMS/mcl_walls/depends.txt | 6 - mods/ITEMS/mcl_walls/init.lua | 20 +- mods/ITEMS/mcl_walls/locale/mcl_walls.fr.tr | 2 +- mods/ITEMS/mcl_walls/locale/mcl_walls.pl.tr | 17 + mods/ITEMS/mcl_walls/mod.conf | 3 + mods/ITEMS/mcl_walls/register.lua | 2 +- mods/ITEMS/mcl_wool/depends.txt | 2 - mods/ITEMS/mcl_wool/init.lua | 10 +- mods/ITEMS/mcl_wool/locale/mcl_wool.de.tr | 2 +- mods/ITEMS/mcl_wool/locale/mcl_wool.pl.tr | 37 + mods/ITEMS/mcl_wool/mod.conf | 2 + mods/ITEMS/mclx_core/depends.txt | 2 - mods/ITEMS/mclx_core/description.txt | 1 - mods/ITEMS/mclx_core/init.lua | 2 +- mods/ITEMS/mclx_core/locale/mclx_core.pl.tr | 5 + mods/ITEMS/mclx_core/mod.conf | 3 + mods/ITEMS/mclx_fences/depends.txt | 1 - mods/ITEMS/mclx_fences/description.txt | 1 - mods/ITEMS/mclx_fences/init.lua | 10 +- .../mclx_fences/locale/mclx_fences.pl.tr | 4 + mods/ITEMS/mclx_fences/mod.conf | 2 + mods/ITEMS/mclx_stairs/depends.txt | 8 - mods/ITEMS/mclx_stairs/description.txt | 1 - mods/ITEMS/mclx_stairs/init.lua | 2 +- .../mclx_stairs/locale/mclx_stairs.pl.tr | 82 + mods/ITEMS/mclx_stairs/mod.conf | 3 + mods/ITEMS/screwdriver/init.lua | 21 +- .../screwdriver/locale/screwdriver.de.tr | 2 +- .../screwdriver/locale/screwdriver.pl.tr | 2 + mods/ITEMS/screwdriver/mod.conf | 2 + mods/ITEMS/xpanes/depends.txt | 3 - mods/ITEMS/xpanes/init.lua | 10 +- mods/ITEMS/xpanes/locale/xpanes.pl.tr | 23 + mods/ITEMS/xpanes/mod.conf | 3 + mods/MAPGEN/mcl_biomes/depends.txt | 7 - mods/MAPGEN/mcl_biomes/description.txt | 1 - mods/MAPGEN/mcl_biomes/init.lua | 228 +- mods/MAPGEN/mcl_biomes/mod.conf | 4 + mods/MAPGEN/mcl_dungeons/depends.txt | 7 - mods/MAPGEN/mcl_dungeons/description.txt | 1 - mods/MAPGEN/mcl_dungeons/init.lua | 747 +-- mods/MAPGEN/mcl_dungeons/mod.conf | 3 + mods/MAPGEN/mcl_end_island/init.lua | 34 + mods/MAPGEN/mcl_end_island/mod.conf | 4 + mods/MAPGEN/mcl_mapgen_core/depends.txt | 11 - mods/MAPGEN/mcl_mapgen_core/init.lua | 1370 ++-- mods/MAPGEN/mcl_mapgen_core/mod.conf | 4 + mods/MAPGEN/mcl_strongholds/depends.txt | 3 - mods/MAPGEN/mcl_strongholds/description.txt | 1 - mods/MAPGEN/mcl_strongholds/init.lua | 20 +- mods/MAPGEN/mcl_strongholds/mod.conf | 3 + mods/MAPGEN/mcl_structures/depends.txt | 1 - mods/MAPGEN/mcl_structures/init.lua | 426 +- .../locale/mcl_structures.pl.tr | 8 + mods/MAPGEN/mcl_structures/mod.conf | 3 + .../mcl_structures_end_gateway_portal.mts | Bin 0 -> 109 bytes mods/MAPGEN/mcl_villages/buildings.lua | 193 +- mods/MAPGEN/mcl_villages/const.lua | 24 +- mods/MAPGEN/mcl_villages/depends.txt | 5 - mods/MAPGEN/mcl_villages/foundation.lua | 19 +- mods/MAPGEN/mcl_villages/init.lua | 42 +- mods/MAPGEN/mcl_villages/mod.conf | 5 + mods/MAPGEN/mcl_villages/paths.lua | 14 +- mods/MAPGEN/mcl_villages/utils.lua | 179 +- mods/MAPGEN/tsm_railcorridors/depends.txt | 8 - mods/MAPGEN/tsm_railcorridors/description.txt | 1 - mods/MAPGEN/tsm_railcorridors/gameconfig.lua | 4 +- mods/MAPGEN/tsm_railcorridors/init.lua | 36 +- mods/MAPGEN/tsm_railcorridors/mod.conf | 3 + mods/MISC/findbiome/init.lua | 8 +- mods/MISC/findbiome/locale/findbiome.pl.tr | 10 + mods/MISC/findbiome/mod.conf | 7 +- mods/MISC/mcl_commands/alias.lua | 30 + mods/MISC/mcl_commands/depends.txt | 1 - mods/MISC/mcl_commands/init.lua | 170 +- mods/MISC/mcl_commands/kill.lua | 49 + mods/MISC/mcl_commands/list.lua | 14 + .../mcl_commands/locale/mcl_commands.pl.tr | 23 + mods/MISC/mcl_commands/mod.conf | 3 + mods/MISC/mcl_commands/say.lua | 18 + mods/MISC/mcl_commands/seed.lua | 10 + mods/MISC/mcl_commands/setblock.lua | 22 + mods/MISC/mcl_commands/sound.lua | 43 + mods/MISC/mcl_commands/summon.lua | 15 + mods/MISC/mcl_privs/description.txt | 1 - mods/MISC/mcl_privs/init.lua | 26 +- mods/MISC/mcl_privs/locale/mcl_privs.pl.tr | 2 + mods/MISC/mcl_privs/mod.conf | 4 + mods/MISC/mcl_temp_helper_recipes/depends.txt | 7 - mods/MISC/mcl_temp_helper_recipes/init.lua | 41 +- mods/MISC/mcl_temp_helper_recipes/mod.conf | 5 + mods/MISC/mcl_wip/API.md | 16 + mods/MISC/mcl_wip/depends.txt | 10 - mods/MISC/mcl_wip/description.txt | 1 - mods/MISC/mcl_wip/init.lua | 102 +- mods/MISC/mcl_wip/locale/mcl_wip.pl.tr | 4 + mods/MISC/mcl_wip/mod.conf | 3 + mods/PLAYER/mcl_criticals/init.lua | 30 + mods/PLAYER/mcl_criticals/mod.conf | 2 + .../sounds/mcl_criticals_hit.0.ogg | Bin 0 -> 10932 bytes .../sounds/mcl_criticals_hit.1.ogg | Bin 0 -> 12936 bytes .../sounds/mcl_criticals_hit.2.ogg | Bin 0 -> 10130 bytes mods/PLAYER/mcl_death_drop/API.md | 14 + mods/PLAYER/mcl_death_drop/depends.txt | 2 - mods/PLAYER/mcl_death_drop/description.txt | 1 - mods/PLAYER/mcl_death_drop/init.lua | 50 +- mods/PLAYER/mcl_death_drop/mod.conf | 3 + mods/PLAYER/mcl_hunger/api.lua | 7 +- mods/PLAYER/mcl_hunger/depends.txt | 2 - mods/PLAYER/mcl_hunger/description.txt | 1 - mods/PLAYER/mcl_hunger/hunger.lua | 55 +- mods/PLAYER/mcl_hunger/init.lua | 37 +- .../PLAYER/mcl_hunger/locale/mcl_hunger.pl.tr | 9 + mods/PLAYER/mcl_hunger/mod.conf | 3 + mods/PLAYER/mcl_hunger/screenshot.png | Bin 8498 -> 0 bytes .../mcl_hunger/textures/hbhunger_bgicon.png | Bin 114 -> 170 bytes .../mcl_hunger/textures/hbhunger_icon.png | Bin 142 -> 209 bytes .../textures/mcl_hunger_icon_foodpoison.png | Bin 141 -> 218 bytes mods/PLAYER/mcl_meshhand/depends.txt | 2 - mods/PLAYER/mcl_meshhand/description.txt | 1 - mods/PLAYER/mcl_meshhand/init.lua | 36 +- mods/PLAYER/mcl_meshhand/mod.conf | 5 + .../models/mcl_meshhand_female.b3d | Bin 0 -> 789 bytes .../models/mcl_meshhand_female.blend | Bin 0 -> 649436 bytes mods/PLAYER/mcl_player/init.lua | 139 +- mods/PLAYER/mcl_player/mod.conf | 3 + mods/PLAYER/mcl_player_init/mod.conf | 1 + mods/PLAYER/mcl_playerinfo/depends.txt | 4 - mods/PLAYER/mcl_playerinfo/init.lua | 184 +- mods/PLAYER/mcl_playerinfo/mod.conf | 3 + mods/PLAYER/mcl_playerplus/depends.txt | 10 - mods/PLAYER/mcl_playerplus/description.txt | 1 - mods/PLAYER/mcl_playerplus/init.lua | 410 +- .../locale/mcl_playerplus.de.tr | 3 - .../locale/mcl_playerplus.es.tr | 3 - .../locale/mcl_playerplus.fr.tr | 3 - .../locale/mcl_playerplus.pl.tr | 3 + .../locale/mcl_playerplus.ru.tr | 3 - .../PLAYER/mcl_playerplus/locale/template.txt | 3 - mods/PLAYER/mcl_playerplus/mod.conf | 4 + mods/PLAYER/mcl_skins/depends.txt | 4 - mods/PLAYER/mcl_skins/description.txt | 1 - mods/PLAYER/mcl_skins/init.lua | 47 +- mods/PLAYER/mcl_skins/intllib.lua | 45 - mods/PLAYER/mcl_skins/locale/mcl_skins.pl.tr | 13 + .../mcl_skins/meta/mcl_skins_character.txt | 1 + .../mcl_skins/meta/mcl_skins_character_1.txt | 1 + mods/PLAYER/mcl_skins/mod.conf | 4 + mods/PLAYER/mcl_spawn/depends.txt | 1 - mods/PLAYER/mcl_spawn/description.txt | 1 - mods/PLAYER/mcl_spawn/init.lua | 43 +- mods/PLAYER/mcl_spawn/locale/mcl_spawn.pl.tr | 5 + mods/PLAYER/mcl_spawn/mod.conf | 3 + mods/PLAYER/mcl_sprint/depends.txt | 3 - mods/PLAYER/mcl_sprint/init.lua | 99 +- mods/PLAYER/mcl_sprint/mod.conf | 3 + .../{wieldview => mcl_wieldview}/LICENSE.txt | 0 .../{wieldview => mcl_wieldview}/README.txt | 0 mods/PLAYER/mcl_wieldview/init.lua | 122 + mods/PLAYER/mcl_wieldview/mod.conf | 4 + mods/PLAYER/playerphysics/description.txt | 1 - mods/PLAYER/playerphysics/mod.conf | 2 + mods/PLAYER/wieldview/depends.txt | 1 - mods/PLAYER/wieldview/description.txt | 1 - mods/PLAYER/wieldview/init.lua | 82 - mods/PLAYER/wieldview/transform.lua | 42 - settingtypes.txt | 32 +- tools/README.md | 14 + tools/Texture_Converter.py | 5 + tools/create_luacheck.py | 44 + tools/create_map_color_file.py | 59 + tools/dicts/polish.dic | 176 + tools/remove_end.py | 46 + tools/spell_check_translate_files.py | 60 + 1054 files changed, 31907 insertions(+), 17671 deletions(-) create mode 100644 CREDITS.md create mode 100644 LEGAL.md delete mode 100644 MISSING_ENGINE_FEATURES.md create mode 100644 menu/Header.blend delete mode 100644 mods/CORE/_mcl_autogroup/depends.txt delete mode 100644 mods/CORE/_mcl_autogroup/description.txt create mode 100644 mods/CORE/controls/API.md create mode 100644 mods/CORE/flowlib/API.md delete mode 100644 mods/CORE/mcl_attached/description.txt create mode 100644 mods/CORE/mcl_attached/mod.conf create mode 100644 mods/CORE/mcl_autogroup/API.md create mode 100644 mods/CORE/mcl_autogroup/init.lua create mode 100644 mods/CORE/mcl_autogroup/mod.conf create mode 100644 mods/CORE/mcl_colors/API.md create mode 100644 mods/CORE/mcl_colors/init.lua create mode 100644 mods/CORE/mcl_colors/mod.conf create mode 100644 mods/CORE/mcl_damage/init.lua create mode 100644 mods/CORE/mcl_damage/mod.conf create mode 100644 mods/CORE/mcl_explosions/API.md delete mode 100644 mods/CORE/mcl_explosions/locale/mcl_explosions.de.tr delete mode 100644 mods/CORE/mcl_explosions/locale/mcl_explosions.fr.tr create mode 100644 mods/CORE/mcl_explosions/locale/mcl_explosions.pl.tr delete mode 100644 mods/CORE/mcl_explosions/locale/mcl_explosions.ru.tr delete mode 100644 mods/CORE/mcl_explosions/locale/template.txt delete mode 100644 mods/CORE/mcl_init/description.txt delete mode 100644 mods/CORE/mcl_loot/description.txt delete mode 100644 mods/CORE/mcl_particles/description.txt create mode 100644 mods/CORE/mcl_particles/textures/mcl_particles_bonemeal.png create mode 100644 mods/CORE/mcl_particles/textures/mcl_particles_sponge1.png create mode 100644 mods/CORE/mcl_particles/textures/mcl_particles_sponge2.png create mode 100644 mods/CORE/mcl_particles/textures/mcl_particles_sponge3.png create mode 100644 mods/CORE/mcl_particles/textures/mcl_particles_sponge4.png create mode 100644 mods/CORE/mcl_particles/textures/mcl_particles_sponge5.png delete mode 100644 mods/CORE/mcl_sounds/description.txt delete mode 100644 mods/CORE/mcl_util/depends.txt delete mode 100644 mods/CORE/mcl_util/description.txt create mode 100644 mods/CORE/mcl_worlds/API.md delete mode 100644 mods/CORE/mcl_worlds/depends.txt delete mode 100644 mods/CORE/mcl_worlds/description.txt create mode 100644 mods/CORE/mcl_worlds/mod.conf 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/CORE/walkover/mod.conf delete mode 100644 mods/ENTITIES/drippingwater/depends.txt create mode 100644 mods/ENTITIES/drippingwater/mod.conf delete mode 100644 mods/ENTITIES/mcl_boats/depends.txt delete mode 100644 mods/ENTITIES/mcl_boats/description.txt create mode 100644 mods/ENTITIES/mcl_boats/locale/mcl_boats.pl.tr create mode 100644 mods/ENTITIES/mcl_burning/api.lua delete mode 100644 mods/ENTITIES/mcl_burning/engine.lua delete mode 100644 mods/ENTITIES/mcl_falling_nodes/description.txt delete mode 100644 mods/ENTITIES/mcl_falling_nodes/locale/mcl_falling_nodes.de.tr delete mode 100644 mods/ENTITIES/mcl_falling_nodes/locale/mcl_falling_nodes.es.tr delete mode 100644 mods/ENTITIES/mcl_falling_nodes/locale/mcl_falling_nodes.fr.tr create mode 100644 mods/ENTITIES/mcl_falling_nodes/locale/mcl_falling_nodes.pl.tr delete mode 100644 mods/ENTITIES/mcl_falling_nodes/locale/mcl_falling_nodes.ru.tr delete mode 100644 mods/ENTITIES/mcl_falling_nodes/locale/template.txt delete mode 100644 mods/ENTITIES/mcl_item_entity/depends.txt delete mode 100644 mods/ENTITIES/mcl_item_entity/description.txt create mode 100644 mods/ENTITIES/mcl_item_entity/sounds/Attributes.txt delete mode 100644 mods/ENTITIES/mcl_item_entity/sounds/item_drop_pickup.1.ogg delete mode 100644 mods/ENTITIES/mcl_item_entity/sounds/item_drop_pickup.2.ogg delete mode 100644 mods/ENTITIES/mcl_item_entity/sounds/item_drop_pickup.3.ogg delete mode 100644 mods/ENTITIES/mcl_item_entity/sounds/item_drop_pickup.4.ogg create mode 100644 mods/ENTITIES/mcl_item_entity/sounds/item_drop_pickup.ogg delete mode 100644 mods/ENTITIES/mcl_minecarts/depends.txt delete mode 100644 mods/ENTITIES/mcl_minecarts/description.txt create mode 100644 mods/ENTITIES/mcl_minecarts/locale/mcl_minecarts.pl.tr rename mods/ENTITIES/mcl_mobs/{readme.MD => README.md} (100%) create mode 100644 mods/ENTITIES/mcl_mobs/api/api.lua create mode 100644 mods/ENTITIES/mcl_mobs/api/mob_functions/ai.lua create mode 100644 mods/ENTITIES/mcl_mobs/api/mob_functions/animation.lua create mode 100644 mods/ENTITIES/mcl_mobs/api/mob_functions/attack_type_instructions.lua rename mods/ENTITIES/mcl_mobs/{api.lua => api/mob_functions/backup_code_api.txt} (50%) create mode 100644 mods/ENTITIES/mcl_mobs/api/mob_functions/breeding.lua create mode 100644 mods/ENTITIES/mcl_mobs/api/mob_functions/collision.lua create mode 100644 mods/ENTITIES/mcl_mobs/api/mob_functions/death_logic.lua create mode 100644 mods/ENTITIES/mcl_mobs/api/mob_functions/environment.lua create mode 100644 mods/ENTITIES/mcl_mobs/api/mob_functions/flow_lib.lua create mode 100644 mods/ENTITIES/mcl_mobs/api/mob_functions/head_logic.lua create mode 100644 mods/ENTITIES/mcl_mobs/api/mob_functions/interaction.lua create mode 100644 mods/ENTITIES/mcl_mobs/api/mob_functions/mob_effects.lua create mode 100644 mods/ENTITIES/mcl_mobs/api/mob_functions/movement.lua create mode 100644 mods/ENTITIES/mcl_mobs/api/mob_functions/projectile_handling.lua create mode 100644 mods/ENTITIES/mcl_mobs/api/mob_functions/set_up.lua create mode 100644 mods/ENTITIES/mcl_mobs/api/mob_functions/sound_handling.lua rename mods/ENTITIES/mcl_mobs/{ => api}/mount.lua (86%) create mode 100644 mods/ENTITIES/mcl_mobs/api/spawning.lua delete mode 100644 mods/ENTITIES/mcl_mobs/description.txt create mode 100644 mods/ENTITIES/mcl_mobs/locale/mcl_mobs.pl.tr delete mode 100644 mods/ENTITIES/mcl_mobs/lucky_block.lua create mode 100644 mods/ENTITIES/mcl_mobs/sounds/attributes.txt create mode 100644 mods/ENTITIES/mcl_mobs/sounds/default_punch.1.ogg create mode 100644 mods/ENTITIES/mcl_mobs/sounds/default_punch.2.ogg create mode 100644 mods/ENTITIES/mcl_mobs/sounds/default_punch.3.ogg delete mode 100644 mods/ENTITIES/mcl_mobs/sounds/default_punch.ogg create mode 100644 mods/ENTITIES/mcl_mobs/todo.txt create mode 100644 mods/ENTITIES/mcl_paintings/locale/mcl_paintings.pl.tr delete mode 100644 mods/ENTITIES/mobs_mc/description.txt create mode 100644 mods/ENTITIES/mobs_mc/locale/mobs_mc.pl.tr create mode 100644 mods/ENTITIES/mobs_mc/models/attributes.txt create mode 100644 mods/ENTITIES/mobs_mc/sounds/mobs_mc_villager.1.ogg create mode 100644 mods/ENTITIES/mobs_mc/sounds/mobs_mc_villager.2.ogg create mode 100644 mods/ENTITIES/mobs_mc/sounds/mobs_mc_villager.3.ogg create mode 100644 mods/ENTITIES/mobs_mc/sounds/mobs_mc_villager.4.ogg create mode 100644 mods/ENTITIES/mobs_mc/sounds/mobs_mc_villager.5.ogg create mode 100644 mods/ENTITIES/mobs_mc/sounds/mobs_mc_villager.6.ogg create mode 100644 mods/ENTITIES/mobs_mc/sounds/mobs_mc_villager_hurt.1.ogg create mode 100644 mods/ENTITIES/mobs_mc/textures/mobs_mc_ghast_firing.png delete mode 100644 mods/ENTITIES/mobs_mc/textures/mobs_mc_horse_zombie.png create mode 100644 mods/ENTITIES/mobs_mc/textures/mobs_mc_llama_chest.png create mode 100644 mods/ENTITIES/mobs_mc/textures/mobs_mc_llama_decor_black.png create mode 100644 mods/ENTITIES/mobs_mc/textures/mobs_mc_llama_decor_blue.png create mode 100644 mods/ENTITIES/mobs_mc/textures/mobs_mc_llama_decor_brown.png create mode 100644 mods/ENTITIES/mobs_mc/textures/mobs_mc_llama_decor_cyan.png create mode 100644 mods/ENTITIES/mobs_mc/textures/mobs_mc_llama_decor_gray.png create mode 100644 mods/ENTITIES/mobs_mc/textures/mobs_mc_llama_decor_green.png create mode 100644 mods/ENTITIES/mobs_mc/textures/mobs_mc_llama_decor_light_blue.png create mode 100644 mods/ENTITIES/mobs_mc/textures/mobs_mc_llama_decor_light_gray.png create mode 100644 mods/ENTITIES/mobs_mc/textures/mobs_mc_llama_decor_lime.png create mode 100644 mods/ENTITIES/mobs_mc/textures/mobs_mc_llama_decor_magenta.png create mode 100644 mods/ENTITIES/mobs_mc/textures/mobs_mc_llama_decor_orange.png create mode 100644 mods/ENTITIES/mobs_mc/textures/mobs_mc_llama_decor_pink.png create mode 100644 mods/ENTITIES/mobs_mc/textures/mobs_mc_llama_decor_purple.png create mode 100644 mods/ENTITIES/mobs_mc/textures/mobs_mc_llama_decor_red.png create mode 100644 mods/ENTITIES/mobs_mc/textures/mobs_mc_llama_decor_white.png create mode 100644 mods/ENTITIES/mobs_mc/textures/mobs_mc_llama_decor_yellow.png create mode 100644 mods/ENTITIES/mobs_mc/textures/mobs_mc_spawn_icon_rabbit_caerbannog.png create mode 100644 mods/ENTITIES/mobs_mc/textures/mobs_mc_spit.png create mode 100644 mods/ENTITIES/mobs_mc/textures/mobs_mc_wither_half_health.png delete mode 100644 mods/ENTITIES/mobs_mc_gameconfig/depends.txt create mode 100644 mods/ENTITIES/mobs_mc_gameconfig/mod.conf create mode 100644 mods/ENVIRONMENT/lightning/API.md delete mode 100644 mods/ENVIRONMENT/lightning/depends.txt delete mode 100644 mods/ENVIRONMENT/lightning/description.txt create mode 100644 mods/ENVIRONMENT/lightning/locale/lightning.pl.tr delete mode 100644 mods/ENVIRONMENT/lightning/screenshot.png delete mode 100644 mods/ENVIRONMENT/mcl_void_damage/depends.txt delete mode 100644 mods/ENVIRONMENT/mcl_void_damage/description.txt create mode 100644 mods/ENVIRONMENT/mcl_void_damage/locale/mcl_void_damage.pl.tr delete mode 100644 mods/ENVIRONMENT/mcl_weather/depends.txt delete mode 100644 mods/ENVIRONMENT/mcl_weather/description.txt create mode 100644 mods/ENVIRONMENT/mcl_weather/locale/mcl_weather.pl.tr delete mode 100644 mods/ENVIRONMENT/mcl_weather/screenshot.png delete mode 100644 mods/HELP/doc/description.txt create mode 100644 mods/HELP/doc/doc/locale/doc.pl.tr delete mode 100644 mods/HELP/doc/doc/screenshot.png create mode 100644 mods/HELP/doc/doc_identifier/locale/doc_identifier.pl.tr delete mode 100644 mods/HELP/doc/doc_identifier/screenshot.png create mode 100644 mods/HELP/doc/doc_items/locale/doc_items.pl.tr delete mode 100644 mods/HELP/doc/doc_items/screenshot.png delete mode 100644 mods/HELP/mcl_craftguide/depends.txt delete mode 100644 mods/HELP/mcl_craftguide/description.txt create mode 100644 mods/HELP/mcl_craftguide/locale/mcl_craftguide.pl.tr delete mode 100644 mods/HELP/mcl_craftguide/screenshot.png delete mode 100644 mods/HELP/mcl_doc/depends.txt delete mode 100644 mods/HELP/mcl_doc/description.txt create mode 100644 mods/HELP/mcl_doc/locale/mcl_doc.pl.tr create mode 100644 mods/HELP/mcl_doc_basics/locale/mcl_doc_basics.pl.tr delete mode 100644 mods/HELP/mcl_doc_basics/screenshot.png create mode 100644 mods/HELP/mcl_item_id/API.md create mode 100644 mods/HELP/mcl_item_id/init.lua create mode 100644 mods/HELP/mcl_item_id/mod.conf delete mode 100644 mods/HELP/mcl_tt/depends.txt create mode 100644 mods/HELP/mcl_tt/locale/mcl_tt.pl.tr create mode 100644 mods/HELP/mcl_tt/mod.conf delete mode 100644 mods/HUD/awards/depends.txt delete mode 100644 mods/HUD/awards/description.txt create mode 100644 mods/HUD/awards/locale/awards.pl.tr delete mode 100644 mods/HUD/awards/screenshot.png create mode 100644 mods/HUD/hudbars/locale/hudbars.pl.tr delete mode 100644 mods/HUD/hudbars/screenshot.png delete mode 100644 mods/HUD/mcl_achievements/depends.txt create mode 100644 mods/HUD/mcl_achievements/locale/mcl_achievements.pl.tr delete mode 100644 mods/HUD/mcl_base_textures/description.txt create mode 100644 mods/HUD/mcl_bossbars/init.lua create mode 100644 mods/HUD/mcl_bossbars/mod.conf create mode 100644 mods/HUD/mcl_bossbars/textures/mcl_bossbars.png create mode 100644 mods/HUD/mcl_bossbars/textures/mcl_bossbars_empty.png create mode 100644 mods/HUD/mcl_credits/init.lua create mode 100644 mods/HUD/mcl_credits/locale/mcl_credits.de.tr create mode 100644 mods/HUD/mcl_credits/locale/mcl_credits.es.tr create mode 100644 mods/HUD/mcl_credits/locale/mcl_credits.fr.tr create mode 100644 mods/HUD/mcl_credits/locale/mcl_credits.pl.tr create mode 100644 mods/HUD/mcl_credits/locale/mcl_credits.ru.tr create mode 100644 mods/HUD/mcl_credits/locale/template.txt create mode 100644 mods/HUD/mcl_credits/mod.conf create mode 100644 mods/HUD/mcl_credits/textures/credits_bg.png create mode 100644 mods/HUD/mcl_credits/textures/mineclone2_icon.png create mode 100644 mods/HUD/mcl_credits/textures/mineclone2_logo.png delete mode 100644 mods/HUD/mcl_death_messages/description.txt create mode 100644 mods/HUD/mcl_death_messages/locale/mcl_death_messages.pl.tr create mode 100644 mods/HUD/mcl_experience/locale/mcl_experience.pl.tr create mode 100644 mods/HUD/mcl_experience/mod.conf delete mode 100644 mods/HUD/mcl_formspec_prepend/depends.txt delete mode 100644 mods/HUD/mcl_hbarmor/description.txt create mode 100644 mods/HUD/mcl_hbarmor/locale/mcl_hbarmor.pl.tr delete mode 100644 mods/HUD/mcl_inventory/depends.txt delete mode 100644 mods/HUD/mcl_inventory/description.txt create mode 100644 mods/HUD/mcl_inventory/locale/mcl_inventory.pl.tr create mode 100644 mods/HUD/mcl_title/API.md create mode 100644 mods/HUD/mcl_title/init.lua create mode 100644 mods/HUD/mcl_title/mod.conf delete mode 100644 mods/HUD/mcl_tmp_message/init.lua delete mode 100644 mods/HUD/show_wielded_item/depends.txt delete mode 100644 mods/HUD/show_wielded_item/description.txt delete mode 100644 mods/HUD/show_wielded_item/screenshot.png delete mode 100644 mods/ITEMS/REDSTONE/mcl_comparators/depends.txt create mode 100644 mods/ITEMS/REDSTONE/mcl_comparators/locale/mcl_comparators.pl.tr delete mode 100644 mods/ITEMS/REDSTONE/mcl_dispensers/depends.txt create mode 100644 mods/ITEMS/REDSTONE/mcl_dispensers/locale/mcl_dispensers.pl.tr create mode 100644 mods/ITEMS/REDSTONE/mcl_dispensers/mod.conf delete mode 100644 mods/ITEMS/REDSTONE/mcl_droppers/depends.txt create mode 100644 mods/ITEMS/REDSTONE/mcl_droppers/locale/mcl_droppers.pl.tr create mode 100644 mods/ITEMS/REDSTONE/mcl_droppers/mod.conf delete mode 100644 mods/ITEMS/REDSTONE/mcl_observers/depends.txt create mode 100644 mods/ITEMS/REDSTONE/mcl_observers/locale/mcl_observers.pl.tr create mode 100644 mods/ITEMS/REDSTONE/mcl_observers/mod.conf delete mode 100644 mods/ITEMS/REDSTONE/mesecons/depends.txt create mode 100644 mods/ITEMS/REDSTONE/mesecons/mod.conf delete mode 100644 mods/ITEMS/REDSTONE/mesecons_alias/depends.txt create mode 100644 mods/ITEMS/REDSTONE/mesecons_alias/mod.conf delete mode 100644 mods/ITEMS/REDSTONE/mesecons_button/depends.txt create mode 100644 mods/ITEMS/REDSTONE/mesecons_button/locale/mesecons_button.pl.tr create mode 100644 mods/ITEMS/REDSTONE/mesecons_button/mod.conf delete mode 100644 mods/ITEMS/REDSTONE/mesecons_commandblock/depends.txt create mode 100644 mods/ITEMS/REDSTONE/mesecons_commandblock/locale/mesecons_commandblock.pl.tr create mode 100644 mods/ITEMS/REDSTONE/mesecons_commandblock/mod.conf delete mode 100644 mods/ITEMS/REDSTONE/mesecons_delayer/depends.txt create mode 100644 mods/ITEMS/REDSTONE/mesecons_delayer/locale/mesecons_delayer.pl.tr create mode 100644 mods/ITEMS/REDSTONE/mesecons_delayer/mod.conf delete mode 100644 mods/ITEMS/REDSTONE/mesecons_lightstone/depends.txt create mode 100644 mods/ITEMS/REDSTONE/mesecons_lightstone/locale/mesecons_lightstone.pl.tr create mode 100644 mods/ITEMS/REDSTONE/mesecons_lightstone/mod.conf delete mode 100644 mods/ITEMS/REDSTONE/mesecons_mvps/depends.txt create mode 100644 mods/ITEMS/REDSTONE/mesecons_mvps/mod.conf delete mode 100644 mods/ITEMS/REDSTONE/mesecons_noteblock/depends.txt create mode 100644 mods/ITEMS/REDSTONE/mesecons_noteblock/locale/mesecons_noteblock.pl.tr create mode 100644 mods/ITEMS/REDSTONE/mesecons_noteblock/mod.conf delete mode 100644 mods/ITEMS/REDSTONE/mesecons_pistons/depends.txt create mode 100644 mods/ITEMS/REDSTONE/mesecons_pistons/locale/mesecons_pistons.pl.tr create mode 100644 mods/ITEMS/REDSTONE/mesecons_pistons/mod.conf delete mode 100644 mods/ITEMS/REDSTONE/mesecons_pressureplates/depends.txt create mode 100644 mods/ITEMS/REDSTONE/mesecons_pressureplates/locale/mesecons_pressureplates.pl.tr create mode 100644 mods/ITEMS/REDSTONE/mesecons_pressureplates/mod.conf delete mode 100644 mods/ITEMS/REDSTONE/mesecons_solarpanel/depends.txt create mode 100644 mods/ITEMS/REDSTONE/mesecons_solarpanel/locale/mesecons_solarpanel.pl.tr create mode 100644 mods/ITEMS/REDSTONE/mesecons_solarpanel/mod.conf delete mode 100644 mods/ITEMS/REDSTONE/mesecons_torch/depends.txt create mode 100644 mods/ITEMS/REDSTONE/mesecons_torch/locale/mesecons_torch.pl.tr create mode 100644 mods/ITEMS/REDSTONE/mesecons_torch/mod.conf delete mode 100644 mods/ITEMS/REDSTONE/mesecons_walllever/depends.txt create mode 100644 mods/ITEMS/REDSTONE/mesecons_walllever/locale/mesecons_walllever.pl.tr create mode 100644 mods/ITEMS/REDSTONE/mesecons_walllever/mod.conf delete mode 100644 mods/ITEMS/REDSTONE/mesecons_wires/depends.txt create mode 100644 mods/ITEMS/REDSTONE/mesecons_wires/locale/mesecons_wires.pl.tr create mode 100644 mods/ITEMS/REDSTONE/mesecons_wires/mod.conf delete mode 100644 mods/ITEMS/mcl_anvils/depends.txt create mode 100644 mods/ITEMS/mcl_anvils/locale/mcl_anvils.pl.tr create mode 100644 mods/ITEMS/mcl_armor/api.lua delete mode 100644 mods/ITEMS/mcl_armor/armor.lua create mode 100644 mods/ITEMS/mcl_armor/damage.lua delete mode 100644 mods/ITEMS/mcl_armor/depends.txt delete mode 100644 mods/ITEMS/mcl_armor/description.txt create mode 100644 mods/ITEMS/mcl_armor/locale/mcl_armor.pl.tr create mode 100644 mods/ITEMS/mcl_armor/mod.conf create mode 100644 mods/ITEMS/mcl_armor/models/mcl_armor_character_female.b3d create mode 100644 mods/ITEMS/mcl_armor/models/mcl_armor_character_female.blend create mode 100644 mods/ITEMS/mcl_armor/models/mcl_armor_character_female.blend1 create mode 100644 mods/ITEMS/mcl_armor/player.lua create mode 100644 mods/ITEMS/mcl_armor/register.lua create mode 100644 mods/ITEMS/mcl_armor/textures/mcl_armor_elytra.png create mode 100644 mods/ITEMS/mcl_armor/textures/mcl_armor_inv_elytra.png delete mode 100644 mods/ITEMS/mcl_armor_stand/depends.txt create mode 100644 mods/ITEMS/mcl_armor_stand/locale/mcl_armor_stand.pl.tr create mode 100644 mods/ITEMS/mcl_armor_stand/mod.conf delete mode 100644 mods/ITEMS/mcl_banners/depends.txt delete mode 100644 mods/ITEMS/mcl_banners/description.txt create mode 100644 mods/ITEMS/mcl_banners/locale/mcl_banners.pl.tr delete mode 100644 mods/ITEMS/mcl_beds/depends.txt create mode 100644 mods/ITEMS/mcl_beds/locale/mcl_beds.pl.tr delete mode 100644 mods/ITEMS/mcl_books/depends.txt create mode 100644 mods/ITEMS/mcl_books/locale/mcl_books.pl.tr delete mode 100644 mods/ITEMS/mcl_bows/crossbow.lua delete mode 100644 mods/ITEMS/mcl_bows/depends.txt create mode 100644 mods/ITEMS/mcl_bows/locale/mcl_bows.pl.tr create mode 100644 mods/ITEMS/mcl_bows/mod.conf create mode 100644 mods/ITEMS/mcl_bows/models/mcl_bows_arrow.obj delete mode 100644 mods/ITEMS/mcl_bows/sounds/mcl_bows_crossbow_drawback_0.ogg delete mode 100644 mods/ITEMS/mcl_bows/sounds/mcl_bows_crossbow_drawback_1.ogg delete mode 100644 mods/ITEMS/mcl_bows/sounds/mcl_bows_crossbow_drawback_2.ogg delete mode 100644 mods/ITEMS/mcl_bows/sounds/mcl_bows_crossbow_load.ogg delete mode 100644 mods/ITEMS/mcl_bows/sounds/mcl_bows_crossbow_shoot.ogg delete mode 100644 mods/ITEMS/mcl_bows/textures/mcl_bows_crossbow.png delete mode 100644 mods/ITEMS/mcl_bows/textures/mcl_bows_crossbow_0.png delete mode 100644 mods/ITEMS/mcl_bows/textures/mcl_bows_crossbow_1.png delete mode 100644 mods/ITEMS/mcl_bows/textures/mcl_bows_crossbow_2.png delete mode 100644 mods/ITEMS/mcl_bows/textures/mcl_bows_crossbow_3.png create mode 100644 mods/ITEMS/mcl_brewing/locale/mcl_brewing.pl.tr create mode 100644 mods/ITEMS/mcl_buckets/API.md rename mods/ITEMS/mcl_buckets/{README.txt => README.md} (67%) delete mode 100644 mods/ITEMS/mcl_buckets/depends.txt create mode 100644 mods/ITEMS/mcl_buckets/locale/mcl_buckets.pl.tr create mode 100644 mods/ITEMS/mcl_buckets/mod.conf create mode 100644 mods/ITEMS/mcl_buckets/register.lua delete mode 100644 mods/ITEMS/mcl_cake/depends.txt create mode 100644 mods/ITEMS/mcl_cake/locale/mcl_cake.pl.tr delete mode 100644 mods/ITEMS/mcl_cauldrons/depends.txt create mode 100644 mods/ITEMS/mcl_cauldrons/locale/mcl_cauldrons.pl.tr delete mode 100644 mods/ITEMS/mcl_chests/depends.txt create mode 100644 mods/ITEMS/mcl_chests/locale/mcl_chests.pl.tr create mode 100644 mods/ITEMS/mcl_chests/mod.conf delete mode 100644 mods/ITEMS/mcl_clock/depends.txt delete mode 100644 mods/ITEMS/mcl_clock/description.txt create mode 100644 mods/ITEMS/mcl_clock/locale/mcl_clock.pl.tr delete mode 100644 mods/ITEMS/mcl_cocoas/depends.txt delete mode 100644 mods/ITEMS/mcl_cocoas/description.txt create mode 100644 mods/ITEMS/mcl_cocoas/locale/mcl_cocoas.pl.tr delete mode 100644 mods/ITEMS/mcl_colorblocks/depends.txt delete mode 100644 mods/ITEMS/mcl_colorblocks/description.txt create mode 100644 mods/ITEMS/mcl_colorblocks/locale/mcl_colorblocks.pl.tr delete mode 100644 mods/ITEMS/mcl_compass/depends.txt delete mode 100644 mods/ITEMS/mcl_compass/description.txt create mode 100644 mods/ITEMS/mcl_compass/locale/mcl_compass.pl.tr delete mode 100644 mods/ITEMS/mcl_core/depends.txt delete mode 100644 mods/ITEMS/mcl_core/description.txt create mode 100644 mods/ITEMS/mcl_core/locale/mcl_core.pl.tr create mode 100644 mods/ITEMS/mcl_core/textures/mcl_core_stripped_acacia_side.png create mode 100644 mods/ITEMS/mcl_core/textures/mcl_core_stripped_acacia_top.png create mode 100644 mods/ITEMS/mcl_core/textures/mcl_core_stripped_birch_side.png create mode 100644 mods/ITEMS/mcl_core/textures/mcl_core_stripped_birch_top.png create mode 100644 mods/ITEMS/mcl_core/textures/mcl_core_stripped_dark_oak_side.png create mode 100644 mods/ITEMS/mcl_core/textures/mcl_core_stripped_dark_oak_top.png create mode 100644 mods/ITEMS/mcl_core/textures/mcl_core_stripped_jungle_side.png create mode 100644 mods/ITEMS/mcl_core/textures/mcl_core_stripped_jungle_top.png create mode 100644 mods/ITEMS/mcl_core/textures/mcl_core_stripped_oak_side.png create mode 100644 mods/ITEMS/mcl_core/textures/mcl_core_stripped_oak_top.png create mode 100644 mods/ITEMS/mcl_core/textures/mcl_core_stripped_spruce_side.png create mode 100644 mods/ITEMS/mcl_core/textures/mcl_core_stripped_spruce_top.png create mode 100644 mods/ITEMS/mcl_crafting_table/API.md delete mode 100644 mods/ITEMS/mcl_crafting_table/depends.txt delete mode 100644 mods/ITEMS/mcl_crafting_table/description.txt create mode 100644 mods/ITEMS/mcl_crafting_table/locale/mcl_crafting_table.pl.tr delete mode 100644 mods/ITEMS/mcl_doors/depends.txt create mode 100644 mods/ITEMS/mcl_doors/locale/mcl_doors.pl.tr delete mode 100644 mods/ITEMS/mcl_dye/depends.txt create mode 100644 mods/ITEMS/mcl_dye/locale/mcl_dye.pl.tr create mode 100644 mods/ITEMS/mcl_enchanting/groupcaps.lua create mode 100644 mods/ITEMS/mcl_enchanting/locale/mcl_enchanting.pl.tr create mode 100644 mods/ITEMS/mcl_enchanting/locale/mcl_enchanting.ru.tr delete mode 100644 mods/ITEMS/mcl_end/depends.txt create mode 100644 mods/ITEMS/mcl_end/locale/mcl_end.pl.tr create mode 100644 mods/ITEMS/mcl_end/mod.conf create mode 100644 mods/ITEMS/mcl_end/textures/mcl_end_crystal_beam.png delete mode 100644 mods/ITEMS/mcl_farming/depends.txt create mode 100644 mods/ITEMS/mcl_farming/locale/mcl_farming.pl.tr create mode 100644 mods/ITEMS/mcl_farming/textures/mcl_farming_pumpkin_hud.png delete mode 100644 mods/ITEMS/mcl_fences/depends.txt create mode 100644 mods/ITEMS/mcl_fences/locale/mcl_fences.pl.tr delete mode 100644 mods/ITEMS/mcl_fire/depends.txt create mode 100644 mods/ITEMS/mcl_fire/locale/mcl_fire.pl.tr create mode 100644 mods/ITEMS/mcl_fireworks/README.txt create mode 100644 mods/ITEMS/mcl_fireworks/crafting.lua create mode 100644 mods/ITEMS/mcl_fireworks/init.lua create mode 100644 mods/ITEMS/mcl_fireworks/locale/mcl_fireworks.de.tr create mode 100644 mods/ITEMS/mcl_fireworks/locale/mcl_fireworks.es.tr create mode 100644 mods/ITEMS/mcl_fireworks/locale/mcl_fireworks.fr.tr create mode 100644 mods/ITEMS/mcl_fireworks/locale/mcl_fireworks.pl.tr create mode 100644 mods/ITEMS/mcl_fireworks/locale/mcl_fireworks.ru.tr create mode 100644 mods/ITEMS/mcl_fireworks/locale/template.txt create mode 100644 mods/ITEMS/mcl_fireworks/mod.conf create mode 100644 mods/ITEMS/mcl_fireworks/register.lua create mode 100644 mods/ITEMS/mcl_fireworks/sounds/mcl_fireworks_rocket.ogg create mode 100644 mods/ITEMS/mcl_fireworks/textures/mcl_fireworks_rocket.png delete mode 100644 mods/ITEMS/mcl_fishing/depends.txt delete mode 100644 mods/ITEMS/mcl_fishing/description.txt create mode 100644 mods/ITEMS/mcl_fishing/locale/mcl_fishing.pl.tr delete mode 100644 mods/ITEMS/mcl_flowerpots/depends.txt create mode 100644 mods/ITEMS/mcl_flowerpots/locale/mcl_flowerpots.pl.tr create mode 100644 mods/ITEMS/mcl_flowerpots/mod.conf create mode 100644 mods/ITEMS/mcl_flowers/API.md delete mode 100644 mods/ITEMS/mcl_flowers/depends.txt create mode 100644 mods/ITEMS/mcl_flowers/locale/mcl_flowers.pl.tr create mode 100644 mods/ITEMS/mcl_flowers/mod.conf create mode 100644 mods/ITEMS/mcl_flowers/register.lua delete mode 100644 mods/ITEMS/mcl_furnaces/depends.txt create mode 100644 mods/ITEMS/mcl_furnaces/locale/mcl_furnaces.pl.tr delete mode 100644 mods/ITEMS/mcl_heads/depends.txt delete mode 100644 mods/ITEMS/mcl_heads/description.txt create mode 100644 mods/ITEMS/mcl_heads/locale/mcl_heads.pl.tr delete mode 100644 mods/ITEMS/mcl_hoppers/depends.txt delete mode 100644 mods/ITEMS/mcl_hoppers/description.txt create mode 100644 mods/ITEMS/mcl_hoppers/locale/mcl_hoppers.pl.tr create mode 100644 mods/ITEMS/mcl_hoppers/mod.conf delete mode 100644 mods/ITEMS/mcl_itemframes/depends.txt create mode 100644 mods/ITEMS/mcl_itemframes/locale/mcl_itemframes.pl.tr create mode 100644 mods/ITEMS/mcl_itemframes/mod.conf create mode 100644 mods/ITEMS/mcl_jukebox/API.md delete mode 100644 mods/ITEMS/mcl_jukebox/depends.txt delete mode 100644 mods/ITEMS/mcl_jukebox/description.txt create mode 100644 mods/ITEMS/mcl_jukebox/locale/mcl_jukebox.pl.tr create mode 100644 mods/ITEMS/mcl_maps/colors.json create mode 100644 mods/ITEMS/mcl_maps/locale/mcl_maps.pl.tr create mode 100644 mods/ITEMS/mcl_maps/palettes.json create mode 100644 mods/ITEMS/mcl_maps/textures/mcl_maps_map_background.png 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 delete mode 100644 mods/ITEMS/mcl_mobitems/depends.txt create mode 100644 mods/ITEMS/mcl_mobitems/locale/mcl_mobitems.pl.tr delete mode 100644 mods/ITEMS/mcl_mobspawners/depends.txt create mode 100644 mods/ITEMS/mcl_mobspawners/locale/mcl_mobspawners.pl.tr delete mode 100644 mods/ITEMS/mcl_monster_eggs/depends.txt delete mode 100644 mods/ITEMS/mcl_monster_eggs/description.txt create mode 100644 mods/ITEMS/mcl_monster_eggs/locale/mcl_monster_eggs.pl.tr create mode 100644 mods/ITEMS/mcl_monster_eggs/mod.conf delete mode 100644 mods/ITEMS/mcl_mushrooms/depends.txt create mode 100644 mods/ITEMS/mcl_mushrooms/locale/mcl_mushrooms.pl.tr delete mode 100644 mods/ITEMS/mcl_nether/depends.txt create mode 100644 mods/ITEMS/mcl_nether/locale/mcl_nether.pl.tr delete mode 100644 mods/ITEMS/mcl_ocean/depends.txt delete mode 100644 mods/ITEMS/mcl_ocean/description.txt create mode 100644 mods/ITEMS/mcl_ocean/locale/mcl_ocean.pl.tr delete mode 100644 mods/ITEMS/mcl_portals/depends.txt delete mode 100644 mods/ITEMS/mcl_portals/description.txt create mode 100644 mods/ITEMS/mcl_portals/locale/mcl_portals.pl.tr create mode 100644 mods/ITEMS/mcl_portals/portal_gateway.lua create mode 100644 mods/ITEMS/mcl_potions/locale/mcl_potions.pl.tr delete mode 100644 mods/ITEMS/mcl_signs/depends.txt create mode 100644 mods/ITEMS/mcl_signs/locale/mcl_signs.pl.tr delete mode 100644 mods/ITEMS/mcl_sponges/depends.txt delete mode 100644 mods/ITEMS/mcl_sponges/description.txt create mode 100644 mods/ITEMS/mcl_sponges/locale/mcl_sponges.pl.tr delete mode 100644 mods/ITEMS/mcl_stairs/depends.txt create mode 100644 mods/ITEMS/mcl_stairs/locale/mcl_stairs.pl.tr create mode 100644 mods/ITEMS/mcl_throwing/API.md delete mode 100644 mods/ITEMS/mcl_throwing/depends.txt create mode 100644 mods/ITEMS/mcl_throwing/locale/mcl_throwing.pl.tr create mode 100644 mods/ITEMS/mcl_throwing/register.lua delete mode 100644 mods/ITEMS/mcl_tnt/depends.txt create mode 100644 mods/ITEMS/mcl_tnt/locale/mcl_tnt.pl.tr delete mode 100644 mods/ITEMS/mcl_tools/depends.txt create mode 100644 mods/ITEMS/mcl_tools/locale/mcl_tools.pl.tr delete mode 100644 mods/ITEMS/mcl_tools/textures/wieldhand.png create mode 100644 mods/ITEMS/mcl_torches/api.lua delete mode 100644 mods/ITEMS/mcl_torches/depends.txt delete mode 100644 mods/ITEMS/mcl_torches/description.txt create mode 100644 mods/ITEMS/mcl_torches/locale/mcl_torches.pl.tr create mode 100644 mods/ITEMS/mcl_torches/register.lua delete mode 100644 mods/ITEMS/mcl_torches/screenshot.png delete mode 100644 mods/ITEMS/mcl_totems/depends.txt create mode 100644 mods/ITEMS/mcl_totems/mod.conf delete mode 100644 mods/ITEMS/mcl_walls/depends.txt create mode 100644 mods/ITEMS/mcl_walls/locale/mcl_walls.pl.tr create mode 100644 mods/ITEMS/mcl_walls/mod.conf delete mode 100644 mods/ITEMS/mcl_wool/depends.txt create mode 100644 mods/ITEMS/mcl_wool/locale/mcl_wool.pl.tr delete mode 100644 mods/ITEMS/mclx_core/depends.txt delete mode 100644 mods/ITEMS/mclx_core/description.txt create mode 100644 mods/ITEMS/mclx_core/locale/mclx_core.pl.tr delete mode 100644 mods/ITEMS/mclx_fences/depends.txt delete mode 100644 mods/ITEMS/mclx_fences/description.txt create mode 100644 mods/ITEMS/mclx_fences/locale/mclx_fences.pl.tr delete mode 100644 mods/ITEMS/mclx_stairs/depends.txt delete mode 100644 mods/ITEMS/mclx_stairs/description.txt create mode 100644 mods/ITEMS/mclx_stairs/locale/mclx_stairs.pl.tr create mode 100644 mods/ITEMS/screwdriver/locale/screwdriver.pl.tr create mode 100644 mods/ITEMS/screwdriver/mod.conf delete mode 100644 mods/ITEMS/xpanes/depends.txt create mode 100644 mods/ITEMS/xpanes/locale/xpanes.pl.tr create mode 100644 mods/ITEMS/xpanes/mod.conf delete mode 100644 mods/MAPGEN/mcl_biomes/depends.txt delete mode 100644 mods/MAPGEN/mcl_biomes/description.txt create mode 100644 mods/MAPGEN/mcl_biomes/mod.conf delete mode 100644 mods/MAPGEN/mcl_dungeons/depends.txt delete mode 100644 mods/MAPGEN/mcl_dungeons/description.txt create mode 100644 mods/MAPGEN/mcl_end_island/init.lua create mode 100644 mods/MAPGEN/mcl_end_island/mod.conf delete mode 100644 mods/MAPGEN/mcl_mapgen_core/depends.txt delete mode 100644 mods/MAPGEN/mcl_strongholds/depends.txt delete mode 100644 mods/MAPGEN/mcl_strongholds/description.txt delete mode 100644 mods/MAPGEN/mcl_structures/depends.txt create mode 100644 mods/MAPGEN/mcl_structures/locale/mcl_structures.pl.tr create mode 100644 mods/MAPGEN/mcl_structures/schematics/mcl_structures_end_gateway_portal.mts delete mode 100644 mods/MAPGEN/mcl_villages/depends.txt create mode 100644 mods/MAPGEN/mcl_villages/mod.conf delete mode 100644 mods/MAPGEN/tsm_railcorridors/depends.txt delete mode 100644 mods/MAPGEN/tsm_railcorridors/description.txt create mode 100644 mods/MISC/findbiome/locale/findbiome.pl.tr create mode 100644 mods/MISC/mcl_commands/alias.lua delete mode 100644 mods/MISC/mcl_commands/depends.txt create mode 100644 mods/MISC/mcl_commands/kill.lua create mode 100644 mods/MISC/mcl_commands/list.lua create mode 100644 mods/MISC/mcl_commands/locale/mcl_commands.pl.tr create mode 100644 mods/MISC/mcl_commands/mod.conf create mode 100644 mods/MISC/mcl_commands/say.lua create mode 100644 mods/MISC/mcl_commands/seed.lua create mode 100644 mods/MISC/mcl_commands/setblock.lua create mode 100644 mods/MISC/mcl_commands/sound.lua create mode 100644 mods/MISC/mcl_commands/summon.lua delete mode 100644 mods/MISC/mcl_privs/description.txt create mode 100644 mods/MISC/mcl_privs/locale/mcl_privs.pl.tr create mode 100644 mods/MISC/mcl_privs/mod.conf delete mode 100644 mods/MISC/mcl_temp_helper_recipes/depends.txt create mode 100644 mods/MISC/mcl_temp_helper_recipes/mod.conf create mode 100644 mods/MISC/mcl_wip/API.md delete mode 100644 mods/MISC/mcl_wip/depends.txt delete mode 100644 mods/MISC/mcl_wip/description.txt create mode 100644 mods/MISC/mcl_wip/locale/mcl_wip.pl.tr create mode 100644 mods/PLAYER/mcl_criticals/init.lua create mode 100644 mods/PLAYER/mcl_criticals/mod.conf create mode 100644 mods/PLAYER/mcl_criticals/sounds/mcl_criticals_hit.0.ogg create mode 100644 mods/PLAYER/mcl_criticals/sounds/mcl_criticals_hit.1.ogg create mode 100644 mods/PLAYER/mcl_criticals/sounds/mcl_criticals_hit.2.ogg create mode 100644 mods/PLAYER/mcl_death_drop/API.md delete mode 100644 mods/PLAYER/mcl_death_drop/depends.txt delete mode 100644 mods/PLAYER/mcl_death_drop/description.txt delete mode 100644 mods/PLAYER/mcl_hunger/depends.txt delete mode 100644 mods/PLAYER/mcl_hunger/description.txt create mode 100644 mods/PLAYER/mcl_hunger/locale/mcl_hunger.pl.tr delete mode 100644 mods/PLAYER/mcl_hunger/screenshot.png delete mode 100644 mods/PLAYER/mcl_meshhand/depends.txt delete mode 100644 mods/PLAYER/mcl_meshhand/description.txt create mode 100644 mods/PLAYER/mcl_meshhand/models/mcl_meshhand_female.b3d create mode 100644 mods/PLAYER/mcl_meshhand/models/mcl_meshhand_female.blend create mode 100644 mods/PLAYER/mcl_player/mod.conf delete mode 100644 mods/PLAYER/mcl_playerinfo/depends.txt delete mode 100644 mods/PLAYER/mcl_playerplus/depends.txt delete mode 100644 mods/PLAYER/mcl_playerplus/description.txt delete mode 100644 mods/PLAYER/mcl_playerplus/locale/mcl_playerplus.de.tr delete mode 100644 mods/PLAYER/mcl_playerplus/locale/mcl_playerplus.es.tr delete mode 100644 mods/PLAYER/mcl_playerplus/locale/mcl_playerplus.fr.tr create mode 100644 mods/PLAYER/mcl_playerplus/locale/mcl_playerplus.pl.tr delete mode 100644 mods/PLAYER/mcl_playerplus/locale/mcl_playerplus.ru.tr delete mode 100644 mods/PLAYER/mcl_playerplus/locale/template.txt delete mode 100644 mods/PLAYER/mcl_skins/depends.txt delete mode 100644 mods/PLAYER/mcl_skins/description.txt delete mode 100644 mods/PLAYER/mcl_skins/intllib.lua create mode 100644 mods/PLAYER/mcl_skins/locale/mcl_skins.pl.tr delete mode 100644 mods/PLAYER/mcl_spawn/depends.txt delete mode 100644 mods/PLAYER/mcl_spawn/description.txt create mode 100644 mods/PLAYER/mcl_spawn/locale/mcl_spawn.pl.tr delete mode 100644 mods/PLAYER/mcl_sprint/depends.txt rename mods/PLAYER/{wieldview => mcl_wieldview}/LICENSE.txt (100%) rename mods/PLAYER/{wieldview => mcl_wieldview}/README.txt (100%) create mode 100644 mods/PLAYER/mcl_wieldview/init.lua create mode 100644 mods/PLAYER/mcl_wieldview/mod.conf delete mode 100644 mods/PLAYER/playerphysics/description.txt delete mode 100644 mods/PLAYER/wieldview/depends.txt delete mode 100644 mods/PLAYER/wieldview/description.txt delete mode 100644 mods/PLAYER/wieldview/init.lua delete mode 100644 mods/PLAYER/wieldview/transform.lua create mode 100755 tools/create_luacheck.py create mode 100644 tools/create_map_color_file.py create mode 100644 tools/dicts/polish.dic create mode 100644 tools/remove_end.py create mode 100644 tools/spell_check_translate_files.py diff --git a/API.md b/API.md index 344414b72..e73d5f8a4 100644 --- a/API.md +++ b/API.md @@ -17,6 +17,10 @@ Items can have these fields: anvil. See `mcl_banners` for an example. +Tools can have these fields: +* `_mcl_diggroups`: Specifies the digging groups that a tool can dig and how + efficiently. See `_mcl_autogroup` for more information. + All nodes can have these fields: * `_mcl_hardness`: Hardness of the block, ranges from 0 to infinity (represented by -1). Determines digging times. Default: 0 @@ -39,7 +43,7 @@ A lot of things are possible by using one of the APIs in the mods. Note that not * Dispenser support: `ITEMS/REDSTONE/mcl_dispensers` ## Mobs -* Mobs: `ENTITIES/mcl_mods` +* Mobs: `ENTITIES/mcl_mobs` MineClone 2 uses its own mobs framework, called “Mobs Redo: MineClone 2 Edition” or “MRM” for short. This is a fork of Mobs Redo [`mobs`] by TenPlus1. @@ -67,6 +71,9 @@ chances are good that it works out of the box. * Get flowing direction of liquids: `CORE/flowlib` * `on_walk_over` callback for nodes: `CORE/walkover` * Get node names close to player (to reduce constant querying): `PLAYER/mcl_playerinfo` +* Explosion API +* Music discs API +* Flowers and flower pots ### Unstable APIs The following APIs may be subject to change in future. You could already use these APIs but there will probably be breaking changes in the future, or the API is not as fleshed out as it should be. Use at your own risk! @@ -79,12 +86,10 @@ The following APIs may be subject to change in future. You could already use the ### Planned APIs -* Flowers * Saplings and trees * Custom banner patterns * Custom dimensions * Custom portals -* Music discs * Dispenser and dropper support * Proper sky and weather APIs -* Explosion API + diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index f26ccafe7..4c9bf3e38 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -1,5 +1,5 @@ # Contributing to MineClone 2 -So you want to MineClone 2? +So you want to contribute to MineClone 2? Wow, thank you! :-) But first, some things to note: @@ -7,13 +7,11 @@ But first, some things to note: MineClone 2's development target is to make a free software clone of Minecraft, ***version 1.12***, ***PC edition***, *** + Optifine features supported by the Minetest Engine ***. -MineClone 2 is maintained by two persons. Namely, kay27 and EliasFleckenstein. You can find us -in the Minetest forums (forums.minetest.net), in IRC in the #minetest +MineClone 2 is maintained by three persons. Namely, kay27, EliasFleckenstein and jordan4ibanez. You can find us +in the Minetest forums (forums.minetest.net), in IRC in the #mineclone2 channel on irc.freenode.net. And finally, you can send e-mails to or . -There is **no** guarantee we will accept anything from anybody. - By sending us patches or asking us to include your changes in this game, you agree that they fall under the terms of the LGPLv2.1, which basically means they will become part of a free software. @@ -26,8 +24,7 @@ For small and medium changes: * Fork the repository * Do your change in a new branch -* Upload the repository somewhere where it can be accessed from the Internet and - notify us +* Create a pull request to get your changes merged into master For small changes, sending us a patch is also good. @@ -41,40 +38,52 @@ reserve the right to revert everything that we don't like. For bigger changes, we strongly recommend to use feature branches and discuss with me first. -Contributors will be credited in `README.md`. +If your code causes bugs and crashes, it is your responsibility to fix them as soon as possible. -## Quality remarks -Again: There is ***no*** guarantee we will accept anything from anybody. -But we will gladly take in code from others when we feel it saves us work -in the long run. +We mostly use plain merging rather than rebasing or squash merging. -### Inclusion criteria -Depending on what you add, the chances for inclusion vary: +Your commit names should be relatively descriptive, e.g. when saying "Fix #issueid", the commit message should also contain the title of the issue. -### High chance for inclusion -* Gameplay features in Minecraft which are missing in MineClone 2 +Contributors will be credited in `CREDITS.md`. -### Medium chance for inclusion (discuss first) -* Features which don't a impact on gameplay -* GUI improvement -* Features from pocket or console edition +## Code Style -### Low chance for inclusion (discuss/optimize first) -* Overhaul of architecture / mod structure -* Mass-itemstring changes all over the place -* Added files have a unusual high file size -* Indentation looks like crazy -* Single commits which add several unrelated things -* Gameplay features which don't exist in Minecraft +Each mod must provide `mod.conf`. +Each mod which add API functions should store functions inside a global table named like the mod. +Public functions should not use self references but rather just access the table directly. +Functions should be defined in this way: +```lua +function mcl_xyz.stuff(param) end +``` +Insteed of this way: +```lua +mcl_xyz.stuff = function(param) end +``` +Indentation must be unified, more likely with tabs. -### Instant rejection -* Proprietary **anything** -* Code contains `minetest.env` anywhere +Time sensitive mods should make a local copy of most used API functions to improve performances. +```lua +local vector = vector +local get_node = minetest.get_node +``` -## Coding style guide -* Indentations should reflect the code flow -* Use tabs, not spaces for indentation (tab size = 8) -* Never use `minetest.env` + +## Features > 1.12 + +If you want to make a feature that was added in a Minecraft version later than 1.12, you should fork MineClone5 (mineclone5 branch in the repository) and add your changes to this. + +## What we accept + +* Every MC features up to version 1.12 JE. +* Every already finished and working good features from versions above (only when making a MineClone5 PR / Contribution). +* Except features which couldn't be done easily and bugfree because of Minetest engine limitations. Eg. we CAN extend world boundaries by playing with map chunks, just teleporting player onto next layer after 31000 , but it would cost too much (time, code, bugs, performance, stability, etc). +* Some features, approved by the rest of the community, I mean maybe some voting and really missing any negative feedback. + +## What we reject + +* Any features which cause critical bugs, sending them to rework/fix or trying to fix immediately. +* Some small portions of big entirely missing features which just definitely break gamplay balance give nothing useful +* Controversial features, which some people support while others do not should be discussed well, with publishing forum announcements, at least during the week. In case if there are still doubts - send them into the mod. ## Reporting bugs Report all bugs and missing Minecraft features here: diff --git a/CREDITS.md b/CREDITS.md new file mode 100644 index 000000000..296e7c23b --- /dev/null +++ b/CREDITS.md @@ -0,0 +1,118 @@ +# Credits + +## Creator of MineClone +* davedevils + +## Creator of MineClone2 +* Wuzzy + +## Maintainers +* Fleckenstein +* kay27 +* jordan4ibanez + +## Developers +* bzoss +* AFCMS +* epCode +* ryvnf +* iliekprogrammar +* MysticTempest +* Rootyjr +* Nicu +* aligator +* Code-Sploit +* NO11 + +## Contributors +* Laurent Rocher +* HimbeerserverDE +* TechDudie +* Alexander Minges +* ArTee3 +* ZeDique la Ruleta +* pitchum +* wuniversales +* Bu-Gee +* David McMackins II +* Nicholas Niro +* Wouters Dorian +* Blue Blancmange +* Jared Moody +* Li0n +* Midgard +* Saku Laesvuori +* Yukitty +* ZedekThePD +* aldum +* dBeans +* nickolas360 +* yutyo +* ztianyang +* j45 + +## MineClone5 +* kay27 +* Debiankaios +* epCode +* NO11 +* j45 + +## Original Mod Authors +* Wuzzy +* Fleckenstein +* BlockMen +* TenPlus1 +* PilzAdam +* ryvnf +* stujones11 +* Arcelmi +* celeron55 +* maikerumine +* GunshipPenguin +* Qwertymine3 +* Rochambeau +* rubenwardy +* stu +* jordan4ibanez +* 4aiman +* Kahrl +* Krock +* UgnilJoZ +* lordfingle +* 22i +* bzoss +* kilbith +* xeranas +* kddekadenz +* sofar +* 4Evergreen4 +* jordan4ibanez +* paramat + +## 3D Models +* 22i +* tobyplowy +* epCode + +## Textures +* XSSheep +* Wuzzy +* kingoscargames +* leorockway +* xMrVizzy +* yutyo +* NO11 + +## Translations +* Wuzzy +* Rocher Laurent +* wuniversales +* kay27 +* pitchum + +## Special thanks +* celeron55 for creating Minetest +* Jordach for the jukebox music compilation from Big Freaking Dig +* The workaholics who spent way too much time writing for the Minecraft Wiki. It's an invaluable resource for creating this game +* Notch and Jeb for being the major forces behind Minecraft diff --git a/GROUPS.md b/GROUPS.md index f94b04979..8286b29bc 100644 --- a/GROUPS.md +++ b/GROUPS.md @@ -21,7 +21,7 @@ The basic digging time groups determine by which tools a node can be dug. * `swordy=1`: Diggable by sword (any material), and this node is *not* a cobweb * `swordy_cobweb=1`: Diggable by sword (any material), and this node is a cobweb * `shearsy=1`: Diggable by shears, and this node is *not* wool -* `shearsy=wool=1`: Diggable by shears, and this node is wool +* `shearsy_wool=1`: Diggable by shears, and this node is wool * `handy=1`: Breakable by hand and this node gives it useful drop when dug by hand. All nodes which are breakable by pickaxe, axe, shovel, sword or shears are also automatically breakable by hand, but not neccess * `creative_breakable=1`: Block is breakable by hand in creative mode. This group is implied if the node belongs to any other digging group @@ -149,7 +149,7 @@ These groups are used mostly for informational purposes * `trapdoor=2`: Open trapdoor * `glass=1`: Glass (full cubes only) * `rail=1`: Rail -* `music_record`: Music Disc (rating is track ID) +* `music_record`: Item is Music Disc * `tnt=1`: Block is TNT * `boat=1`: Boat * `minecart=1`: Minecart diff --git a/LEGAL.md b/LEGAL.md new file mode 100644 index 000000000..e54bdc41b --- /dev/null +++ b/LEGAL.md @@ -0,0 +1,52 @@ +# Legal information +This is a fan game, not developed or endorsed by Mojang AB. + +Copying is an act of love. Please copy and share! <3 +Here's the detailed legalese for those who need it: + +## License of source code +MineClone 2 (by kay27, EliasFleckenstein, Wuzzy, davedevils and countless others) +is an imitation of Minecraft. + +MineClone 2 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 (in the LICENSE.txt file) for more +details. + +In the mods you might find in the read-me or license +text files a different license. This counts as dual-licensing. +You can choose which license applies to you: Either the +license of MineClone 2 (GNU GPLv3) or the mod's license. + +MineClone 2 is a direct continuation of the discontinued MineClone +project by davedevils. + +Mod credits: +See `README.txt` or `README.md` in each mod directory for information about other authors. +For mods that do not have such a file, the license is the source code license +of MineClone 2 and the author is Wuzzy. + +## License of media (textures and sounds) +No non-free licenses are used anywhere. + +The textures, unless otherwise noted, are based on the Pixel Perfection resource pack for Minecraft 1.11, +authored by XSSheep. Most textures are verbatim copies, while some textures have been changed or redone +from scratch. +The glazed terracotta textures have been created by (MysticTempest)[https://github.com/MysticTempest]. +Source: +License: [CC BY-SA 4.0](http://creativecommons.org/licenses/by-sa/4.0/) + +The main menu images are release under: [CC0](https://creativecommons.org/publicdomain/zero/1.0/) + +All other files, unless mentioned otherwise, fall under: +Creative Commons Attribution-ShareAlike 3.0 Unported (CC BY-SA 3.0) +http://creativecommons.org/licenses/by-sa/3.0/ + +See README.txt in each mod directory for detailed information about other authors. + diff --git a/MISSING_ENGINE_FEATURES.md b/MISSING_ENGINE_FEATURES.md deleted file mode 100644 index fddb89f6c..000000000 --- a/MISSING_ENGINE_FEATURES.md +++ /dev/null @@ -1,40 +0,0 @@ -# Missing features in Minetest to recreate Minecraft features - -A side goal of the MineClone 2 project is to find any shortcomings of Minetest which make it impossible to recreate a Minecraft feature exactly. -This file lists some of the missing features in Minetest which MineClone 2 would require. - -## No workaround possible -For these features, no easy Lua workaround could be found. - -### Lua API -#### Tools/wielded item -- “Lock” hotbar for a brief time after using an item, making it impossible to switch item or to attach/mine/build until the delay is over (For eating with delay) -- Tool charging: Holding down the mouse and releasing it, applying a “power level” (For bow and arrows, more charge = higher arrow range) ([issue 5212](https://github.com/minetest/minetest/issues/5212)) -- [Dual Wielding](http://minecraft.gamepedia.com/Dual_wield) -- Eating/drinking animation ([issue 2811](https://github.com/minetest/minetest/issues/2811)) - -#### Nodes -- Light level 15 for nodes (not sunlight) -- Nodes makes light level drop by 2 or or more per node ([issue 5209](https://github.com/minetest/minetest/issues/5209)) - -## Interface -- Inventory: Hold down right mouse button while holding an item stack to drop items into the slots as you move the mouse. Makes crafting MUCH faster -- Sneak+Leftclick on crafting output crafts as many items as possible and immediately puts it into the player inventory ([issue 5211](https://github.com/minetest/minetest/issues/5211)) -- Sneak+click puts items in different inventories depending on the item type (maybe group-based)? Required for sneak-clicking to armor slots - -## Workaround theoretically possible -For these features, a workaround (or hack ;-)) by using Lua is theoretically possible. But engine support would be clearly better, more performant, more reliable, etc. - -### Lua API -#### Nodes -- Change walking speed on block (soul sand) -- Change jumping height on block (soul sand), -- Change object movement speed *through* a block, but for non-liquids (for cobweb) -- Add `on_walk_over` event -- Set frequency in which players lose breath. 2 seconds are hardcoded in Minetest, in Minecraft it's 1 second -- Set damage frequency of `damage_per_second`. In Minecraft many things damage players every half-second rather than every second -- Possible to damage players directly when they are with the head inside. This allows to add Minecraft-like suffocation -- Sneak+click on inventory slot should be able to put items into additional “fallback inventories” if the first inventory is full. Useful for large chests - -#### Nice-to-haye -- Utility function to rotate pillar-like nodes, requiring only 3 possible orientations (X, Y, Z). Basically this is `minetest.rotate_node` but with less orientations; the purpur pillar would mess up if a mirrored rotation would be possible. This is already implemented in MCL2, See `mcl_util` for more infos diff --git a/README.md b/README.md index c94081bf0..034d381ab 100644 --- a/README.md +++ b/README.md @@ -2,7 +2,7 @@ An unofficial Minecraft-like game for Minetest. Forked from MineClone by davedevils. Developed by many people. Not developed or endorsed by Mojang AB. -Version: 0.70.0 +Version: 0.72.0 (in development) ### Gameplay You start in a randomly-generated world made entirely of cubes. You can explore @@ -65,16 +65,8 @@ map builders. They can not be obtained in-game or in the creative inventory. Use the `/giveme` chat command to obtain them. See the in-game help for an explanation. -#### Incomplete items -These items do not work yet, but you can get them with `/giveme` for testing: - -* Minecart with Chest: `mcl_minecarts:chest_minecart` -* Minecart with Furnace: `mcl_minecarts:furnace_minecart` -* Minecart with Hopper: `mcl_minecarts:hopper_minecart` -* Minecart with Command Block: `mcl_minecarts:command_block_minecart` - ## Installation -This game requires [Minetest](http://minetest.net) to run (version 5.0.0 or +This game requires [Minetest](http://minetest.net) to run (version 5.3.0 or later). So you need to install Minetest first. Only stable versions of Minetest are officially supported. There is no support for running MineClone 2 in development versions of Minetest. @@ -83,23 +75,38 @@ To install MineClone 2 (if you haven't already), move this directory into the “games” directory of your Minetest data directory. Consult the help of Minetest to learn more. +## Useful links +The MineClone2 repository is hosted at Mesehub. To contribute or report issues, head there. + +* Mesehub: +* Discord: +* YouTube +* IRC: +* Matrix: +* Reddit: +* Minetest forums: + ## Project description The main goal of **MineClone 2** is to be a clone of Minecraft and to be released as free software. * **Target of development: Minecraft, PC Edition, version 1.12** (later known as “Java Edition”) * MineClone2 also includes Optifine features supported by the Minetest -* Features of later Minecraft versions might sneak in, but they have a low priority -* In general, Minecraft is aimed to be cloned as good as Minetest currently permits (no hacks) +* In general, Minecraft is aimed to be cloned as good as possible * Cloning the gameplay has highest priority -* MineClone 2 will use different graphics and sounds, but with a similar style -* Cloning the interface has no priority. It will only be roughly imitated -* Limitations found in Minetest will be written down and reported in the course of development +* MineClone 2 will use different assets, but with a similar style +* Limitations found in Minetest will be documented in the course of development +* Features of later Minecraft versions are collected in the mineclone5 branch + +## Using features from newer versions of Minecraft +For > 1.12 features, checkout MineClone5. It includes features from newer Minecraft versions. +Download it here: https://git.minetest.land/MineClone2/MineClone2/src/branch/mineclone5 ## Completion status -This game is currently in **alpha** stage. -It is playable, but unfinished, many bugs are to be expected. -Backwards-compability is *not* guaranteed, updating your world might cause small and -big bugs (such as “missing node” errors or even crashes). +This game is currently in **beta** stage. +It is playable, but not yet feature-complete. +Backwards-compability is not entirely guaranteed, updating your world might cause small bugs. +If you want to use the git version of MineClone2 in production, consider using the production branch. +It is updated weekly and contains relatively stable code for servers. The following main features are available: @@ -128,7 +135,7 @@ The following main features are available: * Clock * Compass * Sponge -* Slime block (does not interact with redstone) +* Slime block * Small plants and saplings * Dyes * Banners @@ -140,19 +147,19 @@ The following main features are available: * Creative inventory * Farming * Writable books -* A few server commands +* Commands +* Villages +* The End * And more! The following features are incomplete: -* Generated structures (especially villages) * Some monsters and animals * Redstone-related things -* The End * Special minecarts * A couple of non-trivial blocks and items -Bonus features (not found in Minecraft 1.11): +Bonus features (not found in Minecraft 1.12): * Built-in crafting guide which shows you crafting and smelting recipes * In-game help system containing extensive help about gameplay basics, blocks, items and more @@ -177,142 +184,14 @@ Technical differences from Minecraft: * Different textures (Pixel Perfection) * Different sounds (various sources) * Different engine (Minetest) +* Different easter eggs … and finally, MineClone 2 is free software (“free” as in “freedom”)! -## Reporting bugs -Please report all bugs and missing Minecraft features here: - - - ## Other readme files * `LICENSE.txt`: The GPLv3 license text * `CONTRIBUTING.md`: Information for those who want to contribute -* `MISSING_ENGINE_FEATURES.md`: List of missing features in Minetest which MineClone 2 would need for improvement * `API.md`: For Minetest modders who want to mod this game - -## Credits -There are so many people to list (sorry). Check out the respective mod directories for details. This section is only a rough overview of the core authors of this game. - -### Coding -* [Wuzzy](https://forum.minetest.net/memberlist.php?mode=viewprofile&u=3082): Main programmer of most mods (retired) -* davedevils: Creator of MineClone on which MineClone 2 is based on -* [ex-bart](https://github.com/ex-bart): Redstone comparators -* [Rootyjr](https://github.com/Rootyjr): Fishing rod and bugfixes -* [aligator](https://github.com/aligator): Improvement of doors -* [ryvnf](https://github.com/ryvnf): Explosion mechanics -* MysticTempest: Bugfixes -* [bzoss](https://github.com/bzoss): Status effects, potions, brewing stand -* kay27 : Experience system, bugfixes, optimizations (Current maintainer) -* [EliasFleckenstein03](https://github.com/EliasFleckenstein03): End crystals, enchanting, burning mobs / players, animated chests, bugfixes (Current maintainer) -* 2mac: Fix bug with powered rail -* Lots of other people: TO BE WRITTEN (see mod directories for details) - -#### Mod credits (summary) - -* `controls`: Arcelmi -* `flowlib`: Qwertymine13 -* `walkover`: lordfingle -* `drippingwater`: kddekadenz -* `mobs_mc`: maikerumine, 22i and others -* `awards`: rubenwardy -* `screwdriver`: RealBadAngel, Maciej Kastakin, Minetest contributors -* `xpanes`: Minetest contributors -* `mesecons` mods: Jeija and contributors -* `wieldview`: Stuart Jones -* `mcl_meshhand`: Based on `newhand` by jordan4ibanez -* `mcl_mobs`: Based on Mobs Redo [`mobs`] by TenPlus1 and contributors -* Most other mods: Wuzzy - -Detailed credits for each mod can be found in the individual mod directories. - -### Graphics -* [XSSheep](http://www.minecraftforum.net/members/XSSheep): Main author; creator of the Pixel Perfection resource pack of Minecraft 1.11 -* [Wuzzy](https://forum.minetest.net/memberlist.php?mode=viewprofile&u=3082): Main menu imagery and various edits and additions of texture pack -* [kingoscargames](https://github.com/kingoscargames): Various edits and additions of existing textures -* [leorockway](https://github.com/leorockway): Some edits of mob textures -* [xMrVizzy](https://minecraft.curseforge.com/members/xMrVizzy): Glazed terracotta (textures are subject to be replaced later) -* yutyo : MineClone 2 logo -* Other authors: GUI images - -### Translations -* Wuzzy: German -* Rocher Laurent : French -* wuniversales: Spanish -* kay27 : Russian - -### Models -* [22i](https://github.com/22i): Creator of all models -* [tobyplowy](https://github.com/tobyplowy): UV-mapping fixes to said models - -### Sounds and music -Various sources. See the respective mod directories for details. - -### Special thanks - -* davedevils for starting MineClone, the original version of this game -* Wuzzy for starting and maintaining MineClone2 for several years -* celeron55 for creating Minetest -* Minetest's modding community for providing a huge selection of mods, some of which ended up in MineClone 2 -* Jordach for the jukebox music compilation from Big Freaking Dig -* The workaholics who spent way too much time writing for the Minecraft Wiki. It's an invaluable resource for creating this game -* Notch and Jeb for being the major forces behind Minecraft -* XSSheep for creating the Pixel Perfection resource pack -* [22i](https://github.com/22i) for providing great models and support -* [maikerumine](http://github.com/maikerumine) for kicking off mobs and biomes - -## Info for programmers -You find interesting and useful infos in `API.md`. - -## Legal information -This is a fan game, not developed or endorsed by Mojang AB. - -Copying is an act of love. Please copy and share! <3 -Here's the detailed legalese for those who need it: - -### License of source code -MineClone 2 (by kay27, EliasFleckenstein, Wuzzy, davedevils and countless others) -is an imitation of Minecraft. - -MineClone 2 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 (in the LICENSE.txt file) for more -details. - -In the mods you might find in the read-me or license -text files a different license. This counts as dual-licensing. -You can choose which license applies to you: Either the -license of MineClone 2 (GNU GPLv3) or the mod's license. - -MineClone 2 is a direct continuation of the discontinued MineClone -project by davedevils. - -Mod credits: -See `README.txt` or `README.md` in each mod directory for information about other authors. -For mods that do not have such a file, the license is the source code license -of MineClone 2 and the author is Wuzzy. - -### License of media (textures and sounds) -No non-free licenses are used anywhere. - -The textures, unless otherwise noted, are based on the Pixel Perfection resource pack for Minecraft 1.11, -authored by XSSheep. Most textures are verbatim copies, while some textures have been changed or redone -from scratch. -The glazed terracotta textures have been created by (MysticTempest)[https://github.com/MysticTempest]. -Source: -License: [CC BY-SA 4.0](http://creativecommons.org/licenses/by-sa/4.0/) - -The main menu images are release under: [CC0](https://creativecommons.org/publicdomain/zero/1.0/) - -All other files, unless mentioned otherwise, fall under: -Creative Commons Attribution-ShareAlike 3.0 Unported (CC BY-SA 3.0) -http://creativecommons.org/licenses/by-sa/3.0/ - -See README.txt in each mod directory for detailed information about other authors. +* `LEGAL.md`: Legal information +* `CREDITS.md`: List of everyone who contributed diff --git a/description.txt b/description.txt index 805bdb217..d45188894 100644 --- a/description.txt +++ b/description.txt @@ -1 +1 @@ -A survival sandbox game. Survive, gather, hunt, mine, build, explore, and do much more. Faithful clone of Minecraft 1.11. This is a work in progress! Expect bugs! +A survival sandbox game. Survive, gather, hunt, mine, build, explore, and do much more. Faithful clone of Minecraft 1.12. This is a work in progress! Expect bugs! diff --git a/menu/Header.blend b/menu/Header.blend new file mode 100644 index 0000000000000000000000000000000000000000..78a9f6158d1bde99a24376353485d5becf84dd73 GIT binary patch literal 1670380 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 z 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

R+D(RA(!nOz$92aI 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 aYyTg9*d2kzhi~x!0000K!d-DP) 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 for more information. -In MineClone 2, all diggable node have the hardness set in the custom field “_mcl_hardness” (0 by default). -The nodes are also required to specify the “eligible” tools in groups like “pickaxey”, “shovely”, etc. -This mod then calculates the real digging time based on the node meta data. The real digging times -are then added into mcl_autogroup.digtimes where the table indices are group rating and the values are the -digging times in seconds. These digging times can be then added verbatim into the tool definitions. +See Minecraft Wiki for more +information. -Example: -mcl_autogroup.digtimes.pickaxey_dig_diamond[1] = 0.2 +How the mod is used +=================== -→ This means that when a node has been assigned the group “pickaxey_dig_diamond=1”, it can be dug by the -diamond pickaxe in 0.2 seconds. +In MineClone 2, all diggable nodes have the hardness set in the custom field +"_mcl_hardness" (0 by default). These values are used together with digging +groups by this mod to create the correct digging times for nodes. Digging +groups are registered using the following code: + mcl_autogroup.register_diggroup("shovely") + mcl_autogroup.register_diggroup("pickaxey", { + levels = { "wood", "gold", "stone", "iron", "diamond" } + }) +The first line registers a simple digging group. The second line registers a +digging group with 5 different levels (in this case one for each material of a +pickaxes). -This strange setup with mcl_autogroup has been done to minimize the amount of required digging times -a single tool needs to use. If this is not being done, the loading time will increase considerably -(>10s). +Nodes indicate that they belong to a particular digging group by being member of +the digging group in their node definition. "mcl_core:dirt" for example has +shovely=1 in its groups. If the digging group has multiple levels the value of +the group indicates which digging level the node requires. +"mcl_core:stone_with_gold" for example has pickaxey=4 because it requires a +pickaxe of level 4 be mined. -]] +For tools to be able to dig nodes of digging groups they need to use the have +the custom field "_mcl_diggroups" function to get the groupcaps. The value of +this field is a table which defines which groups the tool can dig and how +efficiently. -local materials = { "wood", "gold", "stone", "iron", "diamond" } -local basegroups = { "pickaxey", "axey", "shovely" } -local minigroups = { "handy", "shearsy", "swordy", "shearsy_wool", "swordy_cobweb" } -local divisors = { - ["wood"] = 2, - ["gold"] = 12, - ["stone"] = 4, - ["iron"] = 6, - ["diamond"] = 8, - ["handy"] = 1, - ["shearsy"] = 15, - ["swordy"] = 1.5, - ["shearsy_wool"] = 5, - ["swordy_cobweb"] = 15, -} -local max_efficiency_level = 5 + _mcl_diggroups = { + handy = { speed = 1, level = 1, uses = 0 }, + pickaxey = { speed = 1, level = 0, uses = 0 }, + } -mcl_autogroup = {} -mcl_autogroup.digtimes = {} -mcl_autogroup.creativetimes = {} -- Copy of digtimes, except that all values are 0. Used for creative mode +The "uses" field indicate how many uses (0 for infinite) a tool has when used on +the specified digging group. The "speed" field is a multiplier to the dig speed +on that digging group. -for m=1, #materials do - for g=1, #basegroups do - mcl_autogroup.digtimes[basegroups[g].."_dig_"..materials[m]] = {} - mcl_autogroup.creativetimes[basegroups[g].."_dig_"..materials[m]] = {} - for e=1, max_efficiency_level do - mcl_autogroup.digtimes[basegroups[g].."_dig_"..materials[m].."_efficiency_"..e] = {} +The "level" field indicates which levels of the group the tool can harvest. A +level of 0 means that the tool cannot harvest blocks of that node. A level of 1 +or above means that the tool can harvest nodes with that level or below. See +"mcl_tools/init.lua" for examples on how "_mcl_diggroups" is used in practice. + +Information about the mod +========================= + +The mod is split up into two parts, mcl_autogroup and _mcl_autogroup. +mcl_autogroup contains the API functions used to register custom digging groups. +_mcl_autogroup contains most of the code. The leading underscore in the name +"_mcl_autogroup" is used to force Minetest to load that part of the mod as late +as possible. Minetest loads mods in reverse alphabetical order. + +This also means that it is very important that no mod adds _mcl_autogroup as a +dependency. +--]] + +assert(minetest.get_modpath("mcl_autogroup"), "This mod requires the mod mcl_autogroup to function") + +-- Returns a table containing the unique "_mcl_hardness" for nodes belonging to +-- each diggroup. +local function get_hardness_values_for_groups() + local maps = {} + local values = {} + for g, _ in pairs(mcl_autogroup.registered_diggroups) do + maps[g] = {} + values[g] = {} + end + + for _, ndef in pairs(minetest.registered_nodes) do + for g, _ in pairs(mcl_autogroup.registered_diggroups) do + if ndef.groups[g] then + maps[g][ndef._mcl_hardness or 0] = true + end + end + end + + for g, map in pairs(maps) do + for k, _ in pairs(map) do + table.insert(values[g], k) + end + end + + for g, _ in pairs(mcl_autogroup.registered_diggroups) do + table.sort(values[g]) + end + return values +end + +-- Returns a table containing a table indexed by "_mcl_hardness_value" to get +-- its index in the list of unique hardnesses for each diggroup. +local function get_hardness_lookup_for_groups(hardness_values) + local map = {} + for g, values in pairs(hardness_values) do + map[g] = {} + for k, v in pairs(values) do + map[g][v] = k + end + end + return map +end + +-- Array of unique hardness values for each group which affects dig time. +local hardness_values = get_hardness_values_for_groups() + +-- Map indexed by hardness values which return the index of that value in +-- hardness_value. Used for quick lookup. +local hardness_lookup = get_hardness_lookup_for_groups(hardness_values) + +--[[local function compute_creativetimes(group) + local creativetimes = {} + + for index, hardness in pairs(hardness_values[group]) do + table.insert(creativetimes, 0) + end + + return creativetimes +end]] + +-- Get the list of digging times for using a specific tool on a specific +-- diggroup. +-- +-- Parameters: +-- group - the group which it is digging +-- can_harvest - if the tool can harvest the block +-- speed - dig speed multiplier for tool (default 1) +-- efficiency - efficiency level for the tool if applicable +local function get_digtimes(group, can_harvest, speed, efficiency) + local speed = speed or 1 + if efficiency then + speed = speed + efficiency * efficiency + 1 + end + + local digtimes = {} + + for index, hardness in pairs(hardness_values[group]) do + local digtime = (hardness or 0) / speed + if can_harvest then + digtime = digtime * 1.5 + else + digtime = digtime * 5 + end + + if digtime <= 0.05 then + digtime = 0 + else + digtime = math.ceil(digtime * 20) / 20 + end + table.insert(digtimes, digtime) + end + + return digtimes +end + +-- Get one groupcap field for using a specific tool on a specific group. +local function get_groupcap(group, can_harvest, multiplier, efficiency, uses) + return { + times = get_digtimes(group, can_harvest, multiplier, efficiency), + uses = uses, + maxlevel = 0, + } +end + +-- Add the groupcaps from a field in "_mcl_diggroups" to the groupcaps of a +-- tool. +local function add_groupcaps(toolname, groupcaps, groupcaps_def, efficiency) + if not groupcaps_def then + return + end + + for g, capsdef in pairs(groupcaps_def) do + local mult = capsdef.speed or 1 + local uses = capsdef.uses + local def = mcl_autogroup.registered_diggroups[g] + local max_level = def.levels and #def.levels or 1 + + assert(capsdef.level, toolname .. ' is missing level for ' .. g) + local level = math.min(capsdef.level, max_level) + + if def.levels then + groupcaps[g .. "_dig_default"] = get_groupcap(g, false, mult, efficiency, uses) + if level > 0 then + groupcaps[g .. "_dig_" .. def.levels[level]] = get_groupcap(g, true, mult, efficiency, uses) + end + else + groupcaps[g .. "_dig"] = get_groupcap(g, level > 0, mult, efficiency, uses) end end end -for g=1, #minigroups do - mcl_autogroup.digtimes[minigroups[g].."_dig"] = {} - mcl_autogroup.creativetimes[minigroups[g].."_dig"] = {} - for e=1, max_efficiency_level do - mcl_autogroup.digtimes[minigroups[g].."_dig_efficiency_"..e] = {} - mcl_autogroup.creativetimes[minigroups[g].."_dig_efficiency_"..e] = {} + +-- Checks if the given node would drop its useful drop if dug by a given tool. +-- Returns true if it will yield its useful drop, false otherwise. +function mcl_autogroup.can_harvest(nodename, toolname) + local ndef = minetest.registered_nodes[nodename] + + if not ndef then + return false end + + if minetest.get_item_group(nodename, "dig_immediate") >= 2 then + return true + end + + -- Check if it can be dug by tool + local tdef = minetest.registered_tools[toolname] + if tdef and tdef._mcl_diggroups then + for g, gdef in pairs(tdef._mcl_diggroups) do + if ndef.groups[g] then + if ndef.groups[g] <= gdef.level then + return true + end + end + end + end + + -- Check if it can be dug by hand + local tdef = minetest.registered_tools[""] + if tdef then + for g, gdef in pairs(tdef._mcl_diggroups) do + if ndef.groups[g] then + if ndef.groups[g] <= gdef.level then + return true + end + end + end + end + + return false end -local overwrite = function() +-- Get one groupcap field for using a specific tool on a specific group. +--[[local function get_groupcap(group, can_harvest, multiplier, efficiency, uses) + return { + times = get_digtimes(group, can_harvest, multiplier, efficiency), + uses = uses, + maxlevel = 0, + } +end]] + +-- Returns the tool_capabilities from a tool definition or a default set of +-- tool_capabilities +local function get_tool_capabilities(tdef) + if tdef.tool_capabilities then + return tdef.tool_capabilities + end + + -- If the damage group and punch interval from hand is not included, + -- then the user will not be able to attack with the tool. + local hand_toolcaps = minetest.registered_tools[""].tool_capabilities + return { + full_punch_interval = hand_toolcaps.full_punch_interval, + damage_groups = hand_toolcaps.damage_groups + } +end + +-- Get the groupcaps for a tool. This function returns "groupcaps" table of +-- digging which should be put in the "tool_capabilities" of the tool definition +-- or in the metadata of an enchanted tool. +-- +-- Parameters: +-- toolname - Name of the tool being enchanted (like "mcl_tools:diamond_pickaxe") +-- efficiency - The efficiency level the tool is enchanted with (default 0) +-- +-- NOTE: +-- This function can only be called after mod initialization. Otherwise a mod +-- would have to add _mcl_autogroup as a dependency which would break the mod +-- loading order. +function mcl_autogroup.get_groupcaps(toolname, efficiency) + local tdef = minetest.registered_tools[toolname] + local groupcaps = table.copy(get_tool_capabilities(tdef).groupcaps or {}) + add_groupcaps(toolname, groupcaps, tdef._mcl_diggroups, efficiency) + return groupcaps +end + +-- Get the wear from using a tool on a digging group. +-- +-- Parameters +-- toolname - Name of the tool used +-- diggroup - The name of the diggroup the tool is used on +-- +-- NOTE: +-- This function can only be called after mod initialization. Otherwise a mod +-- would have to add _mcl_autogroup as a dependency which would break the mod +-- loading order. +function mcl_autogroup.get_wear(toolname, diggroup) + local tdef = minetest.registered_tools[toolname] + local uses = tdef._mcl_diggroups[diggroup].uses + return math.ceil(65535 / uses) +end + +local function overwrite() for nname, ndef in pairs(minetest.registered_nodes) do - local groups_changed = false local newgroups = table.copy(ndef.groups) if (nname ~= "ignore" and ndef.diggable) then - -- Automatically assign the “solid” group for solid nodes + -- Automatically assign the "solid" group for solid nodes if (ndef.walkable == nil or ndef.walkable == true) and (ndef.collision_box == nil or ndef.collision_box.type == "regular") and (ndef.node_box == nil or ndef.node_box.type == "regular") and (ndef.groups.not_solid == 0 or ndef.groups.not_solid == nil) then newgroups.solid = 1 - groups_changed = true end - -- Automatically assign the “opaque” group for opaque nodes + -- Automatically assign the "opaque" group for opaque nodes if (not (ndef.paramtype == "light" or ndef.sunlight_propagates)) and (ndef.groups.not_opaque == 0 or ndef.groups.not_opaque == nil) then newgroups.opaque = 1 - groups_changed = true end - local function calculate_group(hardness, material, diggroup, newgroups, actual_rating, expected_rating, efficiency) - local time, validity_factor - if actual_rating >= expected_rating then - -- Valid tool - validity_factor = 1.5 - else - -- Wrong tool (higher digging time) - validity_factor = 5 - end - local speed_multiplier = divisors[material] - if efficiency then - speed_multiplier = speed_multiplier + efficiency * efficiency + 1 - end - time = (hardness * validity_factor) / speed_multiplier - if time <= 0.05 then - time = 0 - else - time = math.ceil(time * 20) / 20 - end - table.insert(mcl_autogroup.digtimes[diggroup], time) - if not efficiency then - table.insert(mcl_autogroup.creativetimes[diggroup], 0) - end - newgroups[diggroup] = #mcl_autogroup.digtimes[diggroup] - return newgroups - end + --local creative_breakable = false - -- Hack in digging times - local hardness = ndef._mcl_hardness - if not hardness then - hardness = 0 - end + -- Assign groups used for digging this node depending on + -- the registered digging groups + for g, gdef in pairs(mcl_autogroup.registered_diggroups) do + --creative_breakable = true + local index = hardness_lookup[g][ndef._mcl_hardness or 0] + if ndef.groups[g] then + if gdef.levels then + newgroups[g .. "_dig_default"] = index - -- Handle pickaxey, axey and shovely - for _, basegroup in pairs(basegroups) do - if (hardness ~= -1 and ndef.groups[basegroup]) then - for g=1,#materials do - local diggroup = basegroup.."_dig_"..materials[g] - newgroups = calculate_group(hardness, materials[g], diggroup, newgroups, g, ndef.groups[basegroup]) - for e=1,max_efficiency_level do - newgroups = calculate_group(hardness, materials[g], diggroup .. "_efficiency_" .. e, newgroups, g, ndef.groups[basegroup], e) + for i = ndef.groups[g], #gdef.levels do + newgroups[g .. "_dig_" .. gdef.levels[i]] = index end - groups_changed = true - end - end - end - for m=1, #minigroups do - local minigroup = minigroups[m] - if hardness ~= -1 then - local diggroup = minigroup.."_dig" - -- actual rating - local ar = ndef.groups[minigroup] - if ar == nil then - ar = 0 - end - if (minigroup == "handy") - or - (ndef.groups.shearsy_wool and minigroup == "shearsy_wool" and ndef.groups.wool) - or - (ndef.groups.swordy_cobweb and minigroup == "swordy_cobweb" and nname == "mcl_core:cobweb") - or - (ndef.groups[minigroup] and minigroup ~= "swordy_cobweb" and minigroup ~= "shearsy_wool") then - newgroups = calculate_group(hardness, minigroup, diggroup, newgroups, ar, 1) - for e=1,max_efficiency_level do - newgroups = calculate_group(hardness, minigroup, diggroup .. "_efficiency_" .. e, newgroups, ar, 1, e) - end - groups_changed = true + else + newgroups[g .. "_dig"] = index end end end - if groups_changed then - minetest.override_item(nname, { - groups = newgroups - }) - end + -- Automatically assign the node to the + -- creative_breakable group if it belongs to any digging + -- group. + newgroups["creative_breakable"] = 1 + + minetest.override_item(nname, { + groups = newgroups + }) + end + end + + for tname, tdef in pairs(minetest.registered_tools) do + -- Assign groupcaps for digging the registered digging groups + -- depending on the _mcl_diggroups in the tool definition + if tdef._mcl_diggroups then + local toolcaps = table.copy(get_tool_capabilities(tdef)) + toolcaps.groupcaps = mcl_autogroup.get_groupcaps(tname) + + minetest.override_item(tname, { + tool_capabilities = toolcaps + }) end end end diff --git a/mods/CORE/_mcl_autogroup/mod.conf b/mods/CORE/_mcl_autogroup/mod.conf index fb171b765..eea72c40f 100644 --- a/mods/CORE/_mcl_autogroup/mod.conf +++ b/mods/CORE/_mcl_autogroup/mod.conf @@ -1 +1,3 @@ name = _mcl_autogroup +author = ryvnf +description = MineClone 2 core mod which automatically adds groups to all items. Very important for digging times. diff --git a/mods/CORE/biomeinfo/init.lua b/mods/CORE/biomeinfo/init.lua index 5013647ed..950925f9d 100644 --- a/mods/CORE/biomeinfo/init.lua +++ b/mods/CORE/biomeinfo/init.lua @@ -81,11 +81,11 @@ if v6_use_snow_biomes then end local v6_freq_desert = tonumber(minetest.get_mapgen_setting("mgv6_freq_desert") or 0.45) -local NOISE_MAGIC_X = 1619 -local NOISE_MAGIC_Y = 31337 -local NOISE_MAGIC_Z = 52591 -local NOISE_MAGIC_SEED = 1013 -local noise2d = function(x, y, seed) +--local NOISE_MAGIC_X = 1619 +--local NOISE_MAGIC_Y = 31337 +--local NOISE_MAGIC_Z = 52591 +--local NOISE_MAGIC_SEED = 1013 +local function noise2d(x, y, seed) -- TODO: implement noise2d function for biome blend return 0 --[[ diff --git a/mods/CORE/biomeinfo/mod.conf b/mods/CORE/biomeinfo/mod.conf index 95be561a3..8e9f3b1d0 100644 --- a/mods/CORE/biomeinfo/mod.conf +++ b/mods/CORE/biomeinfo/mod.conf @@ -1,2 +1,3 @@ name = biomeinfo +author = Wuzzy description = Simple API to get data about biomes. diff --git a/mods/CORE/controls/API.md b/mods/CORE/controls/API.md new file mode 100644 index 000000000..8d9df6ca5 --- /dev/null +++ b/mods/CORE/controls/API.md @@ -0,0 +1,23 @@ +# controls + +## controls.players +Table containing player controls at runtime. +WARNING: Never use this table in writing + +## controls.register_on_press(func) +Register a function that will be executed with (player, keyname) every time a player press a key. + +## controls.registered_on_press +Table containing functions registered with controls.register_on_press(). + +## controls.register_on_release(func) +Register a function that will be executed with (player, keyname, clock_from_last_press) every time a player release a key. + +## controls.registered_on_release +Table containing functions registered with controls.register_on_release(). + +## controls.register_on_hold(func) +Register a function that will be executed with (player, keyname, clock_from_start_hold) every time a player hold a key. + +## controls.registered_on_hold +Table containing functions registered with controls.register_on_hold(). \ No newline at end of file diff --git a/mods/CORE/controls/init.lua b/mods/CORE/controls/init.lua index a219b794c..ef57281a4 100644 --- a/mods/CORE/controls/init.lua +++ b/mods/CORE/controls/init.lua @@ -1,3 +1,8 @@ +local get_connected_players = minetest.get_connected_players +local clock = os.clock + +local pairs = pairs + controls = {} controls.players = {} @@ -17,15 +22,15 @@ function controls.register_on_hold(func) end local known_controls = { - jump=true, - right=true, - left=true, - LMB=true, - RMB=true, - sneak=true, - aux1=true, - down=true, - up=true, + jump = true, + right = true, + left = true, + LMB = true, + RMB = true, + sneak = true, + aux1 = true, + down = true, + up = true, } minetest.register_on_joinplayer(function(player) @@ -42,31 +47,31 @@ minetest.register_on_leaveplayer(function(player) end) minetest.register_globalstep(function(dtime) - for _, player in pairs(minetest.get_connected_players()) do + for _, player in pairs(get_connected_players()) do local player_name = player:get_player_name() local player_controls = player:get_player_control() if controls.players[player_name] then - for cname, cbool in pairs(player_controls) do - if known_controls[cname] == true then - --Press a key - if cbool==true and controls.players[player_name][cname][1]==false then - for _, func in pairs(controls.registered_on_press) do - func(player, cname) + for cname, cbool in pairs(player_controls) do + if known_controls[cname] == true then + --Press a key + if cbool == true and controls.players[player_name][cname][1] == false then + for _, func in pairs(controls.registered_on_press) do + func(player, cname) + end + controls.players[player_name][cname] = {true, clock()} + elseif cbool == true and controls.players[player_name][cname][1] == true then + for _, func in pairs(controls.registered_on_hold) do + func(player, cname, clock()-controls.players[player_name][cname][2]) + end + --Release a key + elseif cbool == false and controls.players[player_name][cname][1] == true then + for _, func in pairs(controls.registered_on_release) do + func(player, cname, clock()-controls.players[player_name][cname][2]) + end + controls.players[player_name][cname] = {false} + end end - controls.players[player_name][cname] = {true, os.clock()} - elseif cbool==true and controls.players[player_name][cname][1]==true then - for _, func in pairs(controls.registered_on_hold) do - func(player, cname, os.clock()-controls.players[player_name][cname][2]) - end - --Release a key - elseif cbool==false and controls.players[player_name][cname][1]==true then - for _, func in pairs(controls.registered_on_release) do - func(player, cname, os.clock()-controls.players[player_name][cname][2]) - end - controls.players[player_name][cname] = {false} end end - end - end end end) diff --git a/mods/CORE/controls/mod.conf b/mods/CORE/controls/mod.conf index 8fab3aa2b..83ebb2e25 100644 --- a/mods/CORE/controls/mod.conf +++ b/mods/CORE/controls/mod.conf @@ -1 +1,4 @@ -name=controls +name = controls +author = Arcelmi +description = Controls framework by Arcelmi + diff --git a/mods/CORE/flowlib/API.md b/mods/CORE/flowlib/API.md new file mode 100644 index 000000000..20e85036b --- /dev/null +++ b/mods/CORE/flowlib/API.md @@ -0,0 +1,45 @@ +# flowlib +Simple flow functions. + +## flowlib.is_touching(realpos, nodepos, radius) +Return true if a sphere of at collide with node at . +* realpos: position +* nodepos: position +* radius: number + +## flowlib.is_water(pos) +Return true if node at is water, false overwise. +* pos: position + +## flowlib.node_is_water(node) +Return true if is water, false overwise. +* node: node + +## flowlib.is_lava(pos) +Return true if node at is lava, false overwise. +* pos: position + +## flowlib.node_is_lava(node) +Return true if is lava, false overwise. +* node: node + +## flowlib.is_liquid(pos) +Return true if node at is liquid, false overwise. +* pos: position + +## flowlib.node_is_liquid(node) +Return true if is liquid, false overwise. +* node: node + +## flowlib.quick_flow(pos, node) +Return direction where the water is flowing (to be use to push mobs, items...). +* pos: position +* node: node + +## flowlib.move_centre(pos, realpos, node, radius) +Return the pos of the nearest not water block near from in a sphere of at . +WARNING: This function is never used in mcl2, use at your own risk. The informations described here may be wrong. +* pos: position +* realpos: position, position of the entity +* node: node +* radius: number \ No newline at end of file diff --git a/mods/CORE/flowlib/init.lua b/mods/CORE/flowlib/init.lua index e4e22a20e..ab710e476 100644 --- a/mods/CORE/flowlib/init.lua +++ b/mods/CORE/flowlib/init.lua @@ -1,95 +1,100 @@ +local math = math + +local get_node = minetest.get_node +local get_item_group = minetest.get_item_group + +local registered_nodes = minetest.registered_nodes + flowlib = {} --sum of direction vectors must match an array index + +--(sum,root) +--(0,1), (1,1+0=1), (2,1+1=2), (3,1+2^2=5), (4,2^2+2^2=8) + +local inv_roots = { + [0] = 1, + [1] = 1, + [2] = 0.70710678118655, + [4] = 0.5, + [5] = 0.44721359549996, + [8] = 0.35355339059327, +} + local function to_unit_vector(dir_vector) - --(sum,root) - -- (0,1), (1,1+0=1), (2,1+1=2), (3,1+2^2=5), (4,2^2+2^2=8) - local inv_roots = {[0] = 1, [1] = 1, [2] = 0.70710678118655, [4] = 0.5 - , [5] = 0.44721359549996, [8] = 0.35355339059327} - local sum = dir_vector.x*dir_vector.x + dir_vector.z*dir_vector.z - return {x=dir_vector.x*inv_roots[sum],y=dir_vector.y - ,z=dir_vector.z*inv_roots[sum]} + local sum = dir_vector.x * dir_vector.x + dir_vector.z * dir_vector.z + return {x = dir_vector.x * inv_roots[sum], y = dir_vector.y, z = dir_vector.z * inv_roots[sum]} end -local is_touching = function(realpos,nodepos,radius) +local function is_touching(realpos,nodepos,radius) local boarder = 0.5 - radius - return (math.abs(realpos - nodepos) > (boarder)) + return math.abs(realpos - nodepos) > (boarder) end flowlib.is_touching = is_touching -local is_water = function(pos) - return (minetest.get_item_group(minetest.get_node( - {x=pos.x,y=pos.y,z=pos.z}).name - , "water") ~= 0) +local function is_water(pos) + return get_item_group(get_node(pos).name, "water") ~= 0 end flowlib.is_water = is_water -local node_is_water = function(node) - return (minetest.get_item_group(node.name, "water") ~= 0) +local function node_is_water(node) + return get_item_group(node.name, "water") ~= 0 end flowlib.node_is_water = node_is_water -local is_lava = function(pos) - return (minetest.get_item_group(minetest.get_node( - {x=pos.x,y=pos.y,z=pos.z}).name - , "lava") ~= 0) +local function is_lava(pos) + return get_item_group(get_node(pos).name, "lava") ~= 0 end flowlib.is_lava = is_lava -local node_is_lava = function(node) - return (minetest.get_item_group(node.name, "lava") ~= 0) +local function node_is_lava(node) + return get_item_group(node.name, "lava") ~= 0 end flowlib.node_is_lava = node_is_lava -local is_liquid = function(pos) - return (minetest.get_item_group(minetest.get_node( - {x=pos.x,y=pos.y,z=pos.z}).name - , "liquid") ~= 0) +local function is_liquid(pos) + return get_item_group(get_node(pos).name, "liquid") ~= 0 end flowlib.is_liquid = is_liquid -local node_is_liquid = function(node) - return (minetest.get_item_group(node.name, "liquid") ~= 0) +local function node_is_liquid(node) + return minetest.get_item_group(node.name, "liquid") ~= 0 end flowlib.node_is_liquid = node_is_liquid --This code is more efficient -local function quick_flow_logic(node,pos_testing,direction) +local function quick_flow_logic(node, pos_testing, direction) local name = node.name - if not minetest.registered_nodes[name] then + if not registered_nodes[name] then return 0 end - if minetest.registered_nodes[name].liquidtype == "source" then - local node_testing = minetest.get_node(pos_testing) - local param2_testing = node_testing.param2 - if not minetest.registered_nodes[node_testing.name] then + if registered_nodes[name].liquidtype == "source" then + local node_testing = get_node(pos_testing) + if not registered_nodes[node_testing.name] then return 0 end - if minetest.registered_nodes[node_testing.name].liquidtype - ~= "flowing" then + if registered_nodes[node_testing.name].liquidtype ~= "flowing" then return 0 else return direction end - elseif minetest.registered_nodes[name].liquidtype == "flowing" then - local node_testing = minetest.get_node(pos_testing) + elseif registered_nodes[name].liquidtype == "flowing" then + local node_testing = get_node(pos_testing) local param2_testing = node_testing.param2 - if not minetest.registered_nodes[node_testing.name] then + if not registered_nodes[node_testing.name] then return 0 end - if minetest.registered_nodes[node_testing.name].liquidtype - == "source" then + if registered_nodes[node_testing.name].liquidtype == "source" then return -direction - elseif minetest.registered_nodes[node_testing.name].liquidtype - == "flowing" then + elseif registered_nodes[node_testing.name].liquidtype == "flowing" then if param2_testing < node.param2 then if (node.param2 - param2_testing) > 6 then return -direction @@ -108,48 +113,41 @@ local function quick_flow_logic(node,pos_testing,direction) return 0 end -local quick_flow = function(pos,node) - local x = 0 - local z = 0 - +local function quick_flow(pos, node) if not node_is_liquid(node) then - return {x=0,y=0,z=0} + return {x = 0, y = 0, z = 0} end - - x = x + quick_flow_logic(node,{x=pos.x-1,y=pos.y,z=pos.z},-1) - x = x + quick_flow_logic(node,{x=pos.x+1,y=pos.y,z=pos.z}, 1) - z = z + quick_flow_logic(node,{x=pos.x,y=pos.y,z=pos.z-1},-1) - z = z + quick_flow_logic(node,{x=pos.x,y=pos.y,z=pos.z+1}, 1) - - return to_unit_vector({x=x,y=0,z=z}) + local x = quick_flow_logic(node,{x = pos.x-1, y = pos.y, z = pos.z},-1) + quick_flow_logic(node,{x = pos.x+1, y = pos.y, z = pos.z}, 1) + local z = quick_flow_logic(node,{x = pos.x, y = pos.y, z = pos.z-1},-1) + quick_flow_logic(node,{x = pos.x, y = pos.y, z = pos.z+1}, 1) + return to_unit_vector({x = x, y = 0, z = z}) end flowlib.quick_flow = quick_flow +--if not in water but touching, move centre to touching block +--x has higher precedence than z +--if pos changes with x, it affects z - --if not in water but touching, move centre to touching block - --x has higher precedence than z - --if pos changes with x, it affects z -local move_centre = function(pos,realpos,node,radius) - if is_touching(realpos.x,pos.x,radius) then - if is_liquid({x=pos.x-1,y=pos.y,z=pos.z}) then - node = minetest.get_node({x=pos.x-1,y=pos.y,z=pos.z}) - pos = {x=pos.x-1,y=pos.y,z=pos.z} - elseif is_liquid({x=pos.x+1,y=pos.y,z=pos.z}) then - node = minetest.get_node({x=pos.x+1,y=pos.y,z=pos.z}) - pos = {x=pos.x+1,y=pos.y,z=pos.z} +local function move_centre(pos, realpos, node, radius) + if is_touching(realpos.x, pos.x, radius) then + if is_liquid({x = pos.x-1, y = pos.y, z = pos.z}) then + node = get_node({x=pos.x-1, y = pos.y, z = pos.z}) + pos = {x = pos.x-1, y = pos.y, z = pos.z} + elseif is_liquid({x = pos.x+1, y = pos.y, z = pos.z}) then + node = get_node({x = pos.x+1, y = pos.y, z = pos.z}) + pos = {x = pos.x+1, y = pos.y, z = pos.z} end end - if is_touching(realpos.z,pos.z,radius) then - if is_liquid({x=pos.x,y=pos.y,z=pos.z-1}) then - node = minetest.get_node({x=pos.x,y=pos.y,z=pos.z-1}) - pos = {x=pos.x,y=pos.y,z=pos.z-1} - elseif is_liquid({x=pos.x,y=pos.y,z=pos.z+1}) then - node = minetest.get_node({x=pos.x,y=pos.y,z=pos.z+1}) - pos = {x=pos.x,y=pos.y,z=pos.z+1} + if is_touching(realpos.z, pos.z, radius) then + if is_liquid({x = pos.x, y = pos.y, z = pos.z - 1}) then + node = get_node({x = pos.x, y = pos.y, z = pos.z - 1}) + pos = {x = pos.x, y = pos.y, z = pos.z - 1} + elseif is_liquid({x = pos.x, y = pos.y, z = pos.z + 1}) then + node = get_node({x = pos.x, y = pos.y, z = pos.z + 1}) + pos = {x = pos.x, y = pos.y, z = pos.z + 1} end end - return pos,node + return pos, node end flowlib.move_centre = move_centre diff --git a/mods/CORE/flowlib/mod.conf b/mods/CORE/flowlib/mod.conf index 0d982481c..7b3a325f3 100644 --- a/mods/CORE/flowlib/mod.conf +++ b/mods/CORE/flowlib/mod.conf @@ -1 +1,4 @@ name = flowlib +author = Qwertymine3 +description = Simple flow functions for use in Minetest mods by Qwertymine3 + diff --git a/mods/CORE/mcl_attached/description.txt b/mods/CORE/mcl_attached/description.txt deleted file mode 100644 index 3532db31d..000000000 --- a/mods/CORE/mcl_attached/description.txt +++ /dev/null @@ -1 +0,0 @@ -Adds additional ways for nodes to be attached. diff --git a/mods/CORE/mcl_attached/init.lua b/mods/CORE/mcl_attached/init.lua index 146cb2251..4f538e104 100644 --- a/mods/CORE/mcl_attached/init.lua +++ b/mods/CORE/mcl_attached/init.lua @@ -1,17 +1,21 @@ +local vector = vector + +local facedir_to_dir = minetest.facedir_to_dir +local get_item_group = minetest.get_item_group +local remove_node = minetest.remove_node +local get_node = minetest.get_node + local original_function = minetest.check_single_for_falling -minetest.check_single_for_falling = function(pos) +function minetest.check_single_for_falling(pos) local ret_o = original_function(pos) - local ret = false local node = minetest.get_node(pos) - if minetest.get_item_group(node.name, "attached_node_facedir") ~= 0 then - local dir = minetest.facedir_to_dir(node.param2) + if get_item_group(node.name, "attached_node_facedir") ~= 0 then + local dir = facedir_to_dir(node.param2) if dir then - local cpos = vector.add(pos, dir) - local cnode = minetest.get_node(cpos) - if minetest.get_item_group(cnode.name, "solid") == 0 then - minetest.remove_node(pos) + if get_item_group(get_node(vector.add(pos, dir)).name, "solid") == 0 then + remove_node(pos) local drops = minetest.get_node_drops(node.name, "") for dr=1, #drops do minetest.add_item(pos, drops[dr]) @@ -20,7 +24,6 @@ minetest.check_single_for_falling = function(pos) end end end - return ret_o or ret end diff --git a/mods/CORE/mcl_attached/mod.conf b/mods/CORE/mcl_attached/mod.conf new file mode 100644 index 000000000..7ad1b4a4c --- /dev/null +++ b/mods/CORE/mcl_attached/mod.conf @@ -0,0 +1,3 @@ +name = mcl_attached +author = Wuzzy +description = Adds additional ways for nodes to be attached. diff --git a/mods/CORE/mcl_autogroup/API.md b/mods/CORE/mcl_autogroup/API.md new file mode 100644 index 000000000..79b9770b5 --- /dev/null +++ b/mods/CORE/mcl_autogroup/API.md @@ -0,0 +1,27 @@ +# mcl_autogroup +This mod emulate digging times from mc. + +## mcl_autogroup.can_harvest(nodename, toolname) +Return true if can be dig with . +* nodename: string, valid nodename +* toolname: (optional) string, valid toolname + +## mcl_autogroup.get_groupcaps(toolname, efficiency) +This function is used to calculate diggroups for tools. +WARNING: This function can only be called after mod initialization. +* toolname: string, name of the tool being enchanted (like "mcl_tools:diamond_pickaxe") +* efficiency: (optional) integer, the efficiency level the tool is enchanted with (default 0) + +## mcl_autogroup.get_wear(toolname, diggroup) +Return the max wear of with +WARNING: This function can only be called after mod initialization. +* toolname: string, name of the tool used +* diggroup: string, the name of the diggroup the tool is used on + +## mcl_autogroup.register_diggroup(group, def) +* group: string, name of the group to register as a digging group +* def: (optional) table, table with information about the diggroup (defaults to {} if unspecified) + * level: (optional) string, if specified it is an array containing the names of the different digging levels the digging group supports + +## mcl_autogroup.registered_diggroups +List of registered diggroups, indexed by name. \ No newline at end of file diff --git a/mods/CORE/mcl_autogroup/init.lua b/mods/CORE/mcl_autogroup/init.lua new file mode 100644 index 000000000..16dd831c0 --- /dev/null +++ b/mods/CORE/mcl_autogroup/init.lua @@ -0,0 +1,28 @@ +--[[ +This is one part of a mod to replicate the digging times from Minecraft. This +part only exposes a function to register digging groups. The rest of the mod is +implemented and documented in the _mcl_autogroup. + +The mod is split up into two parts, mcl_autogroup and _mcl_autogroup. +mcl_autogroup contains the API functions used to register custom digging groups. +_mcl_autogroup contains most of the code. The leading underscore in the name +"_mcl_autogroup" is used to force Minetest to load that part of the mod as late +as possible. Minetest loads mods in reverse alphabetical order. +--]] +mcl_autogroup = {} +mcl_autogroup.registered_diggroups = {} + +assert(minetest.get_modpath("_mcl_autogroup"), "This mod requires the mod _mcl_autogroup to function") + +-- Register a group as a digging group. +-- +-- Parameters: +-- group - Name of the group to register as a digging group +-- def - Table with information about the diggroup (defaults to {} if unspecified) +-- +-- Values in def: +-- level - If specified it is an array containing the names of the different +-- digging levels the digging group supports. +function mcl_autogroup.register_diggroup(group, def) + mcl_autogroup.registered_diggroups[group] = def or {} +end diff --git a/mods/CORE/mcl_autogroup/mod.conf b/mods/CORE/mcl_autogroup/mod.conf new file mode 100644 index 000000000..45818cd58 --- /dev/null +++ b/mods/CORE/mcl_autogroup/mod.conf @@ -0,0 +1,3 @@ +name = mcl_autogroup +author = ryvnf +description = MineClone 2 core mod which automatically adds groups to all items. Very important for digging times. diff --git a/mods/CORE/mcl_colors/API.md b/mods/CORE/mcl_colors/API.md new file mode 100644 index 000000000..71cad335b --- /dev/null +++ b/mods/CORE/mcl_colors/API.md @@ -0,0 +1,8 @@ +# mcl_colors +Mod providing global table containing legacity minecraft colors to be used in mods. + +## mcl_colors.* +Colors by upper name, in hex value. + +## mcl_colors.background.* +Background colors by upper name, in hex value. diff --git a/mods/CORE/mcl_colors/init.lua b/mods/CORE/mcl_colors/init.lua new file mode 100644 index 000000000..e88f91d9d --- /dev/null +++ b/mods/CORE/mcl_colors/init.lua @@ -0,0 +1,36 @@ +mcl_colors = { + BLACK = "#000000", + DARK_BLUE = "#0000AA", + DARK_GREEN = "#00AA00", + DARK_AQUA = "#00AAAA", + DARK_RED = "#AA0000", + DARK_PURPLE = "#AA00AA", + GOLD = "#FFAA00", + GRAY = "#AAAAAA", + DARK_GRAY = "#555555", + BLUE = "#5555FF", + GREEN = "#55FF55", + AQUA = "#55FFFF", + RED = "#FF5555", + LIGHT_PURPLE = "#FF55FF", + YELLOW = "#FFFF55", + WHITE = "#FFFFFF", + background = { + BLACK = "#000000", + DARK_BLUE = "#00002A", + DARK_GREEN = "#002A00", + DARK_AQUA = "#002A2A", + DARK_RED = "#2A0000", + DARK_PURPLE = "#2A002A", + GOLD = "#2A2A00", + GRAY = "#2A2A2A", + DARK_GRAY = "#151515", + BLUE = "#15153F", + GREEN = "#153F15", + AQUA = "#153F3F", + RED = "#3F1515", + LIGHT_PURPLE = "#3F153F", + YELLOW = "#3F3F15", + WHITE = "#373501", + } +} diff --git a/mods/CORE/mcl_colors/mod.conf b/mods/CORE/mcl_colors/mod.conf new file mode 100644 index 000000000..549d94351 --- /dev/null +++ b/mods/CORE/mcl_colors/mod.conf @@ -0,0 +1,3 @@ +name = mcl_colors +author = Fleckenstein +description = The HTML sequences for the minecraft colors diff --git a/mods/CORE/mcl_damage/init.lua b/mods/CORE/mcl_damage/init.lua new file mode 100644 index 000000000..8b2acbb35 --- /dev/null +++ b/mods/CORE/mcl_damage/init.lua @@ -0,0 +1,169 @@ +mcl_damage = { + modifiers = {}, + damage_callbacks = {}, + death_callbacks = {}, + types = { + in_fire = {is_fire = true}, + lightning_bolt = {is_lightning = true}, + on_fire = {is_fire = true, bypasses_armor = true}, + lava = {is_fire = true}, + hot_floor = {is_fire = true}, + in_wall = {bypasses_armor = true}, + drown = {bypasses_armor = true}, + starve = {bypasses_armor = true, bypasses_magic = true}, + cactus = {}, + fall = {bypasses_armor = true}, + fly_into_wall = {bypasses_armor = true}, -- unused + out_of_world = {bypasses_armor = true, bypasses_magic = true, bypasses_invulnerability = true}, + generic = {bypasses_armor = true}, + magic = {is_magic = true, bypasses_armor = true}, + dragon_breath = {is_magic = true, bypasses_armor = true}, -- this is only used for dragon fireball; dragon fireball does not actually deal impact damage tho, so this is unreachable + wither = {bypasses_armor = true}, -- unused + wither_skull = {is_magic = true, is_explosion = true}, -- this is non-MC but a workaround to get the proper death message + anvil = {}, + falling_node = {}, -- this is falling_block in MC + mob = {}, + player = {}, + arrow = {is_projectile = true}, + fireball = {is_projectile = true, is_fire = true}, + thorns = {is_magic = true}, + explosion = {is_explosion = true}, + cramming = {bypasses_armor = true}, -- unused + fireworks = {is_explosion = true}, -- unused + } +} + +function mcl_damage.register_modifier(func, priority) + table.insert(mcl_damage.modifiers, {func = func, priority = priority or 0}) +end + +function mcl_damage.register_on_damage(func) + table.insert(mcl_damage.damage_callbacks, func) +end + +function mcl_damage.register_on_death(func) + table.insert(mcl_damage.death_callbacks, func) +end + +function mcl_damage.run_modifiers(obj, damage, reason) + for _, modf in ipairs(mcl_damage.modifiers) do + damage = modf.func(obj, damage, reason) or damage + if damage == 0 then + return 0 + end + end + + return damage +end + +local function run_callbacks(funcs, ...) + for _, func in pairs(funcs) do + func(...) + end +end + +function mcl_damage.run_damage_callbacks(obj, damage, reason) + run_callbacks(mcl_damage.damage_callbacks, obj, damage, reason) +end + +function mcl_damage.run_death_callbacks(obj, reason) + run_callbacks(mcl_damage.death_callbacks, obj, reason) +end + +function mcl_damage.from_punch(mcl_reason, object) + mcl_reason.direct = object + local luaentity = mcl_reason.direct:get_luaentity() + if luaentity then + if luaentity._is_arrow then + mcl_reason.type = "arrow" + elseif luaentity._is_fireball then + mcl_reason.type = "fireball" + elseif luaentity._cmi_is_mob then + mcl_reason.type = "mob" + end + mcl_reason.source = mcl_reason.source or luaentity._source_object + else + mcl_reason.type = "player" + end +end + +function mcl_damage.finish_reason(mcl_reason) + mcl_reason.source = mcl_reason.source or mcl_reason.direct + mcl_reason.flags = mcl_damage.types[mcl_reason.type] +end + +function mcl_damage.from_mt(mt_reason) + if mt_reason._mcl_chached_reason then + return mt_reason._mcl_chached_reason + end + + local mcl_reason + + if mt_reason._mcl_reason then + mcl_reason = mt_reason._mcl_reason + else + mcl_reason = {type = "generic"} + + if mt_reason._mcl_type then + mcl_reason.type = mt_reason._mcl_type + elseif mt_reason.type == "fall" then + mcl_reason.type = "fall" + elseif mt_reason.type == "drown" then + mcl_reason.type = "drown" + elseif mt_reason.type == "punch" then + mcl_damage.from_punch(mcl_reason, mt_reason.object) + elseif mt_reason.type == "node_damage" and mt_reason.node then + if minetest.get_item_group(mt_reason.node, "fire") > 0 then + mcl_reason.type = "in_fire" + end + if minetest.get_item_group(mt_reason.node, "lava") > 0 then + mcl_reason.type = "lava" + end + end + + for key, value in pairs(mt_reason) do + if key:find("_mcl_") == 1 then + mcl_reason[key:sub(6, #key)] = value + end + end + end + + mcl_damage.finish_reason(mcl_reason) + mt_reason._mcl_cached_reason = mcl_reason + + return mcl_reason +end + +function mcl_damage.register_type(name, def) + mcl_damage.types[name] = def +end + +minetest.register_on_player_hpchange(function(player, hp_change, mt_reason) + if hp_change < 0 then + if player:get_hp() <= 0 then + return 0 + end + hp_change = -mcl_damage.run_modifiers(player, -hp_change, mcl_damage.from_mt(mt_reason)) + end + return hp_change +end, true) + +minetest.register_on_player_hpchange(function(player, hp_change, mt_reason) + if player:get_hp() > 0 then + 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.approved then + mcl_damage.run_death_callbacks(player, mcl_damage.from_mt(mt_reason)) + end +end) + +minetest.register_on_mods_loaded(function() + table.sort(mcl_damage.modifiers, function(a, b) return a.priority < b.priority end) +end) + diff --git a/mods/CORE/mcl_damage/mod.conf b/mods/CORE/mcl_damage/mod.conf new file mode 100644 index 000000000..c7d96395e --- /dev/null +++ b/mods/CORE/mcl_damage/mod.conf @@ -0,0 +1,3 @@ +name = mcl_damage +author = Fleckenstein +description = Minecraft-like damage reason system diff --git a/mods/CORE/mcl_explosions/API.md b/mods/CORE/mcl_explosions/API.md new file mode 100644 index 000000000..cb0e9252d --- /dev/null +++ b/mods/CORE/mcl_explosions/API.md @@ -0,0 +1,15 @@ +# mcl_explosions +This mod provide helper functions to create explosions. + +## mcl_explosions.explode(pos, strength, info, puncher) +* pos: position, initial position of the explosion +* strenght: number, radius of the explosion +* info: table, explosion informations: + * drop_chance: number, if specified becomes the drop chance of all nodes in the explosion (default: 1.0 / strength) + * max_blast_resistance: int, if specified the explosion will treat all non-indestructible nodes as having a blast resistance of no more than this value + * sound: bool, if true, the explosion will play a sound (default: true) + * particles: bool, if true, the explosion will create particles (default: true) + * fire: bool, if true, 1/3 nodes become fire (default: false) + * griefing: bool, if true, the explosion will destroy nodes (default: true) + * grief_protected: bool, if true, the explosion will also destroy nodes which have been protected (default: false) +* puncher: (optional) entity, will be used as source for damage done by the explosion \ No newline at end of file diff --git a/mods/CORE/mcl_explosions/init.lua b/mods/CORE/mcl_explosions/init.lua index 7607ecf0d..0132d1669 100644 --- a/mods/CORE/mcl_explosions/init.lua +++ b/mods/CORE/mcl_explosions/init.lua @@ -12,11 +12,23 @@ under the LGPLv2.1 license. mcl_explosions = {} -local mod_death_messages = minetest.get_modpath("mcl_death_messages") ~= nil -local mod_fire = minetest.get_modpath("mcl_fire") ~= nil -local CONTENT_FIRE = minetest.get_content_id("mcl_fire:fire") +local mod_fire = minetest.get_modpath("mcl_fire") +--local CONTENT_FIRE = minetest.get_content_id("mcl_fire:fire") -local S = minetest.get_translator("mcl_explosions") +local math = math +local vector = vector +local table = table + +local hash_node_position = minetest.hash_node_position +local get_objects_inside_radius = minetest.get_objects_inside_radius +local get_position_from_hash = minetest.get_position_from_hash +local get_node_drops = minetest.get_node_drops +local get_name_from_content_id = minetest.get_name_from_content_id +local get_voxel_manip = minetest.get_voxel_manip +local bulk_set_node = minetest.bulk_set_node +local check_for_falling = minetest.check_for_falling +local add_item = minetest.add_item +local pos_to_string = minetest.pos_to_string -- Saved sphere explosion shapes for various radiuses local sphere_shapes = {} @@ -57,46 +69,44 @@ local function compute_sphere_rays(radius) local rays = {} local sphere = {} - for i=1, 2 do + local function add_ray(pos) + sphere[hash_node_position(pos)] = pos + end + + for y = -radius, radius do + for z = -radius, radius do + for x = -radius, 0 do + local d = x * x + y * y + z * z + if d <= radius * radius then + add_ray(vector.new(x, y, z)) + add_ray(vector.new(-x, y, z)) + break + end + end + end + end + + for x = -radius, radius do + for z = -radius, radius do + for y = -radius, 0 do + local d = x * x + y * y + z * z + if d <= radius * radius then + add_ray(vector.new(x, y, z)) + add_ray(vector.new(x, -y, z)) + break + end + end + end + end + + for x = -radius, radius do for y = -radius, radius do - for z = -radius, radius do - for x = -radius, 0, 1 do - local d = x * x + y * y + z * z - if d <= radius * radius then - local pos = { x = x, y = y, z = z } - sphere[minetest.hash_node_position(pos)] = pos - break - end - end - end - end - end - - for i=1,2 do - for x = -radius, radius do - for z = -radius, radius do - for y = -radius, 0, 1 do - local d = x * x + y * y + z * z - if d <= radius * radius then - local pos = { x = x, y = y, z = z } - sphere[minetest.hash_node_position(pos)] = pos - break - end - end - end - end - end - - for i=1,2 do - for x = -radius, radius do - for y = -radius, radius do - for z = -radius, 0, 1 do - local d = x * x + y * y + z * z - if d <= radius * radius then - local pos = { x = x, y = y, z = z } - sphere[minetest.hash_node_position(pos)] = pos - break - end + for z = -radius, 0 do + local d = x * x + y * y + z * z + if d <= radius * radius then + add_ray(vector.new(x, y, z)) + add_ray(vector.new(x, y, -z)) + break end end end @@ -140,7 +150,8 @@ end -- raydirs - The directions for each ray -- radius - The maximum distance each ray will go -- info - Table containing information about explosion --- puncher - object that punches other objects (optional) +-- direct - direct source object of the damage (optional) +-- source - indirect source object of the damage (optional) -- -- Values in info: -- drop_chance - The chance that destroyed nodes will drop their items @@ -149,12 +160,14 @@ end -- max_blast_resistance - The explosion will treat all non-indestructible nodes -- as having a blast resistance of no more than this -- value +-- grief_protected - If true, the explosion will also destroy nodes which have +-- been protected -- -- Note that this function has been optimized, it contains code which has been -- inlined to avoid function calls and unnecessary table creation. This was -- measured to give a significant performance increase. -local function trace_explode(pos, strength, raydirs, radius, info, puncher) - local vm = minetest.get_voxel_manip() +local function trace_explode(pos, strength, raydirs, radius, info, direct, source) + local vm = get_voxel_manip() local emin, emax = vm:read_from_map(vector.subtract(pos, radius), vector.add(pos, radius)) @@ -164,20 +177,18 @@ local function trace_explode(pos, strength, raydirs, radius, info, puncher) local ystride = (emax.x - emin_x + 1) local zstride = ystride * (emax.y - emin_y + 1) - local pos_x = pos.x - local pos_y = pos.y - local pos_z = pos.z - local area = VoxelArea:new { + --[[local area = VoxelArea:new { MinEdge = emin, MaxEdge = emax - } + }]] local data = vm:get_data() local destroy = {} local drop_chance = info.drop_chance local fire = info.fire local max_blast_resistance = info.max_blast_resistance + local grief_protected = info.grief_protected -- Trace rays for environment destruction if info.griefing then @@ -194,16 +205,17 @@ local function trace_explode(pos, strength, raydirs, radius, info, puncher) local npos_x = math.floor(rpos_x + 0.5) local npos_y = math.floor(rpos_y + 0.5) local npos_z = math.floor(rpos_z + 0.5) + local npos = { x = npos_x, y = npos_y, z = npos_z } local idx = (npos_z - emin_z) * zstride + (npos_y - emin_y) * ystride + npos_x - emin_x + 1 local cid = data[idx] - local br = node_blastres[cid] + local br = node_blastres[cid] or INDESTRUCT_BLASTRES if br < INDESTRUCT_BLASTRES and br > max_blast_resistance then br = max_blast_resistance end - local hash = minetest.hash_node_position({x=npos_x, y=npos_y, z=npos_z}) + local hash = hash_node_position(npos) rpos_x = rpos_x + STEP_LENGTH * rdir_x rpos_y = rpos_y + STEP_LENGTH * rdir_y @@ -215,8 +227,10 @@ local function trace_explode(pos, strength, raydirs, radius, info, puncher) break end - if cid ~= minetest.CONTENT_AIR and not minetest.is_protected({x = npos_x, y = npos_y, z = npos_z}, "") then - destroy[hash] = idx + if cid ~= minetest.CONTENT_AIR then + if not minetest.is_protected(npos, "") or grief_protected then + destroy[hash] = idx + end end end end @@ -224,14 +238,14 @@ local function trace_explode(pos, strength, raydirs, radius, info, puncher) -- Entities in radius of explosion local punch_radius = 2 * strength - local objs = minetest.get_objects_inside_radius(pos, punch_radius) + local objs = get_objects_inside_radius(pos, punch_radius) -- Trace rays for entity damage for _, obj in pairs(objs) do local ent = obj:get_luaentity() -- Ignore items to lower lag - if obj:is_player() or (ent and ent.name ~= '__builtin.item') then + if (obj:is_player() or (ent and ent.name ~= "__builtin.item")) and obj:get_hp() > 0 then local opos = obj:get_pos() local collisionbox = nil @@ -244,12 +258,12 @@ local function trace_explode(pos, strength, raydirs, radius, info, puncher) if collisionbox then -- Create rays from random points in the collision box - local x1 = collisionbox[1] * 2 - local y1 = collisionbox[2] * 2 - local z1 = collisionbox[3] * 2 - local x2 = collisionbox[4] * 2 - local y2 = collisionbox[5] * 2 - local z2 = collisionbox[6] * 2 + local x1 = collisionbox[1] + local y1 = collisionbox[2] + local z1 = collisionbox[3] + local x2 = collisionbox[4] + local y2 = collisionbox[5] + local z2 = collisionbox[6] local x_len = math.abs(x2 - x1) local y_len = math.abs(y2 - y1) local z_len = math.abs(z2 - z1) @@ -305,7 +319,6 @@ local function trace_explode(pos, strength, raydirs, radius, info, puncher) impact = 0 end local damage = math.floor((impact * impact + impact) * 7 * strength + 1) - local source = puncher or obj local sleep_formspec_doesnt_close_mt53 = false if obj:is_player() then @@ -317,26 +330,22 @@ local function trace_explode(pos, strength, raydirs, radius, info, puncher) sleep_formspec_doesnt_close_mt53 = true end end - if mod_death_messages then - mcl_death_messages.player_damage(obj, S("@1 was caught in an explosion.", name)) - end - if rawget(_G, "armor") and armor.last_damage_types then - armor.last_damage_types[name] = "explosion" - end end if sleep_formspec_doesnt_close_mt53 then - minetest.after(0.3, function(obj, damage, impact, punch_dir) -- 0.2 is minimum delay for closing old formspec and open died formspec -- TODO: REMOVE THIS IN THE FUTURE - if not obj then return end - obj:punch(obj, 10, { damage_groups = { full_punch_interval = 1, fleshy = damage, knockback = impact * 20.0 } }, punch_dir) - obj:add_player_velocity(vector.multiply(punch_dir, impact * 20)) - end, obj, damage, impact, vector.new(punch_dir)) - else - obj:punch(source, 10, { damage_groups = { full_punch_interval = 1, fleshy = damage, knockback = impact * 20.0 } }, punch_dir) + minetest.after(0.3, function() -- 0.2 is minimum delay for closing old formspec and open died formspec -- TODO: REMOVE THIS IN THE FUTURE + if not obj:is_player() then + return + end - if obj:is_player() then - obj:add_player_velocity(vector.multiply(punch_dir, impact * 20)) - elseif ent.tnt_knockback then + mcl_util.deal_damage(obj, damage, {type = "explosion", direct = direct, source = source}) + + obj:add_velocity(vector.multiply(punch_dir, impact * 20)) + end) + else + mcl_util.deal_damage(obj, damage, {type = "explosion", direct = direct, source = source}) + + if obj:is_player() or ent.tnt_knockback then obj:add_velocity(vector.multiply(punch_dir, impact * 20)) end end @@ -352,52 +361,51 @@ local function trace_explode(pos, strength, raydirs, radius, info, puncher) local on_blast = node_on_blast[data[idx]] local remove = true - if do_drop or on_blast ~= nil then - local npos = minetest.get_position_from_hash(hash) - if on_blast ~= nil then + if do_drop or on_blast then + local npos = get_position_from_hash(hash) + if on_blast then on_blast(npos, 1.0, do_drop) remove = false else - local name = minetest.get_name_from_content_id(data[idx]) - local drop = minetest.get_node_drops(name, "") + local name = get_name_from_content_id(data[idx]) + local drop = get_node_drops(name, "") for _, item in ipairs(drop) do if type(item) ~= "string" then item = item:get_name() .. item:get_count() end - minetest.add_item(npos, item) + add_item(npos, item) end end end if remove then if mod_fire and fire and math.random(1, 3) == 1 then - table.insert(fires, minetest.get_position_from_hash(hash)) + table.insert(fires, get_position_from_hash(hash)) else - table.insert(airs, minetest.get_position_from_hash(hash)) + table.insert(airs, get_position_from_hash(hash)) end end end -- We use bulk_set_node instead of LVM because we want to have on_destruct and -- on_construct being called if #airs > 0 then - minetest.bulk_set_node(airs, {name="air"}) + bulk_set_node(airs, {name="air"}) end if #fires > 0 then - minetest.bulk_set_node(fires, {name="mcl_fire:fire"}) + bulk_set_node(fires, {name="mcl_fire:fire"}) end -- Update falling nodes for a=1, #airs do local p = airs[a] - minetest.check_for_falling({x=p.x, y=p.y+1, z=p.z}) + check_for_falling({x=p.x, y=p.y+1, z=p.z}) end for f=1, #fires do local p = fires[f] - minetest.check_for_falling({x=p.x, y=p.y+1, z=p.z}) + check_for_falling({x=p.x, y=p.y+1, z=p.z}) end -- Log explosion - minetest.log('action', 'Explosion at ' .. minetest.pos_to_string(pos) .. - ' with strength ' .. strength .. ' and radius ' .. radius) + minetest.log("action", "Explosion at "..pos_to_string(pos).." with strength "..strength.." and radius "..radius) end -- Create an explosion with strength at pos. @@ -406,7 +414,8 @@ end -- pos - The position where the explosion originates from -- strength - The blast strength of the explosion (a TNT explosion uses 4) -- info - Table containing information about explosion --- puncher - object that is reported as source of punches/damage (optional) +-- direct - direct source object of the damage (optional) +-- source - indirect source object of the damage (optional) -- -- Values in info: -- drop_chance - If specified becomes the drop chance of all nodes in the @@ -418,7 +427,9 @@ end -- particles - If true, the explosion will create particles (default: true) -- fire - If true, 1/3 nodes become fire (default: false) -- griefing - If true, the explosion will destroy nodes (default: true) -function mcl_explosions.explode(pos, strength, info, puncher) +-- grief_protected - If true, the explosion will also destroy nodes which have +-- been protected (default: false) +function mcl_explosions.explode(pos, strength, info, direct, source) if info == nil then info = {} end @@ -437,6 +448,7 @@ function mcl_explosions.explode(pos, strength, info, puncher) if info.sound == nil then info.sound = true end if info.fire == nil then info.fire = false end if info.griefing == nil then info.griefing = true end + if info.grief_protected == nil then info.grief_protected = false end if info.max_blast_resistance == nil then info.max_blast_resistance = INDESTRUCT_BLASTRES end @@ -446,7 +458,7 @@ function mcl_explosions.explode(pos, strength, info, puncher) info.drop_chance = 0 end - trace_explode(pos, strength, shape, radius, info, puncher) + trace_explode(pos, strength, shape, radius, info, direct, source) if info.particles then add_particles(pos, radius) diff --git a/mods/CORE/mcl_explosions/locale/mcl_explosions.de.tr b/mods/CORE/mcl_explosions/locale/mcl_explosions.de.tr deleted file mode 100644 index 4abbc64bf..000000000 --- a/mods/CORE/mcl_explosions/locale/mcl_explosions.de.tr +++ /dev/null @@ -1,2 +0,0 @@ -# textdomain:mcl_explosions -@1 was caught in an explosion.=@1 wurde Opfer einer Explosion. diff --git a/mods/CORE/mcl_explosions/locale/mcl_explosions.fr.tr b/mods/CORE/mcl_explosions/locale/mcl_explosions.fr.tr deleted file mode 100644 index cb9a0f38e..000000000 --- a/mods/CORE/mcl_explosions/locale/mcl_explosions.fr.tr +++ /dev/null @@ -1,2 +0,0 @@ -# textdomain:mcl_explosions -@1 was caught in an explosion.=@1 a été pris dans une explosion. \ No newline at end of file diff --git a/mods/CORE/mcl_explosions/locale/mcl_explosions.pl.tr b/mods/CORE/mcl_explosions/locale/mcl_explosions.pl.tr new file mode 100644 index 000000000..f7811d733 --- /dev/null +++ b/mods/CORE/mcl_explosions/locale/mcl_explosions.pl.tr @@ -0,0 +1,2 @@ +# textdomain:mcl_explosions +@1 was caught in an explosion.=@1 została wysadzona. diff --git a/mods/CORE/mcl_explosions/locale/mcl_explosions.ru.tr b/mods/CORE/mcl_explosions/locale/mcl_explosions.ru.tr deleted file mode 100644 index 2c885845f..000000000 --- a/mods/CORE/mcl_explosions/locale/mcl_explosions.ru.tr +++ /dev/null @@ -1,2 +0,0 @@ -# textdomain:mcl_explosions -@1 was caught in an explosion.=@1 не удалось пережить взрыва. diff --git a/mods/CORE/mcl_explosions/locale/template.txt b/mods/CORE/mcl_explosions/locale/template.txt deleted file mode 100644 index 6a9348ddf..000000000 --- a/mods/CORE/mcl_explosions/locale/template.txt +++ /dev/null @@ -1,2 +0,0 @@ -# textdomain:mcl_explosions -@1 was caught in an explosion.= diff --git a/mods/CORE/mcl_explosions/mod.conf b/mods/CORE/mcl_explosions/mod.conf index 4ec206e17..5c203e621 100644 --- a/mods/CORE/mcl_explosions/mod.conf +++ b/mods/CORE/mcl_explosions/mod.conf @@ -1,4 +1,5 @@ name = mcl_explosions +author = ryvnf description = A common API to create explosions. depends = mcl_particles optional_depends = mcl_fire diff --git a/mods/CORE/mcl_init/description.txt b/mods/CORE/mcl_init/description.txt deleted file mode 100644 index 4ab7458f1..000000000 --- a/mods/CORE/mcl_init/description.txt +++ /dev/null @@ -1 +0,0 @@ -Initialization mod of MineClone 2. Defines some common shared variables and sets up initial default settings which have to be set at the beginning. diff --git a/mods/CORE/mcl_init/init.lua b/mods/CORE/mcl_init/init.lua index ebbfd5591..fec9c7ba9 100644 --- a/mods/CORE/mcl_init/init.lua +++ b/mods/CORE/mcl_init/init.lua @@ -21,6 +21,9 @@ mcl_vars.gui_bg_img = "background9[1,1;1,1;mcl_base_textures_background9.png;tru -- Legacy mcl_vars.inventory_header = "" +-- Tool wield size +mcl_vars.tool_wield_scale = { x = 1.8, y = 1.8, z = 1 } + -- Mapgen variables local mg_name = minetest.get_mapgen_setting("mg_name") local minecraft_height_limit = 256 @@ -29,22 +32,59 @@ local singlenode = mg_name == "singlenode" -- Calculate mapgen_edge_min/mapgen_edge_max mcl_vars.chunksize = math.max(1, tonumber(minetest.get_mapgen_setting("chunksize")) or 5) -mcl_vars.MAP_BLOCKSIZE = math.max(1, core.MAP_BLOCKSIZE or 16) +mcl_vars.MAP_BLOCKSIZE = math.max(1, minetest.MAP_BLOCKSIZE or 16) mcl_vars.mapgen_limit = math.max(1, tonumber(minetest.get_mapgen_setting("mapgen_limit")) or 31000) -mcl_vars.MAX_MAP_GENERATION_LIMIT = math.max(1, core.MAX_MAP_GENERATION_LIMIT or 31000) +mcl_vars.MAX_MAP_GENERATION_LIMIT = math.max(1, minetest.MAX_MAP_GENERATION_LIMIT or 31000) local central_chunk_offset = -math.floor(mcl_vars.chunksize / 2) -local chunk_size_in_nodes = mcl_vars.chunksize * mcl_vars.MAP_BLOCKSIZE +mcl_vars.central_chunk_offset_in_nodes = central_chunk_offset * mcl_vars.MAP_BLOCKSIZE +mcl_vars.chunk_size_in_nodes = mcl_vars.chunksize * mcl_vars.MAP_BLOCKSIZE local central_chunk_min_pos = central_chunk_offset * mcl_vars.MAP_BLOCKSIZE -local central_chunk_max_pos = central_chunk_min_pos + chunk_size_in_nodes - 1 +local central_chunk_max_pos = central_chunk_min_pos + mcl_vars.chunk_size_in_nodes - 1 local ccfmin = central_chunk_min_pos - mcl_vars.MAP_BLOCKSIZE -- Fullminp/fullmaxp of central chunk, in nodes local ccfmax = central_chunk_max_pos + mcl_vars.MAP_BLOCKSIZE local mapgen_limit_b = math.floor(math.min(mcl_vars.mapgen_limit, mcl_vars.MAX_MAP_GENERATION_LIMIT) / mcl_vars.MAP_BLOCKSIZE) local mapgen_limit_min = -mapgen_limit_b * mcl_vars.MAP_BLOCKSIZE local mapgen_limit_max = (mapgen_limit_b + 1) * mcl_vars.MAP_BLOCKSIZE - 1 -local numcmin = math.max(math.floor((ccfmin - mapgen_limit_min) / chunk_size_in_nodes), 0) -- Number of complete chunks from central chunk -local numcmax = math.max(math.floor((mapgen_limit_max - ccfmax) / chunk_size_in_nodes), 0) -- fullminp/fullmaxp to effective mapgen limits. -mcl_vars.mapgen_edge_min = central_chunk_min_pos - numcmin * chunk_size_in_nodes -mcl_vars.mapgen_edge_max = central_chunk_max_pos + numcmax * chunk_size_in_nodes +local numcmin = math.max(math.floor((ccfmin - mapgen_limit_min) / mcl_vars.chunk_size_in_nodes), 0) -- Number of complete chunks from central chunk +local numcmax = math.max(math.floor((mapgen_limit_max - ccfmax) / mcl_vars.chunk_size_in_nodes), 0) -- fullminp/fullmaxp to effective mapgen limits. +mcl_vars.mapgen_edge_min = central_chunk_min_pos - numcmin * mcl_vars.chunk_size_in_nodes +mcl_vars.mapgen_edge_max = central_chunk_max_pos + numcmax * mcl_vars.chunk_size_in_nodes + +local function coordinate_to_block(x) + return math.floor(x / mcl_vars.MAP_BLOCKSIZE) +end + +local function coordinate_to_chunk(x) + return math.floor((coordinate_to_block(x) - central_chunk_offset) / mcl_vars.chunksize) +end + +function mcl_vars.pos_to_block(pos) + return { + x = coordinate_to_block(pos.x), + y = coordinate_to_block(pos.y), + z = coordinate_to_block(pos.z) + } +end + +function mcl_vars.pos_to_chunk(pos) + return { + x = coordinate_to_chunk(pos.x), + y = coordinate_to_chunk(pos.y), + z = coordinate_to_chunk(pos.z) + } +end + +local k_positive = math.ceil(mcl_vars.MAX_MAP_GENERATION_LIMIT / mcl_vars.chunk_size_in_nodes) +local k_positive_z = k_positive * 2 +local k_positive_y = k_positive_z * k_positive_z + +function mcl_vars.get_chunk_number(pos) -- unsigned int + local c = mcl_vars.pos_to_chunk(pos) + return + (c.y + k_positive) * k_positive_y + + (c.z + k_positive) * k_positive_z + + c.x + k_positive +end if not superflat and not singlenode then -- Normal mode @@ -91,7 +131,7 @@ else mcl_vars.mg_bedrock_is_rough = false end -mcl_vars.mg_overworld_max = 31000 +mcl_vars.mg_overworld_max = mcl_vars.mapgen_edge_max -- The Nether (around Y = -29000) mcl_vars.mg_nether_min = -29067 -- Carefully chosen to be at a mapchunk border @@ -138,3 +178,86 @@ minetest.craftitemdef_default.stack_max = 64 -- Set random seed for all other mods (Remember to make sure no other mod calls this function) math.randomseed(os.time()) +local chunks = {} -- intervals of chunks generated +function mcl_vars.add_chunk(pos) + local n = mcl_vars.get_chunk_number(pos) -- unsigned int + local prev + for i, d in pairs(chunks) do + if n <= d[2] then -- we've found it + if (n == d[2]) or (n >= d[1]) then return end -- already here + if n == d[1]-1 then -- right before: + if prev and (prev[2] == n-1) then + prev[2] = d[2] + table.remove(chunks, i) + return + end + d[1] = n + return + end + if prev and (prev[2] == n-1) then --join to previous + prev[2] = n + return + end + table.insert(chunks, i, {n, n}) -- insert new interval before i + return + end + prev = d + end + chunks[#chunks+1] = {n, n} +end +function mcl_vars.is_generated(pos) + local n = mcl_vars.get_chunk_number(pos) -- unsigned int + for i, d in pairs(chunks) do + if n <= d[2] then + return (n >= d[1]) + end + end + return false +end + +-- "Trivial" (actually NOT) function to just read the node and some stuff to not just return "ignore", like mt 5.4 does. +-- p: Position, if it's wrong, {name="error"} node will return. +-- force: optional (default: false) - Do the maximum to still read the node within us_timeout. +-- us_timeout: optional (default: 244 = 0.000244 s = 1/80/80/80), set it at least to 3000000 to let mapgen to finish its job. +-- +-- returns node definition, eg. {name="air"}. Unfortunately still can return {name="ignore"}. +function mcl_vars.get_node(p, force, us_timeout) + -- check initial circumstances + if not p or not p.x or not p.y or not p.z then return {name="error"} end + + -- try common way + local node = minetest.get_node(p) + if node.name ~= "ignore" then + return node + end + + -- copy table to get sure it won't changed by other threads + local pos = {x=p.x,y=p.y,z=p.z} + + -- try LVM + minetest.get_voxel_manip():read_from_map(pos, pos) + node = minetest.get_node(pos) + if node.name ~= "ignore" or not force then + return node + end + + -- all ways failed - need to emerge (or forceload if generated) + local us_timeout = us_timeout or 244 + if mcl_vars.is_generated(pos) then + minetest.chat_send_all("IMPOSSIBLE! Please report this to MCL2 issue tracker!") + minetest.forceload_block(pos) + else + minetest.emerge_area(pos, pos) + end + + local t = minetest.get_us_time() + + node = minetest.get_node(pos) + + while (not node or node.name == "ignore") and (minetest.get_us_time() - t < us_timeout) do + node = minetest.get_node(pos) + end + + return node + -- it still can return "ignore", LOL, even if force = true, but only after time out +end diff --git a/mods/CORE/mcl_init/mod.conf b/mods/CORE/mcl_init/mod.conf index 5a3e4b6b2..a0e810a2f 100644 --- a/mods/CORE/mcl_init/mod.conf +++ b/mods/CORE/mcl_init/mod.conf @@ -1 +1,3 @@ name = mcl_init +author = Wuzzy +description = Initialization mod of MineClone 2. Defines some common shared variables and sets up initial default settings which have to be set at the beginning. diff --git a/mods/CORE/mcl_loot/description.txt b/mods/CORE/mcl_loot/description.txt deleted file mode 100644 index 30ba9a6f3..000000000 --- a/mods/CORE/mcl_loot/description.txt +++ /dev/null @@ -1 +0,0 @@ -API for filling a chest with random treasures. diff --git a/mods/CORE/mcl_loot/init.lua b/mods/CORE/mcl_loot/init.lua index e3db73be1..1b2c50807 100644 --- a/mods/CORE/mcl_loot/init.lua +++ b/mods/CORE/mcl_loot/init.lua @@ -40,10 +40,9 @@ function mcl_loot.get_loot(loot_definitions, pr) total_weight = total_weight + (loot_definitions.items[i].weight or 1) end - local stacks_min = loot_definitions.stacks_min - local stacks_max = loot_definitions.stacks_max - if not stacks_min then stacks_min = 1 end - if not stacks_max then stacks_max = 1 end + --local stacks_min = loot_definitions.stacks_min or 1 + --local stacks_max = loot_definitions.stacks_max or 1 + local stacks = pr:next(loot_definitions.stacks_min, loot_definitions.stacks_max) for s=1, stacks do local r = pr:next(1, total_weight) @@ -111,14 +110,14 @@ end Returns a table of length `max_slot` and all natural numbers between 1 and `max_slot` in a random order. ]] -local function get_random_slots(max_slot) +local function get_random_slots(max_slot, pr) local slots = {} for s=1, max_slot do slots[s] = s end local slots_out = {} while #slots > 0 do - local r = math.random(1, #slots) + local r = pr and pr:next(1, #slots) or math.random(1, #slots) table.insert(slots_out, slots[r]) table.remove(slots, r) end @@ -135,9 +134,9 @@ Items will be added from start of the table to end. If the inventory already has occupied slots, or is too small, placement of some items might fail. ]] -function mcl_loot.fill_inventory(inv, listname, items) +function mcl_loot.fill_inventory(inv, listname, items, pr) local size = inv:get_size(listname) - local slots = get_random_slots(size) + local slots = get_random_slots(size, pr) local leftovers = {} -- 1st pass: Add items into random slots for i=1, math.min(#items, size) do diff --git a/mods/CORE/mcl_loot/mod.conf b/mods/CORE/mcl_loot/mod.conf index 8406dcc2f..82a41d0e5 100644 --- a/mods/CORE/mcl_loot/mod.conf +++ b/mods/CORE/mcl_loot/mod.conf @@ -1 +1,3 @@ name = mcl_loot +author = Wuzzy +description = API for filling a chest with random treasures. diff --git a/mods/CORE/mcl_particles/description.txt b/mods/CORE/mcl_particles/description.txt deleted file mode 100644 index 62d5cd61a..000000000 --- a/mods/CORE/mcl_particles/description.txt +++ /dev/null @@ -1 +0,0 @@ -Contains particle images of MineClone 2. No code. diff --git a/mods/CORE/mcl_particles/init.lua b/mods/CORE/mcl_particles/init.lua index 757c0452f..4854afd54 100644 --- a/mods/CORE/mcl_particles/init.lua +++ b/mods/CORE/mcl_particles/init.lua @@ -1,3 +1,12 @@ +local vector = vector +local table = table + +local hash_node_position = minetest.hash_node_position +local add_particlespawner = minetest.add_particlespawner +local delete_particlespawner = minetest.delete_particlespawner + +local ipairs = ipairs + mcl_particles = {} -- Table of particlespawner IDs on a per-node hash basis @@ -32,11 +41,11 @@ function mcl_particles.add_node_particlespawner(pos, particlespawner_definition, if allowed_level == 0 or levels[level] > allowed_level then return end - local poshash = minetest.hash_node_position(pos) + local poshash = hash_node_position(pos) if not poshash then return end - local id = minetest.add_particlespawner(particlespawner_definition) + local id = add_particlespawner(particlespawner_definition) if id == -1 then return end @@ -47,6 +56,8 @@ function mcl_particles.add_node_particlespawner(pos, particlespawner_definition, return id end +local add_node_particlespawner = mcl_particles.add_node_particlespawner + -- Deletes all particlespawners that are assigned to a node position. -- If no particlespawners exist for this position, nothing happens. -- pos: Node positon. MUST use integer values! @@ -55,14 +66,66 @@ function mcl_particles.delete_node_particlespawners(pos) if allowed_level == 0 then return false end - local poshash = minetest.hash_node_position(pos) + local poshash = hash_node_position(pos) local ids = particle_nodes[poshash] if ids then for i=1, #ids do - minetest.delete_particlespawner(ids[i]) + delete_particlespawner(ids[i]) end particle_nodes[poshash] = nil return true end return false end + +-- 3 exptime variants because the animation is not tied to particle expiration time. +-- 3 colorized variants to imitate minecraft's +local smoke_pdef_cached = {} + +function mcl_particles.spawn_smoke(pos, name, smoke_pdef_base) + local new_minpos = vector.add(pos, smoke_pdef_base.minrelpos) + local new_maxpos = vector.add(pos, smoke_pdef_base.maxrelpos) + + -- populate the cache + if smoke_pdef_cached[name] then + for i, smoke_pdef in ipairs(smoke_pdef_cached[name]) do + smoke_pdef.minpos = new_minpos + smoke_pdef.maxpos = new_maxpos + add_node_particlespawner(pos, smoke_pdef, "high") + end + -- cache already populated + else + smoke_pdef_cached[name] = {} + + local smoke_pdef = table.copy(smoke_pdef_base) + smoke_pdef.amount = smoke_pdef_base.amount / 9 + smoke_pdef.time = 0 + smoke_pdef.animation = { + type = "vertical_frames", + aspect_w = 8, + aspect_h = 8, + -- length = 3 exptime variants + } + smoke_pdef.collisiondetection = true + smoke_pdef.minpos = new_minpos + smoke_pdef.maxpos = new_maxpos + + -- the last frame plays for 1/8 * N seconds, so we can take advantage of it + -- to have varying exptime for each variant. + local exptimes = { 0.175, 0.375, 1.0 } + local colorizes = { "199", "209", "243" } -- round(78%, 82%, 90% of 256) - 1 + + for _,exptime in ipairs(exptimes) do + for _,colorize in ipairs(colorizes) do + smoke_pdef.maxexptime = exptime * smoke_pdef_base.maxexptime + smoke_pdef.animation.length = exptime + 0.1 + -- minexptime must be set such that the last frame is actully rendered, + -- even if its very short. Larger exptime -> larger range + smoke_pdef.minexptime = math.min(exptime, (7.0/8.0 * (exptime + 0.1) + 0.1)) + smoke_pdef.texture = "mcl_particles_smoke_anim.png^[colorize:#000000:" ..colorize + add_node_particlespawner(pos, smoke_pdef, "high") + table.insert(smoke_pdef_cached[name], table.copy(smoke_pdef)) + end + end + end +end \ No newline at end of file diff --git a/mods/CORE/mcl_particles/mod.conf b/mods/CORE/mcl_particles/mod.conf index f7be80395..b8252cbc5 100644 --- a/mods/CORE/mcl_particles/mod.conf +++ b/mods/CORE/mcl_particles/mod.conf @@ -1 +1,3 @@ name = mcl_particles +author = Wuzzy +description = Contains particle images of MineClone 2. No code. diff --git a/mods/CORE/mcl_particles/textures/mcl_particles_bonemeal.png b/mods/CORE/mcl_particles/textures/mcl_particles_bonemeal.png new file mode 100644 index 0000000000000000000000000000000000000000..684df986508ce902058e048ee22b61d9fac58223 GIT binary patch literal 3356 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 literal 0 HcmV?d00001 diff --git a/mods/CORE/mcl_particles/textures/mcl_particles_sponge2.png b/mods/CORE/mcl_particles/textures/mcl_particles_sponge2.png new file mode 100644 index 0000000000000000000000000000000000000000..0004ce4db521864ca990ae99a2abe1da0dae5258 GIT binary patch literal 1149 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 Qg8%>k07*qoM6N<$f;cw~MF0Q* literal 0 HcmV?d00001 diff --git a/mods/CORE/mcl_particles/textures/mcl_particles_sponge5.png b/mods/CORE/mcl_particles/textures/mcl_particles_sponge5.png new file mode 100644 index 0000000000000000000000000000000000000000..5278caff34222b7aadf4a25610dfff2e1c1ba03f GIT binary patch literal 1170 zcmV;D1a13?P) zaB^>EX>4U6ba`-PAZ2)IW&i+q+O1YumfRo={MRXR1SB?b9L(}wZjj@rz}VA0nZ=W~ zc}7^4r9vgqP3_O`PQP%8Nr9Y?8d3-bmrE{5#zM`0x0s;>(XcfmMu=O0+L=lS2 zNTh@Z=U~I=un=MxCu)v1y69twF=|XPlUjA^HE2}Tq&Z2lIB|VKKPF8n<&2;i zo-@AAFvxk6&2Db=dODM5uNhMdQwxW+~sIh8IH8*Z3rRJJ%p~a>x zwcJr^-FDY~4?TA6iF!U+TeSW&e!v08VfC4Fk}Lx}V}lxz8?S3Mk(uB7LRN4k{Y3!cc_0Av74vIFnP z00009a7bBm001r{001r{0eGc9b^rhX2XskIMF-^s90?m1Hz6xB0000PbVXQnLvL+u zWo~o;Lvm$dbY)~9cWHEJAV*0}P*;Ht7XSbNSV=@dR5;6H{P^zCe+C3#V0_M}Ngxsg=;?$7O&%pt k4UvRID4qwu7brFW00eUtCx 0 then + uses = armor_uses + if unbreaking_level > 0 then + uses = uses / (0.6 + 0.4 / (unbreaking_level + 1)) + end + else + local def = itemstack:get_definition() + if def then + local fixed_uses = def._mcl_uses + if fixed_uses then + uses = fixed_uses + if unbreaking_level > 0 then + uses = uses * (unbreaking_level + 1) + end + end + end + uses = uses or (next(itemstack:get_tool_capabilities().groupcaps) or {}).uses + end + + return uses or 0 +end + +function mcl_util.use_item_durability(itemstack, n) + local uses = mcl_util.calculate_durability(itemstack) + itemstack:add_wear(65535 / uses * n) +end + +function mcl_util.deal_damage(target, damage, mcl_reason) + local luaentity = target:get_luaentity() + + if luaentity then + if luaentity.deal_damage then + luaentity:deal_damage(damage, mcl_reason or {type = "generic"}) + return + 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) + if luaentity.health > 0 then + luaentity.health = luaentity.health - damage + end + return + end + end + + 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) + local luaentity = obj:get_luaentity() + + if luaentity and luaentity._cmi_is_mob then + return luaentity.health + else + return obj:get_hp() + end +end + +function mcl_util.get_inventory(object, create) + if object:is_player() then + return object:get_inventory() + else + local luaentity = object:get_luaentity() + local inventory = luaentity.inventory + + if create and not inventory and luaentity.create_inventory then + inventory = luaentity:create_inventory() + end + + return inventory + end +end + +function mcl_util.get_wielded_item(object) + if object:is_player() then + return object:get_wielded_item() + else + -- ToDo: implement getting wielditems from mobs as soon as mobs have wielditems + return ItemStack() + end +end + +function mcl_util.get_object_name(object) + if object:is_player() then + return object:get_player_name() + else + local luaentity = object:get_luaentity() + + if not luaentity then + return tostring(object) + end + + return luaentity.nametag and luaentity.nametag ~= "" and luaentity.nametag or luaentity.description or luaentity.name + end +end + +function mcl_util.replace_mob(obj, mob) + local rot = obj:get_yaw() + local pos = obj:get_pos() + obj:remove() + obj = minetest.add_entity(pos, mob) + obj:set_yaw(rot) + return obj end diff --git a/mods/CORE/mcl_util/mod.conf b/mods/CORE/mcl_util/mod.conf index e45f9124e..82f9137e4 100644 --- a/mods/CORE/mcl_util/mod.conf +++ b/mods/CORE/mcl_util/mod.conf @@ -1 +1,4 @@ name = mcl_util +author = Wuzzy +description = Helper functions for MineClone 2. +depends = mcl_init diff --git a/mods/CORE/mcl_worlds/API.md b/mods/CORE/mcl_worlds/API.md new file mode 100644 index 000000000..dd96b01b5 --- /dev/null +++ b/mods/CORE/mcl_worlds/API.md @@ -0,0 +1,81 @@ +# mcl_worlds +This mod provides utility functions about positions and dimensions. + +## mcl_worlds.is_in_void(pos) +This function returns: + +* true, true: if pos is in deep void (deadly) +* true, false: if the pos is in void (non deadly) +* false, false: owerwise + +Params: + +* pos: position + +## mcl_worlds.y_to_layer(y) +This function is used to calculate the minetest y layer and dimension of the given minecraft layer. +Mainly used for ore generation. +Takes an Y coordinate as input and returns: + +* The corresponding Minecraft layer (can be nil if void) +* The corresponding Minecraft dimension ("overworld", "nether" or "end") or "void" if is in the void +If the Y coordinate is not located in any dimension, it will return: nil, "void" + +Params: + +* y: int + +## mcl_worlds.pos_to_dimension(pos) +This function return the Minecraft dimension of ("overworld", "nether" or "end") or "void" if is in the void. + +* pos: position + +## mcl_worlds.layer_to_y(layer, mc_dimension) +Takes a Minecraft layer and a “dimension” name and returns the corresponding Y coordinate for MineClone 2. +mc_dimension can be "overworld", "nether", "end" (default: "overworld"). + +* layer: int +* mc_dimension: string + +## mcl_worlds.has_weather(pos) +Returns true if can have weather, false owerwise. +Weather can be only in the overworld. + +* pos: position + +## mcl_worlds.has_dust(pos) +Returns true if can have nether dust, false owerwise. +Nether dust can be only in the nether. + +* pos: position + +## mcl_worlds.compass_works(pos) +Returns true if compasses are working at , false owerwise. +In mc, you cant use compass in the nether and the end. + +* pos: position + +## mcl_worlds.compass_works(pos) +Returns true if clock are working at , false owerwise. +In mc, you cant use clock in the nether and the end. + +* pos: position + +## 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 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 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 diff --git a/mods/CORE/mcl_worlds/depends.txt b/mods/CORE/mcl_worlds/depends.txt deleted file mode 100644 index 3b355984e..000000000 --- a/mods/CORE/mcl_worlds/depends.txt +++ /dev/null @@ -1 +0,0 @@ -mcl_init diff --git a/mods/CORE/mcl_worlds/description.txt b/mods/CORE/mcl_worlds/description.txt deleted file mode 100644 index 470cf7a84..000000000 --- a/mods/CORE/mcl_worlds/description.txt +++ /dev/null @@ -1 +0,0 @@ -Utility functions for worlds and the “dimensions”. diff --git a/mods/CORE/mcl_worlds/init.lua b/mods/CORE/mcl_worlds/init.lua index 35549ffad..203f69401 100644 --- a/mods/CORE/mcl_worlds/init.lua +++ b/mods/CORE/mcl_worlds/init.lua @@ -1,12 +1,14 @@ mcl_worlds = {} +local get_connected_players = minetest.get_connected_players + -- For a given position, returns a 2-tuple: -- 1st return value: true if pos is in void -- 2nd return value: true if it is in the deadly part of the void function mcl_worlds.is_in_void(pos) local void = not ((pos.y < mcl_vars.mg_overworld_max and pos.y > mcl_vars.mg_overworld_min) or - (pos.y < mcl_vars.mg_nether_max and pos.y > mcl_vars.mg_nether_min) or + (pos.y < mcl_vars.mg_nether_max+128 and pos.y > mcl_vars.mg_nether_min) or (pos.y < mcl_vars.mg_end_max and pos.y > mcl_vars.mg_end_min)) local void_deadly = false @@ -15,11 +17,11 @@ function mcl_worlds.is_in_void(pos) -- Overworld → Void → End → Void → Nether → Void if pos.y < mcl_vars.mg_overworld_min and pos.y > mcl_vars.mg_end_max then void_deadly = pos.y < mcl_vars.mg_overworld_min - deadly_tolerance - elseif pos.y < mcl_vars.mg_end_min and pos.y > mcl_vars.mg_nether_max then + elseif pos.y < mcl_vars.mg_end_min and pos.y > mcl_vars.mg_nether_max+128 then -- The void between End and Nether. Like usual, but here, the void -- *above* the Nether also has a small tolerance area, so player -- can fly above the Nether without getting hurt instantly. - void_deadly = (pos.y < mcl_vars.mg_end_min - deadly_tolerance) and (pos.y > mcl_vars.mg_nether_max + deadly_tolerance) + void_deadly = (pos.y < mcl_vars.mg_end_min - deadly_tolerance) and (pos.y > mcl_vars.mg_nether_max+128 + deadly_tolerance) elseif pos.y < mcl_vars.mg_nether_min then void_deadly = pos.y < mcl_vars.mg_nether_min - deadly_tolerance end @@ -33,60 +35,64 @@ end -- If the Y coordinate is not located in any dimension, it will return: -- nil, "void" function mcl_worlds.y_to_layer(y) - if y >= mcl_vars.mg_overworld_min then - return y - mcl_vars.mg_overworld_min, "overworld" - elseif y >= mcl_vars.mg_nether_min and y <= mcl_vars.mg_nether_max then - return y - mcl_vars.mg_nether_min, "nether" - elseif y >= mcl_vars.mg_end_min and y <= mcl_vars.mg_end_max then - return y - mcl_vars.mg_end_min, "end" - else - return nil, "void" - end + if y >= mcl_vars.mg_overworld_min then + return y - mcl_vars.mg_overworld_min, "overworld" + elseif y >= mcl_vars.mg_nether_min and y <= mcl_vars.mg_nether_max+128 then + return y - mcl_vars.mg_nether_min, "nether" + elseif y >= mcl_vars.mg_end_min and y <= mcl_vars.mg_end_max then + return y - mcl_vars.mg_end_min, "end" + else + return nil, "void" + end end +local y_to_layer = mcl_worlds.y_to_layer + -- Takes a pos and returns the dimension it belongs to (same as above) function mcl_worlds.pos_to_dimension(pos) - local _, dim = mcl_worlds.y_to_layer(pos.y) + local _, dim = y_to_layer(pos.y) return dim end +local pos_to_dimension = mcl_worlds.pos_to_dimension + -- Takes a Minecraft layer and a “dimension” name -- and returns the corresponding Y coordinate for -- MineClone 2. -- mc_dimension is one of "overworld", "nether", "end" (default: "overworld"). function mcl_worlds.layer_to_y(layer, mc_dimension) - if mc_dimension == "overworld" or mc_dimension == nil then - return layer + mcl_vars.mg_overworld_min - elseif mc_dimension == "nether" then - return layer + mcl_vars.mg_nether_min - elseif mc_dimension == "end" then - return layer + mcl_vars.mg_end_min - end + if mc_dimension == "overworld" or mc_dimension == nil then + return layer + mcl_vars.mg_overworld_min + elseif mc_dimension == "nether" then + return layer + mcl_vars.mg_nether_min + elseif mc_dimension == "end" then + return layer + mcl_vars.mg_end_min + end end -- Takes a position and returns true if this position can have weather function mcl_worlds.has_weather(pos) - -- Weather in the Overworld and the high part of the void below - return pos.y <= mcl_vars.mg_overworld_max and pos.y >= mcl_vars.mg_overworld_min - 64 + -- Weather in the Overworld and the high part of the void below + return pos.y <= mcl_vars.mg_overworld_max and pos.y >= mcl_vars.mg_overworld_min - 64 end -- Takes a position and returns true if this position can have Nether dust function mcl_worlds.has_dust(pos) - -- Weather in the Overworld and the high part of the void below - return pos.y <= mcl_vars.mg_nether_max + 64 and pos.y >= mcl_vars.mg_nether_min - 64 + -- Weather in the Overworld and the high part of the void below + return pos.y <= mcl_vars.mg_nether_max + 138 and pos.y >= mcl_vars.mg_nether_min - 10 end -- Takes a position (pos) and returns true if compasses are working here function mcl_worlds.compass_works(pos) - -- It doesn't work in Nether and the End, but it works in the Overworld and in the high part of the void below - local _, dim = mcl_worlds.y_to_layer(pos.y) - if dim == "nether" or dim == "end" then - return false - elseif dim == "void" then - return pos.y <= mcl_vars.mg_overworld_max and pos.y >= mcl_vars.mg_overworld_min - 64 - else - return true - end + -- It doesn't work in Nether and the End, but it works in the Overworld and in the high part of the void below + local _, dim = mcl_worlds.y_to_layer(pos.y) + if dim == "nether" or dim == "end" then + return false + elseif dim == "void" then + return pos.y <= mcl_vars.mg_overworld_max and pos.y >= mcl_vars.mg_overworld_min - 64 + else + return true + end end -- Takes a position (pos) and returns true if clocks are working here @@ -112,12 +118,15 @@ 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 +local dimension_change = mcl_worlds.dimension_change + ----------------------- INTERNAL STUFF ---------------------- -- Update the dimension callbacks every DIM_UPDATE seconds @@ -125,19 +134,19 @@ local DIM_UPDATE = 1 local dimtimer = 0 minetest.register_on_joinplayer(function(player) - last_dimension[player:get_player_name()] = mcl_worlds.pos_to_dimension(player:get_pos()) + last_dimension[player:get_player_name()] = pos_to_dimension(player:get_pos()) end) minetest.register_globalstep(function(dtime) -- regular updates based on iterval dimtimer = dimtimer + dtime; if dimtimer >= DIM_UPDATE then - local players = minetest.get_connected_players() - for p=1, #players do - local dim = mcl_worlds.pos_to_dimension(players[p]:get_pos()) + local players = get_connected_players() + for p = 1, #players do + local dim = pos_to_dimension(players[p]:get_pos()) local name = players[p]:get_player_name() if dim ~= last_dimension[name] then - mcl_worlds.dimension_change(players[p], dim) + dimension_change(players[p], dim) end end dimtimer = 0 diff --git a/mods/CORE/mcl_worlds/mod.conf b/mods/CORE/mcl_worlds/mod.conf new file mode 100644 index 000000000..4b979b4fe --- /dev/null +++ b/mods/CORE/mcl_worlds/mod.conf @@ -0,0 +1,5 @@ +name = mcl_worlds +author = Wuzzy +description = Utility functions for worlds and the “dimensions”. +depends = mcl_init + diff --git a/mods/CORE/tga_encoder/README.md b/mods/CORE/tga_encoder/README.md new file mode 100644 index 000000000..9b3293dda --- /dev/null +++ b/mods/CORE/tga_encoder/README.md @@ -0,0 +1,4 @@ +# tga_encoder +A TGA Encoder written in Lua without the use of external Libraries. + +May be used as a Minetest mod. diff --git a/mods/CORE/tga_encoder/init.lua b/mods/CORE/tga_encoder/init.lua new file mode 100644 index 000000000..96afda5e1 --- /dev/null +++ b/mods/CORE/tga_encoder/init.lua @@ -0,0 +1,78 @@ +tga_encoder = {} + +local image = setmetatable({}, { + __call = function(self, ...) + local t = setmetatable({}, {__index = self}) + t:constructor(...) + return t + end, +}) + +function image:constructor(pixels) + self.data = "" + self.pixels = pixels + self.width = #pixels[1] + self.height = #pixels + + self:encode() +end + +function image:encode_colormap_spec() + 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() + 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() + 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.data = self.data + .. string.char(pixel[3], pixel[2], pixel[1]) + end + end +end + +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: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) + local f = assert(io.open(filename, "w")) + f:write(self.data) + f:close() +end + +tga_encoder.image = image diff --git a/mods/CORE/tga_encoder/mod.conf b/mods/CORE/tga_encoder/mod.conf new file mode 100644 index 000000000..e4bfac898 --- /dev/null +++ b/mods/CORE/tga_encoder/mod.conf @@ -0,0 +1,3 @@ +name = tga_encoder +author = Fleckenstein +description = A TGA Encoder written in Lua without the use of external Libraries. diff --git a/mods/CORE/walkover/init.lua b/mods/CORE/walkover/init.lua index 6bbd505d2..4d712c308 100644 --- a/mods/CORE/walkover/init.lua +++ b/mods/CORE/walkover/init.lua @@ -1,4 +1,11 @@ -- register extra flavours of a base nodedef + +local get_connected_players = minetest.get_connected_players +local get_node = minetest.get_node +local vector_add = vector.add +local ceil = math.ceil +local pairs = pairs + walkover = {} walkover.registered_globals = {} @@ -6,30 +13,40 @@ function walkover.register_global(func) table.insert(walkover.registered_globals, func) end +local on_walk = {} +local registered_globals = {} + +minetest.register_on_mods_loaded(function() + for name,def in pairs(minetest.registered_nodes) do + if def.on_walk_over then + on_walk[name] = def.on_walk_over + end + end + for _,func in ipairs(walkover.registered_globals) do --cache registered globals + table.insert(registered_globals, func) + end +end) + local timer = 0 minetest.register_globalstep(function(dtime) timer = timer + dtime; if timer >= 0.3 then - for _,player in pairs(minetest.get_connected_players()) do - local pp = player:get_pos() - pp.y = math.ceil(pp.y) - local loc = vector.add(pp, {x=0,y=-1,z=0}) - if loc ~= nil then - - local nodeiamon = minetest.get_node(loc) - - if nodeiamon ~= nil then - local def = minetest.registered_nodes[nodeiamon.name] - if def ~= nil and def.on_walk_over ~= nil then - def.on_walk_over(loc, nodeiamon, player) - end - for _, func in ipairs(walkover.registered_globals) do - func(loc, nodeiamon, player) - end - end - end - end - + for _,player in pairs(get_connected_players()) do + local pp = player:get_pos() + pp.y = ceil(pp.y) + local loc = vector_add(pp, {x=0,y=-1,z=0}) + if loc then + local nodeiamon = get_node(loc) + if nodeiamon then + if on_walk[nodeiamon.name] then + on_walk[nodeiamon.name](loc, nodeiamon, player) + end + for i = 1, #registered_globals do + registered_globals[i](loc, nodeiamon, player) + end + end + end + end timer = 0 end end) diff --git a/mods/CORE/walkover/mod.conf b/mods/CORE/walkover/mod.conf new file mode 100644 index 000000000..837d81365 --- /dev/null +++ b/mods/CORE/walkover/mod.conf @@ -0,0 +1,4 @@ +name = walkover +author = lordfingle +description = Some mode developers have shown an interest in having an `on_walk_over` event. This is useful for pressure-plates and the like. + diff --git a/mods/ENTITIES/drippingwater/depends.txt b/mods/ENTITIES/drippingwater/depends.txt deleted file mode 100644 index 315237e07..000000000 --- a/mods/ENTITIES/drippingwater/depends.txt +++ /dev/null @@ -1 +0,0 @@ -mcl_core diff --git a/mods/ENTITIES/drippingwater/init.lua b/mods/ENTITIES/drippingwater/init.lua index 730cb7b77..e17bdda40 100644 --- a/mods/ENTITIES/drippingwater/init.lua +++ b/mods/ENTITIES/drippingwater/init.lua @@ -1,6 +1,8 @@ --Dripping Water Mod --by kddekadenz +local math = math + -- License of code, textures & sounds: CC0 --Drop entities @@ -20,26 +22,21 @@ minetest.register_entity("drippingwater:drop_water", { spritediv = {x=1, y=1}, initial_sprite_basepos = {x=0, y=0}, static_save = false, - on_activate = function(self, staticdata) self.object:set_sprite({x=0,y=0}, 1, 1, true) end, - on_step = function(self, dtime) - local k = math.random(1,222) - local ownpos = self.object:get_pos() - - if k==1 then - self.object:set_acceleration({x=0, y=-5, z=0}) - end - - if minetest.get_node({x=ownpos.x, y=ownpos.y +0.5, z=ownpos.z}).name == "air" then - self.object:set_acceleration({x=0, y=-5, z=0}) - end - + local k = math.random(1,222) + local ownpos = self.object:get_pos() + if k==1 then + self.object:set_acceleration({x=0, y=-5, z=0}) + end + if minetest.get_node({x=ownpos.x, y=ownpos.y +0.5, z=ownpos.z}).name == "air" then + self.object:set_acceleration({x=0, y=-5, z=0}) + end if minetest.get_node({x=ownpos.x, y=ownpos.y -0.5, z=ownpos.z}).name ~= "air" then - self.object:remove() - minetest.sound_play({name="drippingwater_drip"}, {pos = ownpos, gain = 0.5, max_hear_distance = 8}, true) + self.object:remove() + minetest.sound_play({name="drippingwater_drip"}, {pos = ownpos, gain = 0.5, max_hear_distance = 8}, true) end end, }) @@ -61,27 +58,21 @@ minetest.register_entity("drippingwater:drop_lava", { spritediv = {x=1, y=1}, initial_sprite_basepos = {x=0, y=0}, static_save = false, - on_activate = function(self, staticdata) self.object:set_sprite({x=0,y=0}, 1, 0, true) end, - on_step = function(self, dtime) - local k = math.random(1,222) - local ownpos = self.object:get_pos() - - if k==1 then - self.object:set_acceleration({x=0, y=-5, z=0}) - end - - if minetest.get_node({x=ownpos.x, y=ownpos.y +0.5, z=ownpos.z}).name == "air" then - self.object:set_acceleration({x=0, y=-5, z=0}) - end - - + local k = math.random(1,222) + local ownpos = self.object:get_pos() + if k == 1 then + self.object:set_acceleration({x=0, y=-5, z=0}) + end + if minetest.get_node({x=ownpos.x, y=ownpos.y +0.5, z=ownpos.z}).name == "air" then + self.object:set_acceleration({x=0, y=-5, z=0}) + end if minetest.get_node({x=ownpos.x, y=ownpos.y -0.5, z=ownpos.z}).name ~= "air" then - self.object:remove() - minetest.sound_play({name="drippingwater_lavadrip"}, {pos = ownpos, gain = 0.5, max_hear_distance = 8}, true) + self.object:remove() + minetest.sound_play({name="drippingwater_lavadrip"}, {pos = ownpos, gain = 0.5, max_hear_distance = 8}, true) end end, }) @@ -90,36 +81,34 @@ minetest.register_entity("drippingwater:drop_lava", { --Create drop -minetest.register_abm( - { +minetest.register_abm({ label = "Create water drops", nodenames = {"group:opaque", "group:leaves"}, neighbors = {"group:water"}, - interval = 2, - chance = 22, - action = function(pos) - if minetest.get_item_group(minetest.get_node({x=pos.x, y=pos.y+1, z=pos.z}).name, "water") ~= 0 and - minetest.get_node({x=pos.x, y=pos.y-1, z=pos.z}).name == "air" then + interval = 2, + chance = 22, + action = function(pos) + if minetest.get_item_group(minetest.get_node({x=pos.x, y=pos.y+1, z=pos.z}).name, "water") ~= 0 + and minetest.get_node({x=pos.x, y=pos.y-1, z=pos.z}).name == "air" then local i = math.random(-45,45) / 100 minetest.add_entity({x=pos.x + i, y=pos.y - 0.501, z=pos.z + i}, "drippingwater:drop_water") end - end, + end, }) --Create lava drop -minetest.register_abm( - { +minetest.register_abm({ label = "Create lava drops", nodenames = {"group:opaque"}, neighbors = {"group:lava"}, - interval = 2, - chance = 22, - action = function(pos) - if minetest.get_item_group(minetest.get_node({x=pos.x, y=pos.y+1, z=pos.z}).name, "lava") ~= 0 and - minetest.get_node({x=pos.x, y=pos.y-1, z=pos.z}).name == "air" then + interval = 2, + chance = 22, + action = function(pos) + if minetest.get_item_group(minetest.get_node({x=pos.x, y=pos.y+1, z=pos.z}).name, "lava") ~= 0 + and minetest.get_node({x=pos.x, y=pos.y-1, z=pos.z}).name == "air" then local i = math.random(-45,45) / 100 minetest.add_entity({x=pos.x + i, y=pos.y - 0.501, z=pos.z + i}, "drippingwater:drop_lava") end - end, -}) + end, +}) \ No newline at end of file diff --git a/mods/ENTITIES/drippingwater/mod.conf b/mods/ENTITIES/drippingwater/mod.conf new file mode 100644 index 000000000..1de118f4c --- /dev/null +++ b/mods/ENTITIES/drippingwater/mod.conf @@ -0,0 +1,4 @@ +name = drippingwater +author = kddekadenz +description = Drops are generated rarely under solid nodes +depends = mcl_core diff --git a/mods/ENTITIES/mcl_boats/README.txt b/mods/ENTITIES/mcl_boats/README.txt index 195a2241a..0d56aa0e1 100644 --- a/mods/ENTITIES/mcl_boats/README.txt +++ b/mods/ENTITIES/mcl_boats/README.txt @@ -20,4 +20,4 @@ Authors include: * Various Minetest / Minetest Game developers and contributors (2012-2016) * maikerumine (2017) * Wuzzy (2017) - +* Fleckenstein (2020-2021) diff --git a/mods/ENTITIES/mcl_boats/depends.txt b/mods/ENTITIES/mcl_boats/depends.txt deleted file mode 100644 index 7a3ef812e..000000000 --- a/mods/ENTITIES/mcl_boats/depends.txt +++ /dev/null @@ -1,3 +0,0 @@ -mcl_player -mcl_core? -doc_identifier? diff --git a/mods/ENTITIES/mcl_boats/description.txt b/mods/ENTITIES/mcl_boats/description.txt deleted file mode 100644 index 65a979e8a..000000000 --- a/mods/ENTITIES/mcl_boats/description.txt +++ /dev/null @@ -1 +0,0 @@ -Adds drivable boats. diff --git a/mods/ENTITIES/mcl_boats/init.lua b/mods/ENTITIES/mcl_boats/init.lua index 5f666709c..311b07882 100644 --- a/mods/ENTITIES/mcl_boats/init.lua +++ b/mods/ENTITIES/mcl_boats/init.lua @@ -1,13 +1,22 @@ -local S = minetest.get_translator("mcl_boats") --- --- Helper functions --- +local S = minetest.get_translator(minetest.get_current_modname()) -local function is_water(pos) +local boat_visual_size = {x = 1, y = 1, z = 1} +local paddling_speed = 22 +local boat_y_offset = 0.35 +local boat_y_offset_ground = boat_y_offset + 0.6 +local boat_side_offset = 1.001 +local boat_max_hp = 4 + +local function is_group(pos, group) local nn = minetest.get_node(pos).name - return minetest.get_item_group(nn, "water") ~= 0 + return minetest.get_item_group(nn, group) ~= 0 end +local is_water = flowlib.is_water + +local function is_ice(pos) + return is_group(pos, "ice") +end local function get_sign(i) if i == 0 then @@ -17,64 +26,24 @@ local function get_sign(i) end end - local function get_velocity(v, yaw, y) local x = -math.sin(yaw) * v local z = math.cos(yaw) * v return {x = x, y = y, z = z} end - local function get_v(v) return math.sqrt(v.x ^ 2 + v.z ^ 2) end -local boat_visual_size = {x = 3, y = 3} --- Note: This mod assumes the default player visual_size is {x=1, y=1} -local driver_visual_size = { x = 1/boat_visual_size.x, y = 1/boat_visual_size.y } -local paddling_speed = 22 -local boat_y_offset = 0.35 -local boat_y_offset_ground = boat_y_offset + 0.6 -local boat_side_offset = 1.001 - --- --- Boat entity --- - -local boat = { - physical = true, - -- Warning: Do not change the position of the collisionbox top surface, - -- lowering it causes the boat to fall through the world if underwater - collisionbox = {-0.5, -0.35, -0.5, 0.5, 0.3, 0.5}, - visual = "mesh", - mesh = "mcl_boats_boat.b3d", - textures = {"mcl_boats_texture_oak_boat.png"}, - visual_size = boat_visual_size, - hp_max = 4, - - _driver = nil, -- Attached driver (player) or nil if none - _passenger = nil, - _v = 0, -- Speed - _last_v = 0, -- Temporary speed variable - _removed = false, -- If true, boat entity is considered removed (e.g. after punch) and should be ignored - _itemstring = "mcl_boats:boat", -- Itemstring of the boat item (implies boat type) - _animation = 0, -- 0: not animated; 1: paddling forwards; -1: paddling forwards -} - -local function detach_player(player, change_pos) - player:set_detach() - player:set_properties({visual_size = {x=1, y=1}}) - mcl_player.player_attached[player:get_player_name()] = false - mcl_player.player_set_animation(player, "stand" , 30) - if change_pos then - player:set_pos(vector.add(player:get_pos(), vector.new(0, 0.2, 0))) - end -end - local function check_object(obj) return obj and (obj:is_player() or obj:get_luaentity()) and obj end +local function get_visual_size(obj) + return obj:is_player() and {x = 1, y = 1, z = 1} or obj:get_luaentity()._old_visual_size or obj:get_properties().visual_size +end + local function set_attach(boat) boat._driver:set_attach(boat.object, "", {x = 0, y = 0.42, z = -1}, {x = 0, y = 0, z = 0}) @@ -87,59 +56,102 @@ local function set_double_attach(boat) {x = 0, y = 0.42, z = -2.2}, {x = 0, y = 0, z = 0}) end -minetest.register_on_respawnplayer(detach_player) +local function attach_object(self, obj) + if self._driver then + if self._driver:is_player() then + self._passenger = obj + else + self._passenger = self._driver + self._driver = obj + end + set_double_attach(self) + else + self._driver = obj + set_attach(self) + end + + local visual_size = get_visual_size(obj) + local yaw = self.object:get_yaw() + obj:set_properties({visual_size = vector.divide(visual_size, boat_visual_size)}) + + if obj:is_player() then + local name = obj:get_player_name() + mcl_player.player_attached[name] = true + minetest.after(0.2, function(name) + local player = minetest.get_player_by_name(name) + if player then + mcl_player.player_set_animation(player, "sit" , 30) + end + end, name) + obj:set_look_horizontal(yaw) + mcl_title.set(obj, "actionbar", {text=S("Sneak to dismount"), color="white", stay=60}) + else + obj:get_luaentity()._old_visual_size = visual_size + end +end + +local function detach_object(obj, change_pos) + obj:set_detach() + obj:set_properties({visual_size = get_visual_size(obj)}) + if obj:is_player() then + mcl_player.player_attached[obj:get_player_name()] = false + mcl_player.player_set_animation(obj, "stand" , 30) + else + obj:get_luaentity()._old_visual_size = nil + end + if change_pos then + obj:set_pos(vector.add(obj:get_pos(), vector.new(0, 0.2, 0))) + end +end + +-- +-- Boat entity +-- + +local boat = { + physical = true, + -- Warning: Do not change the position of the collisionbox top surface, + -- lowering it causes the boat to fall through the world if underwater + collisionbox = {-0.5, -0.35, -0.5, 0.5, 0.3, 0.5}, + visual = "mesh", + mesh = "mcl_boats_boat.b3d", + textures = {"mcl_boats_texture_oak_boat.png"}, + visual_size = boat_visual_size, + hp_max = boat_max_hp, + damage_texture_modifier = "^[colorize:white:0", + + _driver = nil, -- Attached driver (player) or nil if none + _passenger = nil, + _v = 0, -- Speed + _last_v = 0, -- Temporary speed variable + _removed = false, -- If true, boat entity is considered removed (e.g. after punch) and should be ignored + _itemstring = "mcl_boats:boat", -- Itemstring of the boat item (implies boat type) + _animation = 0, -- 0: not animated; 1: paddling forwards; -1: paddling forwards + _regen_timer = 0, + _damage_anim = 0, +} + +minetest.register_on_respawnplayer(detach_object) function boat.on_rightclick(self, clicker) if self._passenger or not clicker or clicker:get_attach() then return end - local name = clicker:get_player_name() - --[[if attach and attach:get_luaentity() then - local luaentity = attach:get_luaentity() - if luaentity._driver then - luaentity._driver = nil - end - clicker:set_detach() - clicker:set_properties({visual_size = {x=1, y=1}}) - end--]] - if self._driver then - if self._driver:is_player() then - self._passenger = clicker - else - -- for later use: transport mobs in boats - self._passenger = self._driver - self._driver = clicker - end - set_double_attach(self) - else - self._driver = clicker - set_attach(self) - end - clicker:set_properties({ visual_size = driver_visual_size }) - mcl_player.player_attached[name] = true - minetest.after(0.2, function(name) - local player = minetest.get_player_by_name(name) - if player then - mcl_player.player_set_animation(player, "sit" , 30) - end - end, name) - clicker:set_look_horizontal(self.object:get_yaw()) - mcl_tmp_message.message(clicker, S("Sneak to dismount")) + attach_object(self, clicker) end function boat.on_activate(self, staticdata, dtime_s) - --self.object:set_armor_groups({immortal = 1}) + self.object:set_armor_groups({fleshy = 100}) local data = minetest.deserialize(staticdata) if type(data) == "table" then self._v = data.v self._last_v = self._v self._itemstring = data.itemstring - self.object:set_properties({textures = data.textures, damage_texture_modifier = ""}) + self.object:set_properties({textures = data.textures}) end end - function boat.get_staticdata(self) return minetest.serialize({ v = self._v, @@ -148,8 +160,9 @@ function boat.get_staticdata(self) }) end - function boat.on_death(self, killer) + mcl_burning.extinguish(self.object) + if killer and killer:is_player() and minetest.is_creative_enabled(killer:get_player_name()) then local inv = killer:get_inventory() if not inv:contains_item("main", self._itemstring) then @@ -159,37 +172,62 @@ function boat.on_death(self, killer) minetest.add_item(self.object:get_pos(), self._itemstring) end if self._driver then - detach_player(self._driver) + detach_object(self._driver) end if self._passenger then - detach_player(self._passenger) + detach_object(self._passenger) end self._driver = nil self._passenger = nil end +function boat.on_punch(self, puncher, time_from_last_punch, tool_capabilities, dir, damage) + if damage > 0 then + self._regen_timer = 0 + end +end + function boat.on_step(self, dtime, moveresult) + mcl_burning.tick(self.object, dtime, self) + self._v = get_v(self.object:get_velocity()) * get_sign(self._v) - local on_water = true - local in_water = false local v_factor = 1 local v_slowdown = 0.02 local p = self.object:get_pos() - if (not is_water({x=p.x, y=p.y-boat_y_offset, z=p.z})) then + local on_water = true + local on_ice = false + local in_water = is_water({x=p.x, y=p.y-boat_y_offset+1, z=p.z}) + local waterp = {x=p.x, y=p.y-boat_y_offset - 0.1, z=p.z} + if not is_water(waterp) then on_water = false - v_factor = 0.5 - v_slowdown = 0.04 - elseif (is_water({x=p.x, y=p.y-boat_y_offset+1, z=p.z})) then + if not in_water and is_ice(waterp) then + on_ice = true + else + v_slowdown = 0.04 + v_factor = 0.5 + end + elseif in_water then on_water = false in_water = true v_factor = 0.75 v_slowdown = 0.05 end + local hp = self.object:get_hp() + local regen_timer = self._regen_timer + dtime + if hp >= boat_max_hp then + regen_timer = 0 + elseif regen_timer >= 0.5 then + hp = hp + 1 + self.object:set_hp(hp) + regen_timer = 0 + end + self._regen_timer = regen_timer + if moveresult and moveresult.collides then - for _, collision in ipairs(moveresult.collisions) do + for _, collision in pairs(moveresult.collisions) do local pos = collision.node_pos - if collision.type == "node" and minetest.get_node_group(minetest.get_node(pos).name, "dig_by_boat") > 0 then + if collision.type == "node" and minetest.get_item_group(minetest.get_node(pos).name, "dig_by_boat") > 0 then minetest.dig_node(pos) end end @@ -207,7 +245,7 @@ function boat.on_step(self, dtime, moveresult) else local ctrl = self._passenger:get_player_control() if ctrl and ctrl.sneak then - detach_player(self._passenger, true) + detach_object(self._passenger, true) self._passenger = nil end end @@ -219,7 +257,7 @@ function boat.on_step(self, dtime, moveresult) end local ctrl = self._driver:get_player_control() if ctrl and ctrl.sneak then - detach_player(self._driver, true) + detach_object(self._driver, true) self._driver = nil return end @@ -268,11 +306,19 @@ function boat.on_step(self, dtime, moveresult) self.object:set_animation({x=0, y=40}, 0, 0, true) self._animation = 0 end + + for _, obj in pairs(minetest.get_objects_inside_radius(self.object:get_pos(), 1.3)) do + local entity = obj:get_luaentity() + if entity and entity._cmi_is_mob then + attach_object(self, obj) + break + end + end end local s = get_sign(self._v) - if not on_water and not in_water and math.abs(self._v) > 1.0 then - v_slowdown = math.min(math.abs(self._v) - 1.0, v_slowdown * 5) - elseif in_water and math.abs(self._v) > 1.5 then + if not on_ice and not on_water and not in_water and math.abs(self._v) > 2.0 then + v_slowdown = math.min(math.abs(self._v) - 2.0, v_slowdown * 5) + elseif not on_ice and in_water and math.abs(self._v) > 1.5 then v_slowdown = math.min(math.abs(self._v) - 1.5, v_slowdown * 5) end self._v = self._v - v_slowdown * s @@ -282,10 +328,10 @@ function boat.on_step(self, dtime, moveresult) p.y = p.y - boat_y_offset local new_velo - local new_acce = {x = 0, y = 0, z = 0} - if not is_water(p) then + local new_acce + if not is_water(p) and not on_ice then -- Not on water or inside water: Free fall - local nodedef = minetest.registered_nodes[minetest.get_node(p).name] + --local nodedef = minetest.registered_nodes[minetest.get_node(p).name] new_acce = {x = 0, y = -9.8, z = 0} new_velo = get_velocity(self._v, self.object:get_yaw(), self.object:get_velocity().y) @@ -313,12 +359,17 @@ function boat.on_step(self, dtime, moveresult) end -- Terminal velocity: 8 m/s per axis of travel + local terminal_velocity = on_ice and 57.1 or 8.0 for _,axis in pairs({"z","y","x"}) do - if math.abs(new_velo[axis]) > 8 then - new_velo[axis] = 8 * get_sign(new_velo[axis]) + if math.abs(new_velo[axis]) > terminal_velocity then + new_velo[axis] = terminal_velocity * get_sign(new_velo[axis]) end end + local yaw = self.object:get_yaw() + local anim = (boat_max_hp - hp - regen_timer * 2) / boat_max_hp * math.pi / 4 + + self.object:set_rotation(vector.new(anim, yaw, anim)) self.object:set_velocity(new_velo) self.object:set_acceleration(new_acce) end @@ -343,7 +394,7 @@ for b=1, #boat_ids do if b == 1 then help = true longdesc = S("Boats are used to travel on the surface of water.") - usagehelp = S("Rightclick on a water source to place the boat. Rightclick the boat to enter it. Use [Left] and [Right] to steer, [Forwards] to speed up and [Backwards] to slow down or move backwards. Rightclick the boat again to leave it, punch the boat to make it drop as an item.") + usagehelp = S("Rightclick on a water source to place the boat. Rightclick the boat to enter it. Use [Left] and [Right] to steer, [Forwards] to speed up and [Backwards] to slow down or move backwards. Use [Sneak] to leave the boat, punch the boat to make it drop as an item.") helpname = S("Boat") end tt_help = S("Water vehicle") @@ -419,6 +470,6 @@ minetest.register_craft({ burntime = 20, }) -if minetest.get_modpath("doc_identifier") ~= nil then +if minetest.get_modpath("doc_identifier") then doc.sub.identifier.register_object("mcl_boats:boat", "craftitems", "mcl_boats:boat") end diff --git a/mods/ENTITIES/mcl_boats/locale/mcl_boats.de.tr b/mods/ENTITIES/mcl_boats/locale/mcl_boats.de.tr index 95066b530..c1864a871 100644 --- a/mods/ENTITIES/mcl_boats/locale/mcl_boats.de.tr +++ b/mods/ENTITIES/mcl_boats/locale/mcl_boats.de.tr @@ -6,6 +6,7 @@ Boats are used to travel on the surface of water.=Boote werden benutzt, um sich Dark Oak Boat=Schwarzeichenboot Jungle Boat=Dschungelboot Oak Boat=Eichenboot -Rightclick on a water source to place the boat. Rightclick the boat to enter it. Use [Left] and [Right] to steer, [Forwards] to speed up and [Backwards] to slow down or move backwards. Rightclick the boat again to leave it, punch the boat to make it drop as an item.=Rechtsklicken Sie auf eine Wasserquelle, um das Boot zu platzieren. Rechtsklicken Sie auf das Boot, um es zu betreten. Mit [Links] und [Rechts] lenken, mit [Vorwärts] und [Rückwärts] Geschwindigkeit regeln oder rückwärts fahren. Rechtsklicken Sie erneut auf das Boot, um es zu verlassen, schlagen Sie das Boot, um es als Gegenstand fallen zu lassen. +Rightclick on a water source to place the boat. Rightclick the boat to enter it. Use [Left] and [Right] to steer, [Forwards] to speed up and [Backwards] to slow down or move backwards. Use [Sneak] to leave the boat, punch the boat to make it drop as an item.=Rechtsklicken Sie auf eine Wasserquelle, um das Boot zu platzieren. Rechtsklicken Sie auf das Boot, um es zu betreten. Mit [Links] und [Rechts] lenken, mit [Vorwärts] und [Rückwärts] Geschwindigkeit regeln oder rückwärts fahren. Nutzen sie [Schleichen], um das Boot zu verlassen, schlagen Sie das Boot, um es als Gegenstand fallen zu lassen. Spruce Boat=Fichtenboot Water vehicle=Wasserfahrzeug +Sneak to dismount=Zum Aussteigen schleichen diff --git a/mods/ENTITIES/mcl_boats/locale/mcl_boats.fr.tr b/mods/ENTITIES/mcl_boats/locale/mcl_boats.fr.tr index 04d6d9da9..785d50146 100644 --- a/mods/ENTITIES/mcl_boats/locale/mcl_boats.fr.tr +++ b/mods/ENTITIES/mcl_boats/locale/mcl_boats.fr.tr @@ -6,6 +6,7 @@ Boats are used to travel on the surface of water.=Les bateaux sont utilisés pou Dark Oak Boat=Bateau en Chêne Noir Jungle Boat=Bateau en Acajou Oak Boat=Bateau en Chêne -Rightclick on a water source to place the boat. Rightclick the boat to enter it. Use [Left] and [Right] to steer, [Forwards] to speed up and [Backwards] to slow down or move backwards. Rightclick the boat again to leave it, punch the boat to make it drop as an item.=Faites un clic droit sur une source d'eau pour placer le bateau. Faites un clic droit sur le bateau pour y entrer. Utilisez [Gauche] et [Droite] pour diriger, [Avant] pour accélérer et [Arrière] pour ralentir ou reculer. Cliquez de nouveau avec le bouton droit sur le bateau pour le quitter, frappez le bateau pour le faire tomber en tant qu'objet. +Rightclick on a water source to place the boat. Rightclick the boat to enter it. Use [Left] and [Right] to steer, [Forwards] to speed up and [Backwards] to slow down or move backwards. Use [Sneak] to leave the boat, punch the boat to make it drop as an item.=Faites un clic droit sur une source d'eau pour placer le bateau. Faites un clic droit sur le bateau pour y entrer. Utilisez [Gauche] et [Droite] pour diriger, [Avant] pour accélérer et [Arrière] pour ralentir ou reculer. Utilisez [Sneak] pour le quitter, frappez le bateau pour le faire tomber en tant qu'objet. Spruce Boat=Bateau en Sapin -Water vehicle=Véhicule aquatique \ No newline at end of file +Water vehicle=Véhicule aquatique +Sneak to dismount= \ No newline at end of file diff --git a/mods/ENTITIES/mcl_boats/locale/mcl_boats.pl.tr b/mods/ENTITIES/mcl_boats/locale/mcl_boats.pl.tr new file mode 100644 index 000000000..17b5183bc --- /dev/null +++ b/mods/ENTITIES/mcl_boats/locale/mcl_boats.pl.tr @@ -0,0 +1,12 @@ +# textdomain: mcl_boats +Acacia Boat=Akacjowa łódź +Birch Boat=Brzozowa łódź +Boat=Łódź +Boats are used to travel on the surface of water.=Łodzie są wykorzystywane do podróżowania po powierzchni wody. +Dark Oak Boat=Ciemno-dębowa łódź +Jungle Boat=Tropikalna łódź +Oak Boat=Dębowa łódź +Rightclick on a water source to place the boat. Rightclick the boat to enter it. Use [Left] and [Right] to steer, [Forwards] to speed up and [Backwards] to slow down or move backwards. Use [Sneak] to leave the boat, punch the boat to make it drop as an item.=Kliknij prawym przyciskiem myszy na źródło wody by postawić łódź. Kliknij prawym przyciskiem myszy by w nią wsiąść. Użyj przycisków [Lewy] oraz [Prawy] by sterować, [Naprzód] by przyspieszyć i [W tył] by zwolnić lub się cofać. Kliknij [Skradanie] by z niej wyjść, uderz ją by wziąć ją jako przedmiot. +Spruce Boat=Świerkowa łódź +Water vehicle=Pojazd wodny +Sneak to dismount=Skradaj się by opuścić łódź diff --git a/mods/ENTITIES/mcl_boats/locale/template.txt b/mods/ENTITIES/mcl_boats/locale/template.txt index 54f1fd646..ac52bc19f 100644 --- a/mods/ENTITIES/mcl_boats/locale/template.txt +++ b/mods/ENTITIES/mcl_boats/locale/template.txt @@ -6,6 +6,7 @@ Boats are used to travel on the surface of water.= Dark Oak Boat= Jungle Boat= Oak Boat= -Rightclick on a water source to place the boat. Rightclick the boat to enter it. Use [Left] and [Right] to steer, [Forwards] to speed up and [Backwards] to slow down or move backwards. Rightclick the boat again to leave it, punch the boat to make it drop as an item.= +Rightclick on a water source to place the boat. Rightclick the boat to enter it. Use [Left] and [Right] to steer, [Forwards] to speed up and [Backwards] to slow down or move backwards. Use [Sneak] to leave the boat, punch the boat to make it drop as an item.= Spruce Boat= Water vehicle= +Sneak to dismount= diff --git a/mods/ENTITIES/mcl_boats/mod.conf b/mods/ENTITIES/mcl_boats/mod.conf index f14456c5f..61463b6ec 100644 --- a/mods/ENTITIES/mcl_boats/mod.conf +++ b/mods/ENTITIES/mcl_boats/mod.conf @@ -1 +1,7 @@ name = mcl_boats +author = PilzAdam +description = Adds drivable boats. +depends = mcl_player, flowlib, mcl_title +optional_depends = mcl_core, doc_identifier + + diff --git a/mods/ENTITIES/mcl_boats/models/mcl_boats_boat.b3d b/mods/ENTITIES/mcl_boats/models/mcl_boats_boat.b3d index e53bc412942bea33b0a8ff509092594b9f6d0559..6c9c31469369f5707d1e98b83271eaf0f187cca1 100644 GIT binary patch literal 39715 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 literal 19221 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 max_fire_prot_lvl then + max_fire_prot_lvl = fire_prot_lvl + end + end + end + + if max_fire_prot_lvl > 0 then + burn_time = burn_time - math.floor(burn_time * max_fire_prot_lvl * 0.15) + end + end + + if not storage.burn_time or burn_time >= storage.burn_time then + if obj:is_player() then + mcl_burning.channels[obj]:send_all(tostring(mcl_burning.animation_frames)) + mcl_burning.channels[obj]:send_all("start") + end + storage.burn_time = burn_time + storage.fire_damage_timer = 0 + + local fire_entity = minetest.add_entity(obj:get_pos(), "mcl_burning:fire") + local minp, maxp = mcl_burning.get_collisionbox(obj, false, storage) + local obj_size = obj:get_properties().visual_size + + local vertical_grow_factor = 1.2 + local horizontal_grow_factor = 1.1 + local grow_vector = vector.new(horizontal_grow_factor, vertical_grow_factor, horizontal_grow_factor) + + local size = vector.subtract(maxp, minp) + size = vector.multiply(size, grow_vector) + size = vector.divide(size, obj_size) + local offset = vector.new(0, size.y * 10 / 2, 0) + + fire_entity:set_properties({visual_size = size}) + fire_entity:set_attach(obj, "", offset, {x = 0, y = 0, z = 0}) + local fire_luaentity = fire_entity:get_luaentity() + + for _, other in pairs(minetest.get_objects_inside_radius(fire_entity:get_pos(), 0)) do + local other_luaentity = other:get_luaentity() + if other_luaentity and other_luaentity.name == "mcl_burning:fire" and other_luaentity ~= fire_luaentity then + other:remove() + break + end + end + end +end + +function mcl_burning.extinguish(obj) + if mcl_burning.is_burning(obj) then + local storage = mcl_burning.get_storage(obj) + if obj:is_player() then + mcl_burning.channels[obj]:send_all("stop") + mcl_burning.storage[obj] = {} + else + storage.burn_time = nil + storage.fire_damage_timer = nil + end + end +end + +function mcl_burning.tick(obj, dtime, storage) + if storage.burn_time then + storage.burn_time = storage.burn_time - dtime + + if storage.burn_time <= 0 or mcl_burning.is_affected_by_rain(obj) or #mcl_burning.get_touching_nodes(obj, "group:puts_out_fire", storage) > 0 then + mcl_burning.extinguish(obj) + return true + else + storage.fire_damage_timer = storage.fire_damage_timer + dtime + + if storage.fire_damage_timer >= 1 then + storage.fire_damage_timer = 0 + + local luaentity = obj:get_luaentity() + + if not luaentity or not luaentity.fire_damage_resistant then + mcl_util.deal_damage(obj, 1, {type = "on_fire"}) + end + end + end + end +end diff --git a/mods/ENTITIES/mcl_burning/engine.lua b/mods/ENTITIES/mcl_burning/engine.lua deleted file mode 100644 index 57890dd2f..000000000 --- a/mods/ENTITIES/mcl_burning/engine.lua +++ /dev/null @@ -1,304 +0,0 @@ -local S = minetest.get_translator("mcl_burning") - -function mcl_burning.get_default(datatype) - local default_table = {string = "", float = 0.0, int = 0, bool = false} - return default_table[datatype] -end - -function mcl_burning.get(obj, datatype, name) - local key - if obj:is_player() then - local meta = obj:get_meta() - return meta["get_" .. datatype](meta, "mcl_burning:" .. name) - else - local luaentity = obj:get_luaentity() - return luaentity and luaentity["mcl_burning_" .. name] or mcl_burning.get_default(datatype) - end -end - -function mcl_burning.set(obj, datatype, name, value) - if obj:is_player() then - local meta = obj:get_meta() - meta["set_" .. datatype](meta, "mcl_burning:" .. name, value or mcl_burning.get_default(datatype)) - else - local luaentity = obj:get_luaentity() - if mcl_burning.get_default(datatype) == value then - value = nil - end - luaentity["mcl_burning_" .. name] = value - end -end - -function mcl_burning.is_burning(obj) - return mcl_burning.get(obj, "float", "burn_time") > 0 -end - -function mcl_burning.is_affected_by_rain(obj) - return mcl_weather.get_weather() == "rain" and mcl_weather.is_outdoor(obj:get_pos()) -end - -function mcl_burning.get_collisionbox(obj, smaller) - local box = obj:get_properties().collisionbox - local minp, maxp = vector.new(box[1], box[2], box[3]), vector.new(box[4], box[5], box[6]) - if smaller then - local s_vec = vector.new(0.1, 0.1, 0.1) - minp = vector.add(minp, s_vec) - maxp = vector.subtract(maxp, s_vec) - end - return minp, maxp -end - -function mcl_burning.get_touching_nodes(obj, nodenames) - local pos = obj:get_pos() - local box = obj:get_properties().collisionbox - local minp, maxp = mcl_burning.get_collisionbox(obj, true) - local nodes = minetest.find_nodes_in_area(vector.add(pos, minp), vector.add(pos, maxp), nodenames) - return nodes -end - -function mcl_burning.get_highest_group_value(obj, groupname) - local nodes = mcl_burning.get_touching_nodes(obj, "group:" .. groupname, true) - local highest_group_value = 0 - - for _, pos in pairs(nodes) do - local node = minetest.get_node(pos) - local group_value = minetest.get_item_group(node.name, groupname) - if group_value > highest_group_value then - highest_group_value = group_value - end - end - - return highest_group_value -end - -function mcl_burning.damage(obj) - local luaentity = obj:get_luaentity() - local health - - if luaentity then - health = luaentity.health - end - - local hp = health or obj:get_hp() - - if hp <= 0 then - return - end - - local do_damage = true - - if obj:is_player() then - if mcl_potions.player_has_effect(obj, "fire_proof") then - do_damage = false - else - local name = obj:get_player_name() - armor.last_damage_types[name] = "fire" - local deathmsg = S("@1 burned to death.", name) - local reason = mcl_burning.get(obj, "string", "reason") - if reason ~= "" then - deathmsg = S("@1 was burned by @2.", name, reason) - end - mcl_death_messages.player_damage(obj, deathmsg) - end - else - if luaentity.fire_damage_resistant then - do_damage = false - end - end - - if do_damage then - local damage = mcl_burning.get(obj, "float", "damage") - if damage == 0 then - damage = 1 - end - local new_hp = hp - damage - if health then - luaentity.health = new_hp - else - obj:set_hp(new_hp) - end - end -end - -function mcl_burning.set_on_fire(obj, burn_time, damage, reason) - local luaentity = obj:get_luaentity() - if luaentity and luaentity.fire_resistant then - return - end - - local old_burn_time = mcl_burning.get(obj, "float", "burn_time") - local max_fire_prot_lvl = 0 - - if obj:is_player() then - if minetest.is_creative_enabled(obj:get_player_name()) then - burn_time = burn_time / 100 - end - - local inv = obj:get_inventory() - - for i = 2, 5 do - local stack = inv:get_stack("armor", i) - - local fire_prot_lvl = mcl_enchanting.get_enchantment(stack, "fire_protection") - max_fire_prot_lvl = math.max(max_fire_prot_lvl, fire_prot_lvl) - end - end - - if max_fire_prot_lvl > 0 then - burn_time = burn_time - math.floor(burn_time * max_fire_prot_lvl * 0.15) - end - - if old_burn_time <= burn_time then - local sound_id = mcl_burning.get(obj, "int", "sound_id") - if sound_id == 0 then - sound_id = minetest.sound_play("fire_fire", { - object = obj, - gain = 0.18, - max_hear_distance = 16, - loop = true, - }) + 1 - end - - local hud_id - if obj:is_player() then - hud_id = mcl_burning.get(obj, "int", "hud_id") - if hud_id == 0 then - hud_id = obj:hud_add({ - hud_elem_type = "image", - position = {x = 0.5, y = 0.5}, - scale = {x = -100, y = -100}, - text = "fire_basic_flame.png", - z_index = 1000, - }) + 1 - end - end - mcl_burning.set(obj, "float", "burn_time", burn_time) - mcl_burning.set(obj, "float", "damage", damage) - mcl_burning.set(obj, "string", "reason", reason) - mcl_burning.set(obj, "int", "hud_id", hud_id) - mcl_burning.set(obj, "int", "sound_id", sound_id) - - local fire_entity = minetest.add_entity(obj:get_pos(), "mcl_burning:fire") - local minp, maxp = mcl_burning.get_collisionbox(obj) - local obj_size = obj:get_properties().visual_size - - local vertical_grow_factor = 1.2 - local horizontal_grow_factor = 1.1 - local grow_vector = vector.new(horizontal_grow_factor, vertical_grow_factor, horizontal_grow_factor) - - local size = vector.subtract(maxp, minp) - size = vector.multiply(size, grow_vector) - size = vector.divide(size, obj_size) - local offset = vector.new(0, size.y * 10 / 2, 0) - - fire_entity:set_properties({visual_size = size}) - fire_entity:set_attach(obj, "", offset, {x = 0, y = 0, z = 0}) - mcl_burning.update_animation_frame(obj, fire_entity, 0) - end -end - -function mcl_burning.extinguish(obj) - if mcl_burning.is_burning(obj) then - local sound_id = mcl_burning.get(obj, "int", "sound_id") - 1 - minetest.sound_stop(sound_id) - - if obj:is_player() then - local hud_id = mcl_burning.get(obj, "int", "hud_id") - 1 - obj:hud_remove(hud_id) - end - - mcl_burning.set(obj, "float", "damage") - mcl_burning.set(obj, "string", "reason") - mcl_burning.set(obj, "float", "burn_time") - mcl_burning.set(obj, "float", "damage_timer") - mcl_burning.set(obj, "int", "hud_id") - mcl_burning.set(obj, "int", "sound_id") - end -end - -function mcl_burning.catch_fire_tick(obj, dtime) - if mcl_burning.is_affected_by_rain(obj) or #mcl_burning.get_touching_nodes(obj, "group:puts_out_fire") > 0 then - mcl_burning.extinguish(obj) - else - local set_on_fire_value = mcl_burning.get_highest_group_value(obj, "set_on_fire") - - if set_on_fire_value > 0 then - mcl_burning.set_on_fire(obj, set_on_fire_value) - end - end -end - -function mcl_burning.tick(obj, dtime) - local burn_time = mcl_burning.get(obj, "float", "burn_time") - dtime - - if burn_time <= 0 then - mcl_burning.extinguish(obj) - else - mcl_burning.set(obj, "float", "burn_time", burn_time) - - local damage_timer = mcl_burning.get(obj, "float", "damage_timer") + dtime - - if damage_timer >= 1 then - damage_timer = 0 - mcl_burning.damage(obj) - end - - mcl_burning.set(obj, "float", "damage_timer", damage_timer) - end - - mcl_burning.catch_fire_tick(obj, dtime) -end - -function mcl_burning.update_animation_frame(obj, fire_entity, animation_frame) - local fire_texture = "mcl_burning_entity_flame_animated.png^[opacity:180^[verticalframe:" .. mcl_burning.animation_frames .. ":" .. animation_frame - local fire_HUD_texture = "mcl_burning_hud_flame_animated.png^[opacity:180^[verticalframe:" .. mcl_burning.animation_frames .. ":" .. animation_frame - fire_entity:set_properties({textures = {"blank.png", "blank.png", fire_texture, fire_texture, fire_texture, fire_texture}}) - if obj:is_player() then - local hud_id = mcl_burning.get(obj, "int", "hud_id") - 1 - obj:hud_change(hud_id, "text", fire_HUD_texture) - end -end - -function mcl_burning.fire_entity_step(self, dtime) - if self.removed then - return - end - - local obj = self.object - local parent = obj:get_attach() - local do_remove - - self.doing_step = true - - if not parent or not mcl_burning.is_burning(parent) then - do_remove = true - else - for _, other in ipairs(minetest.get_objects_inside_radius(obj:get_pos(), 0)) do - local luaentity = obj:get_luaentity() - if luaentity and luaentity.name == "mcl_burning:fire" and not luaentity.doing_step and not luaentity.removed then - do_remove = true - break - end - end - end - - self.doing_step = false - - if do_remove then - self.removed = true - obj:remove() - return - end - - local animation_timer = self.animation_timer + dtime - if animation_timer >= 0.015 then - animation_timer = 0 - local animation_frame = self.animation_frame + 1 - if animation_frame > mcl_burning.animation_frames - 1 then - animation_frame = 0 - end - mcl_burning.update_animation_frame(parent, obj, animation_frame) - self.animation_frame = animation_frame - end - self.animation_timer = animation_timer -end diff --git a/mods/ENTITIES/mcl_burning/init.lua b/mods/ENTITIES/mcl_burning/init.lua index 1b341273e..313e75dca 100644 --- a/mods/ENTITIES/mcl_burning/init.lua +++ b/mods/ENTITIES/mcl_burning/init.lua @@ -1,29 +1,42 @@ -local S = minetest.get_translator("mcl_burning") -local modpath = minetest.get_modpath("mcl_burning") +local modpath = minetest.get_modpath(minetest.get_current_modname()) + +local pairs = pairs + +local get_connected_players = minetest.get_connected_players +local get_item_group = minetest.get_item_group mcl_burning = { + storage = {}, + channels = {}, animation_frames = tonumber(minetest.settings:get("fire_animation_frames")) or 8 } -dofile(modpath .. "/engine.lua") - -minetest.register_entity("mcl_burning:fire", { - initial_properties = { - physical = false, - collisionbox = {0, 0, 0, 0, 0, 0}, - visual = "cube", - pointable = false, - glow = -1, - }, - - animation_frame = 0, - animation_timer = 0, - on_step = mcl_burning.fire_entity_step, -}) +dofile(modpath .. "/api.lua") minetest.register_globalstep(function(dtime) - for _, player in ipairs(minetest.get_connected_players()) do - mcl_burning.tick(player, dtime) + for _, player in pairs(get_connected_players()) do + local storage = mcl_burning.storage[player] + if not mcl_burning.tick(player, dtime, storage) and not mcl_burning.is_affected_by_rain(player) then + local nodes = mcl_burning.get_touching_nodes(player, {"group:puts_out_fire", "group:set_on_fire"}, storage) + local burn_time = 0 + + for _, pos in pairs(nodes) do + local node = minetest.get_node(pos) + if get_item_group(node.name, "puts_out_fire") > 0 then + burn_time = 0 + break + end + + local value = get_item_group(node.name, "set_on_fire") + if value > burn_time then + burn_time = value + end + end + + if burn_time > 0 then + mcl_burning.set_on_fire(player, burn_time) + end + end end end) @@ -31,6 +44,68 @@ minetest.register_on_respawnplayer(function(player) mcl_burning.extinguish(player) end) +minetest.register_on_joinplayer(function(player) + local storage + + local burn_data = player:get_meta():get_string("mcl_burning:data") + if burn_data == "" then + storage = {} + else + storage = minetest.deserialize(burn_data) + end + + mcl_burning.storage[player] = storage + mcl_burning.channels[player] = minetest.mod_channel_join("mcl_burning:" .. player:get_player_name()) +end) + minetest.register_on_leaveplayer(function(player) - mcl_burning.set(player, "int", "hud_id") -end) \ No newline at end of file + player:get_meta():set_string("mcl_burning:data", minetest.serialize(mcl_burning.storage[player])) + mcl_burning.storage[player] = nil +end) + + +minetest.register_entity("mcl_burning:fire", { + initial_properties = { + physical = false, + collisionbox = {0, 0, 0, 0, 0, 0}, + visual = "upright_sprite", + textures = { + name = "mcl_burning_entity_flame_animated.png", + animation = { + type = "vertical_frames", + aspect_w = 16, + aspect_h = 16, + length = 1.0, + }, + }, + spritediv = {x = 1, y = mcl_burning.animation_frames}, + pointable = false, + glow = -1, + backface_culling = false, + }, + animation_frame = 0, + animation_timer = 0, + on_activate = function(self) + self.object:set_sprite({x = 0, y = 0}, mcl_burning.animation_frames, 1.0 / mcl_burning.animation_frames) + end, + on_step = function(self) + if not self:sanity_check() then + self.object:remove() + end + end, + sanity_check = function(self) + local parent = self.object:get_attach() + + if not parent then + return false + end + + local storage = mcl_burning.get_storage(parent) + + if not storage or not storage.burn_time then + return false + end + + return true + end, +}) diff --git a/mods/ENTITIES/mcl_falling_nodes/description.txt b/mods/ENTITIES/mcl_falling_nodes/description.txt deleted file mode 100644 index 8b436bf28..000000000 --- a/mods/ENTITIES/mcl_falling_nodes/description.txt +++ /dev/null @@ -1 +0,0 @@ -Falling node entities, Minecraft-style diff --git a/mods/ENTITIES/mcl_falling_nodes/init.lua b/mods/ENTITIES/mcl_falling_nodes/init.lua index 1ffc87b34..d527603de 100644 --- a/mods/ENTITIES/mcl_falling_nodes/init.lua +++ b/mods/ENTITIES/mcl_falling_nodes/init.lua @@ -1,7 +1,4 @@ -local S = minetest.get_translator("mcl_falling_nodes") -local dmes = minetest.get_modpath("mcl_death_messages") ~= nil - -local get_falling_depth = function(self) +local function get_falling_depth(self) if not self._startpos then -- Fallback self._startpos = self.object:get_pos() @@ -9,56 +6,45 @@ local get_falling_depth = function(self) return self._startpos.y - vector.round(self.object:get_pos()).y end -local deal_falling_damage = function(self, dtime) +local function deal_falling_damage(self, dtime) if minetest.get_item_group(self.node.name, "falling_node_damage") == 0 then return end - -- Cause damage to any player it hits. + -- Cause damage to any entity it hits. -- Algorithm based on MC anvils. - -- TODO: Support smashing other objects, too. local pos = self.object:get_pos() if not self._startpos then -- Fallback self._startpos = pos end - local objs = minetest.get_objects_inside_radius(pos, 1) - for _,v in ipairs(objs) do - local hp = v:get_hp() - if v:is_player() and hp ~= 0 then - if not self._hit_players then - self._hit_players = {} - end - local name = v:get_player_name() - local hit = false - for _,v in ipairs(self._hit_players) do - if name == v then - hit = true - end - end - if not hit then - table.insert(self._hit_players, name) - local way = self._startpos.y - pos.y - local damage = (way - 1) * 2 - damage = math.min(40, math.max(0, damage)) - if damage >= 1 then - hp = hp - damage - if hp < 0 then - hp = 0 + self._hit = self._hit or {} + for _, obj in ipairs(minetest.get_objects_inside_radius(pos, 1)) do + local entity = obj:get_luaentity() + if entity and entity.name == "__builtin:item" then + obj:remove() + elseif mcl_util.get_hp(obj) > 0 and not self._hit[obj] then + self._hit[obj] = true + local way = self._startpos.y - pos.y + local damage = (way - 1) * 2 + damage = math.min(40, math.max(0, damage)) + if damage >= 1 then + -- Reduce damage if wearing a helmet + local inv = mcl_util.get_inventory(obj) + if inv then + local helmet = inv:get_stack("armor", 2) + if minetest.get_item_group(helmet:get_name(), "combat_armor") > 0 then + damage = damage / 4 * 3 + mcl_util.use_item_durability(helmet, 1) + inv:set_stack("armor", 2, helmet) end - if v:is_player() then - -- TODO: Reduce damage if wearing a helmet - local msg - if minetest.get_item_group(self.node.name, "anvil") ~= 0 then - msg = S("@1 was smashed by a falling anvil.", v:get_player_name()) - else - msg = S("@1 was smashed by a falling block.", v:get_player_name()) - end - if dmes then - mcl_death_messages.player_damage(v, msg) - end - end - v:set_hp(hp, { type = "punch", from = "mod" }) end + local dmg_type + if minetest.get_item_group(self.node.name, "anvil") ~= 0 then + dmg_type = "anvil" + else + dmg_type = "falling_node" + end + mcl_util.deal_damage(obj, damage, {type = dmg_type}) end end end @@ -74,10 +60,8 @@ minetest.register_entity(":__builtin:falling_node", { collide_with_objects = false, collisionbox = {-0.5, -0.5, -0.5, 0.5, 0.5, 0.5}, }, - node = {}, meta = {}, - set_node = function(self, node, meta) local def = minetest.registered_nodes[node.name] -- Change falling node if definition tells us to @@ -104,7 +88,6 @@ minetest.register_entity(":__builtin:falling_node", { glow = glow, }) end, - get_staticdata = function(self) local meta = self.meta -- Workaround: Save inventory seperately from metadata. @@ -125,10 +108,9 @@ minetest.register_entity(":__builtin:falling_node", { } return minetest.serialize(ds) end, - on_activate = function(self, staticdata) self.object:set_armor_groups({immortal = 1}) - + local ds = minetest.deserialize(staticdata) if ds then self._startpos = ds._startpos @@ -148,7 +130,6 @@ minetest.register_entity(":__builtin:falling_node", { end self._startpos = vector.round(self._startpos) end, - on_step = function(self, dtime) -- Set gravity local acceleration = self.object:get_acceleration() @@ -162,7 +143,7 @@ minetest.register_entity(":__builtin:falling_node", { local np = {x = pos.x, y = pos.y + 0.3, z = pos.z} local n2 = minetest.get_node(np) if n2.name == "mcl_portals:portal_end" then - -- TODO: Teleport falling node. + -- TODO: Teleport falling node. self.object:remove() return end @@ -200,10 +181,9 @@ minetest.register_entity(":__builtin:falling_node", { return end local nd = minetest.registered_nodes[n2.name] - if n2.name == "mcl_portals:portal_end" then - -- TODO: Teleport falling node. - - elseif (nd and nd.buildable_to == true) or minetest.get_item_group(self.node.name, "crush_after_fall") ~= 0 then + --if n2.name == "mcl_portals:portal_end" then + -- TODO: Teleport falling node. + if (nd and nd.buildable_to == true) or minetest.get_item_group(self.node.name, "crush_after_fall") ~= 0 then -- Replace destination node if it's buildable to minetest.remove_node(np) -- Run script hook @@ -270,7 +250,6 @@ minetest.register_entity(":__builtin:falling_node", { self.object:set_pos(npos) end end - deal_falling_damage(self, dtime) end }) diff --git a/mods/ENTITIES/mcl_falling_nodes/locale/mcl_falling_nodes.de.tr b/mods/ENTITIES/mcl_falling_nodes/locale/mcl_falling_nodes.de.tr deleted file mode 100644 index 71dfa4be9..000000000 --- a/mods/ENTITIES/mcl_falling_nodes/locale/mcl_falling_nodes.de.tr +++ /dev/null @@ -1,3 +0,0 @@ -# textdomain: mcl_falling_nodes -@1 was smashed by a falling anvil.=@1 wurde von einem fallenden Amboss zerschmettert. -@1 was smashed by a falling block.=@1 wurde von einem fallenden Block zerschmettert. diff --git a/mods/ENTITIES/mcl_falling_nodes/locale/mcl_falling_nodes.es.tr b/mods/ENTITIES/mcl_falling_nodes/locale/mcl_falling_nodes.es.tr deleted file mode 100644 index 41cbf61b4..000000000 --- a/mods/ENTITIES/mcl_falling_nodes/locale/mcl_falling_nodes.es.tr +++ /dev/null @@ -1,3 +0,0 @@ -# textdomain: mcl_falling_nodes -@1 was smashed by a falling anvil.=@1 fue aplastado por la caída de un yunque. -@1 was smashed by a falling block.=@1 fue aplastado por la caída de un bloque. diff --git a/mods/ENTITIES/mcl_falling_nodes/locale/mcl_falling_nodes.fr.tr b/mods/ENTITIES/mcl_falling_nodes/locale/mcl_falling_nodes.fr.tr deleted file mode 100644 index 781cd7048..000000000 --- a/mods/ENTITIES/mcl_falling_nodes/locale/mcl_falling_nodes.fr.tr +++ /dev/null @@ -1,3 +0,0 @@ -# textdomain: mcl_falling_nodes -@1 was smashed by a falling anvil.=@1 a été écrasé par une enclume qui tombait. -@1 was smashed by a falling block.=@1 a été écrasé par un bloc qui tombait. diff --git a/mods/ENTITIES/mcl_falling_nodes/locale/mcl_falling_nodes.pl.tr b/mods/ENTITIES/mcl_falling_nodes/locale/mcl_falling_nodes.pl.tr new file mode 100644 index 000000000..9be9cf7c6 --- /dev/null +++ b/mods/ENTITIES/mcl_falling_nodes/locale/mcl_falling_nodes.pl.tr @@ -0,0 +1,3 @@ +# textdomain: mcl_falling_nodes +@1 was smashed by a falling anvil.=@1 została zmiażdżona przez spadające kowadło. +@1 was smashed by a falling block.=@1 została zmiażdżona przez spadający blok. diff --git a/mods/ENTITIES/mcl_falling_nodes/locale/mcl_falling_nodes.ru.tr b/mods/ENTITIES/mcl_falling_nodes/locale/mcl_falling_nodes.ru.tr deleted file mode 100644 index 6c8b9375a..000000000 --- a/mods/ENTITIES/mcl_falling_nodes/locale/mcl_falling_nodes.ru.tr +++ /dev/null @@ -1,3 +0,0 @@ -# textdomain: mcl_falling_nodes -@1 was smashed by a falling anvil.=@1 придавило падающей наковальней. -@1 was smashed by a falling block.=@1 раздавило падающим блоком. diff --git a/mods/ENTITIES/mcl_falling_nodes/locale/template.txt b/mods/ENTITIES/mcl_falling_nodes/locale/template.txt deleted file mode 100644 index 4adabaf01..000000000 --- a/mods/ENTITIES/mcl_falling_nodes/locale/template.txt +++ /dev/null @@ -1,3 +0,0 @@ -# textdomain: mcl_falling_nodes -@1 was smashed by a falling anvil.= -@1 was smashed by a falling block.= diff --git a/mods/ENTITIES/mcl_falling_nodes/mod.conf b/mods/ENTITIES/mcl_falling_nodes/mod.conf index 032b75023..068987194 100644 --- a/mods/ENTITIES/mcl_falling_nodes/mod.conf +++ b/mods/ENTITIES/mcl_falling_nodes/mod.conf @@ -1 +1,3 @@ name = mcl_falling_nodes +author = Wuzzy +description = Falling node entities, Minecraft-style diff --git a/mods/ENTITIES/mcl_item_entity/depends.txt b/mods/ENTITIES/mcl_item_entity/depends.txt deleted file mode 100644 index f80274858..000000000 --- a/mods/ENTITIES/mcl_item_entity/depends.txt +++ /dev/null @@ -1,2 +0,0 @@ -flowlib -mcl_enchanting diff --git a/mods/ENTITIES/mcl_item_entity/description.txt b/mods/ENTITIES/mcl_item_entity/description.txt deleted file mode 100644 index dba26fb6c..000000000 --- a/mods/ENTITIES/mcl_item_entity/description.txt +++ /dev/null @@ -1 +0,0 @@ -Dropped items will be attracted to the player like a magnet. diff --git a/mods/ENTITIES/mcl_item_entity/init.lua b/mods/ENTITIES/mcl_item_entity/init.lua index e5863abbc..cfd141f04 100644 --- a/mods/ENTITIES/mcl_item_entity/init.lua +++ b/mods/ENTITIES/mcl_item_entity/init.lua @@ -1,10 +1,36 @@ +--these are lua locals, used for higher performance +local minetest, math, vector, ipairs, pairs = minetest, math, vector, ipairs, pairs + +--this is used for the player pool in the sound buffer +local pool = {} + +local tick = false + +minetest.register_on_joinplayer(function(player) + local name + name = player:get_player_name() + pool[name] = 0 +end) + +minetest.register_on_leaveplayer(function(player) + local name + name = player:get_player_name() + pool[name] = nil +end) + + +local has_awards = minetest.get_modpath("awards") + +local mcl_item_entity = {} + --basic settings local item_drop_settings = {} --settings table +item_drop_settings.dug_buffer = 0.65 -- the warm up period before a dug item can be collected item_drop_settings.age = 1.0 --how old a dropped item (_insta_collect==false) has to be before collecting item_drop_settings.radius_magnet = 2.0 --radius of item magnet. MUST BE LARGER THAN radius_collect! item_drop_settings.xp_radius_magnet = 7.25 --radius of xp magnet. MUST BE LARGER THAN radius_collect! item_drop_settings.radius_collect = 0.2 --radius of collection -item_drop_settings.player_collect_height = 1.0 --added to their pos y value +item_drop_settings.player_collect_height = 0.8 --added to their pos y value item_drop_settings.collection_safety = false --do this to prevent items from flying away on laggy servers item_drop_settings.random_item_velocity = true --this sets random item velocity if velocity is 0 item_drop_settings.drop_single_item = false --if true, the drop control drops 1 item instead of the entire stack, and sneak+drop drops the stack @@ -12,24 +38,41 @@ item_drop_settings.drop_single_item = false --if true, the drop control dro item_drop_settings.magnet_time = 0.75 -- how many seconds an item follows the player before giving up -local get_gravity = function() +local function get_gravity() return tonumber(minetest.settings:get("movement_gravity")) or 9.81 end -local check_pickup_achievements = function(object, player) - local itemname = ItemStack(object:get_luaentity().itemstring):get_name() - if minetest.get_item_group(itemname, "tree") ~= 0 then - awards.unlock(player:get_player_name(), "mcl:mineWood") - elseif itemname == "mcl_mobitems:blaze_rod" then - awards.unlock(player:get_player_name(), "mcl:blazeRod") - elseif itemname == "mcl_mobitems:leather" then - awards.unlock(player:get_player_name(), "mcl:killCow") - elseif itemname == "mcl_core:diamond" then - awards.unlock(player:get_player_name(), "mcl:diamonds") +local registered_pickup_achievement = {} + +--TODO: remove limitation of 1 award per itemname +function mcl_item_entity.register_pickup_achievement(itemname, award) + if not has_awards then + minetest.log("warning", "[mcl_item_entity] Trying to register pickup achievement ["..award.."] for ["..itemname.."] while awards missing") + elseif registered_pickup_achievement[itemname] then + minetest.log("error", "[mcl_item_entity] Trying to register already existing pickup achievement ["..award.."] for ["..itemname.."]") + else + registered_pickup_achievement[itemname] = award end end -local enable_physics = function(object, luaentity, ignore_check) +mcl_item_entity.register_pickup_achievement("tree", "mcl:mineWood") +mcl_item_entity.register_pickup_achievement("mcl_mobitems:blaze_rod", "mcl:blazeRod") +mcl_item_entity.register_pickup_achievement("mcl_mobitems:leather", "mcl:killCow") +mcl_item_entity.register_pickup_achievement("mcl_core:diamond", "mcl:diamonds") + +local function check_pickup_achievements(object, player) + if has_awards then + local itemname = ItemStack(object:get_luaentity().itemstring):get_name() + local playername = player:get_player_name() + for name,award in pairs(registered_pickup_achievement) do + if itemname == name or minetest.get_item_group(itemname, name) ~= 0 then + awards.unlock(playername, award) + end + end + end +end + +local function enable_physics(object, luaentity, ignore_check) if luaentity.physical_state == false or ignore_check == true then luaentity.physical_state = true object:set_properties({ @@ -40,7 +83,7 @@ local enable_physics = function(object, luaentity, ignore_check) end end -local disable_physics = function(object, luaentity, ignore_check, reset_movement) +local function disable_physics(object, luaentity, ignore_check, reset_movement) if luaentity.physical_state == true or ignore_check == true then luaentity.physical_state = false object:set_properties({ @@ -53,103 +96,69 @@ local disable_physics = function(object, luaentity, ignore_check, reset_movement end end + minetest.register_globalstep(function(dtime) - for _,player in ipairs(minetest.get_connected_players()) do + tick = not tick + + for _,player in pairs(minetest.get_connected_players()) do if player:get_hp() > 0 or not minetest.settings:get_bool("enable_damage") then + + local name = player:get_player_name() + local pos = player:get_pos() + + if tick == true and pool[name] > 0 then + minetest.sound_play("item_drop_pickup", { + pos = pos, + gain = 0.7, + max_hear_distance = 16, + pitch = math.random(70,110)/100 + }) + if pool[name] > 6 then + pool[name] = 6 + else + pool[name] = pool[name] - 1 + end + end + + + local inv = player:get_inventory() local checkpos = {x=pos.x,y=pos.y + item_drop_settings.player_collect_height,z=pos.z} --magnet and collection - for _,object in ipairs(minetest.get_objects_inside_radius(checkpos, item_drop_settings.xp_radius_magnet)) do + for _,object in pairs(minetest.get_objects_inside_radius(checkpos, item_drop_settings.xp_radius_magnet)) do if not object:is_player() and vector.distance(checkpos, object:get_pos()) < item_drop_settings.radius_magnet and object:get_luaentity() and object:get_luaentity().name == "__builtin:item" and object:get_luaentity()._magnet_timer and (object:get_luaentity()._insta_collect or (object:get_luaentity().age > item_drop_settings.age)) then - object:get_luaentity()._magnet_timer = object:get_luaentity()._magnet_timer + dtime - local collected = false + if object:get_luaentity()._magnet_timer >= 0 and object:get_luaentity()._magnet_timer < item_drop_settings.magnet_time and inv and inv:room_for_item("main", ItemStack(object:get_luaentity().itemstring)) then -- Collection - if vector.distance(checkpos, object:get_pos()) <= item_drop_settings.radius_collect and not object:get_luaentity()._removed then + if not object:get_luaentity()._removed then -- Ignore if itemstring is not set yet if object:get_luaentity().itemstring ~= "" then inv:add_item("main", ItemStack(object:get_luaentity().itemstring)) - minetest.sound_play("item_drop_pickup", { - pos = pos, - max_hear_distance = 16, - gain = 1.0, - }, true) - check_pickup_achievements(object, player) + check_pickup_achievements(object, player) -- Destroy entity -- This just prevents this section to be run again because object:remove() doesn't remove the item immediately. + object:get_luaentity().target = checkpos object:get_luaentity()._removed = true - object:remove() - collected = true + + object:set_velocity({x=0,y=0,z=0}) + object:set_acceleration({x=0,y=0,z=0}) + + object:move_to(checkpos) + + pool[name] = pool[name] + 1 + + minetest.after(0.25, function() + --safety check + if object and object:get_luaentity() then + object:remove() + end + end) end - - -- Magnet - else - - object:get_luaentity()._magnet_active = true - object:get_luaentity()._collector_timer = 0 - - -- Move object to player - disable_physics(object, object:get_luaentity()) - - local opos = object:get_pos() - local vec = vector.subtract(checkpos, opos) - vec = vector.add(opos, vector.divide(vec, 2)) - object:move_to(vec) - - - --fix eternally falling items - minetest.after(0, function(object) - local lua = object:get_luaentity() - if lua then - object:set_acceleration({x=0, y=0, z=0}) - end - end, object) - - - --this is a safety to prevent items flying away on laggy servers - if item_drop_settings.collection_safety == true then - if object:get_luaentity().init ~= true then - object:get_luaentity().init = true - minetest.after(1, function(args) - local playername = args[1] - local player = minetest.get_player_by_name(playername) - local object = args[2] - local lua = object:get_luaentity() - if player == nil or not player:is_player() or object == nil or lua == nil or lua.itemstring == nil then - return - end - if inv:room_for_item("main", ItemStack(object:get_luaentity().itemstring)) then - inv:add_item("main", ItemStack(object:get_luaentity().itemstring)) - if not object:get_luaentity()._removed then - minetest.sound_play("item_drop_pickup", { - pos = pos, - max_hear_distance = 16, - gain = 1.0, - }, true) - end - check_pickup_achievements(object, player) - object:get_luaentity()._removed = true - object:remove() - else - enable_physics(object, object:get_luaentity()) - end - end, {player:get_player_name(), object}) - end - end - end - end - - if not collected then - if object:get_luaentity()._magnet_timer > 1 then - object:get_luaentity()._magnet_timer = -item_drop_settings.magnet_time - object:get_luaentity()._magnet_active = false - elseif object:get_luaentity()._magnet_timer < 0 then - object:get_luaentity()._magnet_timer = object:get_luaentity()._magnet_timer + dtime end end @@ -165,66 +174,6 @@ minetest.register_globalstep(function(dtime) end end) -local minigroups = { "shearsy", "swordy", "shearsy_wool", "swordy_cobweb" } -local basegroups = { "pickaxey", "axey", "shovely" } -local materials = { "wood", "gold", "stone", "iron", "diamond" } - --- Checks if the given node would drop its useful drop if dug by a tool --- with the given tool capabilities. Returns true if it will yield its useful --- drop, false otherwise. -local check_can_drop = function(node_name, tool_capabilities) - local handy = minetest.get_item_group(node_name, "handy") - local dig_immediate = minetest.get_item_group(node_name, "dig_immediate") - if handy == 1 or dig_immediate == 2 or dig_immediate == 3 then - return true - else - local toolgroupcaps - if tool_capabilities then - toolgroupcaps = tool_capabilities.groupcaps - else - return false - end - - -- Compare node groups with tool capabilities - for m=1, #minigroups do - local minigroup = minigroups[m] - local g = minetest.get_item_group(node_name, minigroup) - if g ~= 0 then - local plus = minigroup .. "_dig" - if toolgroupcaps[plus] then - return true - end - for e=1,5 do - local effplus = plus .. "_efficiency_" .. e - if toolgroupcaps[effplus] then - return true - end - end - end - end - for b=1, #basegroups do - local basegroup = basegroups[b] - local g = minetest.get_item_group(node_name, basegroup) - if g ~= 0 then - for m=g, #materials do - local plus = basegroup .. "_dig_"..materials[m] - if toolgroupcaps[plus] then - return true - end - for e=1,5 do - local effplus = plus .. "_efficiency_" .. e - if toolgroupcaps[effplus] then - return true - end - end - end - end - end - - return false - end -end - -- Stupid workaround to get drops from a drop table: -- Create a temporary table in minetest.registered_nodes that contains the proper drops, -- because unfortunately minetest.get_node_drops needs the drop table to be inside a registered node definition @@ -269,29 +218,33 @@ local function get_fortune_drops(fortune_drops, fortune_level) return drop or {} end +local doTileDrops = minetest.settings:get_bool("mcl_doTileDrops", true) + function minetest.handle_node_drops(pos, drops, digger) -- NOTE: This function override allows digger to be nil. -- This means there is no digger. This is a special case which allows this function to be called -- by hand. Creative Mode is intentionally ignored in this case. - local doTileDrops = minetest.settings:get_bool("mcl_doTileDrops", true) if (digger and digger:is_player() and minetest.is_creative_enabled(digger:get_player_name())) or doTileDrops == false then return end -- Check if node will yield its useful drop by the digger's tool local dug_node = minetest.get_node(pos) - local toolcaps + local tooldef local tool - if digger ~= nil then + if digger then tool = digger:get_wielded_item() - toolcaps = tool:get_tool_capabilities() + tooldef = minetest.registered_tools[tool:get_name()] - if not check_can_drop(dug_node.name, toolcaps) then + if not mcl_autogroup.can_harvest(dug_node.name, tool:get_name()) then return end end + local diggroups = tooldef and tooldef._mcl_diggroups + local shearsy_level = diggroups and diggroups.shearsy and diggroups.shearsy.level + --[[ Special node drops when dug by shears by reading _mcl_shears_drop or with a silk touch tool reading _mcl_silk_touch_drop from the node definition. Definition of _mcl_shears_drop / _mcl_silk_touch_drop: @@ -303,7 +256,7 @@ function minetest.handle_node_drops(pos, drops, digger) local silk_touch_drop = false local nodedef = minetest.registered_nodes[dug_node.name] - if toolcaps ~= nil and toolcaps.groupcaps and toolcaps.groupcaps.shearsy_dig and nodedef._mcl_shears_drop then + if shearsy_level and shearsy_level > 0 and nodedef._mcl_shears_drop then if nodedef._mcl_shears_drop == true then drops = { dug_node.name } else @@ -361,7 +314,7 @@ function minetest.handle_node_drops(pos, drops, digger) end -- Spawn item and apply random speed local obj = minetest.add_item(dpos, drop_item) - if obj ~= nil then + if obj then local x = math.random(1, 5) if math.random(1,2) == 1 then x = -x @@ -371,6 +324,10 @@ function minetest.handle_node_drops(pos, drops, digger) z = -z end obj:set_velocity({x=1/x, y=obj:get_velocity().y, z=1/z}) + + obj:get_luaentity().age = item_drop_settings.dug_buffer + + obj:get_luaentity()._insta_collect = false end end end @@ -406,6 +363,17 @@ if not time_to_live then time_to_live = 300 end +local function cxcz(o, cw, one, zero) + if cw < 0 then + table.insert(o, { [one]=1, y=0, [zero]=0 }) + table.insert(o, { [one]=-1, y=0, [zero]=0 }) + else + table.insert(o, { [one]=-1, y=0, [zero]=0 }) + table.insert(o, { [one]=1, y=0, [zero]=0 }) + end + return o +end + minetest.register_entity(":__builtin:item", { initial_properties = { hp_max = 1, @@ -426,7 +394,7 @@ minetest.register_entity(":__builtin:item", { -- The itemstring MUST be set immediately to a non-empty string after creating the entity. -- The hand is NOT permitted as dropped item. ;-) -- Item entities will be deleted if they still have an empty itemstring on their first on_step tick. - itemstring = '', + itemstring = "", -- If true, item will fall physical_state = true, @@ -437,6 +405,9 @@ minetest.register_entity(":__builtin:item", { -- Number of seconds this item entity has existed so far age = 0, + -- How old it has become in the collection animation + collection_age = 0, + set_item = function(self, itemstring) self.itemstring = itemstring if self.itemstring == "" then @@ -444,6 +415,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 @@ -456,13 +435,9 @@ minetest.register_entity(":__builtin:item", { if itemtable then itemname = stack:to_table().name end - local item_texture = nil - local item_type = "" local glow local def = minetest.registered_items[itemname] if def then - item_texture = def.inventory_image - item_type = def.type description = def.description glow = def.light_source end @@ -505,7 +480,7 @@ minetest.register_entity(":__builtin:item", { end, get_staticdata = function(self) - return minetest.serialize({ + local data = minetest.serialize({ itemstring = self.itemstring, always_collect = self.always_collect, age = self.age, @@ -513,6 +488,39 @@ minetest.register_entity(":__builtin:item", { _flowing = self._flowing, _removed = self._removed, }) + -- sfan5 guessed that the biggest serializable item + -- entity would have a size of 65530 bytes. This has + -- been experimentally verified to be still too large. + -- + -- anon5 has calculated that the biggest serializable + -- item entity has a size of exactly 65487 bytes: + -- + -- 1. serializeString16 can handle max. 65535 bytes. + -- 2. The following engine metadata is always saved: + -- • 1 byte (version) + -- • 2 byte (length prefix) + -- • 14 byte “__builtin:item” + -- • 4 byte (length prefix) + -- • 2 byte (health) + -- • 3 × 4 byte = 12 byte (position) + -- • 4 byte (yaw) + -- • 1 byte (version 2) + -- • 2 × 4 byte = 8 byte (pitch and roll) + -- 3. This leaves 65487 bytes for the serialization. + if #data > 65487 then -- would crash the engine + local stack = ItemStack(self.itemstring) + stack:get_meta():from_table(nil) + self.itemstring = stack:to_string() + minetest.log( + "warning", + "Overlong item entity metadata removed: “" .. + self.itemstring .. + "” had serialized length of " .. + #data + ) + return self:get_staticdata() + end + return data end, on_activate = function(self, staticdata, dtime_s) @@ -600,12 +608,17 @@ minetest.register_entity(":__builtin:item", { return true end, - on_step = function(self, dtime) + on_step = function(self, dtime, moveresult) if self._removed then + self.object:set_properties({ + physical = false + }) + self.object:set_velocity({x=0,y=0,z=0}) + self.object:set_acceleration({x=0,y=0,z=0}) return end self.age = self.age + dtime - if self._collector_timer ~= nil then + if self._collector_timer then self._collector_timer = self._collector_timer + dtime end if time_to_live > 0 and self.age > time_to_live then @@ -626,6 +639,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 @@ -656,6 +675,18 @@ minetest.register_entity(":__builtin:item", { end end + -- Destroy item when it collides with a cactus + if moveresult and moveresult.collides then + for _, collision in pairs(moveresult.collisions) do + local pos = collision.node_pos + if collision.type == "node" and minetest.get_node(pos).name == "mcl_core:cactus" then + self._removed = true + self.object:remove() + return + end + end + end + -- Push item out when stuck inside solid opaque node if def and def.walkable and def.groups and def.groups.opaque == 1 then local shootdir @@ -667,16 +698,6 @@ minetest.register_entity(":__builtin:item", { -- 1st: closest -- 2nd: other direction -- 3rd and 4th: other axis - local cxcz = function(o, cw, one, zero) - if cw < 0 then - table.insert(o, { [one]=1, y=0, [zero]=0 }) - table.insert(o, { [one]=-1, y=0, [zero]=0 }) - else - table.insert(o, { [one]=-1, y=0, [zero]=0 }) - table.insert(o, { [one]=1, y=0, [zero]=0 }) - end - return o - end if math.abs(cx) < math.abs(cz) then order = cxcz(order, cx, "x", "z") order = cxcz(order, cz, "z", "x") @@ -785,7 +806,7 @@ minetest.register_entity(":__builtin:item", { if self.physical_state then local own_stack = ItemStack(self.object:get_luaentity().itemstring) -- Merge with close entities of the same item - for _, object in ipairs(minetest.get_objects_inside_radius(p, 0.8)) do + for _, object in pairs(minetest.get_objects_inside_radius(p, 0.8)) do local obj = object:get_luaentity() if obj and obj.name == "__builtin:item" and obj.physical_state == false then diff --git a/mods/ENTITIES/mcl_item_entity/mod.conf b/mods/ENTITIES/mcl_item_entity/mod.conf index 9f35f5ed9..acd9f00f3 100644 --- a/mods/ENTITIES/mcl_item_entity/mod.conf +++ b/mods/ENTITIES/mcl_item_entity/mod.conf @@ -1 +1,4 @@ name = mcl_item_entity +author = PilzAdam +description = Dropped items will be attracted to the player like a magnet. +depends = flowlib, mcl_enchanting diff --git a/mods/ENTITIES/mcl_item_entity/sounds/Attributes.txt b/mods/ENTITIES/mcl_item_entity/sounds/Attributes.txt new file mode 100644 index 000000000..781759352 --- /dev/null +++ b/mods/ENTITIES/mcl_item_entity/sounds/Attributes.txt @@ -0,0 +1 @@ + Item_Drop_Pickup - https://freesound.org/people/benniknop/sounds/317848/ (License: CC0) diff --git a/mods/ENTITIES/mcl_item_entity/sounds/item_drop_pickup.1.ogg b/mods/ENTITIES/mcl_item_entity/sounds/item_drop_pickup.1.ogg deleted file mode 100644 index 8010ff0a296be3df24018ee787d7663e31762245..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5965 zcmahtc|6ox`)90UsU|y(q6{;Zt`RXMG4?^sFt%y3B_!Q4rl_kdLsH~UgF>QA$Wl|5 zRJ7QakYyxEr7Uffdr>OCGt<4j@B7#9e4aVq=lg8uoaa2xInQ@oLqgnv2>7S1yF_LR z&@<8=b%?cyL%&A`hA{*LgiX2N0YID?LioIea206&Y649G$MK8${*~s-|JC9}f11&U zT<@?0p&MNzLp1h<1$qjNYdC5c8RAV0@rEWE*jKr%Uw{*sMu`8^T~D<3L;yEn#g@%pq&7cB-!U?Nr1y-sRQj>+* z=FLvj*#@x`0;GirXei>poh>00a;=c+tZ_p#*~B+yi)fZD!5al>QyQ#Q#9KLuLsi+O6`U;XafLcNmgh*h;IKA z-OfYHAXoT^LuUXalygWea!7yez}E6%V}vkq@~VF44Ivl_)g1tEBg@(zRFD+v?FIl@ zV3x}DPUVKCPNt+IS;^%hAPxXAIE=BiySY8brpJRiR1-1sUqH(WRu!s4AENrg_LNGb z7>cS&2=@U_BW`u7VN=|{PL5L{t-K^vK^V&$FYsBJL*fzC^Bk&U*tw~7gvmTccl$&h zz8hkf@_b}-pxk6$Q-P24PfUjw)0?9!pdIX<_Rm}00x|81n2emXYKVzfgr(;=@gU|< z7emQ)63`d|Q^M|T^E5h7UhrB{Uze5J+YB++mg(nts9z#NIiZu`dM#1OX#vl0$iB%? z4ZGEWYDUvm3sZ(tYKeKow~wbni#S`5n9PF|lFm1_0O3=*O$o{{x@UJ*zQfIS2;*Mkf94 zwp3>DP!`jtHkS4ziM|j!3Sp5M;GGrh^FQ!&=`g`HV6gvO2(Cqi(M6cj;-LOrCfrbP zK*3%ZZ;m&#ocgpL_369L8N14FBP-bU8&e-E(#fU~o=l$L#@ zmOVwwmI4u>cjIIQ-bFX!wQM8xJNt}(uJN(_Ht0~VsGo<%KN|pmZ2NVE&c|pMIm{r% zfa-2ANU^5vs!O#xEMA1+eHX&~kg%3K{ zO2J#pwq#kcIO5Q0Vt@?u3g3orLPvHxzSXkrCg`ejTL|{0mj}os-WA`iByNpI_;?_K%=a2fQV`Y5?jvoJ23TwD~W?(()&MXGz23$;49$2elxgF3229jpna z&BuCWF-JGK3=3W%mkD3#H4&rPzf4hwJg6g^A=iW)MJH2(eW2w-be|!r7e5wS9&~pZ zR-{t1sKbN7)GVf76m`^-K0HMA;m3~fll=Ix4@<7z-rrGKS$3m*>Bh#T+aKO>9Q&OG z6B@K3Q(e5OBixx0G=zGDkUdKd7d>-_P`E!+!H?5kVssH?D1vwQsntPaoNQyTRogb98Er z^-I%ao{OM+9~+fmv>gZC!Kx4f?TNq9uv-#Lul(rRCK z=Q_cx>co8*AL|o);mVucNT(~ReQBo&C;k~cwHlfV=gmU~H04AxsZj|}H<{1zErX2k zy}XGW#teSqiF>$7tx7l?!xx&G;0M7vNpvMV9<({}Fz-bKc`v3(!b=odrQj!vjFI?> zJWeWpQlp51pFp!HMw1#GHbsC@q`5_GN_ZiMLfKmZ^Ik-d_iKzXN|G>bF(5-4_#Z%b zel{l?Q-=@fx6j!;Hins{E~LQhi|G7GVKPUBGE^p=zFhn)6rcIneh(p~ zCdtp3>IErT!DHTZflLjPrs6p$phVD2lW9ZD(S@V{!j{_o?{3d5J^Zw_6@XbWNl+lN z#?#&mrzWE>oE0qG;NDs}XeOfIRmw$CNbqb_IRMKN!$MgFwHtCE1;#4!Pk2S9aRm3I z0ONAxe${6GsnY%j69;xaXIXNLLZ$^e-AtP}vH(ILt4M%R-T`0y*eg z6cKj+c==x%`xlKu`IiQ_>K{1{#SxaEXfqh9DpoqGRHcB+Qp#)Ngz;+$fI^d}`^gJd zUHFhvO(edglt{uQpQ z>+U7M0$@j+ce+P62CH|>|7 zhyQ@Ci1I4?^zFEp_+OOsuN7lKh9t<5!!~#n??}5TvhMja`b5eh#O%jAh9a_qgs`{k zEaTPyH=XOP`M&9R?LA(WiTH2*vb!bYY6`9#f+8_>AGZTp2>_-zaiXC1Lq)T6lIrDC zr$Z8EVw5xLPEL(lh*75Z2^%_!yfE!j|h!yI=9KUdS}&CS4qO{zl=kRZq_o|S1%VWc^*A^_hfnJRH8&TH|Xy`GUix58b(YuD@cXhY#ZQ_923c#+L|sQDx89-Y;3Ncof}VKEEc3 z6BlWgQu9}2+5z)>D~KNJTW^A6Ph;D7xAu3G`i1r2s#l;aDgh|UopS`|^Wz&uLc~NZ z0N8wTp3xMdwR!6wb!I##oICB*!pH500tt88Te;}61j@EITTHC2@Q))E7&24Tl!u3m^%TdEP_f_%GbFRyT4TivdQy%Ly!Eu`^`aL&uDRZ9LsCR zi0pwH(oOs3!{XI-|!B2Ijl+7EWnsPw|Fv1~&l@x|Ud<%kRwE$=Ra2g=(A zcCT$?&wc11N^)z7?XOKmRh}&Ej2Ut+K96uEzWwmr{Z5ZF0OATDKc@a<>3&uKqxbu7C0_|?K-;mN?>k;#Qya~DEemG&X{DxH^2}U5 zfxT!#r+(ux=>oQD%gn`hf1kgV@U4CK++FDvV@i)i67qK4wOKgzd6D$y$c(d$|M1d< zcV%Ihhn>N$u-H?(cJ}3euj$Sn*sZYa<*MO@W@vSiFM^D15$mIgSm1rL@M+HCwpmcV&u2_F$lFR;n`CyUOB#<(%Or(})%RCtj8?KR46E zZ7=L;Y}^sL(_(1WD8BSY5@Cfz+yiTOWqOI>iJ(4o*5UY4#7Jf19Y*5A(`1FZCkg!0GKCDY$KRW8QmikssH`5CMvy1W~fuSYl zGNb~rZU^up?NHu#Zjvurwo2pj3)#LD_7}PQRnhWK4?j})QIe68%kL?fX;`|#n7)X0 zmWM4Zp)}9}~;4<4^-+S@MPG?;m`D4Bp9NOzvBzHe5?fq-Md#72m4ONSh zT$P^mR%?5C@}5u2oTxn#3afMq?>@>^UXwNa;IH=Cm-@eLU$@?eHe09g@#xq-Ltp+j zHP<7{hYSuP@}py$xqgnd@3M)hdU_ykxb07=j8PSNDWteWlnBtbzkQC8Z>*86))hK_ zSK+OH7-O4h`=yQ8`uiR?RBN*y%xt|kx$pZi(<~=GwS!=HoZo2Duzii*GFfKeBQavk z&-BNj`NIvX^y3Gb;k*O!gaa=X=qc`n6gr4Mh!W zX^YZG>mI!wsvaZ5hNrh*H%aO4cQJKD{Lns<#HZ91gNAe8ot^3<=gMoTt1qi~f;ihV z&T;Qsp46;ReGu1;0Eh6Mi+e7muP(V#>Q=h1Y2BbYFT}x9R(e&FQE;l&i07WHcwT64 z`LR8IVMakgf4X~3zSFxrdStl&d8q}v_`{TWPnB~1#}7vKU)e`mGC6I}yD?P;9!C#v z{H;{=RQ%TO{G)whft9OPrrCIW4lwSUBAm05lT-iNwka2 z+t;V{$4tMBQP(Q{6P{c9#`wS}_`Qmh95#OIbt4{XusY566Y3#*QMC2zo0CHwN~f-^ z8o8Bq&*yniv~l$8N|kv7^9K{|&$cORm~@=hm@$z&b*QU}kw|{0z1<|BD;B6|Xz!`RuQj-=87u{OI!U>pyv(wLhr0xWT_C);b?ds*k-`ZyM0I#!=V^ziqOo3unp#dNOOA{VosYHWdn_fzBW@=r4QShyFFtv7#BP;S7C*B+`Un((O1_W({}6Dy-GAFxyyOGcPmGQw4@yp{PnZZx^?UR zD6iaK)j_=PmNrB)zWxW&!G9vG6E`|3Of+J{RY|hRcqv`Kz%t*_^=6)K$WoICDX02vR0VshKlK zk`$N>)?Ru_4%;34Ng8XjGe%Cw#-me(l%`mii%s-^U+qaFKx~Bs%sFvN5=KywqGIft z9;<2$utXG~1+r-{?7y8EDgbaXg7TCpEq&qG_xfvc6f=}74A5p3C_At?DKUR(wGG5>$0laQTIsFHQ2a6HB!AAKjIm6M<;S#1 zQOq%51^lQQaY`qqScam865K;kK>A8RX%Li~4^PU63&CV6grGJEf}tJ6U!IX`zbV(w zl-n-&n;Rc+1|$gNERzZ?Q~$C|S9VKR;lT8@2O6Cf9MIvYTSAb%gRt2daRH8=F9ZqZ z>L)Q=lNbR>Gl{8!l=xC^C>nxz!8Aw{M1!v#P<80&e}MDfuOs2Mt`yM3Cj z-3_pOx|?tokei`5=eh~~#8jE*d$QEnv@_iwPSAI@0&HK|`LwL-RRH5F3rx+jW&+Hz z_B=k@noT3IO>w%9Eg$6QV(ejYLoF@4rv+ektslneuwNn^IgXRTe$lY_>t1gWf_*aq z3g$b#WpqAZR%f-g$;8sJAA4s53aJKyDw${SIMtsH=Z4UNigDt2%YQrXM8$Zi@D9ZN z+!&l%NpXIPPN&9`E>36gsq~46p|Ex{%tXDc8SfaXH|QEXkDAGft#oz|E~~=h5DY3_ zh~qy6;Cn2;v~QXN+p>2e;yyiGNUiv%I~CYR13`96a=km{{{vs-Uhh!3b z{6<%!CjJYE0-P<1LXbiFUPQVQB7I6fRoMz1(542V`Pmtn^d~%ZNCdtOhP1Q%Kyg02eVg%EL6?{36Q8omQHE$5wtx=;7% zM#1k=J5Z{3Gei*#FhtDIsohr7^o%|$IEarXF7U&`k-laSOck08le5i0+KQ{#ikaDo z6NkjiSeeLINIeH9f~~kM%ZcD7X-lA~*y`HaiW3~g%m@+$N1836%I`HYbi|1;CP`pb z`+2NHxzNaCy0#fk1kXRi$cI%fZ!jKbT^dR8sIYba02!3wB@>!zW5W!_I3Rq@2 z+KxyN2sFY7%a1@Kdqxn(oQWet1h>Jc(ZM*+!KfF-59&^Jl$SrOC|$46T(A2)N44s= zVK0bf>Oin{sS0%@hkA&a4M`AKG&4ssuoC4-_8S>8?IoKLGX2<7X8I8${al^`l~BUj zsEG(7@fMlrdeUPxuAfXMX8KLI__?k65nm3HCsu9xt8Ir^I*NnmG3;^Hd6Ypcf*FT* z4=H11xhLyU`rP4+DtlaV2}8ysSkF8K(?-uoN2xNX97Y#P?QSf%LcvAnu7PNAMX9R9 zrs4z?8RIxa+o;p$<7s+J<9vL{#NOwOpnmfHhzZzV zDCz@OX_fRTFRPL2{KEbLjl>goF|gt0w^@U30ERprkd;_<;-GJLOl+}dkm4sR^z--22W4T)h(>Q_+t1Hf);rN zpj>WQXA6CV%ytdVszBie&K6^-7z+bWDFcSbfxA&E43s5WdBWl{6{1igh*iOx;EB9W zWxtbbj6oIsRh#{%O8Xy-4_dR+ht`e^=OUQ;=sZPru4rJiNs4hhT-ab6LN5iypGTzv zPkE(i3o;4^+^sW7Fq~CM)v$LdJ=PwND{GPQ0Wme`UdkNIG6Zoe8C;4Qmcs?^Z*?Vg zH>{@NgS7|UNed0P2E9x5X5PlaUQ~+vl-I6IUR*#_y9d8AUQ?jhGgm46p|w}RUs1(-KDU^>V{ux%hM2Oej* z3Z6p~!3wJQ{!3#}Q+~>AV^Guokpp#v&P*=Q1vEU4qbtb9KK!B~*p)4Zi%|K6F(@z` zoGk}@3&Vo$A20t)OaDc~+Bqb?w=e0Onw}6Ko#tR7o7igjFwRj+5 z5!hh?j4C>;5>&TX-*`);25*8uCbUyq0#e=w|BD+P*JAdjg)c&SGDdUW0EUIdz?%Pr zge;q$Z#!i4C0_OIB=6mPya4B;1f2d32zto}+u18;9^cAuk?>N$5>&&WwLwh+P?I9J zsVOqyW*+l-@4GKtqM%6mr}6Ugaxf5w5HBz1%Z7IZ?3LZvUp8#|viWb};!5fV)YU7P zMaA{iC54q0WsNOWhf>;#j$&R>mIvk0B2b$Dn^0A$ts@z>q9biP*NuNLb&~l~(A7LX zn1RbB5wiv%&?|SkOIvUi`>tn}ZGU^8Mbe;ETdY+n^U8dDawed@=yV zKF{Ow_(v1JuWk55511$1uxdLtBm3pfXv5RCzelRitW%^TeCqP4Z~l77ixM=3qHiv| zeR&hpc(3xcNttHq*UI7?L${$F4;Qu;A`U{xP`KDvm%5;pBfrU90J&1T893&f08jnv zG*5E<+(<$3w0r;ZNtO}QOsH<8%)3HlzJH}agWxFYAJ z?j=-}r80_9e_UDg!fjP!71!1ALROB?_Vtt)^fuYgyJ?7~CpLZ-8m}FDKM#GIM>~a8 zazi0uNNIFw!*H(8HY!>GI^q6@yWvpp^HKeW{@riYO}qDWlUmiSwI`>HV`9A?81Aty z@_h8Qaw+Crlqc4z>ge$ci|M)9osoMCx8~-ieU~eWtoC&ZD?Mm9r@IN?B|HBuZ}+Zo zKHkZfdyg$Y84~{J_4tM;{#g%rtgehtWklYq@#gyb3xAqsX~5_+mu=yWQ$Bugl#Kbl zg!rDlpm}9Tz+2G(YW&c^j5;=%vuPhK0Y#H5ogrpkkFJBaR;~-AU^URak$tsX$no&2 zSs^#s9eQU@CXbUZ1wYxrb8qaW9Ek5*;ZyGr6|(Y?%$f4pN4)5B=1P%S zb@z-HQyThfkk+2%-dDKPHe08I_Tx6(zSq17GAw2CMc5uL?~^i}!=mu33Us&6H|y_i{rLM%ef7x~oBe8Uvv~$oou)=2=N3$> zH+m@2F7m^1mUY8VaBF{lf^{nHlaSxvuDdU!``XR;*}A?$f}|UEIeoH1iD@&4%Qbx7 z+KUT}urug-G=IQ5H2>R3vSgxi$nn>2J7SUdwqFsdRZ(hcp{;0*QBgw9qV<)@6AlY^ z8kvjC#liZ!%2!yLMb=r7vl|YW=Slt-6R0^is60hN6yA;_ws#@mjz`dX_{Ru3T?MG3sq_MDd%nmY=fcy z_5qO+bqz%5-k^N1OX}QotVPpUr)=PO`}U|DHS-_OEiaKebkx1Mazx(FW$P?+Lz}7% zg)DC6`IS8&e$laXLyUosZwUM4gz9*i75b@4{S_a?go4f{O{vyWm8XR18x z6h=cE>P?NZFO{9lRIl5?I8&hWFrgu<+z2k4pwPnM>yd!ATt_+8^Ud}If6Y#%C#ytLx$6SZ1!{7&=YkO<-M z*_u_O`zD?eT9wZB#}AN7;f}ngTqC=k$GzI=6L@Sr=%bbd@w zwz5~6OK}(SURZ(pQ>pYuba2x??wp}|YCAU+xy}XF7>#o0#;0SgxK+Zqpzl(~bMjU4 z%9U}K#x#PWaC3fkLx&>dEN`EzxYYh*-*|b3_%+p~WcuneiMi>%i2nMuz@oVE8@uvV zU;XXa7V%v-Cu(VYOU$!jiDZ8MSltt6(|fj?t3#f#?~eE@G5IqSZW@b~%&nci!Z@v# zlX&c@nZVV@ne(s;$(w&0j3G*@X*xTvR9$gAaLIXZMe6G*{_9BwzipL8<&n5Hhw7gm z4-vEz*wZ8g<#zA<`WA{)@$=m#tj`TipUyI#eyo|hA@&N9Xu8$9&uehtRM4o+VZT0v zXh!}UB#NjJ$DcMd9NK=-%R=U}=>kltT1=G7llbaGvEF4$Ow^w9PTvdgHV2Qpud^;V zo&Q#TL2O6ckJ{N~yC=q~tk2d3e7ikm8t-GDZG}Ex6*zDr;?tgee}BzysoLsrSS;K3 z!frIiav*1SzEWn=O6ld~8i}K7(D<$TRAbq`h(#O~+H^_ZXR?Qk4dzFu*teQmGV z`W`zUXdj$mZ>{!fLUiu~OBMSkyDzW~Bo4mW%Cf)l?di3^AUAIw>5T;`f85yu392e- ztLARkW!IOK$#fn2g-Q>4wp{>$)z^^|AgkD5=zWzuZ}IS!%YLm9fBwu`-O&^82O}on zSLyW=et)zU?+8D0dEkQK>!iaDVXW!#AoDNB%F8l33Wqh7_4hbIyVou)G}JU3OQZ=p zL($!4Gu%nuDS3I|F4KfgXpAba92(4zo0YwAb?KAaMnJGFA#3eH=rVEX$A~}r-WS`3 z#bWn{%mwcXzv1o6tY_pSAD;yFF#SmMwOW&ec9r_C5x ztngfW6ehSk7;iF}*mE`V_C=mvJ+X~9*QUoroeoIE-Z|^{ZRk=YEp*NT_08yJ=Qa9` zdz06%h-M{jU*5!~3P==an$uQKx41qNgL3X0RXaA!ddUhk-M^z}K3cY#*zHxxxcbSM z*kPH=`+arCha$6q4CNhL^VchGe|w1(|Nh7n_bfW<^yKK%E(aa!OCKvPItHt{xV1je zeq^)UkN3$IcpirzgzA#Viy!}Pg~5*<$dqiP9iuVo2b#1>MPp7&wQ6NwXWsUjfhuGR;M?S=O|law z-bOCkIyN33Q`0;7k$z$ix2oaM4{zzUlglQ~>#0kN*obhodhX54A2Yir z6ry=7Q#jQtgs!Kp#Dza^JQm0keJuHP#p}+vwfB*V$2+6mxf@Vi#G>yBY=m?FA5?>$ A6aWAK diff --git a/mods/ENTITIES/mcl_item_entity/sounds/item_drop_pickup.3.ogg b/mods/ENTITIES/mcl_item_entity/sounds/item_drop_pickup.3.ogg deleted file mode 100644 index f234a482cff9830ff772e316207957d26d666b04..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5690 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 z 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�f5#;*eaK)&O;QfH5bvjVb@WI!Ps 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 UjuChK@}jF_ji#EJ<#7Q14-TB@yZ`_I diff --git a/mods/ENTITIES/mcl_item_entity/sounds/item_drop_pickup.ogg b/mods/ENTITIES/mcl_item_entity/sounds/item_drop_pickup.ogg new file mode 100644 index 0000000000000000000000000000000000000000..e7f5df09490b6e5ba110d540d4d064fa8c681bb1 GIT binary patch literal 4834 zcmcIndt6gT_P;2PKq*EHF=%vyf^v~4;bDzR3qiyLB5>h?Kq;CKE^_I$5&c!nKZ) z9^m>^QMi8P(~~FiRz7pQ(8BnHdZCRKKz*-olwy}5y z4ikR>E-Ow3q9)CvKxx2C$nPM5d5+LY$9cTtiKBT#<6NJoni!)ETl^x!N(WOIsTA-e7Y#}^fV|I za|y+~U;$ikf?2jXp)&r6Htv)*siDfbp~})Q1Tq3cuu>8)EBlYSIYP?&-_XHaKI=>03=JhtJ-^`&iNd zik&?GigPuC$M}`>b%{!iK5~gtg0NuaWJZCYQeyMHO>GTHl3AR52QCL$@#nz(V&6P- zUhAJ~^J{XjwF9WFuGA1WPc#$_PfdzABlF5N=Els<{422j$Q%eHjmVIb z5{{TwD^Fj~FrN(YROaj?)E*?)AGG(cvS+tBH@ccDy+F#YA^{h1HVs7Tk>s;ya*7)u|zE33<=T%59T9x zXphMVi(W1dX`Jk#<1Dlz6zw6hQLO`e7TbR`6rJUZ+Mw-HHmcz@ zyYsq3(dgM|hnCkv{5BlG#*N)gL_75C4vnBwDvZ`9MHjm_x?`f)1hgXs?O6^6djzMT z!6+{x6paYub?eb^z0jY4c80LKZBSH;c8?{YQbAt|8Wqlqm>m{D{1)uyeR|=ElPc}D z%avzNRXv}m+BWyfi-~oz%`%yzO0_6km7r239Z@CrNWtexRn_yuswH6Duxd%qHNah> zQaR_SoElWl6PKN?TwbbDZ97%v{Jw0-@U<5c;vT)AKQuZzoYy^$M!XgFj2HFm1)F{i zXxFmCI|LyDVXt2B=x|cZinVBm5S3(E#1NxczAig zUfA?7u7AKH~E zTFC>LPMZ#SrJ3_e44{xhPG|}<4qPjiqk|I9O0ePLU2E-Q zo0#Sf7YMBQiu8QMQK<=HC01zWge1^X@rZ@;0+AI@)exc*sJa6fh7s36g$RkXP%5MV zrTl!v%ub0QIZB1zNvDWy34ThJgd$lLihGej6oQByl*FjSb6R5JrGu4~`mf5_byWUI(rJluvH#ae#QWW>R{VEjJQA}71R^_1VV!%{wR{|TX zj}?!JVmfH`k!q@T&MF+7fkb|yydaG{Mbi)yf${=OIVmc~aNuEAD?G1S_hIgQo3{%v^}7g&xdFY012G37~A-IQ`zM~qTab&(+~ znqgHnk%=#=HTRPfsCpt7=!oR1uh!1l>kRH>hC~y&2F2B}Ac_T)Mp*+7Dco`NL9)`= zZcu(Alx|uok~$4iLqtoD3*nfSz+&BauXkHADysdH^nX8`H~fKZG(ePa8wW z!6z5bv1Fu+5wUliC6Z0Y9Yn++#7H)6ND-SyUu>ro(}zkV1O|w>lz~$!B$425YGMU$ zk;~&)&Q@SS+1P?07gJg$$)|+|gYCzAkwan23Nu(Bab+oQTXWY|+z#W2OZXB7%T{U4 zji;Rm?9?6v zjW^B?V^Bmbbg&!Y8BgSVD{y|LG||oMMEI3M@^o+q1UF5a72r(oa;&1?To+Vox5OxI zHGnutDNhe#ogi@WEM^5z2TTg3o0S3=ox&I_wE$yiNUH$jUZhwl!4AaEAeKK>w}B5r zN#Zxsl>mMoLtjGB%l*@#u6?-+j?5Ap+e{gO2hP)xd@N|XVs4Wi0GXI(Faj){1^U3! z4b2dF(y%-lW)r;@Ylh@ptl>8SFJPbG^7J1@>;QW=?#T+nfX}QrYH)o>RC^=`B~DTm z*eBMA7yF?T^~zna;-ifHQ+2@us`pLnY}}j9U^ub}1L(=af+- z)(jYc$a}E^$a-+)x$6zXMFj|}LVzF%RHZ&LM_pKe_`?`APZWwIs5M=jVTwY60INt` zM+aa~4(47M29%hl-vIU+3bGW%C(2mbmKwkD;D{isc zBKqTY81Rq}@L^|w)f0dtxCV<22B8H?66Sphz!nxNfHy$ZVSNS)cXX-`SNcaEfZyae zFl1_+ov7uHKI@f}b1_jZS8+;WWB(ZfpC)dTTikH`cmogf|i4^POz|vKQ=>x!u7pz4pB7 zc+^#KsQu0Mr9FPlef$xh_=fmbyLt!TEo+v#EaR2y{mw-3!bHD^K%-UVM#$UOC%(9D zyHWY$cf-3K7Z{C>7v8A9QO$mN@{2RhNxv8ML^`J4dw;%daPQONyEogOc_SCE{kn&D z^l8~Ag!s8SGm~$s4$0P8#Z1KHZ|j|&VzT+4QokNDr;q5qaRqLUW9Hw2M^sz)o|?Dv zYVwa4k2P%5u8CVFX^ZjVMnAW^aw1_Z6$Plb(Zzp!!C&~z%HN8lz1=wroahrSpUs|r^B@#({QJh5uwxU2d+hdF zT_^pHdiY$r={B3{|XIo=_7GB)rE_@Mz*#GQFUJ|{B`f7CI*MDH4OaXI~u zC7Ll^rD{wu>Ko1tgYY|(g04@vT)j5h)e6^s2z)UwJ!3a7bo=;w>*2~P%{eW-``$CC zmFUCIyVTCNii#g-eZy`N15$y~(d;abvj<=xfvf^{w)d5GU*Vduh@K>)R4qcm_ zzUUWDqQ_6fqqpq+ire1R76qOs=1$CQ70nfx?b~e{y+4+t$vg;-f*n3H5Ex$$I&y4m;yOC&C z{$Zc&_1#a!&zCK4=^gUkt`4Wzw1QLc%2z64ZOp3c&$^1gmi@fH@t7@-&@!5j?iCvi(B{g=QR&K>oq$I$~P#+BQDnkjBo59Ml`eC zcIUd`erUa;xO#dtS9WH7rC-hvvAOrz)u^kxT5G94`7~689UEW*89%^p_MUxD%<+6S so*yuldZXt{msPocZ$H`R)AlC+!fJc!49>s{Z%^>g%=y9cm#{$SUyAtlEC2ui literal 0 HcmV?d00001 diff --git a/mods/ENTITIES/mcl_minecarts/depends.txt b/mods/ENTITIES/mcl_minecarts/depends.txt deleted file mode 100644 index cdf7feb54..000000000 --- a/mods/ENTITIES/mcl_minecarts/depends.txt +++ /dev/null @@ -1,12 +0,0 @@ -mcl_explosions -mcl_core -mcl_sounds -mcl_player -mcl_achievements -mcl_chests -mcl_furnaces -mesecons_commandblock -mcl_hoppers -mcl_tnt -mesecons -doc_identifier? diff --git a/mods/ENTITIES/mcl_minecarts/description.txt b/mods/ENTITIES/mcl_minecarts/description.txt deleted file mode 100644 index 27f6c313d..000000000 --- a/mods/ENTITIES/mcl_minecarts/description.txt +++ /dev/null @@ -1 +0,0 @@ -Minecarts are vehicles to move players quickly on rails. diff --git a/mods/ENTITIES/mcl_minecarts/functions.lua b/mods/ENTITIES/mcl_minecarts/functions.lua index 42cdecd12..2f0dfe0ae 100644 --- a/mods/ENTITIES/mcl_minecarts/functions.lua +++ b/mods/ENTITIES/mcl_minecarts/functions.lua @@ -1,3 +1,5 @@ +local vector = vector + function mcl_minecarts:get_sign(z) if z == 0 then return 0 @@ -38,11 +40,9 @@ end function mcl_minecarts:check_front_up_down(pos, dir_, check_down, railtype) local dir = vector.new(dir_) - local cur = nil - -- Front dir.y = 0 - cur = vector.add(pos, dir) + local cur = vector.add(pos, dir) if mcl_minecarts:is_rail(cur, railtype) then return dir end @@ -65,9 +65,9 @@ end function mcl_minecarts:get_rail_direction(pos_, dir, ctrl, old_switch, railtype) local pos = vector.round(pos_) - local cur = nil + local cur local left_check, right_check = true, true - + -- Check left and right local left = {x=0, y=0, z=0} local right = {x=0, y=0, z=0} @@ -78,7 +78,7 @@ function mcl_minecarts:get_rail_direction(pos_, dir, ctrl, old_switch, railtype) left.z = dir.x right.z = -dir.x end - + if ctrl then if old_switch == 1 then left_check = false @@ -100,13 +100,13 @@ function mcl_minecarts:get_rail_direction(pos_, dir, ctrl, old_switch, railtype) right_check = true end end - + -- Normal cur = mcl_minecarts:check_front_up_down(pos, dir, true, railtype) if cur then return cur end - + -- Left, if not already checked if left_check then cur = mcl_minecarts:check_front_up_down(pos, left, false, railtype) @@ -114,7 +114,7 @@ function mcl_minecarts:get_rail_direction(pos_, dir, ctrl, old_switch, railtype) return cur end end - + -- Right, if not already checked if right_check then cur = mcl_minecarts:check_front_up_down(pos, right, false, railtype) @@ -122,7 +122,6 @@ function mcl_minecarts:get_rail_direction(pos_, dir, ctrl, old_switch, railtype) return cur end end - -- Backwards if not old_switch then cur = mcl_minecarts:check_front_up_down(pos, { @@ -134,7 +133,5 @@ function mcl_minecarts:get_rail_direction(pos_, dir, ctrl, old_switch, railtype) return cur end end - return {x=0, y=0, z=0} -end - +end \ No newline at end of file diff --git a/mods/ENTITIES/mcl_minecarts/init.lua b/mods/ENTITIES/mcl_minecarts/init.lua index 7bea3bd46..4d3873cc2 100644 --- a/mods/ENTITIES/mcl_minecarts/init.lua +++ b/mods/ENTITIES/mcl_minecarts/init.lua @@ -1,7 +1,10 @@ -local S = minetest.get_translator("mcl_minecarts") +local modname = minetest.get_current_modname() +local S = minetest.get_translator(modname) + +local has_mcl_wip = minetest.get_modpath("mcl_wip") mcl_minecarts = {} -mcl_minecarts.modpath = minetest.get_modpath("mcl_minecarts") +mcl_minecarts.modpath = minetest.get_modpath(modname) mcl_minecarts.speed_max = 10 mcl_minecarts.check_float_time = 15 @@ -175,6 +178,19 @@ local function register_entity(entity_id, mesh, textures, drop, on_rightclick, o cart.on_activate_by_rail = on_activate_by_rail function cart:on_step(dtime) + local ctrl, player = nil, nil + if self._driver then + player = minetest.get_player_by_name(self._driver) + if player then + ctrl = player:get_player_control() + -- player detach + if ctrl.sneak then + detach_driver(self) + return + end + end + end + local vel = self.object:get_velocity() local update = {} if self._last_float_check == nil then @@ -189,19 +205,15 @@ local function register_entity(entity_id, mesh, textures, drop, on_rightclick, o rou_pos = vector.round(pos) node = minetest.get_node(rou_pos) local g = minetest.get_item_group(node.name, "connect_to_raillike") - if g ~= self._railtype and self._railtype ~= nil then - local player + if g ~= self._railtype and self._railtype then -- Detach driver - if self._driver then + if player then if self._old_pos then self.object:set_pos(self._old_pos) end mcl_player.player_attached[self._driver] = nil - player = minetest.get_player_by_name(self._driver) - if player then - player:set_detach() - player:set_eye_offset({x=0, y=0, z=0},{x=0, y=0, z=0}) - end + player:set_detach() + player:set_eye_offset({x=0, y=0, z=0},{x=0, y=0, z=0}) end -- Explode if already ignited @@ -337,14 +349,6 @@ local function register_entity(entity_id, mesh, textures, drop, on_rightclick, o end end - local ctrl, player = nil, nil - if self._driver then - player = minetest.get_player_by_name(self._driver) - if player then - ctrl = player:get_player_control() - end - end - -- Stop cart if velocity vector flips if self._old_vel and self._old_vel.y == 0 and (self._old_vel.x * vel.x < 0 or self._old_vel.z * vel.z < 0) then @@ -483,7 +487,6 @@ local function register_entity(entity_id, mesh, textures, drop, on_rightclick, o if update.pos then self.object:set_pos(pos) end - update = nil end function cart:get_staticdata() @@ -494,7 +497,7 @@ local function register_entity(entity_id, mesh, textures, drop, on_rightclick, o end -- Place a minecart at pointed_thing -mcl_minecarts.place_minecart = function(itemstack, pointed_thing, placer) +function mcl_minecarts.place_minecart(itemstack, pointed_thing, placer) if not pointed_thing.type == "node" then return end @@ -521,7 +524,7 @@ mcl_minecarts.place_minecart = function(itemstack, pointed_thing, placer) local cart = minetest.add_entity(railpos, entity_id) local railtype = minetest.get_item_group(node.name, "connect_to_raillike") local le = cart:get_luaentity() - if le ~= nil then + if le then le._railtype = railtype end local cart_dir = mcl_minecarts:get_rail_direction(railpos, {x=1, y=0, z=0}, nil, nil, railtype) @@ -538,7 +541,7 @@ mcl_minecarts.place_minecart = function(itemstack, pointed_thing, placer) end -local register_craftitem = function(itemstring, entity_id, description, tt_help, longdesc, usagehelp, icon, creative) +local function register_craftitem(itemstring, entity_id, description, tt_help, longdesc, usagehelp, icon, creative) entity_mapping[itemstring] = entity_id local groups = { minecart = 1, transport = 1 } @@ -604,7 +607,7 @@ Register a minecart local function register_minecart(itemstring, entity_id, description, tt_help, longdesc, usagehelp, mesh, textures, icon, drop, on_rightclick, on_activate_by_rail, creative) register_entity(entity_id, mesh, textures, drop, on_rightclick, on_activate_by_rail) register_craftitem(itemstring, entity_id, description, tt_help, longdesc, usagehelp, icon, creative) - if minetest.get_modpath("doc_identifier") ~= nil then + if minetest.get_modpath("doc_identifier") then doc.sub.identifier.register_object(entity_id, "craftitems", itemstring) end end @@ -643,6 +646,7 @@ register_minecart( if player then mcl_player.player_set_animation(player, "sit" , 30) player:set_eye_offset({x=0, y=-5.5, z=0},{x=0, y=-4, z=0}) + mcl_title.set(clicker, "actionbar", {text=S("Sneak to dismount"), color="white", stay=60}) end end, name) end @@ -813,9 +817,7 @@ minetest.register_craft({ }) -- TODO: Re-enable crafting of special minecarts when they have been implemented -if false then - -minetest.register_craft({ +--[[minetest.register_craft({ output = "mcl_minecarts:furnace_minecart", recipe = { {"mcl_furnaces:furnace"}, @@ -837,6 +839,12 @@ minetest.register_craft({ {"mcl_chests:chest"}, {"mcl_minecarts:minecart"}, }, -}) +})]] -end + +if has_mcl_wip then + mcl_wip.register_wip_item("mcl_minecarts:chest_minecart") + mcl_wip.register_wip_item("mcl_minecarts:furnace_minecart") + mcl_wip.register_wip_item("mcl_minecarts:command_block_minecart") + mcl_wip.register_wip_item("mcl_minecarts:hopper_minecart") +end \ No newline at end of file diff --git a/mods/ENTITIES/mcl_minecarts/locale/mcl_minecarts.de.tr b/mods/ENTITIES/mcl_minecarts/locale/mcl_minecarts.de.tr index 4d9b6c2ff..1d270ee6c 100644 --- a/mods/ENTITIES/mcl_minecarts/locale/mcl_minecarts.de.tr +++ b/mods/ENTITIES/mcl_minecarts/locale/mcl_minecarts.de.tr @@ -33,3 +33,4 @@ Activates minecarts when powered=Aktiviert Loren, wenn bestromt Emits redstone power when a minecart is detected=Gibt ein Redstonesignal aus, wenn eine Lore erfasst wird Vehicle for fast travel on rails=Fahrzeug zum schnellen Transport auf Schienen Can be ignited by tools or powered activator rail=Kann mit Werkzeugen oder bestromten Aktivierungsschienen angezündet werden +Sneak to dismount=Zum Aussteigen schleichen diff --git a/mods/ENTITIES/mcl_minecarts/locale/mcl_minecarts.fr.tr b/mods/ENTITIES/mcl_minecarts/locale/mcl_minecarts.fr.tr index 39cdfd013..67ed5eb1b 100644 --- a/mods/ENTITIES/mcl_minecarts/locale/mcl_minecarts.fr.tr +++ b/mods/ENTITIES/mcl_minecarts/locale/mcl_minecarts.fr.tr @@ -33,3 +33,4 @@ Activates minecarts when powered=Active les wagonnets lorsqu'il est alimenté Emits redstone power when a minecart is detected=Émet de l'énergie redstone lorsqu'un wagonnet est détecté Vehicle for fast travel on rails=Véhicule pour voyager rapidement sur rails Can be ignited by tools or powered activator rail=Peut être allumé par des outils ou un rail d'activation motorisé +Sneak to dismount= \ No newline at end of file diff --git a/mods/ENTITIES/mcl_minecarts/locale/mcl_minecarts.pl.tr b/mods/ENTITIES/mcl_minecarts/locale/mcl_minecarts.pl.tr new file mode 100644 index 000000000..b36ec5eb1 --- /dev/null +++ b/mods/ENTITIES/mcl_minecarts/locale/mcl_minecarts.pl.tr @@ -0,0 +1,36 @@ +# textdomain: mcl_minecarts +Minecart=Wagonik +Minecarts can be used for a quick transportion on rails.=Wagoniki mogą być użyte do szybkiego transportu po torach. +Minecarts only ride on rails and always follow the tracks. At a T-junction with no straight way ahead, they turn left. The speed is affected by the rail type.=Wagoniki mogą jeździć tylko po torach i zawsze podążają za wytyczoną ścieżką. W przypadku skrzyżowań typu T, gdzie nie ma prostej ścieżki, skręcają w lew. Ich szybkość zależy od typu torów. +You can place the minecart on rails. Right-click it to enter it. Punch it to get it moving.=Możesz postawić wagonik na torach. Kliknij prawym przyciskiem myszy aby do niego wejść. Uderz go by zaczął się poruszać. +To obtain the minecart, punch it while holding down the sneak key.=Aby odzyskać wagonik uderz go podczas skradania. +A minecart with TNT is an explosive vehicle that travels on rail.=Wagonik z TNT jest wybuchowym pojazdem podróżującym po torach. +Place it on rails. Punch it to move it. The TNT is ignited with a flint and steel or when the minecart is on an powered activator rail.=Postaw go na torach. Uderz by zaczął się poruszać. TNT zapala się krzesiwem lub gdy wagonik jest na zasilonych torach aktywacyjnych. +To obtain the minecart and TNT, punch them while holding down the sneak key. You can't do this if the TNT was ignited.=Aby odzyskać wagonik z TNT uderz go podczas skradania. Nie możesz tego zrobić gdy TNT jest zapalone. +A minecart with furnace is a vehicle that travels on rails. It can propel itself with fuel.=Wagonik z piecem jest pojazdem podróżującym na torach. Napędza on samego siebie za pomocą paliwa. +Place it on rails. If you give it some coal, the furnace will start burning for a long time and the minecart will be able to move itself. Punch it to get it moving.=Postaw go na torach. Jeśli dasz mu nieco węgla piec zacznie palić przez długi czas, a wagonik będzie się sam poruszał. Uderz go by zaczął się poruszać. +To obtain the minecart and furnace, punch them while holding down the sneak key.=Aby odzyskać wagonik z piecem uderz go podczas skradania. +Minecart with Chest=Wagonik ze skrzynią +Minecart with Furnace=Wagonik z piecem +Minecart with Command Block=Wagonik z blokiem poleceń +Minecart with Hopper=Wagonik z lejem +Minecart with TNT=Wagonik z TNT +Place them on the ground to build your railway, the rails will automatically connect to each other and will turn into curves, T-junctions, crossings and slopes as needed.=Postaw je na ziemi by zbudować ścieżkę z torów. Tory automatycznie połączą się ze sobą i zamienią się w zakręty, skrzyżowania typu T, skrzyżowania i równie w zależności od potrzeb. +Rail=Tor +Rails can be used to build transport tracks for minecarts. Normal rails slightly slow down minecarts due to friction.=Tory mogą być wykorzystane do zbudowania torów dla wagoników. Zwyczajne tory nieco spowalniają wagoniki ze względu na tarcie. +Powered Rail=Zasilane tory +Rails can be used to build transport tracks for minecarts. Powered rails are able to accelerate and brake minecarts.=Tory mogą być wykorzystane do zbudowania torów dla wagoników. Zasilane tory mogą przyspieszać lub spowalniać wagoniki. +Without redstone power, the rail will brake minecarts. To make this rail accelerate minecarts, power it with redstone power.=Bez zasilania czerwienitem tory będą spowalniać wagoniki. Aby sprawić by je przyspieszały zasil je czerwienitem. +Activator Rail=Tory aktywacyjne +Rails can be used to build transport tracks for minecarts. Activator rails are used to activate special minecarts.=Tory mogą być wykorzystane do zbudowania torów dla wagoników. Tory aktywacyjne są wykorzystywane do aktywacji specjalnych wagoników. +To make this rail activate minecarts, power it with redstone power and send a minecart over this piece of rail.=Aby ten tor aktywował wagonik, zasil go czerwienitem i spraw by wagonik po nim przejechał. +Detector Rail=Tory z czujnikiem +Rails can be used to build transport tracks for minecarts. A detector rail is able to detect a minecart above it and powers redstone mechanisms.=Tory mogą być wykorzystane do zbudowania torów dla wagoników. Tory z czujnikiem są w stanie wykryć kiedy wagonik po nich przejeżdża i wysłać sygnał do czerwienitowych mechanizmów. +To detect a minecart and provide redstone power, connect it to redstone trails or redstone mechanisms and send any minecart over the rail.=Aby wykryć wagonik i dostarczyć zasilanie czerwienitem podłącz go czerwienitem to mechanizmu i spraw by wagonik po nim przejechał. +Track for minecarts=Tor dla wagoników +Speed up when powered, slow down when not powered=Przyspiesza gdy zasilane, spowalnia gdy nie +Activates minecarts when powered=Aktywuje wagoniki gdy zasilane +Emits redstone power when a minecart is detected=Emituje zasilanie czerwienitem gdy wagonik jest wykryty +Vehicle for fast travel on rails=Pojazd do szybkiej podróży na torach +Can be ignited by tools or powered activator rail=Może być zapalony przez narzędzia, lub zasilane tor aktywacyjne +Sneak to dismount=Zacznij się skradać by zejść diff --git a/mods/ENTITIES/mcl_minecarts/locale/mcl_minecarts.ru.tr b/mods/ENTITIES/mcl_minecarts/locale/mcl_minecarts.ru.tr index e8f914128..6189bac84 100644 --- a/mods/ENTITIES/mcl_minecarts/locale/mcl_minecarts.ru.tr +++ b/mods/ENTITIES/mcl_minecarts/locale/mcl_minecarts.ru.tr @@ -33,3 +33,4 @@ Activates minecarts when powered=Активирует особые вагоне Emits redstone power when a minecart is detected=Испускает энергию редстоуна при обнаружении вагонетки Vehicle for fast travel on rails=Быстрый железнодорожный транспорт Can be ignited by tools or powered activator rail=Можно воспламенить с помощью инструмента или подключенного рельсового активатора +Sneak to dismount=Нажмите [Красться] для высадки diff --git a/mods/ENTITIES/mcl_minecarts/locale/template.txt b/mods/ENTITIES/mcl_minecarts/locale/template.txt index 254189542..dff98587c 100644 --- a/mods/ENTITIES/mcl_minecarts/locale/template.txt +++ b/mods/ENTITIES/mcl_minecarts/locale/template.txt @@ -33,3 +33,4 @@ Activates minecarts when powered= Emits redstone power when a minecart is detected= Vehicle for fast travel on rails= Can be ignited by tools or powered activator rail= +Sneak to dismount= diff --git a/mods/ENTITIES/mcl_minecarts/mod.conf b/mods/ENTITIES/mcl_minecarts/mod.conf index 5661f8b9c..3b8ae5551 100644 --- a/mods/ENTITIES/mcl_minecarts/mod.conf +++ b/mods/ENTITIES/mcl_minecarts/mod.conf @@ -1 +1,6 @@ name = mcl_minecarts +author = Krock +description = Minecarts are vehicles to move players quickly on rails. +depends = mcl_title, mcl_explosions, mcl_core, mcl_sounds, mcl_player, mcl_achievements, mcl_chests, mcl_furnaces, mesecons_commandblock, mcl_hoppers, mcl_tnt, mesecons +optional_depends = doc_identifier, mcl_wip + diff --git a/mods/ENTITIES/mcl_minecarts/rails.lua b/mods/ENTITIES/mcl_minecarts/rails.lua index 4c26aea8c..91282f253 100644 --- a/mods/ENTITIES/mcl_minecarts/rails.lua +++ b/mods/ENTITIES/mcl_minecarts/rails.lua @@ -1,7 +1,7 @@ -local S = minetest.get_translator("mcl_minecarts") +local S = minetest.get_translator(minetest.get_current_modname()) -- Template rail function -local register_rail = function(itemstring, tiles, def_extras, creative) +local function register_rail(itemstring, tiles, def_extras, creative) local groups = {handy=1,pickaxey=1, attached_node=1,rail=1,connect_to_raillike=minetest.raillike_group("rail"),dig_by_water=1,destroy_by_lava_flow=1, transport=1} if creative == false then groups.not_in_creative_inventory = 1 @@ -206,11 +206,11 @@ register_rail("mcl_minecarts:detector_rail_on", -- Crafting minetest.register_craft({ - output = 'mcl_minecarts:rail 16', + output = "mcl_minecarts:rail 16", recipe = { - {'mcl_core:iron_ingot', '', 'mcl_core:iron_ingot'}, - {'mcl_core:iron_ingot', 'mcl_core:stick', 'mcl_core:iron_ingot'}, - {'mcl_core:iron_ingot', '', 'mcl_core:iron_ingot'}, + {"mcl_core:iron_ingot", "", "mcl_core:iron_ingot"}, + {"mcl_core:iron_ingot", "mcl_core:stick", "mcl_core:iron_ingot"}, + {"mcl_core:iron_ingot", "", "mcl_core:iron_ingot"}, } }) diff --git a/mods/ENTITIES/mcl_mobs/readme.MD b/mods/ENTITIES/mcl_mobs/README.md similarity index 100% rename from mods/ENTITIES/mcl_mobs/readme.MD rename to mods/ENTITIES/mcl_mobs/README.md diff --git a/mods/ENTITIES/mcl_mobs/api.txt b/mods/ENTITIES/mcl_mobs/api.txt index eda74aeb4..2d8cef5b0 100644 --- a/mods/ENTITIES/mcl_mobs/api.txt +++ b/mods/ENTITIES/mcl_mobs/api.txt @@ -502,20 +502,6 @@ and damages any entity caught inside the blast radius. Protection will limit node destruction but not entity damage. -mobs:capture_mob ----------------- - -mobs:capture_mob(...) - -Does nothing and returns false. - -This function is provided for compability with Mobs Redo for an attempt to -capture a mob. -Mobs cannot be captured in MineClone 2. - -In Mobs Redo, this is generally called inside the on_rightclick section of the mob -api code, it provides a chance of capturing the mob. See Mobs Redo documentation -of parameters. Feeding and Taming/Breeding --------------------------- @@ -535,19 +521,6 @@ Will return true when mob is fed with item it likes. them up -Protecting Mobs ---------------- - -mobs:protect(self, clicker) - -This function can be used to right-click any tamed mob with mobs:protector item, -this will protect the mob from harm inside of a protected area from other -players. Will return true when mob right-clicked with mobs:protector item. - - 'self' mob information - 'clicker' player information - - Riding Mobs ----------- @@ -605,7 +578,7 @@ Note: animation names above are from the pre-defined animation lists inside mob registry without extensions. -mobs:set_animation(self, name) +mobs.set_mob_animation(self, name) This function sets the current animation for mob, defaulting to "stand" if not found. @@ -781,8 +754,5 @@ mobs:register_mob("mob_horse:horse", { inv:remove_item("main", "mobs:saddle") end end - - -- used to capture horse with magic lasso - mobs:capture_mob(self, clicker, 0, 0, 80, false, nil) end }) diff --git a/mods/ENTITIES/mcl_mobs/api/api.lua b/mods/ENTITIES/mcl_mobs/api/api.lua new file mode 100644 index 000000000..639eb517d --- /dev/null +++ b/mods/ENTITIES/mcl_mobs/api/api.lua @@ -0,0 +1,736 @@ +-- API for Mobs Redo: MineClone 2 Delux 2.0 DRM Free Early Access Super Extreme Edition + +-- mobs library +mobs = {} + +-- lua locals - can grab from this to easily plop them into the api lua files + +--localize minetest functions +local minetest_settings = minetest.settings +local minetest_get_objects_inside_radius = minetest.get_objects_inside_radius +local minetest_get_modpath = minetest.get_modpath +local minetest_registered_nodes = minetest.registered_nodes +local minetest_get_node = minetest.get_node +--local minetest_get_item_group = minetest.get_item_group +local minetest_registered_entities = minetest.registered_entities +--local minetest_line_of_sight = minetest.line_of_sight +--local minetest_after = minetest.after +--local minetest_sound_play = minetest.sound_play +--local minetest_add_particlespawner = minetest.add_particlespawner +--local minetest_registered_items = minetest.registered_items +--local minetest_set_node = minetest.set_node +local minetest_add_item = minetest.add_item +--local minetest_get_craft_result = minetest.get_craft_result +--local minetest_find_path = minetest.find_path +local minetest_is_creative_enabled = minetest.is_creative_enabled +--local minetest_find_node_near = minetest.find_node_near +--local minetest_find_nodes_in_area_under_air = minetest.find_nodes_in_area_under_air +--local minetest_raycast = minetest.raycast +--local minetest_get_us_time = minetest.get_us_time +local minetest_add_entity = minetest.add_entity +--local minetest_get_natural_light = minetest.get_natural_light +--local minetest_get_node_or_nil = minetest.get_node_or_nil + +-- localize math functions +local math = math + +-- localize vector functions +local vector = vector + +local string = string + +-- mob constants +--local BREED_TIME = 30 +--local BREED_TIME_AGAIN = 300 +--local CHILD_GROW_TIME = 60*20 +--local DEATH_DELAY = 0.5 +local DEFAULT_FALL_SPEED = -10 +--local FLOP_HEIGHT = 5.0 +--local FLOP_HOR_SPEED = 1.5 +local GRAVITY = minetest_settings:get("movement_gravity")-- + 9.81 + +local MAX_MOB_NAME_LENGTH = 30 + + +--[[local MOB_CAP = {} +MOB_CAP.hostile = 70 +MOB_CAP.passive = 10 +MOB_CAP.ambient = 15 +MOB_CAP.water = 15 +]] + +-- Load main settings +--local damage_enabled = minetest_settings:get_bool("enable_damage") +--local disable_blood = minetest_settings:get_bool("mobs_disable_blood") +--local mobs_drop_items = minetest_settings:get_bool("mobs_drop_items") ~= false +--local mobs_griefing = minetest_settings:get_bool("mobs_griefing") ~= false +--local spawn_protected = minetest_settings:get_bool("mobs_spawn_protected") ~= false +--local remove_far = true +local difficulty = tonumber(minetest_settings:get("mob_difficulty")) or 1.0 +--local show_health = false +--local max_per_block = tonumber(minetest_settings:get("max_objects_per_block") or 64) +---local mobs_spawn_chance = tonumber(minetest_settings:get("mobs_spawn_chance") or 2.5) + +-- pathfinding settings +--local enable_pathfinding = true +--local stuck_timeout = 3 -- how long before mob gets stuck in place and starts searching +--local stuck_path_timeout = 10 -- how long will mob follow path before giving up + +-- default nodes +--local node_ice = "mcl_core:ice" +--local node_snowblock = "mcl_core:snowblock" +--local node_snow = "mcl_core:snow" +mobs.fallback_node = minetest.registered_aliases["mapgen_dirt"] or "mcl_core:dirt" + +--local mod_weather = minetest_get_modpath("mcl_weather") +--local mod_explosions = minetest_get_modpath("mcl_explosions") +local mod_mobspawners = minetest_get_modpath("mcl_mobspawners") +--local mod_hunger = minetest_get_modpath("mcl_hunger") +--local mod_worlds = minetest_get_modpath("mcl_worlds") +--local mod_armor = minetest_get_modpath("mcl_armor") +--local mod_experience = minetest_get_modpath("mcl_experience") + + +-- random locals I found +--local los_switcher = false +--local height_switcher = false + +-- Get translator +local S = minetest.get_translator(minetest.get_current_modname()) + +-- CMI support check +--local use_cmi = minetest.global_exists("cmi") + +-- creative check +function mobs.is_creative(name) + return minetest_is_creative_enabled(name) +end + +--[[local function atan(x) + if not x or x ~= x then + return 0 + else + return math.atan(x) + end +end]] + +-- Shows helpful debug info above each mob +--local mobs_debug = minetest_settings:get_bool("mobs_debug", false) + +-- Peaceful mode message so players will know there are no monsters +if minetest_settings:get_bool("only_peaceful_mobs", false) then + minetest.register_on_joinplayer(function(player) + minetest.chat_send_player(player:get_player_name(), + S("Peaceful mode active! No monsters will spawn.")) + end) +end + + +local api_path = minetest.get_modpath(minetest.get_current_modname()).."/api/mob_functions/" + +--ignite all parts of the api +dofile(api_path .. "flow_lib.lua") +dofile(api_path .. "ai.lua") +dofile(api_path .. "animation.lua") +dofile(api_path .. "collision.lua") +dofile(api_path .. "environment.lua") +dofile(api_path .. "interaction.lua") +dofile(api_path .. "movement.lua") +dofile(api_path .. "set_up.lua") +dofile(api_path .. "attack_type_instructions.lua") +dofile(api_path .. "sound_handling.lua") +dofile(api_path .. "death_logic.lua") +dofile(api_path .. "mob_effects.lua") +dofile(api_path .. "projectile_handling.lua") +dofile(api_path .. "breeding.lua") +dofile(api_path .. "head_logic.lua") + + +mobs.spawning_mobs = {} + + + + +-- register mob entity +function mobs:register_mob(name, def) + + local collisionbox = def.collisionbox or {-0.25, -0.25, -0.25, 0.25, 0.25, 0.25} + + -- Workaround for : + -- Increase upper Y limit to avoid mobs glitching through solid nodes. + -- FIXME: Remove workaround if it's no longer needed. + + if collisionbox[5] < 0.79 then + collisionbox[5] = 0.79 + end + + mobs.spawning_mobs[name] = true + + local function scale_difficulty(value, default, min, special) + if (not value) or (value == default) or (value == special) then + return default + else + return math.max(min, value * difficulty) + end + end + + minetest.register_entity(name, { + description = def.description, + use_texture_alpha = def.use_texture_alpha, + stepheight = def.stepheight or 0.6, + stepheight_backup = def.stepheight or 0.6, + name = name, + type = def.type, + attack_type = def.attack_type, + fly = def.fly, + fly_in = def.fly_in or {"air", "__airlike"}, + owner = def.owner or "", + order = def.order or "", + on_die = def.on_die, + spawn_small_alternative = def.spawn_small_alternative, + do_custom = def.do_custom, + jump_height = def.jump_height or 4, -- was 6 + rotate = def.rotate or 0, -- 0=front, 90=side, 180=back, 270=side2 + hp_min = scale_difficulty(def.hp_min, 5, 1), + hp_max = scale_difficulty(def.hp_max, 10, 1), + xp_min = def.xp_min or 1, + xp_max = def.xp_max or 5, + breath_max = def.breath_max or 6, + breathes_in_water = def.breathes_in_water or false, + physical = true, + collisionbox = collisionbox, + collide_with_objects = def.collide_with_objects or false, + selectionbox = def.selectionbox or def.collisionbox, + visual = def.visual, + visual_size = def.visual_size or {x = 1, y = 1}, + mesh = def.mesh, + makes_footstep_sound = def.makes_footstep_sound or false, + view_range = def.view_range or 16, + walk_velocity = def.walk_velocity or 1, + run_velocity = def.run_velocity or 2, + damage = scale_difficulty(def.damage, 0, 0), + light_damage = def.light_damage or 0, + sunlight_damage = def.sunlight_damage or 0, + water_damage = def.water_damage or 0, + lava_damage = def.lava_damage or 8, + fire_damage = def.fire_damage or 1, + suffocation = def.suffocation or true, + fall_damage = def.fall_damage or 1, + fall_speed = def.fall_speed or DEFAULT_FALL_SPEED, -- must be lower than -2 + drops = def.drops or {}, + armor = def.armor or 100, + on_rightclick = mobs.create_mob_on_rightclick(def.on_rightclick), + arrow = def.arrow, + shoot_interval = def.shoot_interval, + sounds = def.sounds or {}, + animation = def.animation, + jump = def.jump ~= false, + walk_chance = def.walk_chance or 50, + attacks_monsters = def.attacks_monsters or false, + group_attack = def.group_attack or false, + passive = def.passive or false, + knock_back = def.knock_back ~= false, + shoot_offset = def.shoot_offset or 0, + floats = def.floats or 1, -- floats in water by default + floats_on_lava = def.floats_on_lava or 0, + replace_rate = def.replace_rate, + replace_what = def.replace_what, + replace_with = def.replace_with, + replace_offset = def.replace_offset or 0, + on_replace = def.on_replace, + timer = 0, + state_timer = 0, + env_damage_timer = 0, + tamed = false, + pause_timer = 0, + gotten = false, + reach = def.reach or 3, + htimer = 0, + texture_list = def.textures, + child_texture = def.child_texture, + docile_by_day = def.docile_by_day or false, + time_of_day = 0.5, + fear_height = def.fear_height or 0, + runaway = def.runaway, + runaway_timer = 0, + pathfinding = def.pathfinding, + immune_to = def.immune_to or {}, + explosion_radius = def.explosion_radius, -- LEGACY + explosion_damage_radius = def.explosion_damage_radius, -- LEGACY + explosiontimer_reset_radius = def.explosiontimer_reset_radius, + explosion_timer = def.explosion_timer or 3, + allow_fuse_reset = def.allow_fuse_reset ~= false, + stop_to_explode = def.stop_to_explode ~= false, + custom_attack = def.custom_attack, + double_melee_attack = def.double_melee_attack, + dogshoot_switch = def.dogshoot_switch, + dogshoot_count = 0, + dogshoot_count_max = def.dogshoot_count_max or 5, + dogshoot_count2_max = def.dogshoot_count2_max or (def.dogshoot_count_max or 5), + attack_animals = def.attack_animals or false, + specific_attack = def.specific_attack, + runaway_from = def.runaway_from, + owner_loyal = def.owner_loyal, + facing_fence = false, + + _cmi_is_mob = true, + + pushable = def.pushable or true, + + --j4i stuff + yaw = 0, + automatic_face_movement_dir = def.rotate or 0, -- 0=front, 90=side, 180=back, 270=side2 + automatic_face_movement_max_rotation_per_sec = 360, --degrees + backface_culling = true, + walk_timer = 0, + stand_timer = 0, + current_animation = "", + gravity = GRAVITY, + swim = def.swim, + swim_in = def.swim_in or {mobs_mc.items.water_source, "mcl_core:water_flowing", mobs_mc.items.river_water_source}, + pitch_switch = "static", + jump_only = def.jump_only, + hostile = def.hostile, + neutral = def.neutral, + attacking = nil, + visual_size_origin = def.visual_size or {x = 1, y = 1, z = 1}, + punch_timer_cooloff = def.punch_timer_cooloff or 0.5, + death_animation_timer = 0, + hostile_cooldown = def.hostile_cooldown or 15, + tilt_fly = def.tilt_fly, + tilt_swim = def.tilt_swim, + fall_slow = def.fall_slow, + projectile_cooldown_min = def.projectile_cooldown_min or 2, + projectile_cooldown_max = def.projectile_cooldown_max or 6, + skittish = def.skittish, + + minimum_follow_distance = def.minimum_follow_distance or 0.5, --make mobs not freak out when underneath + + memory = 0, -- memory timer if chasing/following + fly_random_while_attack = def.fly_random_while_attack, + + --for spiders + always_climb = def.always_climb, + + --despawn mechanic variables + lifetimer_reset = 30, --30 seconds + lifetimer = 30, --30 seconds + + --breeding stuff + breed_timer = 0, + breed_lookout_timer = 0, + breed_distance = def.breed_distance or 1.5, --how far away mobs have to be to begin actual breeding + breed_lookout_timer_goal = 30, --30 seconds (this timer is for how long the mob looks for a mate) + breed_timer_cooloff = 5*60, -- 5 minutes (this timer is for how long the mob has to wait before being bred again) + bred = false, + follow = def.follow, --this item is also used for the breeding mechanism + follow_distance = def.follow_distance or 2, + baby_size = def.baby_size or 0.5, + baby = false, + grow_up_timer = 0, + grow_up_goal = 20*60, --in 20 minutes the mob grows up + special_breed_timer = 0, --this is used for the AHEM AHEM part of breeding + + backup_visual_size = def.visual_size, + backup_collisionbox = collisionbox, + backup_selectionbox = def.selectionbox or def.collisionbox, + + + --fire timer + burn_timer = 0, + + ignores_cobwebs = def.ignores_cobwebs, + breath = def.breath_max or 6, + + random_sound_timer_min = 3, + random_sound_timer_max = 10, + + --head code variables + --defaults are for the cow's default + --because I don't know what else to set them + --to :P + + --you must use these to adjust the mob's head positions + + --has_head is used as a logic gate (quick easy check) + has_head = def.has_head or false, + --head_bone is the actual bone in the model which the head + --is attached to for animation + head_bone = def.head_bone or "head", + + --this part controls the base position of the head calculations + --localized to the mob's visual yaw when gotten (self.object:get_yaw()) + --you can enable the debug in /mob_functions/head_logic.lua by uncommenting the + --particle spawner code + head_height_offset = def.head_height_offset or 1.0525, + head_direction_offset = def.head_direction_offset or 0.5, + + --this part controls the visual of the head + head_bone_pos_y = def.head_bone_pos_y or 3.6, + head_bone_pos_z = def.head_bone_pos_z or -0.6, + head_pitch_modifier = def.head_pitch_modifier or 0, + + --these variables are switches in case the model + --moves the wrong way + swap_y_with_x = def.swap_y_with_x or false, + reverse_head_yaw = def.reverse_head_yaw or false, + + --END HEAD CODE VARIABLES + + --end j4i stuff + + -- MCL2 extensions + teleport = mobs.teleport, + do_teleport = def.do_teleport, + spawn_class = def.spawn_class, + ignores_nametag = def.ignores_nametag or false, + rain_damage = def.rain_damage or 0, + glow = def.glow, + --can_despawn = can_despawn, + child = def.child or false, + texture_mods = {}, + shoot_arrow = def.shoot_arrow, + sounds_child = def.sounds_child, + explosion_strength = def.explosion_strength, + suffocation_timer = 0, + follow_velocity = def.follow_velocity or 2.4, + instant_death = def.instant_death or false, + fire_resistant = def.fire_resistant or false, + fire_damage_resistant = def.fire_damage_resistant or false, + ignited_by_sunlight = def.ignited_by_sunlight or false, + eye_height = def.eye_height or 1.5, + defuse_reach = def.defuse_reach or 4, + -- End of MCL2 extensions + + on_spawn = def.on_spawn, + + --on_blast = def.on_blast or do_tnt, + + on_step = mobs.mob_step, + + --do_punch = def.do_punch, + + on_punch = mobs.mob_punch, + + --on_breed = def.on_breed, + + --on_grown = def.on_grown, + + --on_detach_child = mob_detach_child, + + on_activate = function(self, staticdata, dtime) + self.object:set_acceleration(vector.new(0,-GRAVITY, 0)) + return mobs.mob_activate(self, staticdata, def, dtime) + end, + + get_staticdata = function(self) + return mobs.mob_staticdata(self) + end, + + --harmed_by_heal = def.harmed_by_heal, + }) + + if minetest_get_modpath("doc_identifier") then + doc.sub.identifier.register_object(name, "basics", "mobs") + end + +end -- END mobs:register_mob function + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +-- register arrow for shoot attack +function mobs:register_arrow(name, def) + + -- errorcheck + if not name or not def then + print("failed to register arrow entity") + return + end + + minetest.register_entity(name.."_entity", { + + physical = false, + visual = def.visual, + visual_size = def.visual_size, + textures = def.textures, + velocity = def.velocity, + hit_player = def.hit_player, + hit_node = def.hit_node, + hit_mob = def.hit_mob, + hit_object = def.hit_object, + drop = def.drop or false, -- drops arrow as registered item when true + collisionbox = {0, 0, 0, 0, 0, 0}, -- remove box around arrows + timer = 0, + switch = 0, + owner_id = def.owner_id, + rotate = def.rotate, + speed = def.speed or nil, + on_step = function(self) + + local vel = self.object:get_velocity() + + local pos = self.object:get_pos() + + if self.timer > 150 + or not mobs.within_limits(pos, 0) then + mcl_burning.extinguish(self.object) + self.object:remove(); + return + end + + -- does arrow have a tail (fireball) + if def.tail + and def.tail == 1 + and def.tail_texture then + + --do this to prevent clipping through main entity sprite + local pos_adjustment = vector.multiply(vector.normalize(vel), -1) + local divider = def.tail_distance_divider or 1 + pos_adjustment = vector.divide(pos_adjustment, divider) + local new_pos = vector.add(pos, pos_adjustment) + minetest.add_particle({ + pos = new_pos, + velocity = {x = 0, y = 0, z = 0}, + acceleration = {x = 0, y = 0, z = 0}, + expirationtime = def.expire or 0.25, + collisiondetection = false, + texture = def.tail_texture, + size = def.tail_size or 5, + glow = def.glow or 0, + }) + end + + if self.hit_node then + + local node = minetest_get_node(pos).name + + if minetest_registered_nodes[node].walkable then + + self.hit_node(self, pos, node) + + if self.drop == true then + + pos.y = pos.y + 1 + + self.lastpos = (self.lastpos or pos) + + minetest_add_item(self.lastpos, self.object:get_luaentity().name) + end + + self.object:remove(); + + return + end + end + + if self.hit_player or self.hit_mob or self.hit_object then + + for _,player in pairs(minetest_get_objects_inside_radius(pos, 1.5)) do + + if self.hit_player + and player:is_player() then + + if self.hit_player then + self.hit_player(self, player) + else + mobs.arrow_hit(self, player) + end + + self.object:remove(); + return + end + + --[[ + local entity = player:get_luaentity() + + if entity + and self.hit_mob + and entity._cmi_is_mob == true + and tostring(player) ~= self.owner_id + and entity.name ~= self.object:get_luaentity().name + and (self._shooter and entity.name ~= self._shooter:get_luaentity().name) then + + --self.hit_mob(self, player) + self.object:remove(); + return + end + ]]-- + + --[[ + if entity + and self.hit_object + and (not entity._cmi_is_mob) + and tostring(player) ~= self.owner_id + and entity.name ~= self.object:get_luaentity().name + and (self._shooter and entity.name ~= self._shooter:get_luaentity().name) then + + --self.hit_object(self, player) + self.object:remove(); + return + end + ]]-- + end + end + + self.lastpos = pos + end + }) +end + +-- Register spawn eggs + +-- Note: This also introduces the “spawn_egg” group: +-- * spawn_egg=1: Spawn egg (generic mob, no metadata) +-- * spawn_egg=2: Spawn egg (captured/tamed mob, metadata) +function mobs:register_egg(mob, desc, background, addegg, no_creative) + + local grp = {spawn_egg = 1} + + -- do NOT add this egg to creative inventory (e.g. dungeon master) + if no_creative == true then + grp.not_in_creative_inventory = 1 + end + + local invimg = background + + if addegg == 1 then + invimg = "mobs_chicken_egg.png^(" .. invimg .. + "^[mask:mobs_chicken_egg_overlay.png)" + end + + -- register old stackable mob egg + minetest.register_craftitem(mob, { + + description = desc, + inventory_image = invimg, + groups = grp, + + _doc_items_longdesc = S("This allows you to place a single mob."), + _doc_items_usagehelp = S("Just place it where you want the mob to appear. Animals will spawn tamed, unless you hold down the sneak key while placing. If you place this on a mob spawner, you change the mob it spawns."), + + on_place = function(itemstack, placer, pointed_thing) + + local pos = pointed_thing.above + + -- am I clicking on something with existing on_rightclick function? + local under = minetest_get_node(pointed_thing.under) + local def = minetest_registered_nodes[under.name] + if def and def.on_rightclick then + return def.on_rightclick(pointed_thing.under, under, placer, itemstack) + end + + if pos + --and within_limits(pos, 0) + and not minetest.is_protected(pos, placer:get_player_name()) then + + local name = placer:get_player_name() + local privs = minetest.get_player_privs(name) + if mod_mobspawners and under.name == "mcl_mobspawners:spawner" then + if minetest.is_protected(pointed_thing.under, name) then + minetest.record_protection_violation(pointed_thing.under, name) + return itemstack + end + if not privs.maphack then + minetest.chat_send_player(name, S("You need the “maphack” privilege to change the mob spawner.")) + return itemstack + end + mcl_mobspawners.setup_spawner(pointed_thing.under, itemstack:get_name()) + if not mobs.is_creative(name) then + itemstack:take_item() + end + return itemstack + end + + if not minetest_registered_entities[mob] then + return itemstack + end + + if minetest_settings:get_bool("only_peaceful_mobs", false) + and minetest_registered_entities[mob].type == "monster" then + minetest.chat_send_player(name, S("Only peaceful mobs allowed!")) + return itemstack + end + + local mob = minetest_add_entity(pos, mob) + minetest.log("action", "Mob spawned: "..name.." at "..minetest.pos_to_string(pos)) + local ent = mob:get_luaentity() + + -- don't set owner if monster or sneak pressed + --[[ + if ent.type ~= "monster" + and not placer:get_player_control().sneak then + ent.owner = placer:get_player_name() + ent.tamed = true + end + ]]-- + + -- set nametag + local nametag = itemstack:get_meta():get_string("name") + if nametag ~= "" then + if string.len(nametag) > MAX_MOB_NAME_LENGTH then + nametag = string.sub(nametag, 1, MAX_MOB_NAME_LENGTH) + end + ent.nametag = nametag + --update_tag(ent) + end + + -- if not in creative then take item + if not mobs.is_creative(placer:get_player_name()) then + itemstack:take_item() + end + end + + return itemstack + end, + }) + +end + + diff --git a/mods/ENTITIES/mcl_mobs/api/mob_functions/ai.lua b/mods/ENTITIES/mcl_mobs/api/mob_functions/ai.lua new file mode 100644 index 000000000..88ce3274b --- /dev/null +++ b/mods/ENTITIES/mcl_mobs/api/mob_functions/ai.lua @@ -0,0 +1,1128 @@ +local math = math +local vector = vector +local string = string + +local tonumber = tonumber + +local minetest_yaw_to_dir = minetest.yaw_to_dir +local minetest_get_item_group = minetest.get_item_group +local minetest_get_node = minetest.get_node +local minetest_line_of_sight = minetest.line_of_sight +local minetest_get_node_light = minetest.get_node_light +local minetest_registered_nodes = minetest.registered_nodes +local flow = mobs.get_flowing_dir + +local DOUBLE_PI = math.pi * 2 +local THIRTY_SECONDTH_PI = DOUBLE_PI * 0.03125 + +--a simple helper function which is too small to move into movement.lua +local function quick_rotate(self,dtime) + self.yaw = self.yaw + THIRTY_SECONDTH_PI + if self.yaw > DOUBLE_PI then + self.yaw = self.yaw - DOUBLE_PI + end +end + +--a simple helper function for rounding +--http://lua-users.org/wiki/SimpleRound +local function round2(num, numDecimalPlaces) + return tonumber(string.format("%." .. (numDecimalPlaces or 0) .. "f", num)) +end + + +--[[ + _ _ +| | | | +| | __ _ _ __ __| | +| | / _` | '_ \ / _` | +| |___| (_| | | | | (_| | +\_____/\__,_|_| |_|\__,_| +]]-- + +--this is basically reverse jump_check +local function cliff_check(self,dtime) + --mobs will flip out if they are falling without this + if self.object:get_velocity().y ~= 0 then + return false + end + + local pos = self.object:get_pos() + local dir = minetest_yaw_to_dir(self.yaw) + local collisionbox = self.object:get_properties().collisionbox + local radius = collisionbox[4] + 0.5 + + dir = vector.multiply(dir,radius) + + local free_fall = minetest_line_of_sight( + {x = pos.x + dir.x, y = pos.y, z = pos.z + dir.z}, + {x = pos.x + dir.x, y = pos.y - self.fear_height, z = pos.z + dir.z}) + + return free_fall +end + +-- state switching logic (stand, walk, run, attacks) +local land_state_list_wandering = {"stand", "walk"} + +local function land_state_switch(self, dtime) + + --do math before sure not attacking, following, or running away so continue + --doing random walking for mobs if all states are not met + self.state_timer = self.state_timer - dtime + + --only run away + if self.skittish and self.state == "run" then + self.run_timer = self.run_timer - dtime + if self.run_timer > 0 then + return + end + --continue + end + + --ignore everything else if breeding + if self.breed_lookout_timer and self.breed_lookout_timer > 0 then + self.state = "breed" + return + --reset the state timer to get the mob out of + --the breed state + elseif self.state == "breed" then + self.state_timer = 0 + end + + --ignore everything else if following + if mobs.check_following(self) and + (not self.breed_lookout_timer or (self.breed_lookout_timer and self.breed_lookout_timer == 0)) and + (not self.breed_timer or (self.breed_timer and self.breed_timer == 0)) then + self.state = "follow" + return + --reset the state timer to get the mob out of + --the follow state - not the cleanest option + --but the easiest + elseif self.state == "follow" then + self.state_timer = 0 + end + + --only attack + if self.hostile and self.attacking then + self.state = "attack" + return + end + + --if finally reached here then do random wander + if self.state_timer <= 0 then + self.state_timer = math.random(4,10) + math.random() + self.state = land_state_list_wandering[math.random(1,#land_state_list_wandering)] + end + +end + +-- states are executed here +local function land_state_execution(self, dtime) + + --[[ -- this is a debug which shows the timer and makes mobs breed 100 times faster + print(self.breed_timer) + if self.breed_timer > 0 then + self.breed_timer = self.breed_timer - (dtime * 100) + if self.breed_timer <= 0 then + self.breed_timer = 0 + end + end + ]]-- + + --no collisionbox exception + if not self.object:get_properties() then + return + end + + --timer to time out looking for mate + if self.breed_lookout_timer and self.breed_lookout_timer > 0 then + self.breed_lookout_timer = self.breed_lookout_timer - dtime + --looking for mate failed + if self.breed_lookout_timer <= 0 then + self.breed_lookout_timer = 0 + end + end + + --cool off after breeding + if self.breed_timer and self.breed_timer > 0 then + self.breed_timer = self.breed_timer - dtime + --do this to skip the first check, using as switch + if self.breed_timer <= 0 then + self.breed_timer = 0 + end + end + + + local pos = self.object:get_pos() + local collisionbox = self.object:get_properties().collisionbox + --get the center of the mob + pos.y = pos.y + (collisionbox[2] + collisionbox[5] / 2) + local current_node = minetest_get_node(pos).name + local float_now = false + + --recheck if in water or lava + if minetest_get_item_group(current_node, "water") ~= 0 or minetest_get_item_group(current_node, "lava") ~= 0 then + float_now = true + end + + --make slow falling mobs fall slow + if self.fall_slow then + local velocity = self.object:get_velocity() + if velocity then + if velocity.y < 0 then + --lua is acting really weird so we have to help it + if round2(self.object:get_acceleration().y, 1) == -self.gravity then + self.object:set_acceleration(vector.new(0,0,0)) + mobs.mob_fall_slow(self) + end + else + if round2(self.object:get_acceleration().y, 1) == 0 then + self.object:set_acceleration(vector.new(0,-self.gravity,0)) + end + end + end + end + + --calculate fall damage + if self.fall_damage then + mobs.calculate_fall_damage(self) + end + + if self.state == "stand" then + + --do animation + mobs.set_mob_animation(self, "stand") + + --set the velocity of the mob + mobs.set_velocity(self,0) + + --animation fixes for explosive mobs + if self.attack_type == "explode" then + mobs.reverse_explosion_animation(self,dtime) + end + + mobs.lock_yaw(self) + elseif self.state == "follow" then + --always look at players + mobs.set_yaw_while_following(self) + + --check distance + local distance_from_follow_person = vector.distance(self.object:get_pos(), self.following_person:get_pos()) + local distance_2d = mobs.get_2d_distance(self.object:get_pos(), self.following_person:get_pos()) + --don't push the player if too close + --don't spin around randomly + if self.follow_distance < distance_from_follow_person and self.minimum_follow_distance < distance_2d then + mobs.set_mob_animation(self, "run") + mobs.set_velocity(self,self.run_velocity) + + if mobs.jump_check(self) == 1 then + mobs.jump(self) + end + else + mobs.set_mob_animation(self, "stand") + mobs.set_velocity(self,0) + end + + elseif self.state == "walk" then + + self.walk_timer = self.walk_timer - dtime + + --reset the walk timer + if self.walk_timer <= 0 then + + --re-randomize the walk timer + self.walk_timer = math.random(1,6) + math.random() + + --set the mob into a random direction + self.yaw = (math.random() * (math.pi * 2)) + end + + --do animation + mobs.set_mob_animation(self, "walk") + + --enable rotation locking + mobs.movement_rotation_lock(self) + + --check for nodes to jump over + local node_in_front_of = mobs.jump_check(self) + + if node_in_front_of == 1 then + mobs.jump(self) + --turn if on the edge of cliff + --(this is written like this because unlike + --jump_check which simply tells the mob to jump + --this requires a mob to turn, removing the + --ease of a full implementation for it in a single + --function) + elseif node_in_front_of == 2 or (self.fear_height ~= 0 and cliff_check(self,dtime)) then + --turn 45 degrees if so + quick_rotate(self,dtime) + --stop the mob so it doesn't fall off + mobs.set_velocity(self,0) + end + + --only move forward if path is clear + if node_in_front_of == 0 or node_in_front_of == 1 then + --set the velocity of the mob + mobs.set_velocity(self,self.walk_velocity) + end + + --animation fixes for explosive mobs + if self.attack_type == "explode" then + mobs.reverse_explosion_animation(self,dtime) + end + + elseif self.state == "run" then + + --do animation + mobs.set_mob_animation(self, "run") + + --enable rotation locking + mobs.movement_rotation_lock(self) + + --check for nodes to jump over + local node_in_front_of = mobs.jump_check(self) + + if node_in_front_of == 1 then + mobs.jump(self) + --turn if on the edge of cliff + --(this is written like this because unlike + --jump_check which simply tells the mob to jump + --this requires a mob to turn, removing the + --ease of a full implementation for it in a single + --function) + elseif node_in_front_of == 2 or (self.fear_height ~= 0 and cliff_check(self,dtime)) then + --turn 45 degrees if so + quick_rotate(self,dtime) + --stop the mob so it doesn't fall off + mobs.set_velocity(self,0) + end + + --only move forward if path is clear + if node_in_front_of == 0 or node_in_front_of == 1 then + --set the velocity of the mob + mobs.set_velocity(self,self.run_velocity) + end + + elseif self.state == "attack" then + + --execute mob attack type + if self.attack_type == "explode" then + + mobs.explode_attack_walk(self, dtime) + + elseif self.attack_type == "punch" then + + mobs.punch_attack_walk(self,dtime) + + elseif self.attack_type == "projectile" then + + mobs.projectile_attack_walk(self,dtime) + + end + elseif self.state == "breed" then + + mobs.breeding_effect(self) + + local mate = mobs.look_for_mate(self) + + --found a mate + if mate then + mobs.set_yaw_while_breeding(self,mate) + mobs.set_velocity(self, self.walk_velocity) + + --smoosh together basically + if vector.distance(self.object:get_pos(), mate:get_pos()) <= self.breed_distance then + mobs.set_mob_animation(self, "stand") + if self.special_breed_timer == 0 then + self.special_breed_timer = 2 --breeding takes 2 seconds + end + + self.special_breed_timer = self.special_breed_timer - dtime + if self.special_breed_timer <= 0 then + + --pop a baby out, it's a miracle! + local baby_pos = vector.divide(vector.add(self.object:get_pos(), mate:get_pos()), 2) + minetest.add_entity(baby_pos, self.name, minetest.serialize({baby = true, grow_up_timer = self.grow_up_goal, bred = true})) + + mobs.play_sound_specific(self,"item_drop_pickup") + + self.special_breed_timer = 0 + self.breed_lookout_timer = 0 + self.breed_timer = self.breed_timer_cooloff + + mate:get_luaentity().special_breed_timer = 0 + mate:get_luaentity().breed_lookout_timer = 0 + mate:get_luaentity().breed_timer = self.breed_timer_cooloff -- can reuse because it's the same mob + end + else + mobs.set_mob_animation(self, "walk") + end + --couldn't find a mate, just stand there until the player pushes it towards one + --or the timer runs out + else + mobs.set_mob_animation(self, "stand") + mobs.set_velocity(self,0) + end + + end + if float_now then + mobs.float(self) + else + local acceleration = self.object:get_acceleration() + if acceleration and acceleration.y == 0 then + self.object:set_acceleration(vector.new(0,-self.gravity,0)) + end + end +end + + + + +--[[ + _____ _ +/ ___| (_) +\ `--.__ ___ _ __ ___ + `--. \ \ /\ / / | '_ ` _ \ +/\__/ /\ V V /| | | | | | | +\____/ \_/\_/ |_|_| |_| |_| +]]-- + + + +-- state switching logic (stand, walk, run, attacks) +local swim_state_list_wandering = {"stand", "swim"} + +local function swim_state_switch(self, dtime) + self.state_timer = self.state_timer - dtime + if self.state_timer <= 0 then + self.state_timer = math.random(4,10) + math.random() + self.state = swim_state_list_wandering[math.random(1,#swim_state_list_wandering)] + end +end + + +--check if a mob needs to turn while swimming +local function swim_turn_check(self,dtime) + + local pos = self.object:get_pos() + pos.y = pos.y + 0.1 + local dir = minetest_yaw_to_dir(self.yaw) + + local collisionbox = self.object:get_properties().collisionbox + local radius = collisionbox[4] + 0.5 + + vector.multiply(dir, radius) + + local test_dir = vector.add(pos,dir) + + local green_flag_1 = minetest_get_item_group(minetest_get_node(test_dir).name, "solid") ~= 0 + + return green_flag_1 +end + +--this is to swap the built in engine acceleration modifier +local function swim_physics_swapper(self, inside_swim_node) + --should be swimming, gravity is applied, switch to floating + if inside_swim_node and self.object:get_acceleration().y ~= 0 then + self.object:set_acceleration(vector.new(0,0,0)) + --not be swim, gravity isn't applied, switch to falling + elseif not inside_swim_node and self.object:get_acceleration().y == 0 then + self.pitch = 0 + self.object:set_acceleration(vector.new(0,-self.gravity,0)) + end +end + + +local random_pitch_multiplier = {-1,1} +-- states are executed here +local function swim_state_execution(self, dtime) + + local pos = self.object:get_pos() + + pos.y = pos.y + self.object:get_properties().collisionbox[5] + local current_node = minetest_get_node(pos).name + local inside_swim_node = false + + --quick scan everything to see if inside swim node + for _,id in pairs(self.swim_in) do + if id == current_node then + inside_swim_node = true + break + end + end + + --turn gravity on or off + swim_physics_swapper(self, inside_swim_node) + + --swim properly if inside swim node + if inside_swim_node then + + if self.state == "stand" then + + --do animation + mobs.set_mob_animation(self, "stand") + + mobs.set_swim_velocity(self,0) + + if self.tilt_swim then + mobs.set_static_pitch(self) + end + + mobs.lock_yaw(self) + elseif self.state == "swim" then + self.walk_timer = self.walk_timer - dtime + --reset the walk timer + if self.walk_timer <= 0 then + --re-randomize the walk timer + self.walk_timer = math.random(1,6) + math.random() + --set the mob into a random direction + self.yaw = (math.random() * (math.pi * 2)) + + --create a truly random pitch, since there is no easy access to pitch math that I can find + self.pitch = math.random() * math.random(1,3) * random_pitch_multiplier[math.random(1,2)] + end + + --do animation + mobs.set_mob_animation(self, "walk") + + --do a quick turn to make mob continuously move + --if in a fish tank or something + if swim_turn_check(self,dtime) then + quick_rotate(self,dtime) + end + + mobs.set_swim_velocity(self,self.walk_velocity) + + --only enable tilt swimming if enabled + if self.tilt_swim then + mobs.set_dynamic_pitch(self) + end + + --enable rotation locking + mobs.movement_rotation_lock(self) + end + --flop around if not inside swim node + else + --do animation + mobs.set_mob_animation(self, "stand") + + mobs.flop(self) + + if self.tilt_swim then + mobs.set_static_pitch(self) + end + end + +end + + +--[[ +______ _ +| ___| | +| |_ | |_ _ +| _| | | | | | +| | | | |_| | +\_| |_|\__, | + __/ | + |___/ +]]-- + +-- state switching logic (stand, walk, run, attacks) +local fly_state_list_wandering = {"stand", "fly"} + +local function fly_state_switch(self, dtime) + + if self.hostile and self.attacking then + self.state = "attack" + return + end + + self.state_timer = self.state_timer - dtime + if self.state_timer <= 0 then + self.state_timer = math.random(4,10) + math.random() + self.state = fly_state_list_wandering[math.random(1,#fly_state_list_wandering)] + end +end + + +--check if a mob needs to turn while flying +local function fly_turn_check(self, dtime) + + local pos = self.object:get_pos() + pos.y = pos.y + 0.1 + local dir = minetest_yaw_to_dir(self.yaw) + + local collisionbox = self.object:get_properties().collisionbox + local radius = collisionbox[4] + 0.5 + + vector.multiply(dir, radius) + + local test_dir = vector.add(pos,dir) + + local green_flag_1 = minetest_get_item_group(minetest_get_node(test_dir).name, "solid") ~= 0 + + return green_flag_1 +end + +--this is to swap the built in engine acceleration modifier +local function fly_physics_swapper(self, inside_fly_node) + + --should be flyming, gravity is applied, switch to floating + if inside_fly_node and self.object:get_acceleration().y ~= 0 then + self.object:set_acceleration(vector.new(0,0,0)) + --not be fly, gravity isn't applied, switch to falling + elseif not inside_fly_node and self.object:get_acceleration().y == 0 then + self.pitch = 0 + self.object:set_acceleration(vector.new(0,-self.gravity,0)) + end +end + + +local random_pitch_multiplier = {-1,1} +-- states are executed here +local function fly_state_execution(self, dtime) + local pos = self.object:get_pos() + pos.y = pos.y + 0.1 + local current_node = minetest_get_node(pos).name + local inside_fly_node = minetest_get_item_group(current_node, "solid") == 0 + + local float_now = false + --recheck if in water or lava + if minetest_get_item_group(current_node, "water") ~= 0 or minetest_get_item_group(current_node, "lava") ~= 0 then + inside_fly_node = false + float_now = true + end + + --turn gravity on or off + fly_physics_swapper(self,inside_fly_node) + + --fly properly if inside fly node + if inside_fly_node then + if self.state == "stand" then + + --do animation + mobs.set_mob_animation(self, "stand") + + mobs.set_fly_velocity(self,0) + + if self.tilt_fly then + mobs.set_static_pitch(self) + end + + mobs.lock_yaw(self) + + elseif self.state == "fly" then + + self.walk_timer = self.walk_timer - dtime + + --reset the walk timer + if self.walk_timer <= 0 then + --re-randomize the walk timer + self.walk_timer = math.random(1,6) + math.random() + --set the mob into a random direction + self.yaw = (math.random() * (math.pi * 2)) + + --create a truly random pitch, since there is no easy access to pitch math that I can find + self.pitch = math.random() * math.random(1,3) * random_pitch_multiplier[math.random(1,2)] + end + + --do animation + mobs.set_mob_animation(self, "walk") + + --do a quick turn to make mob continuously move + --if in a bird cage or something + if fly_turn_check(self,dtime) then + quick_rotate(self,dtime) + end + + if self.tilt_fly then + mobs.set_dynamic_pitch(self) + end + + mobs.set_fly_velocity(self,self.walk_velocity) + + --enable rotation locking + mobs.movement_rotation_lock(self) + elseif self.state == "attack" then + --execute mob attack type + --if self.attack_type == "explode" then + + --mobs.explode_attack_fly(self, dtime) + + --elseif self.attack_type == "punch" then + + --mobs.punch_attack_fly(self,dtime) + + if self.attack_type == "projectile" then + + mobs.projectile_attack_fly(self,dtime) + + end + end + else + --make the mob float + if self.floats and float_now then + mobs.set_velocity(self, 0) + + mobs.float(self) + + if self.tilt_fly then + mobs.set_static_pitch(self) + end + end + end +end + + +--[[ + ___ + |_ | + | |_ _ _ __ ___ _ __ + | | | | | '_ ` _ \| '_ \ +/\__/ / |_| | | | | | | |_) | +\____/ \__,_|_| |_| |_| .__/ + | | + |_| +]]-- + + +--check if a mob needs to turn while jumping +--[[local function jump_turn_check(self, dtime) + local pos = self.object:get_pos() + pos.y = pos.y + 0.1 + local dir = minetest_yaw_to_dir(self.yaw) + + local collisionbox = self.object:get_properties().collisionbox + local radius = collisionbox[4] + 0.5 + + vector.multiply(dir, radius) + + local test_dir = vector.add(pos,dir) + + local green_flag_1 = minetest_get_item_group(minetest_get_node(test_dir).name, "solid") ~= 0 + + return green_flag_1 +end]] + +-- state switching logic (stand, jump, run, attacks) +local jump_state_list_wandering = {"stand", "jump"} + +local function jump_state_switch(self, dtime) + self.state_timer = self.state_timer - dtime + if self.state_timer <= 0 then + self.state_timer = math.random(4,10) + math.random() + self.state = jump_state_list_wandering[math.random(1,#jump_state_list_wandering)] + end +end + +-- states are executed here +local function jump_state_execution(self, dtime) + local node_in_front_of = mobs.jump_check(self) + local pos = self.object:get_pos() + local collisionbox = self.object:get_properties().collisionbox + --get the center of the mob + pos.y = pos.y + (collisionbox[2] + collisionbox[5] / 2) + local current_node = minetest_get_node(pos).name + + local float_now = false + + --recheck if in water or lava + if minetest_get_item_group(current_node, "water") ~= 0 or minetest_get_item_group(current_node, "lava") ~= 0 then + float_now = true + end + + if self.state == "stand" then + + --do animation + mobs.set_mob_animation(self, "stand") + + --set the velocity of the mob + mobs.set_velocity(self,0) + + mobs.lock_yaw(self) + + elseif self.state == "jump" then + + self.walk_timer = self.walk_timer - dtime + + --reset the jump timer + if self.walk_timer <= 0 then + + --re-randomize the jump timer + self.walk_timer = math.random(1,6) + math.random() + + --set the mob into a random direction + self.yaw = (math.random() * (math.pi * 2)) + end + + --do animation + mobs.set_mob_animation(self, "walk") + + --enable rotation locking + mobs.movement_rotation_lock(self) + + --jumping mobs are more loosey goosey + if node_in_front_of == 1 then + quick_rotate(self,dtime) + end + + --only move forward if path is clear + mobs.jump_move(self,self.walk_velocity) + + elseif self.state == "run" then + print("run") + elseif self.state == "attack" then + print("attack") + end + if float_now then + mobs.float(self) + end +end + + + + +--[[ +___ ___ _ _ _ +| \/ | (_) | | (_) +| . . | __ _ _ _ __ | | ___ __ _ _ ___ +| |\/| |/ _` | | '_ \ | | / _ \ / _` | |/ __| +| | | | (_| | | | | | | |___| (_) | (_| | | (__ +\_| |_/\__,_|_|_| |_| \_____/\___/ \__, |_|\___| + __/ | + |___/ +]]-- + +--the main loop +function mobs.mob_step(self, dtime) + + --do not continue if non-existent + if not self or not self.object or not self.object:get_luaentity() then + self.object:remove() + return false + end + + + --DEBUG TIME! + --REMEMBER TO MOVE THIS AFTER DEATH CHECK + + --if self.has_head then + -- mobs.do_head_logic(self,dtime) + --end + + + + --if true then--DEBUG DEBUG DEBUG DEBUG DEBUG DEBUG DEBUG DEBUG DEBUG DEBUG DEBUG DEBUG DEBUG DEBUG DEBUG + -- return + --end + + --despawn mechanism + --don't despawned tamed or bred mobs + if not self.tamed and not self.bred then + self.lifetimer = self.lifetimer - dtime + if self.lifetimer <= 0 then + self.lifetimer = self.lifetimer_reset + if not mobs.check_for_player_within_area(self, 64) then + --print("removing in MAIN LOGIC!") + self.object:remove() + return + end + end + end + + --color modifier which coincides with the pause_timer + if self.old_health and self.health < self.old_health then + self.object:set_texture_mod("^[colorize:red:120") + --fix double death sound + if self.health > 0 then + mobs.play_sound(self,"damage") + end + end + self.old_health = self.health + + --do death logic (animation, poof, explosion, etc) + if self.health <= 0 or self.dead then + --play death sound once + if not self.played_death_sound then + self.dead = true + mobs.play_sound(self,"death") + self.played_death_sound = true + end + + mobs.death_logic(self, dtime) + + --this is here because the mob must continue to move + --while stunned before coming to a complete halt even during + --the death tilt + if self.pause_timer > 0 then + self.pause_timer = self.pause_timer - dtime + --perfectly reset pause_timer + if self.pause_timer < 0 then + self.pause_timer = 0 + end + end + + return + end + + mobs.random_sound_handling(self,dtime) + + --mobs drowning mechanic + if not self.breathes_in_water then + + local pos = self.object:get_pos() + + pos.y = pos.y + self.eye_height + + local node = minetest_get_node(pos).name + + if minetest_get_item_group(node, "water") ~= 0 then + self.breath = self.breath - dtime + + --reset breath when drowning + if self.breath <= 0 then + self.health = self.health - 4 + self.breath = 1 + self.pause_timer = 0.5 + end + + elseif self.breath < self.breath_max then + self.breath = self.breath + dtime + --clean timer reset + if self.breath > self.breath_max then + self.breath = self.breath_max + end + end + end + + --set mobs on fire when burned by sunlight + if self.ignited_by_sunlight then + local pos = self.object:get_pos() + pos.y = pos.y + 0.1 + + if self.burn_timer > 0 then + self.burn_timer = self.burn_timer - dtime + + if self.burn_timer <= 0 then + self.health = self.health - 4 + self.burn_timer = 0 + end + end + + 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 + + --baby grows up + if self.baby then + --print(self.grow_up_timer) + --catch missing timer + if not self.grow_up_timer then + self.grow_up_timer = self.grow_up_goal + end + + self.grow_up_timer = self.grow_up_timer - dtime + + --baby grows up! + if self.grow_up_timer <= 0 then + self.grow_up_timer = 0 + mobs.baby_grow_up(self) + end + end + + --do custom mob instructions + if self.do_custom then + -- when false skip going any further + if self.do_custom(self, dtime) == false then + --this needs to be here or the mob becomes immortal + if self.pause_timer > 0 then + self.pause_timer = self.pause_timer - dtime + --perfectly reset pause_timer + if self.pause_timer <= 0 then + self.pause_timer = 0 + self.object:set_texture_mod("") + end + end + --this overrides internal lua collision detection + return + end + end + + local attacking = nil + + --scan for players within eyesight + if self.hostile then + --true for line_of_sight is debug + attacking = mobs.detect_closest_player_within_radius(self,true,self.view_range,self.eye_height) + + --go get the closest player + if attacking then + + self.memory = 6 --6 seconds of memory + + --set initial punch timer + if self.attacking == nil then + if self.attack_type == "punch" then + self.punch_timer = -1 + end + end + self.attacking = attacking + + --no player in area + elseif self.memory > 0 then + --try to remember + self.memory = self.memory - dtime + --get if memory player is within viewing range + if self.attacking and self.attacking:is_player() then + local distance = vector.distance(self.object:get_pos(), self.attacking:get_pos()) + if distance > self.view_range then + self.memory = 0 + end + --out of viewing range, forget em + else + self.memory = 0 + end + + if self.memory <= 0 then + + --reset states when coming out of hostile state + if self.attacking then + self.state_timer = -1 + end + + self.attacking = nil + self.memory = 0 + end + end + end + + --count down hostile cooldown timer when no players in range + if self.neutral and self.hostile and not attacking and self.hostile_cooldown_timer then + + self.hostile_cooldown_timer = self.hostile_cooldown_timer - dtime + + if self.hostile_cooldown_timer <= 0 then + self.hostile = false + self.hostile_cooldown_timer = 0 + end + end + + --mobs flow from Crafter + local pos = self.object:get_pos() + if pos then + local flow_dir = flow(pos) + if flow_dir then + flow_dir = vector.multiply(flow_dir,10) + local vel = self.object:get_velocity() + local acceleration = vector.new(flow_dir.x-vel.x,flow_dir.y-vel.y,flow_dir.z-vel.z) + acceleration = vector.multiply(acceleration, 0.01) + self.object:add_velocity(acceleration) + end + end + + --mob is stunned after being hit + if self.pause_timer > 0 then + self.pause_timer = self.pause_timer - dtime + --don't break eye contact + if self.hostile and self.attacking then + mobs.set_yaw_while_attacking(self) + end + + --perfectly reset pause_timer + if self.pause_timer <= 0 then + self.pause_timer = 0 + self.object:set_texture_mod("") + end + + --stop walking mobs from falling through the water + if not self.jump_only and not self.swim and not self.fly then + local pos = self.object:get_pos() + local collisionbox = self.object:get_properties().collisionbox + --get the center of the mob + pos.y = pos.y + (collisionbox[2] + collisionbox[5] / 2) + local current_node = minetest_get_node(pos).name + + --recheck if in water or lava + if minetest_get_item_group(current_node, "water") ~= 0 or minetest_get_item_group(current_node, "lava") ~= 0 then + mobs.float(self) + end + end + + --stop projectile mobs from being completely disabled while stunned + if self.projectile_timer and self.projectile_timer > 0.01 then + self.projectile_timer = self.projectile_timer - dtime + if self.projectile_timer < 0.01 then + self.projectile_timer = 0.01 + end + end + + return -- don't allow collision detection + --do normal ai + else + --jump only (like slimes) + if self.jump_only then + jump_state_switch(self, dtime) + jump_state_execution(self, dtime) + --swimming + elseif self.swim then + swim_state_switch(self, dtime) + swim_state_execution(self, dtime) + --flying + elseif self.fly then + fly_state_switch(self, dtime) + fly_state_execution(self,dtime) + --regular mobs that walk around + else + land_state_switch(self, dtime) + land_state_execution(self,dtime) + end + end + + --do not continue if non-existent + if not self or not self.object or not self.object:get_luaentity() then + self.object:remove() + return false + end + + --make it so mobs do not glitch out when walking around/jumping + mobs.swap_auto_step_height_adjust(self) + + + -- can mob be pushed, if so calculate direction -- do this last (overrides everything) + if self.pushable then + mobs.collision(self) + end + + --overrides absolutely everything + --mobs get stuck in cobwebs like players + if not self.ignores_cobwebs then + local pos = self.object:get_pos() + local node = pos and minetest_get_node(pos).name + if node == "mcl_core:cobweb" then + --fight the rest of the api + if self.object:get_acceleration().y ~= 0 then + self.object:set_acceleration(vector.new(0,0,0)) + end + mobs.stick_in_cobweb(self) + self.was_stuck_in_cobweb = true + else + --do not override other functions + if self.was_stuck_in_cobweb == true then + --return the mob back to normal + self.was_stuck_in_cobweb = nil + if self.object:get_acceleration().y == 0 and not self.swim and not self.fly then + self.object:set_acceleration(vector.new(0,-self.gravity,0)) + end + end + end + end + + self.old_velocity = self.object:get_velocity() + self.old_pos = self.object:get_pos() +end diff --git a/mods/ENTITIES/mcl_mobs/api/mob_functions/animation.lua b/mods/ENTITIES/mcl_mobs/api/mob_functions/animation.lua new file mode 100644 index 000000000..cea6d838b --- /dev/null +++ b/mods/ENTITIES/mcl_mobs/api/mob_functions/animation.lua @@ -0,0 +1,257 @@ +local math = math +local vector = vector + +local HALF_PI = math.pi/2 + + +local vector_direction = vector.direction +local vector_distance = vector.distance +local vector_new = vector.new + +local minetest_dir_to_yaw = minetest.dir_to_yaw + +-- set defined animation +mobs.set_mob_animation = function(self, anim, fixed_frame) + + if not self.animation or not anim then + return + end + + if self.state == "die" and anim ~= "die" and anim ~= "stand" then + return + end + + + if (not self.animation[anim .. "_start"] or not self.animation[anim .. "_end"]) then + return + end + + --animations break if they are constantly set + --so we put this return gate to check if it is + --already at the animation we are trying to implement + if self.current_animation == anim then + return + end + + local a_start = self.animation[anim .. "_start"] + local a_end + + if fixed_frame then + a_end = a_start + else + a_end = self.animation[anim .. "_end"] + end + + self.object:set_animation({ + x = a_start, + y = a_end}, + self.animation[anim .. "_speed"] or self.animation.speed_normal or 15, + 0, self.animation[anim .. "_loop"] ~= false) + + self.current_animation = anim +end + + + + +mobs.death_effect = function(pos, yaw, collisionbox, rotate) + local min, max + if collisionbox then + min = {x=collisionbox[1], y=collisionbox[2], z=collisionbox[3]} + max = {x=collisionbox[4], y=collisionbox[5], z=collisionbox[6]} + else + min = { x = -0.5, y = 0, z = -0.5 } + max = { x = 0.5, y = 0.5, z = 0.5 } + end + if rotate then + min = vector.rotate(min, {x=0, y=yaw, z=math.pi/2}) + max = vector.rotate(max, {x=0, y=yaw, z=math.pi/2}) + min, max = vector.sort(min, max) + min = vector.multiply(min, 0.5) + max = vector.multiply(max, 0.5) + end + + minetest.add_particlespawner({ + amount = 50, + time = 0.001, + minpos = vector.add(pos, min), + maxpos = vector.add(pos, max), + minvel = vector_new(-5,-5,-5), + maxvel = vector_new(5,5,5), + minexptime = 1.1, + maxexptime = 1.5, + minsize = 1, + maxsize = 2, + collisiondetection = false, + vertical = false, + texture = "mcl_particles_mob_death.png^[colorize:#000000:255", + }) + + minetest.sound_play("mcl_mobs_mob_poof", { + pos = pos, + gain = 1.0, + max_hear_distance = 8, + }, true) +end + + +--this allows auto facedir rotation while making it so mobs +--don't look like wet noodles flopping around +mobs.movement_rotation_lock = function(self) + local current_engine_yaw = self.object:get_yaw() + local current_lua_yaw = self.yaw + + if current_engine_yaw > math.pi * 2 then + current_engine_yaw = current_engine_yaw - (math.pi * 2) + end + + if math.abs(current_engine_yaw - current_lua_yaw) <= 0.05 and self.object:get_properties().automatic_face_movement_dir then + self.object:set_properties{automatic_face_movement_dir = false} + elseif math.abs(current_engine_yaw - current_lua_yaw) > 0.05 and self.object:get_properties().automatic_face_movement_dir == false then + self.object:set_properties{automatic_face_movement_dir = self.rotate} + end +end + + +--this is used when a mob is chasing a player +mobs.set_yaw_while_attacking = function(self) + + if self.object:get_properties().automatic_face_movement_dir then + self.object:set_properties{automatic_face_movement_dir = false} + end + + --turn positions into pseudo 2d vectors + local pos1 = self.object:get_pos() + pos1.y = 0 + + local pos2 = self.attacking:get_pos() + pos2.y = 0 + + local new_direction = vector_direction(pos1,pos2) + local new_yaw = minetest_dir_to_yaw(new_direction) + + self.object:set_yaw(new_yaw) + self.yaw = new_yaw +end + +--this is used to unlock a mob's yaw after attacking +mobs.unlock_yaw = function(self) + if self.object:get_properties().automatic_face_movement_dir == false then + self.object:set_properties{automatic_face_movement_dir = self.rotate} + end +end + +--this is used to lock a mob's yaw when they're standing +mobs.lock_yaw = function(self) + if self.object:get_properties().automatic_face_movement_dir then + self.object:set_properties{automatic_face_movement_dir = false} + end +end + + +local calculate_pitch = function(self) + local pos = self.object:get_pos() + local pos2 = self.old_pos + + if pos == nil or pos2 == nil then + return false + end + + return minetest_dir_to_yaw(vector_new(vector_distance(vector_new(pos.x,0,pos.z),vector_new(pos2.x,0,pos2.z)),0,pos.y - pos2.y)) + HALF_PI +end + +--this is a helper function used to make mobs pitch rotation dynamically flow when flying/swimming +mobs.set_dynamic_pitch = function(self) + local pitch = calculate_pitch(self) + + if not pitch then + return + end + + local current_rotation = self.object:get_rotation() + + current_rotation.x = pitch + + self.object:set_rotation(current_rotation) + + self.pitch_switch = "dynamic" +end + +--this is a helper function used to make mobs pitch rotation reset when flying/swimming +mobs.set_static_pitch = function(self) + + if self.pitch_switch == "static" then + return + end + + local current_rotation = self.object:get_rotation() + + current_rotation.x = 0 + + self.object:set_rotation(current_rotation) + self.pitch_switch = "static" +end + +--this is a helper function for mobs explosion animation +mobs.handle_explosion_animation = function(self) + + --secondary catch-all + if not self.explosion_animation then + self.explosion_animation = 0 + end + + --the timer works from 0 for sense of a 0 based counting + --but this just bumps it up so it's usable in here + local explosion_timer_adjust = self.explosion_animation + 1 + + + local visual_size_modified = table.copy(self.visual_size_origin) + + visual_size_modified.x = visual_size_modified.x * (explosion_timer_adjust ^ 3) + visual_size_modified.y = visual_size_modified.y * explosion_timer_adjust + + self.object:set_properties({visual_size = visual_size_modified}) +end + + +--this is used when a mob is following player +mobs.set_yaw_while_following = function(self) + + if self.object:get_properties().automatic_face_movement_dir then + self.object:set_properties{automatic_face_movement_dir = false} + end + + --turn positions into pseudo 2d vectors + local pos1 = self.object:get_pos() + pos1.y = 0 + + local pos2 = self.following_person:get_pos() + pos2.y = 0 + + local new_direction = vector_direction(pos1,pos2) + local new_yaw = minetest_dir_to_yaw(new_direction) + + self.object:set_yaw(new_yaw) + self.yaw = new_yaw +end + +--this is used for when mobs breed +mobs.set_yaw_while_breeding = function(self, mate) + + if self.object:get_properties().automatic_face_movement_dir then + self.object:set_properties{automatic_face_movement_dir = false} + end + + --turn positions into pseudo 2d vectors + local pos1 = self.object:get_pos() + pos1.y = 0 + + local pos2 = mate:get_pos() + pos2.y = 0 + + local new_direction = vector_direction(pos1,pos2) + local new_yaw = minetest_dir_to_yaw(new_direction) + + self.object:set_yaw(new_yaw) + self.yaw = new_yaw +end \ No newline at end of file diff --git a/mods/ENTITIES/mcl_mobs/api/mob_functions/attack_type_instructions.lua b/mods/ENTITIES/mcl_mobs/api/mob_functions/attack_type_instructions.lua new file mode 100644 index 000000000..ac10194e5 --- /dev/null +++ b/mods/ENTITIES/mcl_mobs/api/mob_functions/attack_type_instructions.lua @@ -0,0 +1,347 @@ +local vector_direction = vector.direction +--local minetest_dir_to_yaw = minetest.dir_to_yaw +local vector_distance = vector.distance +local vector_multiply = vector.multiply +local math_random = math.random + +--[[ + _ _ _ _ +| | | | | | | | +| | | | __ _ _ __ __| | | | +| | | | / _` | '_ \ / _` | | | +|_| | |___| (_| | | | | (_| | |_| +(_) \_____/\__,_|_| |_|\__,_| (_) +]]-- + + + +--[[ + _____ _ _ +| ___| | | | | +| |____ ___ __ | | ___ __| | ___ +| __\ \/ / '_ \| |/ _ \ / _` |/ _ \ +| |___> <| |_) | | (_) | (_| | __/ +\____/_/\_\ .__/|_|\___/ \__,_|\___| + | | + |_| +]]-- + +mobs.explode_attack_walk = function(self,dtime) + + --this needs an exception + if self.attacking == nil or not self.attacking:is_player() then + self.attacking = nil + return + end + + mobs.set_yaw_while_attacking(self) + + local distance_from_attacking = vector_distance(self.object:get_pos(), self.attacking:get_pos()) + + --make mob walk up to player within 2 nodes distance then start exploding + if distance_from_attacking >= self.reach and + --don't allow explosion to cancel unless out of the reach boundary + not (self.explosion_animation and self.explosion_animation > 0 and distance_from_attacking <= self.defuse_reach) then + + mobs.set_velocity(self, self.run_velocity) + mobs.set_mob_animation(self,"run") + + mobs.reverse_explosion_animation(self,dtime) + else + mobs.set_velocity(self,0) + + --this is the only way I can reference this without dumping extra data on all mobs + if not self.explosion_animation then + self.explosion_animation = 0 + end + + --play ignite sound + if self.explosion_animation == 0 then + mobs.play_sound(self,"attack") + end + + mobs.set_mob_animation(self,"stand") + + mobs.handle_explosion_animation(self) + + self.explosion_animation = self.explosion_animation + (dtime/2.5) + end + + --make explosive mobs jump + --check for nodes to jump over + --explosive mobs will just ride against walls for now + local node_in_front_of = mobs.jump_check(self) + if node_in_front_of == 1 then + mobs.jump(self) + end + + --do biggening explosion thing + if self.explosion_animation and self.explosion_animation > self.explosion_timer then + mcl_explosions.explode(self.object:get_pos(), self.explosion_strength,{ drop_chance = 1.0 }) + self.object:remove() + end +end + + +--this is a small helper function to make working with explosion animations easier +mobs.reverse_explosion_animation = function(self,dtime) + --if explosion animation was greater than 0 then reverse it + if self.explosion_animation and self.explosion_animation > 0 then + self.explosion_animation = self.explosion_animation - dtime + if self.explosion_animation < 0 then + self.explosion_animation = 0 + end + end + + mobs.handle_explosion_animation(self) +end + + + + +--[[ +______ _ +| ___ \ | | +| |_/ / _ _ __ ___| |__ +| __/ | | | '_ \ / __| '_ \ +| | | |_| | | | | (__| | | | +\_| \__,_|_| |_|\___|_| |_| +]]-- + + + +mobs.punch_attack_walk = function(self,dtime) + --this needs an exception + if self.attacking == nil or not self.attacking:is_player() then + self.attacking = nil + return + end + + local distance_from_attacking = mobs.get_2d_distance(self.object:get_pos(), self.attacking:get_pos()) + + if distance_from_attacking >= self.minimum_follow_distance then + mobs.set_velocity(self, self.run_velocity) + mobs.set_mob_animation(self, "run") + else + mobs.set_velocity(self, 0) + mobs.set_mob_animation(self, "stand") + end + + mobs.set_yaw_while_attacking(self) + + --make punchy mobs jump + --check for nodes to jump over + --explosive mobs will just ride against walls for now + local node_in_front_of = mobs.jump_check(self) + + if node_in_front_of == 1 then + mobs.jump(self) + end + + --mobs that can climb over stuff + if self.always_climb and node_in_front_of > 0 then + mobs.climb(self) + end + + + --auto reset punch_timer + if not self.punch_timer then + self.punch_timer = 0 + end + + if self.punch_timer > 0 then + self.punch_timer = self.punch_timer - dtime + end +end + +mobs.punch_attack = function(self) + + self.attacking:punch(self.object, 1.0, { + full_punch_interval = 1.0, + damage_groups = {fleshy = self.damage} + }, nil) + + self.punch_timer = self.punch_timer_cooloff + + + --knockback + local pos1 = self.object:get_pos() + pos1.y = 0 + local pos2 = self.attacking:get_pos() + pos2.y = 0 + local dir = vector_direction(pos1,pos2) + + dir = vector_multiply(dir,3) + + if self.attacking:get_velocity().y <= 1 then + dir.y = 5 + end + + self.attacking:add_velocity(dir) +end + + + + +--[[ +______ _ _ _ _ +| ___ \ (_) | | (_) | +| |_/ / __ ___ _ ___ ___| |_ _| | ___ +| __/ '__/ _ \| |/ _ \/ __| __| | |/ _ \ +| | | | | (_) | | __/ (__| |_| | | __/ +\_| |_| \___/| |\___|\___|\__|_|_|\___| + _/ | + |__/ +]]-- + + +mobs.projectile_attack_walk = function(self,dtime) + + --this needs an exception + if self.attacking == nil or not self.attacking:is_player() then + self.attacking = nil + return + end + + mobs.set_yaw_while_attacking(self) + + local distance_from_attacking = vector_distance(self.object:get_pos(), self.attacking:get_pos()) + + + if distance_from_attacking >= self.reach then + mobs.set_velocity(self, self.run_velocity) + mobs.set_mob_animation(self,"run") + else + mobs.set_velocity(self,0) + mobs.set_mob_animation(self,"stand") + end + + --do this to not load data into other mobs + if not self.projectile_timer then + self.projectile_timer = math_random(self.projectile_cooldown_min, self.projectile_cooldown_max) + end + + --run projectile timer + if self.projectile_timer > 0 then + self.projectile_timer = self.projectile_timer - dtime + + --shoot + if self.projectile_timer <= 0 then + --reset timer + self.projectile_timer = math_random(self.projectile_cooldown_min, self.projectile_cooldown_max) + mobs.shoot_projectile(self) + end + end + + --make shooty mobs jump + --check for nodes to jump over + --explosive mobs will just ride against walls for now + local node_in_front_of = mobs.jump_check(self) + if node_in_front_of == 1 then + mobs.jump(self) + end + +end + + + + + + + + + +--[[ + _ ______ _ _ +| | | ___| | | | +| | | |_ | |_ _ | | +| | | _| | | | | | | | +|_| | | | | |_| | |_| +(_) \_| |_|\__, | (_) + __/ | + |___/ +]]-- + + + + +--[[ +______ _ _ _ _ +| ___ \ (_) | | (_) | +| |_/ / __ ___ _ ___ ___| |_ _| | ___ +| __/ '__/ _ \| |/ _ \/ __| __| | |/ _ \ +| | | | | (_) | | __/ (__| |_| | | __/ +\_| |_| \___/| |\___|\___|\__|_|_|\___| + _/ | + |__/ +]]-- + +local random_pitch_multiplier = {-1,1} + +mobs.projectile_attack_fly = function(self, dtime) + --this needs an exception + if self.attacking == nil or not self.attacking:is_player() then + self.attacking = nil + return + end + + --this is specifically for random ghast movement + if self.fly_random_while_attack then + + --enable rotation locking + mobs.movement_rotation_lock(self) + + self.walk_timer = self.walk_timer - dtime + + --reset the walk timer + if self.walk_timer <= 0 then + --re-randomize the walk timer + self.walk_timer = math.random(1,6) + math.random() + --set the mob into a random direction + self.yaw = (math_random() * (math.pi * 2)) + --create a truly random pitch, since there is no easy access to pitch math that I can find + self.pitch = math_random() * math.random(1,3) * random_pitch_multiplier[math_random(1,2)] + end + + mobs.set_fly_velocity(self, self.run_velocity) + + else + + mobs.set_yaw_while_attacking(self) + + local distance_from_attacking = vector_distance(self.object:get_pos(), self.attacking:get_pos()) + + if distance_from_attacking >= self.reach then + mobs.set_pitch_while_attacking(self) + mobs.set_fly_velocity(self, self.run_velocity) + mobs.set_mob_animation(self,"run") + else + mobs.set_pitch_while_attacking(self) + mobs.set_fly_velocity(self, 0) + mobs.set_mob_animation(self,"stand") + end + end + + + --do this to not load data into other mobs + if not self.projectile_timer then + self.projectile_timer = math_random(self.projectile_cooldown_min, self.projectile_cooldown_max) + end + + --run projectile timer + if self.projectile_timer > 0 then + self.projectile_timer = self.projectile_timer - dtime + + --shoot + if self.projectile_timer <= 0 then + + if self.fly_random_while_attack then + mobs.set_yaw_while_attacking(self) + self.walk_timer = 0 + end + --reset timer + self.projectile_timer = math_random(self.projectile_cooldown_min, self.projectile_cooldown_max) + mobs.shoot_projectile(self) + end + end +end \ No newline at end of file diff --git a/mods/ENTITIES/mcl_mobs/api.lua b/mods/ENTITIES/mcl_mobs/api/mob_functions/backup_code_api.txt similarity index 50% rename from mods/ENTITIES/mcl_mobs/api.lua rename to mods/ENTITIES/mcl_mobs/api/mob_functions/backup_code_api.txt index 07e2704f3..48233d0b4 100644 --- a/mods/ENTITIES/mcl_mobs/api.lua +++ b/mods/ENTITIES/mcl_mobs/api/mob_functions/backup_code_api.txt @@ -1,126 +1,7 @@ +local math = math +local vector = vector --- API for Mobs Redo: MineClone 2 Edition (MRM) - -mobs = {} -mobs.mod = "mrm" -mobs.version = "20210106" -- don't rely too much on this, rarely updated, if ever - -local MAX_MOB_NAME_LENGTH = 30 -local HORNY_TIME = 30 -local HORNY_AGAIN_TIME = 300 -local CHILD_GROW_TIME = 60*20 -local DEATH_DELAY = 0.5 -local DEFAULT_FALL_SPEED = -10 -local FLOP_HEIGHT = 5.0 -local FLOP_HOR_SPEED = 1.5 - -local MOB_CAP = {} -MOB_CAP.hostile = 70 -MOB_CAP.passive = 10 -MOB_CAP.ambient = 15 -MOB_CAP.water = 15 - --- Localize -local S = minetest.get_translator("mcl_mobs") - --- CMI support check -local use_cmi = minetest.global_exists("cmi") - - --- Invisibility mod check -mobs.invis = {} -if minetest.global_exists("invisibility") then - mobs.invis = invisibility -end - - --- creative check -function mobs.is_creative(name) - return minetest.is_creative_enabled(name) -end - - --- localize math functions -local pi = math.pi -local sin = math.sin -local cos = math.cos -local abs = math.abs -local min = math.min -local max = math.max -local atann = math.atan -local random = math.random -local floor = math.floor -local atan = function(x) - if not x or x ~= x then - return 0 - else - return atann(x) - end -end - - --- Load settings -local damage_enabled = minetest.settings:get_bool("enable_damage") -local mobs_spawn = minetest.settings:get_bool("mobs_spawn", true) ~= false - -local disable_blood = minetest.settings:get_bool("mobs_disable_blood") -local mobs_drop_items = minetest.settings:get_bool("mobs_drop_items") ~= false -local mobs_griefing = minetest.settings:get_bool("mobs_griefing") ~= false -local spawn_protected = minetest.settings:get_bool("mobs_spawn_protected") ~= false -local remove_far = true -local difficulty = tonumber(minetest.settings:get("mob_difficulty")) or 1.0 -local show_health = false -local max_per_block = tonumber(minetest.settings:get("max_objects_per_block") or 64) -local mobs_spawn_chance = tonumber(minetest.settings:get("mobs_spawn_chance") or 2.5) - --- Shows helpful debug info above each mob -local mobs_debug = minetest.settings:get_bool("mobs_debug", false) - --- Peaceful mode message so players will know there are no monsters -if minetest.settings:get_bool("only_peaceful_mobs", false) then - minetest.register_on_joinplayer(function(player) - minetest.chat_send_player(player:get_player_name(), - S("Peaceful mode active! No monsters will spawn.")) - end) -end - --- calculate aoc range for mob count -local aosrb = tonumber(minetest.settings:get("active_object_send_range_blocks")) -local abr = tonumber(minetest.settings:get("active_block_range")) -local aoc_range = max(aosrb, abr) * 16 - --- pathfinding settings -local enable_pathfinding = true -local stuck_timeout = 3 -- how long before mob gets stuck in place and starts searching -local stuck_path_timeout = 10 -- how long will mob follow path before giving up - --- default nodes -local node_ice = "mcl_core:ice" -local node_snowblock = "mcl_core:snowblock" -local node_snow = "mcl_core:snow" -mobs.fallback_node = minetest.registered_aliases["mapgen_dirt"] or "mcl_core:dirt" - -local mod_weather = minetest.get_modpath("mcl_weather") ~= nil -local mod_explosions = minetest.get_modpath("mcl_explosions") ~= nil -local mod_mobspawners = minetest.get_modpath("mcl_mobspawners") ~= nil -local mod_hunger = minetest.get_modpath("mcl_hunger") ~= nil -local mod_worlds = minetest.get_modpath("mcl_worlds") ~= nil -local mod_armor = minetest.get_modpath("mcl_armor") ~= nil -local mod_experience = minetest.get_modpath("mcl_experience") ~= nil - -----For Water Flowing: -local enable_physics = function(object, luaentity, ignore_check) - if luaentity.physical_state == false or ignore_check == true then - luaentity.physical_state = true - object:set_properties({ - physical = true - }) - object:set_velocity({x=0,y=0,z=0}) - object:set_acceleration({x=0,y=-9.81,z=0}) - end -end - -local disable_physics = function(object, luaentity, ignore_check, reset_movement) +local function disable_physics(object, luaentity, ignore_check, reset_movement) if luaentity.physical_state == true or ignore_check == true then luaentity.physical_state = false object:set_properties({ @@ -133,1882 +14,277 @@ local disable_physics = function(object, luaentity, ignore_check, reset_movement end end - --- play sound -local mob_sound = function(self, soundname, is_opinion, fixed_pitch) - - local soundinfo - if self.sounds_child and self.child then - soundinfo = self.sounds_child - elseif self.sounds then - soundinfo = self.sounds - end - if not soundinfo then - return - end - local sound = soundinfo[soundname] - if sound then - if is_opinion and self.opinion_sound_cooloff > 0 then - return - end - local pitch - if not fixed_pitch then - local base_pitch = soundinfo.base_pitch - if not base_pitch then - base_pitch = 1 - end - if self.child and (not self.sounds_child) then - -- Children have higher pitch - pitch = base_pitch * 1.5 - else - pitch = base_pitch - end - -- randomize the pitch a bit - pitch = pitch + math.random(-10, 10) * 0.005 - end - minetest.sound_play(sound, { - object = self.object, - gain = 1.0, - max_hear_distance = self.sounds.distance, - pitch = pitch, - }, true) - self.opinion_sound_cooloff = 1 +----For Water Flowing: +local function enable_physics(object, luaentity, ignore_check) + if luaentity.physical_state == false or ignore_check == true then + luaentity.physical_state = true + object:set_properties({ + physical = true + }) + object:set_velocity({x=0,y=0,z=0}) + object:set_acceleration({x=0,y=-9.81,z=0}) end end --- Return true if object is in view_range -local function object_in_range(self, object) - if not object then - return false - end - local factor - -- Apply view range reduction for special player armor - if object:is_player() and mod_armor then - factor = armor:get_mob_view_range_factor(object, self.name) - end - -- Distance check - local dist - if factor and factor == 0 then - return false - elseif factor then - dist = self.view_range * factor - else - dist = self.view_range - end - - local p1, p2 = self.object:get_pos(), object:get_pos() - return p1 and p2 and (vector.distance(p1, p2) <= dist) -end - --- attack player/mob -local do_attack = function(self, player) - - if self.state == "attack" or self.state == "die" then - return - end - - self.attack = player - self.state = "attack" - - -- TODO: Implement war_cry sound without being annoying - --if random(0, 100) < 90 then - --mob_sound(self, "war_cry", true) - --end -end - - --- collision function borrowed amended from jordan4ibanez open_ai mod -local collision = function(self) - - local pos = self.object:get_pos() - local vel = self.object:get_velocity() - local x = 0 - local z = 0 - local width = -self.collisionbox[1] + self.collisionbox[4] + 0.5 - - for _,object in ipairs(minetest.get_objects_inside_radius(pos, width)) do - - if object:is_player() - or (object:get_luaentity()._cmi_is_mob == true and object ~= self.object) then - - local pos2 = object:get_pos() - local vec = {x = pos.x - pos2.x, z = pos.z - pos2.z} - local force = (width + 0.5) - vector.distance( - {x = pos.x, y = 0, z = pos.z}, - {x = pos2.x, y = 0, z = pos2.z}) - - x = x + (vec.x * force) - z = z + (vec.z * force) - end - end - - return({x,z}) -end - --- move mob in facing direction -local set_velocity = function(self, v) - - local c_x, c_y = 0, 0 - - -- can mob be pushed, if so calculate direction - if self.pushable then - c_x, c_y = unpack(collision(self)) - end - - -- halt mob if it has been ordered to stay - if self.order == "stand" then - self.object:set_velocity({x = 0, y = 0, z = 0}) - return - end - - local yaw = (self.object:get_yaw() or 0) + self.rotate - - self.object:set_velocity({ - x = (sin(yaw) * -v) + c_x, - y = self.object:get_velocity().y, - z = (cos(yaw) * v) + c_y, - }) -end - - - --- calculate mob velocity -local get_velocity = function(self) - - local v = self.object:get_velocity() - if v then - return (v.x * v.x + v.z * v.z) ^ 0.5 - end - - return 0 -end - - --- set and return valid yaw -local set_yaw = function(self, yaw, delay, dtime) - - if not yaw or yaw ~= yaw then - yaw = 0 - end - - delay = delay or 0 - - if delay == 0 then - if self.shaking and dtime then - yaw = yaw + (math.random() * 2 - 1) * 5 * dtime - end - self.object:set_yaw(yaw) - return yaw - end - - self.target_yaw = yaw - self.delay = delay - - return self.target_yaw -end - --- global function to set mob yaw -function mobs:yaw(self, yaw, delay, dtime) - set_yaw(self, yaw, delay, dtime) -end - -local add_texture_mod = function(self, mod) - local full_mod = "" - local already_added = false - for i=1, #self.texture_mods do - if mod == self.texture_mods[i] then - already_added = true - end - full_mod = full_mod .. self.texture_mods[i] - end - if not already_added then - full_mod = full_mod .. mod - table.insert(self.texture_mods, mod) - end - self.object:set_texture_mod(full_mod) -end -local remove_texture_mod = function(self, mod) - local full_mod = "" - local remove = {} - for i=1, #self.texture_mods do - if self.texture_mods[i] ~= mod then - full_mod = full_mod .. self.texture_mods[i] - else - table.insert(remove, i) - end - end - for i=#remove, 1 do - table.remove(self.texture_mods, remove[i]) - end - self.object:set_texture_mod(full_mod) -end - --- set defined animation -local set_animation = function(self, anim, fixed_frame) - if not self.animation or not anim then - return - end - if self.state == "die" and anim ~= "die" and anim ~= "stand" then - return - end - - self.animation.current = self.animation.current or "" - - if (anim == self.animation.current - or not self.animation[anim .. "_start"] - or not self.animation[anim .. "_end"]) and self.state ~= "die" then - return - end - - self.animation.current = anim - - local a_start = self.animation[anim .. "_start"] - local a_end - if fixed_frame then - a_end = a_start - else - a_end = self.animation[anim .. "_end"] - end - - self.object:set_animation({ - x = a_start, - y = a_end}, - self.animation[anim .. "_speed"] or self.animation.speed_normal or 15, - 0, self.animation[anim .. "_loop"] ~= false) -end - - --- above function exported for mount.lua -function mobs:set_animation(self, anim) - set_animation(self, anim) -end - --- Returns true is node can deal damage to self -local is_node_dangerous = function(self, nodename) - local nn = nodename - if self.lava_damage > 0 then - if minetest.get_item_group(nn, "lava") ~= 0 then - return true - end - end - if self.fire_damage > 0 then - if minetest.get_item_group(nn, "fire") ~= 0 then - return true - end - end - if minetest.registered_nodes[nn].damage_per_second and minetest.registered_nodes[nn].damage_per_second > 0 then - return true - end - return false -end - - --- Returns true if node is a water hazard -local is_node_waterhazard = function(self, nodename) - local nn = nodename - if self.water_damage > 0 then - if minetest.get_item_group(nn, "water") ~= 0 then - return true - end - end - if minetest.registered_nodes[nn] and minetest.registered_nodes[nn].drowning and minetest.registered_nodes[nn].drowning > 0 then - if self.breath_max ~= -1 then - -- check if the mob is water-breathing _and_ the block is water; only return true if neither is the case - -- this will prevent water-breathing mobs to classify water or e.g. sand below them as dangerous - if not self.breathes_in_water and minetest.get_item_group(nn, "water") ~= 0 then - return true +--[[ +local timer = 0 +minetest.register_globalstep(function(dtime) + timer = timer + dtime + if timer < 1 then return end + for _, player in pairs(minetest.get_connected_players()) do + local pos = player:get_pos() + for _, obj in pairs(minetest_get_objects_inside_radius(pos, 47)) do + local lua = obj:get_luaentity() + if lua and lua._cmi_is_mob then + lua.lifetimer = math.max(20, lua.lifetimer) + lua.despawn_immediately = false end end end - return false -end + timer = 0 +end) +]]-- +-- compatibility function for old entities to new modpack entities +function mobs:alias_mob(old_name, new_name) --- check line of sight (BrunoMine) -local line_of_sight = function(self, pos1, pos2, stepsize) + -- spawn egg + minetest.register_alias(old_name, new_name) - stepsize = stepsize or 1 + -- entity + minetest.register_entity(":" .. old_name, { - local s, pos = minetest.line_of_sight(pos1, pos2, stepsize) + physical = false, - -- normal walking and flying mobs can see you through air - if s == true then - return true - end + on_step = function(self) - -- New pos1 to be analyzed - local npos1 = {x = pos1.x, y = pos1.y, z = pos1.z} - - local r, pos = minetest.line_of_sight(npos1, pos2, stepsize) - - -- Checks the return - if r == true then return true end - - -- Nodename found - local nn = minetest.get_node(pos).name - - -- Target Distance (td) to travel - local td = vector.distance(pos1, pos2) - - -- Actual Distance (ad) traveled - local ad = 0 - - -- It continues to advance in the line of sight in search of a real - -- obstruction which counts as 'normal' nodebox. - while minetest.registered_nodes[nn] - and minetest.registered_nodes[nn].walkable == false do - - -- Check if you can still move forward - if td < ad + stepsize then - return true -- Reached the target - end - - -- Moves the analyzed pos - local d = vector.distance(pos1, pos2) - - npos1.x = ((pos2.x - pos1.x) / d * stepsize) + pos1.x - npos1.y = ((pos2.y - pos1.y) / d * stepsize) + pos1.y - npos1.z = ((pos2.z - pos1.z) / d * stepsize) + pos1.z - - -- NaN checks - if d == 0 - or npos1.x ~= npos1.x - or npos1.y ~= npos1.y - or npos1.z ~= npos1.z then - return false - end - - ad = ad + stepsize - - -- scan again - r, pos = minetest.line_of_sight(npos1, pos2, stepsize) - - if r == true then return true end - - -- New Nodename found - nn = minetest.get_node(pos).name - - end - - return false -end - - --- are we flying in what we are suppose to? (taikedz) -local flight_check = function(self) - - local nod = self.standing_in - local def = minetest.registered_nodes[nod] - - if not def then return false end -- nil check - - local fly_in - if type(self.fly_in) == "string" then - fly_in = { self.fly_in } - elseif type(self.fly_in) == "table" then - fly_in = self.fly_in - else - return false - end - - for _,checknode in pairs(fly_in) do - if nod == checknode then - return true - elseif checknode == "__airlike" and def.walkable == false and - (def.liquidtype == "none" or minetest.get_item_group(nod, "fake_liquid") == 1) then - return true - end - end - - return false -end - - --- custom particle effects -local effect = function(pos, amount, texture, min_size, max_size, radius, gravity, glow, go_down) - - radius = radius or 2 - min_size = min_size or 0.5 - max_size = max_size or 1 - gravity = gravity or -10 - glow = glow or 0 - go_down = go_down or false - - local ym - if go_down then - ym = 0 - else - ym = -radius - end - - minetest.add_particlespawner({ - amount = amount, - time = 0.25, - minpos = pos, - maxpos = pos, - minvel = {x = -radius, y = ym, z = -radius}, - maxvel = {x = radius, y = radius, z = radius}, - minacc = {x = 0, y = gravity, z = 0}, - maxacc = {x = 0, y = gravity, z = 0}, - minexptime = 0.1, - maxexptime = 1, - minsize = min_size, - maxsize = max_size, - texture = texture, - glow = glow, - }) -end - -local damage_effect = function(self, damage) - -- damage particles - if (not disable_blood) and damage > 0 then - - local amount_large = math.floor(damage / 2) - local amount_small = damage % 2 - - local pos = self.object:get_pos() - - pos.y = pos.y + (self.collisionbox[5] - self.collisionbox[2]) * .5 - - local texture = "mobs_blood.png" - -- full heart damage (one particle for each 2 HP damage) - if amount_large > 0 then - effect(pos, amount_large, texture, 2, 2, 1.75, 0, nil, true) - end - -- half heart damage (one additional particle if damage is an odd number) - if amount_small > 0 then - -- TODO: Use "half heart" - effect(pos, amount_small, texture, 1, 1, 1.75, 0, nil, true) - end - end -end - -mobs.death_effect = function(pos, yaw, collisionbox, rotate) - local min, max - if collisionbox then - min = {x=collisionbox[1], y=collisionbox[2], z=collisionbox[3]} - max = {x=collisionbox[4], y=collisionbox[5], z=collisionbox[6]} - else - min = { x = -0.5, y = 0, z = -0.5 } - max = { x = 0.5, y = 0.5, z = 0.5 } - end - if rotate then - min = vector.rotate(min, {x=0, y=yaw, z=pi/2}) - max = vector.rotate(max, {x=0, y=yaw, z=pi/2}) - min, max = vector.sort(min, max) - min = vector.multiply(min, 0.5) - max = vector.multiply(max, 0.5) - end - - minetest.add_particlespawner({ - amount = 50, - time = 0.001, - minpos = vector.add(pos, min), - maxpos = vector.add(pos, max), - minvel = vector.new(-5,-5,-5), - maxvel = vector.new(5,5,5), - minexptime = 1.1, - maxexptime = 1.5, - minsize = 1, - maxsize = 2, - collisiondetection = false, - vertical = false, - texture = "mcl_particles_mob_death.png^[colorize:#000000:255", - }) - - minetest.sound_play("mcl_mobs_mob_poof", { - pos = pos, - gain = 1.0, - max_hear_distance = 8, - }, true) -end - -local update_tag = function(self) - local tag - if mobs_debug then - tag = "nametag = '"..tostring(self.nametag).."'\n".. - "state = '"..tostring(self.state).."'\n".. - "order = '"..tostring(self.order).."'\n".. - "attack = "..tostring(self.attack).."\n".. - "health = "..tostring(self.health).."\n".. - "breath = "..tostring(self.breath).."\n".. - "gotten = "..tostring(self.gotten).."\n".. - "tamed = "..tostring(self.tamed).."\n".. - "horny = "..tostring(self.horny).."\n".. - "hornytimer = "..tostring(self.hornytimer).."\n".. - "runaway_timer = "..tostring(self.runaway_timer).."\n".. - "following = "..tostring(self.following) - else - tag = self.nametag - end - self.object:set_properties({ - nametag = tag, - }) - -end - - --- drop items -local item_drop = function(self, cooked, looting_level) - - -- no drops if disabled by setting - if not mobs_drop_items then return end - - looting_level = looting_level or 0 - - -- no drops for child mobs (except monster) - if (self.child and self.type ~= "monster") then - return - end - - local obj, item, num - local pos = self.object:get_pos() - - self.drops = self.drops or {} -- nil check - - for n = 1, #self.drops do - local dropdef = self.drops[n] - local chance = 1 / dropdef.chance - local looting_type = dropdef.looting - - if looting_level > 0 then - local chance_function = dropdef.looting_chance_function - if chance_function then - chance = chance_function(looting_level) - elseif looting_type == "rare" then - chance = chance + (dropdef.looting_factor or 0.01) * looting_level - end - end - - local num = 0 - local do_common_looting = (looting_level > 0 and looting_type == "common") - if random() < chance then - num = random(dropdef.min or 1, dropdef.max or 1) - elseif not dropdef.looting_ignore_chance then - do_common_looting = false - end - - if do_common_looting then - num = num + math.floor(math.random(0, looting_level) + 0.5) - end - - if num > 0 then - item = dropdef.name - - -- cook items when true - if cooked then - - local output = minetest.get_craft_result({ - method = "cooking", width = 1, items = {item}}) - - if output and output.item and not output.item:is_empty() then - item = output.item:get_name() - end + if minetest_registered_entities[new_name] then + minetest_add_entity(self.object:get_pos(), new_name) end - -- add item if it exists - obj = minetest.add_item(pos, ItemStack(item .. " " .. num)) - - if obj and obj:get_luaentity() then - - obj:set_velocity({ - x = random(-10, 10) / 9, - y = 6, - z = random(-10, 10) / 9, - }) - elseif obj then - obj:remove() -- item does not exist - end - end - end - - self.drops = {} -end - - --- check if mob is dead or only hurt -local check_for_death = function(self, cause, cmi_cause) - - if self.state == "die" then - return true - end - - -- has health actually changed? - if self.health == self.old_health and self.health > 0 then - return false - end - - local damaged = self.health < self.old_health - self.old_health = self.health - - -- still got some health? - if self.health > 0 then - - -- make sure health isn't higher than max - if self.health > self.hp_max then - self.health = self.hp_max - end - - -- play damage sound if health was reduced and make mob flash red. - if damaged then - add_texture_mod(self, "^[colorize:#FF000040") - minetest.after(.2, function(self) - if self and self.object then - remove_texture_mod(self, "^[colorize:#FF000040") - end - end, self) - mob_sound(self, "damage") - end - - -- backup nametag so we can show health stats - if not self.nametag2 then - self.nametag2 = self.nametag or "" - end - - if show_health - and (cmi_cause and cmi_cause.type == "punch") then - - self.htimer = 2 - self.nametag = "♥ " .. self.health .. " / " .. self.hp_max - - update_tag(self) - end - - return false - end - - mob_sound(self, "death") - - local function death_handle(self) - -- dropped cooked item if mob died in fire or lava - if cause == "lava" or cause == "fire" then - item_drop(self, true, 0) - else - local wielditem = ItemStack() - if cause == "hit" then - local puncher = cmi_cause.puncher - if puncher then - wielditem = puncher:get_wielded_item() - end - end - local cooked = mcl_burning.is_burning(self.object) or mcl_enchanting.has_enchantment(wielditem, "fire_aspect") - local looting = mcl_enchanting.get_enchantment(wielditem, "looting") - item_drop(self, cooked, looting) - - if mod_experience and ((not self.child) or self.type ~= "animal") and (minetest.get_us_time() - self.xp_timestamp <= 5000000) then - mcl_experience.throw_experience(self.object:get_pos(), math.random(self.xp_min, self.xp_max)) - end - end - end - - -- execute custom death function - if self.on_die then - - local pos = self.object:get_pos() - local on_die_exit = self.on_die(self, pos, cmi_cause) - if on_die_exit ~= true then - death_handle(self) - end - - if use_cmi then - cmi.notify_die(self.object, cmi_cause) - end - - if on_die_exit == true then - self.state = "die" - mcl_burning.extinguish(self.object) self.object:remove() - return true end - end - - local collisionbox - if self.collisionbox then - collisionbox = table.copy(self.collisionbox) - end - - self.state = "die" - self.attack = nil - self.v_start = false - self.fall_speed = DEFAULT_FALL_SPEED - self.timer = 0 - self.blinktimer = 0 - remove_texture_mod(self, "^[colorize:#FF000040") - remove_texture_mod(self, "^[brighten") - self.passive = true - self.object:set_properties({ - pointable = false, - collide_with_objects = false, }) - set_velocity(self, 0) - local acc = self.object:get_acceleration() - acc.x, acc.y, acc.z = 0, DEFAULT_FALL_SPEED, 0 - self.object:set_acceleration(acc) +end - local length - -- default death function and die animation (if defined) - if self.instant_death then - length = 0 - elseif self.animation - and self.animation.die_start - and self.animation.die_end then - - local frames = self.animation.die_end - self.animation.die_start - local speed = self.animation.die_speed or 15 - length = max(frames / speed, 0) + DEATH_DELAY - set_animation(self, "die") - else - local rot = self.object:get_rotation() - rot.z = pi/2 - self.object:set_rotation(rot) - length = 1 + DEATH_DELAY - set_animation(self, "stand", true) +-- Spawn a child +function mobs:spawn_child(pos, mob_type) + local child = minetest_add_entity(pos, mob_type) + if not child then + return end + local ent = child:get_luaentity() + effect(pos, 15, "mcl_particles_smoke.png", 1, 2, 2, 15, 5) - -- Remove body after a few seconds and drop stuff - local kill = function(self) - if not self.object:get_luaentity() then - return - end - if use_cmi then - cmi.notify_die(self.object, cmi_cause) - end + ent.child = true - death_handle(self) - local dpos = self.object:get_pos() - local cbox = self.collisionbox - local yaw = self.object:get_rotation().y - mcl_burning.extinguish(self.object) - self.object:remove() - mobs.death_effect(dpos, yaw, cbox, not self.instant_death) - end - if length <= 0 then - kill(self) - else - minetest.after(length, kill, self) + local textures + -- using specific child texture (if found) + if ent.child_texture then + textures = ent.child_texture[1] end - return true + -- and resize to half height + child:set_properties({ + textures = textures, + visual_size = { + x = ent.base_size.x * .5, + y = ent.base_size.y * .5, + }, + collisionbox = { + ent.base_colbox[1] * .5, + ent.base_colbox[2] * .5, + ent.base_colbox[3] * .5, + ent.base_colbox[4] * .5, + ent.base_colbox[5] * .5, + ent.base_colbox[6] * .5, + }, + selectionbox = { + ent.base_selbox[1] * .5, + ent.base_selbox[2] * .5, + ent.base_selbox[3] * .5, + ent.base_selbox[4] * .5, + ent.base_selbox[5] * .5, + ent.base_selbox[6] * .5, + }, + }) + + return child end --- check if within physical map limits (-30911 to 30927) -local within_limits, wmin, wmax = nil, -30913, 30928 -within_limits = function(pos, radius) - if mcl_vars then - if mcl_vars.mapgen_edge_min and mcl_vars.mapgen_edge_max then - wmin, wmax = mcl_vars.mapgen_edge_min, mcl_vars.mapgen_edge_max - within_limits = function(pos, radius) - return pos - and (pos.x - radius) > wmin and (pos.x + radius) < wmax - and (pos.y - radius) > wmin and (pos.y + radius) < wmax - and (pos.z - radius) > wmin and (pos.z + radius) < wmax - end - end - end - return pos - and (pos.x - radius) > wmin and (pos.x + radius) < wmax - and (pos.y - radius) > wmin and (pos.y + radius) < wmax - and (pos.z - radius) > wmin and (pos.z + radius) < wmax -end - --- is mob facing a cliff or danger -local is_at_cliff_or_danger = function(self) - - if self.fear_height == 0 then -- 0 for no falling protection! +-- feeding, taming and breeding (thanks blert2112) +function mobs:feed_tame(self, clicker, feed_count, breed, tame) + if not self.follow then return false end - if not self.object:get_luaentity() then - return false - end - local yaw = self.object:get_yaw() - local dir_x = -sin(yaw) * (self.collisionbox[4] + 0.5) - local dir_z = cos(yaw) * (self.collisionbox[4] + 0.5) - local pos = self.object:get_pos() - local ypos = pos.y + self.collisionbox[2] -- just above floor + -- can eat/tame with item in hand + if follow_holding(self, clicker) then - local free_fall, blocker = minetest.line_of_sight( - {x = pos.x + dir_x, y = ypos, z = pos.z + dir_z}, - {x = pos.x + dir_x, y = ypos - self.fear_height, z = pos.z + dir_z}) - if free_fall then - return true - else - local bnode = minetest.get_node(blocker) - local danger = is_node_dangerous(self, bnode.name) - if danger then - return true - else - local def = minetest.registered_nodes[bnode.name] - if def and def.walkable then - return false + -- if not in creative then take item + if not mobs.is_creative(clicker:get_player_name()) then + + local item = clicker:get_wielded_item() + + item:take_item() + + clicker:set_wielded_item(item) + end + + mob_sound(self, "eat", nil, true) + + -- increase health + self.health = self.health + 4 + + if self.health >= self.hp_max then + + self.health = self.hp_max + + if self.htimer < 1 then + self.htimer = 5 end end - end - return false -end - - --- copy the 'mob facing cliff_or_danger check' from above, and rework to avoid water -local is_at_water_danger = function(self) - - - if not self.object:get_luaentity() then - return false - end - local yaw = self.object:get_yaw() - local dir_x = -sin(yaw) * (self.collisionbox[4] + 0.5) - local dir_z = cos(yaw) * (self.collisionbox[4] + 0.5) - local pos = self.object:get_pos() - local ypos = pos.y + self.collisionbox[2] -- just above floor - - local free_fall, blocker = minetest.line_of_sight( - {x = pos.x + dir_x, y = ypos, z = pos.z + dir_z}, - {x = pos.x + dir_x, y = ypos - 3, z = pos.z + dir_z}) - if free_fall then - return true - else - local bnode = minetest.get_node(blocker) - local waterdanger = is_node_waterhazard(self, bnode.name) - if - waterdanger and (is_node_waterhazard(self, self.standing_in) or is_node_waterhazard(self, self.standing_on)) then - return false - elseif waterdanger and (is_node_waterhazard(self, self.standing_in) or is_node_waterhazard(self, self.standing_on)) == false then - return true - else - local def = minetest.registered_nodes[bnode.name] - if def and def.walkable then - return false - end - end - end - - return false -end - - --- get node but use fallback for nil or unknown -local node_ok = function(pos, fallback) - - fallback = fallback or mobs.fallback_node - - local node = minetest.get_node_or_nil(pos) - - if node and minetest.registered_nodes[node.name] then - return node - end - - return minetest.registered_nodes[fallback] -end - - --- environmental damage (water, lava, fire, light etc.) -local do_env_damage = function(self) - - -- feed/tame text timer (so mob 'full' messages dont spam chat) - if self.htimer > 0 then - self.htimer = self.htimer - 1 - end - - -- reset nametag after showing health stats - if self.htimer < 1 and self.nametag2 then - - self.nametag = self.nametag2 - self.nametag2 = nil + self.object:set_hp(self.health) update_tag(self) - end - local pos = self.object:get_pos() + -- make children grow quicker + if self.child == true then - self.time_of_day = minetest.get_timeofday() + -- deduct 10% of the time to adulthood + self.hornytimer = self.hornytimer + ((CHILD_GROW_TIME - self.hornytimer) * 0.1) + + return true + end + + -- feed and tame + self.food = (self.food or 0) + 1 + if self.food >= feed_count then + + self.food = 0 + + if breed and self.hornytimer == 0 then + self.horny = true + end + + if tame then + + self.tamed = true + + if not self.owner or self.owner == "" then + self.owner = clicker:get_player_name() + end + end + + -- make sound when fed so many times + mob_sound(self, "random", true) + end - -- remove mob if beyond map limits - if not within_limits(pos, 0) then - mcl_burning.extinguish(self.object) - self.object:remove() return true end + return false +end - -- Deal light damage to mob, returns true if mob died - local deal_light_damage = function(self, pos, damage) - if not (mod_weather and (mcl_weather.rain.raining or mcl_weather.state == "snow") and mcl_weather.is_outdoor(pos)) then - self.health = self.health - damage +-- no damage to nodes explosion +function mobs:safe_boom(self, pos, strength) + minetest_sound_play(self.sounds and self.sounds.explode or "tnt_explode", { + pos = pos, + gain = 1.0, + max_hear_distance = self.sounds and self.sounds.distance or 32 + }, true) + local radius = strength + entity_physics(pos, radius) + effect(pos, 32, "mcl_particles_smoke.png", radius * 3, radius * 5, radius, 1, 0) +end - effect(pos, 5, "mcl_particles_smoke.png") - if check_for_death(self, "light", {type = "light"}) then - return true - end - end - end - - -- bright light harms mob - if self.light_damage ~= 0 and (minetest.get_node_light(pos) or 0) > 12 then - if deal_light_damage(self, pos, self.light_damage) then - return true - end - end - local _, dim = nil, "overworld" - if mod_worlds then - _, dim = mcl_worlds.y_to_layer(pos.y) - end - if (self.sunlight_damage ~= 0 or self.ignited_by_sunlight) and (minetest.get_node_light(pos) or 0) >= minetest.LIGHT_MAX and dim == "overworld" then - if self.ignited_by_sunlight then - mcl_burning.set_on_fire(self.object, 10, self.sunlight_damage or 1) +-- make explosion with protection and tnt mod check +function mobs:boom(self, pos, strength, fire) + self.object:remove() + if mod_explosions then + if mobs_griefing and not minetest_is_protected(pos, "") then + mcl_explosions.explode(pos, strength, { drop_chance = 1.0, fire = fire }, self.object) else - deal_light_damage(self, pos, self.sunlight_damage) - return true - end - end - - local y_level = self.collisionbox[2] - - if self.child then - y_level = self.collisionbox[2] * 0.5 - end - - -- what is mob standing in? - pos.y = pos.y + y_level + 0.25 -- foot level - local pos2 = {x=pos.x, y=pos.y-1, z=pos.z} - self.standing_in = node_ok(pos, "air").name - self.standing_on = node_ok(pos2, "air").name - - -- don't fall when on ignore, just stand still - if self.standing_in == "ignore" then - self.object:set_velocity({x = 0, y = 0, z = 0}) - end - - local nodef = minetest.registered_nodes[self.standing_in] - - -- rain - if self.rain_damage > 0 and mod_weather then - if mcl_weather.rain.raining and mcl_weather.is_outdoor(pos) then - - self.health = self.health - self.rain_damage - - if check_for_death(self, "rain", {type = "environment", - pos = pos, node = self.standing_in}) then - return true - end - end - end - - pos.y = pos.y + 1 -- for particle effect position - - -- water damage - if self.water_damage > 0 - and nodef.groups.water then - - if self.water_damage ~= 0 then - - self.health = self.health - self.water_damage - - effect(pos, 5, "mcl_particles_smoke.png", nil, nil, 1, nil) - - if check_for_death(self, "water", {type = "environment", - pos = pos, node = self.standing_in}) then - return true - end - end - - -- lava damage - elseif self.lava_damage > 0 - and (nodef.groups.lava) then - - if self.lava_damage ~= 0 then - - self.health = self.health - self.lava_damage - - effect(pos, 5, "fire_basic_flame.png", nil, nil, 1, nil) - - if check_for_death(self, "lava", {type = "environment", - pos = pos, node = self.standing_in}) then - return true - end - end - - -- fire damage - elseif self.fire_damage > 0 - and (nodef.groups.fire) then - - if self.fire_damage ~= 0 then - - self.health = self.health - self.fire_damage - - effect(pos, 5, "fire_basic_flame.png", nil, nil, 1, nil) - - if check_for_death(self, "fire", {type = "environment", - pos = pos, node = self.standing_in}) then - return true - end - end - - -- damage_per_second node check - elseif nodef.damage_per_second ~= 0 and not nodef.groups.lava and not nodef.groups.fire then - - self.health = self.health - nodef.damage_per_second - - effect(pos, 5, "mcl_particles_smoke.png") - - if check_for_death(self, "dps", {type = "environment", - pos = pos, node = self.standing_in}) then - return true - end - end - - -- Drowning damage - if self.breath_max ~= -1 then - local drowning = false - if self.breathes_in_water then - if minetest.get_item_group(self.standing_in, "water") == 0 then - drowning = true - end - elseif nodef.drowning > 0 then - drowning = true - end - if drowning then - - self.breath = math.max(0, self.breath - 1) - - effect(pos, 2, "bubble.png", nil, nil, 1, nil) - if self.breath <= 0 then - local dmg - if nodef.drowning > 0 then - dmg = nodef.drowning - else - dmg = 4 - end - damage_effect(self, dmg) - self.health = self.health - dmg - end - if check_for_death(self, "drowning", {type = "environment", - pos = pos, node = self.standing_in}) then - return true - end - else - self.breath = math.min(self.breath_max, self.breath + 1) - end - end - - --- suffocation inside solid node - -- FIXME: Redundant with mcl_playerplus - if (self.suffocation == true) - and (nodef.walkable == nil or nodef.walkable == true) - and (nodef.collision_box == nil or nodef.collision_box.type == "regular") - and (nodef.node_box == nil or nodef.node_box.type == "regular") - and (nodef.groups.disable_suffocation ~= 1) - and (nodef.groups.opaque == 1) then - - -- Short grace period before starting to take suffocation damage. - -- This is different from players, who take damage instantly. - -- This has been done because mobs might briefly be inside solid nodes - -- when e.g. climbing up stairs. - -- This is a bit hacky because it assumes that do_env_damage - -- is called roughly every second only. - self.suffocation_timer = self.suffocation_timer + 1 - if self.suffocation_timer >= 3 then - -- 2 damage per second - -- TODO: Deal this damage once every 1/2 second - self.health = self.health - 2 - - if check_for_death(self, "suffocation", {type = "environment", - pos = pos, node = self.standing_in}) then - return true - end + mobs:safe_boom(self, pos, strength) end else - self.suffocation_timer = 0 - end - - return check_for_death(self, "", {type = "unknown"}) -end - - --- jump if facing a solid node (not fences or gates) -local do_jump = function(self) - - if not self.jump - or self.jump_height == 0 - or self.fly - or (self.child and self.type ~= "monster") - or self.order == "stand" then - return false - end - - self.facing_fence = false - - -- something stopping us while moving? - if self.state ~= "stand" - and get_velocity(self) > 0.5 - and self.object:get_velocity().y ~= 0 then - return false - end - - local pos = self.object:get_pos() - local yaw = self.object:get_yaw() - - -- what is mob standing on? - pos.y = pos.y + self.collisionbox[2] - 0.2 - - local nod = node_ok(pos) - - if minetest.registered_nodes[nod.name].walkable == false then - return false - end - - -- where is front - local dir_x = -sin(yaw) * (self.collisionbox[4] + 0.5) - local dir_z = cos(yaw) * (self.collisionbox[4] + 0.5) - - -- what is in front of mob? - nod = node_ok({ - x = pos.x + dir_x, - y = pos.y + 0.5, - z = pos.z + dir_z - }) - - -- this is used to detect if there's a block on top of the block in front of the mob. - -- If there is, there is no point in jumping as we won't manage. - local nodTop = node_ok({ - x = pos.x + dir_x, - y = pos.y + 1.5, - z = pos.z + dir_z - }, "air") - - -- we don't attempt to jump if there's a stack of blocks blocking - if minetest.registered_nodes[nodTop.name].walkable == true then - return false - end - - -- thin blocks that do not need to be jumped - if nod.name == node_snow then - return false - end - - if self.walk_chance == 0 - or minetest.registered_items[nod.name].walkable then - - if minetest.get_item_group(nod.name, "fence") == 0 - and minetest.get_item_group(nod.name, "fence_gate") == 0 - and minetest.get_item_group(nod.name, "wall") == 0 then - - local v = self.object:get_velocity() - - v.y = self.jump_height - - set_animation(self, "jump") -- only when defined - - self.object:set_velocity(v) - - -- when in air move forward - minetest.after(0.3, function(self, v) - if (not self.object) or (not self.object:get_luaentity()) or (self.state == "die") then - return - end - self.object:set_acceleration({ - x = v.x * 2, - y = -10, - z = v.z * 2, - }) - end, self, v) - - if self.jump_sound_cooloff <= 0 then - mob_sound(self, "jump") - self.jump_sound_cooloff = 0.5 - end - else - self.facing_fence = true - end - - -- if we jumped against a block/wall 4 times then turn - if self.object:get_velocity().x ~= 0 - and self.object:get_velocity().z ~= 0 then - - self.jump_count = (self.jump_count or 0) + 1 - - if self.jump_count == 4 then - - local yaw = self.object:get_yaw() or 0 - - yaw = set_yaw(self, yaw + 1.35, 8) - - self.jump_count = 0 - end - end - - return true - end - - return false -end - - --- blast damage to entities nearby -local entity_physics = function(pos, radius) - - radius = radius * 2 - - local objs = minetest.get_objects_inside_radius(pos, radius) - local obj_pos, dist - - for n = 1, #objs do - - obj_pos = objs[n]:get_pos() - - dist = vector.distance(pos, obj_pos) - if dist < 1 then dist = 1 end - - local damage = floor((4 / dist) * radius) - local ent = objs[n]:get_luaentity() - - -- punches work on entities AND players - objs[n]:punch(objs[n], 1.0, { - full_punch_interval = 1.0, - damage_groups = {fleshy = damage}, - }, pos) + mobs:safe_boom(self, pos, strength) end end +-- falling and fall damage +-- returns true if mob died +local falling = function(self, pos) --- should mob follow what I'm holding ? -local follow_holding = function(self, clicker) - - if mobs.invis[clicker:get_player_name()] then - return false + if self.fly and self.state ~= "die" then + return end - local item = clicker:get_wielded_item() - local t = type(self.follow) - - -- single item - if t == "string" - and item:get_name() == self.follow then - return true - - -- multiple items - elseif t == "table" then - - for no = 1, #self.follow do - - if self.follow[no] == item:get_name() then - return true - end + if mcl_portals ~= nil then + if mcl_portals.nether_portal_cooloff(self.object) then + return false -- mob has teleported through Nether portal - it's 99% not falling end end - return false -end + -- floating in water (or falling) + local v = self.object:get_velocity() + if v.y > 0 then --- find two animals of same type and breed if nearby and horny -local breed = function(self) + -- apply gravity when moving up + self.object:set_acceleration({ + x = 0, + y = -10, + z = 0 + }) - -- child takes a long time before growing into adult - if self.child == true then + elseif v.y <= 0 and v.y > self.fall_speed then - -- When a child, hornytimer is used to count age until adulthood - self.hornytimer = self.hornytimer + 1 + -- fall downwards at set speed + self.object:set_acceleration({ + x = 0, + y = self.fall_speed, + z = 0 + }) + else + -- stop accelerating once max fall speed hit + self.object:set_acceleration({x = 0, y = 0, z = 0}) + end - if self.hornytimer >= CHILD_GROW_TIME then + if minetest_registered_nodes[node_ok(pos).name].groups.lava then - self.child = false - self.hornytimer = 0 + if self.floats_on_lava == 1 then - self.object:set_properties({ - textures = self.base_texture, - mesh = self.base_mesh, - visual_size = self.base_size, - collisionbox = self.base_colbox, - selectionbox = self.base_selbox, + self.object:set_acceleration({ + x = 0, + y = -self.fall_speed / (max(1, v.y) ^ 2), + z = 0 }) - - -- custom function when child grows up - if self.on_grown then - self.on_grown(self) - else - -- jump when fully grown so as not to fall into ground - self.object:set_velocity({ - x = 0, - y = self.jump_height, - z = 0 - }) - end - end - - return - end - - -- horny animal can mate for HORNY_TIME seconds, - -- afterwards horny animal cannot mate again for HORNY_AGAIN_TIME seconds - if self.horny == true - and self.hornytimer < HORNY_TIME + HORNY_AGAIN_TIME then - - self.hornytimer = self.hornytimer + 1 - - if self.hornytimer >= HORNY_TIME + HORNY_AGAIN_TIME then - self.hornytimer = 0 - self.horny = false end end - -- find another same animal who is also horny and mate if nearby - if self.horny == true - and self.hornytimer <= HORNY_TIME then + -- in water then float up + if minetest_registered_nodes[node_ok(pos).name].groups.water then - local pos = self.object:get_pos() + if self.floats == 1 then - effect({x = pos.x, y = pos.y + 1, z = pos.z}, 8, "heart.png", 3, 4, 1, 0.1) - - local objs = minetest.get_objects_inside_radius(pos, 3) - local num = 0 - local ent = nil - - for n = 1, #objs do - - ent = objs[n]:get_luaentity() - - -- check for same animal with different colour - local canmate = false - - if ent then - - if ent.name == self.name then - canmate = true - else - local entname = string.split(ent.name,":") - local selfname = string.split(self.name,":") - - if entname[1] == selfname[1] then - entname = string.split(entname[2],"_") - selfname = string.split(selfname[2],"_") - - if entname[1] == selfname[1] then - canmate = true - end - end - end - end - - if ent - and canmate == true - and ent.horny == true - and ent.hornytimer <= HORNY_TIME then - num = num + 1 - end - - -- found your mate? then have a baby - if num > 1 then - - self.hornytimer = HORNY_TIME + 1 - ent.hornytimer = HORNY_TIME + 1 - - -- spawn baby - minetest.after(5, function(parent1, parent2, pos) - if not parent1.object:get_luaentity() then - return - end - if not parent2.object:get_luaentity() then - return - end - - -- Give XP - if mod_experience then - mcl_experience.throw_experience(pos, math.random(1, 7)) - end - - -- custom breed function - if parent1.on_breed then - -- when false, skip going any further - if parent1.on_breed(parent1, parent2) == false then - return - end - end - - local child = mobs:spawn_child(pos, parent1.name) - - local ent_c = child:get_luaentity() - - - -- Use texture of one of the parents - local p = math.random(1, 2) - if p == 1 then - ent_c.base_texture = parent1.base_texture - else - ent_c.base_texture = parent2.base_texture - end - child:set_properties({ - textures = ent_c.base_texture - }) - - -- tamed and owned by parents' owner - ent_c.tamed = true - ent_c.owner = parent1.owner - end, self, ent, pos) - - num = 0 - - break - end - end - end -end - - --- find and replace what mob is looking for (grass, wheat etc.) -local replace = function(self, pos) - - if not self.replace_rate - or not self.replace_what - or self.child == true - or self.object:get_velocity().y ~= 0 - or random(1, self.replace_rate) > 1 then - return - end - - local what, with, y_offset - - if type(self.replace_what[1]) == "table" then - - local num = random(#self.replace_what) - - what = self.replace_what[num][1] or "" - with = self.replace_what[num][2] or "" - y_offset = self.replace_what[num][3] or 0 - else - what = self.replace_what - with = self.replace_with or "" - y_offset = self.replace_offset or 0 - end - - pos.y = pos.y + y_offset - - local node = minetest.get_node(pos) - if node.name == what then - - local oldnode = {name = what, param2 = node.param2} - local newnode = {name = with, param2 = node.param2} - local on_replace_return - - if self.on_replace then - on_replace_return = self.on_replace(self, pos, oldnode, newnode) - end - - if on_replace_return ~= false then - - if mobs_griefing then - minetest.set_node(pos, newnode) - end - - end - end -end - - --- check if daytime and also if mob is docile during daylight hours -local day_docile = function(self) - - if self.docile_by_day == false then - - return false - - elseif self.docile_by_day == true - and self.time_of_day > 0.2 - and self.time_of_day < 0.8 then - - return true - end -end - - -local los_switcher = false -local height_switcher = false - --- path finding and smart mob routine by rnd, line_of_sight and other edits by Elkien3 -local smart_mobs = function(self, s, p, dist, dtime) - - local s1 = self.path.lastpos - - local target_pos = self.attack:get_pos() - - -- is it becoming stuck? - if abs(s1.x - s.x) + abs(s1.z - s.z) < .5 then - self.path.stuck_timer = self.path.stuck_timer + dtime - else - self.path.stuck_timer = 0 - end - - self.path.lastpos = {x = s.x, y = s.y, z = s.z} - - local use_pathfind = false - local has_lineofsight = minetest.line_of_sight( - {x = s.x, y = (s.y) + .5, z = s.z}, - {x = target_pos.x, y = (target_pos.y) + 1.5, z = target_pos.z}, .2) - - -- im stuck, search for path - if not has_lineofsight then - - if los_switcher == true then - use_pathfind = true - los_switcher = false - end -- cannot see target! - else - if los_switcher == false then - - los_switcher = true - use_pathfind = false - - minetest.after(1, function(self) - if not self.object:get_luaentity() then - return - end - if has_lineofsight then self.path.following = false end - end, self) - end -- can see target! - end - - if (self.path.stuck_timer > stuck_timeout and not self.path.following) then - - use_pathfind = true - self.path.stuck_timer = 0 - - minetest.after(1, function(self) - if not self.object:get_luaentity() then - return - end - if has_lineofsight then self.path.following = false end - end, self) - end - - if (self.path.stuck_timer > stuck_path_timeout and self.path.following) then - - use_pathfind = true - self.path.stuck_timer = 0 - - minetest.after(1, function(self) - if not self.object:get_luaentity() then - return - end - if has_lineofsight then self.path.following = false end - end, self) - end - - if math.abs(vector.subtract(s,target_pos).y) > self.stepheight then - - if height_switcher then - use_pathfind = true - height_switcher = false + self.object:set_acceleration({ + x = 0, + y = -self.fall_speed / (math.max(1, v.y) ^ 2), + z = 0 + }) end else - if not height_switcher then - use_pathfind = false - height_switcher = true - end - end - if use_pathfind then - -- lets try find a path, first take care of positions - -- since pathfinder is very sensitive - local sheight = self.collisionbox[5] - self.collisionbox[2] - - -- round position to center of node to avoid stuck in walls - -- also adjust height for player models! - s.x = floor(s.x + 0.5) - s.z = floor(s.z + 0.5) - - local ssight, sground = minetest.line_of_sight(s, { - x = s.x, y = s.y - 4, z = s.z}, 1) - - -- determine node above ground - if not ssight then - s.y = sground.y + 1 - end - - local p1 = self.attack:get_pos() - - p1.x = floor(p1.x + 0.5) - p1.y = floor(p1.y + 0.5) - p1.z = floor(p1.z + 0.5) - - local dropheight = 12 - if self.fear_height ~= 0 then dropheight = self.fear_height end - local jumpheight = 0 - if self.jump and self.jump_height >= 4 then - jumpheight = math.min(math.ceil(self.jump_height / 4), 4) - elseif self.stepheight > 0.5 then - jumpheight = 1 - end - self.path.way = minetest.find_path(s, p1, 16, jumpheight, dropheight, "A*_noprefetch") - - self.state = "" - do_attack(self, self.attack) - - -- no path found, try something else - if not self.path.way then - - self.path.following = false - - -- lets make way by digging/building if not accessible - if self.pathfinding == 2 and mobs_griefing then - - -- is player higher than mob? - if s.y < p1.y then - - -- build upwards - if not minetest.is_protected(s, "") then - - local ndef1 = minetest.registered_nodes[self.standing_in] - - if ndef1 and (ndef1.buildable_to or ndef1.groups.liquid) then - - minetest.set_node(s, {name = mobs.fallback_node}) - end - end - - local sheight = math.ceil(self.collisionbox[5]) + 1 - - -- assume mob is 2 blocks high so it digs above its head - s.y = s.y + sheight - - -- remove one block above to make room to jump - if not minetest.is_protected(s, "") then - - local node1 = node_ok(s, "air").name - local ndef1 = minetest.registered_nodes[node1] - - if node1 ~= "air" - and node1 ~= "ignore" - and ndef1 - and not ndef1.groups.level - and not ndef1.groups.unbreakable - and not ndef1.groups.liquid then - - minetest.set_node(s, {name = "air"}) - minetest.add_item(s, ItemStack(node1)) - - end - end - - s.y = s.y - sheight - self.object:set_pos({x = s.x, y = s.y + 2, z = s.z}) - - else -- dig 2 blocks to make door toward player direction - - local yaw1 = self.object:get_yaw() + pi / 2 - local p1 = { - x = s.x + cos(yaw1), - y = s.y, - z = s.z + sin(yaw1) - } - - if not minetest.is_protected(p1, "") then - - local node1 = node_ok(p1, "air").name - local ndef1 = minetest.registered_nodes[node1] - - if node1 ~= "air" - and node1 ~= "ignore" - and ndef1 - and not ndef1.groups.level - and not ndef1.groups.unbreakable - and not ndef1.groups.liquid then - - minetest.add_item(p1, ItemStack(node1)) - minetest.set_node(p1, {name = "air"}) - end - - p1.y = p1.y + 1 - node1 = node_ok(p1, "air").name - ndef1 = minetest.registered_nodes[node1] - - if node1 ~= "air" - and node1 ~= "ignore" - and ndef1 - and not ndef1.groups.level - and not ndef1.groups.unbreakable - and not ndef1.groups.liquid then - - minetest.add_item(p1, ItemStack(node1)) - minetest.set_node(p1, {name = "air"}) - end - - end - end - end - - -- will try again in 2 seconds - self.path.stuck_timer = stuck_timeout - 2 - elseif s.y < p1.y and (not self.fly) then - do_jump(self) --add jump to pathfinding - self.path.following = true - -- Yay, I found path! - -- TODO: Implement war_cry sound without being annoying - --mob_sound(self, "war_cry", true) - else - set_velocity(self, self.walk_velocity) - - -- follow path now that it has it - self.path.following = true - end end end --- specific attacks -local specific_attack = function(list, what) - - -- no list so attack default (player, animals etc.) - if list == nil then - return true - end - - -- found entity on list to attack? - for no = 1, #list do - - if list[no] == what then - return true - end - end - - return false -end - --- monster find someone to attack -local monster_attack = function(self) - - if self.type ~= "monster" - or not damage_enabled - or minetest.is_creative_enabled("") - or self.passive - or self.state == "attack" - or day_docile(self) then - return - end - - local s = self.object:get_pos() - local p, sp, dist - local player, obj, min_player - local type, name = "", "" - local min_dist = self.view_range + 1 - local objs = minetest.get_objects_inside_radius(s, self.view_range) - - for n = 1, #objs do - - if objs[n]:is_player() then - - if mobs.invis[ objs[n]:get_player_name() ] or (not object_in_range(self, objs[n])) then - type = "" - else - player = objs[n] - type = "player" - name = "player" - end - else - obj = objs[n]:get_luaentity() - - if obj then - player = obj.object - type = obj.type - name = obj.name or "" - end - end - - -- find specific mob to attack, failing that attack player/npc/animal - if specific_attack(self.specific_attack, name) - and (type == "player" or type == "npc" - or (type == "animal" and self.attack_animals == true)) then - - p = player:get_pos() - sp = s - - dist = vector.distance(p, s) - - -- aim higher to make looking up hills more realistic - p.y = p.y + 1 - sp.y = sp.y + 1 - - - -- choose closest player to attack - if dist < min_dist - and line_of_sight(self, sp, p, 2) == true then - min_dist = dist - min_player = player - end - end - end - - -- attack player - if min_player then - do_attack(self, min_player) - end -end - - --- npc, find closest monster to attack -local npc_attack = function(self) - - if self.type ~= "npc" - or not self.attacks_monsters - or self.state == "attack" then - return - end - - local p, sp, obj, min_player - local s = self.object:get_pos() - local min_dist = self.view_range + 1 - local objs = minetest.get_objects_inside_radius(s, self.view_range) - - for n = 1, #objs do - - obj = objs[n]:get_luaentity() - - if obj and obj.type == "monster" then - - p = obj.object:get_pos() - sp = s - - local dist = vector.distance(p, s) - - -- aim higher to make looking up hills more realistic - p.y = p.y + 1 - sp.y = sp.y + 1 - - if dist < min_dist - and line_of_sight(self, sp, p, 2) == true then - min_dist = dist - min_player = obj.object - end - end - end - - if min_player then - do_attack(self, min_player) - end -end - - --- specific runaway -local specific_runaway = function(list, what) - - -- no list so do not run - if list == nil then - return false - end - - -- found entity on list to attack? - for no = 1, #list do - - if list[no] == what then - return true - end - end - - return false -end -- find someone to runaway from @@ -2023,7 +299,7 @@ local runaway_from = function(self) local player, obj, min_player local type, name = "", "" local min_dist = self.view_range + 1 - local objs = minetest.get_objects_inside_radius(s, self.view_range) + local objs = minetest_get_objects_inside_radius(s, self.view_range) for n = 1, #objs do @@ -2080,10 +356,10 @@ local runaway_from = function(self) z = lp.z - s.z } - local yaw = (atan(vec.z / vec.x) + 3 * pi / 2) - self.rotate + local yaw = (atan(vec.z / vec.x) + 3 * math_pi / 2) - self.rotate if lp.x > s.x then - yaw = yaw + pi + yaw = yaw + math_pi end yaw = set_yaw(self, yaw, 4) @@ -2094,6 +370,26 @@ local runaway_from = function(self) end +-- specific runaway +local specific_runaway = function(list, what) + + -- no list so do not run + if list == nil then + return false + end + + -- found entity on list to attack? + for no = 1, #list do + + if list[no] == what then + return true + end + end + + return false +end + + -- follow player if owner or holding item, if fish outta water then flop local follow_flop = function(self) @@ -2172,9 +468,9 @@ local follow_flop = function(self) z = p.z - s.z } - local yaw = (atan(vec.z / vec.x) + pi / 2) - self.rotate + local yaw = (atan(vec.z / vec.x) + math_pi / 2) - self.rotate - if p.x > s.x then yaw = yaw + pi end + if p.x > s.x then yaw = yaw + math_pi end set_yaw(self, yaw, 2.35) @@ -2205,7 +501,7 @@ local follow_flop = function(self) self.state = "flop" self.object:set_acceleration({x = 0, y = DEFAULT_FALL_SPEED, z = 0}) - local sdef = minetest.registered_nodes[self.standing_on] + local sdef = minetest_registered_nodes[self.standing_on] -- Flop on ground if sdef and sdef.walkable then mob_sound(self, "flop") @@ -2228,7 +524,141 @@ local follow_flop = function(self) end --- dogshoot attack switch and counter function +-- npc, find closest monster to attack +local npc_attack = function(self) + + if self.type ~= "npc" + or not self.attacks_monsters + or self.state == "attack" then + return + end + + local p, sp, obj, min_player + local s = self.object:get_pos() + local min_dist = self.view_range + 1 + local objs = minetest_get_objects_inside_radius(s, self.view_range) + + for n = 1, #objs do + + obj = objs[n]:get_luaentity() + + if obj and obj.type == "monster" then + + p = obj.object:get_pos() + sp = s + + local dist = vector.distance(p, s) + + -- aim higher to make looking up hills more realistic + p.y = p.y + 1 + sp.y = sp.y + 1 + + if dist < min_dist + and line_of_sight(self, sp, p, 2) == true then + min_dist = dist + min_player = obj.object + end + end + end + + if min_player then + do_attack(self, min_player) + end +end + + +-- monster find someone to attack +local monster_attack = function(self) + + if self.type ~= "monster" + or not damage_enabled + or minetest_is_creative_enabled("") + or self.passive + or self.state == "attack" + or day_docile(self) then + return + end + + local s = self.object:get_pos() + local p, sp, dist + local player, obj, min_player + local type, name = "", "" + local min_dist = self.view_range + 1 + local objs = minetest_get_objects_inside_radius(s, self.view_range) + + for n = 1, #objs do + + if objs[n]:is_player() then + + if mobs.invis[ objs[n]:get_player_name() ] or (not object_in_range(self, objs[n])) then + type = "" + else + player = objs[n] + type = "player" + name = "player" + end + else + obj = objs[n]:get_luaentity() + + if obj then + player = obj.object + type = obj.type + name = obj.name or "" + end + end + + -- find specific mob to attack, failing that attack player/npc/animal + if specific_attack(self.specific_attack, name) + and (type == "player" or type == "npc" + or (type == "animal" and self.attack_animals == true)) then + + p = player:get_pos() + sp = s + + dist = vector.distance(p, s) + + -- aim higher to make looking up hills more realistic + p.y = p.y + 1 + sp.y = sp.y + 1 + + + -- choose closest player to attack + if dist < min_dist + and line_of_sight(self, sp, p, 2) == true then + min_dist = dist + min_player = player + end + end + end + + -- attack player + if min_player then + do_attack(self, min_player) + end +end + + +-- specific attacks +local specific_attack = function(list, what) + + -- no list so attack default (player, animals etc.) + if list == nil then + return true + end + + -- found entity on list to attack? + for no = 1, #list do + + if list[no] == what then + return true + end + end + + return false +end + + +-- dogfight attack switch and counter function local dogswitch = function(self, dtime) -- switch mode not activated @@ -2256,19 +686,1491 @@ local dogswitch = function(self, dtime) return self.dogshoot_switch end --- execute current state (stand, walk, run, attacks) --- returns true if mob has died -local do_states = function(self, dtime) +-- path finding and smart mob routine by rnd, line_of_sight and other edits by Elkien3 +local smart_mobs = function(self, s, p, dist, dtime) - local yaw = self.object:get_yaw() or 0 + local s1 = self.path.lastpos + + local target_pos = self.attack:get_pos() + + -- is it becoming stuck? + if math_abs(s1.x - s.x) + math_abs(s1.z - s.z) < .5 then + self.path.stuck_timer = self.path.stuck_timer + dtime + else + self.path.stuck_timer = 0 + end + + self.path.lastpos = {x = s.x, y = s.y, z = s.z} + + local use_pathfind = false + local has_lineofsight = minetest_line_of_sight( + {x = s.x, y = (s.y) + .5, z = s.z}, + {x = target_pos.x, y = (target_pos.y) + 1.5, z = target_pos.z}, .2) + + -- im stuck, search for path + if not has_lineofsight then + + if los_switcher == true then + use_pathfind = true + los_switcher = false + end -- cannot see target! + else + if los_switcher == false then + + los_switcher = true + use_pathfind = false + + minetest_after(1, function(self) + if not self.object:get_luaentity() then + return + end + if has_lineofsight then self.path.following = false end + end, self) + end -- can see target! + end + + if (self.path.stuck_timer > stuck_timeout and not self.path.following) then + + use_pathfind = true + self.path.stuck_timer = 0 + + minetest_after(1, function(self) + if not self.object:get_luaentity() then + return + end + if has_lineofsight then self.path.following = false end + end, self) + end + + if (self.path.stuck_timer > stuck_path_timeout and self.path.following) then + + use_pathfind = true + self.path.stuck_timer = 0 + + minetest_after(1, function(self) + if not self.object:get_luaentity() then + return + end + if has_lineofsight then self.path.following = false end + end, self) + end + + if math_abs(vector.subtract(s,target_pos).y) > self.stepheight then + + if height_switcher then + use_pathfind = true + height_switcher = false + end + else + if not height_switcher then + use_pathfind = false + height_switcher = true + end + end + + if use_pathfind then + -- lets try find a path, first take care of positions + -- since pathfinder is very sensitive + local sheight = self.collisionbox[5] - self.collisionbox[2] + + -- round position to center of node to avoid stuck in walls + -- also adjust height for player models! + s.x = math_floor(s.x + 0.5) + s.z = math_floor(s.z + 0.5) + + local ssight, sground = minetest_line_of_sight(s, { + x = s.x, y = s.y - 4, z = s.z}, 1) + + -- determine node above ground + if not ssight then + s.y = sground.y + 1 + end + + local p1 = self.attack:get_pos() + + p1.x = math_floor(p1.x + 0.5) + p1.y = math_floor(p1.y + 0.5) + p1.z = math_floor(p1.z + 0.5) + + local dropheight = 12 + if self.fear_height ~= 0 then dropheight = self.fear_height end + local jumpheight = 0 + if self.jump and self.jump_height >= 4 then + jumpheight = math.min(math.ceil(self.jump_height / 4), 4) + elseif self.stepheight > 0.5 then + jumpheight = 1 + end + self.path.way = minetest_find_path(s, p1, 16, jumpheight, dropheight, "A*_noprefetch") + + self.state = "" + do_attack(self, self.attack) + + -- no path found, try something else + if not self.path.way then + + self.path.following = false + + -- lets make way by digging/building if not accessible + if self.pathfinding == 2 and mobs_griefing then + + -- is player higher than mob? + if s.y < p1.y then + + -- build upwards + if not minetest_is_protected(s, "") then + + local ndef1 = minetest_registered_nodes[self.standing_in] + + if ndef1 and (ndef1.buildable_to or ndef1.groups.liquid) then + + minetest_set_node(s, {name = mobs.fallback_node}) + end + end + + local sheight = math.ceil(self.collisionbox[5]) + 1 + + -- assume mob is 2 blocks high so it digs above its head + s.y = s.y + sheight + + -- remove one block above to make room to jump + if not minetest_is_protected(s, "") then + + local node1 = node_ok(s, "air").name + local ndef1 = minetest_registered_nodes[node1] + + if node1 ~= "air" + and node1 ~= "ignore" + and ndef1 + and not ndef1.groups.level + and not ndef1.groups.unbreakable + and not ndef1.groups.liquid then + + minetest_set_node(s, {name = "air"}) + minetest_add_item(s, ItemStack(node1)) + + end + end + + s.y = s.y - sheight + self.object:set_pos({x = s.x, y = s.y + 2, z = s.z}) + + else -- dig 2 blocks to make door toward player direction + + local yaw1 = self.object:get_yaw() + math_pi / 2 + local p1 = { + x = s.x + math_cos(yaw1), + y = s.y, + z = s.z + math_sin(yaw1) + } + + if not minetest_is_protected(p1, "") then + + local node1 = node_ok(p1, "air").name + local ndef1 = minetest_registered_nodes[node1] + + if node1 ~= "air" + and node1 ~= "ignore" + and ndef1 + and not ndef1.groups.level + and not ndef1.groups.unbreakable + and not ndef1.groups.liquid then + + minetest_add_item(p1, ItemStack(node1)) + minetest_set_node(p1, {name = "air"}) + end + + p1.y = p1.y + 1 + node1 = node_ok(p1, "air").name + ndef1 = minetest_registered_nodes[node1] + + if node1 ~= "air" + and node1 ~= "ignore" + and ndef1 + and not ndef1.groups.level + and not ndef1.groups.unbreakable + and not ndef1.groups.liquid then + + minetest_add_item(p1, ItemStack(node1)) + minetest_set_node(p1, {name = "air"}) + end + + end + end + end + + -- will try again in 2 seconds + self.path.stuck_timer = stuck_timeout - 2 + elseif s.y < p1.y and (not self.fly) then + do_jump(self) --add jump to pathfinding + self.path.following = true + -- Yay, I found path! + -- TODO: Implement war_cry sound without being annoying + --mob_sound(self, "war_cry", true) + else + set_velocity(self, self.walk_velocity) + + -- follow path now that it has it + self.path.following = true + end + end +end + + + + + + +-- check if mob is dead or only hurt +local check_for_death = function(self, cause, cmi_cause) + + if self.state == "die" then + return true + end + + -- has health actually changed? + if self.health == self.old_health and self.health > 0 then + return false + end + + local damaged = self.health < self.old_health + self.old_health = self.health + + -- still got some health? + if self.health > 0 then + + -- make sure health isn't higher than max + if self.health > self.hp_max then + self.health = self.hp_max + end + + -- play damage sound if health was reduced and make mob flash red. + if damaged then + add_texture_mod(self, "^[colorize:red:130") + minetest_after(.2, function(self) + if self and self.object then + remove_texture_mod(self, "^[colorize:red:130") + end + end, self) + mob_sound(self, "damage") + end + + -- backup nametag so we can show health stats + if not self.nametag2 then + self.nametag2 = self.nametag or "" + end + + if show_health + and (cmi_cause and cmi_cause.type == "punch") then + + self.htimer = 2 + self.nametag = "♥ " .. self.health .. " / " .. self.hp_max + + update_tag(self) + end + + return false + end + + mob_sound(self, "death") + + local function death_handle(self) + -- dropped cooked item if mob died in fire or lava + if cause == "lava" or cause == "fire" then + item_drop(self, true, 0) + else + local wielditem = ItemStack() + if cause == "hit" then + local puncher = cmi_cause.puncher + if puncher then + wielditem = puncher:get_wielded_item() + end + end + local cooked = mcl_burning.is_burning(self.object) or mcl_enchanting.has_enchantment(wielditem, "fire_aspect") + local looting = mcl_enchanting.get_enchantment(wielditem, "looting") + item_drop(self, cooked, looting) + + if mod_experience and ((not self.child) or self.type ~= "animal") and (minetest_get_us_time() - self.xp_timestamp <= 5000000) then + mcl_experience.throw_experience(self.object:get_pos(), math.random(self.xp_min, self.xp_max)) + end + end + end + + -- execute custom death function + if self.on_die then + + local pos = self.object:get_pos() + local on_die_exit = self.on_die(self, pos, cmi_cause) + if on_die_exit ~= true then + death_handle(self) + end + + if use_cmi then + cmi.notify_die(self.object, cmi_cause) + end + + if on_die_exit == true then + self.state = "die" + mcl_burning.extinguish(self.object) + self.object:remove() + return true + end + end + + local collisionbox + if self.collisionbox then + collisionbox = table.copy(self.collisionbox) + end + + self.state = "die" + self.attack = nil + self.v_start = false + self.fall_speed = DEFAULT_FALL_SPEED + self.timer = 0 + self.blinktimer = 0 + remove_texture_mod(self, "^[colorize:#FF000040") + remove_texture_mod(self, "^[brighten") + self.passive = true + + self.object:set_properties({ + pointable = false, + collide_with_objects = false, + }) + + set_velocity(self, 0) + local acc = self.object:get_acceleration() + acc.x, acc.y, acc.z = 0, DEFAULT_FALL_SPEED, 0 + self.object:set_acceleration(acc) + + local length + -- default death function and die animation (if defined) + if self.instant_death then + length = 0 + elseif self.animation + and self.animation.die_start + and self.animation.die_end then + + local frames = self.animation.die_end - self.animation.die_start + local speed = self.animation.die_speed or 15 + length = max(frames / speed, 0) + DEATH_DELAY + set_animation(self, "die") + else + local rot = self.object:get_rotation() + rot.z = math_pi/2 + self.object:set_rotation(rot) + length = 1 + DEATH_DELAY + set_animation(self, "stand", true) + end + + + -- Remove body after a few seconds and drop stuff + local kill = function(self) + if not self.object:get_luaentity() then + return + end + if use_cmi then + cmi.notify_die(self.object, cmi_cause) + end + + death_handle(self) + local dpos = self.object:get_pos() + local cbox = self.collisionbox + local yaw = self.object:get_rotation().y + mcl_burning.extinguish(self.object) + self.object:remove() + mobs.death_effect(dpos, yaw, cbox, not self.instant_death) + end + if length <= 0 then + kill(self) + else + minetest_after(length, kill, self) + end + + return true +end + +local damage_effect = function(self, damage) + -- damage particles + if (not disable_blood) and damage > 0 then + + local amount_large = math_floor(damage / 2) + local amount_small = damage % 2 + + local pos = self.object:get_pos() + + pos.y = pos.y + (self.collisionbox[5] - self.collisionbox[2]) * .5 + + local texture = "mobs_blood.png" + -- full heart damage (one particle for each 2 HP damage) + if amount_large > 0 then + effect(pos, amount_large, texture, 2, 2, 1.75, 0, nil, true) + end + -- half heart damage (one additional particle if damage is an odd number) + if amount_small > 0 then + -- TODO: Use "half heart" + effect(pos, amount_small, texture, 1, 1, 1.75, 0, nil, true) + end + end +end + + +-- custom particle effects +local effect = function(pos, amount, texture, min_size, max_size, radius, gravity, glow, go_down) + + radius = radius or 2 + min_size = min_size or 0.5 + max_size = max_size or 1 + gravity = gravity or -10 + glow = glow or 0 + go_down = go_down or false + + local ym + if go_down then + ym = 0 + else + ym = -radius + end + + minetest_add_particlespawner({ + amount = amount, + time = 0.25, + minpos = pos, + maxpos = pos, + minvel = {x = -radius, y = ym, z = -radius}, + maxvel = {x = radius, y = radius, z = radius}, + minacc = {x = 0, y = gravity, z = 0}, + maxacc = {x = 0, y = gravity, z = 0}, + minexptime = 0.1, + maxexptime = 1, + minsize = min_size, + maxsize = max_size, + texture = texture, + glow = glow, + }) +end + + +-- are we flying in what we are suppose to? (taikedz) +local flight_check = function(self) + + local nod = self.standing_in + local def = minetest_registered_nodes[nod] + + if not def then return false end -- nil check + + local fly_in + if type(self.fly_in) == "string" then + fly_in = { self.fly_in } + elseif type(self.fly_in) == "table" then + fly_in = self.fly_in + else + return false + end + + for _,checknode in pairs(fly_in) do + if nod == checknode then + return true + elseif checknode == "__airlike" and def.walkable == false and + (def.liquidtype == "none" or minetest_get_item_group(nod, "fake_liquid") == 1) then + return true + end + end + + return false +end + + +-- check line of sight (BrunoMine) +local line_of_sight = function(self, pos1, pos2, stepsize) + + stepsize = stepsize or 1 + + local s, pos = minetest_line_of_sight(pos1, pos2, stepsize) + + -- normal walking and flying mobs can see you through air + if s == true then + return true + end + + -- New pos1 to be analyzed + local npos1 = {x = pos1.x, y = pos1.y, z = pos1.z} + + local r, pos = minetest_line_of_sight(npos1, pos2, stepsize) + + -- Checks the return + if r == true then return true end + + -- Nodename found + local nn = minetest_get_node(pos).name + + -- Target Distance (td) to travel + local td = vector.distance(pos1, pos2) + + -- Actual Distance (ad) traveled + local ad = 0 + + -- It continues to advance in the line of sight in search of a real + -- obstruction which counts as 'normal' nodebox. + while minetest_registered_nodes[nn] + and minetest_registered_nodes[nn].walkable == false do + + -- Check if you can still move forward + if td < ad + stepsize then + return true -- Reached the target + end + + -- Moves the analyzed pos + local d = vector.distance(pos1, pos2) + + npos1.x = ((pos2.x - pos1.x) / d * stepsize) + pos1.x + npos1.y = ((pos2.y - pos1.y) / d * stepsize) + pos1.y + npos1.z = ((pos2.z - pos1.z) / d * stepsize) + pos1.z + + -- NaN checks + if d == 0 + or npos1.x ~= npos1.x + or npos1.y ~= npos1.y + or npos1.z ~= npos1.z then + return false + end + + ad = ad + stepsize + + -- scan again + r, pos = minetest_line_of_sight(npos1, pos2, stepsize) + + if r == true then return true end + + -- New Nodename found + nn = minetest_get_node(pos).name + + end + + return false +end + +-- Returns true if node is a water hazard +local is_node_waterhazard = function(self, nodename) + local nn = nodename + if self.water_damage > 0 then + if minetest_get_item_group(nn, "water") ~= 0 then + return true + end + end + if minetest_registered_nodes[nn] and minetest_registered_nodes[nn].drowning and minetest_registered_nodes[nn].drowning > 0 then + if self.breath_max ~= -1 then + -- check if the mob is water-breathing _and_ the block is water; only return true if neither is the case + -- this will prevent water-breathing mobs to classify water or e.g. sand below them as dangerous + if not self.breathes_in_water and minetest_get_item_group(nn, "water") ~= 0 then + return true + end + end + end + return false +end + + +-- Returns true is node can deal damage to self +local is_node_dangerous = function(self, nodename) + local nn = nodename + if self.lava_damage > 0 then + if minetest_get_item_group(nn, "lava") ~= 0 then + return true + end + end + if self.fire_damage > 0 then + if minetest_get_item_group(nn, "fire") ~= 0 then + return true + end + end + if minetest_registered_nodes[nn] and minetest_registered_nodes[nn].damage_per_second and minetest_registered_nodes[nn].damage_per_second > 0 then + return true + end + return false +end + + +local add_texture_mod = function(self, mod) + local full_mod = "" + local already_added = false + for i=1, #self.texture_mods do + if mod == self.texture_mods[i] then + already_added = true + end + full_mod = full_mod .. self.texture_mods[i] + end + if not already_added then + full_mod = full_mod .. mod + table.insert(self.texture_mods, mod) + end + self.object:set_texture_mod(full_mod) +end + + +local remove_texture_mod = function(self, mod) + local full_mod = "" + local remove = {} + for i=1, #self.texture_mods do + if self.texture_mods[i] ~= mod then + full_mod = full_mod .. self.texture_mods[i] + else + table.insert(remove, i) + end + end + for i=#remove, 1 do + table.remove(self.texture_mods, remove[i]) + end + self.object:set_texture_mod(full_mod) +end + + +-- Return true if object is in view_range +local function object_in_range(self, object) + if not object then + return false + end + local factor + -- Apply view range reduction for special player armor + if not object then + return false + end + local factor + -- Apply view range reduction for special player armor + if object:is_player() and mod_armor then + local factors = mcl_armor.player_view_range_factors[object] + factor = factors and factors[self.name] + end + -- Distance check + local dist + if factor and factor == 0 then + return false + elseif factor then + dist = self.view_range * factor + else + dist = self.view_range + end + + local p1, p2 = self.object:get_pos(), object:get_pos() + return p1 and p2 and (vector.distance(p1, p2) <= dist) +end + +-- attack player/mob +local do_attack = function(self, player) + + if self.state == "attack" or self.state == "die" then + return + end + + self.attack = player + self.state = "attack" + + -- TODO: Implement war_cry sound without being annoying + --if math.random(0, 100) < 90 then + --mob_sound(self, "war_cry", true) + --end +end + + +-- play sound +local mob_sound = function(self, soundname, is_opinion, fixed_pitch) + local soundinfo + if self.sounds_child and self.child then + soundinfo = self.sounds_child + elseif self.sounds then + soundinfo = self.sounds + end + if not soundinfo then + return + end + local sound = soundinfo[soundname] + if sound then + if is_opinion and self.opinion_sound_cooloff > 0 then + return + end + local pitch + if not fixed_pitch then + local base_pitch = soundinfo.base_pitch + if not base_pitch then + base_pitch = 1 + end + if self.child and (not self.sounds_child) then + -- Children have higher pitch + pitch = base_pitch * 1.5 + else + pitch = base_pitch + end + -- randomize the pitch a bit + pitch = pitch + math.random(-10, 10) * 0.005 + end + minetest_sound_play(sound, { + object = self.object, + gain = 1.0, + max_hear_distance = self.sounds.distance, + pitch = pitch, + }, true) + self.opinion_sound_cooloff = 1 + end +end + + +local function update_roll(self) + local is_Fleckenstein = self.nametag == "Fleckenstein" + local was_Fleckenstein = false + + local rot = self.object:get_rotation() + rot.z = is_Fleckenstein and math_pi or 0 + self.object:set_rotation(rot) + + local cbox = table.copy(self.collisionbox) + local acbox = self.object:get_properties().collisionbox + + if math_abs(cbox[2] - acbox[2]) > 0.1 then + was_Fleckenstein = true + end + + if is_Fleckenstein ~= was_Fleckenstein then + local pos = self.object:get_pos() + pos.y = pos.y + (acbox[2] + acbox[5]) + self.object:set_pos(pos) + end + + if is_Fleckenstein then + cbox[2], cbox[5] = -cbox[5], -cbox[2] + end + + self.object:set_properties({collisionbox = cbox}) +end + + + +-- is mob facing a cliff or danger +local is_at_cliff_or_danger = function(self) + + if self.fear_height == 0 then -- 0 for no falling protection! + return false + end + + if not self.object:get_luaentity() then + return false + end + local yaw = self.object:get_yaw() + local dir_x = -math_sin(yaw) * (self.collisionbox[4] + 0.5) + local dir_z = math_cos(yaw) * (self.collisionbox[4] + 0.5) + local pos = self.object:get_pos() + local ypos = pos.y + self.collisionbox[2] -- just above floor + + local free_fall, blocker = minetest_line_of_sight( + {x = pos.x + dir_x, y = ypos, z = pos.z + dir_z}, + {x = pos.x + dir_x, y = ypos - self.fear_height, z = pos.z + dir_z}) + if free_fall then + return true + else + local bnode = minetest_get_node(blocker) + local danger = is_node_dangerous(self, bnode.name) + if danger then + return true + else + local def = minetest_registered_nodes[bnode.name] + if def and def.walkable then + return false + end + end + end + + return false +end + + +-- copy the 'mob facing cliff_or_danger check' from above, and rework to avoid water +local is_at_water_danger = function(self) + + + if not self.object:get_luaentity() then + return false + end + local yaw = self.object:get_yaw() + local dir_x = -math_sin(yaw) * (self.collisionbox[4] + 0.5) + local dir_z = math_cos(yaw) * (self.collisionbox[4] + 0.5) + local pos = self.object:get_pos() + local ypos = pos.y + self.collisionbox[2] -- just above floor + + local free_fall, blocker = minetest_line_of_sight( + {x = pos.x + dir_x, y = ypos, z = pos.z + dir_z}, + {x = pos.x + dir_x, y = ypos - 3, z = pos.z + dir_z}) + if free_fall then + return true + else + local bnode = minetest_get_node(blocker) + local waterdanger = is_node_waterhazard(self, bnode.name) + if + waterdanger and (is_node_waterhazard(self, self.standing_in) or is_node_waterhazard(self, self.standing_on)) then + return false + elseif waterdanger and (is_node_waterhazard(self, self.standing_in) or is_node_waterhazard(self, self.standing_on)) == false then + return true + else + local def = minetest_registered_nodes[bnode.name] + if def and def.walkable then + return false + end + end + end + + return false +end + +local function get_light(pos, tod) + local ok, light = pcall(minetest.get_natural_light or minetest.get_node_light, pos, tod) + if ok then + return light + else + return 0 + end +end + +-- environmental damage (water, lava, fire, light etc.) +local do_env_damage = function(self) + + -- feed/tame text timer (so mob 'full' messages dont spam chat) + if self.htimer > 0 then + self.htimer = self.htimer - 1 + end + + -- reset nametag after showing health stats + if self.htimer < 1 and self.nametag2 then + + self.nametag = self.nametag2 + self.nametag2 = nil + + update_tag(self) + end + + local pos = self.object:get_pos() + + self.time_of_day = minetest.get_timeofday() + + -- remove mob if beyond map limits + if not within_limits(pos, 0) then + mcl_burning.extinguish(self.object) + self.object:remove() + return true + end + + + -- Deal light damage to mob, returns true if mob died + local deal_light_damage = function(self, pos, damage) + if not (mod_weather and (mcl_weather.rain.raining or mcl_weather.state == "snow") and mcl_weather.is_outdoor(pos)) then + self.health = self.health - damage + + effect(pos, 5, "mcl_particles_smoke.png") + + if check_for_death(self, "light", {type = "light"}) then + return true + end + end + end + + -- Use get_node_light for Minetest version 5.3 where get_natural_light + -- does not exist yet. + local sunlight = get_light(pos, self.time_of_day) + + -- bright light harms mob + if self.light_damage ~= 0 and (sunlight or 0) > 12 then + if deal_light_damage(self, pos, self.light_damage) then + return true + end + end + local _, dim = nil, "overworld" + if mod_worlds then + _, dim = mcl_worlds.y_to_layer(pos.y) + end + if (self.sunlight_damage ~= 0 or self.ignited_by_sunlight) and (sunlight or 0) >= minetest.LIGHT_MAX and dim == "overworld" then + if self.ignited_by_sunlight then + mcl_burning.set_on_fire(self.object, 10) + else + deal_light_damage(self, pos, self.sunlight_damage) + return true + end + end + + local y_level = self.collisionbox[2] + + if self.child then + y_level = self.collisionbox[2] * 0.5 + end + + -- what is mob standing in? + pos.y = pos.y + y_level + 0.25 -- foot level + local pos2 = {x=pos.x, y=pos.y-1, z=pos.z} + self.standing_in = node_ok(pos, "air").name + self.standing_on = node_ok(pos2, "air").name + + -- don't fall when on ignore, just stand still + if self.standing_in == "ignore" then + self.object:set_velocity({x = 0, y = 0, z = 0}) + end + + local nodef = minetest_registered_nodes[self.standing_in] + + -- rain + if self.rain_damage > 0 and mod_weather then + if mcl_weather.rain.raining and mcl_weather.is_outdoor(pos) then + + self.health = self.health - self.rain_damage + + if check_for_death(self, "rain", {type = "environment", + pos = pos, node = self.standing_in}) then + return true + end + end + end + + pos.y = pos.y + 1 -- for particle effect position + + -- water damage + if self.water_damage > 0 + and nodef.groups.water then + + if self.water_damage ~= 0 then + + self.health = self.health - self.water_damage + + effect(pos, 5, "mcl_particles_smoke.png", nil, nil, 1, nil) + + if check_for_death(self, "water", {type = "environment", + pos = pos, node = self.standing_in}) then + return true + end + end + + -- lava damage + elseif self.lava_damage > 0 + and (nodef.groups.lava) then + + if self.lava_damage ~= 0 then + + self.health = self.health - self.lava_damage + + mcl_burning.set_on_fire(self.object, 15) + + effect(pos, 5, "fire_basic_flame.png", nil, nil, 1, nil) + + if check_for_death(self, "lava", {type = "environment", + pos = pos, node = self.standing_in}) then + return true + end + end + + -- fire damage + elseif self.fire_damage > 0 + and (nodef.groups.fire) then + + if self.fire_damage ~= 0 then + + self.health = self.health - self.fire_damage + + mcl_burning.set_on_fire(self.object, 8) + + effect(pos, 5, "fire_basic_flame.png", nil, nil, 1, nil) + + if check_for_death(self, "fire", {type = "environment", + pos = pos, node = self.standing_in}) then + return true + end + end + + -- damage_per_second node check + elseif nodef.damage_per_second ~= 0 and not nodef.groups.lava and not nodef.groups.fire then + + self.health = self.health - nodef.damage_per_second + + effect(pos, 5, "mcl_particles_smoke.png") + + if check_for_death(self, "dps", {type = "environment", + pos = pos, node = self.standing_in}) then + return true + end + end + + -- Drowning damage + if self.breath_max ~= -1 then + local drowning = false + if self.breathes_in_water then + if minetest_get_item_group(self.standing_in, "water") == 0 then + drowning = true + end + elseif nodef.drowning > 0 then + drowning = true + end + if drowning then + + self.breath = math.max(0, self.breath - 1) + + effect(pos, 2, "bubble.png", nil, nil, 1, nil) + if self.breath <= 0 then + local dmg + if nodef.drowning > 0 then + dmg = nodef.drowning + else + dmg = 4 + end + damage_effect(self, dmg) + self.health = self.health - dmg + end + if check_for_death(self, "drowning", {type = "environment", + pos = pos, node = self.standing_in}) then + return true + end + else + self.breath = math_min(self.breath_max, self.breath + 1) + end + end + + --- suffocation inside solid node + -- FIXME: Redundant with mcl_playerplus + if (self.suffocation == true) + and (nodef.walkable == nil or nodef.walkable == true) + and (nodef.collision_box == nil or nodef.collision_box.type == "regular") + and (nodef.node_box == nil or nodef.node_box.type == "regular") + and (nodef.groups.disable_suffocation ~= 1) + and (nodef.groups.opaque == 1) then + + -- Short grace period before starting to take suffocation damage. + -- This is different from players, who take damage instantly. + -- This has been done because mobs might briefly be inside solid nodes + -- when e.g. climbing up stairs. + -- This is a bit hacky because it assumes that do_env_damage + -- is called roughly every second only. + self.suffocation_timer = self.suffocation_timer + 1 + if self.suffocation_timer >= 3 then + -- 2 damage per second + -- TODO: Deal this damage once every 1/2 second + self.health = self.health - 2 + + if check_for_death(self, "suffocation", {type = "environment", + pos = pos, node = self.standing_in}) then + return true + end + end + else + self.suffocation_timer = 0 + end + + return check_for_death(self, "", {type = "unknown"}) +end + + +-- jump if facing a solid node (not fences or gates) +local do_jump = function(self) + + if not self.jump + or self.jump_height == 0 + or self.fly + or (self.child and self.type ~= "monster") + or self.order == "stand" then + return false + end + + self.facing_fence = false + + -- something stopping us while moving? + if self.state ~= "stand" + and get_velocity(self) > 0.5 + and self.object:get_velocity().y ~= 0 then + return false + end + + local pos = self.object:get_pos() + local yaw = self.object:get_yaw() + + -- what is mob standing on? + pos.y = pos.y + self.collisionbox[2] - 0.2 + + local nod = node_ok(pos) + + if minetest_registered_nodes[nod.name].walkable == false then + return false + end + + -- where is front + local dir_x = -math_sin(yaw) * (self.collisionbox[4] + 0.5) + local dir_z = math_cos(yaw) * (self.collisionbox[4] + 0.5) + + -- what is in front of mob? + nod = node_ok({ + x = pos.x + dir_x, + y = pos.y + 0.5, + z = pos.z + dir_z + }) + + -- this is used to detect if there's a block on top of the block in front of the mob. + -- If there is, there is no point in jumping as we won't manage. + local nodTop = node_ok({ + x = pos.x + dir_x, + y = pos.y + 1.5, + z = pos.z + dir_z + }, "air") + + -- we don't attempt to jump if there's a stack of blocks blocking + if minetest_registered_nodes[nodTop.name].walkable == true then + return false + end + + -- thin blocks that do not need to be jumped + if nod.name == node_snow then + return false + end + + if self.walk_chance == 0 + or minetest_registered_items[nod.name].walkable then + + if minetest_get_item_group(nod.name, "fence") == 0 + and minetest_get_item_group(nod.name, "fence_gate") == 0 + and minetest_get_item_group(nod.name, "wall") == 0 then + + local v = self.object:get_velocity() + + v.y = self.jump_height + + set_animation(self, "jump") -- only when defined + + self.object:set_velocity(v) + + -- when in air move forward + minetest_after(0.3, function(self, v) + if (not self.object) or (not self.object:get_luaentity()) or (self.state == "die") then + return + end + self.object:set_acceleration({ + x = v.x * 2, + y = -10, + z = v.z * 2, + }) + end, self, v) + + if self.jump_sound_cooloff <= 0 then + mob_sound(self, "jump") + self.jump_sound_cooloff = 0.5 + end + else + self.facing_fence = true + end + + -- if we jumped against a block/wall 4 times then turn + if self.object:get_velocity().x ~= 0 + and self.object:get_velocity().z ~= 0 then + + self.jump_count = (self.jump_count or 0) + 1 + + if self.jump_count == 4 then + + local yaw = self.object:get_yaw() or 0 + + yaw = set_yaw(self, yaw + 1.35, 8) + + self.jump_count = 0 + end + end + + return true + end + + return false +end + + +-- blast damage to entities nearby +local entity_physics = function(pos, radius) + + radius = radius * 2 + + local objs = minetest_get_objects_inside_radius(pos, radius) + local obj_pos, dist + + for n = 1, #objs do + + obj_pos = objs[n]:get_pos() + + dist = vector.distance(pos, obj_pos) + if dist < 1 then dist = 1 end + + local damage = math_floor((4 / dist) * radius) + local ent = objs[n]:get_luaentity() + + -- punches work on entities AND players + objs[n]:punch(objs[n], 1.0, { + full_punch_interval = 1.0, + damage_groups = {fleshy = damage}, + }, pos) + end +end + + +-- should mob follow what I'm holding ? +local follow_holding = function(self, clicker) + + if mobs.invis[clicker:get_player_name()] then + return false + end + + local item = clicker:get_wielded_item() + local t = type(self.follow) + + -- single item + if t == "string" + and item:get_name() == self.follow then + return true + + -- multiple items + elseif t == "table" then + + for no = 1, #self.follow do + + if self.follow[no] == item:get_name() then + return true + end + end + end + + return false +end + + +-- find two animals of same type and breed if nearby and horny +local breed = function(self) + + -- child takes a long time before growing into adult + if self.child == true then + + -- When a child, hornytimer is used to count age until adulthood + self.hornytimer = self.hornytimer + 1 + + if self.hornytimer >= CHILD_GROW_TIME then + + self.child = false + self.hornytimer = 0 + + self.object:set_properties({ + textures = self.base_texture, + mesh = self.base_mesh, + visual_size = self.base_size, + collisionbox = self.base_colbox, + selectionbox = self.base_selbox, + }) + + -- custom function when child grows up + if self.on_grown then + self.on_grown(self) + else + -- jump when fully grown so as not to fall into ground + self.object:set_velocity({ + x = 0, + y = self.jump_height, + z = 0 + }) + end + end + + return + end + + -- horny animal can mate for BREED_TIME seconds, + -- afterwards horny animal cannot mate again for BREED_TIME_AGAIN seconds + if self.horny == true + and self.hornytimer < BREED_TIME + BREED_TIME_AGAIN then + + self.hornytimer = self.hornytimer + 1 + + if self.hornytimer >= BREED_TIME + BREED_TIME_AGAIN then + self.hornytimer = 0 + self.horny = false + end + end + + -- find another same animal who is also horny and mate if nearby + if self.horny == true + and self.hornytimer <= BREED_TIME then + + local pos = self.object:get_pos() + + effect({x = pos.x, y = pos.y + 1, z = pos.z}, 8, "heart.png", 3, 4, 1, 0.1) + + local objs = minetest_get_objects_inside_radius(pos, 3) + local num = 0 + local ent = nil + + for n = 1, #objs do + + ent = objs[n]:get_luaentity() + + -- check for same animal with different colour + local canmate = false + + if ent then + + if ent.name == self.name then + canmate = true + else + local entname = string.split(ent.name,":") + local selfname = string.split(self.name,":") + + if entname[1] == selfname[1] then + entname = string.split(entname[2],"_") + selfname = string.split(selfname[2],"_") + + if entname[1] == selfname[1] then + canmate = true + end + end + end + end + + if ent + and canmate == true + and ent.horny == true + and ent.hornytimer <= BREED_TIME then + num = num + 1 + end + + -- found your mate? then have a baby + if num > 1 then + + self.hornytimer = BREED_TIME + 1 + ent.hornytimer = BREED_TIME + 1 + + -- spawn baby + minetest_after(5, function(parent1, parent2, pos) + if not parent1.object:get_luaentity() then + return + end + if not parent2.object:get_luaentity() then + return + end + + -- Give XP + if mod_experience then + mcl_experience.throw_experience(pos, math.random(1, 7)) + end + + -- custom breed function + if parent1.on_breed then + -- when false, skip going any further + if parent1.on_breed(parent1, parent2) == false then + return + end + end + + local child = mobs:spawn_child(pos, parent1.name) + + local ent_c = child:get_luaentity() + + + -- Use texture of one of the parents + local p = math.random(1, 2) + if p == 1 then + ent_c.base_texture = parent1.base_texture + else + ent_c.base_texture = parent2.base_texture + end + child:set_properties({ + textures = ent_c.base_texture + }) + + -- tamed and owned by parents' owner + ent_c.tamed = true + ent_c.owner = parent1.owner + end, self, ent, pos) + + num = 0 + + break + end + end + end +end + +-- find and replace what mob is looking for (grass, wheat etc.) +local replace = function(self, pos) + + if not self.replace_rate + or not self.replace_what + or self.child == true + or self.object:get_velocity().y ~= 0 + or math.random(1, self.replace_rate) > 1 then + return + end + + local what, with, y_offset + + if type(self.replace_what[1]) == "table" then + + local num = math.random(#self.replace_what) + + what = self.replace_what[num][1] or "" + with = self.replace_what[num][2] or "" + y_offset = self.replace_what[num][3] or 0 + else + what = self.replace_what + with = self.replace_with or "" + y_offset = self.replace_offset or 0 + end + + pos.y = pos.y + y_offset + + local node = minetest_get_node(pos) + if node.name == what then + + local oldnode = {name = what, param2 = node.param2} + local newnode = {name = with, param2 = node.param2} + local on_replace_return + + if self.on_replace then + on_replace_return = self.on_replace(self, pos, oldnode, newnode) + end + + if on_replace_return ~= false then + + if mobs_griefing then + minetest_set_node(pos, newnode) + end + + end + end +end + + +-- check if daytime and also if mob is docile during daylight hours +local day_docile = function(self) + + if self.docile_by_day == false then + + return false + + elseif self.docile_by_day == true + and self.time_of_day > 0.2 + and self.time_of_day < 0.8 then + + return true + end +end + + + +local mob_detach_child = function(self, child) + + if self.driver == child then + self.driver = nil + end + +end + +function do_states(self) if self.state == "stand" then - if random(1, 4) == 1 then + if math.random(1, 4) == 1 then local lp = nil local s = self.object:get_pos() - local objs = minetest.get_objects_inside_radius(s, 3) + local objs = minetest_get_objects_inside_radius(s, 3) for n = 1, #objs do @@ -2286,11 +2188,11 @@ local do_states = function(self, dtime) z = lp.z - s.z } - yaw = (atan(vec.z / vec.x) + pi / 2) - self.rotate + yaw = (atan(vec.z / vec.x) + math_pi / 2) - self.rotate - if lp.x > s.x then yaw = yaw + pi end + if lp.x > s.x then yaw = yaw + math_pi end else - yaw = yaw + random(-0.5, 0.5) + yaw = yaw + math.random(-0.5, 0.5) end yaw = set_yaw(self, yaw, 8) @@ -2305,7 +2207,7 @@ local do_states = function(self, dtime) if self.walk_chance ~= 0 and self.facing_fence ~= true - and random(1, 100) <= self.walk_chance + and math.random(1, 100) <= self.walk_chance and is_at_cliff_or_danger(self) == false then set_velocity(self, self.walk_velocity) @@ -2324,19 +2226,19 @@ local do_states = function(self, dtime) and self.lava_damage > 0) or self.breath_max ~= -1 then - lp = minetest.find_node_near(s, 1, {"group:water", "group:lava"}) + lp = minetest_find_node_near(s, 1, {"group:water", "group:lava"}) elseif self.water_damage > 0 then - lp = minetest.find_node_near(s, 1, {"group:water"}) + lp = minetest_find_node_near(s, 1, {"group:water"}) elseif self.lava_damage > 0 then - lp = minetest.find_node_near(s, 1, {"group:lava"}) + lp = minetest_find_node_near(s, 1, {"group:lava"}) elseif self.fire_damage > 0 then - lp = minetest.find_node_near(s, 1, {"group:fire"}) + lp = minetest_find_node_near(s, 1, {"group:fire"}) end @@ -2350,12 +2252,12 @@ local do_states = function(self, dtime) -- If mob in or on dangerous block, look for land if is_in_danger then -- Better way to find shore - copied from upstream - lp = minetest.find_nodes_in_area_under_air( + lp = minetest_find_nodes_in_area_under_air( {x = s.x - 5, y = s.y - 0.5, z = s.z - 5}, {x = s.x + 5, y = s.y + 1, z = s.z + 5}, {"group:solid"}) - lp = #lp > 0 and lp[random(#lp)] + lp = #lp > 0 and lp[math.random(#lp)] -- did we find land? if lp then @@ -2365,10 +2267,10 @@ local do_states = function(self, dtime) z = lp.z - s.z } - yaw = (atan(vec.z / vec.x) + pi / 2) - self.rotate + yaw = (atan(vec.z / vec.x) + math_pi / 2) - self.rotate - if lp.x > s.x then yaw = yaw + pi end + if lp.x > s.x then yaw = yaw + math_pi end -- look towards land and move in that direction yaw = set_yaw(self, yaw, 6) @@ -2381,8 +2283,8 @@ local do_states = function(self, dtime) else -- Randomly turn - if random(1, 100) <= 30 then - yaw = yaw + random(-0.5, 0.5) + if math.random(1, 100) <= 30 then + yaw = yaw + math.random(-0.5, 0.5) yaw = set_yaw(self, yaw, 8) end end @@ -2390,9 +2292,9 @@ local do_states = function(self, dtime) yaw = set_yaw(self, yaw, 8) -- otherwise randomly turn - elseif random(1, 100) <= 30 then + elseif math.random(1, 100) <= 30 then - yaw = yaw + random(-0.5, 0.5) + yaw = yaw + math.random(-0.5, 0.5) yaw = set_yaw(self, yaw, 8) end @@ -2403,7 +2305,7 @@ local do_states = function(self, dtime) end if self.facing_fence == true or cliff_or_danger - or random(1, 100) <= 30 then + or math.random(1, 100) <= 30 then set_velocity(self, 0) self.state = "stand" @@ -2478,9 +2380,9 @@ local do_states = function(self, dtime) z = p.z - s.z } - yaw = (atan(vec.z / vec.x) + pi / 2) - self.rotate + yaw = (atan(vec.z / vec.x) + math_pi / 2) - self.rotate - if p.x > s.x then yaw = yaw + pi end + if p.x > s.x then yaw = yaw + math_pi end yaw = set_yaw(self, yaw, 0, dtime) @@ -2546,10 +2448,10 @@ local do_states = function(self, dtime) local pos = self.object:get_pos() if mod_explosions then - if mobs_griefing and not minetest.is_protected(pos, "") then + if mobs_griefing and not minetest_is_protected(pos, "") then mcl_explosions.explode(mcl_util.get_object_center(self.object), self.explosion_strength, { drop_chance = 1.0 }, self.object) else - minetest.sound_play(self.sounds.explode, { + minetest_sound_play(self.sounds.explode, { pos = pos, gain = 1.0, max_hear_distance = self.sounds.distance or 32 @@ -2574,9 +2476,9 @@ local do_states = function(self, dtime) and dist > self.reach then local p1 = s - local me_y = floor(p1.y) + local me_y = math_floor(p1.y) local p2 = p - local p_y = floor(p2.y + 1) + local p_y = math_floor(p2.y + 1) local v = self.object:get_velocity() if flight_check(self, s) then @@ -2637,7 +2539,7 @@ local do_states = function(self, dtime) return end - if abs(p1.x-s.x) + abs(p1.z - s.z) < 0.6 then + if math_abs(p1.x-s.x) + math_abs(p1.z - s.z) < 0.6 then -- reached waypoint, remove it from queue table.remove(self.path.way, 1) end @@ -2651,9 +2553,9 @@ local do_states = function(self, dtime) z = p.z - s.z } - yaw = (atan(vec.z / vec.x) + pi / 2) - self.rotate + yaw = (atan(vec.z / vec.x) + math_pi / 2) - self.rotate - if p.x > s.x then yaw = yaw + pi end + if p.x > s.x then yaw = yaw + math_pi end yaw = set_yaw(self, yaw, 0, dtime) @@ -2703,7 +2605,7 @@ local do_states = function(self, dtime) self.timer = 0 if self.double_melee_attack - and random(1, 2) == 1 then + and math.random(1, 2) == 1 then set_animation(self, "punch2") else set_animation(self, "punch") @@ -2756,9 +2658,9 @@ local do_states = function(self, dtime) z = p.z - s.z } - yaw = (atan(vec.z / vec.x) + pi / 2) - self.rotate + yaw = (atan(vec.z / vec.x) + math_pi / 2) - self.rotate - if p.x > s.x then yaw = yaw + pi end + if p.x > s.x then yaw = yaw + math_pi end yaw = set_yaw(self, yaw, 0, dtime) @@ -2769,8 +2671,8 @@ local do_states = function(self, dtime) if self.shoot_interval and self.timer > self.shoot_interval - and not minetest.raycast(p, self.attack:get_pos(), false, false):next() - and random(1, 100) <= 60 then + and not minetest_raycast(p, self.attack:get_pos(), false, false):next() + and math.random(1, 100) <= 60 then self.timer = 0 set_animation(self, "shoot") @@ -2779,12 +2681,16 @@ local do_states = function(self, dtime) mob_sound(self, "shoot_attack") -- Shoot arrow - if minetest.registered_entities[self.arrow] then + if minetest_registered_entities[self.arrow] then local arrow, ent local v = 1 if not self.shoot_arrow then - arrow = minetest.add_entity(p, self.arrow) + self.firing = true + minetest_after(1, function() + self.firing = false + end) + arrow = minetest_add_entity(p, self.arrow) ent = arrow:get_luaentity() if ent.velocity then v = ent.velocity @@ -2812,790 +2718,251 @@ local do_states = function(self, dtime) end --- falling and fall damage --- returns true if mob died -local falling = function(self, pos) - if self.fly and self.state ~= "die" then + +-- above function exported for mount.lua +function mobs:set_animation(self, anim) + set_animation(self, anim) +end + + +-- set defined animation +local set_animation = function(self, anim, fixed_frame) + if not self.animation or not anim then + return + end + if self.state == "die" and anim ~= "die" and anim ~= "stand" then return end - if mcl_portals ~= nil then - if mcl_portals.nether_portal_cooloff[self.object] then - return false -- mob has teleported through Nether portal - it's 99% not falling - end + self.animation.current = self.animation.current or "" + + if (anim == self.animation.current + or not self.animation[anim .. "_start"] + or not self.animation[anim .. "_end"]) and self.state ~= "die" then + return end - -- floating in water (or falling) - local v = self.object:get_velocity() + self.animation.current = anim - if v.y > 0 then - - -- apply gravity when moving up - self.object:set_acceleration({ - x = 0, - y = -10, - z = 0 - }) - - elseif v.y <= 0 and v.y > self.fall_speed then - - -- fall downwards at set speed - self.object:set_acceleration({ - x = 0, - y = self.fall_speed, - z = 0 - }) + local a_start = self.animation[anim .. "_start"] + local a_end + if fixed_frame then + a_end = a_start else - -- stop accelerating once max fall speed hit - self.object:set_acceleration({x = 0, y = 0, z = 0}) + a_end = self.animation[anim .. "_end"] end - -- in water then float up - if minetest.registered_nodes[node_ok(pos).name].groups.water then - - if self.floats == 1 then - - self.object:set_acceleration({ - x = 0, - y = -self.fall_speed / (max(1, v.y) ^ 2), - z = 0 - }) - end - else - - -- fall damage onto solid ground - if self.fall_damage == 1 - and self.object:get_velocity().y == 0 then - - local d = (self.old_y or 0) - self.object:get_pos().y - - if d > 5 then - - local add = minetest.get_item_group(self.standing_on, "fall_damage_add_percent") - local damage = d - 5 - if add ~= 0 then - damage = damage + damage * (add/100) - end - damage = floor(damage) - if damage > 0 then - self.health = self.health - damage - - effect(pos, 5, "mcl_particles_smoke.png", 1, 2, 2, nil) - - if check_for_death(self, "fall", {type = "fall"}) then - return true - end - end - end - - self.old_y = self.object:get_pos().y - end - end -end - -local teleport = function(self, target) - if self.do_teleport then - if self.do_teleport(self, target) == false then - return - end - end + self.object:set_animation({ + x = a_start, + y = a_end}, + self.animation[anim .. "_speed"] or self.animation.speed_normal or 15, + 0, self.animation[anim .. "_loop"] ~= false) end --- deal damage and effects when mob punched -local mob_punch = function(self, hitter, tflp, tool_capabilities, dir) +-- Code to execute before custom on_rightclick handling +local function on_rightclick_prefix(self, clicker) + local item = clicker:get_wielded_item() - -- custom punch function - if self.do_punch then + -- Name mob with nametag + if not self.ignores_nametag and item:get_name() == "mcl_mobs:nametag" then - -- when false skip going any further - if self.do_punch(self, hitter, tflp, tool_capabilities, dir) == false then - return - end - end - - -- error checking when mod profiling is enabled - if not tool_capabilities then - minetest.log("warning", "[mobs] Mod profiling enabled, damage not enabled") - return - end - - local is_player = hitter:is_player() - - if is_player then - -- is mob protected? - if self.protected and minetest.is_protected(self.object:get_pos(), hitter:get_player_name()) then - return - end - - -- set/update 'drop xp' timestamp if hitted by player - self.xp_timestamp = minetest.get_us_time() - end - - - -- punch interval - local weapon = hitter:get_wielded_item() - local punch_interval = 1.4 - - -- exhaust attacker - if mod_hunger and is_player then - mcl_hunger.exhaust(hitter:get_player_name(), mcl_hunger.EXHAUST_ATTACK) - end - - -- calculate mob damage - local damage = 0 - local armor = self.object:get_armor_groups() or {} - local tmp - - -- quick error check incase it ends up 0 (serialize.h check test) - if tflp == 0 then - tflp = 0.2 - end - - if use_cmi then - damage = cmi.calculate_damage(self.object, hitter, tflp, tool_capabilities, dir) - else - - for group,_ in pairs( (tool_capabilities.damage_groups or {}) ) do - - tmp = tflp / (tool_capabilities.full_punch_interval or 1.4) - - if tmp < 0 then - tmp = 0.0 - elseif tmp > 1 then - tmp = 1.0 + local tag = item:get_meta():get_string("name") + if tag ~= "" then + if string.len(tag) > MAX_MOB_NAME_LENGTH then + tag = string.sub(tag, 1, MAX_MOB_NAME_LENGTH) end + self.nametag = tag - damage = damage + (tool_capabilities.damage_groups[group] or 0) - * tmp * ((armor[group] or 0) / 100.0) - end - end + update_tag(self) - if weapon then - local fire_aspect_level = mcl_enchanting.get_enchantment(weapon, "fire_aspect") - if fire_aspect_level > 0 then - mcl_burning.set_on_fire(self.object, 4, fire_aspect_level * 2) - end - end - - -- check for tool immunity or special damage - for n = 1, #self.immune_to do - - if self.immune_to[n][1] == weapon:get_name() then - - damage = self.immune_to[n][2] or 0 - break - end - end - - -- healing - if damage <= -1 then - self.health = self.health - floor(damage) - return - end - - if use_cmi then - - local cancel = cmi.notify_punch(self.object, hitter, tflp, tool_capabilities, dir, damage) - - if cancel then return end - end - - if tool_capabilities then - punch_interval = tool_capabilities.full_punch_interval or 1.4 - end - - -- add weapon wear manually - -- Required because we have custom health handling ("health" property) - if minetest.is_creative_enabled("") ~= true - and tool_capabilities then - if tool_capabilities.punch_attack_uses then - -- Without this delay, the wear does not work. Quite hacky ... - minetest.after(0, function(name) - local player = minetest.get_player_by_name(name) - if not player then return end - local weapon = hitter:get_wielded_item(player) - local def = weapon:get_definition() - if def.tool_capabilities and def.tool_capabilities.punch_attack_uses then - local wear = floor(65535/tool_capabilities.punch_attack_uses) - weapon:add_wear(wear) - hitter:set_wielded_item(weapon) - end - end, hitter:get_player_name()) - end - end - - local die = false - - -- only play hit sound and show blood effects if damage is 1 or over; lower to 0.1 to ensure armor works appropriately. - if damage >= 0.1 then - - -- weapon sounds - if weapon:get_definition().sounds ~= nil then - - local s = random(0, #weapon:get_definition().sounds) - - minetest.sound_play(weapon:get_definition().sounds[s], { - object = self.object, --hitter, - max_hear_distance = 8 - }, true) - else - minetest.sound_play("default_punch", { - object = self.object, - max_hear_distance = 5 - }, true) - end - - damage_effect(self, damage) - - -- do damage - self.health = self.health - damage - - -- skip future functions if dead, except alerting others - if check_for_death(self, "hit", {type = "punch", puncher = hitter}) then - die = true - end - - -- knock back effect (only on full punch) - if not die - and self.knock_back - and tflp >= punch_interval then - - local v = self.object:get_velocity() - local r = 1.4 - min(punch_interval, 1.4) - local kb = r * 2.0 - local up = 2 - - -- if already in air then dont go up anymore when hit - if v.y ~= 0 - or self.fly then - up = 0 + if not mobs.is_creative(clicker:get_player_name()) then + item:take_item() + clicker:set_wielded_item(item) end - - -- direction error check - dir = dir or {x = 0, y = 0, z = 0} - - -- check if tool already has specific knockback value - if tool_capabilities.damage_groups["knockback"] then - kb = tool_capabilities.damage_groups["knockback"] - else - kb = kb * 1.5 - end - - - local luaentity - if hitter then - luaentity = hitter:get_luaentity() - end - if hitter and is_player then - local wielditem = hitter:get_wielded_item() - kb = kb + 3 * mcl_enchanting.get_enchantment(wielditem, "knockback") - elseif luaentity and luaentity._knockback then - kb = kb + luaentity._knockback - end - - self.object:set_velocity({ - x = dir.x * kb, - y = dir.y * kb + up * 2, - z = dir.z * kb - }) - - self.pause_timer = 0.25 - end - end -- END if damage - - -- if skittish then run away - if not die and self.runaway == true and self.state ~= "flop" then - - local lp = hitter:get_pos() - local s = self.object:get_pos() - local vec = { - x = lp.x - s.x, - y = lp.y - s.y, - z = lp.z - s.z - } - - local yaw = (atan(vec.z / vec.x) + 3 * pi / 2) - self.rotate - - if lp.x > s.x then - yaw = yaw + pi + return true end - yaw = set_yaw(self, yaw, 6) - self.state = "runaway" - self.runaway_timer = 0 - self.following = nil - end - - local name = hitter:get_player_name() or "" - - -- attack puncher and call other mobs for help - if self.passive == false - and self.state ~= "flop" - and (self.child == false or self.type == "monster") - and hitter:get_player_name() ~= self.owner - and not mobs.invis[ name ] then - - if not die then - -- attack whoever punched mob - self.state = "" - do_attack(self, hitter) - end - - -- alert others to the attack - local objs = minetest.get_objects_inside_radius(hitter:get_pos(), self.view_range) - local obj = nil - - for n = 1, #objs do - - obj = objs[n]:get_luaentity() - - if obj then - - -- only alert members of same mob or friends - if obj.group_attack - and obj.state ~= "attack" - and obj.owner ~= name then - if obj.name == self.name then - do_attack(obj, hitter) - elseif type(obj.group_attack) == "table" then - for i=1, #obj.group_attack do - if obj.name == obj.group_attack[i] then - do_attack(obj, hitter) - break - end - end - end - end - - -- have owned mobs attack player threat - if obj.owner == name and obj.owner_loyal then - do_attack(obj, self.object) - end - end - end end + return false end -local mob_detach_child = function(self, child) - - if self.driver == child then - self.driver = nil - end - -end - --- get entity staticdata -local mob_staticdata = function(self) - ---[[ - -- remove mob when out of range unless tamed - if remove_far - and self.can_despawn - and self.remove_ok - and ((not self.nametag) or (self.nametag == "")) - and self.lifetimer <= 20 then - - minetest.log("action", "Mob "..name.." despawns in mob_staticdata at "..minetest.pos_to_string(self.object.get_pos(), 1)) - mcl_burning.extinguish(self.object) - self.object:remove() - - return ""-- nil - end ---]] - self.remove_ok = true - self.attack = nil - self.following = nil - self.state = "stand" - - if use_cmi then - self.serialized_cmi_components = cmi.serialize_components(self._cmi_components) - end - - local tmp = {} - - for _,stat in pairs(self) do - - local t = type(stat) - - if t ~= "function" - and t ~= "nil" - and t ~= "userdata" - and _ ~= "_cmi_components" then - tmp[_] = self[_] +--[[local function create_mob_on_rightclick(on_rightclick) + return function(self, clicker) + local stop = on_rightclick_prefix(self, clicker) + if (not stop) and (on_rightclick) then + on_rightclick(self, clicker) end end +end]] - return minetest.serialize(tmp) -end +-- set and return valid yaw +local function set_yaw(self, yaw, delay, dtime) - --- activate mob and reload settings -local mob_activate = function(self, staticdata, def, dtime) - - -- remove monsters in peaceful mode - if self.type == "monster" - and minetest.settings:get_bool("only_peaceful_mobs", false) then - mcl_burning.extinguish(self.object) - self.object:remove() - - return + if not yaw or yaw ~= yaw then + yaw = 0 end - -- load entity variables - local tmp = minetest.deserialize(staticdata) + delay = delay or 0 - if tmp then - for _,stat in pairs(tmp) do - self[_] = stat - end - end - - -- select random texture, set model and size - if not self.base_texture then - - -- compatiblity with old simple mobs textures - if type(def.textures[1]) == "string" then - def.textures = {def.textures} - end - - self.base_texture = def.textures[random(1, #def.textures)] - self.base_mesh = def.mesh - self.base_size = self.visual_size - self.base_colbox = self.collisionbox - self.base_selbox = self.selectionbox - end - - -- for current mobs that dont have this set - if not self.base_selbox then - self.base_selbox = self.selectionbox or self.base_colbox - end - - -- set texture, model and size - local textures = self.base_texture - local mesh = self.base_mesh - local vis_size = self.base_size - local colbox = self.base_colbox - local selbox = self.base_selbox - - -- specific texture if gotten - if self.gotten == true - and def.gotten_texture then - textures = def.gotten_texture - end - - -- specific mesh if gotten - if self.gotten == true - and def.gotten_mesh then - mesh = def.gotten_mesh - end - - -- set child objects to half size - if self.child == true then - - vis_size = { - x = self.base_size.x * .5, - y = self.base_size.y * .5, - } - - if def.child_texture then - textures = def.child_texture[1] - end - - colbox = { - self.base_colbox[1] * .5, - self.base_colbox[2] * .5, - self.base_colbox[3] * .5, - self.base_colbox[4] * .5, - self.base_colbox[5] * .5, - self.base_colbox[6] * .5 - } - selbox = { - self.base_selbox[1] * .5, - self.base_selbox[2] * .5, - self.base_selbox[3] * .5, - self.base_selbox[4] * .5, - self.base_selbox[5] * .5, - self.base_selbox[6] * .5 - } - end - - if self.health == 0 then - self.health = random (self.hp_min, self.hp_max) - end - if self.breath == nil then - self.breath = self.breath_max - end - - -- pathfinding init - self.path = {} - self.path.way = {} -- path to follow, table of positions - self.path.lastpos = {x = 0, y = 0, z = 0} - self.path.stuck = false - self.path.following = false -- currently following path? - self.path.stuck_timer = 0 -- if stuck for too long search for path - - -- Armor groups - -- immortal=1 because we use custom health - -- handling (using "health" property) - local armor - if type(self.armor) == "table" then - armor = table.copy(self.armor) - armor.immortal = 1 - else - armor = {immortal=1, fleshy = self.armor} - end - self.object:set_armor_groups(armor) - self.old_y = self.object:get_pos().y - self.old_health = self.health - self.sounds.distance = self.sounds.distance or 10 - self.textures = textures - self.mesh = mesh - self.collisionbox = colbox - self.selectionbox = selbox - self.visual_size = vis_size - self.standing_in = "ignore" - self.standing_on = "ignore" - self.jump_sound_cooloff = 0 -- used to prevent jump sound from being played too often in short time - self.opinion_sound_cooloff = 0 -- used to prevent sound spam of particular sound types - - self.texture_mods = {} - self.object:set_texture_mod("") - - self.v_start = false - self.timer = 0 - self.blinktimer = 0 - self.blinkstatus = false - - -- check existing nametag - if not self.nametag then - self.nametag = def.nametag - end - - -- set anything changed above - self.object:set_properties(self) - set_yaw(self, (random(0, 360) - 180) / 180 * pi, 6) - update_tag(self) - set_animation(self, "stand") - - -- run on_spawn function if found - if self.on_spawn and not self.on_spawn_run then - if self.on_spawn(self) then - self.on_spawn_run = true -- if true, set flag to run once only - end - end - - -- run after_activate - if def.after_activate then - def.after_activate(self, staticdata, def, dtime) - end - - if use_cmi then - self._cmi_components = cmi.activate_components(self.serialized_cmi_components) - cmi.notify_activate(self.object, dtime) - end -end - - --- main mob function -local mob_step = function(self, dtime) - - if not self.fire_resistant then - mcl_burning.tick(self.object, dtime) - end - - if use_cmi then - cmi.notify_step(self.object, dtime) - end - - local pos = self.object:get_pos() - local yaw = 0 - - if mobs_debug then - update_tag(self) - end - - if self.state == "die" then - return - end - - if self.jump_sound_cooloff > 0 then - self.jump_sound_cooloff = self.jump_sound_cooloff - dtime - end - if self.opinion_sound_cooloff > 0 then - self.opinion_sound_cooloff = self.opinion_sound_cooloff - dtime - end - if falling(self, pos) then - -- Return if mob died after falling - return - end - - -- smooth rotation by ThomasMonroe314 - - if self.delay and self.delay > 0 then - - local yaw = self.object:get_yaw() or 0 - - if self.delay == 1 then - yaw = self.target_yaw - else - local dif = abs(yaw - self.target_yaw) - - if yaw > self.target_yaw then - - if dif > pi then - dif = 2 * pi - dif -- need to add - yaw = yaw + dif / self.delay - else - yaw = yaw - dif / self.delay -- need to subtract - end - - elseif yaw < self.target_yaw then - - if dif > pi then - dif = 2 * pi - dif - yaw = yaw - dif / self.delay -- need to subtract - else - yaw = yaw + dif / self.delay -- need to add - end - end - - if yaw > (pi * 2) then yaw = yaw - (pi * 2) end - if yaw < 0 then yaw = yaw + (pi * 2) end - end - - self.delay = self.delay - 1 - if self.shaking then + if delay == 0 then + if self.shaking and dtime then yaw = yaw + (math.random() * 2 - 1) * 5 * dtime end - self.object:set_yaw(yaw) + self.yaw(yaw) + update_roll(self) + return yaw end - -- end rotation + self.target_yaw = yaw + self.delay = delay - -- knockback timer - if self.pause_timer > 0 then + return self.target_yaw +end - self.pause_timer = self.pause_timer - dtime - return - end +-- global function to set mob yaw +function mobs:yaw(self, yaw, delay, dtime) + set_yaw(self, yaw, delay, dtime) +end + + +--mob_step = function() + --if self.state == "die" then + -- print("need custom die stop moving thing") + -- return + --end + + --if not self.fire_resistant then + -- mcl_burning.tick(self.object, dtime, self) + --end + + --if use_cmi then + --cmi.notify_step(self.object, dtime) + --end + + --local pos = self.object:get_pos() + --local yaw = 0 + + --if mobs_debug then + --update_tag(self) + --end + + + + --if self.jump_sound_cooloff > 0 then + -- self.jump_sound_cooloff = self.jump_sound_cooloff - dtime + --end + + --if self.opinion_sound_cooloff > 0 then + -- self.opinion_sound_cooloff = self.opinion_sound_cooloff - dtime + --end + + --if falling(self, pos) then + -- Return if mob died after falling + -- return + --end + -- run custom function (defined in mob lua file) - if self.do_custom then + --if self.do_custom then -- when false skip going any further - if self.do_custom(self, dtime) == false then - return - end - end + --if self.do_custom(self, dtime) == false then + -- return + --end + --end + + -- knockback timer + --if self.pause_timer > 0 then + + -- self.pause_timer = self.pause_timer - dtime + + -- return + --end -- attack timer - self.timer = self.timer + dtime + --self.timer = self.timer + dtime + --[[ if self.state ~= "attack" then if self.timer < 1 then + print("returning>>error code 1") return end self.timer = 0 end + ]]-- -- never go over 100 - if self.timer > 100 then - self.timer = 1 - end + --if self.timer > 100 then + -- self.timer = 1 + --end -- mob plays random sound at times - if random(1, 100) == 1 then - mob_sound(self, "random", true) - end + --if math.random(1, 70) == 1 then + -- mob_sound(self, "random", true) + --end -- environmental damage timer (every 1 second) - self.env_damage_timer = self.env_damage_timer + dtime - - if (self.state == "attack" and self.env_damage_timer > 1) - or self.state ~= "attack" then - - self.env_damage_timer = 0 - - -- check for environmental damage (water, fire, lava etc.) - if do_env_damage(self) then - return - end + --self.env_damage_timer = self.env_damage_timer + dtime + --if (self.state == "attack" and self.env_damage_timer > 1) + --or self.state ~= "attack" then + -- + -- self.env_damage_timer = 0 + -- + -- -- check for environmental damage (water, fire, lava etc.) + -- if do_env_damage(self) then + -- return + -- end + -- -- node replace check (cow eats grass etc.) - replace(self, pos) - end + -- replace(self, pos) + --end - monster_attack(self) + --monster_attack(self) - npc_attack(self) + --npc_attack(self) - breed(self) + --breed(self) - if do_states(self, dtime) then + --do_jump(self) + + --runaway_from(self) + + + --if is_at_water_danger(self) and self.state ~= "attack" then + -- if math.random(1, 10) <= 6 then + -- set_velocity(self, 0) + -- self.state = "stand" + -- set_animation(self, "stand") + -- yaw = yaw + math.random(-0.5, 0.5) + -- yaw = set_yaw(self, yaw, 8) + -- end + --end + + + -- Add water flowing for mobs from mcl_item_entity + --[[ + local p, node, nn, def + p = self.object:get_pos() + node = minetest_get_node_or_nil(p) + if node then + nn = node.name + def = minetest_registered_nodes[nnenable_physicss if not on/in flowing liquid + self._flowing = false + enable_physics(self.object, self, true) return end - do_jump(self) - - runaway_from(self) - - if is_at_water_danger(self) and self.state ~= "attack" then - if random(1, 10) <= 6 then - set_velocity(self, 0) - self.state = "stand" - set_animation(self, "stand") - yaw = yaw + random(-0.5, 0.5) - yaw = set_yaw(self, yaw, 8) - end - end - - -- Add water flowing for mobs from mcl_item_entity - local p, node, nn, def - p = self.object:get_pos() - node = minetest.get_node_or_nil(p) - if node then - nn = node.name - def = minetest.registered_nodes[nn] - end - - -- Move item around on flowing liquids - if def and def.liquidtype == "flowing" then - - --[[ Get flowing direction (function call from flowlib), if there's a liquid. - NOTE: According to Qwertymine, flowlib.quickflow is only reliable for liquids with a flowing distance of 7. - Luckily, this is exactly what we need if we only care about water, which has this flowing distance. ]] - local vec = flowlib.quick_flow(p, node) - -- Just to make sure we don't manipulate the speed for no reason - if vec.x ~= 0 or vec.y ~= 0 or vec.z ~= 0 then - -- Minecraft Wiki: Flowing speed is "about 1.39 meters per second" - local f = 1.39 - -- Set new item moving speed into the direciton of the liquid - local newv = vector.multiply(vec, f) - self.object:set_acceleration({x = 0, y = 0, z = 0}) - self.object:set_velocity({x = newv.x, y = -0.22, z = newv.z}) - - self.physical_state = true - self._flowing = true - self.object:set_properties({ - physical = true - }) - return - end - elseif self._flowing == true then - -- Disable flowing physics if not on/in flowing liquid - self._flowing = false - enable_physics(self.object, self, true) - return - end - --Mob following code. follow_flop(self) + if is_at_cliff_or_danger(self) then set_velocity(self, 0) self.state = "stand" @@ -3624,962 +2991,6 @@ local mob_step = function(self, dtime) end end end -end + ]]-- - --- default function when mobs are blown up with TNT -local do_tnt = function(obj, damage) - - obj.object:punch(obj.object, 1.0, { - full_punch_interval = 1.0, - damage_groups = {fleshy = damage}, - }, nil) - - return false, true, {} -end - - -mobs.spawning_mobs = {} - --- Code to execute before custom on_rightclick handling -local on_rightclick_prefix = function(self, clicker) - local item = clicker:get_wielded_item() - - -- Name mob with nametag - if not self.ignores_nametag and item:get_name() == "mcl_mobs:nametag" then - - local tag = item:get_meta():get_string("name") - if tag ~= "" then - if string.len(tag) > MAX_MOB_NAME_LENGTH then - tag = string.sub(tag, 1, MAX_MOB_NAME_LENGTH) - end - self.nametag = tag - - update_tag(self) - - if not mobs.is_creative(clicker:get_player_name()) then - item:take_item() - clicker:set_wielded_item(item) - end - return true - end - - end - return false -end - -local create_mob_on_rightclick = function(on_rightclick) - return function(self, clicker) - local stop = on_rightclick_prefix(self, clicker) - if (not stop) and (on_rightclick) then - on_rightclick(self, clicker) - end - end -end - --- register mob entity -function mobs:register_mob(name, def) - - mobs.spawning_mobs[name] = true - -local can_despawn -if def.can_despawn ~= nil then - can_despawn = def.can_despawn -else - can_despawn = true -end - -local function scale_difficulty(value, default, min, special) - if (not value) or (value == default) or (value == special) then - return default - else - return max(min, value * difficulty) - end -end - -local collisionbox = def.collisionbox or {-0.25, -0.25, -0.25, 0.25, 0.25, 0.25} --- Workaround for : --- Increase upper Y limit to avoid mobs glitching through solid nodes. --- FIXME: Remove workaround if it's no longer needed. -if collisionbox[5] < 0.79 then - collisionbox[5] = 0.79 -end - -minetest.register_entity(name, { - - stepheight = def.stepheight or 0.6, - name = name, - type = def.type, - attack_type = def.attack_type, - fly = def.fly, - fly_in = def.fly_in or {"air", "__airlike"}, - owner = def.owner or "", - order = def.order or "", - on_die = def.on_die, - spawn_small_alternative = def.spawn_small_alternative, - do_custom = def.do_custom, - jump_height = def.jump_height or 4, -- was 6 - rotate = math.rad(def.rotate or 0), -- 0=front, 90=side, 180=back, 270=side2 - lifetimer = def.lifetimer or 57.73, - hp_min = scale_difficulty(def.hp_min, 5, 1), - hp_max = scale_difficulty(def.hp_max, 10, 1), - xp_min = def.xp_min or 0, - xp_max = def.xp_max or 0, - xp_timestamp = 0, - breath_max = def.breath_max or 15, - breathes_in_water = def.breathes_in_water or false, - physical = true, - collisionbox = collisionbox, - selectionbox = def.selectionbox or def.collisionbox, - visual = def.visual, - visual_size = def.visual_size or {x = 1, y = 1}, - mesh = def.mesh, - makes_footstep_sound = def.makes_footstep_sound or false, - view_range = def.view_range or 16, - walk_velocity = def.walk_velocity or 1, - run_velocity = def.run_velocity or 2, - damage = scale_difficulty(def.damage, 0, 0), - light_damage = def.light_damage or 0, - sunlight_damage = def.sunlight_damage or 0, - water_damage = def.water_damage or 0, - lava_damage = def.lava_damage or 8, - fire_damage = def.fire_damage or 1, - suffocation = def.suffocation or true, - fall_damage = def.fall_damage or 1, - fall_speed = def.fall_speed or DEFAULT_FALL_SPEED, -- must be lower than -2 - drops = def.drops or {}, - armor = def.armor or 100, - on_rightclick = create_mob_on_rightclick(def.on_rightclick), - arrow = def.arrow, - shoot_interval = def.shoot_interval, - sounds = def.sounds or {}, - animation = def.animation, - follow = def.follow, - jump = def.jump ~= false, - walk_chance = def.walk_chance or 50, - attacks_monsters = def.attacks_monsters or false, - group_attack = def.group_attack or false, - passive = def.passive or false, - knock_back = def.knock_back ~= false, - shoot_offset = def.shoot_offset or 0, - floats = def.floats or 1, -- floats in water by default - replace_rate = def.replace_rate, - replace_what = def.replace_what, - replace_with = def.replace_with, - replace_offset = def.replace_offset or 0, - on_replace = def.on_replace, - timer = 0, - env_damage_timer = 0, - tamed = false, - pause_timer = 0, - horny = false, - hornytimer = 0, - gotten = false, - health = 0, - reach = def.reach or 3, - htimer = 0, - texture_list = def.textures, - child_texture = def.child_texture, - docile_by_day = def.docile_by_day or false, - time_of_day = 0.5, - fear_height = def.fear_height or 0, - runaway = def.runaway, - runaway_timer = 0, - pathfinding = def.pathfinding, - immune_to = def.immune_to or {}, - explosion_radius = def.explosion_radius, -- LEGACY - explosion_damage_radius = def.explosion_damage_radius, -- LEGACY - explosiontimer_reset_radius = def.explosiontimer_reset_radius, - explosion_timer = def.explosion_timer or 3, - allow_fuse_reset = def.allow_fuse_reset ~= false, - stop_to_explode = def.stop_to_explode ~= false, - custom_attack = def.custom_attack, - double_melee_attack = def.double_melee_attack, - dogshoot_switch = def.dogshoot_switch, - dogshoot_count = 0, - dogshoot_count_max = def.dogshoot_count_max or 5, - dogshoot_count2_max = def.dogshoot_count2_max or (def.dogshoot_count_max or 5), - attack_animals = def.attack_animals or false, - specific_attack = def.specific_attack, - runaway_from = def.runaway_from, - owner_loyal = def.owner_loyal, - facing_fence = false, - _cmi_is_mob = true, - pushable = def.pushable or true, - - - -- MCL2 extensions - teleport = teleport, - do_teleport = def.do_teleport, - spawn_class = def.spawn_class, - ignores_nametag = def.ignores_nametag or false, - rain_damage = def.rain_damage or 0, - glow = def.glow, - can_despawn = can_despawn, - child = def.child or false, - texture_mods = {}, - shoot_arrow = def.shoot_arrow, - sounds_child = def.sounds_child, - explosion_strength = def.explosion_strength, - suffocation_timer = 0, - follow_velocity = def.follow_velocity or 2.4, - instant_death = def.instant_death or false, - fire_resistant = def.fire_resistant or false, - fire_damage_resistant = def.fire_damage_resistant or false, - ignited_by_sunlight = def.ignited_by_sunlight or false, - -- End of MCL2 extensions - - on_spawn = def.on_spawn, - - on_blast = def.on_blast or do_tnt, - - on_step = mob_step, - - do_punch = def.do_punch, - - on_punch = mob_punch, - - on_breed = def.on_breed, - - on_grown = def.on_grown, - - on_detach_child = mob_detach_child, - - on_activate = function(self, staticdata, dtime) - return mob_activate(self, staticdata, def, dtime) - end, - - get_staticdata = function(self) - return mob_staticdata(self) - end, - - harmed_by_heal = def.harmed_by_heal, - -}) - -if minetest.get_modpath("doc_identifier") ~= nil then - doc.sub.identifier.register_object(name, "basics", "mobs") -end - -end -- END mobs:register_mob function - - --- count how many mobs of one type are inside an area -local count_mobs = function(pos, mobtype) - - local num = 0 - local objs = minetest.get_objects_inside_radius(pos, aoc_range) - - for n = 1, #objs do - - local obj = objs[n]:get_luaentity() - - if obj and obj.name and obj._cmi_is_mob then - - -- count passive mobs only - if mobtype == "!passive" then - if obj.spawn_class == "passive" then - num = num + 1 - end - -- count hostile mobs only - elseif mobtype == "!hostile" then - if obj.spawn_class == "hostile" then - num = num + 1 - end - -- count ambient mobs only - elseif mobtype == "!ambient" then - if obj.spawn_class == "ambient" then - num = num + 1 - end - -- count water mobs only - elseif mobtype == "!water" then - if obj.spawn_class == "water" then - num = num + 1 - end - -- count mob type - elseif mobtype and obj.name == mobtype then - num = num + 1 - -- count total mobs - elseif not mobtype then - num = num + 1 - end - end - end - - return num -end - - --- global functions - -function mobs:spawn_abm_check(pos, node, name) - -- global function to add additional spawn checks - -- return true to stop spawning mob -end - - -function mobs:spawn_specific(name, nodes, neighbors, min_light, max_light, - interval, chance, aoc, min_height, max_height, day_toggle, on_spawn) - - -- Do mobs spawn at all? - if not mobs_spawn then - return - end - - -- chance/spawn number override in minetest.conf for registered mob - local numbers = minetest.settings:get(name) - - if numbers then - numbers = numbers:split(",") - chance = tonumber(numbers[1]) or chance - aoc = tonumber(numbers[2]) or aoc - - if chance == 0 then - minetest.log("warning", string.format("[mobs] %s has spawning disabled", name)) - return - end - - minetest.log("action", - string.format("[mobs] Chance setting for %s changed to %s (total: %s)", name, chance, aoc)) - - end - - local spawn_action - spawn_action = function(pos, node, active_object_count, active_object_count_wider, name) - - local orig_pos = table.copy(pos) - -- is mob actually registered? - if not mobs.spawning_mobs[name] - or not minetest.registered_entities[name] then - minetest.log("warning", "Mob spawn of "..name.." failed, unknown entity or mob is not registered for spawning!") - return - end - - -- additional custom checks for spawning mob - if mobs:spawn_abm_check(pos, node, name) == true then - minetest.log("info", "Mob spawn of "..name.." at "..minetest.pos_to_string(pos).." failed, ABM check rejected!") - return - end - - -- count nearby mobs in same spawn class - local entdef = minetest.registered_entities[name] - local spawn_class = entdef and entdef.spawn_class - if not spawn_class then - if entdef.type == "monster" then - spawn_class = "hostile" - else - spawn_class = "passive" - end - end - local in_class_cap = count_mobs(pos, "!"..spawn_class) < MOB_CAP[spawn_class] - -- do not spawn if too many of same mob in area - if active_object_count_wider >= max_per_block -- large-range mob cap - or (not in_class_cap) -- spawn class mob cap - or count_mobs(pos, name) >= aoc then -- per-mob mob cap - -- too many entities - minetest.log("info", "Mob spawn of "..name.." at "..minetest.pos_to_string(pos).." failed, too crowded!") - return - end - - -- if toggle set to nil then ignore day/night check - if day_toggle ~= nil then - - local tod = (minetest.get_timeofday() or 0) * 24000 - - if tod > 4500 and tod < 19500 then - -- daylight, but mob wants night - if day_toggle == false then - -- mob needs night - minetest.log("info", "Mob spawn of "..name.." at "..minetest.pos_to_string(pos).." failed, mob needs light!") - return - end - else - -- night time but mob wants day - if day_toggle == true then - -- mob needs day - minetest.log("info", "Mob spawn of "..name.." at "..minetest.pos_to_string(pos).." failed, mob needs daylight!") - return - end - end - end - - -- spawn above node - pos.y = pos.y + 1 - - -- only spawn away from player - local objs = minetest.get_objects_inside_radius(pos, 24) - - for n = 1, #objs do - - if objs[n]:is_player() then - -- player too close - minetest.log("info", "Mob spawn of "..name.." at "..minetest.pos_to_string(pos).." failed, player too close!") - return - end - end - - -- mobs cannot spawn in protected areas when enabled - if not spawn_protected - and minetest.is_protected(pos, "") then - minetest.log("info", "Mob spawn of "..name.." at "..minetest.pos_to_string(pos).." failed, position is protected!") - return - end - - -- are we spawning within height limits? - if pos.y > max_height - or pos.y < min_height then - minetest.log("info", "Mob spawn of "..name.." at "..minetest.pos_to_string(pos).." failed, out of height limit!") - return - end - - -- are light levels ok? - local light = minetest.get_node_light(pos) - if not light - or light > max_light - or light < min_light then - minetest.log("info", "Mob spawn of "..name.." at "..minetest.pos_to_string(pos).." failed, bad light!") - return - end - - -- do we have enough space to spawn mob? - local ent = minetest.registered_entities[name] - local width_x = max(1, math.ceil(ent.collisionbox[4] - ent.collisionbox[1])) - local min_x, max_x - if width_x % 2 == 0 then - max_x = math.floor(width_x/2) - min_x = -(max_x-1) - else - max_x = math.floor(width_x/2) - min_x = -max_x - end - - local width_z = max(1, math.ceil(ent.collisionbox[6] - ent.collisionbox[3])) - local min_z, max_z - if width_z % 2 == 0 then - max_z = math.floor(width_z/2) - min_z = -(max_z-1) - else - max_z = math.floor(width_z/2) - min_z = -max_z - end - - local max_y = max(0, math.ceil(ent.collisionbox[5] - ent.collisionbox[2]) - 1) - - for y = 0, max_y do - for x = min_x, max_x do - for z = min_z, max_z do - local pos2 = {x = pos.x+x, y = pos.y+y, z = pos.z+z} - if minetest.registered_nodes[node_ok(pos2).name].walkable == true then - -- inside block - minetest.log("info", "Mob spawn of "..name.." at "..minetest.pos_to_string(pos).." failed, too little space!") - if ent.spawn_small_alternative ~= nil and (not minetest.registered_nodes[node_ok(pos).name].walkable) then - minetest.log("info", "Trying to spawn smaller alternative mob: "..ent.spawn_small_alternative) - spawn_action(orig_pos, node, active_object_count, active_object_count_wider, ent.spawn_small_alternative) - end - return - end - end - end - end - - -- tweak X/Y/Z spawn pos - if width_x % 2 == 0 then - pos.x = pos.x + 0.5 - end - if width_z % 2 == 0 then - pos.z = pos.z + 0.5 - end - pos.y = pos.y - 0.5 - - local mob = minetest.add_entity(pos, name) - minetest.log("action", "Mob spawned: "..name.." at "..minetest.pos_to_string(pos)) - - if on_spawn then - - local ent = mob:get_luaentity() - - on_spawn(ent, pos) - end - end - - local function spawn_abm_action(pos, node, active_object_count, active_object_count_wider) - spawn_action(pos, node, active_object_count, active_object_count_wider, name) - end - - minetest.register_abm({ - label = name .. " spawning", - nodenames = nodes, - neighbors = neighbors, - interval = interval, - chance = floor(max(1, chance * mobs_spawn_chance)), - catch_up = false, - action = spawn_abm_action, - }) -end - - --- compatibility with older mob registration -function mobs:register_spawn(name, nodes, max_light, min_light, chance, active_object_count, max_height, day_toggle) - - mobs:spawn_specific(name, nodes, {"air"}, min_light, max_light, 30, - chance, active_object_count, -31000, max_height, day_toggle) -end - - --- MarkBu's spawn function -function mobs:spawn(def) - - local name = def.name - local nodes = def.nodes or {"group:soil", "group:stone"} - local neighbors = def.neighbors or {"air"} - local min_light = def.min_light or 0 - local max_light = def.max_light or 15 - local interval = def.interval or 30 - local chance = def.chance or 5000 - local active_object_count = def.active_object_count or 1 - local min_height = def.min_height or -31000 - local max_height = def.max_height or 31000 - local day_toggle = def.day_toggle - local on_spawn = def.on_spawn - - mobs:spawn_specific(name, nodes, neighbors, min_light, max_light, interval, - chance, active_object_count, min_height, max_height, day_toggle, on_spawn) -end - - --- register arrow for shoot attack -function mobs:register_arrow(name, def) - - if not name or not def then return end -- errorcheck - - minetest.register_entity(name, { - - physical = false, - visual = def.visual, - visual_size = def.visual_size, - textures = def.textures, - velocity = def.velocity, - hit_player = def.hit_player, - hit_node = def.hit_node, - hit_mob = def.hit_mob, - hit_object = def.hit_object, - drop = def.drop or false, -- drops arrow as registered item when true - collisionbox = {0, 0, 0, 0, 0, 0}, -- remove box around arrows - timer = 0, - switch = 0, - owner_id = def.owner_id, - rotate = def.rotate, - automatic_face_movement_dir = def.rotate - and (def.rotate - (pi / 180)) or false, - - on_activate = def.on_activate, - - on_step = def.on_step or function(self, dtime) - - self.timer = self.timer + 1 - - local pos = self.object:get_pos() - - if self.switch == 0 - or self.timer > 150 - or not within_limits(pos, 0) then - mcl_burning.extinguish(self.object) - self.object:remove(); - - return - end - - -- does arrow have a tail (fireball) - if def.tail - and def.tail == 1 - and def.tail_texture then - - minetest.add_particle({ - pos = pos, - velocity = {x = 0, y = 0, z = 0}, - acceleration = {x = 0, y = 0, z = 0}, - expirationtime = def.expire or 0.25, - collisiondetection = false, - texture = def.tail_texture, - size = def.tail_size or 5, - glow = def.glow or 0, - }) - end - - if self.hit_node then - - local node = node_ok(pos).name - - if minetest.registered_nodes[node].walkable then - - self.hit_node(self, pos, node) - - if self.drop == true then - - pos.y = pos.y + 1 - - self.lastpos = (self.lastpos or pos) - - minetest.add_item(self.lastpos, self.object:get_luaentity().name) - end - - self.object:remove(); - - return - end - end - - if self.hit_player or self.hit_mob or self.hit_object then - - for _,player in pairs(minetest.get_objects_inside_radius(pos, 1.0)) do - - if self.hit_player - and player:is_player() then - - self.hit_player(self, player) - self.object:remove(); - return - end - - local entity = player:get_luaentity() - - if entity - and self.hit_mob - and entity._cmi_is_mob == true - and tostring(player) ~= self.owner_id - and entity.name ~= self.object:get_luaentity().name then - self.hit_mob(self, player) - self.object:remove(); - return - end - - if entity - and self.hit_object - and (not entity._cmi_is_mob) - and tostring(player) ~= self.owner_id - and entity.name ~= self.object:get_luaentity().name then - self.hit_object(self, player) - self.object:remove(); - return - end - end - end - - self.lastpos = pos - end - }) -end - - --- no damage to nodes explosion -function mobs:safe_boom(self, pos, strength) - minetest.sound_play(self.sounds and self.sounds.explode or "tnt_explode", { - pos = pos, - gain = 1.0, - max_hear_distance = self.sounds and self.sounds.distance or 32 - }, true) - local radius = strength - entity_physics(pos, radius) - effect(pos, 32, "mcl_particles_smoke.png", radius * 3, radius * 5, radius, 1, 0) -end - - --- make explosion with protection and tnt mod check -function mobs:boom(self, pos, strength, fire) - - if mod_explosions then - if mobs_griefing and not minetest.is_protected(pos, "") then - mcl_explosions.explode(pos, strength, { drop_chance = 1.0, fire = fire }, self.object) - else - mobs:safe_boom(self, pos, strength) - end - else - mobs:safe_boom(self, pos, strength) - end -end - - --- Register spawn eggs - --- Note: This also introduces the “spawn_egg” group: --- * spawn_egg=1: Spawn egg (generic mob, no metadata) --- * spawn_egg=2: Spawn egg (captured/tamed mob, metadata) -function mobs:register_egg(mob, desc, background, addegg, no_creative) - - local grp = {spawn_egg = 1} - - -- do NOT add this egg to creative inventory (e.g. dungeon master) - if no_creative == true then - grp.not_in_creative_inventory = 1 - end - - local invimg = background - - if addegg == 1 then - invimg = "mobs_chicken_egg.png^(" .. invimg .. - "^[mask:mobs_chicken_egg_overlay.png)" - end - - -- register old stackable mob egg - minetest.register_craftitem(mob, { - - description = desc, - inventory_image = invimg, - groups = grp, - - _doc_items_longdesc = S("This allows you to place a single mob."), - _doc_items_usagehelp = S("Just place it where you want the mob to appear. Animals will spawn tamed, unless you hold down the sneak key while placing. If you place this on a mob spawner, you change the mob it spawns."), - - on_place = function(itemstack, placer, pointed_thing) - - local pos = pointed_thing.above - - -- am I clicking on something with existing on_rightclick function? - local under = minetest.get_node(pointed_thing.under) - local def = minetest.registered_nodes[under.name] - if def and def.on_rightclick then - return def.on_rightclick(pointed_thing.under, under, placer, itemstack) - end - - if pos - and within_limits(pos, 0) - and not minetest.is_protected(pos, placer:get_player_name()) then - - local name = placer:get_player_name() - local privs = minetest.get_player_privs(name) - if mod_mobspawners and under.name == "mcl_mobspawners:spawner" then - if minetest.is_protected(pointed_thing.under, name) then - minetest.record_protection_violation(pointed_thing.under, name) - return itemstack - end - if not privs.maphack then - minetest.chat_send_player(name, S("You need the “maphack” privilege to change the mob spawner.")) - return itemstack - end - mcl_mobspawners.setup_spawner(pointed_thing.under, itemstack:get_name()) - if not mobs.is_creative(name) then - itemstack:take_item() - end - return itemstack - end - - if not minetest.registered_entities[mob] then - return itemstack - end - - if minetest.settings:get_bool("only_peaceful_mobs", false) - and minetest.registered_entities[mob].type == "monster" then - minetest.chat_send_player(name, S("Only peaceful mobs allowed!")) - return itemstack - end - - pos.y = pos.y - 0.5 - - local mob = minetest.add_entity(pos, mob) - minetest.log("action", "Mob spawned: "..name.." at "..minetest.pos_to_string(pos)) - local ent = mob:get_luaentity() - - -- don't set owner if monster or sneak pressed - if ent.type ~= "monster" - and not placer:get_player_control().sneak then - ent.owner = placer:get_player_name() - ent.tamed = true - end - - -- set nametag - local nametag = itemstack:get_meta():get_string("name") - if nametag ~= "" then - if string.len(nametag) > MAX_MOB_NAME_LENGTH then - nametag = string.sub(nametag, 1, MAX_MOB_NAME_LENGTH) - end - ent.nametag = nametag - update_tag(ent) - end - - -- if not in creative then take item - if not mobs.is_creative(placer:get_player_name()) then - itemstack:take_item() - end - end - - return itemstack - end, - }) - -end - - --- No-op in MCL2 (capturing mobs is not possible). --- Provided for compability with Mobs Redo -function mobs:capture_mob(self, clicker, chance_hand, chance_net, chance_lasso, force_take, replacewith) - return false -end - - --- No-op in MCL2 (protecting mobs is not possible). -function mobs:protect(self, clicker) - return false -end - - --- feeding, taming and breeding (thanks blert2112) -function mobs:feed_tame(self, clicker, feed_count, breed, tame) - if not self.follow then - return false - end - - -- can eat/tame with item in hand - if follow_holding(self, clicker) then - - -- if not in creative then take item - if not mobs.is_creative(clicker:get_player_name()) then - - local item = clicker:get_wielded_item() - - item:take_item() - - clicker:set_wielded_item(item) - end - - mob_sound(self, "eat", nil, true) - - -- increase health - self.health = self.health + 4 - - if self.health >= self.hp_max then - - self.health = self.hp_max - - if self.htimer < 1 then - self.htimer = 5 - end - end - - self.object:set_hp(self.health) - - update_tag(self) - - -- make children grow quicker - if self.child == true then - - -- deduct 10% of the time to adulthood - self.hornytimer = self.hornytimer + ((CHILD_GROW_TIME - self.hornytimer) * 0.1) - - return true - end - - -- feed and tame - self.food = (self.food or 0) + 1 - if self.food >= feed_count then - - self.food = 0 - - if breed and self.hornytimer == 0 then - self.horny = true - end - - if tame then - - self.tamed = true - - if not self.owner or self.owner == "" then - self.owner = clicker:get_player_name() - end - end - - -- make sound when fed so many times - mob_sound(self, "random", true) - end - - return true - end - - return false -end - --- Spawn a child -function mobs:spawn_child(pos, mob_type) - local child = minetest.add_entity(pos, mob_type) - if not child then - return - end - - local ent = child:get_luaentity() - effect(pos, 15, "mcl_particles_smoke.png", 1, 2, 2, 15, 5) - - ent.child = true - - local textures - -- using specific child texture (if found) - if ent.child_texture then - textures = ent.child_texture[1] - end - - -- and resize to half height - child:set_properties({ - textures = textures, - visual_size = { - x = ent.base_size.x * .5, - y = ent.base_size.y * .5, - }, - collisionbox = { - ent.base_colbox[1] * .5, - ent.base_colbox[2] * .5, - ent.base_colbox[3] * .5, - ent.base_colbox[4] * .5, - ent.base_colbox[5] * .5, - ent.base_colbox[6] * .5, - }, - selectionbox = { - ent.base_selbox[1] * .5, - ent.base_selbox[2] * .5, - ent.base_selbox[3] * .5, - ent.base_selbox[4] * .5, - ent.base_selbox[5] * .5, - ent.base_selbox[6] * .5, - }, - }) - - return child -end - - --- compatibility function for old entities to new modpack entities -function mobs:alias_mob(old_name, new_name) - - -- spawn egg - minetest.register_alias(old_name, new_name) - - -- entity - minetest.register_entity(":" .. old_name, { - - physical = false, - - on_step = function(self) - - if minetest.registered_entities[new_name] then - minetest.add_entity(self.object:get_pos(), new_name) - end - - self.object:remove() - end - }) - -end - -local timer = 0 -minetest.register_globalstep(function(dtime) - timer = timer + dtime - if timer < 1 then return end - for _, player in ipairs(minetest.get_connected_players()) do - local pos = player:get_pos() - for _, obj in ipairs(minetest.get_objects_inside_radius(pos, 47)) do - local lua = obj:get_luaentity() - if lua and lua._cmi_is_mob then - lua.lifetimer = math.max(20, lua.lifetimer) - lua.despawn_immediately = false - end - end - end - timer = 0 -end) +--end diff --git a/mods/ENTITIES/mcl_mobs/api/mob_functions/breeding.lua b/mods/ENTITIES/mcl_mobs/api/mob_functions/breeding.lua new file mode 100644 index 000000000..c50fb6300 --- /dev/null +++ b/mods/ENTITIES/mcl_mobs/api/mob_functions/breeding.lua @@ -0,0 +1,179 @@ +local minetest_get_objects_inside_radius = minetest.get_objects_inside_radius + +local vector = vector + +--check to see if someone nearby has some tasty food +mobs.check_following = function(self) -- returns true or false + --ignore + if not self.follow then + self.following_person = nil + return false + end + + --hey look, this thing works for passive mobs too! + local follower = mobs.detect_closest_player_within_radius(self,true,self.view_range,self.eye_height) + + --check if the follower is a player incase they log out + if follower and follower:is_player() then + local stack = follower:get_wielded_item() + --safety check + if not stack then + self.following_person = nil + return false + end + + local item_name = stack:get_name() + --all checks have passed, that guy has some good looking food + if item_name == self.follow then + self.following_person = follower + return true + end + end + + --everything failed + self.following_person = nil + return false +end + +--a function which attempts to make mobs enter +--the breeding state +mobs.enter_breed_state = function(self,clicker) + + --do not breed if baby + if self.baby then + return false + end + + --do not do anything if looking for mate or + --if cooling off from breeding + if self.breed_lookout_timer > 0 or self.breed_timer > 0 then + return false + end + + --if this is caught, that means something has gone + --seriously wrong + if not clicker or not clicker:is_player() then + return false + end + + local stack = clicker:get_wielded_item() + --safety check + if not stack then + return false + end + + local item_name = stack:get_name() + --all checks have passed, that guy has some good looking food + if item_name == self.follow then + if not minetest.is_creative_enabled(clicker:get_player_name()) then + stack:take_item() + clicker:set_wielded_item(stack) + end + self.breed_lookout_timer = self.breed_lookout_timer_goal + self.bred = true + mobs.play_sound_specific(self,"mobs_mc_animal_eat_generic") + return true + end + + --everything failed + return false +end + + +--find the closest mate in the area +mobs.look_for_mate = function(self) + + local pos1 = self.object:get_pos() + pos1.y = pos1.y + self.eye_height + + local mates_in_area = {} + local winner_mate = nil + local mates_detected = 0 + local radius = self.view_range + + --get mates in radius + for _,mate in pairs(minetest_get_objects_inside_radius(pos1, radius)) do + + --look for a breeding mate + if mate and mate:get_luaentity() + and mate:get_luaentity()._cmi_is_mob + and mate:get_luaentity().name == self.name + and mate:get_luaentity().breed_lookout_timer > 0 + and mate:get_luaentity() ~= self then + + local pos2 = mate:get_pos() + + local distance = vector.distance(pos1,pos2) + + if distance <= radius then + if minetest.line_of_sight then + --must add eye height or stuff breaks randomly because of + --seethrough nodes being a blocker (like grass) + if minetest.line_of_sight( + vector.new(pos1.x, pos1.y, pos1.z), + vector.new(pos2.x, pos2.y + mate:get_properties().eye_height, pos2.z) + ) then + mates_detected = mates_detected + 1 + mates_in_area[mate] = distance + end + else + mates_detected = mates_detected + 1 + mates_in_area[mate] = distance + end + end + end + end + + + --return if there's no one near by + if mates_detected <= 0 then --handle negative numbers for some crazy error that could possibly happen + return nil + end + + --do a default radius max + local shortest_distance = radius + 1 + + --sort through mates and find the closest mate + for mate,distance in pairs(mates_in_area) do + if distance < shortest_distance then + shortest_distance = distance + winner_mate = mate + end + end + return winner_mate +end + +--make the baby grow up +mobs.baby_grow_up = function(self) + self.baby = nil + self.visual_size = self.backup_visual_size + self.collisionbox = self.backup_collisionbox + self.selectionbox = self.backup_selectionbox + self.object:set_properties(self) +end + +--makes the baby grow up faster with diminishing returns +mobs.make_baby_grow_faster = function(self,clicker) + if clicker and clicker:is_player() then + local stack = clicker:get_wielded_item() + --safety check + if not stack then + return false + end + + local item_name = stack:get_name() + --all checks have passed, that guy has some good looking food + if item_name == self.follow then + self.grow_up_timer = self.grow_up_timer - (self.grow_up_timer * 0.10) --take 10 percent off - diminishing returns + + if not minetest.is_creative_enabled(clicker:get_player_name()) then + stack:take_item() + clicker:set_wielded_item(stack) + end + + mobs.play_sound_specific(self,"mobs_mc_animal_eat_generic") + return true + end + end + return false +end \ No newline at end of file diff --git a/mods/ENTITIES/mcl_mobs/api/mob_functions/collision.lua b/mods/ENTITIES/mcl_mobs/api/mob_functions/collision.lua new file mode 100644 index 000000000..ed9aec6cd --- /dev/null +++ b/mods/ENTITIES/mcl_mobs/api/mob_functions/collision.lua @@ -0,0 +1,135 @@ +local minetest_get_objects_inside_radius = minetest.get_objects_inside_radius + +local math_random = math.random +local vector_multiply = vector.multiply + +local vector_direction = vector.direction + +local integer_test = {-1,1} + +mobs.collision = function(self) + local pos = self.object:get_pos() + + if not self or not self.object or not self.object:get_luaentity() then + return + end + + --do collision detection from the base of the mob + local collisionbox = self.object:get_properties().collisionbox + + pos.y = pos.y + collisionbox[2] + + local collision_boundary = collisionbox[4] + + local radius = collision_boundary + + if collisionbox[5] > collision_boundary then + radius = collisionbox[5] + end + + local collision_count = 0 + + + local check_for_attack = false + + if self.attack_type == "punch" and self.hostile and self.attacking then + check_for_attack = true + end + + for _,object in ipairs(minetest_get_objects_inside_radius(pos, radius*1.25)) do + if object and object ~= self.object and (object:is_player() or (object:get_luaentity() and object:get_luaentity()._cmi_is_mob == true and object:get_luaentity().health > 0)) and + --don't collide with rider, rider don't collide with thing + (not object:get_attach() or (object:get_attach() and object:get_attach() ~= self.object)) and + (not self.object:get_attach() or (self.object:get_attach() and self.object:get_attach() ~= object)) then + --stop infinite loop + collision_count = collision_count + 1 + --mob cramming + if collision_count > 30 then + self.health = -20 + break + end + + local pos2 = object:get_pos() + + local object_collisionbox = object:get_properties().collisionbox + + pos2.y = pos2.y + object_collisionbox[2] + + local object_collision_boundary = object_collisionbox[4] + + + --this is checking the difference of the object collided with's possision + --if positive top of other object is inside (y axis) of current object + local y_base_diff = (pos2.y + object_collisionbox[5]) - pos.y + + local y_top_diff = (pos.y + collisionbox[5]) - pos2.y + + + local distance = vector.distance(vector.new(pos.x,0,pos.z),vector.new(pos2.x,0,pos2.z)) + + if distance <= collision_boundary + object_collision_boundary and y_base_diff >= 0 and y_top_diff >= 0 then + + local dir = vector.direction(pos,pos2) + + dir.y = 0 + + --eliminate mob being stuck in corners + if dir.x == 0 and dir.z == 0 then + --slightly adjust mob position to prevent equal length + --corner/wall sticking + dir.x = dir.x + ((math_random()/10)*integer_test[math.random(1,2)]) + dir.z = dir.z + ((math_random()/10)*integer_test[math.random(1,2)]) + end + + local velocity = dir + + --0.5 is the max force multiplier + local force = 0.5 - (0.5 * distance / (collision_boundary + object_collision_boundary)) + + local vel1 = vector.multiply(velocity, -1.5) + local vel2 = vector.multiply(velocity, 1.5) + + vel1 = vector.multiply(vel1, force * 10) + vel2 = vector.multiply(vel2, force) + + if object:is_player() then + vel2 = vector_multiply(vel2, 2.5) + + --integrate mob punching into collision detection + if check_for_attack and self.punch_timer <= 0 then + if object == self.attacking then + mobs.punch_attack(self) + end + end + end + self.object:add_velocity(vel1) + object:add_velocity(vel2) + end + end + end +end + + +--this is used for arrow collisions +mobs.arrow_hit = function(self, player) + player:punch(self.object, 1.0, { + full_punch_interval = 1.0, + damage_groups = {fleshy = self._damage} + }, nil) + + + --knockback + local pos1 = self.object:get_pos() + pos1.y = 0 + local pos2 = player:get_pos() + pos2.y = 0 + local dir = vector_direction(pos1,pos2) + + dir = vector_multiply(dir,3) + + if player:get_velocity().y <= 1 then + dir.y = 5 + end + + player:add_velocity(dir) +end \ No newline at end of file diff --git a/mods/ENTITIES/mcl_mobs/api/mob_functions/death_logic.lua b/mods/ENTITIES/mcl_mobs/api/mob_functions/death_logic.lua new file mode 100644 index 000000000..45e46d3db --- /dev/null +++ b/mods/ENTITIES/mcl_mobs/api/mob_functions/death_logic.lua @@ -0,0 +1,158 @@ +local minetest_add_item = minetest.add_item +--local minetest_sound_play = minetest.sound_play + +local math_pi = math.pi +local math_random = math.random +local math_floor = math.floor +local HALF_PI = math_pi / 2 + +local vector_new = vector.new + + +-- drop items +local item_drop = function(self, cooked, looting_level) + + looting_level = looting_level or 0 + + -- no drops for child mobs (except monster) + if (self.child and self.type ~= "monster") then + return + end + + local obj, item + local pos = self.object:get_pos() + + self.drops = self.drops or {} -- nil check + + for n = 1, #self.drops do + local dropdef = self.drops[n] + local chance = 1 / dropdef.chance + local looting_type = dropdef.looting + + if looting_level > 0 then + local chance_function = dropdef.looting_chance_function + if chance_function then + chance = chance_function(looting_level) + elseif looting_type == "rare" then + chance = chance + (dropdef.looting_factor or 0.01) * looting_level + end + end + + local num = 0 + local do_common_looting = (looting_level > 0 and looting_type == "common") + if math_random() < chance then + num = math_random(dropdef.min or 1, dropdef.max or 1) + elseif not dropdef.looting_ignore_chance then + do_common_looting = false + end + + if do_common_looting then + num = num + math_floor(math_random(0, looting_level) + 0.5) + end + + if num > 0 then + item = dropdef.name + + -- cook items when true + if cooked then + + local output = minetest.get_craft_result({ + method = "cooking", + width = 1, + items = {item}, + }) + + if output and output.item and not output.item:is_empty() then + item = output.item:get_name() + end + end + + -- add item if it exists + for x = 1, num do + obj = minetest_add_item(pos, ItemStack(item .. " " .. 1)) + end + + if obj and obj:get_luaentity() then + + obj:set_velocity({ + x = math_random(-10, 10) / 9, + y = 6, + z = math_random(-10, 10) / 9, + }) + elseif obj then + obj:remove() -- item does not exist + end + end + end + + self.drops = {} +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 + local attached_entities = self.object:get_children() + if #attached_entities > 0 then + for _,entity in pairs(attached_entities) do + --kick the player off + if entity:is_player() then + mobs.detach(entity) + --kick mobs off + --if there is scaling issues, this needs an additional check + else + entity:set_detach() + end + end + end + + --stop mob from getting in the way of other mobs you're fighting + if self.object:get_properties().pointable then + self.object:set_properties({pointable = false}) + end + + --the final POOF of a mob despawning + if self.death_animation_timer >= 1.25 then + item_drop(self,false,1) + mobs.death_effect(self) + mcl_experience.throw_experience(self.object:get_pos(), math_random(self.xp_min, self.xp_max)) + self.object:remove() + return + end + + --I'm sure there's a more efficient way to do this + --but this is the easiest, easier to work with 1 variable synced + --this is also not smooth + local death_animation_roll = self.death_animation_timer * 2 -- * 2 to make it faster + if death_animation_roll > 1 then + death_animation_roll = 1 + end + + local rot = self.object:get_rotation() --(no pun intended) + + rot.z = death_animation_roll * HALF_PI + + self.object:set_rotation(rot) + + mobs.set_mob_animation(self,"stand", true) + + + --flying and swimming mobs just fall down + if self.fly or self.swim then + if self.object:get_acceleration().y ~= -self.gravity then + self.object:set_acceleration(vector_new(0,-self.gravity,0)) + end + end + + --when landing allow mob to slow down and just fall if in air + if self.pause_timer <= 0 then + mobs.set_velocity(self,0) + end +end \ No newline at end of file diff --git a/mods/ENTITIES/mcl_mobs/api/mob_functions/environment.lua b/mods/ENTITIES/mcl_mobs/api/mob_functions/environment.lua new file mode 100644 index 000000000..5c431135e --- /dev/null +++ b/mods/ENTITIES/mcl_mobs/api/mob_functions/environment.lua @@ -0,0 +1,250 @@ +local minetest_line_of_sight = minetest.line_of_sight +--local minetest_dir_to_yaw = minetest.dir_to_yaw +local minetest_yaw_to_dir = minetest.yaw_to_dir +local minetest_get_node = minetest.get_node +local minetest_get_item_group = minetest.get_item_group +local minetest_get_objects_inside_radius = minetest.get_objects_inside_radius +local minetest_get_node_or_nil = minetest.get_node_or_nil +local minetest_registered_nodes = minetest.registered_nodes +local minetest_get_connected_players = minetest.get_connected_players + +local vector_new = vector.new +local vector_add = vector.add +local vector_multiply = vector.multiply +local vector_distance = vector.distance + +local table_copy = table.copy + +local math_abs = math.abs + +-- default function when mobs are blown up with TNT +--[[local function do_tnt(obj, damage) + obj.object:punch(obj.object, 1.0, { + full_punch_interval = 1.0, + damage_groups = {fleshy = damage}, + }, nil) + return false, true, {} +end]] + +--a fast function to be able to detect only players without using objects_in_radius +mobs.detect_closest_player_within_radius = function(self, line_of_sight, radius, object_height_adder) + local pos1 = self.object:get_pos() + local players_in_area = {} + local winner_player = nil + local players_detected = 0 + + --get players in radius + for _,player in pairs(minetest.get_connected_players()) do + if player and player:get_hp() > 0 then + + local pos2 = player:get_pos() + + local distance = vector_distance(pos1,pos2) + + if distance <= radius then + if line_of_sight then + --must add eye height or stuff breaks randomly because of + --seethrough nodes being a blocker (like grass) + if minetest_line_of_sight( + vector_new(pos1.x, pos1.y + object_height_adder, pos1.z), + vector_new(pos2.x, pos2.y + player:get_properties().eye_height, pos2.z) + ) then + players_detected = players_detected + 1 + players_in_area[player] = distance + end + else + players_detected = players_detected + 1 + players_in_area[player] = distance + end + end + end + end + + + --return if there's no one near by + if players_detected <= 0 then --handle negative numbers for some crazy error that could possibly happen + return nil + end + + --do a default radius max + local shortest_distance = radius + 1 + + --sort through players and find the closest player + for player,distance in pairs(players_in_area) do + if distance < shortest_distance then + shortest_distance = distance + winner_player = player + end + end + return winner_player +end + + +--check if a mob needs to jump +mobs.jump_check = function(self,dtime) + + local pos = self.object:get_pos() + pos.y = pos.y + 0.1 + local dir = minetest_yaw_to_dir(self.yaw) + + local collisionbox = self.object:get_properties().collisionbox + local radius = collisionbox[4] + 0.5 + + vector_multiply(dir, radius) + + --only jump if there's a node and a non-solid node above it + local test_dir = vector_add(pos,dir) + + local green_flag_1 = minetest_get_item_group(minetest_get_node(test_dir).name, "solid") ~= 0 + + test_dir.y = test_dir.y + 1 + + local green_flag_2 = minetest_get_item_group(minetest_get_node(test_dir).name, "solid") == 0 + + if green_flag_1 and green_flag_2 then + --can jump over node + return 1 + elseif green_flag_1 and not green_flag_2 then + --wall in front of mob + return 2 + end + --nothing to jump over + return 0 +end + +-- a helper function to quickly turn neutral passive mobs hostile +local turn_hostile = function(self,detected_mob) + --drop in variables for attacking (stops crash) + detected_mob.punch_timer = 0 + --set to hostile + detected_mob.hostile = true + --hostile_cooldown timer is initialized here + detected_mob.hostile_cooldown_timer = detected_mob.hostile_cooldown + --set target to the same + detected_mob.attacking = self.attacking +end + +--allow hostile mobs to signal to other mobs +--to switch from neutal passive to neutral hostile +mobs.group_attack_initialization = function(self) + + --get basic data + local friends_list + + if self.group_attack == true then + friends_list = {self.name} + else + friends_list = table_copy(self.group_attack) + end + + local objects_in_area = minetest_get_objects_inside_radius(self.object:get_pos(), self.view_range) + + --get the player's name + local name = self.attacking:get_player_name() + + --re-use local variable + local detected_mob + + --run through mobs in viewing distance + for _,object in pairs(objects_in_area) do + if object and object:get_luaentity() then + detected_mob = object:get_luaentity() + -- only alert members of same mob or friends + if detected_mob._cmi_is_mob and detected_mob.state ~= "attack" and detected_mob.owner ~= name then + if detected_mob.name == self.name then + turn_hostile(self,detected_mob) + else + for _,id in pairs(friends_list) do + if detected_mob.name == id then + turn_hostile(self,detected_mob) + break + end + end + end + end + + --THIS NEEDS TO BE RE-IMPLEMENTED AS A GLOBAL HIT IN MOB_PUNCH!! + -- have owned mobs attack player threat + --if obj.owner == name and obj.owner_loyal then + -- do_attack(obj, self.object) + --end + end + end +end + +-- check if within physical map limits (-30911 to 30927) +-- within_limits, wmin, wmax = nil, -30913, 30928 +mobs.within_limits = function(pos, radius) + local wmin, wmax + if mcl_vars then + if mcl_vars.mapgen_edge_min and mcl_vars.mapgen_edge_max then + wmin, wmax = mcl_vars.mapgen_edge_min, mcl_vars.mapgen_edge_max + end + end + return pos + and (pos.x - radius) > wmin and (pos.x + radius) < wmax + and (pos.y - radius) > wmin and (pos.y + radius) < wmax + and (pos.z - radius) > wmin and (pos.z + radius) < wmax +end + +-- get node but use fallback for nil or unknown +mobs.node_ok = function(pos, fallback) + + fallback = fallback or mobs.fallback_node + + local node = minetest_get_node_or_nil(pos) + + if node and minetest_registered_nodes[node.name] then + return node + end + + return minetest_registered_nodes[fallback] +end + + +--a teleport functoin +mobs.teleport = function(self, target) + if self.do_teleport then + if self.do_teleport(self, target) == false then + return + end + end +end + +--a function used for despawning mobs +mobs.check_for_player_within_area = function(self, radius) + local pos1 = self.object:get_pos() + --get players in radius + for _,player in pairs(minetest_get_connected_players()) do + if player and player:get_hp() > 0 then + local pos2 = player:get_pos() + local distance = vector_distance(pos1,pos2) + if distance < radius then + --found a player + return true + end + end + end + --did not find a player + return false +end + + +--a simple helper function for mobs following +mobs.get_2d_distance = function(pos1,pos2) + pos1.y = 0 + pos2.y = 0 + return vector_distance(pos1, pos2) +end + +-- fall damage onto solid ground +mobs.calculate_fall_damage = function(self) + if self.old_velocity and self.old_velocity.y < -7 and self.object:get_velocity().y == 0 then + local vel = self.object:get_velocity() + if vel then + local damage = math_abs(self.old_velocity.y + 7) * 2 + self.pause_timer = 0.4 + self.health = self.health - damage + end + end +end \ No newline at end of file diff --git a/mods/ENTITIES/mcl_mobs/api/mob_functions/flow_lib.lua b/mods/ENTITIES/mcl_mobs/api/mob_functions/flow_lib.lua new file mode 100644 index 000000000..aa64bfb4e --- /dev/null +++ b/mods/ENTITIES/mcl_mobs/api/mob_functions/flow_lib.lua @@ -0,0 +1,78 @@ +--this is from https://github.com/HybridDog/builtin_item/blob/e6dfd9dce86503b3cbd1474257eca5f6f6ca71c2/init.lua#L50 +local +minetest,vector,math,pairs,minetest_get_node,vector_subtract,minetest_registered_nodes += +minetest,vector,math,pairs,minetest.get_node,vector.subtract,minetest.registered_nodes + +local tab +local n +local function get_nodes(pos) + tab,n = {},1 + for i = -1,1,2 do + for _,p in pairs({ + {x=pos.x+i, y=pos.y, z=pos.z}, + {x=pos.x, y=pos.y, z=pos.z+i} + }) do + tab[n] = {p, minetest_get_node(p)} + n = n+1 + end + end + return tab +end + + +local data +local param2 +local nd +local par2 +local name +local tmp +local c_node +function mobs.get_flowing_dir(pos) + c_node = minetest_get_node(pos).name + if c_node ~= "mcl_core:water_flowing" and c_node ~= "mcl_core:water" then + return nil + end + data = get_nodes(pos) + param2 = minetest_get_node(pos).param2 + if param2 > 7 then + return nil + end + if c_node == "mcl_core:water" then + for _,i in pairs(data) do + nd = i[2] + name = nd.name + par2 = nd.param2 + if name == "mcl_core:water_flowing" and par2 == 7 then + return(vector_subtract(i[1],pos)) + end + end + end + for _,i in pairs(data) do + nd = i[2] + name = nd.name + par2 = nd.param2 + if name == "mcl_core:water_flowing" and par2 < param2 then + return(vector_subtract(i[1],pos)) + end + end + for _,i in pairs(data) do + nd = i[2] + name = nd.name + par2 = nd.param2 + if name == "mcl_core:water_flowing" and par2 >= 11 then + return(vector_subtract(i[1],pos)) + end + end + for _,i in pairs(data) do + nd = i[2] + name = nd.name + par2 = nd.param2 + tmp = minetest_registered_nodes[name] + if tmp and not tmp.walkable and name ~= "mcl_core:water_flowing" and name ~= "mcl_core:water" then + return(vector_subtract(i[1],pos)) + end + end + + return nil +end diff --git a/mods/ENTITIES/mcl_mobs/api/mob_functions/head_logic.lua b/mods/ENTITIES/mcl_mobs/api/mob_functions/head_logic.lua new file mode 100644 index 000000000..0f5615504 --- /dev/null +++ b/mods/ENTITIES/mcl_mobs/api/mob_functions/head_logic.lua @@ -0,0 +1,98 @@ +local math = math +local vector = vector + +--converts yaw to degrees +local degrees = function(yaw) + return yaw*180.0/math.pi +end + +mobs.do_head_logic = function(self,dtime) + + local player = minetest.get_player_by_name("singleplayer") + + local look_at = player:get_pos() + look_at.y = look_at.y + player:get_properties().eye_height + + local pos = self.object:get_pos() + + local body_yaw = self.object:get_yaw() + + local body_dir = minetest.yaw_to_dir(body_yaw) + + pos.y = pos.y + self.head_height_offset + + local head_offset = vector.multiply(body_dir, self.head_direction_offset) + + pos = vector.add(pos, head_offset) + + minetest.add_particle({ + pos = pos, + velocity = {x=0, y=0, z=0}, + acceleration = {x=0, y=0, z=0}, + expirationtime = 0.2, + size = 1, + texture = "default_dirt.png", + }) + + local bone_pos = vector.new(0,0,0) + + --(horizontal) + bone_pos.y = self.head_bone_pos_y + + --(vertical) + bone_pos.z = self.head_bone_pos_z + + --print(yaw) + + --local _, bone_rot = self.object:get_bone_position("head") + + --bone_rot.x = bone_rot.x + (dtime * 10) + --bone_rot.z = bone_rot.z + (dtime * 10) + + local head_yaw = minetest.dir_to_yaw(vector.direction(pos,look_at)) - body_yaw + + if self.reverse_head_yaw then + head_yaw = head_yaw * -1 + end + + --over rotation protection + --stops radians from going out of spec + if head_yaw > math.pi then + head_yaw = head_yaw - (math.pi * 2) + elseif head_yaw < -math.pi then + head_yaw = head_yaw + (math.pi * 2) + end + + + local check_failed = false + --upper check + 90 degrees or upper math.radians (3.14/2) + if head_yaw > math.pi - (math.pi/2) then + head_yaw = 0 + check_failed = true + --lower check - 90 degrees or lower negative math.radians (-3.14/2) + elseif head_yaw < -math.pi + (math.pi/2) then + head_yaw = 0 + check_failed = true + end + + local head_pitch = 0 + + --DEBUG DEBUG DEBUG DEBUG DEBUG DEBUG DEBUG DEBUG DEBUG DEBUG DEBUG DEBUG DEBUG DEBUG DEBUG DEBUG DEBUG + --head_yaw = 0 + --DEBUG DEBUG DEBUG DEBUG DEBUG DEBUG DEBUG DEBUG DEBUG DEBUG DEBUG DEBUG DEBUG DEBUG DEBUG DEBUG DEBUG + + if not check_failed then + head_pitch = minetest.dir_to_yaw(vector.new(vector.distance(vector.new(pos.x,0,pos.z),vector.new(look_at.x,0,look_at.z)),0,pos.y-look_at.y))+(math.pi/2) + end + + if self.head_pitch_modifier then + head_pitch = head_pitch + self.head_pitch_modifier + end + + if self.swap_y_with_x then + self.object:set_bone_position(self.head_bone, bone_pos, vector.new(degrees(head_pitch),degrees(head_yaw),0)) + else + self.object:set_bone_position(self.head_bone, bone_pos, vector.new(degrees(head_pitch),0,degrees(head_yaw))) + end + --set_bone_position([bone, position, rotation]) +end \ No newline at end of file diff --git a/mods/ENTITIES/mcl_mobs/api/mob_functions/interaction.lua b/mods/ENTITIES/mcl_mobs/api/mob_functions/interaction.lua new file mode 100644 index 000000000..fa5b31210 --- /dev/null +++ b/mods/ENTITIES/mcl_mobs/api/mob_functions/interaction.lua @@ -0,0 +1,276 @@ +local minetest_after = minetest.after +local minetest_sound_play = minetest.sound_play +local minetest_dir_to_yaw = minetest.dir_to_yaw + +local math = math +local vector = vector + +local MAX_MOB_NAME_LENGTH = 30 + +local mod_hunger = minetest.get_modpath("mcl_hunger") + +mobs.feed_tame = function(self) + return nil +end + +-- Code to execute before custom on_rightclick handling +local function on_rightclick_prefix(self, clicker) + local item = clicker:get_wielded_item() + + -- Name mob with nametag + if not self.ignores_nametag and item:get_name() == "mcl_mobs:nametag" then + + local tag = item:get_meta():get_string("name") + if tag ~= "" then + if string.len(tag) > MAX_MOB_NAME_LENGTH then + tag = string.sub(tag, 1, MAX_MOB_NAME_LENGTH) + end + self.nametag = tag + + mobs.update_tag(self) + + if not mobs.is_creative(clicker:get_player_name()) then + item:take_item() + clicker:set_wielded_item(item) + end + return true + end + + end + return false +end + +-- I have no idea what this does +mobs.create_mob_on_rightclick = function(on_rightclick) + return function(self, clicker) + --don't allow rightclicking dead mobs + if self.health <= 0 then + return + end + local stop = on_rightclick_prefix(self, clicker) + if (not stop) and (on_rightclick) then + on_rightclick(self, clicker) + end + end +end + + +-- deal damage and effects when mob punched +mobs.mob_punch = function(self, hitter, tflp, tool_capabilities, dir) + --don't do anything if the mob is already dead + if self.health <= 0 then + return + end + + --neutral passive mobs switch to neutral hostile + if self.neutral then + --drop in variables for attacking (stops crash) + self.attacking = hitter + self.punch_timer = 0 + self.hostile = true + --hostile_cooldown timer is initialized here + self.hostile_cooldown_timer = self.hostile_cooldown + + --initialize the group attack (check for other mobs in area, make them neutral hostile) + if self.group_attack then + mobs.group_attack_initialization(self) + end + end + + --turn skittish mobs away and RUN + if self.skittish then + + self.state = "run" + + self.run_timer = 5 --arbitrary 5 seconds + + local pos1 = self.object:get_pos() + pos1.y = 0 + local pos2 = hitter:get_pos() + pos2.y = 0 + + + local dir = vector.direction(pos2,pos1) + + local yaw = minetest_dir_to_yaw(dir) + + self.yaw = yaw + end + + -- custom punch function + if self.do_punch then + -- when false skip going any further + if self.do_punch(self, hitter, tflp, tool_capabilities, dir) == false then + return + end + end + + --don't do damage until pause timer resets + if self.pause_timer > 0 then + return + end + + -- error checking when mod profiling is enabled + if not tool_capabilities then + minetest.log("warning", "[mobs_mc] Mod profiling enabled, damage not enabled") + return + end + + local is_player = hitter:is_player() + + -- punch interval + local weapon = hitter:get_wielded_item() + + --local punch_interval = 1.4 + + -- exhaust attacker + if mod_hunger and is_player then + mcl_hunger.exhaust(hitter:get_player_name(), mcl_hunger.EXHAUST_ATTACK) + end + + -- calculate mob damage + local damage = 0 + local armor = self.object:get_armor_groups() or {} + + --calculate damage groups + for group,_ in pairs( (tool_capabilities.damage_groups or {}) ) do + damage = damage + (tool_capabilities.damage_groups[group] or 0) * ((armor[group] or 0) / 100.0) + end + + if weapon then + local fire_aspect_level = mcl_enchanting.get_enchantment(weapon, "fire_aspect") + if fire_aspect_level > 0 then + mcl_burning.set_on_fire(self.object, fire_aspect_level * 4) + end + end + + -- check for tool immunity or special damage + for n = 1, #self.immune_to do + if self.immune_to[n][1] == weapon:get_name() then + damage = self.immune_to[n][2] or 0 + break + end + end + + -- healing + if damage <= -1 then + self.health = self.health - math.floor(damage) + return + end + + --if tool_capabilities then + -- punch_interval = tool_capabilities.full_punch_interval or 1.4 + --end + + -- add weapon wear manually + -- Required because we have custom health handling ("health" property) + --minetest_is_creative_enabled("") ~= true --removed for now + if tool_capabilities then + if tool_capabilities.punch_attack_uses then + -- Without this delay, the wear does not work. Quite hacky ... + minetest_after(0, function(name) + local player = minetest.get_player_by_name(name) + if not player then return end + local weapon = hitter:get_wielded_item(player) + local def = weapon:get_definition() + if def.tool_capabilities and def.tool_capabilities.punch_attack_uses then + local wear = math.floor(65535/tool_capabilities.punch_attack_uses) + weapon:add_wear(wear) + hitter:set_wielded_item(weapon) + end + end, hitter:get_player_name()) + end + end + + + --if player is falling multiply damage by 1.5 + --critical hit + if hitter:get_velocity().y < 0 then + damage = damage * 1.5 + mobs.critical_effect(self) + end + + + -- only play hit sound and show blood effects if damage is 1 or over; lower to 0.1 to ensure armor works appropriately. + if damage >= 0.1 then + + minetest_sound_play("default_punch", { + object = self.object, + max_hear_distance = 16 + }, true) + + -- do damage + self.health = self.health - damage + + + --0.4 seconds until you can hurt the mob again + self.pause_timer = 0.4 + + --don't do knockback from a rider + for _,obj in pairs(self.object:get_children()) do + if obj == hitter then + return + end + end + + -- knock back effect + local velocity = self.object:get_velocity() + + --2d direction + local pos1 = self.object:get_pos() + pos1.y = 0 + local pos2 = hitter:get_pos() + pos2.y = 0 + + local dir = vector.direction(pos2,pos1) + + local up = 3 + + -- if already in air then dont go up anymore when hit + if velocity.y ~= 0 then + up = 0 + end + + --0.75 for perfect distance to not be too easy, and not be too hard + local multiplier = 0.75 + + -- check if tool already has specific knockback value + local knockback_enchant = mcl_enchanting.get_enchantment(hitter:get_wielded_item(), "knockback") + if knockback_enchant and knockback_enchant > 0 then + multiplier = knockback_enchant + 1 --(starts from 1, 1 would be no change) + end + + --do this to sure you can punch a mob back when + --it's coming for you + if self.hostile then + multiplier = multiplier + 2 + end + dir = vector.multiply(dir,multiplier) + dir.y = up + --add the velocity + self.object:add_velocity(dir) + end +end + +--do internal per mob projectile calculations +mobs.shoot_projectile = function(self) + local pos1 = self.object:get_pos() + --add mob eye height + pos1.y = pos1.y + self.eye_height + + local pos2 = self.attacking:get_pos() + --add player eye height + pos2.y = pos2.y + self.attacking:get_properties().eye_height + + --get direction + local dir = vector.direction(pos1,pos2) + + --call internal shoot_arrow function + self.shoot_arrow(self,pos1,dir) +end + +mobs.update_tag = function(self) + self.object:set_properties({ + nametag = self.nametag, + }) +end \ No newline at end of file diff --git a/mods/ENTITIES/mcl_mobs/api/mob_functions/mob_effects.lua b/mods/ENTITIES/mcl_mobs/api/mob_functions/mob_effects.lua new file mode 100644 index 000000000..83df80992 --- /dev/null +++ b/mods/ENTITIES/mcl_mobs/api/mob_functions/mob_effects.lua @@ -0,0 +1,150 @@ +local minetest_add_particlespawner = minetest.add_particlespawner + +mobs.death_effect = function(self) + local pos = self.object:get_pos() + --local yaw = self.object:get_yaw() + local collisionbox = self.object:get_properties().collisionbox + + local min, max + + if collisionbox then + min = {x=collisionbox[1], y=collisionbox[2], z=collisionbox[3]} + max = {x=collisionbox[4], y=collisionbox[5], z=collisionbox[6]} + end + + minetest_add_particlespawner({ + amount = 50, + time = 0.0001, + minpos = vector.add(pos, min), + maxpos = vector.add(pos, max), + minvel = vector.new(-0.5,0.5,-0.5), + maxvel = vector.new(0.5,1,0.5), + minexptime = 1.1, + maxexptime = 1.5, + minsize = 1, + maxsize = 2, + collisiondetection = false, + vertical = false, + texture = "mcl_particles_mob_death.png", -- this particle looks strange + }) +end + +mobs.critical_effect = function(self) + + local pos = self.object:get_pos() + --local yaw = self.object:get_yaw() + local collisionbox = self.object:get_properties().collisionbox + + local min, max + + if collisionbox then + min = {x=collisionbox[1], y=collisionbox[2], z=collisionbox[3]} + max = {x=collisionbox[4], y=collisionbox[5], z=collisionbox[6]} + end + + minetest_add_particlespawner({ + amount = 10, + time = 0.0001, + minpos = vector.add(pos, min), + maxpos = vector.add(pos, max), + minvel = vector.new(-1,1,-1), + maxvel = vector.new(1,3,1), + minexptime = 0.7, + maxexptime = 1, + minsize = 1, + maxsize = 2, + collisiondetection = false, + vertical = false, + texture = "heart.png^[colorize:black:255", + }) +end + +--when feeding a mob +mobs.feed_effect = function(self) + local pos = self.object:get_pos() + --local yaw = self.object:get_yaw() + local collisionbox = self.object:get_properties().collisionbox + + local min, max + + if collisionbox then + min = {x=collisionbox[1], y=collisionbox[2], z=collisionbox[3]} + max = {x=collisionbox[4], y=collisionbox[5], z=collisionbox[6]} + end + + minetest_add_particlespawner({ + amount = 10, + time = 0.0001, + minpos = vector.add(pos, min), + maxpos = vector.add(pos, max), + minvel = vector.new(-1,1,-1), + maxvel = vector.new(1,3,1), + minexptime = 0.7, + maxexptime = 1, + minsize = 1, + maxsize = 2, + collisiondetection = false, + vertical = false, + texture = "heart.png^[colorize:gray:255", + }) +end + +--hearts when tamed +mobs.tamed_effect = function(self) + local pos = self.object:get_pos() + --local yaw = self.object:get_yaw() + local collisionbox = self.object:get_properties().collisionbox + + local min, max + + if collisionbox then + min = {x=collisionbox[1], y=collisionbox[2], z=collisionbox[3]} + max = {x=collisionbox[4], y=collisionbox[5], z=collisionbox[6]} + end + + minetest_add_particlespawner({ + amount = 30, + time = 0.0001, + minpos = vector.add(pos, min), + maxpos = vector.add(pos, max), + minvel = vector.new(-1,1,-1), + maxvel = vector.new(1,3,1), + minexptime = 0.7, + maxexptime = 1, + minsize = 1, + maxsize = 2, + collisiondetection = false, + vertical = false, + texture = "heart.png", + }) +end + +--hearts when breeding +mobs.breeding_effect = function(self) + local pos = self.object:get_pos() + --local yaw = self.object:get_yaw() + local collisionbox = self.object:get_properties().collisionbox + + local min, max + + if collisionbox then + min = {x=collisionbox[1], y=collisionbox[2], z=collisionbox[3]} + max = {x=collisionbox[4], y=collisionbox[5], z=collisionbox[6]} + end + + minetest_add_particlespawner({ + amount = 2, + time = 0.0001, + minpos = vector.add(pos, min), + maxpos = vector.add(pos, max), + minvel = vector.new(-1,1,-1), + maxvel = vector.new(1,3,1), + minexptime = 0.7, + maxexptime = 1, + minsize = 1, + maxsize = 2, + collisiondetection = false, + vertical = false, + texture = "heart.png", + }) +end \ No newline at end of file diff --git a/mods/ENTITIES/mcl_mobs/api/mob_functions/movement.lua b/mods/ENTITIES/mcl_mobs/api/mob_functions/movement.lua new file mode 100644 index 000000000..d9698a0a7 --- /dev/null +++ b/mods/ENTITIES/mcl_mobs/api/mob_functions/movement.lua @@ -0,0 +1,390 @@ +-- localize math functions +local math = math +local HALF_PI = math.pi / 2 +local DOUBLE_PI = math.pi * 2 + +-- localize vector functions +local vector = vector + +local minetest_yaw_to_dir = minetest.yaw_to_dir +local minetest_dir_to_yaw = minetest.dir_to_yaw + +local DEFAULT_JUMP_HEIGHT = 5 +local DEFAULT_FLOAT_SPEED = 4 +local DEFAULT_CLIMB_SPEED = 3 + +mobs.stick_in_cobweb = function(self) + local current_velocity = self.object:get_velocity() + + local goal_velocity = vector.multiply(vector.normalize(current_velocity), 0.4) + + goal_velocity.y = -0.5 + + local new_velocity_addition = vector.subtract(goal_velocity,current_velocity) + + --smooths out mobs a bit + if vector.length(new_velocity_addition) >= 0.0001 then + self.object:add_velocity(new_velocity_addition) + end +end + +--this is a generic float function +mobs.float = function(self) + + local acceleration = self.object:get_acceleration() + + if not acceleration then + return + end + + if acceleration.y ~= 0 then + self.object:set_acceleration({x=0, y=0, z=0}) + end + + local current_velocity = self.object:get_velocity() + + local goal_velocity = { + x = 0, + y = DEFAULT_FLOAT_SPEED, + z = 0, + } + + local new_velocity_addition = vector.subtract(goal_velocity, current_velocity) + + new_velocity_addition.x = 0 + new_velocity_addition.z = 0 + + --smooths out mobs a bit + if vector.length(new_velocity_addition) >= 0.0001 then + self.object:add_velocity(new_velocity_addition) + end +end + +--this is a generic climb function +mobs.climb = function(self) + + local current_velocity = self.object:get_velocity() + + local goal_velocity = { + x = 0, + y = DEFAULT_CLIMB_SPEED, + z = 0, + } + + local new_velocity_addition = vector.subtract(goal_velocity,current_velocity) + + new_velocity_addition.x = 0 + new_velocity_addition.z = 0 + + --smooths out mobs a bit + if vector.length(new_velocity_addition) >= 0.0001 then + self.object:add_velocity(new_velocity_addition) + end +end + + + +--[[ + _ _ +| | | | +| | __ _ _ __ __| | +| | / _` | '_ \ / _` | +| |___| (_| | | | | (_| | +\_____/\__,_|_| |_|\__,_| +]] + + +-- move mob in facing direction +--this has been modified to be internal +--internal = lua (self.yaw) +--engine = c++ (self.object:get_yaw()) +mobs.set_velocity = function(self, v) + + local yaw = (self.yaw or 0) + + local current_velocity = self.object:get_velocity() + + local goal_velocity = { + x = (math.sin(yaw) * -v), + y = 0, + z = (math.cos(yaw) * v), + } + + + local new_velocity_addition = vector.subtract(goal_velocity,current_velocity) + + if vector.length(new_velocity_addition) > vector.length(goal_velocity) then + vector.multiply(new_velocity_addition, (vector.length(goal_velocity) / vector.length(new_velocity_addition))) + end + + new_velocity_addition.y = 0 + + --smooths out mobs a bit + if vector.length(new_velocity_addition) >= 0.0001 then + self.object:add_velocity(new_velocity_addition) + end +end + + + +-- calculate mob velocity +mobs.get_velocity = function(self) + + local v = self.object:get_velocity() + + v.y = 0 + + if v then + return vector.length(v) + end + + return 0 +end + +--make mobs jump +mobs.jump = function(self, velocity) + + if self.object:get_velocity().y ~= 0 or not self.old_velocity or (self.old_velocity and self.old_velocity.y > 0) then + return + end + + --fallback velocity to allow modularity + velocity = velocity or DEFAULT_JUMP_HEIGHT + + self.object:add_velocity(vector.new(0,velocity,0)) +end + +--make mobs fall slowly +mobs.mob_fall_slow = function(self) + + local current_velocity = self.object:get_velocity() + + local goal_velocity = { + x = 0, + y = -2, + z = 0, + } + + + local new_velocity_addition = vector.subtract(goal_velocity,current_velocity) + + new_velocity_addition.x = 0 + new_velocity_addition.z = 0 + + if vector.length(new_velocity_addition) > vector.length(goal_velocity) then + vector.multiply(new_velocity_addition, (vector.length(goal_velocity) / vector.length(new_velocity_addition))) + end + + new_velocity_addition.x = 0 + new_velocity_addition.z = 0 + + --smooths out mobs a bit + if vector.length(new_velocity_addition) >= 0.0001 then + self.object:add_velocity(new_velocity_addition) + end + +end + + +--[[ + _____ _ +/ ___| (_) +\ `--.__ ___ _ __ ___ + `--. \ \ /\ / / | '_ ` _ \ +/\__/ /\ V V /| | | | | | | +\____/ \_/\_/ |_|_| |_| |_| +]]-- + + + + +--make mobs flop +mobs.flop = function(self, velocity) + + if self.object:get_velocity().y ~= 0 or not self.old_velocity or (self.old_velocity and self.old_velocity.y > 0) then + return false + end + + mobs.set_velocity(self, 0) + + --fallback velocity to allow modularity + velocity = velocity or DEFAULT_JUMP_HEIGHT + + --create a random direction (2d yaw) + local dir = DOUBLE_PI * math.random() + + --create a random force value + local force = math.random(0,3) + math.random() + + --convert the yaw to a direction vector then multiply it times the force + local final_additional_force = vector.multiply(minetest_yaw_to_dir(dir), force) + + --place in the "flop" velocity to make the mob flop + final_additional_force.y = velocity + + self.object:add_velocity(final_additional_force) + + return true +end + + + +-- move mob in facing direction +--this has been modified to be internal +--internal = lua (self.yaw) +--engine = c++ (self.object:get_yaw()) +mobs.set_swim_velocity = function(self, v) + + local yaw = (self.yaw or 0) + local pitch = (self.pitch or 0) + + if v == 0 then + pitch = 0 + end + + local current_velocity = self.object:get_velocity() + + local goal_velocity = { + x = (math.sin(yaw) * -v), + y = pitch, + z = (math.cos(yaw) * v), + } + + + local new_velocity_addition = vector.subtract(goal_velocity,current_velocity) + + if vector.length(new_velocity_addition) > vector.length(goal_velocity) then + vector.multiply(new_velocity_addition, (vector.length(goal_velocity) / vector.length(new_velocity_addition))) + end + + --smooths out mobs a bit + if vector.length(new_velocity_addition) >= 0.0001 then + self.object:add_velocity(new_velocity_addition) + end +end + +--[[ +______ _ +| ___| | +| |_ | |_ _ +| _| | | | | | +| | | | |_| | +\_| |_|\__, | + __/ | + |___/ +]]-- + +-- move mob in facing direction +--this has been modified to be internal +--internal = lua (self.yaw) +--engine = c++ (self.object:get_yaw()) +mobs.set_fly_velocity = function(self, v) + + local yaw = (self.yaw or 0) + local pitch = (self.pitch or 0) + + if v == 0 then + pitch = 0 + end + + local current_velocity = self.object:get_velocity() + + local goal_velocity = { + x = (math.sin(yaw) * -v), + y = pitch, + z = (math.cos(yaw) * v), + } + + + local new_velocity_addition = vector.subtract(goal_velocity,current_velocity) + + if vector.length(new_velocity_addition) > vector.length(goal_velocity) then + vector.multiply(new_velocity_addition, (vector.length(goal_velocity) / vector.length(new_velocity_addition))) + end + + --smooths out mobs a bit + if vector.length(new_velocity_addition) >= 0.0001 then + self.object:add_velocity(new_velocity_addition) + end +end + +--a quick and simple pitch calculation between two vector positions +mobs.calculate_pitch = function(pos1, pos2) + + if pos1 == nil or pos2 == nil then + return false + end + + return minetest_dir_to_yaw(vector.new(vector.distance(vector.new(pos1.x,0,pos1.z),vector.new(pos2.x,0,pos2.z)),0,pos1.y - pos2.y)) + HALF_PI +end + +--make mobs fly up or down based on their y difference +mobs.set_pitch_while_attacking = function(self) + local pos1 = self.object:get_pos() + local pos2 = self.attacking:get_pos() + + local pitch = mobs.calculate_pitch(pos2,pos1) + + self.pitch = pitch +end + + + +--[[ + ___ + |_ | + | |_ _ _ __ ___ _ __ + | | | | | '_ ` _ \| '_ \ +/\__/ / |_| | | | | | | |_) | +\____/ \__,_|_| |_| |_| .__/ + | | + |_| +]]-- + +--special mob jump movement +mobs.jump_move = function(self, velocity) + + if self.object:get_velocity().y ~= 0 or not self.old_velocity or (self.old_velocity and self.old_velocity.y > 0) then + return + end + + --make the mob stick for a split second + mobs.set_velocity(self,0) + + --fallback velocity to allow modularity + local jump_height = DEFAULT_JUMP_HEIGHT + + local yaw = (self.yaw or 0) + + local current_velocity = self.object:get_velocity() + + local goal_velocity = { + x = (math.sin(yaw) * -velocity), + y = jump_height, + z = (math.cos(yaw) * velocity), + } + + + local new_velocity_addition = vector.subtract(goal_velocity,current_velocity) + + if vector.length(new_velocity_addition) > vector.length(goal_velocity) then + vector.multiply(new_velocity_addition, (vector.length(goal_velocity) / vector.length(new_velocity_addition))) + end + + --smooths out mobs a bit + if vector.length(new_velocity_addition) >= 0.0001 then + self.object:add_velocity(new_velocity_addition) + end +end + +--make it so mobs do not glitch out and freak out +--when moving around over nodes +mobs.swap_auto_step_height_adjust = function(self) + local y_vel = self.object:get_velocity().y + + if y_vel == 0 and self.stepheight ~= self.stepheight_backup then + self.stepheight = self.stepheight_backup + elseif y_vel ~= 0 and self.stepheight ~= 0 then + self.stepheight = 0 + end +end diff --git a/mods/ENTITIES/mcl_mobs/api/mob_functions/projectile_handling.lua b/mods/ENTITIES/mcl_mobs/api/mob_functions/projectile_handling.lua new file mode 100644 index 000000000..a4b4c075e --- /dev/null +++ b/mods/ENTITIES/mcl_mobs/api/mob_functions/projectile_handling.lua @@ -0,0 +1,43 @@ +local GRAVITY = minetest.settings:get("movement_gravity")-- + 9.81 + +mobs.shoot_projectile_handling = function(arrow_item, pos, dir, yaw, shooter, power, damage, is_critical, bow_stack, collectable, gravity) + local obj = minetest.add_entity({x=pos.x,y=pos.y,z=pos.z}, arrow_item.."_entity") + if power == nil then + power = 19 + end + if damage == nil then + damage = 3 + end + + gravity = gravity or -GRAVITY + + local knockback + if bow_stack then + local enchantments = mcl_enchanting.get_enchantments(bow_stack) + if enchantments.power then + damage = damage + (enchantments.power + 1) / 4 + end + if enchantments.punch then + knockback = enchantments.punch * 3 + end + if enchantments.flame then + mcl_burning.set_on_fire(obj, math.huge) + end + end + obj:set_velocity({x=dir.x*power, y=dir.y*power, z=dir.z*power}) + obj:set_acceleration({x=0, y=gravity, z=0}) + obj:set_yaw(yaw-math.pi/2) + local le = obj:get_luaentity() + le._shooter = shooter + le._damage = damage + le._is_critical = is_critical + le._startpos = pos + le._knockback = knockback + le._collectable = collectable + + --play custom shoot sound + if shooter and shooter.shoot_sound then + minetest.sound_play(shooter.shoot_sound, {pos=pos, max_hear_distance=16}, true) + end + return obj +end \ No newline at end of file diff --git a/mods/ENTITIES/mcl_mobs/api/mob_functions/set_up.lua b/mods/ENTITIES/mcl_mobs/api/mob_functions/set_up.lua new file mode 100644 index 000000000..65ba764f6 --- /dev/null +++ b/mods/ENTITIES/mcl_mobs/api/mob_functions/set_up.lua @@ -0,0 +1,224 @@ +local math_random = math.random + +local minetest_settings = minetest.settings + +-- CMI support check +local use_cmi = minetest.global_exists("cmi") + +-- get entity staticdata +mobs.mob_staticdata = function(self) + --despawn mechanism + --don't despawned tamed or bred mobs + if not self.tamed and not self.bred then + if not mobs.check_for_player_within_area(self, 64) then + --print("removing SERIALIZED!") + self.object:remove() + return + end + end + + self.remove_ok = true + self.attack = nil + self.following = nil + + if use_cmi then + self.serialized_cmi_components = cmi.serialize_components(self._cmi_components) + end + + local tmp = {} + + for _,stat in pairs(self) do + + local t = type(stat) + + if t ~= "function" + and t ~= "nil" + and t ~= "userdata" + and _ ~= "_cmi_components" then + tmp[_] = self[_] + end + end + + return minetest.serialize(tmp) +end + + +-- activate mob and reload settings +mobs.mob_activate = function(self, staticdata, def, dtime) + + -- remove monsters in peaceful mode + if self.type == "monster" and minetest_settings:get_bool("only_peaceful_mobs", false) then + mcl_burning.extinguish(self.object) + self.object:remove() + return + end + + -- load entity variables + local tmp = minetest.deserialize(staticdata) + + if tmp then + for _,stat in pairs(tmp) do + self[_] = stat + end + end + + --set up wandering + if not self.wandering then + self.wandering = true + end + + --clear animation + self.current_animation = nil + + -- select random texture, set model and size + if not self.base_texture then + + -- compatiblity with old simple mobs textures + if type(def.textures[1]) == "string" then + def.textures = {def.textures} + end + + self.base_texture = def.textures[math_random(1, #def.textures)] + self.base_mesh = def.mesh + self.base_size = self.visual_size + self.base_colbox = self.collisionbox + self.base_selbox = self.selectionbox + end + + -- for current mobs that dont have this set + if not self.base_selbox then + self.base_selbox = self.selectionbox or self.base_colbox + end + + -- set texture, model and size + local textures = self.base_texture + local mesh = self.base_mesh + local vis_size = self.base_size + local colbox = self.base_colbox + local selbox = self.base_selbox + + -- specific texture if gotten + if self.gotten == true + and def.gotten_texture then + textures = def.gotten_texture + end + + -- specific mesh if gotten + if self.gotten == true + and def.gotten_mesh then + mesh = def.gotten_mesh + end + + -- set baby mobs to half size + if self.baby == true then + + vis_size = { + x = self.base_size.x * self.baby_size, + y = self.base_size.y * self.baby_size, + } + + if def.child_texture then + textures = def.child_texture[1] + end + + colbox = { + self.base_colbox[1] * self.baby_size, + self.base_colbox[2] * self.baby_size, + self.base_colbox[3] * self.baby_size, + self.base_colbox[4] * self.baby_size, + self.base_colbox[5] * self.baby_size, + self.base_colbox[6] * self.baby_size + } + selbox = { + self.base_selbox[1] * self.baby_size, + self.base_selbox[2] * self.baby_size, + self.base_selbox[3] * self.baby_size, + self.base_selbox[4] * self.baby_size, + self.base_selbox[5] * self.baby_size, + self.base_selbox[6] * self.baby_size + } + end + + --stop mobs from reviving + if not self.dead and not self.health then + self.health = math_random (self.hp_min, self.hp_max) + end + + if not self.random_sound_timer then + self.random_sound_timer = math_random(self.random_sound_timer_min,self.random_sound_timer_max) + end + + if self.breath == nil then + self.breath = self.breath_max + end + + -- pathfinding init + self.path = {} + self.path.way = {} -- path to follow, table of positions + self.path.lastpos = {x = 0, y = 0, z = 0} + self.path.stuck = false + self.path.following = false -- currently following path? + self.path.stuck_timer = 0 -- if stuck for too long search for path + + -- Armor groups + -- immortal=1 because we use custom health + -- handling (using "health" property) + local armor + if type(self.armor) == "table" then + armor = table.copy(self.armor) + armor.immortal = 1 + else + armor = {immortal=1, fleshy = self.armor} + end + self.object:set_armor_groups(armor) + self.old_y = self.object:get_pos().y + self.old_health = self.health + self.sounds.distance = self.sounds.distance or 10 + self.textures = textures + self.mesh = mesh + self.collisionbox = colbox + self.selectionbox = selbox + self.visual_size = vis_size + self.standing_in = "ignore" + self.standing_on = "ignore" + self.jump_sound_cooloff = 0 -- used to prevent jump sound from being played too often in short time + self.opinion_sound_cooloff = 0 -- used to prevent sound spam of particular sound types + + self.texture_mods = {} + + self.v_start = false + self.timer = 0 + self.blinktimer = 0 + self.blinkstatus = false + + + --continue mob effect on server restart + if self.dead or self.health <= 0 then + self.object:set_texture_mod("^[colorize:red:120") + else + self.object:set_texture_mod("") + end + + -- set anything changed above + self.object:set_properties(self) + + --update_tag(self) + --mobs.set_animation(self, "stand") + + -- run on_spawn function if found + if self.on_spawn and not self.on_spawn_run then + if self.on_spawn(self) then + self.on_spawn_run = true -- if true, set flag to run once only + end + end + + -- run after_activate + if def.after_activate then + def.after_activate(self, staticdata, def, dtime) + end + + if use_cmi then + self._cmi_components = cmi.activate_components(self.serialized_cmi_components) + cmi.notify_activate(self.object, dtime) + end +end \ No newline at end of file diff --git a/mods/ENTITIES/mcl_mobs/api/mob_functions/sound_handling.lua b/mods/ENTITIES/mcl_mobs/api/mob_functions/sound_handling.lua new file mode 100644 index 000000000..98d2644e8 --- /dev/null +++ b/mods/ENTITIES/mcl_mobs/api/mob_functions/sound_handling.lua @@ -0,0 +1,59 @@ +local math_random = math.random + + +--generic call for sound handler for mobs (data access) +mobs.play_sound = function(self,sound) + local soundinfo = self.sounds + + if not soundinfo then + return + end + + local play_sound = soundinfo[sound] + + if not play_sound then + return + end + + mobs.play_sound_handler(self, play_sound) +end + + +--generic sound handler for mobs +mobs.play_sound_handler = function(self, sound) + local pitch = (100 + math_random(-15,15) + math_random()) / 100 + local distance = self.sounds.distance or 16 + + minetest.sound_play(sound, { + object = self.object, + gain = 1.0, + max_hear_distance = distance, + pitch = pitch, + }, true) +end + + +--random sound timing handler +mobs.random_sound_handling = function(self,dtime) + + self.random_sound_timer = self.random_sound_timer - dtime + + --play sound and reset timer + if self.random_sound_timer <= 0 then + mobs.play_sound(self,"random") + self.random_sound_timer = math_random(self.random_sound_timer_min,self.random_sound_timer_max) + end +end + +--used for playing a non-mob internal sound at random pitches +mobs.play_sound_specific = function(self,soundname) + local pitch = (100 + math_random(-15,15) + math_random()) / 100 + local distance = self.sounds.distance or 16 + + minetest.sound_play(soundname, { + object = self.object, + gain = 1.0, + max_hear_distance = distance, + pitch = pitch, + }, true) +end \ No newline at end of file diff --git a/mods/ENTITIES/mcl_mobs/mount.lua b/mods/ENTITIES/mcl_mobs/api/mount.lua similarity index 86% rename from mods/ENTITIES/mcl_mobs/mount.lua rename to mods/ENTITIES/mcl_mobs/api/mount.lua index 8c4a6aa55..0ed54a46e 100644 --- a/mods/ENTITIES/mcl_mobs/mount.lua +++ b/mods/ENTITIES/mcl_mobs/api/mount.lua @@ -1,8 +1,11 @@ -- lib_mount by Blert2112 (edited by TenPlus1) -local enable_crash = false -local crash_threshold = 6.5 -- ignored if enable_crash=false +--local enable_crash = false +--local crash_threshold = 6.5 -- ignored if enable_crash=false + +local math = math +local vector = vector ------------------------------------------------------------------------------ @@ -10,7 +13,7 @@ local crash_threshold = 6.5 -- ignored if enable_crash=false -- Helper functions -- -local node_ok = function(pos, fallback) +--[[local function node_ok(pos, fallback) fallback = fallback or mobs.fallback_node @@ -21,10 +24,10 @@ local node_ok = function(pos, fallback) end return {name = fallback} -end +end]] -local function node_is(pos) +--[[local function node_is(pos) local node = node_ok(pos) @@ -45,7 +48,7 @@ local function node_is(pos) end return "other" -end +end]] local function get_sign(i) @@ -60,13 +63,11 @@ local function get_sign(i) end -local function get_velocity(v, yaw, y) - +--[[local function get_velocity(v, yaw, y) local x = -math.sin(yaw) * v local z = math.cos(yaw) * v - return {x = x, y = y, z = z} -end +end]] local function get_v(v) @@ -154,7 +155,7 @@ function mobs.attach(entity, player) minetest.after(0.2, function(name) local player = minetest.get_player_by_name(name) if player then - mcl_player.player_set_animation(player, "sit" , 30) + mcl_player.player_set_animation(player, "sit_mount" , 30) end end, player:get_player_name()) @@ -168,28 +169,32 @@ function mobs.detach(player, offset) mcl_player.player_set_animation(player, "stand" , 30) - local pos = player:get_pos() + --local pos = player:get_pos() - pos = {x = pos.x + offset.x, y = pos.y + 0.2 + offset.y, z = pos.z + offset.z} + --pos = {x = pos.x + offset.x, y = pos.y + 0.2 + offset.y, z = pos.z + offset.z} + player:add_velocity(vector.new(math.random(-6,6), math.random(5,8), math.random(-6,6))) --throw the rider off + + --[[ minetest.after(0.1, function(name, pos) local player = minetest.get_player_by_name(name) if player then player:set_pos(pos) end end, player:get_player_name(), pos) + ]]-- end function mobs.drive(entity, moving_anim, stand_anim, can_fly, dtime) - local rot_view = 0 + --local rot_view = 0 - if entity.player_rotation.y == 90 then - rot_view = math.pi/2 - end + --if entity.player_rotation.y == 90 then + -- rot_view = math.pi/2 + --end - local acce_y = 0 + --local acce_y = 0 local velo = entity.object:get_velocity() entity.v = get_v(velo) * get_sign(entity.v) @@ -202,21 +207,30 @@ function mobs.drive(entity, moving_anim, stand_anim, can_fly, dtime) -- move forwards if ctrl.up then - entity.v = entity.v + entity.accel / 10 + mobs.set_velocity(entity, entity.run_velocity) + + mobs.set_mob_animation(entity, moving_anim) -- move backwards elseif ctrl.down then - if entity.max_speed_reverse == 0 and entity.v == 0 then - return - end + mobs.set_velocity(entity, -entity.run_velocity) - entity.v = entity.v - entity.accel / 10 + mobs.set_mob_animation(entity, moving_anim) + + --halt + else + + mobs.set_velocity(entity, 0) + + mobs.set_mob_animation(entity, stand_anim) end - -- fix mob rotation + -- mob rotation entity.object:set_yaw(entity.driver:get_look_horizontal() - entity.rotate) + entity.yaw = entity.driver:get_look_horizontal() - entity.rotate + --[[ if can_fly then -- fly up @@ -240,32 +254,21 @@ function mobs.drive(entity, moving_anim, stand_anim, can_fly, dtime) end else + ]]-- - -- jump - if ctrl.jump then + -- jump + if ctrl.jump then - if velo.y == 0 then - velo.y = velo.y + entity.jump_height - acce_y = acce_y + (acce_y * 3) + 1 - end - end - - end - end - - -- if not moving then set animation and return - if entity.v == 0 and velo.x == 0 and velo.y == 0 and velo.z == 0 then - - if stand_anim then - mobs:set_animation(entity, stand_anim) + mobs.jump(entity) end - return + --end end + --[[ -- set moving animation if moving_anim then - mobs:set_animation(entity, moving_anim) + mobs:set_mob_animation(entity, moving_anim) end -- Stop! @@ -379,13 +382,17 @@ function mobs.drive(entity, moving_anim, stand_anim, can_fly, dtime) end entity.v2 = v + ]]-- end -- directional flying routine by D00Med (edited by TenPlus1) function mobs.fly(entity, dtime, speed, shoots, arrow, moving_anim, stand_anim) - + if true then + print("succ") + return + end local ctrl = entity.driver:get_player_control() local velo = entity.object:get_velocity() local dir = entity.driver:get_look_dir() @@ -436,9 +443,9 @@ function mobs.fly(entity, dtime, speed, shoots, arrow, moving_anim, stand_anim) -- change animation if stopped if velo.x == 0 and velo.y == 0 and velo.z == 0 then - mobs:set_animation(entity, stand_anim) + mobs:set_mob_animation(entity, stand_anim) else -- moving animation - mobs:set_animation(entity, moving_anim) + mobs:set_mob_animation(entity, moving_anim) end end diff --git a/mods/ENTITIES/mcl_mobs/api/spawning.lua b/mods/ENTITIES/mcl_mobs/api/spawning.lua new file mode 100644 index 000000000..bf07ca94d --- /dev/null +++ b/mods/ENTITIES/mcl_mobs/api/spawning.lua @@ -0,0 +1,709 @@ +--lua locals +local get_node = minetest.get_node +local get_item_group = minetest.get_item_group +local get_node_light = minetest.get_node_light +local find_nodes_in_area_under_air = minetest.find_nodes_in_area_under_air +local get_biome_name = minetest.get_biome_name +local get_objects_inside_radius = minetest.get_objects_inside_radius +local get_connected_players = minetest.get_connected_players + + +local math_random = math.random +local math_floor = math.floor +--local max = math.max + +--local vector_distance = vector.distance +local vector_new = vector.new +local vector_floor = vector.floor + +local table_copy = table.copy +local table_remove = table.remove + +local pairs = pairs + +-- range for mob count +local aoc_range = 48 + +--do mobs spawn? +local mobs_spawn = minetest.settings:get_bool("mobs_spawn", true) ~= false + +--[[ + +THIS IS THE BIG LIST OF ALL BIOMES - used for programming/updating mobs + +underground: +"FlowerForest_underground", +"JungleEdge_underground",local spawning_position = spawning_position_list[math.random(1,#spawning_position_list)] +"ColdTaiga_underground", +"IcePlains_underground", +"IcePlainsSpikes_underground", +"MegaTaiga_underground", +"Taiga_underground", +"ExtremeHills+_underground", +"JungleM_underground", +"ExtremeHillsM_underground", +"JungleEdgeM_underground", + +ocean: +"RoofedForest_ocean", +"JungleEdgeM_ocean", +"BirchForestM_ocean", +"BirchForest_ocean", +"IcePlains_deep_ocean", +"Jungle_deep_ocean", +"Savanna_ocean", +"MesaPlateauF_ocean", +"ExtremeHillsM_deep_ocean", +"Savanna_deep_ocean", +"SunflowerPlains_ocean", +"Swampland_deep_ocean", +"Swampland_ocean", +"MegaSpruceTaiga_deep_ocean", +"ExtremeHillsM_ocean", +"JungleEdgeM_deep_ocean", +"SunflowerPlains_deep_ocean", +"BirchForest_deep_ocean", +"IcePlainsSpikes_ocean", +"Mesa_ocean", +"StoneBeach_ocean", +"Plains_deep_ocean", +"JungleEdge_deep_ocean", +"SavannaM_deep_ocean", +"Desert_deep_ocean", +"Mesa_deep_ocean", +"ColdTaiga_deep_ocean", +"Plains_ocean", +"MesaPlateauFM_ocean", +"Forest_deep_ocean", +"JungleM_deep_ocean", +"FlowerForest_deep_ocean", +"MushroomIsland_ocean", +"MegaTaiga_ocean", +"StoneBeach_deep_ocean", +"IcePlainsSpikes_deep_ocean", +"ColdTaiga_ocean", +"SavannaM_ocean", +"MesaPlateauF_deep_ocean", +"MesaBryce_deep_ocean", +"ExtremeHills+_deep_ocean", +"ExtremeHills_ocean", +"MushroomIsland_deep_ocean", +"Forest_ocean", +"MegaTaiga_deep_ocean", +"JungleEdge_ocean", +"MesaBryce_ocean", +"MegaSpruceTaiga_ocean", +"ExtremeHills+_ocean", +"Jungle_ocean", +"RoofedForest_deep_ocean", +"IcePlains_ocean", +"FlowerForest_ocean", +"ExtremeHills_deep_ocean", +"MesaPlateauFM_deep_ocean", +"Desert_ocean", +"Taiga_ocean", +"BirchForestM_deep_ocean", +"Taiga_deep_ocean", +"JungleM_ocean", + +water or beach? +"MesaPlateauFM_sandlevel", +"MesaPlateauF_sandlevel", +"MesaBryce_sandlevel", +"Mesa_sandlevel", + +beach: +"FlowerForest_beach", +"Forest_beach", +"StoneBeach", +"ColdTaiga_beach_water", +"Taiga_beach", +"Savanna_beach", +"Plains_beach", +"ExtremeHills_beach", +"ColdTaiga_beach", +"Swampland_shore", +"MushroomIslandShore", +"JungleM_shore", +"Jungle_shore", + +dimension biome: +"Nether", +"End", + +Overworld regular: +"Mesa", +"FlowerForest", +"Swampland", +"Taiga", +"ExtremeHills", +"Jungle", +"Savanna", +"BirchForest", +"MegaSpruceTaiga", +"MegaTaiga", +"ExtremeHills+", +"Forest", +"Plains", +"Desert", +"ColdTaiga", +"MushroomIsland", +"IcePlainsSpikes", +"SunflowerPlains", +"IcePlains", +"RoofedForest", +"ExtremeHills+_snowtop", +"MesaPlateauFM_grasstop", +"JungleEdgeM", +"ExtremeHillsM", +"JungleM", +"BirchForestM", +"MesaPlateauF", +"MesaPlateauFM", +"MesaPlateauF_grasstop", +"MesaBryce", +"JungleEdge", +"SavannaM", +]]-- + + + +-- count how many mobs are in an area +local function count_mobs(pos) + local num = 0 + for _,object in pairs(get_objects_inside_radius(pos, aoc_range)) do + if object and object:get_luaentity() and object:get_luaentity()._cmi_is_mob then + num = num + 1 + end + end + return num +end + + +-- global functions + +function mobs:spawn_abm_check(pos, node, name) + -- global function to add additional spawn checks + -- return true to stop spawning mob +end + + +--[[ + Custom elements changed: + +name: +the mobs name + +dimension: +"overworld" +"nether" +"end" + +types of spawning: +"water" +"ground" +"lava" + +biomes: tells the spawner to allow certain mobs to spawn in certain biomes +{"this", "that", "grasslands", "whatever"} + + +what is aoc??? objects in area + +WARNING: BIOME INTEGRATION NEEDED -> How to get biome through lua?? +]]-- + + +--this is where all of the spawning information is kept +local spawn_dictionary = {} + +function mobs:spawn_specific(name, dimension, type_of_spawning, biomes, min_light, max_light, interval, chance, aoc, min_height, max_height, day_toggle, on_spawn) + + --print(dump(biomes)) + + -- Do mobs spawn at all? + if not mobs_spawn then + return + end + + -- chance/spawn number override in minetest.conf for registered mob + local numbers = minetest.settings:get(name) + + if numbers then + numbers = numbers:split(",") + chance = tonumber(numbers[1]) or chance + aoc = tonumber(numbers[2]) or aoc + + if chance == 0 then + minetest.log("warning", string.format("[mobs] %s has spawning disabled", name)) + return + end + + minetest.log("action", + string.format("[mobs] Chance setting for %s changed to %s (total: %s)", name, chance, aoc)) + end + + --[[ + local function spawn_action(pos, node, active_object_count, active_object_count_wider, name) + + local orig_pos = table.copy(pos) + -- is mob actually registered? + if not mobs.spawning_mobs[name] + or not minetest.registered_entities[name] then + minetest.log("warning", "Mob spawn of "..name.." failed, unknown entity or mob is not registered for spawning!") + return + end + + -- additional custom checks for spawning mob + if mobs:spawn_abm_check(pos, node, name) == true then + minetest.log("info", "Mob spawn of "..name.." at "..minetest.pos_to_string(pos).." failed, ABM check rejected!") + return + end + + -- count nearby mobs in same spawn class + local entdef = minetest.registered_entities[name] + local spawn_class = entdef and entdef.spawn_class + if not spawn_class then + if entdef.type == "monster" then + spawn_class = "hostile" + else + spawn_class = "passive" + end + end + local in_class_cap = count_mobs(pos, "!"..spawn_class) < MOB_CAP[spawn_class] + -- do not spawn if too many of same mob in area + if active_object_count_wider >= max_per_block -- large-range mob cap + or (not in_class_cap) -- spawn class mob cap + or count_mobs(pos, name) >= aoc then -- per-mob mob cap + -- too many entities + minetest.log("info", "Mob spawn of "..name.." at "..minetest.pos_to_string(pos).." failed, too crowded!") + return + end + + -- if toggle set to nil then ignore day/night check + if day_toggle then + + local tod = (minetest.get_timeofday() or 0) * 24000 + + if tod > 4500 and tod < 19500 then + -- daylight, but mob wants night + if day_toggle == false then + -- mob needs night + minetest.log("info", "Mob spawn of "..name.." at "..minetest.pos_to_string(pos).." failed, mob needs light!") + return + end + else + -- night time but mob wants day + if day_toggle == true then + -- mob needs day + minetest.log("info", "Mob spawn of "..name.." at "..minetest.pos_to_string(pos).." failed, mob needs daylight!") + return + end + end + end + + -- spawn above node + pos.y = pos.y + 1 + + -- only spawn away from player + local objs = minetest.get_objects_inside_radius(pos, 24) + + for n = 1, #objs do + + if objs[n]:is_player() then + -- player too close + minetest.log("info", "Mob spawn of "..name.." at "..minetest.pos_to_string(pos).." failed, player too close!") + return + end + end + + -- mobs cannot spawn in protected areas when enabled + if not spawn_protected + and minetest.is_protected(pos, "") then + minetest.log("info", "Mob spawn of "..name.." at "..minetest.pos_to_string(pos).." failed, position is protected!") + return + end + + -- are we spawning within height limits? + if pos.y > max_height + or pos.y < min_height then + minetest.log("info", "Mob spawn of "..name.." at "..minetest.pos_to_string(pos).." failed, out of height limit!") + return + end + + -- are light levels ok? + local light = minetest.get_node_light(pos) + if not light + or light > max_light + or light < min_light then + minetest.log("info", "Mob spawn of "..name.." at "..minetest.pos_to_string(pos).." failed, bad light!") + return + end + + -- do we have enough space to spawn mob? + local ent = minetest.registered_entities[name] + local width_x = max(1, math.ceil(ent.collisionbox[4] - ent.collisionbox[1])) + local min_x, max_x + if width_x % 2 == 0 then + max_x = math.floor(width_x/2) + min_x = -(max_x-1) + else + max_x = math.floor(width_x/2) + min_x = -max_x + end + + local width_z = max(1, math.ceil(ent.collisionbox[6] - ent.collisionbox[3])) + local min_z, max_z + if width_z % 2 == 0 then + max_z = math.floor(width_z/2) + min_z = -(max_z-1) + else + max_z = math.floor(width_z/2) + min_z = -max_z + end + + local max_y = max(0, math.ceil(ent.collisionbox[5] - ent.collisionbox[2]) - 1) + + for y = 0, max_y do + for x = min_x, max_x do + for z = min_z, max_z do + local pos2 = {x = pos.x+x, y = pos.y+y, z = pos.z+z} + if minetest.registered_nodes[node_ok(pos2).name].walkable == true then + -- inside block + minetest.log("info", "Mob spawn of "..name.." at "..minetest.pos_to_string(pos).." failed, too little space!") + if ent.spawn_small_alternative and (not minetest.registered_nodes[node_ok(pos).name].walkable) then + minetest.log("info", "Trying to spawn smaller alternative mob: "..ent.spawn_small_alternative) + spawn_action(orig_pos, node, active_object_count, active_object_count_wider, ent.spawn_small_alternative) + end + return + end + end + end + end + + -- tweak X/Y/Z spawn pos + if width_x % 2 == 0 then + pos.x = pos.x + 0.5 + end + if width_z % 2 == 0 then + pos.z = pos.z + 0.5 + end + pos.y = pos.y - 0.5 + + local mob = minetest.add_entity(pos, name) + minetest.log("action", "Mob spawned: "..name.." at "..minetest.pos_to_string(pos)) + + if on_spawn then + + local ent = mob:get_luaentity() + + on_spawn(ent, pos) + end + end + + local function spawn_abm_action(pos, node, active_object_count, active_object_count_wider) + spawn_action(pos, node, active_object_count, active_object_count_wider, name) + end + ]]-- + + local entdef = minetest.registered_entities[name] + local spawn_class + if entdef.type == "monster" then + spawn_class = "hostile" + else + spawn_class = "passive" + end + + --load information into the spawn dictionary + local key = #spawn_dictionary + 1 + spawn_dictionary[key] = {} + spawn_dictionary[key]["name"] = name + spawn_dictionary[key]["dimension"] = dimension + spawn_dictionary[key]["type_of_spawning"] = type_of_spawning + spawn_dictionary[key]["biomes"] = biomes + spawn_dictionary[key]["min_light"] = min_light + spawn_dictionary[key]["max_light"] = max_light + spawn_dictionary[key]["interval"] = interval + spawn_dictionary[key]["chance"] = chance + spawn_dictionary[key]["aoc"] = aoc + spawn_dictionary[key]["min_height"] = min_height + spawn_dictionary[key]["max_height"] = max_height + spawn_dictionary[key]["day_toggle"] = day_toggle + --spawn_dictionary[key]["on_spawn"] = spawn_abm_action + spawn_dictionary[key]["spawn_class"] = spawn_class + + --[[ + minetest.register_abm({ + label = name .. " spawning", + nodenames = nodes, + neighbors = neighbors, + interval = interval, + chance = floor(max(1, chance * mobs_spawn_chance)), + catch_up = false, + action = spawn_abm_action, + }) + ]]-- +end + +-- compatibility with older mob registration +-- we're going to forget about this for now -j4i +--[[ +function mobs:register_spawn(name, nodes, max_light, min_light, chance, active_object_count, max_height, day_toggle) + + mobs:spawn_specific(name, nodes, {"air"}, min_light, max_light, 30, + chance, active_object_count, -31000, max_height, day_toggle) +end +]]-- + + +--Don't disable this yet-j4i +-- MarkBu's spawn function + +function mobs:spawn(def) + --does nothing for now + --[[ + local name = def.name + local nodes = def.nodes or {"group:soil", "group:stone"} + local neighbors = def.neighbors or {"air"} + local min_light = def.min_light or 0 + local max_light = def.max_light or 15 + local interval = def.interval or 30 + local chance = def.chance or 5000 + local active_object_count = def.active_object_count or 1 + local min_height = def.min_height or -31000 + local max_height = def.max_height or 31000 + local day_toggle = def.day_toggle + local on_spawn = def.on_spawn + + mobs:spawn_specific(name, nodes, neighbors, min_light, max_light, interval, + chance, active_object_count, min_height, max_height, day_toggle, on_spawn) + ]]-- +end + + + +local axis +--inner and outer part of square donut radius +local inner = 15 +local outer = 64 +local int = {-1,1} + +local function position_calculation(pos) + + pos = vector_floor(pos) + + --this is used to determine the axis buffer from the player + axis = math_random(0,1) + + --cast towards the direction + if axis == 0 then --x + pos.x = pos.x + math_random(inner,outer)*int[math_random(1,2)] + pos.z = pos.z + math_random(-outer,outer) + else --z + pos.z = pos.z + math_random(inner,outer)*int[math_random(1,2)] + pos.x = pos.x + math_random(-outer,outer) + end + return pos +end + +--[[ +local decypher_limits_dictionary = { + ["overworld"] = {mcl_vars.mg_overworld_min,mcl_vars.mg_overworld_max}, + ["nether"] = {mcl_vars.mg_nether_min, mcl_vars.mg_nether_max}, + ["end"] = {mcl_vars.mg_end_min, mcl_vars.mg_end_max} +} +]]-- + +local function decypher_limits(posy) + --local min_max_table = decypher_limits_dictionary[dimension] + --return min_max_table[1],min_max_table[2] + posy = math_floor(posy) + return posy - 32, posy + 32 +end + +--a simple helper function for mob_spawn +local function biome_check(biome_list, biome_goal) + for _,data in ipairs(biome_list) do + if data == biome_goal then + return true + end + end + + return false +end + + +--todo mob limiting +--MAIN LOOP + +if mobs_spawn then + local timer = 0 + minetest.register_globalstep(function(dtime) + timer = timer + dtime + if timer >= 10 then + timer = 0 + for _,player in pairs(get_connected_players()) do + -- after this line each "break" means "continue" + local do_mob_spawning = true + repeat + --don't need to get these variables more than once + --they happen in a single server step + + local player_pos = player:get_pos() + local dimension = mcl_worlds.pos_to_dimension(player_pos) + + if dimension == "void" or dimension == "default" then + break -- ignore void and unloaded area + end + + local min, max = decypher_limits(player_pos.y) + + for i = 1, math_random(1,4) do + -- after this line each "break" means "continue" + local do_mob_algorithm = true + repeat + + local goal_pos = position_calculation(player_pos) + + local spawning_position_list = find_nodes_in_area_under_air(vector_new(goal_pos.x,min,goal_pos.z), vector_new(goal_pos.x,max,goal_pos.z), {"group:solid", "group:water", "group:lava"}) + + --couldn't find node + if #spawning_position_list <= 0 then + break + end + + local spawning_position = spawning_position_list[math_random(1,#spawning_position_list)] + + --Prevent strange behavior --- this is commented out: /too close to player --fixed with inner circle + if not spawning_position then -- or vector_distance(player_pos, spawning_position) < 15 + break + end + + --hard code mob limit in area to 5 for now + if count_mobs(spawning_position) >= 5 then + break + end + + local gotten_node = get_node(spawning_position).name + + if not gotten_node or gotten_node == "air" then --skip air nodes + break + end + + local gotten_biome = minetest.get_biome_data(spawning_position) + + if not gotten_biome then + break --skip if in unloaded area + end + + gotten_biome = get_biome_name(gotten_biome.biome) --makes it easier to work with + + --add this so mobs don't spawn inside nodes + spawning_position.y = spawning_position.y + 1 + + --only need to poll for node light if everything else worked + local gotten_light = get_node_light(spawning_position) + + local is_water = get_item_group(gotten_node, "water") ~= 0 + local is_lava = get_item_group(gotten_node, "lava") ~= 0 + + local mob_def = nil + + --create a disconnected clone of the spawn dictionary + --prevents memory leak + local mob_library_worker_table = table_copy(spawn_dictionary) + + --grab mob that fits into the spawning location + --randomly grab a mob, don't exclude any possibilities + local repeat_mob_search = true + repeat + + --do not infinite loop + if #mob_library_worker_table <= 0 then + --print("breaking infinite loop") + break + end + + local skip = false + + --use this for removing table elements of mobs that do not match + local temp_index = math_random(1,#mob_library_worker_table) + + local temp_def = mob_library_worker_table[temp_index] + + --skip if something ridiculous happens (nil mob def) + --something truly horrible has happened if skip gets + --activated at this point + if not temp_def then + skip = true + end + + if not skip and (spawning_position.y < temp_def.min_height or spawning_position.y > temp_def.max_height) then + skip = true + end + + --skip if not correct dimension + if not skip and (temp_def.dimension ~= dimension) then + skip = true + end + + --skip if not in correct biome + if not skip and (not biome_check(temp_def.biomes, gotten_biome)) then + skip = true + end + + --don't spawn if not in light limits + if not skip and (gotten_light < temp_def.min_light or gotten_light > temp_def.max_light) then + skip = true + end + + --skip if not in correct spawning type + if not skip and (temp_def.type_of_spawning == "ground" and is_water) then + skip = true + end + + if not skip and (temp_def.type_of_spawning == "ground" and is_lava) then + skip = true + end + + --found a mob, exit out of loop + if not skip then + --minetest.log("warning", "found mob:"..temp_def.name) + --print("found mob:"..temp_def.name) + mob_def = table_copy(temp_def) + break + else + --minetest.log("warning", "deleting temp index "..temp_index) + --print("deleting temp index") + table_remove(mob_library_worker_table, temp_index) + end + + until repeat_mob_search == false --this is needed to sort through mobs randomly + + + --catch if went through all mobs and something went horribly wrong + --could not find a valid mob to spawn that fits the environment + if not mob_def then + break + end + + --adjust the position for water and lava mobs + if mob_def.type_of_spawning == "water" or mob_def.type_of_spawning == "lava" then + spawning_position.y = spawning_position.y - 1 + end + + --print("spawning: " .. mob_def.name) + + --everything is correct, spawn mob + minetest.add_entity(spawning_position, mob_def.name) + + break + until do_mob_algorithm == false --this is a safety catch + end + + break + until do_mob_spawning == false --this is a performance catch + end + end + end) +end diff --git a/mods/ENTITIES/mcl_mobs/crafts.lua b/mods/ENTITIES/mcl_mobs/crafts.lua index e8a5b60fc..2b23c6f58 100644 --- a/mods/ENTITIES/mcl_mobs/crafts.lua +++ b/mods/ENTITIES/mcl_mobs/crafts.lua @@ -1,5 +1,5 @@ -local S = minetest.get_translator("mcl_mobs") +local S = minetest.get_translator(minetest.get_current_modname()) -- name tag minetest.register_craftitem("mcl_mobs:nametag", { diff --git a/mods/ENTITIES/mcl_mobs/description.txt b/mods/ENTITIES/mcl_mobs/description.txt deleted file mode 100644 index a426a1006..000000000 --- a/mods/ENTITIES/mcl_mobs/description.txt +++ /dev/null @@ -1 +0,0 @@ -Adds a mob API for mods to add animals or monsters, etc. diff --git a/mods/ENTITIES/mcl_mobs/init.lua b/mods/ENTITIES/mcl_mobs/init.lua index c2d6cb21b..b0daba2c4 100644 --- a/mods/ENTITIES/mcl_mobs/init.lua +++ b/mods/ENTITIES/mcl_mobs/init.lua @@ -1,11 +1,16 @@ local path = minetest.get_modpath(minetest.get_current_modname()) +local api_path = path.."/api" + -- Mob API -dofile(path .. "/api.lua") +dofile(api_path .. "/api.lua") + +-- Spawning Algorithm +dofile(api_path .. "/spawning.lua") -- Rideable Mobs -dofile(path .. "/mount.lua") +dofile(api_path .. "/mount.lua") -- Mob Items -dofile(path .. "/crafts.lua") +dofile(path .. "/crafts.lua") \ No newline at end of file diff --git a/mods/ENTITIES/mcl_mobs/locale/mcl_mobs.pl.tr b/mods/ENTITIES/mcl_mobs/locale/mcl_mobs.pl.tr new file mode 100644 index 000000000..96dc1ea15 --- /dev/null +++ b/mods/ENTITIES/mcl_mobs/locale/mcl_mobs.pl.tr @@ -0,0 +1,11 @@ +# textdomain: mcl_mobs +Peaceful mode active! No monsters will spawn.=Tryb pokojowy aktywowany! Potwory nie będą się pojawiać. +This allows you to place a single mob.=To pozwala na przywołanie jednego moba. +Just place it where you want the mob to appear. Animals will spawn tamed, unless you hold down the sneak key while placing. If you place this on a mob spawner, you change the mob it spawns.=Postaw to w miejscu w którym chcesz aby pojawił się mob. Zwierzęta pojawią się jako oswojone chyba, że będziesz się skradał podczas stawiania. Jeśli postawisz to na spawnerze to zmienisz którego moba przywołuje. +You need the “maphack” privilege to change the mob spawner.=Potrzebujesz przywileju "maphack", aby zmienić spawner. +Name Tag=Znacznik +A name tag is an item to name a mob.=Znacznik jest przedmiotem pozwalającym nazwać moba. +Before you use the name tag, you need to set a name at an anvil. Then you can use the name tag to name a mob. This uses up the name tag.=Zanim użyjesz znacznika musisz wybrać imię przy kowadle. Następnie możesz użyć znacznika by nazwać moba. To zużywa znacznik. +Only peaceful mobs allowed!=Tylko pokojowe moby są dozwolone! +Give names to mobs=Nazwij moby +Set name at anvil=Wybierz imię przy kowadle diff --git a/mods/ENTITIES/mcl_mobs/lucky_block.lua b/mods/ENTITIES/mcl_mobs/lucky_block.lua deleted file mode 100644 index ea90de74a..000000000 --- a/mods/ENTITIES/mcl_mobs/lucky_block.lua +++ /dev/null @@ -1,8 +0,0 @@ - -if minetest.get_modpath("lucky_block") then - - lucky_block:add_blocks({ - {"dro", {"mcl_mobs:nametag"}, 1}, - {"lig"}, - }) -end diff --git a/mods/ENTITIES/mcl_mobs/mod.conf b/mods/ENTITIES/mcl_mobs/mod.conf index c3d971374..2a91a7764 100644 --- a/mods/ENTITIES/mcl_mobs/mod.conf +++ b/mods/ENTITIES/mcl_mobs/mod.conf @@ -1,3 +1,5 @@ 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, cmi, doc_identifier, mcl_armor, mcl_portals, mcl_experience diff --git a/mods/ENTITIES/mcl_mobs/sounds/attributes.txt b/mods/ENTITIES/mcl_mobs/sounds/attributes.txt new file mode 100644 index 000000000..1228dd9d7 --- /dev/null +++ b/mods/ENTITIES/mcl_mobs/sounds/attributes.txt @@ -0,0 +1,4 @@ + +default_punch.1 = https://freesound.org/people/Merrick079/sounds/566436/ +default_punch.2 = https://freesound.org/people/Merrick079/sounds/566435/ +default_punch.3 = https://freesound.org/people/Merrick079/sounds/566434/ diff --git a/mods/ENTITIES/mcl_mobs/sounds/default_punch.1.ogg b/mods/ENTITIES/mcl_mobs/sounds/default_punch.1.ogg new file mode 100644 index 0000000000000000000000000000000000000000..4d7ba8015eb13ce415ea09f4223a427bc4d2e17d GIT binary patch literal 12658 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 literal 0 HcmV?d00001 diff --git a/mods/ENTITIES/mcl_mobs/sounds/default_punch.2.ogg b/mods/ENTITIES/mcl_mobs/sounds/default_punch.2.ogg new file mode 100644 index 0000000000000000000000000000000000000000..c022d94f871345810b7d90ab953a01985e2d369b GIT binary patch literal 12801 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 R&zZhFM!opw0l>!ge*lM|2+9Be literal 0 HcmV?d00001 diff --git a/mods/ENTITIES/mcl_mobs/sounds/default_punch.3.ogg b/mods/ENTITIES/mcl_mobs/sounds/default_punch.3.ogg new file mode 100644 index 0000000000000000000000000000000000000000..4c5e3f9b301e682372399f6213210a42d86fc558 GIT binary patch literal 12943 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 4 or y > 4 then return nil end @@ -43,7 +46,7 @@ local shrink_painting = function(x, y) end end -local get_painting = function(x, y, motive) +local function get_painting(x, y, motive) local painting = mcl_paintings.paintings[y] and mcl_paintings.paintings[y][x] and mcl_paintings.paintings[y][x][motive] if not painting then return nil @@ -53,7 +56,7 @@ local get_painting = function(x, y, motive) return "[combine:"..sx.."x"..sy..":"..px..","..py.."=mcl_paintings_paintings.png" end -local get_random_painting = function(x, y) +local function get_random_painting(x, y) if not mcl_paintings.paintings[y] or not mcl_paintings.paintings[y][x] then return nil end @@ -65,7 +68,7 @@ local get_random_painting = function(x, y) return get_painting(x, y, r), r end -local size_to_minmax = function(size) +--[[local function size_to_minmax(size) local min, max if size == 2 then min = -0.5 @@ -81,13 +84,13 @@ local size_to_minmax = function(size) max = 0.5 end return min, max -end +end]] -local size_to_minmax_entity = function(size) +local function size_to_minmax_entity(size) return -size/2, size/2 end -local set_entity = function(object) +local function set_entity(object) local ent = object:get_luaentity() local wallm = ent._facing local xsize = ent._xsize @@ -169,7 +172,7 @@ minetest.register_entity("mcl_paintings:painting", { on_punch = function(self, puncher, time_from_last_punch, tool_capabilities, dir, damage) -- Drop as item on punch if puncher and puncher:is_player() then - kname = puncher:get_player_name() + local kname = puncher:get_player_name() local pos = self._pos if not pos then pos = self.object:get_pos() @@ -191,6 +194,14 @@ minetest.register_craftitem("mcl_paintings:painting", { if pointed_thing.type ~= "node" then return itemstack end + + local node = minetest.get_node(pointed_thing.under) + if placer and not placer:get_player_control().sneak then + if minetest.registered_nodes[node.name] and minetest.registered_nodes[node.name].on_rightclick then + return minetest.registered_nodes[node.name].on_rightclick(pointed_thing.under, node, placer, itemstack) or itemstack + end + end + local dir = vector.subtract(pointed_thing.above, pointed_thing.under) dir = vector.normalize(dir) if dir.y ~= 0 then @@ -293,6 +304,8 @@ minetest.register_craftitem("mcl_paintings:painting", { end, }) +mcl_wip.register_wip_item("mcl_paintings:painting") + minetest.register_craft({ output = "mcl_paintings:painting", recipe = { diff --git a/mods/ENTITIES/mcl_paintings/locale/mcl_paintings.pl.tr b/mods/ENTITIES/mcl_paintings/locale/mcl_paintings.pl.tr new file mode 100644 index 000000000..473540dda --- /dev/null +++ b/mods/ENTITIES/mcl_paintings/locale/mcl_paintings.pl.tr @@ -0,0 +1,2 @@ +# textdomain:mcl_paintings +Painting=Obraz diff --git a/mods/ENTITIES/mcl_paintings/mod.conf b/mods/ENTITIES/mcl_paintings/mod.conf index ea1d61c3d..2c6955360 100644 --- a/mods/ENTITIES/mcl_paintings/mod.conf +++ b/mods/ENTITIES/mcl_paintings/mod.conf @@ -1 +1,5 @@ name = mcl_paintings +author = Wuzzy +description = The paintings mod for MCL2 +depends = mcl_wip + diff --git a/mods/ENTITIES/mcl_paintings/paintings.lua b/mods/ENTITIES/mcl_paintings/paintings.lua index d606306c2..ccf584364 100644 --- a/mods/ENTITIES/mcl_paintings/paintings.lua +++ b/mods/ENTITIES/mcl_paintings/paintings.lua @@ -3,7 +3,7 @@ local TS = 16 -- texture size mcl_paintings.paintings = { [1] = { [1] = { - { cx = 0, cy = 0 }, + { cx = 0, cy = 0 }, { cx = TS, cy = 0 }, { cx = 2*TS, cy = 0 }, { cx = 3*TS, cy = 0 }, @@ -26,7 +26,7 @@ mcl_paintings.paintings = { { cx = 0, cy = 4*TS }, { cx = TS, cy = 4*TS }, }, - [2] = { + [2] = { { cx = 0, cy = 8*TS }, { cx = 2*TS, cy = 8*TS }, { cx = 4*TS, cy = 8*TS }, @@ -35,7 +35,7 @@ mcl_paintings.paintings = { { cx = 10*TS, cy = 8*TS }, }, [3] = 2, - [4] = { + [4] = { { cx = 0, cy = 6*TS }, }, }, diff --git a/mods/ENTITIES/mobs_mc/0_gameconfig.lua b/mods/ENTITIES/mobs_mc/0_gameconfig.lua index 74c92d415..f21d946fe 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 @@ -81,7 +81,9 @@ mobs_mc.items = { gunpowder = "tnt:gunpowder", flint_and_steel = "fire:flint_and_steel", water_source = "default:water_source", + water_flowing = "default:water_flowing", river_water_source = "default:river_water_source", + --water_flowing = "default:river_water_flowing", black_dye = "dye:black", poppy = "flowers:rose", dandelion = "flowers:dandelion_yellow", @@ -126,7 +128,6 @@ mobs_mc.items = { nether_portal = "nether:portal", netherrack = "nether:rack", - nether_brick_block = "nether:brick", -- Wool (Minecraft color scheme) wool_white = "wool:white", @@ -290,13 +291,13 @@ mobs_mc.spawn = { mobs_mc.spawn_height = { water = tonumber(minetest.settings:get("water_level")) or 0, -- Water level in the Overworld - -- Overworld boundaries (inclusive) - overworld_min = -2999, + -- Overworld boundaries (inclusive) --I adjusted this to be more reasonable + overworld_min = -64,-- -2999, overworld_max = 31000, -- Nether boundaries (inclusive) - nether_min = -3369, - nether_max = -3000, + nether_min = -29067,-- -3369, + nether_max = -28939,-- -3000, -- End boundaries (inclusive) end_min = -6200, diff --git a/mods/ENTITIES/mobs_mc/1_items_default.lua b/mods/ENTITIES/mobs_mc/1_items_default.lua index ddcc290c7..c8ac421cc 100644 --- a/mods/ENTITIES/mobs_mc/1_items_default.lua +++ b/mods/ENTITIES/mobs_mc/1_items_default.lua @@ -8,7 +8,7 @@ -- NOTE: Most strings intentionally not marked for translation, other mods already have these items. -- TODO: Remove this file eventually, most items are already outsourced in other mods. -local S = minetest.get_translator("mobs_mc") +local S = minetest.get_translator(minetest.get_current_modname()) local c = mobs_mc.is_item_variable_overridden @@ -234,8 +234,8 @@ end if c("ender_eye") and c("blaze_powder") and c("blaze_rod") then minetest.register_craft({ type = "shapeless", - output = 'mobs_mc:ender_eye', - recipe = { 'mobs_mc:blaze_powder', 'mobs_mc:blaze_rod'}, + output = "mobs_mc:ender_eye", + recipe = { "mobs_mc:blaze_powder", "mobs_mc:blaze_rod"}, }) end @@ -516,77 +516,17 @@ end -- Evoker if c("totem") then - local hud_totem = {} - -- Totem of Undying minetest.register_craftitem("mobs_mc:totem", { description = S("Totem of Undying"), - _tt_help = minetest.colorize("#00FF00", S("Protects you from death while wielding it")), + _tt_help = minetest.colorize(mcl_colors.GREEN, S("Protects you from death while wielding it")), _doc_items_longdesc = S("A totem of undying is a rare artifact which may safe you from certain death."), _doc_items_usagehelp = S("The totem only works while you hold it in your hand. If you receive fatal damage, you are saved from death and you get a second chance with 1 HP. The totem is destroyed in the process, however."), inventory_image = "mcl_totems_totem.png", wield_image = "mcl_totems_totem.png", stack_max = 1, + groups = {combat_item=1}, }) - - minetest.register_on_leaveplayer(function(player) - hud_totem[player:get_player_name()] = nil - end) - - -- Save the player from death when holding totem of undying in hand - minetest.register_on_player_hpchange(function(player, hp_change) - local hp = player:get_hp() - -- Fatal damage? - if hp + hp_change <= 0 then - local wield = player:get_wielded_item() - if wield:get_name() == "mobs_mc:totem" then - local ppos = player:get_pos() - local pnname = minetest.get_node(ppos).name - -- Some exceptions when _not_ to save the player - for n=1, #mobs_mc.misc.totem_fail_nodes do - if pnname == mobs_mc.misc.totem_fail_nodes[n] then - return hp_change - end - end - -- Reset breath as well - if player:get_breath() < 11 then - player:set_breath(10) - end - if not minetest.is_creative_enabled(player:get_player_name()) then - wield:take_item() - player:set_wielded_item(wield) - end - -- Effects - minetest.sound_play({name = "mcl_totems_totem", gain=1}, {pos=ppos, max_hear_distance=16}, true) - - -- Big totem overlay - if not hud_totem[player:get_player_name()] then - hud_totem[player:get_player_name()] = player:hud_add({ - hud_elem_type = "image", - text = "mcl_totems_totem.png", - position = { x=0.5, y=1 }, - scale = { x=17, y=17 }, - offset = { x=0, y=-178 }, - z_index = 100, - }) - minetest.after(3, function(name) - local player = minetest.get_player_by_name(name) - if player and player:is_player() then - local name = player:get_player_name() - if hud_totem[name] then - player:hud_remove(hud_totem[name]) - hud_totem[name] = nil - end - end - end, player:get_player_name()) - end - - -- Set HP to exactly 1 - return -hp + 1 - end - end - return hp_change - end, true) end -- Rotten flesh diff --git a/mods/ENTITIES/mobs_mc/2_throwing.lua b/mods/ENTITIES/mobs_mc/2_throwing.lua index e868cb060..d97351ac0 100644 --- a/mods/ENTITIES/mobs_mc/2_throwing.lua +++ b/mods/ENTITIES/mobs_mc/2_throwing.lua @@ -6,7 +6,7 @@ -- NOTE: Strings intentionally not marked for translation, other mods already have these items. -- TODO: Remove this file eventually, all items here are already outsourced in other mods. -local S = minetest.get_translator("mobs_mc") +--local S = minetest.get_translator(minetest.get_current_modname()) --maikerumines throwing code --arrow (weapon) @@ -39,6 +39,7 @@ minetest.register_node("mobs_mc:arrow_box", { } }, tiles = {"mcl_bows_arrow.png^[transformFX", "mcl_bows_arrow.png^[transformFX", "mcl_bows_arrow_back.png", "mcl_bows_arrow_front.png", "mcl_bows_arrow.png", "mcl_bows_arrow.png^[transformFX"}, + use_texture_alpha = minetest.features.use_texture_alpha_string_modes and "opaque" or false, paramtype = "light", paramtype2 = "facedir", sunlight_propagates = true, @@ -82,7 +83,7 @@ THROWING_ARROW_ENTITY.on_step = function(self, dtime) if self.timer>0.2 then local objs = minetest.get_objects_inside_radius({x=pos.x,y=pos.y,z=pos.z}, 1.5) for k, obj in pairs(objs) do - if obj:get_luaentity() ~= nil then + if obj:get_luaentity() then if obj:get_luaentity().name ~= "mobs_mc:arrow_entity" and obj:get_luaentity().name ~= "__builtin:item" then local damage = 3 minetest.sound_play("damage", {pos = pos}, true) @@ -107,7 +108,7 @@ THROWING_ARROW_ENTITY.on_step = function(self, dtime) if self.lastpos.x~=nil then if node.name ~= "air" then minetest.sound_play("bowhit1", {pos = pos}, true) - minetest.add_item(self.lastpos, 'mobs_mc:arrow') + minetest.add_item(self.lastpos, "mobs_mc:arrow") self.object:remove() end end @@ -121,7 +122,7 @@ local arrows = { } local throwing_shoot_arrow = function(itemstack, player) - for _,arrow in ipairs(arrows) do + for _,arrow in pairs(arrows) do if player:get_inventory():get_stack("main", player:get_wield_index()+1):get_name() == arrow[1] then if not minetest.is_creative_enabled(player:get_player_name()) then player:get_inventory():remove_item("main", arrow[1]) @@ -154,7 +155,7 @@ end if c("arrow") and c("flint") and c("feather") and c("stick") then minetest.register_craft({ - output = 'mobs_mc:arrow 4', + output = "mobs_mc:arrow 4", recipe = { {mobs_mc.items.flint}, {mobs_mc.items.stick}, @@ -180,11 +181,11 @@ if c("bow") then }) minetest.register_craft({ - output = 'mobs_mc:bow_wood', + output = "mobs_mc:bow_wood", recipe = { - {mobs_mc.items.string, mobs_mc.items.stick, ''}, - {mobs_mc.items.string, '', mobs_mc.items.stick}, - {mobs_mc.items.string, mobs_mc.items.stick, ''}, + {mobs_mc.items.string, mobs_mc.items.stick, ""}, + {mobs_mc.items.string, "", mobs_mc.items.stick}, + {mobs_mc.items.string, mobs_mc.items.stick, ""}, } }) end @@ -258,7 +259,7 @@ if c("egg") then }) -- shoot egg - local mobs_shoot_egg = function (item, player, pointed_thing) + local function mobs_shoot_egg(item, player, pointed_thing) local playerpos = player:get_pos() @@ -348,7 +349,7 @@ mobs:register_arrow("mobs_mc:snowball_entity", { if c("snowball") then -- shoot snowball - local mobs_shoot_snowball = function (item, player, pointed_thing) + local function mobs_shoot_snowball(item, player, pointed_thing) local playerpos = player:get_pos() diff --git a/mods/ENTITIES/mobs_mc/4_heads.lua b/mods/ENTITIES/mobs_mc/4_heads.lua index 01b8ee577..ecd09ee02 100644 --- a/mods/ENTITIES/mobs_mc/4_heads.lua +++ b/mods/ENTITIES/mobs_mc/4_heads.lua @@ -3,8 +3,9 @@ -- NOTE: Strings intentionally not marked for translation, other mods already have these items. -- TODO: Remove this file eventually, all items here are already outsourced in other mods. +-- TODO: Add translation. -local S = minetest.get_translator("mobs_mc") +--local S = local S = minetest.get_translator(minetest.get_current_modname()) -- Heads system diff --git a/mods/ENTITIES/mobs_mc/LICENSE-media.md b/mods/ENTITIES/mobs_mc/LICENSE-media.md index dad31abb8..3bfe70a15 100644 --- a/mods/ENTITIES/mobs_mc/LICENSE-media.md +++ b/mods/ENTITIES/mobs_mc/LICENSE-media.md @@ -190,9 +190,10 @@ Origin of those models: * [Spennnyyy](https://freesound.org/people/Spennnyyy/) (CC0) * `mcl_totems_totem.ogg` * Source: -* [Baŝto](https://opengameart.org/users/ba%C5%9Dto) +* [Baŝto](https://opengameart.org/users/ba%C5%9Dto) (remixer) and [kantouth](https://freesound.org/people/kantouth/) (original author) * `mobs_mc_skeleton_random.*.ogg` (CC BY 3.0) * Source: + * Based on: * [spookymodem](https://freesound.org/people/spookymodem/) * `mobs_mc_skeleton_death.ogg` (CC0) * @@ -306,4 +307,4 @@ Origin of those models: Note: Many of these sounds have been more or less modified to fit the game. -Sounds not mentioned hre are licensed under CC0. +Sounds not mentioned here are licensed under CC0. diff --git a/mods/ENTITIES/mobs_mc/agent.lua b/mods/ENTITIES/mobs_mc/agent.lua index 8fa7314cf..8475f92fc 100644 --- a/mods/ENTITIES/mobs_mc/agent.lua +++ b/mods/ENTITIES/mobs_mc/agent.lua @@ -1,8 +1,8 @@ --################### ---################### AGENT +--################### AGENT - seemingly unused --################### -local S = minetest.get_translator("mobs_mc") +local S = minetest.get_translator(minetest.get_current_modname()) mobs:register_mob("mobs_mc:agent", { type = "npc", diff --git a/mods/ENTITIES/mobs_mc/bat.lua b/mods/ENTITIES/mobs_mc/bat.lua index 103579b67..5492add74 100644 --- a/mods/ENTITIES/mobs_mc/bat.lua +++ b/mods/ENTITIES/mobs_mc/bat.lua @@ -1,12 +1,16 @@ --License for code WTFPL and otherwise stated in readmes -local S = minetest.get_translator("mobs_mc") +local S = minetest.get_translator(minetest.get_current_modname()) mobs:register_mob("mobs_mc:bat", { + description = S("Bat"), type = "animal", spawn_class = "ambient", can_despawn = true, passive = true, + rotate = 270, + tilt_fly = true, + fly = true, hp_min = 6, hp_max = 6, collisionbox = {-0.25, -0.01, -0.25, 0.25, 0.89, 0.25}, @@ -44,9 +48,7 @@ mobs:register_mob("mobs_mc:bat", { fall_damage = 0, view_range = 16, fear_height = 0, - jump = false, - fly = true, makes_footstep_sound = false, }) @@ -64,7 +66,81 @@ else end -- Spawn on solid blocks at or below Sea level and the selected light level -mobs:spawn_specific("mobs_mc:bat", mobs_mc.spawn.solid, {"air"}, 0, maxlight, 20, 5000, 2, mobs_mc.spawn_height.overworld_min, mobs_mc.spawn_height.water-1) +mobs:spawn_specific( +"mobs_mc:bat", +"overworld", +"ground", +{ +"FlowerForest_underground", +"JungleEdge_underground", +"StoneBeach_underground", +"MesaBryce_underground", +"Mesa_underground", +"RoofedForest_underground", +"Jungle_underground", +"Swampland_underground", +"MushroomIsland_underground", +"BirchForest_underground", +"Plains_underground", +"MesaPlateauF_underground", +"ExtremeHills_underground", +"MegaSpruceTaiga_underground", +"BirchForestM_underground", +"SavannaM_underground", +"MesaPlateauFM_underground", +"Desert_underground", +"Savanna_underground", +"Forest_underground", +"SunflowerPlains_underground", +"ColdTaiga_underground", +"IcePlains_underground", +"IcePlainsSpikes_underground", +"MegaTaiga_underground", +"Taiga_underground", +"ExtremeHills+_underground", +"JungleM_underground", +"ExtremeHillsM_underground", +"JungleEdgeM_underground", +"Mesa", +"FlowerForest", +"Swampland", +"Taiga", +"ExtremeHills", +"Jungle", +"Savanna", +"BirchForest", +"MegaSpruceTaiga", +"MegaTaiga", +"ExtremeHills+", +"Forest", +"Plains", +"Desert", +"ColdTaiga", +"MushroomIsland", +"IcePlainsSpikes", +"SunflowerPlains", +"IcePlains", +"RoofedForest", +"ExtremeHills+_snowtop", +"MesaPlateauFM_grasstop", +"JungleEdgeM", +"ExtremeHillsM", +"JungleM", +"BirchForestM", +"MesaPlateauF", +"MesaPlateauFM", +"MesaPlateauF_grasstop", +"MesaBryce", +"JungleEdge", +"SavannaM", +}, +0, +maxlight, +20, +5000, +2, +mobs_mc.spawn_height.overworld_min, +mobs_mc.spawn_height.water-1) -- spawn eggs diff --git a/mods/ENTITIES/mobs_mc/blaze.lua b/mods/ENTITIES/mobs_mc/blaze.lua index 00988a903..0f62c5388 100644 --- a/mods/ENTITIES/mobs_mc/blaze.lua +++ b/mods/ENTITIES/mobs_mc/blaze.lua @@ -1,9 +1,9 @@ -- daufinsyd -- My work is under the LGPL terms --- Model and mobs_blaze.png see https://github.com/22i/minecraft-voxel-blender-models +-- Model and mobs_blaze.png see https://github.com/22i/minecraft-voxel-blender-models -hi 22i ~jordan4ibanez -- blaze.lua partial copy of mobs_mc/ghast.lua -local S = minetest.get_translator("mobs_mc") +local S = minetest.get_translator(minetest.get_current_modname()) --################### --################### BLAZE @@ -11,12 +11,16 @@ local S = minetest.get_translator("mobs_mc") mobs:register_mob("mobs_mc:blaze", { + description = S("Blaze"), type = "monster", spawn_class = "hostile", hp_min = 20, hp_max = 20, xp_min = 10, xp_max = 10, + tilt_fly = false, + hostile = true, + --rotate = 270, collisionbox = {-0.3, -0.01, -0.3, 0.3, 1.79, 0.3}, rotate = -180, visual = "mesh", @@ -35,7 +39,7 @@ mobs:register_mob("mobs_mc:blaze", { walk_velocity = .8, run_velocity = 1.6, damage = 6, - reach = 2, + reach = 4, -- don't want blaze getting too close pathfinding = 1, drops = { {name = mobs_mc.items.blaze_rod, @@ -63,7 +67,7 @@ mobs:register_mob("mobs_mc:blaze", { fall_speed = -2.25, light_damage = 0, view_range = 16, - attack_type = "dogshoot", + attack_type = "projectile", arrow = "mobs_mc:blaze_fireball", shoot_interval = 3.5, shoot_offset = 1.0, @@ -75,9 +79,80 @@ mobs:register_mob("mobs_mc:blaze", { fear_height = 0, glow = 14, fire_resistant = true, + eye_height = 0.75, + projectile_cooldown_min = 2, + projectile_cooldown_max = 3, + shoot_arrow = function(self, pos, dir) + -- 2-4 damage per arrow + local dmg = math.random(2,4) + mobs.shoot_projectile_handling("mobs_mc:blaze_fireball", pos, dir, self.object:get_yaw(), self.object, 7, dmg,nil,nil,nil,-0.4) + end, + + do_custom = function(self) + if self.attacking and self.state == "attack" and vector.distance(self.object:get_pos(), self.attacking:get_pos()) < 1.2 then + mcl_burning.set_on_fire(self.attacking, 5) + end + local pos = self.object:get_pos() + minetest.add_particle({ + pos = {x=pos.x+math.random(-0.7,0.7)*math.random()/2,y=pos.y+math.random(0.7,1.2),z=pos.z+math.random(-0.7,0.7)*math.random()/2}, + velocity = {x=0, y=math.random(1,1), z=0}, + expirationtime = math.random(), + size = math.random(1, 4), + collisiondetection = true, + vertical = false, + texture = "mcl_particles_smoke_anim.png^[colorize:#2c2c2c:255", + animation = { + type = "vertical_frames", + aspect_w = 8, + aspect_h = 8, + length = 2.05, + }, + }) + minetest.add_particle({ + pos = {x=pos.x+math.random(-0.7,0.7)*math.random()/2,y=pos.y+math.random(0.7,1.2),z=pos.z+math.random(-0.7,0.7)*math.random()/2}, + velocity = {x=0, y=math.random(1,1), z=0}, + expirationtime = math.random(), + size = math.random(1, 4), + collisiondetection = true, + vertical = false, + texture = "mcl_particles_smoke_anim.png^[colorize:#424242:255", + animation = { + type = "vertical_frames", + aspect_w = 8, + aspect_h = 8, + length = 2.05, + }, + }) + minetest.add_particle({ + pos = {x=pos.x+math.random(-0.7,0.7)*math.random()/2,y=pos.y+math.random(0.7,1.2),z=pos.z+math.random(-0.7,0.7)*math.random()/2}, + velocity = {x=0, y=math.random(1,1), z=0}, + expirationtime = math.random(), + size = math.random(1, 4), + collisiondetection = true, + vertical = false, + texture = "mcl_particles_smoke_anim.png^[colorize:#0f0f0f:255", + animation = { + type = "vertical_frames", + aspect_w = 8, + aspect_h = 8, + length = 2.05, + }, + }) + end, }) -mobs:spawn_specific("mobs_mc:blaze", mobs_mc.spawn.nether_fortress, {"air"}, 0, minetest.LIGHT_MAX+1, 30, 5000, 3, mobs_mc.spawn_height.nether_min, mobs_mc.spawn_height.nether_max) +mobs:spawn_specific( +"mobs_mc:blaze", +"nether", +"ground", +{"Nether"}, +0, +minetest.LIGHT_MAX+1, +30, +5000, +3, +mobs_mc.spawn_height.nether_min, +mobs_mc.spawn_height.nether_max) -- Blaze fireball mobs:register_arrow("mobs_mc:blaze_fireball", { @@ -85,16 +160,19 @@ mobs:register_arrow("mobs_mc:blaze_fireball", { visual_size = {x = 0.3, y = 0.3}, textures = {"mcl_fire_fire_charge.png"}, velocity = 15, + speed = 5, + tail = 1, + tail_texture = "mobs_mc_spit.png^[colorize:black:255", --repurpose spit texture + tail_size = 2, + tail_distance_divider = 3, + _is_fireball = true, -- Direct hit, no fire... just plenty of pain hit_player = function(self, player) - if rawget(_G, "armor") and armor.last_damage_types then - armor.last_damage_types[player:get_player_name()] = "fireball" - end - mcl_burning.set_on_fire(player, 5, 1, "blaze") + mcl_burning.set_on_fire(player, 5) player:punch(self.object, 1.0, { full_punch_interval = 1.0, - damage_groups = {fleshy = 5}, + damage_groups = {fleshy = self._damage}, }, nil) end, @@ -102,7 +180,7 @@ mobs:register_arrow("mobs_mc:blaze_fireball", { mcl_burning.set_on_fire(mob, 5) mob:punch(self.object, 1.0, { full_punch_interval = 1.0, - damage_groups = {fleshy = 5}, + damage_groups = {fleshy = self._damage}, }, nil) end, @@ -117,7 +195,9 @@ mobs:register_arrow("mobs_mc:blaze_fireball", { -- Node hit, make fire hit_node = function(self, pos, node) - if node.name == "air" then + if node.name ~= "air" then + local pos_above = table.copy(pos) + pos_above.y = pos_above.y + 1 minetest.set_node(pos_above, {name=mobs_mc.items.fire}) else local v = self.object:get_velocity() diff --git a/mods/ENTITIES/mobs_mc/chicken.lua b/mods/ENTITIES/mobs_mc/chicken.lua index 325371e2b..ffaebca2b 100644 --- a/mods/ENTITIES/mobs_mc/chicken.lua +++ b/mods/ENTITIES/mobs_mc/chicken.lua @@ -1,6 +1,6 @@ --License for code WTFPL and otherwise stated in readmes -local S = minetest.get_translator("mobs_mc") +local S = minetest.get_translator(minetest.get_current_modname()) --################### --################### CHICKEN @@ -9,6 +9,7 @@ local S = minetest.get_translator("mobs_mc") mobs:register_mob("mobs_mc:chicken", { + description = S("Chicken"), type = "animal", spawn_class = "passive", @@ -17,7 +18,8 @@ mobs:register_mob("mobs_mc:chicken", { xp_min = 1, xp_max = 3, collisionbox = {-0.2, -0.01, -0.2, 0.2, 0.69, 0.2}, - runaway = true, + skittish = true, + fall_slow = true, floats = 1, visual = "mesh", mesh = "mobs_mc_chicken.b3d", @@ -25,9 +27,10 @@ mobs:register_mob("mobs_mc:chicken", { {"mobs_mc_chicken.png"}, }, visual_size = {x=2.2, y=2.2}, - + rotate = 270, makes_footstep_sound = true, walk_velocity = 1, + run_velocity = 3, drops = { {name = mobs_mc.items.chicken_raw, chance = 1, @@ -63,14 +66,25 @@ mobs:register_mob("mobs_mc:chicken", { run_start = 0, run_end = 40, }, - follow = mobs_mc.follow.chicken, + follow = "mcl_farming:wheat_seeds", + breed_distance = 1.5, + baby_size = 0.5, + follow_distance = 2, view_range = 16, fear_height = 4, + --why do chickend breed if they lay eggs?? on_rightclick = function(self, clicker) - if mobs:feed_tame(self, clicker, 1, true, true) then return end - if mobs:protect(self, clicker) then return end - if mobs:capture_mob(self, clicker, 0, 60, 5, false, nil) then return end + --attempt to enter breed state + if mobs.enter_breed_state(self,clicker) then + return + end + + --make baby grow faster + if self.baby then + mobs.make_baby_grow_faster(self,clicker) + return + end end, do_custom = function(self, dtime) @@ -95,12 +109,85 @@ mobs:register_mob("mobs_mc:chicken", { gain = 1.0, max_hear_distance = 16, }, true) - end, - + end, + + --head code + has_head = true, + head_bone = "head", + + swap_y_with_x = false, + reverse_head_yaw = false, + + head_bone_pos_y = 1.675, + head_bone_pos_z = 0, + + head_height_offset = 0.55, + head_direction_offset = 0.0925, + + head_pitch_modifier = -math.pi/2, + --end head code }) --spawn -mobs:spawn_specific("mobs_mc:chicken", mobs_mc.spawn.grassland, {"air"}, 9, minetest.LIGHT_MAX+1, 30, 17000, 3, mobs_mc.spawn_height.overworld_min, mobs_mc.spawn_height.overworld_max) +mobs:spawn_specific( +"mobs_mc:chicken", +"overworld", +"ground", +{ + "FlowerForest_beach", + "Forest_beach", + "StoneBeach", + "ColdTaiga_beach_water", + "Taiga_beach", + "Savanna_beach", + "Plains_beach", + "ExtremeHills_beach", + "ColdTaiga_beach", + "Swampland_shore", + "JungleM_shore", + "Jungle_shore", + "MesaPlateauFM_sandlevel", + "MesaPlateauF_sandlevel", + "MesaBryce_sandlevel", + "Mesa_sandlevel", + "Mesa", + "FlowerForest", + "Swampland", + "Taiga", + "ExtremeHills", + "Jungle", + "Savanna", + "BirchForest", + "MegaSpruceTaiga", + "MegaTaiga", + "ExtremeHills+", + "Forest", + "Plains", + "Desert", + "ColdTaiga", + "IcePlainsSpikes", + "SunflowerPlains", + "IcePlains", + "RoofedForest", + "ExtremeHills+_snowtop", + "MesaPlateauFM_grasstop", + "JungleEdgeM", + "ExtremeHillsM", + "JungleM", + "BirchForestM", + "MesaPlateauF", + "MesaPlateauFM", + "MesaPlateauF_grasstop", + "MesaBryce", + "JungleEdge", + "SavannaM", +}, +9, +minetest.LIGHT_MAX+1, +30, 17000, +3, +mobs_mc.spawn_height.water, +mobs_mc.spawn_height.overworld_max) -- spawn eggs mobs:register_egg("mobs_mc:chicken", S("Chicken"), "mobs_mc_spawn_icon_chicken.png", 0) diff --git a/mods/ENTITIES/mobs_mc/cow+mooshroom.lua b/mods/ENTITIES/mobs_mc/cow+mooshroom.lua index 005af2980..17c4e1e62 100644 --- a/mods/ENTITIES/mobs_mc/cow+mooshroom.lua +++ b/mods/ENTITIES/mobs_mc/cow+mooshroom.lua @@ -1,14 +1,16 @@ --License for code WTFPL and otherwise stated in readmes -local S = minetest.get_translator("mobs_mc") +local S = minetest.get_translator(minetest.get_current_modname()) local cow_def = { + description = S("Cow"), type = "animal", spawn_class = "passive", hp_min = 10, hp_max = 10, xp_min = 1, xp_max = 3, + rotate = 270, collisionbox = {-0.45, -0.01, -0.45, 0.45, 1.39, 0.45}, visual = "mesh", mesh = "mobs_mc_cow.b3d", @@ -19,6 +21,7 @@ local cow_def = { visual_size = {x=2.8, y=2.8}, makes_footstep_sound = true, walk_velocity = 1, + run_velocity = 3, drops = { {name = mobs_mc.items.beef_raw, chance = 1, @@ -31,7 +34,7 @@ local cow_def = { max = 2, looting = "common",}, }, - runaway = true, + skittish = true, sounds = { random = "mobs_mc_cow", damage = "mobs_mc_cow_hurt", @@ -43,15 +46,20 @@ local cow_def = { stand_speed = 25, walk_speed = 40, run_speed = 60, stand_start = 0, stand_end = 0, walk_start = 0, - walk_end = 40, run_start = 0, + walk_end = 40, run_start = 0, run_end = 40, }, - follow = mobs_mc.follow.cow, + --follow = mobs_mc.follow.cow, on_rightclick = function(self, clicker) - if mobs:feed_tame(self, clicker, 1, true, true) then return end - if mobs:protect(self, clicker) then return end - if self.child then + --attempt to enter breed state + if mobs.enter_breed_state(self,clicker) then + return + end + + --make baby grow faster + if self.baby then + mobs.make_baby_grow_faster(self,clicker) return end @@ -70,27 +78,49 @@ local cow_def = { end return end - mobs:capture_mob(self, clicker, 0, 5, 60, false, nil) end, + breed_distance = 1.5, + baby_size = 0.5, + follow_distance = 2, follow = mobs_mc.items.wheat, view_range = 10, fear_height = 4, + + --head code + has_head = true, + head_bone = "head", + + swap_y_with_x = false, + reverse_head_yaw = false, + + head_bone_pos_y = 3.6, + head_bone_pos_z = -0.6, + + head_height_offset = 1.0525, + head_direction_offset = 0.5, + head_pitch_modifier = 0, + --end head code } mobs:register_mob("mobs_mc:cow", cow_def) -- Mooshroom local mooshroom_def = table.copy(cow_def) - +mooshroom_def.description = S("Mooshroom") mooshroom_def.mesh = "mobs_mc_cow.b3d" mooshroom_def.textures = { {"mobs_mc_mooshroom.png", "mobs_mc_mushroom_red.png"}, {"mobs_mc_mooshroom_brown.png", "mobs_mc_mushroom_brown.png" } } mooshroom_def.on_rightclick = function(self, clicker) - if mobs:feed_tame(self, clicker, 1, true, true) then return end - if mobs:protect(self, clicker) then return end - - if self.child then + --attempt to enter breed state + if mobs.enter_breed_state(self,clicker) then return end + + --make baby grow faster + if self.baby then + mobs.make_baby_grow_faster(self,clicker) + return + end + local item = clicker:get_wielded_item() -- Use shears to get mushrooms and turn mooshroom into cow if item:get_name() == mobs_mc.items.shears then @@ -139,14 +169,89 @@ mooshroom_def.on_rightclick = function(self, clicker) minetest.add_item(pos, {name = mobs_mc.items.mushroom_stew}) end end - mobs:capture_mob(self, clicker, 0, 5, 60, false, nil) end mobs:register_mob("mobs_mc:mooshroom", mooshroom_def) -- Spawning -mobs:spawn_specific("mobs_mc:cow", mobs_mc.spawn.grassland, {"air"}, 9, minetest.LIGHT_MAX+1, 30, 17000, 10, mobs_mc.spawn_height.overworld_min, mobs_mc.spawn_height.overworld_max) -mobs:spawn_specific("mobs_mc:mooshroom", mobs_mc.spawn.mushroom_island, {"air"}, 9, minetest.LIGHT_MAX+1, 30, 17000, 5, mobs_mc.spawn_height.overworld_min, mobs_mc.spawn_height.overworld_max) +mobs:spawn_specific( +"mobs_mc:cow", +"overworld", +"ground", +{ + "FlowerForest_beach", + "Forest_beach", + "StoneBeach", + "ColdTaiga_beach_water", + "Taiga_beach", + "Savanna_beach", + "Plains_beach", + "ExtremeHills_beach", + "ColdTaiga_beach", + "Swampland_shore", + "JungleM_shore", + "Jungle_shore", + "MesaPlateauFM_sandlevel", + "MesaPlateauF_sandlevel", + "MesaBryce_sandlevel", + "Mesa_sandlevel", + "Mesa", + "FlowerForest", + "Swampland", + "Taiga", + "ExtremeHills", + "Jungle", + "Savanna", + "BirchForest", + "MegaSpruceTaiga", + "MegaTaiga", + "ExtremeHills+", + "Forest", + "Plains", + "Desert", + "ColdTaiga", + "IcePlainsSpikes", + "SunflowerPlains", + "IcePlains", + "RoofedForest", + "ExtremeHills+_snowtop", + "MesaPlateauFM_grasstop", + "JungleEdgeM", + "ExtremeHillsM", + "JungleM", + "BirchForestM", + "MesaPlateauF", + "MesaPlateauFM", + "MesaPlateauF_grasstop", + "MesaBryce", + "JungleEdge", + "SavannaM", +}, +9, +minetest.LIGHT_MAX+1, +30, +17000, +10, +mobs_mc.spawn_height.water, +mobs_mc.spawn_height.overworld_max) + + + +mobs:spawn_specific( +"mobs_mc:mooshroom", +"overworld", +"ground", +{ +"MushroomIslandShore", +"MushroomIsland" +}, +9, +minetest.LIGHT_MAX+1, +30, +17000, +5, +mobs_mc.spawn_height.overworld_min, +mobs_mc.spawn_height.overworld_max) -- spawn egg mobs:register_egg("mobs_mc:cow", S("Cow"), "mobs_mc_spawn_icon_cow.png", 0) diff --git a/mods/ENTITIES/mobs_mc/creeper.lua b/mods/ENTITIES/mobs_mc/creeper.lua index 9ee9e9d24..999cc5f2d 100644 --- a/mods/ENTITIES/mobs_mc/creeper.lua +++ b/mods/ENTITIES/mobs_mc/creeper.lua @@ -1,6 +1,6 @@ --License for code WTFPL and otherwise stated in readmes -local S = minetest.get_translator("mobs_mc") +local S = minetest.get_translator(minetest.get_current_modname()) --################### --################### CREEPER @@ -12,6 +12,8 @@ local S = minetest.get_translator("mobs_mc") mobs:register_mob("mobs_mc:creeper", { type = "monster", spawn_class = "hostile", + hostile = true, + rotate = 270, hp_min = 20, hp_max = 20, xp_min = 5, @@ -33,26 +35,44 @@ mobs:register_mob("mobs_mc:creeper", { explode = "tnt_explode", distance = 16, }, - makes_footstep_sound = true, + makes_footstep_sound = false, walk_velocity = 1.05, - run_velocity = 2.1, + run_velocity = 3.25, runaway_from = { "mobs_mc:ocelot", "mobs_mc:cat" }, attack_type = "explode", + eye_height = 1.25, + --hssssssssssss explosion_strength = 3, - explosion_radius = 3.5, - explosion_damage_radius = 3.5, - explosiontimer_reset_radius = 6, - reach = 3, - explosion_timer = 1.5, + --explosion_radius = 3, + --explosion_damage_radius = 6, + --explosiontimer_reset_radius = 6, + reach = 1.5, + defuse_reach = 4, + explosion_timer = 0.3, allow_fuse_reset = true, stop_to_explode = true, + --head code + has_head = true, + head_bone = "head", + + swap_y_with_x = true, + reverse_head_yaw = true, + + head_bone_pos_y = 2.4, + head_bone_pos_z = 0, + + head_height_offset = 1.1, + head_direction_offset = 0, + head_pitch_modifier = 0, + --end head code + -- Force-ignite creeper with flint and steel and explode after 1.5 seconds. -- TODO: Make creeper flash after doing this as well. -- TODO: Test and debug this code. on_rightclick = function(self, clicker) - if self._forced_explosion_countdown_timer ~= nil then + if self._forced_explosion_countdown_timer then return end local item = clicker:get_wielded_item() @@ -72,11 +92,10 @@ mobs:register_mob("mobs_mc:creeper", { end end, do_custom = function(self, dtime) - if self._forced_explosion_countdown_timer ~= nil then + if self._forced_explosion_countdown_timer then self._forced_explosion_countdown_timer = self._forced_explosion_countdown_timer - dtime if self._forced_explosion_countdown_timer <= 0 then mobs:boom(self, mcl_util.get_object_center(self.object), self.explosion_strength) - self.object:remove() end end end, @@ -129,6 +148,7 @@ mobs:register_mob("mobs_mc:creeper", { }) mobs:register_mob("mobs_mc:creeper_charged", { + description = S("Charged Creeper"), type = "monster", spawn_class = "hostile", hp_min = 20, @@ -139,11 +159,15 @@ mobs:register_mob("mobs_mc:creeper_charged", { pathfinding = 1, visual = "mesh", mesh = "mobs_mc_creeper.b3d", + + --BOOM + textures = { {"mobs_mc_creeper.png", "mobs_mc_creeper_charge.png"}, }, visual_size = {x=3, y=3}, + rotate = 270, sounds = { attack = "tnt_ignite", death = "mobs_mc_creeper_death", @@ -152,18 +176,19 @@ mobs:register_mob("mobs_mc:creeper_charged", { explode = "tnt_explode", distance = 16, }, - makes_footstep_sound = true, + makes_footstep_sound = false, walk_velocity = 1.05, run_velocity = 2.1, runaway_from = { "mobs_mc:ocelot", "mobs_mc:cat" }, attack_type = "explode", explosion_strength = 6, - explosion_radius = 8, - explosion_damage_radius = 8, - explosiontimer_reset_radius = 6, - reach = 3, - explosion_timer = 1.5, + --explosion_radius = 3, + --explosion_damage_radius = 6, + --explosiontimer_reset_radius = 3, + reach = 1.5, + defuse_reach = 4, + explosion_timer = 0.3, allow_fuse_reset = true, stop_to_explode = true, @@ -171,7 +196,7 @@ mobs:register_mob("mobs_mc:creeper_charged", { -- TODO: Make creeper flash after doing this as well. -- TODO: Test and debug this code. on_rightclick = function(self, clicker) - if self._forced_explosion_countdown_timer ~= nil then + if self._forced_explosion_countdown_timer then return end local item = clicker:get_wielded_item() @@ -191,11 +216,10 @@ mobs:register_mob("mobs_mc:creeper_charged", { end end, do_custom = function(self, dtime) - if self._forced_explosion_countdown_timer ~= nil then + if self._forced_explosion_countdown_timer then self._forced_explosion_countdown_timer = self._forced_explosion_countdown_timer - dtime if self._forced_explosion_countdown_timer <= 0 then mobs:boom(self, mcl_util.get_object_center(self.object), self.explosion_strength) - self.object:remove() end end end, @@ -250,7 +274,158 @@ mobs:register_mob("mobs_mc:creeper_charged", { glow = 3, }) -mobs:spawn_specific("mobs_mc:creeper", mobs_mc.spawn.solid, {"air"}, 0, 7, 20, 16500, 2, mobs_mc.spawn_height.overworld_min, mobs_mc.spawn_height.overworld_max) +mobs:spawn_specific( +"mobs_mc:creeper", +"overworld", +"ground", +{ +"Mesa", +"FlowerForest", +"Swampland", +"Taiga", +"ExtremeHills", +"Jungle", +"Savanna", +"BirchForest", +"MegaSpruceTaiga", +"MegaTaiga", +"ExtremeHills+", +"Forest", +"Plains", +"Desert", +"ColdTaiga", +"MushroomIsland", +"IcePlainsSpikes", +"SunflowerPlains", +"IcePlains", +"RoofedForest", +"ExtremeHills+_snowtop", +"MesaPlateauFM_grasstop", +"JungleEdgeM", +"ExtremeHillsM", +"JungleM", +"BirchForestM", +"MesaPlateauF", +"MesaPlateauFM", +"MesaPlateauF_grasstop", +"MesaBryce", +"JungleEdge", +"SavannaM", +"FlowerForest_beach", +"Forest_beach", +"StoneBeach", +"ColdTaiga_beach_water", +"Taiga_beach", +"Savanna_beach", +"Plains_beach", +"ExtremeHills_beach", +"ColdTaiga_beach", +"Swampland_shore", +"MushroomIslandShore", +"JungleM_shore", +"Jungle_shore", +"MesaPlateauFM_sandlevel", +"MesaPlateauF_sandlevel", +"MesaBryce_sandlevel", +"Mesa_sandlevel", +"RoofedForest_ocean", +"JungleEdgeM_ocean", +"BirchForestM_ocean", +"BirchForest_ocean", +"IcePlains_deep_ocean", +"Jungle_deep_ocean", +"Savanna_ocean", +"MesaPlateauF_ocean", +"ExtremeHillsM_deep_ocean", +"Savanna_deep_ocean", +"SunflowerPlains_ocean", +"Swampland_deep_ocean", +"Swampland_ocean", +"MegaSpruceTaiga_deep_ocean", +"ExtremeHillsM_ocean", +"JungleEdgeM_deep_ocean", +"SunflowerPlains_deep_ocean", +"BirchForest_deep_ocean", +"IcePlainsSpikes_ocean", +"Mesa_ocean", +"StoneBeach_ocean", +"Plains_deep_ocean", +"JungleEdge_deep_ocean", +"SavannaM_deep_ocean", +"Desert_deep_ocean", +"Mesa_deep_ocean", +"ColdTaiga_deep_ocean", +"Plains_ocean", +"MesaPlateauFM_ocean", +"Forest_deep_ocean", +"JungleM_deep_ocean", +"FlowerForest_deep_ocean", +"MushroomIsland_ocean", +"MegaTaiga_ocean", +"StoneBeach_deep_ocean", +"IcePlainsSpikes_deep_ocean", +"ColdTaiga_ocean", +"SavannaM_ocean", +"MesaPlateauF_deep_ocean", +"MesaBryce_deep_ocean", +"ExtremeHills+_deep_ocean", +"ExtremeHills_ocean", +"MushroomIsland_deep_ocean", +"Forest_ocean", +"MegaTaiga_deep_ocean", +"JungleEdge_ocean", +"MesaBryce_ocean", +"MegaSpruceTaiga_ocean", +"ExtremeHills+_ocean", +"Jungle_ocean", +"RoofedForest_deep_ocean", +"IcePlains_ocean", +"FlowerForest_ocean", +"ExtremeHills_deep_ocean", +"MesaPlateauFM_deep_ocean", +"Desert_ocean", +"Taiga_ocean", +"BirchForestM_deep_ocean", +"Taiga_deep_ocean", +"JungleM_ocean", +"FlowerForest_underground", +"JungleEdge_underground", +"StoneBeach_underground", +"MesaBryce_underground", +"Mesa_underground", +"RoofedForest_underground", +"Jungle_underground", +"Swampland_underground", +"MushroomIsland_underground", +"BirchForest_underground", +"Plains_underground", +"MesaPlateauF_underground", +"ExtremeHills_underground", +"MegaSpruceTaiga_underground", +"BirchForestM_underground", +"SavannaM_underground", +"MesaPlateauFM_underground", +"Desert_underground", +"Savanna_underground", +"Forest_underground", +"SunflowerPlains_underground", +"ColdTaiga_underground", +"IcePlains_underground", +"IcePlainsSpikes_underground", +"MegaTaiga_underground", +"Taiga_underground", +"ExtremeHills+_underground", +"JungleM_underground", +"ExtremeHillsM_underground", +"JungleEdgeM_underground", +}, +0, +7, +20, +16500, +2, +mobs_mc.spawn_height.overworld_min, +mobs_mc.spawn_height.overworld_max) -- spawn eggs mobs:register_egg("mobs_mc:creeper", S("Creeper"), "mobs_mc_spawn_icon_creeper.png", 0) diff --git a/mods/ENTITIES/mobs_mc/depends.txt b/mods/ENTITIES/mobs_mc/depends.txt index 4a2756661..674eb8094 100644 --- a/mods/ENTITIES/mobs_mc/depends.txt +++ b/mods/ENTITIES/mobs_mc/depends.txt @@ -1,12 +1 @@ -mcl_init -mcl_particles -default? -mcl_mobs -mcl_tnt? -mcl_bows? -mcl_throwing? -mcl_fishing? -bones? -mesecons_materials? -mobs_mc_gameconfig? -doc_items? +mcl_mobs \ No newline at end of file diff --git a/mods/ENTITIES/mobs_mc/description.txt b/mods/ENTITIES/mobs_mc/description.txt deleted file mode 100644 index c57195fea..000000000 --- a/mods/ENTITIES/mobs_mc/description.txt +++ /dev/null @@ -1 +0,0 @@ -Adds Minecraft-like monsters and animals. diff --git a/mods/ENTITIES/mobs_mc/ender_dragon.lua b/mods/ENTITIES/mobs_mc/ender_dragon.lua index c579213a0..bafb3f84a 100644 --- a/mods/ENTITIES/mobs_mc/ender_dragon.lua +++ b/mods/ENTITIES/mobs_mc/ender_dragon.lua @@ -2,20 +2,28 @@ --################### ENDERDRAGON --################### -local S = minetest.get_translator("mobs_mc") +local S = minetest.get_translator(minetest.get_current_modname()) mobs:register_mob("mobs_mc:enderdragon", { + description = S("Ender Dragon"), type = "monster", spawn_class = "hostile", - pathfinding = 1, attacks_animals = true, walk_chance = 100, + rotate = 270, + tilt_fly = true, + hostile = true, + shoot_arrow = function(self, pos, dir) + -- 2-4 damage per arrow + local dmg = math.random(2,4) + mobs.shoot_projectile_handling("mobs_mc:dragon_fireball", pos, dir, self.object:get_yaw(), self.object, nil, dmg) + end, hp_max = 200, hp_min = 200, xp_min = 500, xp_max = 500, - collisionbox = {-2, 3, -2, 2, 5, 2}, - physical = false, + collisionbox = {-2, 0, -2, 2, 2, 2}, + eye_height = 1, visual = "mesh", mesh = "mobs_mc_dragon.b3d", textures = { @@ -23,8 +31,10 @@ mobs:register_mob("mobs_mc:enderdragon", { }, visual_size = {x=3, y=3}, view_range = 35, + reach = 20, walk_velocity = 6, run_velocity = 6, + can_despawn = false, sounds = { -- TODO: more sounds shoot_attack = "mobs_mc_ender_dragon_shoot", @@ -45,12 +55,10 @@ mobs:register_mob("mobs_mc:enderdragon", { lava_damage = 0, fire_damage = 0, on_rightclick = nil, - attack_type = "dogshoot", + attack_type = "projectile", arrow = "mobs_mc:dragon_fireball", shoot_interval = 0.5, shoot_offset = -1.0, - xp_min = 12000, - xp_max = 12000, animation = { fly_speed = 8, stand_speed = 8, stand_start = 0, stand_end = 20, @@ -58,21 +66,53 @@ mobs:register_mob("mobs_mc:enderdragon", { run_start = 0, run_end = 20, }, ignores_nametag = true, - on_die = function(self, own_pos) - if self._egg_spawn_pos then - local pos = minetest.string_to_pos(self._egg_spawn_pos) - --if minetest.get_node(pos).buildable_to then - minetest.set_node(pos, {name = mobs_mc.items.dragon_egg}) - return - --end + do_custom = function(self) + mcl_bossbars.update_boss(self.object, "Ender Dragon", "light_purple") + for _, obj in ipairs(minetest.get_objects_inside_radius(self.object:get_pos(), 80)) do + local luaentity = obj:get_luaentity() + if luaentity and luaentity.name == "mcl_end:crystal" then + if luaentity.beam then + if luaentity.beam == self.beam then + break + end + else + if self.beam then + self.beam:remove() + end + minetest.add_entity(self.object:get_pos(), "mcl_end:crystal_beam"):get_luaentity():init(self.object, obj) + break + end + end + end + if self._portal_pos then + -- migrate old format + if type(self._portal_pos) == "string" then + self._portal_pos = minetest.string_to_pos(self._portal_pos) + end + local portal_center = vector.add(self._portal_pos, vector.new(3, 11, 3)) + local pos = self.object:get_pos() + if vector.distance(pos, portal_center) > 50 then + self.object:set_pos(self._last_good_pos or portal_center) + else + self._last_good_pos = pos + end + end + end, + on_die = function(self, pos) + if self._portal_pos then + mcl_portals.spawn_gateway_portal() + mcl_structures.call_struct(self._portal_pos, "end_exit_portal_open") + if self._initial then + mcl_experience.throw_experience(pos, 11500) -- 500 + 11500 = 12000 + minetest.set_node(vector.add(self._portal_pos, vector.new(3, 5, 3)), {name = mobs_mc.items.dragon_egg}) + end end - minetest.add_item(own_pos, mobs_mc.items.dragon_egg) end, fire_resistant = true, }) - -local mobs_griefing = minetest.settings:get_bool("mobs_griefing") ~= false +--TODO: replace this setting by a proper gamerules system +local mobs_griefing = minetest.settings:get_bool("mobs_griefing", true) -- dragon fireball (projectile) mobs:register_arrow("mobs_mc:dragon_fireball", { @@ -99,8 +139,13 @@ mobs:register_arrow("mobs_mc:dragon_fireball", { -- node hit, explode hit_node = function(self, pos, node) - mobs:boom(self, pos, 2) + --mobs:boom(self, pos, 2) + if mobs_griefing then + mcl_explosions.explode(self.object:get_pos(), 2, { drop_chance = 1.0 }) + end end }) mobs:register_egg("mobs_mc:enderdragon", S("Ender Dragon"), "mobs_mc_spawn_icon_dragon.png", 0, true) + +--mcl_wip.register_wip_item("mobs_mc:enderdragon") diff --git a/mods/ENTITIES/mobs_mc/enderman.lua b/mods/ENTITIES/mobs_mc/enderman.lua index b2971ae45..a821bd769 100644 --- a/mods/ENTITIES/mobs_mc/enderman.lua +++ b/mods/ENTITIES/mobs_mc/enderman.lua @@ -24,9 +24,11 @@ -- added rain damage. -- fixed the grass_with_dirt issue. -local S = minetest.get_translator("mobs_mc") +local S = minetest.get_translator(minetest.get_current_modname()) -local telesound = function(pos, is_source) +local vector = vector + +local function telesound(pos, is_source) local snd if is_source then snd = "mobs_mc_enderman_teleport_src" @@ -190,20 +192,22 @@ end local mobs_griefing = minetest.settings:get_bool("mobs_griefing") ~= false mobs:register_mob("mobs_mc:enderman", { + description = S("Enderman"), type = "monster", spawn_class = "passive", - passive = true, - pathfinding = 1, + neutral = true, hp_min = 40, hp_max = 40, xp_min = 5, xp_max = 5, + rotate = 270, collisionbox = {-0.3, -0.01, -0.3, 0.3, 2.89, 0.3}, visual = "mesh", mesh = "mobs_mc_enderman.b3d", textures = create_enderman_textures(), visual_size = {x=3, y=3}, makes_footstep_sound = true, + eye_height = 2.5, sounds = { -- TODO: Custom war cry sound war_cry = "mobs_sandmonster", @@ -212,8 +216,8 @@ mobs:register_mob("mobs_mc:enderman", { random = {name="mobs_mc_enderman_random", gain=0.5}, distance = 16, }, - walk_velocity = 0.2, - run_velocity = 3.4, + walk_velocity = 1, + run_velocity = 4, damage = 7, reach = 2, drops = { @@ -223,6 +227,22 @@ mobs:register_mob("mobs_mc:enderman", { max = 1, looting = "common"}, }, + + --head code + has_head = false, + head_bone = "head.low", + + swap_y_with_x = false, + reverse_head_yaw = false, + + head_bone_pos_y = 2.4, + head_bone_pos_z = 0, + + head_height_offset = 1.1, + head_direction_offset = 0, + head_pitch_modifier = 0, + --end head code + animation = select_enderman_animation("normal"), _taken_node = "", do_custom = function(self, dtime) @@ -242,46 +262,49 @@ mobs:register_mob("mobs_mc:enderman", { }) end -- RAIN DAMAGE / EVASIVE WARP BEHAVIOUR HERE. - if mcl_weather.state == "rain" or mcl_weather.state == "lightning" then - local damage = true - local enderpos = self.object:get_pos() - enderpos.y = enderpos.y+2.89 - local height = {x=enderpos.x, y=enderpos.y+512,z=enderpos.z} - local ray = minetest.raycast(enderpos, height, true) - -- Check for blocks above enderman. - for pointed_thing in ray do - if pointed_thing.type == "node" then - local nn = minetest.get_node(minetest.get_pointed_thing_position(pointed_thing)).name - local def = minetest.registered_nodes[nn] - if (not def) or def.walkable then - -- There's a node in the way. Delete arrow without damage - damage = false - break + local dim = mcl_worlds.pos_to_dimension(enderpos) + if dim == "overworld" then + if mcl_weather.state == "rain" or mcl_weather.state == "lightning" then + local damage = true + local enderpos = self.object:get_pos() + enderpos.y = enderpos.y+2.89 + local height = {x=enderpos.x, y=enderpos.y+512,z=enderpos.z} + local ray = minetest.raycast(enderpos, height, true) + -- Check for blocks above enderman. + for pointed_thing in ray do + if pointed_thing.type == "node" then + local nn = minetest.get_node(minetest.get_pointed_thing_position(pointed_thing)).name + local def = minetest.registered_nodes[nn] + if (not def) or def.walkable then + -- There's a node in the way. Delete arrow without damage + damage = false + break + end end end - end - if damage == true then - self.state = "" - --rain hurts enderman - self.object:punch(self.object, 1.0, { - full_punch_interval=1.0, - damage_groups={fleshy=self._damage}, - }, nil) - --randomly teleport hopefully under something. - self:teleport(nil) + if damage == true then + self.state = "" + --rain hurts enderman + self.object:punch(self.object, 1.0, { + full_punch_interval=1.0, + damage_groups={fleshy=self._damage}, + }, nil) + --randomly teleport hopefully under something. + self:teleport(nil) + end end - end + else return end -- AGRESSIVELY WARP/CHASE PLAYER BEHAVIOUR HERE. if self.state == "attack" then --if (minetest.get_timeofday() * 24000) > 5001 and (minetest.get_timeofday() * 24000) < 19000 then --self:teleport(nil) --self.state = "" --else - if self.attack then - local target = self.attack + if self.attacking then + local target = self.attacking local pos = target:get_pos() - if pos ~= nil then + if pos then if vector.distance(self.object:get_pos(), target:get_pos()) > 10 then self:teleport(target) end @@ -292,19 +315,20 @@ mobs:register_mob("mobs_mc:enderman", { -- ARROW / DAYTIME PEOPLE AVOIDANCE BEHAVIOUR HERE. -- Check for arrows and people nearby. local enderpos = self.object:get_pos() - local objs = minetest.get_objects_inside_radius(enderpos, 4) + enderpos.y = enderpos.y + 1.5 + local objs = minetest.get_objects_inside_radius(enderpos, 2) for n = 1, #objs do local obj = objs[n] if obj then - if minetest.is_player(obj) then + --if minetest.is_player(obj) then -- Warp from players during day. --if (minetest.get_timeofday() * 24000) > 5001 and (minetest.get_timeofday() * 24000) < 19000 then -- self:teleport(nil) --end - else + if not obj:is_player() then local lua = obj:get_luaentity() if lua then - if lua.name == "mcl_bows:arrow_entity" then + if lua.name == "mcl_bows:arrow_entity" or lua.name == "mcl_throwing:snowball_entity" then self:teleport(nil) end end @@ -319,41 +343,55 @@ mobs:register_mob("mobs_mc:enderman", { -- self:teleport(nil) -- self.state = "" --else - if self.attack ~= nil then - self.state = 'attack' + if self.attack and not minetest.settings:get_bool("creative_mode") then + self.state = "attack" end --end end -- Check to see if people are near by enough to look at us. - local objs = minetest.get_objects_inside_radius(enderpos, 64) - local obj - for n = 1, #objs do - obj = objs[n] - if obj then - if minetest.is_player(obj) then + for _,obj in pairs(minetest.get_connected_players()) do + + --check if they are within radius + local player_pos = obj:get_pos() + if player_pos then -- prevent crashing in 1 in a million scenario + + local ender_distance = vector.distance(enderpos, player_pos) + if ender_distance <= 64 then + -- Check if they are looking at us. - local player_pos = obj:get_pos() local look_dir_not_normalized = obj:get_look_dir() local look_dir = vector.normalize(look_dir_not_normalized) - local look_pos = vector.new({x = look_dir.x+player_pos.x, y = look_dir.y+player_pos.y + 1.5, z = look_dir.z+player_pos.z}) -- Arbitrary value (1.5) is head level according to player info mod. - -- Cast up to 64 to see if player is looking at enderman. - for n = 1,64,.25 do - local node = minetest.get_node(look_pos) - if node.name ~= "air" then - break - end - if look_pos.x-1enderpos.x and look_pos.y-2.89enderpos.y and look_pos.z-1enderpos.z then + local player_eye_height = obj:get_properties().eye_height + + --skip player if they have no data - log it + if not player_eye_height then + minetest.log("error", "Enderman at location: ".. dump(enderpos).." has indexed a null player!") + else + + --calculate very quickly the exact location the player is looking + --within the distance between the two "heads" (player and enderman) + local look_pos = vector.new(player_pos.x, player_pos.y + player_eye_height, player_pos.z) + local look_pos_base = look_pos + local ender_eye_pos = vector.new(enderpos.x, enderpos.y + 2.75, enderpos.z) + local eye_distance_from_player = vector.distance(ender_eye_pos, look_pos) + look_pos = vector.add(look_pos, vector.multiply(look_dir, eye_distance_from_player)) + + --if looking in general head position, turn hostile + if minetest.line_of_sight(ender_eye_pos, look_pos_base) and vector.distance(look_pos, ender_eye_pos) <= 0.4 then self.provoked = "staring" - self.attack = minetest.get_player_by_name(obj:get_player_name()) + self.state = "stand" + self.hostile = false break + --begin attacking the player else if self.provoked == "staring" then self.provoked = "broke_contact" + self.hostile = true + self.state = "attack" + self.attacking = obj end end - look_pos.x = look_pos.x + (.25 * look_dir.x) - look_pos.y = look_pos.y + (.25 * look_dir.y) - look_pos.z = look_pos.z + (.25 * look_dir.z) + end end end @@ -416,14 +454,14 @@ mobs:register_mob("mobs_mc:enderman", { self.base_texture = create_enderman_textures(block_type, self._taken_node) self.object:set_properties({ textures = self.base_texture }) self.animation = select_enderman_animation("block") - mobs:set_animation(self, self.animation.current) + mobs.set_mob_animation(self, self.animation.current) if def.sounds and def.sounds.dug then minetest.sound_play(def.sounds.dug, {pos = take_pos, max_hear_distance = 16}, true) end end end end - elseif self._taken_node ~= nil and self._taken_node ~= "" and self._take_place_timer >= self._next_take_place_time then + elseif self._taken_node and self._taken_node ~= "" and self._take_place_timer >= self._next_take_place_time then -- Place taken node self._take_place_timer = 0 self._next_take_place_time = math.random(take_frequency_min, take_frequency_max) @@ -439,7 +477,7 @@ mobs:register_mob("mobs_mc:enderman", { local def = minetest.registered_nodes[self._taken_node] -- Update animation accordingly (removes visible block) self.animation = select_enderman_animation("normal") - mobs:set_animation(self, self.animation.current) + mobs.set_mob_animation(self, self.animation.current) if def.sounds and def.sounds.place then minetest.sound_play(def.sounds.place, {pos = place_pos, max_hear_distance = 16}, true) end @@ -449,12 +487,12 @@ mobs:register_mob("mobs_mc:enderman", { end end, do_teleport = function(self, target) - if target ~= nil then + if target then local target_pos = target:get_pos() -- Find all solid nodes below air in a 10×10×10 cuboid centered on the target local nodes = minetest.find_nodes_in_area_under_air(vector.subtract(target_pos, 5), vector.add(target_pos, 5), {"group:solid", "group:cracky", "group:crumbly"}) local telepos - if nodes ~= nil then + if nodes then if #nodes > 0 then -- Up to 64 attempts to teleport for n=1, math.min(64, #nodes) do @@ -489,7 +527,7 @@ mobs:register_mob("mobs_mc:enderman", { -- We need to add (or subtract) different random numbers to each vector component, so it couldn't be done with a nice single vector.add() or .subtract(): local randomCube = vector.new( pos.x + 8*(pr:next(0,16)-8), pos.y + 8*(pr:next(0,16)-8), pos.z + 8*(pr:next(0,16)-8) ) local nodes = minetest.find_nodes_in_area_under_air(vector.subtract(randomCube, 4), vector.add(randomCube, 4), {"group:solid", "group:cracky", "group:crumbly"}) - if nodes ~= nil then + if nodes then if #nodes > 0 then -- Up to 8 low-level (in total up to 8*8 = 64) attempts to teleport for n=1, math.min(8, #nodes) do @@ -521,19 +559,21 @@ mobs:register_mob("mobs_mc:enderman", { end, on_die = function(self, pos) -- Drop carried node on death - if self._taken_node ~= nil and self._taken_node ~= "" then + if self._taken_node and self._taken_node ~= "" then minetest.add_item(pos, self._taken_node) end end, do_punch = function(self, hitter, tflp, tool_caps, dir) -- damage from rain caused by itself so we don't want it to attack itself. - if hitter ~= self.object and hitter ~= nil then + if hitter ~= self.object and hitter then --if (minetest.get_timeofday() * 24000) > 5001 and (minetest.get_timeofday() * 24000) < 19000 then -- self:teleport(nil) --else + if pr:next(1, 8) == 8 then --FIXME: real mc rate self:teleport(hitter) - self.attack=hitter - self.state="attack" + end + self.attack=hitter + self.state="attack" --end end end, @@ -541,16 +581,194 @@ mobs:register_mob("mobs_mc:enderman", { water_damage = 8, view_range = 64, fear_height = 4, - attack_type = "dogfight", + attack_type = "punch", }) -- End spawn -mobs:spawn_specific("mobs_mc:enderman", mobs_mc.spawn.solid, {"air"}, 0, minetest.LIGHT_MAX+1, 30, 3000, 12, mobs_mc.spawn_height.end_min, mobs_mc.spawn_height.end_max) +mobs:spawn_specific( +"mobs_mc:enderman", +"end", +"ground", +{ +"End" +}, +0, +minetest.LIGHT_MAX+1, +30, +3000, +12, +mobs_mc.spawn_height.end_min, +mobs_mc.spawn_height.end_max) -- Overworld spawn -mobs:spawn_specific("mobs_mc:enderman", mobs_mc.spawn.solid, {"air"}, 0, 7, 30, 19000, 2, mobs_mc.spawn_height.overworld_min, mobs_mc.spawn_height.overworld_max) +mobs:spawn_specific( +"mobs_mc:enderman", +"overworld", +"ground", +{ +"Mesa", +"FlowerForest", +"Swampland", +"Taiga", +"ExtremeHills", +"Jungle", +"Savanna", +"BirchForest", +"MegaSpruceTaiga", +"MegaTaiga", +"ExtremeHills+", +"Forest", +"Plains", +"Desert", +"ColdTaiga", +"MushroomIsland", +"IcePlainsSpikes", +"SunflowerPlains", +"IcePlains", +"RoofedForest", +"ExtremeHills+_snowtop", +"MesaPlateauFM_grasstop", +"JungleEdgeM", +"ExtremeHillsM", +"JungleM", +"BirchForestM", +"MesaPlateauF", +"MesaPlateauFM", +"MesaPlateauF_grasstop", +"MesaBryce", +"JungleEdge", +"SavannaM", +"FlowerForest_beach", +"Forest_beach", +"StoneBeach", +"ColdTaiga_beach_water", +"Taiga_beach", +"Savanna_beach", +"Plains_beach", +"ExtremeHills_beach", +"ColdTaiga_beach", +"Swampland_shore", +"MushroomIslandShore", +"JungleM_shore", +"Jungle_shore", +"MesaPlateauFM_sandlevel", +"MesaPlateauF_sandlevel", +"MesaBryce_sandlevel", +"Mesa_sandlevel", +"RoofedForest_ocean", +"JungleEdgeM_ocean", +"BirchForestM_ocean", +"BirchForest_ocean", +"IcePlains_deep_ocean", +"Jungle_deep_ocean", +"Savanna_ocean", +"MesaPlateauF_ocean", +"ExtremeHillsM_deep_ocean", +"Savanna_deep_ocean", +"SunflowerPlains_ocean", +"Swampland_deep_ocean", +"Swampland_ocean", +"MegaSpruceTaiga_deep_ocean", +"ExtremeHillsM_ocean", +"JungleEdgeM_deep_ocean", +"SunflowerPlains_deep_ocean", +"BirchForest_deep_ocean", +"IcePlainsSpikes_ocean", +"Mesa_ocean", +"StoneBeach_ocean", +"Plains_deep_ocean", +"JungleEdge_deep_ocean", +"SavannaM_deep_ocean", +"Desert_deep_ocean", +"Mesa_deep_ocean", +"ColdTaiga_deep_ocean", +"Plains_ocean", +"MesaPlateauFM_ocean", +"Forest_deep_ocean", +"JungleM_deep_ocean", +"FlowerForest_deep_ocean", +"MushroomIsland_ocean", +"MegaTaiga_ocean", +"StoneBeach_deep_ocean", +"IcePlainsSpikes_deep_ocean", +"ColdTaiga_ocean", +"SavannaM_ocean", +"MesaPlateauF_deep_ocean", +"MesaBryce_deep_ocean", +"ExtremeHills+_deep_ocean", +"ExtremeHills_ocean", +"MushroomIsland_deep_ocean", +"Forest_ocean", +"MegaTaiga_deep_ocean", +"JungleEdge_ocean", +"MesaBryce_ocean", +"MegaSpruceTaiga_ocean", +"ExtremeHills+_ocean", +"Jungle_ocean", +"RoofedForest_deep_ocean", +"IcePlains_ocean", +"FlowerForest_ocean", +"ExtremeHills_deep_ocean", +"MesaPlateauFM_deep_ocean", +"Desert_ocean", +"Taiga_ocean", +"BirchForestM_deep_ocean", +"Taiga_deep_ocean", +"JungleM_ocean", +"FlowerForest_underground", +"JungleEdge_underground", +"StoneBeach_underground", +"MesaBryce_underground", +"Mesa_underground", +"RoofedForest_underground", +"Jungle_underground", +"Swampland_underground", +"MushroomIsland_underground", +"BirchForest_underground", +"Plains_underground", +"MesaPlateauF_underground", +"ExtremeHills_underground", +"MegaSpruceTaiga_underground", +"BirchForestM_underground", +"SavannaM_underground", +"MesaPlateauFM_underground", +"Desert_underground", +"Savanna_underground", +"Forest_underground", +"SunflowerPlains_underground", +"ColdTaiga_underground", +"IcePlains_underground", +"IcePlainsSpikes_underground", +"MegaTaiga_underground", +"Taiga_underground", +"ExtremeHills+_underground", +"JungleM_underground", +"ExtremeHillsM_underground", +"JungleEdgeM_underground", +}, +0, +7, +30, +19000, +2, +mobs_mc.spawn_height.overworld_min, +mobs_mc.spawn_height.overworld_max) + -- Nether spawn (rare) -mobs:spawn_specific("mobs_mc:enderman", mobs_mc.spawn.solid, {"air"}, 0, 7, 30, 27500, 4, mobs_mc.spawn_height.nether_min, mobs_mc.spawn_height.nether_max) +mobs:spawn_specific( +"mobs_mc:enderman", +"nether", +"ground", +{ +"Nether" +}, +0, +7, +30, +27500, +4, +mobs_mc.spawn_height.nether_min, +mobs_mc.spawn_height.nether_max) -- spawn eggs mobs:register_egg("mobs_mc:enderman", S("Enderman"), "mobs_mc_spawn_icon_enderman.png", 0) diff --git a/mods/ENTITIES/mobs_mc/endermite.lua b/mods/ENTITIES/mobs_mc/endermite.lua index da3922a10..29a887c06 100644 --- a/mods/ENTITIES/mobs_mc/endermite.lua +++ b/mods/ENTITIES/mobs_mc/endermite.lua @@ -2,18 +2,22 @@ --################### ENDERMITE --################### -local S = minetest.get_translator("mobs_mc") +local S = minetest.get_translator(minetest.get_current_modname()) mobs:register_mob("mobs_mc:endermite", { + description = S("Endermite"), type = "monster", spawn_class = "hostile", passive = false, + rotate = 270, + hostile = true, hp_min = 8, hp_max = 8, xp_min = 3, xp_max = 3, armor = {fleshy = 100, arthropod = 100}, group_attack = true, + attack_type = "punch", collisionbox = {-0.2, -0.01, -0.2, 0.2, 0.29, 0.2}, visual = "mesh", mesh = "mobs_mc_endermite.b3d", diff --git a/mods/ENTITIES/mobs_mc/ghast.lua b/mods/ENTITIES/mobs_mc/ghast.lua index 679a28c13..dc47411fd 100644 --- a/mods/ENTITIES/mobs_mc/ghast.lua +++ b/mods/ENTITIES/mobs_mc/ghast.lua @@ -3,7 +3,7 @@ --made for MC like Survival game --License for code WTFPL and otherwise stated in readmes -local S = minetest.get_translator("mobs_mc") +local S = minetest.get_translator(minetest.get_current_modname()) --################### --################### GHAST @@ -11,15 +11,20 @@ local S = minetest.get_translator("mobs_mc") mobs:register_mob("mobs_mc:ghast", { + description = S("Ghast"), type = "monster", spawn_class = "hostile", - pathfinding = 1, group_attack = true, + hostile = true, + fly_random_while_attack = true, hp_min = 10, hp_max = 10, + rotate = 270, xp_min = 5, xp_max = 5, - collisionbox = {-2, 5, -2, 2, 9, 2}, + reach = 20, + eye_height = 2.5, + collisionbox = {-2, 0, -2, 2, 4, 2}, visual = "mesh", mesh = "mobs_mc_ghast.b3d", textures = { @@ -35,8 +40,10 @@ mobs:register_mob("mobs_mc:ghast", { -- TODO: damage -- TODO: better death }, + walk_velocity = 1.6, run_velocity = 3.2, + drops = { {name = mobs_mc.items.gunpowder, chance = 1, min = 0, max = 2, looting = "common"}, {name = mobs_mc.items.ghast_tear, chance = 10/6, min = 0, max = 1, looting = "common", looting_ignore_chance = true}, @@ -47,55 +54,86 @@ mobs:register_mob("mobs_mc:ghast", { walk_start = 0, walk_end = 40, run_start = 0, run_end = 40, }, + fall_damage = 0, - view_range = 100, - attack_type = "dogshoot", - arrow = "mobs_mc:fireball", - shoot_interval = 3.5, - shoot_offset = -5, - dogshoot_switch = 1, - dogshoot_count_max =1, - passive = false, - jump = true, - jump_height = 4, + view_range = 28, + attack_type = "projectile", + arrow = "mobs_mc:ghast_fireball", floats=1, fly = true, makes_footstep_sound = false, - instant_death = true, fire_resistant = true, + projectile_cooldown_min = 5, + projectile_cooldown_max = 7, + shoot_arrow = function(self, pos, dir) + -- 2-4 damage per arrow + local dmg = math.random(2,4) + mobs.shoot_projectile_handling("mobs_mc:ghast_fireball", pos, dir, self.object:get_yaw(), self.object, 11, dmg,nil,nil,nil,-0.6) + end, + --[[ + do_custom = function(self) + if self.firing == true then + self.base_texture = {"mobs_mc_ghast_firing.png"} + self.object:set_properties({textures=self.base_texture}) + else + self.base_texture = {"mobs_mc_ghast.png"} + self.object:set_properties({textures=self.base_texture}) + end + end, + ]]-- }) -mobs:spawn_specific("mobs_mc:ghast", mobs_mc.spawn.nether, {"air"}, 0, minetest.LIGHT_MAX+1, 30, 18000, 2, mobs_mc.spawn_height.nether_min, mobs_mc.spawn_height.nether_max) +mobs:spawn_specific( +"mobs_mc:ghast", +"nether", +"ground", +{ +"Nether" +}, +0, +minetest.LIGHT_MAX+1, +30, +18000, +2, +mobs_mc.spawn_height.nether_min, +mobs_mc.spawn_height.nether_max) -- fireball (projectile) -mobs:register_arrow("mobs_mc:fireball", { +mobs:register_arrow("mobs_mc:ghast_fireball", { visual = "sprite", visual_size = {x = 1, y = 1}, textures = {"mcl_fire_fire_charge.png"}, velocity = 15, + collisionbox = {-.5, -.5, -.5, .5, .5, .5}, + tail = 1, + tail_texture = "mobs_mc_spit.png^[colorize:black:255", --repurpose spit texture + tail_size = 5, + _is_fireball = true, hit_player = function(self, player) - if rawget(_G, "armor") and armor.last_damage_types then - armor.last_damage_types[player:get_player_name()] = "fireball" - end + --[[ player:punch(self.object, 1.0, { full_punch_interval = 1.0, damage_groups = {fleshy = 6}, }, nil) - mobs:boom(self, self.object:get_pos(), 1, true) + ]]-- + --mobs:boom(self, self.object:get_pos(), 1, true) + mcl_explosions.explode(self.object:get_pos(), 3,{ drop_chance = 1.0 }) end, hit_mob = function(self, mob) mob:punch(self.object, 1.0, { full_punch_interval = 1.0, - damage_groups = {fleshy = 6}, + damage_groups = {fleshy = self._damage}, }, nil) - mobs:boom(self, self.object:get_pos(), 1, true) + --mobs:boom(self, self.object:get_pos(), 1, true) + mcl_explosions.explode(self.object:get_pos(), 3,{ drop_chance = 1.0 }) end, hit_node = function(self, pos, node) - mobs:boom(self, pos, 1, true) + --mobs:boom(self, pos, 1, true) + mcl_explosions.explode(self.object:get_pos(), 3,{ drop_chance = 1.0 }) end }) diff --git a/mods/ENTITIES/mobs_mc/guardian.lua b/mods/ENTITIES/mobs_mc/guardian.lua index 13c857ea3..3e1a4f853 100644 --- a/mods/ENTITIES/mobs_mc/guardian.lua +++ b/mods/ENTITIES/mobs_mc/guardian.lua @@ -2,9 +2,10 @@ --################### GUARDIAN --################### -local S = minetest.get_translator("mobs_mc") +local S = minetest.get_translator(minetest.get_current_modname()) mobs:register_mob("mobs_mc:guardian", { + description = S("Guardian"), type = "monster", spawn_class = "hostile", hp_min = 30, @@ -12,8 +13,8 @@ mobs:register_mob("mobs_mc:guardian", { xp_min = 10, xp_max = 10, breath_max = -1, - passive = false, - attack_type = "dogfight", + passive = false, + attack_type = "punch", pathfinding = 1, view_range = 16, walk_velocity = 2, @@ -93,7 +94,6 @@ mobs:register_mob("mobs_mc:guardian", { makes_footstep_sound = false, fly_in = { mobs_mc.items.water_source, mobs_mc.items.river_water_source }, jump = false, - view_range = 16, }) -- Spawning disabled due to size issues diff --git a/mods/ENTITIES/mobs_mc/guardian_elder.lua b/mods/ENTITIES/mobs_mc/guardian_elder.lua index a58a4a5b7..2bb0e984a 100644 --- a/mods/ENTITIES/mobs_mc/guardian_elder.lua +++ b/mods/ENTITIES/mobs_mc/guardian_elder.lua @@ -4,9 +4,10 @@ --################### GUARDIAN --################### -local S = minetest.get_translator("mobs_mc") +local S = minetest.get_translator(minetest.get_current_modname()) mobs:register_mob("mobs_mc:guardian_elder", { + description = S("Elder Guardian"), type = "monster", spawn_class = "hostile", hp_min = 80, @@ -14,8 +15,8 @@ mobs:register_mob("mobs_mc:guardian_elder", { xp_min = 10, xp_max = 10, breath_max = -1, - passive = false, - attack_type = "dogfight", + passive = false, + attack_type = "punch", pathfinding = 1, view_range = 16, walk_velocity = 2, @@ -103,10 +104,9 @@ mobs:register_mob("mobs_mc:guardian_elder", { makes_footstep_sound = false, fly_in = { mobs_mc.items.water_source, mobs_mc.items.river_water_source }, jump = false, - view_range = 16, }) --- Spawning disabled due to size issues +-- Spawning disabled due to size issues <- what do you mean? -j4i -- TODO: Re-enable spawning -- mobs:spawn_specific("mobs_mc:guardian_elder", mobs_mc.spawn.water, mobs_mc.spawn_water, 0, minetest.LIGHT_MAX+1, 30, 40000, 2, mobs_mc.spawn_height.overworld_min, mobs_mc.spawn_height.water-18) diff --git a/mods/ENTITIES/mobs_mc/horse.lua b/mods/ENTITIES/mobs_mc/horse.lua index b9d82660c..4b33515d5 100644 --- a/mods/ENTITIES/mobs_mc/horse.lua +++ b/mods/ENTITIES/mobs_mc/horse.lua @@ -3,7 +3,7 @@ --made for MC like Survival game --License for code WTFPL and otherwise stated in readmes -local S = minetest.get_translator("mobs_mc") +local S = minetest.get_translator(minetest.get_current_modname()) --################### --################### HORSE @@ -38,9 +38,9 @@ end local can_equip_horse_armor = function(entity_id) return entity_id == "mobs_mc:horse" or entity_id == "mobs_mc:skeleton_horse" or entity_id == "mobs_mc:zombie_horse" end -local can_equip_chest = function(entity_id) +--[[local can_equip_chest = function(entity_id) return entity_id == "mobs_mc:mule" or entity_id == "mobs_mc:donkey" -end +end]] local can_breed = function(entity_id) return entity_id == "mobs_mc:horse" or "mobs_mc:mule" or entity_id == "mobs_mc:donkey" end @@ -83,10 +83,15 @@ end -- Horse local horse = { + description = S("Horse"), type = "animal", spawn_class = "passive", visual = "mesh", mesh = "mobs_mc_horse.b3d", + rotate = 270, + walk_velocity = 1, + run_velocity = 8, + skittish = true, visual_size = {x=3.0, y=3.0}, collisionbox = {-0.69825, -0.01, -0.69825, 0.69825, 1.59, 0.69825}, animation = { @@ -96,7 +101,7 @@ local horse = { walk_speed = 25, walk_start = 0, walk_end = 40, - run_speed = 60, + run_speed = 120, run_start = 0, run_end = 40, }, @@ -113,7 +118,8 @@ local horse = { fly = false, walk_chance = 60, view_range = 16, - follow = mobs_mc.follow.horse, + follow = "mcl_farming:wheat_item", + follow_distance = 3, passive = true, hp_min = 15, hp_max = 30, @@ -157,10 +163,31 @@ local horse = { self._regentimer = 0 end - -- if driver present allow control of horse - if self.driver then + -- Some weird human is riding. Buck them off? + if self.driver and not self.tamed and self.buck_off_time <= 0 then + if math.random() < 0.2 then + mobs.detach(self.driver, {x = 1, y = 0, z = 1}) + -- TODO bucking animation + else + -- Nah, can't be bothered. Think about it again in one second + self.buck_off_time = 20 + end + end - mobs.drive(self, "walk", "stand", false, dtime) + -- Tick the timer for trying to buck the player off + if self.buck_off_time then + if self.driver then + self.buck_off_time = self.buck_off_time - 1 + else + -- Player isn't riding anymore so no need to count + self.buck_off_time = nil + end + end + + -- if driver present and horse has a saddle allow control of horse + if self.driver and self._saddle then + + mobs.drive(self, "run", "stand", false, dtime) return false -- skip rest of mob functions end @@ -191,6 +218,73 @@ local horse = { local item = clicker:get_wielded_item() local iname = item:get_name() local heal = 0 + + --sneak click to breed the horse/feed it + if self.owner and self.owner == clicker:get_player_name() then + --attempt to enter breed state + if mobs.enter_breed_state(self,clicker) then + return + end + end + + --don't do any other logic with the baby + --make baby grow faster + if self.baby then + mobs.make_baby_grow_faster(self,clicker) + return + end + + -- Taming + self.temper = self.temper or (math.random(1,100)) + + if not self.tamed then + local temper_increase = 0 + + -- Feeding, intentionally not using mobs:feed_tame because horse taming is + -- different and more complicated + if (iname == mobs_mc.items.sugar) then + temper_increase = 3 + elseif (iname == mobs_mc.items.wheat) then + temper_increase = 3 + elseif (iname == mobs_mc.items.apple) then + temper_increase = 3 + elseif (iname == mobs_mc.items.golden_carrot) then + temper_increase = 5 + elseif (iname == mobs_mc.items.golden_apple) then + temper_increase = 10 + -- Trying to ride + elseif not self.driver then + self.object:set_properties({stepheight = 1.1}) + mobs.attach(self, clicker) + self.buck_off_time = 40 -- TODO how long does it take in minecraft? + if self.temper > 100 then + self.tamed = true -- NOTE taming can only be finished by riding the horse + mobs.tamed_effect(self) + if not self.owner or self.owner == "" then + self.owner = clicker:get_player_name() + end + end + temper_increase = 5 + + -- Clicking on the horse while riding ==> unmount + elseif self.driver and self.driver == clicker then + mobs.detach(clicker, {x = 1, y = 0, z = 1}) + end + + -- If nothing happened temper_increase = 0 and addition does nothing + self.temper = self.temper + temper_increase + + --give the player some kind of idea + --of what's happening with the horse's temper + if self.temper <= 100 then + mobs.feed_effect(self) + else + mobs.tamed_effect(self) + end + + return + end + if can_breed(self.name) then -- Breed horse with golden apple or golden carrot if (iname == mobs_mc.items.golden_apple) then @@ -202,7 +296,8 @@ local horse = { return end end - -- Feed/tame with anything else + -- Feed with anything else + -- TODO heal amounts don't work if (iname == mobs_mc.items.sugar) then heal = 1 elseif (iname == mobs_mc.items.wheat) then @@ -212,18 +307,14 @@ local horse = { elseif (iname == mobs_mc.items.hay_bale) then heal = 20 end - if heal > 0 and mobs:feed_tame(self, clicker, heal, false, true) then - return - end - - if mobs:protect(self, clicker) then + if heal > 0 and mobs:feed_tame(self, clicker, heal, false, false) then return end -- Make sure tamed horse is mature and being clicked by owner only if self.tamed and not self.child and self.owner == clicker:get_player_name() then - local inv = clicker:get_inventory() + --local inv = clicker:get_inventory() -- detatch player already riding horse if self.driver and clicker == self.driver then @@ -291,9 +382,6 @@ local horse = { self.object:set_properties({stepheight = 1.1}) mobs.attach(self, clicker) - -- Used to capture horse - elseif not self.driver and iname ~= "" then - mobs:capture_mob(self, clicker, 0, 5, 60, false, nil) end end end, @@ -353,6 +441,7 @@ mobs:register_mob("mobs_mc:horse", horse) -- Skeleton horse local skeleton_horse = table.copy(horse) +skeleton_horse.description = S("Skeleton Horse") skeleton_horse.breath_max = -1 skeleton_horse.armor = {undead = 100, fleshy = 100} skeleton_horse.textures = {{"blank.png", "mobs_mc_horse_skeleton.png", "blank.png"}} @@ -375,6 +464,7 @@ mobs:register_mob("mobs_mc:skeleton_horse", skeleton_horse) -- Zombie horse local zombie_horse = table.copy(horse) +zombie_horse.description = S("Zombie Horse") zombie_horse.breath_max = -1 zombie_horse.armor = {undead = 100, fleshy = 100} zombie_horse.textures = {{"blank.png", "mobs_mc_horse_zombie.png", "blank.png"}} @@ -399,6 +489,7 @@ mobs:register_mob("mobs_mc:zombie_horse", zombie_horse) -- Donkey local d = 0.86 -- donkey scale local donkey = table.copy(horse) +donkey.description = S("Donkey") donkey.textures = {{"blank.png", "mobs_mc_donkey.png", "blank.png"}} donkey.animation = { speed_normal = 25, @@ -429,6 +520,7 @@ mobs:register_mob("mobs_mc:donkey", donkey) -- Mule local m = 0.94 local mule = table.copy(donkey) +mule.description = S("Mule") mule.textures = {{"blank.png", "mobs_mc_mule.png", "blank.png"}} mule.visual_size = { x=horse.visual_size.x*m, y=horse.visual_size.y*m } mule.sounds = table.copy(donkey.sounds) @@ -445,12 +537,91 @@ mobs:register_mob("mobs_mc:mule", mule) --=========================== --Spawn Function -mobs:spawn_specific("mobs_mc:horse", mobs_mc.spawn.grassland_savanna, {"air"}, 0, minetest.LIGHT_MAX+1, 30, 15000, 4, mobs_mc.spawn_height.water+3, mobs_mc.spawn_height.overworld_max) -mobs:spawn_specific("mobs_mc:donkey", mobs_mc.spawn.grassland_savanna, {"air"}, 0, minetest.LIGHT_MAX+1, 30, 15000, 4, mobs_mc.spawn_height.water+3, mobs_mc.spawn_height.overworld_max) +mobs:spawn_specific( +"mobs_mc:horse", +"overworld", +"ground", +{ + "FlowerForest_beach", + "Forest_beach", + "StoneBeach", + "ColdTaiga_beach_water", + "Taiga_beach", + "Savanna_beach", + "Plains_beach", + "ExtremeHills_beach", + "ColdTaiga_beach", + "Swampland_shore", + "JungleM_shore", + "Jungle_shore", + "MesaPlateauFM_sandlevel", + "MesaPlateauF_sandlevel", + "MesaBryce_sandlevel", + "Mesa_sandlevel", + "Mesa", + "FlowerForest", + "Swampland", + "Taiga", + "ExtremeHills", + "Jungle", + "Savanna", + "BirchForest", + "MegaSpruceTaiga", + "MegaTaiga", + "ExtremeHills+", + "Forest", + "Plains", + "Desert", + "ColdTaiga", + "IcePlainsSpikes", + "SunflowerPlains", + "IcePlains", + "RoofedForest", + "ExtremeHills+_snowtop", + "MesaPlateauFM_grasstop", + "JungleEdgeM", + "ExtremeHillsM", + "JungleM", + "BirchForestM", + "MesaPlateauF", + "MesaPlateauFM", + "MesaPlateauF_grasstop", + "MesaBryce", + "JungleEdge", + "SavannaM", +}, +0, +minetest.LIGHT_MAX+1, +30, +15000, +4, +mobs_mc.spawn_height.water+3, +mobs_mc.spawn_height.overworld_max) + + +mobs:spawn_specific( +"mobs_mc:donkey", +"overworld", +"ground", +{ +"Mesa", +"MesaPlateauFM_grasstop", +"MesaPlateauF", +"MesaPlateauFM", +"MesaPlateauF_grasstop", +"MesaBryce", +}, +0, +minetest.LIGHT_MAX+1, +30, +15000, +4, +mobs_mc.spawn_height.water+3, +mobs_mc.spawn_height.overworld_max) -- spawn eggs mobs:register_egg("mobs_mc:horse", S("Horse"), "mobs_mc_spawn_icon_horse.png", 0) mobs:register_egg("mobs_mc:skeleton_horse", S("Skeleton Horse"), "mobs_mc_spawn_icon_horse_skeleton.png", 0) -mobs:register_egg("mobs_mc:zombie_horse", S("Zombie Horse"), "mobs_mc_spawn_icon_horse_zombie.png", 0) +--mobs:register_egg("mobs_mc:zombie_horse", S("Zombie Horse"), "mobs_mc_spawn_icon_horse_zombie.png", 0) mobs:register_egg("mobs_mc:donkey", S("Donkey"), "mobs_mc_spawn_icon_donkey.png", 0) mobs:register_egg("mobs_mc:mule", S("Mule"), "mobs_mc_spawn_icon_mule.png", 0) diff --git a/mods/ENTITIES/mobs_mc/init.lua b/mods/ENTITIES/mobs_mc/init.lua index 58006fe90..d7600e927 100644 --- a/mods/ENTITIES/mobs_mc/init.lua +++ b/mods/ENTITIES/mobs_mc/init.lua @@ -3,7 +3,7 @@ --made for MC like Survival game --License for code WTFPL and otherwise stated in readmes -local path = minetest.get_modpath("mobs_mc") +local path = minetest.get_modpath(minetest.get_current_modname()) if not minetest.get_modpath("mobs_mc_gameconfig") then mobs_mc = {} diff --git a/mods/ENTITIES/mobs_mc/iron_golem.lua b/mods/ENTITIES/mobs_mc/iron_golem.lua index 2ccee2d0a..939412abb 100644 --- a/mods/ENTITIES/mobs_mc/iron_golem.lua +++ b/mods/ENTITIES/mobs_mc/iron_golem.lua @@ -3,7 +3,7 @@ --made for MC like Survival game --License for code WTFPL and otherwise stated in readmes -local S = minetest.get_translator("mobs_mc") +local S = minetest.get_translator(minetest.get_current_modname()) --################### --################### IRON GOLEM @@ -12,11 +12,15 @@ local S = minetest.get_translator("mobs_mc") mobs:register_mob("mobs_mc:iron_golem", { + description = S("Iron Golem"), type = "npc", spawn_class = "passive", passive = true, + rotate = 270, hp_min = 100, hp_max = 100, + protect = true, + neutral = true, breath_max = -1, collisionbox = {-0.7, -0.01, -0.7, 0.7, 2.69, 0.7}, visual = "mesh", @@ -39,7 +43,7 @@ mobs:register_mob("mobs_mc:iron_golem", { reach = 3, group_attack = true, attacks_monsters = true, - attack_type = "dogfight", + attack_type = "punch", drops = { {name = mobs_mc.items.iron_ingot, chance = 1, @@ -154,11 +158,11 @@ mobs_mc.tools.check_iron_golem_summon = function(pos) if ok then -- Remove the nodes minetest.remove_node(pos) - core.check_for_falling(pos) + minetest.check_for_falling(pos) for i=1, 4 do local cpos = vector.add(pos, checks[c][i]) minetest.remove_node(cpos) - core.check_for_falling(cpos) + minetest.check_for_falling(cpos) end -- Summon iron golem local place diff --git a/mods/ENTITIES/mobs_mc/llama.lua b/mods/ENTITIES/mobs_mc/llama.lua index 36d020a65..9c3f681b1 100644 --- a/mods/ENTITIES/mobs_mc/llama.lua +++ b/mods/ENTITIES/mobs_mc/llama.lua @@ -1,4 +1,4 @@ -local S = minetest.get_translator("mobs_mc") +local S = minetest.get_translator(minetest.get_current_modname()) --################### --################### LLAMA @@ -25,8 +25,18 @@ local carpets = { } mobs:register_mob("mobs_mc:llama", { + description = S("Llama"), type = "animal", spawn_class = "passive", + rotate = 270, + neutral = true, + group_attack = true, + attack_type = "projectile", + shoot_arrow = function(self, pos, dir) + -- 2-4 damage per arrow + local dmg = 1 + mobs.shoot_projectile_handling("mobs_mc:spit", pos, dir, self.object:get_yaw(), self.object, nil, dmg) + end, hp_min = 15, hp_max = 30, xp_min = 1, @@ -49,7 +59,11 @@ mobs:register_mob("mobs_mc:llama", { walk_velocity = 1, run_velocity = 4.4, follow_velocity = 4.4, + breed_distance = 1.5, + baby_size = 0.5, + follow_distance = 2, floats = 1, + reach = 6, drops = { {name = mobs_mc.items.leather, chance = 1, @@ -82,7 +96,7 @@ mobs:register_mob("mobs_mc:llama", { look_start = 78, look_end = 108, }, - follow = mobs_mc.follow.llama, + follow = mobs_mc.items.hay_bale, view_range = 16, do_custom = function(self, dtime) @@ -125,30 +139,71 @@ mobs:register_mob("mobs_mc:llama", { return end - local item = clicker:get_wielded_item() - if item:get_name() == mobs_mc.items.hay_bale then - -- Breed with hay bale - if mobs:feed_tame(self, clicker, 1, true, false) then return end - else - -- Feed with anything else - if mobs:feed_tame(self, clicker, 1, false, true) then return end + --owner is broken for this + --we'll make the owner this guy + --attempt to enter breed state + if mobs.enter_breed_state(self,clicker) then + self.tamed = true + self.owner = clicker:get_player_name() + return end - if mobs:protect(self, clicker) then return end + + --ignore other logic + --make baby grow faster + if self.baby then + mobs.make_baby_grow_faster(self,clicker) + return + end + -- Make sure tamed llama is mature and being clicked by owner only if self.tamed and not self.child and self.owner == clicker:get_player_name() then + local item = clicker:get_wielded_item() + --safety catch + if not item then + return + end + + + + --put chest on carpeted llama + if self.carpet and not self.chest and item:get_name() == "mcl_chests:chest" then + if not minetest.is_creative_enabled(clicker:get_player_name()) then + item:take_item() + clicker:set_wielded_item(item) + end + + self.base_texture = table.copy(self.base_texture) + self.base_texture[1] = "mobs_mc_llama_chest.png" + self.object:set_properties({ + textures = self.base_texture, + }) + self.chest = true + + return --don't attempt to ride + end + + -- Place carpet - --[[ TODO: Re-enable this code when carpet textures arrived. - if minetest.get_item_group(item:get_name(), "carpet") == 1 and not self.carpet then + --TODO: Re-enable this code when carpet textures arrived. + if minetest.get_item_group(item:get_name(), "carpet") == 1 then + for group, carpetdata in pairs(carpets) do if minetest.get_item_group(item:get_name(), group) == 1 then if not minetest.is_creative_enabled(clicker:get_player_name()) then item:take_item() clicker:set_wielded_item(item) + + --shoot off old carpet + if self.carpet then + minetest.add_item(self.object:get_pos(), self.carpet) + end end + local substr = carpetdata[2] local tex_carpet = "mobs_mc_llama_decor_"..substr..".png" + self.base_texture = table.copy(self.base_texture) self.base_texture[2] = tex_carpet self.object:set_properties({ @@ -169,23 +224,21 @@ mobs:register_mob("mobs_mc:llama", { end end end - ]] - -- detatch player already riding llama - if self.driver and clicker == self.driver then + if self.carpet then + -- detatch player already riding llama + if self.driver and clicker == self.driver then - mobs.detach(clicker, {x = 1, y = 0, z = 1}) + mobs.detach(clicker, {x = 1, y = 0, z = 1}) - -- attach player to llama - elseif not self.driver then + -- attach player to llama + elseif not self.driver then - self.object:set_properties({stepheight = 1.1}) - mobs.attach(self, clicker) + self.object:set_properties({stepheight = 1.1}) + mobs.attach(self, clicker) + end end - -- Used to capture llama - elseif not self.driver and clicker:get_wielded_item():get_name() ~= "" then - mobs:capture_mob(self, clicker, 0, 5, 60, false, nil) end end, @@ -217,7 +270,60 @@ mobs:register_mob("mobs_mc:llama", { }) --spawn -mobs:spawn_specific("mobs_mc:llama", mobs_mc.spawn.savanna, {"air"}, 0, minetest.LIGHT_MAX+1, 30, 15000, 5, mobs_mc.spawn_height.water+15, mobs_mc.spawn_height.overworld_max) +mobs:spawn_specific( +"mobs_mc:llama", +"overworld", +"ground", +{ +"Mesa", +"MesaPlateauFM_grasstop", +"MesaPlateauF", +"MesaPlateauFM", +"MesaPlateauF_grasstop", +"MesaBryce", +}, +0, +minetest.LIGHT_MAX+1, +30, +15000, +5, +mobs_mc.spawn_height.water+15, +mobs_mc.spawn_height.overworld_max) -- spawn eggs mobs:register_egg("mobs_mc:llama", S("Llama"), "mobs_mc_spawn_icon_llama.png", 0) + + +-- llama spit +mobs:register_arrow("mobs_mc:spit", { + visual = "sprite", + visual_size = {x = 0.3, y = 0.3}, + textures = {"mobs_mc_spit.png"}, + velocity = 1, + speed = 1, + tail = 1, + tail_texture = "mobs_mc_spit.png", + tail_size = 2, + tail_distance_divider = 4, + + hit_player = function(self, player) + --[[if rawget(_G, "armor") and armor.last_damage_types then + armor.last_damage_types[player:get_player_name()] = "spit" + end]] + player:punch(self.object, 1.0, { + full_punch_interval = 1.0, + damage_groups = {fleshy = self._damage}, + }, nil) + end, + + hit_mob = function(self, mob) + mob:punch(self.object, 1.0, { + full_punch_interval = 1.0, + damage_groups = {fleshy = self._damage}, + }, nil) + end, + + hit_node = function(self, pos, node) + --does nothing + end +}) \ No newline at end of file diff --git a/mods/ENTITIES/mobs_mc/locale/mobs_mc.de.tr b/mods/ENTITIES/mobs_mc/locale/mobs_mc.de.tr index 24d3fa324..6598cd481 100644 --- a/mods/ENTITIES/mobs_mc/locale/mobs_mc.de.tr +++ b/mods/ENTITIES/mobs_mc/locale/mobs_mc.de.tr @@ -28,6 +28,7 @@ Pig=Schwein Polar Bear=Eisbär Rabbit=Kaninchen Killer Bunny=Killerkaninchen +The Killer Bunny=Das Killerkaninchen Sheep=Schaf Shulker=Shulker Silverfish=Silberfischchen diff --git a/mods/ENTITIES/mobs_mc/locale/mobs_mc.es.tr b/mods/ENTITIES/mobs_mc/locale/mobs_mc.es.tr index 240e7759f..c61c09943 100644 --- a/mods/ENTITIES/mobs_mc/locale/mobs_mc.es.tr +++ b/mods/ENTITIES/mobs_mc/locale/mobs_mc.es.tr @@ -28,6 +28,7 @@ Pig=Cerdo Polar Bear=Oso polar Rabbit=Conejo Killer Bunny=Conejo asesino +The Killer Bunny=El Conejo asesino Sheep=Oveja Shulker=Shulker Silverfish=Lepisma diff --git a/mods/ENTITIES/mobs_mc/locale/mobs_mc.fr.tr b/mods/ENTITIES/mobs_mc/locale/mobs_mc.fr.tr index ff1e2b9c0..4c8bd562d 100644 --- a/mods/ENTITIES/mobs_mc/locale/mobs_mc.fr.tr +++ b/mods/ENTITIES/mobs_mc/locale/mobs_mc.fr.tr @@ -28,6 +28,7 @@ Pig=Cochon Polar Bear=Ours blanc Rabbit=Lapin Killer Bunny=Lapin tueur +The Killer Bunny=Le Lapin tueur Sheep=Mouton Shulker=Shulker Silverfish=Poisson d'argent diff --git a/mods/ENTITIES/mobs_mc/locale/mobs_mc.pl.tr b/mods/ENTITIES/mobs_mc/locale/mobs_mc.pl.tr new file mode 100644 index 000000000..06eaa457a --- /dev/null +++ b/mods/ENTITIES/mobs_mc/locale/mobs_mc.pl.tr @@ -0,0 +1,75 @@ +# textdomain: mobs_mc +Totem of Undying=Token nieśmiertelności +A totem of undying is a rare artifact which may safe you from certain death.=Totem nieśmiertelności to rzadki artefakt, który może uchronić cię przed pewną śmiercią. +The totem only works while you hold it in your hand. If you receive fatal damage, you are saved from death and you get a second chance with 1 HP. The totem is destroyed in the process, however.=Totem działa tylko kiedy trzymasz go w dłoni. Jeśli otrzymasz obrażenia od upadku zostaniesz oszczędzony i pozostanie ci 1 HP, jednak totem zostanie wtedy zniszczony. +Agent=Agent +Bat=Nietoperz +Blaze=Płomyk +Chicken=Kurczak +Cow=Krowa +Mooshroom=Muuuchomor +Creeper=Creeper +Ender Dragon=Smok kresu +Enderman=Enderman +Endermite=Endermit +Ghast=Ghast +Elder Guardian=Prastrażnik +Guardian=Strażnik +Horse=Koń +Skeleton Horse=Koń szkielet +Zombie Horse=Koń zombie +Donkey=Osioł +Mule=Muł +Iron Golem=Żelazny golem +Llama=Lama +Ocelot=Ocelot +Parrot=Papuga +Pig=Świnia +Polar Bear=Niedźwiedź polarny +Rabbit=Królik +Killer Bunny=Królik zabójca +Sheep=Owca +Shulker=Shulker +Silverfish=Rybik cukrowy +Skeleton=Szkielet +Stray=Tułacz +Wither Skeleton=Witherowy szkielet +Magma Cube=Kostka magmy +Slime=Szlam +Snow Golem=Śnieżny golem +Spider=Pająk +Cave Spider=Pająk jaskiniowy +Squid=Kałamarnica +Vex=Dręczyciel +Evoker=Przywoływacz +Illusioner=Iluzjonista +Villager=Osadnik +Vindicator=Obrońca +Zombie Villager=Osadnik zombie +Witch=Wiedźma +Wither=Wither +Wolf=Wilk +Husk=Posuch +Zombie=Zombie +Zombie Pigman=Świniak zombie +Iron Horse Armor=Żelazna zbroja dla konia +Iron horse armor can be worn by horses to increase their protection from harm a bit.=Żelazna zbroja dla konia może być noszona przez konie aby nieco zwiększyć ich odporność na obrażenia. +Golden Horse Armor=Złota zbroja dla konia +Golden horse armor can be worn by horses to increase their protection from harm.=Złota zbroja dla konia może być noszona przez konie aby zwiększyć ich odporność na obrażenia. +Diamond Horse Armor=Diamentowa zbroja dla konia +Diamond horse armor can be worn by horses to greatly increase their protection from harm.=Diamentowa zbroja dla konia może być noszona przez konie aby istotnie zwiększyć ich odporność na obrażenia. +Place it on a horse to put on the horse armor. Donkeys and mules can't wear horse armor.=Połóż ją na koniu aby założyć zbroję dla konia. Osły i muły nie mogą nosić zbroi dla konia. +Farmer=Rolnik +Fisherman=Rybak +Fletcher=Łuczarz +Shepherd=Pasterz +Librarian=Bibliotekarz +Cartographer=Kartograf +Armorer=Płatnerz +Leatherworker=Rymarz +Butcher=Rzeźnik +Weapon Smith=Zbrojmistrz +Tool Smith=Narzędziarz +Cleric=Kapłan +Nitwit=Głupiec +Protects you from death while wielding it=Chroni przed śmiercią gdy go trzymasz diff --git a/mods/ENTITIES/mobs_mc/locale/mobs_mc.ru.tr b/mods/ENTITIES/mobs_mc/locale/mobs_mc.ru.tr index 73807c001..8857dda97 100644 --- a/mods/ENTITIES/mobs_mc/locale/mobs_mc.ru.tr +++ b/mods/ENTITIES/mobs_mc/locale/mobs_mc.ru.tr @@ -28,6 +28,7 @@ Pig=Свинья Polar Bear=Полярный медведь Rabbit=Кролик Killer Bunny=Кролик-убийца +The Killer Bunny=Кролик-убийца Sheep=Овца Shulker=Шалкер Silverfish=Чешуйница diff --git a/mods/ENTITIES/mobs_mc/locale/template.txt b/mods/ENTITIES/mobs_mc/locale/template.txt index 04ba9e465..7b55c1b89 100644 --- a/mods/ENTITIES/mobs_mc/locale/template.txt +++ b/mods/ENTITIES/mobs_mc/locale/template.txt @@ -28,6 +28,7 @@ Pig= Polar Bear= Rabbit= Killer Bunny= +The Killer Bunny= Sheep= Shulker= Silverfish= diff --git a/mods/ENTITIES/mobs_mc/mod.conf b/mods/ENTITIES/mobs_mc/mod.conf index cd4f98c75..98f48b388 100644 --- a/mods/ENTITIES/mobs_mc/mod.conf +++ b/mods/ENTITIES/mobs_mc/mod.conf @@ -1 +1,6 @@ name = mobs_mc +author = maikerumine +description = Adds Minecraft-like monsters and animals. +depends = mcl_init, mcl_particles, mcl_mobs, mcl_wip +optional_depends = default, mcl_tnt, mcl_bows, mcl_throwing, mcl_fishing, bones, mesecons_materials, mobs_mc_gameconfig, doc_items + diff --git a/mods/ENTITIES/mobs_mc/models/attributes.txt b/mods/ENTITIES/mobs_mc/models/attributes.txt new file mode 100644 index 000000000..ec59e0f70 --- /dev/null +++ b/mods/ENTITIES/mobs_mc/models/attributes.txt @@ -0,0 +1 @@ +Ghast fixed by epCode - Thanks! \ No newline at end of file diff --git a/mods/ENTITIES/mobs_mc/models/mobs_mc_cat.b3d b/mods/ENTITIES/mobs_mc/models/mobs_mc_cat.b3d index 9ab4fc10ccbda15e9210e2702e858b35a1d76ff6..1a6ecbbe82a74536be40bd5a427822847acd00f0 100644 GIT binary patch literal 50977 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 literal 54146 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 bLehWdeBH6GwauP_;>vq{d9HGOx!?XDEjuxb diff --git a/mods/ENTITIES/mobs_mc/models/mobs_mc_cow.b3d b/mods/ENTITIES/mobs_mc/models/mobs_mc_cow.b3d index 2f13ba9c465a28ec5b289e0ae3cb02730ace6023..c009839191e272db590eb0e08be0c90356b4acf6 100644 GIT binary patch literal 71850 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 a-zaL${u@QD*?*&`g?*!153p}kwf`5<-Z2;e literal 75074 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 RwK41)rPcK_*f*xy{{jnz_mltt diff --git a/mods/ENTITIES/mobs_mc/models/mobs_mc_creeper.b3d b/mods/ENTITIES/mobs_mc/models/mobs_mc_creeper.b3d index 54341579c7a4b4b9e9cde54d30469dad7c312f4d..e04ffc7b07334a928c0494deca10668e3c46db65 100644 GIT binary patch literal 139359 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 diff --git a/mods/ENTITIES/mobs_mc/models/mobs_mc_ghast.b3d b/mods/ENTITIES/mobs_mc/models/mobs_mc_ghast.b3d index cebc037c05efdcf2343c4232099b12fffc4c5c89..ab34f334f8321e30f05ae4b53a946b4095587ef0 100644 GIT binary patch delta 18141 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 KUl*Z12>%DJKTiJu literal 75657 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 V09X&5s-C+ER1az5QHx%`0RZsDdanQg diff --git a/mods/ENTITIES/mobs_mc/models/mobs_mc_mooshroom.b3d b/mods/ENTITIES/mobs_mc/models/mobs_mc_mooshroom.b3d index 725268ea9838cc579f732c857b0b31eb72b80fb7..c009839191e272db590eb0e08be0c90356b4acf6 100644 GIT binary patch literal 71850 zcmeI52bdK_y7v!JkRUlL2N)Po;yHqV&h(IT&Y$Ac?%iE=uUEeJ-~I17XWH(e>fXKI=RQ02JTN#N znl=qK-%=)rFNe?P>)5Gzi{SvHxMGr3ZYz!Q+O$5X&{U;&;Gy zEOcnmt#ye~KHq%_J-c@A_EizjSq64$L+W7KU{CS^$4@1s87y<~j&Qpu|$c_Y$( zFJ&R`UNZ7lReC*Tq?xzG%)`E`C2z2~FY-c0=Dca<$z++mD$kkcwy#?qxYbqW^TlWQk~1H3=Zw7A z=OXW3a^~`^W6peTR(YB057)zIUJvIrayyT0KTbD_6nH)5SpRA%KHm{@U*t7Q-WZ>k zw4Hh1EG;X#{m_|t*f%aO8M;{B4YRz=`_S5mWMo? zn{^(@3mIN{C@+3rw>ogEE7VKud~qH=$1&q`eJ-EtH|sf8_t@82FV?=9>mJw0=X#CY z>Y&8X^b`1u0vXpbWFQac`*22{-zdPm)*08*%EP&}%g76vx>#PwtkcZ@ogEE1X;Gd~qH=$1&qrd@i5sH!_zO ztAp6NS^GNb&%C~F$LCfD$NqXTIrZVPDP1m?mFw0WZEw;g$xD;GldrAZ&^)QbGdA_8~dBe@T%=;p5 zU^4P>%+B&~ZqD*zd9d|-NtyRWo^`&lI&ln; z+^l^w*ZpMkm@{7^Gtb;Na~=46^2`{x$N!M=teVe^fqUqW8F}WjVCKc1RVxqo?k922 zuiQgMEH5PYuKCQw?Tb9Wv8U0=WPFCz9$5D-@-jaQAyem;=iGN2%d^@X-1mM1d9k($ zc_Gg{lo!7*>cv?HZgrLUd~qH=$1&q`eJ-DCwqbE~kA0o>V(p91z_D0$Z@qurj?b+Q z)?aELg^l@soc)YE*k*BgN$Z&RRh<2dJnS2nmz+7zvY#{WYuV3Nf1GZ9hPAI{cOoxV zo|%{Im51Yt-}f5JvyS;B>NE*?v2!!?lD+a`=WFfjRtIi%mHB)<&%@{PxxUQhS)ZG^ zUd%jS=K8bjXSd^XtAj)7?Tw|q+ohcPtC8aKos_oyUNZ7t{%m#1$&9>|;;* zzh`+T%wryCmWMo?TQno@Ub0sn%8TFEtq$Dk3iT2@-~IBrJ|E64cFZ^ypYP|Nn_|{; ztnRU|vtF!yGuJ(?kll_(NlZix>ujqQge z=9idHVgaVHU07lvi3KG-!ZfyvNh~T6T`a|!#m*e)lrti&=B%QKDb z$0R-~v4X^kOk=yU#7YwV601l=8r#(*R+X3_F_CF(KQ6I`#Oe~CU>e)CCDxKyQ(_&a zu^o_DPhwq(L8h_YKw^D~PfC1>X>2!^*hpeSiBB_)ZCr3%q-P}JVL=+(O(iywm?E*6 zM5M9ZQeq2<%_X*C8ry9pwvpIcVmqd>-BDr(iR~qJVjA0BC3cb6Sz2c( zxK!d2iOZSB_DYE>B)%ze71P*WD{+m))e_e+jqSH2ZjiWM;zp*iy+z_?iJK&Dm54O9 zcSzhWaht@qna1``iSJ5$N8&D~vAtK~9*Mgp?qeF;VTlJM?w1&08rz2?9+dc=#KTNu z`>4eCB_5IZ0n^w%A@R7xV-llGWBatkQxZ=~JR=clY@e5SPU2aK7nsKOWr>$0UX*x+ zX>4DUcvWJ$#Oq9B`}Nc>3RhY~+#8rw}ew&_q%h)~`9JH9D8nQO|$ zFguyk7gm3=@Rwaus(ko`oJYvGe}B3e|B}1DAu(D#^}AqV>UWW*ojSHSnb#~q{)CJi z=4QyqN#-JRlX*yMmyq!g)A`8!v85kLDnQ|k+sP>WL>fz z86bn?lVp9e0r?c!kZeRYCZ8ssA(O~t(jZgFCS+5x8QGj{LAE4Yk*&!#WLvTw*`Dk` zb|gEIoyjg_SF#(~o$NvOBzuv)$v$LXvLE>@`5f7w96$~v2a$uxA>>dpl}satk;BOm zY zhc&bXG_(aZw1qUZg*CK~XlRRQXp3rSi)mKIEAI9Q5&5) ztajSOabqXf9-W#t+1K}Khv?1z?NheoN;Ba0*>UK}+(C&ExQK|E-NRTP9A29UcqJm> zb%%gg83JBY2zUh{;PrxlR|f)K3kYcP5zw3?ps7YcGmL;H76HvC0-8nyG1U%LVcw`aqI3nOtL%?H%fJX$uZ~nFV@UV&776G>;0&X`1 z+)4 z>`C?_dy{?0zGOf0S@JouKRJLLXwvFK#O7e8hmb?bR5FbmMh+)OkR!=avWB&}wk>+W2oy6!6gE+%C_l792EiPqM63THFBofNm70<8RJnI?4?pIjwU765VzuDpD|^Eu z<(b$Z&qhTTt$n-$2JQ)@yaD$g38Ilqh6F88TIy8~ShCq}NyGyJ7I%ayXw9{0Ty z*xKxg$fwdappB^Pp+(vE8*dKG|FUl6u(UbXrR}NWqP35APJz{dFN!sc+>y3yzqDxy zS!mOf7X`XrHX_BOjjS$hWz{US;j%LV=km9TtdX{NnzX^yve0fUIX-YUM~4X7bhPb> zE?S%y;xn%e4CHLxCGxerE7r?9qq>XMKDXj`dj@{G&@Hl0-a*ynT~s3rt@C+u zHMoa^2Mrk&^A30KC~ahWhfgn%am!EgS}_70n{9-5NP$mV1VvL)Gy zY)!Ty+mh|b_GAaLBiV`UOm-o=lHJJeWDl|@*^BH=_96R{{m5s@=g9u#0CJ$okTHlH zOb#K3lBr}GIgA`mjvz;pqsYr$InAUsBL$l;GW`N-iUplW&qM$d%+O zay6Ol9aqrMdA-(+lt7Og;qSn;Ecmxh2a^(L(J=<#WA4lJ!z$brSkqZY+F4KWuZMEsSrGM z=~~#frt)Q>-CUqjP&~x2ZKdVULYq4wAt)YV_%5wK+dGV}U;B7Zep@xzXZ60YZB^Rd zVZ7F^GpDs`dx!B_yW9(_b_X^$NsNpTD|nq)!M1nkrXB9z8R$8qM&w1Yu748iS`4Y5 z-4AxTL+)%3G;UohGM`qv?H#(68;EQSj2Ie-*xrEc9lB}9eX%M~b5g^I?Pb{BVZ7F^ zhp#?a9Ju#oa>VvtZ12!bd$-o?fOv=z+bgoYLpN=Q@23RBLyXwomhBz7X}_N{H1K)j z&KX{u?H#&loz|-D9lB}7GYn44nLlECowj%AroG(qZ-Lu~3Po&h*7gqFwBi{CX6`H& zvAty5J9N{YUwAhl9%2NZ;Q{dwZST;j#XZq$#f^Y?h!NYXx4lEB7S}Fm`PqPYh!J>( z=q<3l!+0$w_(8jP{?UMVh!J>(3*}z3y+b$crJ9j|c!-f7<=(|T47=8?J;U*izp^(V z9%2N~1fGqGS!kWTG5##H9S-YcHruf;=5$U-ZgVeoqLqOjeIRy7Ol+5D}7 z2g}X~+r4wuveM@05ZqC6eE6z(hHb?|O!Uy2?Mdq{!6vT_46hZ>@Eh?Et9xj1ZsHjR z%iZl6wtFdSWTACFZ}1MwNTU`TJe)XU*zn1|i_um_$w3`ba{sBHdC%c<5C_ZX;Sd=; z{B!o`q15s(%|8qo^~|FR838g#K1tRm8<0+HYZzBj)kUT^lCXbNslmF`eq5b~L^?>&u{6jA-{KMZk{6nV}?|MY| zhkYIXp;K$WgW(^xbohr}TKI>v9R8tGYuX!f4Db(2JN!eZ);n*L$B*p#p>;U9Ww-TXtR)~*LP|In$mk0Fiz;Y)G; zp_kUpKXhvCI)i^W+~FTOwe~TLrGHqLqfqb*gPNY2Exo zFRjzwgn#Izb@LCsw3l4`Loe+j7yr;pd(Oo_bZYHu4F9l!_=j6L>I?tSskN`gGxQJb z(Pa3CUfM-*{^0`phhAFvhn2-YMBfJPVfcq`S{(DZIR6kMi0}`+v~K>Pm)6Zcbkm|P z-26kQ)~;VS|In$m>(|Xc^wPTdhhADY|IkZ&PW;2S#Xn3J|F9kXLoaO(@eiAce`wD( zfq&?wb@LCsw9e-(esZZfdKhyL>+ULRl)pbD+dY)3$K!~At{4P7MhJLB5d7xf?BPSp zJ+!`Djw-R-L+i`sNL%iq^` E%(s+k~z|C@JB+nduY|eC=2G7)v;*}A6j2xN7@=b zw7#^C^aT8oFwuhfMRsgXX8L(@3OSXWM!rD4Nd9vTAIgtsn#Ub7mXX%*VaRxs=@sNk zauvCnTtluU*OBYV4dh$oMsgFmnY7%)kYTxp@>*lQ9k+;bY$&bi8h&+!28d358brCa+zG} zRc>#W$)#S}<}$f-p-e8d&4@g54qjSJF8!@cE}bGnhwC`G)J+SMN`?*t`#HI^Bqx`8 zX)(FJ*UXjVA zLu7JkRhj74gOf|Ww3u9ag_BFih#8FGLoaRo4p>9;buw5|+qg*my@ON+^+zjI73_0m?B$)$Z{ za_Ppn$)#S}-^t|CT#m`5URtNQYP*MS&l@I}KH->L>Qyc#m!>-=m%3?j|H{x|a0w@u zHsRz_H!bRSJSUg#le!IXa;Z~`GNFBvlS^yMHQUa~rB1Ewz6|8#(&jRBn3t1F-Lx1& z+$57rm&)YQx#Aj*;^a~L zX_vUkrC!?loLqWEo?$%8m0X@7yWC?kxl~-l$Zz5%mwJ`^lT0pM=$KsU)Y|ns+hua8 zm-ezuF6}OpON+)$E_G^gyomc{a_JeFT)Ily-WNEz)TyY$;%=Dq4Ayiz7DrE_Yz(3a59mekO~ zDO9cB(i++_8rrfN+Hx9Nj2Wt)8wM#3!sW@&FkoBjkJJLGloJm^?ySlSxB{HJLPIe8Bu;*V;>*u(!X*q`0&vGMeIfmBHawBayhStw>BW*c`*3WYzZ8?V4&vYYgIfmBH zbR%s!hStw@BW*c`*3We#{XZQowBLUVAMpNzW2mZyW2mZyW2mZyW2mZyW2mZyW2mZy zW2mZyW2mZyW2mZyW2mZyW2mZyW2mZyW2mZyW2mZyW2mZyW2mZyW2mZyW2mZyW2mZy zW2mZyW2mZyW2mZyW2mZyW2mZyW2mZyW2mZyW2mZyW2mZyW2mZyW2mb2YiQvZs+J4K zP*n@ZP*n@ZP*n@ZP*n@ZP*n@ZP*n@ZP*n@ZP*n@ZuoxXfYaZ#C)@jDy&j*bIH%t8s zd4?eaPdzLhJkcPYRuE4jh^Gw169nSv0R1HHYNT<;g18$&+-V^0A`o{7h^r6c%7VCR z;N#>IWKFUbS(~gw)-`D@M1;)%(?Rk{vOd{>e2SEzVly-%8AXP9dj~)5sUd7s;2% zm&sSiSIOyQhgpuah^(o8&F>Hu)j>5qXFFm~;*q+V8)}1Kxi*Wq(y|E)8vN4Q(C`ZC(xSLmJwA z8ru9C+J`l?1vIn;HME5^w1qXak7#I%XlRRSXp3oRi)(00XlP4nXiI5mOKWJ$XlTo7 zXv=A6%WG&WXlNhR&_1T2t*D{(YiKKJXe(=It7vEwG_+MUwAD1Ui5lAK8rm8fT6l)V zrBRzSeB!uqW6as4>G#K<7_z2;QGU%hdHY*aqCtDm@IPeGP-6C=p;R-1-~5|BXxN1H z(3EUOHYZz_&DcdyqZJUSw~w580ROM?OnF zNA@QNkORp<7Wk{m^jCdZIt$#LX(asoM#oJ3A0pC_k~Q^{%M z3*?LBOXSPsE99%>bTUM~M$RB-lC#L! zNvwoC$oI*kgpuah^(o8&F>Hu)j>5qXFFm~^^^_WQ5&1Kxi*Wq(y|E)8vN4Q(C`ZC(xS zLmJwA8ru9C+J`l?1vIn;HME5^w1qXak7#I%XlRRSXp3oRi)(00XlP4nXiI5mOKWJ$ zXlTo7Xv=A6%WG&WXlNhR&_1T2t*D{(YiKKJXe(=It7vEwG_+MUwAD1Ui5lAK8rm8f zTDXSzg;KbNV`@J?ethc0!Q+O$;5*bhpRxOgA}P(rtPvC7=l=awj^7Tt;sfITe2P5p6oz&Bs-Cv$u4A9vK!f*>_PS+2FOV;iFOe^kuaK{j)5#F|8aacUNzNi?lXJ+qRBHiXxJGp~=n|z0Sm)uG2 zB6pK}$i3t~azA;143iP^J@O!Vh&)UlA>SvDk{^)A$m8S*QeF;bI7yx&Pm^cJv*bDQ zJb8hJq;xiqx7 zHMDs&w0SkO4{2!gX=w9nXdl+l7SPZZ)X)~v&=%IvKBA#5qMwAKzasCO~HY5MziF#Xl4uG21_sx<>Gu zf3y9=Caj01WHYik*@A3Iwjx`TZOFD{JF-35f$T_jB0G~^$gX5JvOC#>>`C?_dy{?0 zzGOf0S@JouKRJLLNDd+glS9a%WGb0P4kL$?Bgm2DC~`D8h8#8}+@)KkK>(HWG>)i5kx-X$;*Y4fY@dA{PLn7Xr zN8cQ1+BrT6gRDUy^RU&ZTnAd0+%I{OUU?@W-qW>xOT<@tO^WMAaP_LUztV0llN z`&#AIV0k^v&#;cQy5u#LePem@BM2-nwy)1uDu3^2)hi2AZY*zm5~bmI9(yKe<{inE zBgsC#3X->=-k(!uXXN>OWn|xlk{8?8=Sx`B&8Q{i-9LSkW>d&m@m}eZ$eaCaRPwCj zTPbu*!eT6rkWxAyZ2QRFRY^#qUE=UXj#*mr40UdTAY@@ATO*i(MYg5}N1$n*KO zvb^KwXP^#zz8x$tmM1@Jma}Wz+;Xy0_;uLr?6*XPa=(N*mbZ2VK>5VLmJz#pI~pnK7)OPG`3-< zz^;KE1Um$2Y{MRa{Q!Fd?|Y=NjrT6z(|E7ry^1up@qWYm5bw{5Ok*4G5xjT&67ilu z8rx{E(Z1t-fc6+^Y(Fj$?I_yaCz!@|ZHcuc)|6O>X>2#?*ro%{0|7c&RHP}|*3pA} zKC8oRVf7~qf7vCa%76_0?6fPl(Iz(qj71wg>XK(G%M7Xtwo0s$8V0hNz{i-Ld)f`E&IfQx{Di-Uj* zgMf>KfQx~Ei-dp+gn)~MfQy2Fi-mv-hk%QQ;5YyN|Lbu3nZqd8Z*rHm54?W3PU(tT zTuW6g9x7EW?g>>b?i*Dt?k!a~hoM+?*@S!n|>6p+m%yU6;9J z*Jv);<<#2GbNrHB)461qm$soS*_Gy4vdgKpk71ZB*;U`MWS3KmV}Kq@c1@5ayS8y< zV3;>v+D~Q4u5VO=?KZXAVqK1hj^Tw&gHADT@=aOA@xDq$a8>iO3&jxYHt`@RnR~|0e<)z&$OLi@hCA;Ry zl3gRYWS5t=k}TPEMV9QED);Vx$*RsUZ=72DcrSCwF0AIfflGEdwf6BkS5Wt7QSMV* zvg@im!(VdAE@!#+F&vjAySB=bUG|FaFmK$n(BGFOyXHHV>~d=D^*6vgR&@T*nVo!dE=!$AE^*Lb?I98 zj#xJP#lo?zoA_g}%iUa{Qcx_M@L{oRuCM85E=cNCZtjGHpjbHJyIgP(oi|?EliyYi z_F26zY`2Q&ym4ynI&-$RwsqrnycbsO4s33c7#Sh0_&RCD(Rt%6*FLx5{+)rIGipR$ zO2Mv4nVtj{?UL~I1yMj3*}xz=Z%;4 zQq4#}ES$)XV%gvxwyhiIG2nQ|U)dWF3nzkS0?$T8mvZs>&^o;de-_$~hZBR13hfTV zOTn{@&Ku|P+V`X^MjAZrdnerS)_~~e(ni?Ujoa}q__A&=_tTrhSEbFtLdfX6@hbO= zVhw`}3ak#>3oN7a#!D-fP4Ig1qHyA*j!}4l=)CdLp3UDXc(Ck@u*HL|G`sgkE{p`f`S+L8dt+a} zTo1T@uy4Gyuy20juy34N+^dMNZ~8jy8>iO3hhX2dbl5juTG%(U9QKV46tuX zJM0^$);%PI|$Mvi5fa_s}>&;?J@GJ6X?G2(qeGx3J0ggNHdP^8!v7A z;MA+~dO-J$m-ZZpx(#q}%Be+}&_2n* zsoHYQw#&7%%^SCK8_2<_=F)YOmxEKza#1F_a5l-{)KVFonk%NwC=O0}Y5g)dl`ex* zQ)r&s=1u%D*vET`gHyxgnOM)kDQCI1_Su1Z0_k(AMY_ndR!yEcze}Cj+WH)vx+2do zo@I33c$Irh2B*ZtiTsA$yXe00(*7iaQwtq~Q%)`F3~{#0;FOp4vJ6gjm%*u`af4G% zEzS*bzYI>Dk-@1|()PZvM^MpcV3DOD}Tq*S#qYE-o_YE-r8vr*Ne&qh@X zqefK=qefK=qefMWF)39o#-voWFltn_7?V=fVoXX^i!muxEyko&wJ>T_wHT99)nZIa zRSTm=Rf{nxRV|DfRV|!ERV~J(RJAZ_RJ9c~w0;dOj2hKrfKj8W#h8?;7GqMXT8v4l zYB46Is)bRbs>PU;sup8Xs#+K|H>Gh;9W>FJN^Gx}IsXCcL1!B_Qp*zj=HFkAVPjvv z?Df1;qmQT6Hy%_EFl#G~3>#G~3>#G~3>#G~3>#G~3>#G~3>#G~3>#G~44YdtZ1mUj z4&{)KVz4*S6@UOY9|0~r0^D;1xZVhGs}b;KLBLxB0dE8ZwDt&S$q~>>BcKIFK)#3P^xRp;yS5naV=G~ zxZbK-+!Lx=+&8LP+*_(z+<&TC+@q>m+{da~-0P}ZJP)c`JTt0VJXfk(JbS8IJfEss zJj1G5Jm;!fv<0eKv=^#cv?;1uv^%O=v`wm7v|p-Pv~j9hw1cWzw3Vt_w5O_CST?F! zST?F!ST?F!zlIi;jcU2DY*e+dY*e+dY*e+dY*e+dY*e+dY*e+dY*e+dY*e+dY;H^A z{@+}WHfGvjSPmg%Sf)+LuuL17S;>6Mvto&6-TtB5RX% z$e;bZ4c8OSUQf|lSNTEpfcsB%T}hZWs#=&fs#=&fs#=&fs#=&fs#=&fs#=&fs#=&f zs#-k5s#-kfs#>%Ks#>%cs#=&fs#=&fs#=&fs#=&fs#=&fs#=&fs#=&fs#=&fs#=&f zs#=&fs#=&fs#?E>7ViMna`B!})#6>Es>S<8Rf~6$suu4pRW06as#?7NRJC|Vs%l}{ z;2To^ll2s1_D$?J6D|AZm)3O?GOVr}nQkg|1iQoPx{=@AWZLSw2^m(`O~|miZbHUC zrt2nTSoTfGu7O~->7O~->7QwPEyt4y``$fyG>P#_n)d3??_c`ynXZET@UOZXWxVj zygOib;JpB%%?Ht*gJ`Qkw8J3USn&VN&{W94vxd*Za|GfU0sSWbwYxdtLYR&!|MXlL?qo_6eZxpp=|Ba&7 z?7vaen*BG5TC@K~QET?!C~D3A8%3?zf1{}NYdrI2|BYg~uy0h`60`qCv0StNMp0|_ a-zaL${u@QD*?*&`g?*!153p}kwf`5<-Z2;e literal 54175 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 diff --git a/mods/ENTITIES/mobs_mc/models/mobs_mc_skeleton.b3d b/mods/ENTITIES/mobs_mc/models/mobs_mc_skeleton.b3d index be4094c1bc93d27acc18def22cae0ab655dc9a9c..aa1681dbeec2940f8bf06c05412718e20ff0840d 100644 GIT binary patch literal 212014 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 K=r-~@PrBcABSo+P literal 221065 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

`hXTeEBkp~gOh=j|UVsMC=p68Fk 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 F@;?IJlnnp? literal 0 HcmV?d00001 diff --git a/mods/ENTITIES/mobs_mc/textures/mobs_mc_llama_decor_white.png b/mods/ENTITIES/mobs_mc/textures/mobs_mc_llama_decor_white.png new file mode 100644 index 0000000000000000000000000000000000000000..c6ae669dd830fe5a581a46f6dc7d3f07494b9748 GIT binary patch literal 6866 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 x#<<0c0CfxOfJ(VdIP5a0Sb-{{j9sLxTVS literal 0 HcmV?d00001 diff --git a/mods/ENTITIES/mobs_mc/textures/mobs_mc_llama_decor_yellow.png b/mods/ENTITIES/mobs_mc/textures/mobs_mc_llama_decor_yellow.png new file mode 100644 index 0000000000000000000000000000000000000000..6318e163d74b28c3aa5247821c0ebffa5cdbf140 GIT binary patch literal 7571 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 delta 981 zcmV;`11kK45a0)p8Gi!+0089(k4*po00DDSM?wIu&K&6g0044OOjJd1XIwdvWYMl)$ZIdMTZbwNCSIyiJaG-^giicvazML>y6J$*tw zfl5p~G$>y@O_Nk2NjywEG*(7Es5%^I0s=IVU_yyXFl0t3Uw=FzNjx!%UWtNoU!z!m zcxX{y3eNxl00DGTPE!Ct=GbNc00R$6L_t(&-tCrsZ`&Xc#$zLy;G+$7QS(=pvz71v z8Fw#0oOIe&)eud~b@lutF82fO9=zM#Mb~wGiB951?`lWa538V*ce*~nuy<|*7@hO} zW$3!$_25$+UVn%B0R7-yfVUCcG&w)?{c!NkzkBBKhoNr)Fa?b`2><~F0Mg)n699Ki z0AX?hkR`a*07n6ES%%gC@e_c1^a`{EcuN4j`4&tME<%3=C~X*kTd`3ada|JDNO3hH z4l<)AM$`>2UJ%w+?7VAc#g9LXS|7*#?F{>`>J5r+xPKk-i~8FDr(wU}|B#@Y;q;e! z4*;US570}^OVNAZpMIga4doM;z9*&5OnM6dY5LMRnjR z2w`MBLdqB+>zH^+ZvenEikc)!0@jFpO$pPN07Xl{Rsg_bMWC0CGDGq?C<#Z9lq8ep z4>-n602Uq41OLA)Nsk&ykB~lLeICmb=Vc3k?|;R=53mk2##(EPLAC-+G0(eJft;TR z=pW8#_(xdU0oaR%wJ6yo5SsxQNiG*kE6HUMS_4>OFs97EHGo2_0ZdDPTm_Q+LwCWn zUjYI@b6tdX0JQWMDFOQ!fYOHChpQ@RYecCFXCXlX=<>cw=K)e7rdF(T%b#^2tf zwSOO2VLR0SdD5CmM9!a&CccxMsZfxq@Z=OiR3ngkIh3+1=Z7i)n04jbY(!K8s0}HW zaDB$q0ML0}E;!!<=slX^&@}+cstbS$&N^ol+WAY(705?0?{%5~MeD)ptm^_;Tb9?@ zvg}fMHl0iB7nLeokjB3j8<)Gun^9P7l};|;*-6K77bYW4FGR_elMkp})G;C>o})9h z@=9b^MznIp8V8fwY>Bn~V!oTPJk{=Cdd4%J@!!NxF4v(Q46jhn00000NkvXXu0mjf DrWUHF diff --git a/mods/ENTITIES/mobs_mc/textures/mobs_mc_spawn_icon_rabbit_caerbannog.png b/mods/ENTITIES/mobs_mc/textures/mobs_mc_spawn_icon_rabbit_caerbannog.png new file mode 100644 index 0000000000000000000000000000000000000000..4244a83c6f0a93ff1f7d65180fd6d56b43e98af3 GIT binary patch literal 1897 zcmV-v2bTDWP) zaB^>EX>4U6ba`-PAZ2)IW&i+q+O1YulI182{O1&N1WN)Wj>8%;H<;s3VuS0|@?KYW zmmM}(W=UmAvR(i0-{Jnj!5qBvK`o{j4;()E#2Fnst|Om!I{bNG56AAjv%C8R!z5_s zdbGIg9d^ceUiP}y$*_lqg;HNH%KI02EyT7q*gLL`gsu&awXn-;A>p;Nzn;tG))ABG zqYHJ7AM5=|11>jjUX){qq#k$AhiXjd8y{Z5Tbn>d&;9R>K0doWl!1x6kQ}(%L@4tj z$!NoQXN;M)EV3+%3aG{IQ1sL0_4V-zx!cf}BD1U*2UO;c{F~ZCB17#+Av|IV<8+T;Z@u_B<0# zLrPT0*$`v}XQf0883%c4lxa{u+e#G>J$F{L%oXBR2ctoZ#1(Rq_<7P`l_X6JVpoKN zz{)okI=4;dc9jepH!_FlAS_0h@>i$(&Y&@7LJ=Kya|K*HBO55DazySR41*#x7OCMR zc%L7SsjEQ2aMEmWFdt>E0QpOxx8RafXu-gM_R1sDwiW#G=JYD!H<&Qhg0IR;^Z3&5fHhx|g6?PQug-im@jMu2TUL$2>JVjJ)Tm z+|=wyJc}R$WSHVKnu?=QtWgX4k#5C0k&@74l-_&0nZM zRQI^rPS^%yVYyRXk>0&FnxL&&4|}Qy>|;&%M(f@gq=T{5_4$b}k9f+$Q^fUg6gfFW zwnkcjn(r*hu3^nfr|$=3&&w&UqcpzM%N~COS(kRf29#~Q5b+2nBlzMqa#wEwL6vJu zVOnjpH5$}!kABV3%@vBpcD{GJweaa8&Lki4GFFpb^0iQDDnknAwvg&Gp4;Au#saK$ zVRvs%JZob+HwYC`f`Yv^%X+@Xe@ySw=uRtWJO_kc(nu|(a&K7EHNmR(bT6(=*FuFA z)h?R*NagX8(x*|^U1*EeEPd=GfD?Mjr#XWL{Qch$%Y_QXTw6&y?#y+B!{VT8uKx1G zr}D|)J2Jk={o|7Vc}|~F@duZ6QWxPwxUB)L%JgzDt?zz{YW5HG@r4cmQA9RD<3UIBDK7$1w-QnX|n=&!S6J#FSNeT0%D6YqIUEif*S>-oYH>emR5}^Fkwg@_oh35b$_S93CGmdz$@Es=#J; zeN9ja714I3q6@tu+)BDBeyF5T)-tFLe)~f-Vq8coja2Q-F895(dJZ}6uSk_y2F|BM z2ufQ4noTQziPQIMt^tazs0rq%XIq2V_qc*JAdmcS!E-OmM6aK8ekfIob4^iObE(#y zUHC(`UzN+Jt^3o7f4Y$32Qj(-0gvB171uc!#sB~S24YJ`L;%PDS^!tH0(VpZ000Sa zNLh0L01FcU01FcV0GgZ_00007bV*G`2jv9<0V4$`wT`m@000?uMObu0Z*6U5Zgc=c za%Ew3Wn>_CX>@2HM@dakSAh-}0004CNklbF5XOHoK`b;JVIM$K99Z8z zgPq_DXerpKg^gMWSBOs`_yF2S;;Kp&{r>lkCK@B4V3=Z)r$1%5iFTC>(}10W(?Yt0g{KT~|LB0{1RiBgp!Ypopv*h^Cyz`N@%B3xU*m=o zt`rm4%`%KJzZ1nVec%Xe6THe6MC2Pa2#BJHEhpZv%>xfW)2*`v&{}%{_i;?3R4HDb z=M{hjU}YMGL~8(+ouB79BEnr9^9gJkL&Mt2MOG*rgJ*!3k+ECA8*mx~W9K~f7fu|v j9Vl0|3LH#0`#-TSNF9Mg)SuCN00000NkvXXu0mjfBRps$ literal 0 HcmV?d00001 diff --git a/mods/ENTITIES/mobs_mc/textures/mobs_mc_spit.png b/mods/ENTITIES/mobs_mc/textures/mobs_mc_spit.png new file mode 100644 index 0000000000000000000000000000000000000000..6cdb3e0b3cb7127f61d4aaf9f4cf422111d8b8f9 GIT binary patch literal 677 zcmV;W0$TlvP)EX>4Tx04R}tkv&MmKpe$i(@I4uA{G>J$WX<>f~bh2R-p(LLaorMgUO{|(4-+r zad8w}3l4rPRvlcNb#-tR1i=pwH#a9m7b)?7Nufoo2gm(*ckglc4iIW3rdfe;K+|nA z8IOtS%&HiCMF9Qi#VC9-vy3@ON}%odx`&UicTt|z{@kCVTg_Sw@QK8;%rI@@4dUrd z+u*!U9A*VsB|aw}GwFiFk6c$ge&d{XS>TyrGnJet4ik&{7FJrA6-D&>*{h@IUz7t(BXc@RC9?pyS1HK8AtdE>N#J&iAq7)K38aGjOFh{pA`k^GSNO zsYQ-}o^9abx~VC9z~v4w@MOrQ>`H!`LM{iqpV2pEfWBLxYt8Gev5(USAVpmzZh(VB zU?fl3>uuiM+1lH`XBz$e06}GPlbdAG@Bjb+24YJ`L;(K){{a7>y{D4^000SaNLh0L z04^f{04^f|c%?sf00007bV*G`2jv785h)`{*3PK_000?uMObu0Z*6U5Zgc=ca%Ew3 zWn>_CX>@2HM@dakSAh-}0001dNkll4QwuwQqcV2oV@5h6uc#qK6(aNpT}0RTWj8iUD{M z)G8^Zi)i+tZnfu0wCzUgdi(dB@Rm%}6Ot4F0!wg~R*u55y8Af}EGd6QY{v_m00000 LNkvXXu0mjfiR>Ik literal 0 HcmV?d00001 diff --git a/mods/ENTITIES/mobs_mc/textures/mobs_mc_stray_overlay.png b/mods/ENTITIES/mobs_mc/textures/mobs_mc_stray_overlay.png index ab00032b22e66672f41c26e6beef1f357ca3ed4d..b4b47a9fb9ec52e2e3722e5883c4ada5e900421c 100644 GIT binary patch delta 973 zcmV;;12X)U2K@(+Bo78+OGiWi{{a60|De66laW3if8_)Z6*U6}Yh;iB00W9iL_t(& z-rZQSY8yciojKH{h_w0x8(}cGaT6=pIF&7&BCcJCBb{-RE`dNGUDBm7Mi7$2g=@Qr zkUJTfQx}MYj7&)WKr2;gFOBE2ySIC{^4;l777nd$=jP4K&d$yZLc&;GSpxt7#+dY; za}EFie>b;7$aAc&tOW`9n1+AJhKMl+)k-#)ic`Kg>zB3Oo z=Nu-}85A}0z<1{TU{O22D12vLcPw(`f$z-YcB1ts)7e6TVBYv8TOo?N0rJMj&HA?S zZ0Rg-T32b+V5Ra9)`KGPakIW{6b)y*RH{ z%96|4;H%1u@6zHs6ig=58BC@#s4Xu^1aXN6t&z~`H)5bN2~;$`qa#!Wq}@kEX-?lU zf5s$lQF*FLsu4U1Kk0T5@yRo6@tx6l5EAwLZn#MExN7g_b{L@-0Y~EjnD}$fVKg3u z)g0#>uKQO=>okw6_HJ&65qh;!H1Q|i7zBa&jzqgkGmb~%J&dWU+4Olp8sXy6%1D3}WhdlQQ&6E*)3*6K~s^M0^$=1Vux;M1)b4f%&RA@uxmO+kMF%U$#O{7TKWPcYaQnt}-<_x(+a+DD} z#DX&b2jE%>W%)%#$%b!8@(Gkw>UMY8zuKQan#Co&fA`_1`1#Y96H>3T#|6W`zPz50 zOQ^EPg%6(>p>>r#E_~?xH9X}7kU!-Gc>XjO@brHKH6)kdq+VtJFBmA_FmJin6TP2W z)>+SfwJ{%B=6_o34FX%e)*fFguQujG&v>qnSU6kzlG5li$r^j_;uCU1m|{)TzyiaQ zy9WAR(a%fWU0eVLp&Nv~3!twvau0PsKhM6K3viRkb0%B+xERibu3@cMkD3oMj7f5t zBd@Y9Qcon$H970qArn1LMQiU=&W@I;5%w@uHwyi7{C`ub}yfF)oNArir$l!v%2tyUPBCF4z_gX zSnd1=qP*U zQpZ5_6@Puu%u`G5YjL~XmN_Pkz=z4}uopSA0t|-vo@AqZB+wDp` z)=CdO{j-qx7GhEnV&akxs!lI8dCuG0Tk)-)B0vAb;ZWkSe!`2$2aHmN_4Z`Qhe%!a z6``+Fljpc+hih8>E?OH$D5KxL|0n}$t*8s34|i2ZmqR+eC+0aVw&s|O+;|N&7-nUj zx>J30XvuSMB6~0KCbSM5r3NFHabG*L{_*Qe@!*5|WdhItI52YyHHaeT`JkSogMdrR wxBgGy54?sg_@KOHwA5J(=)C9szlX)*7xILs{3dsfJOBUy07*qoM6N<$g7KVc;{X5v diff --git a/mods/ENTITIES/mobs_mc/textures/mobs_mc_wither_half_health.png b/mods/ENTITIES/mobs_mc/textures/mobs_mc_wither_half_health.png new file mode 100644 index 0000000000000000000000000000000000000000..f6353400cda70d9e14a98ee98082030b9f81f500 GIT binary patch literal 1323 zcmV+`1=RY9P)3llH3nBT`+P)=A*t z;2@1T5QoTB2kwFsV*)AS6b?zWfrwp*wCIY_%e)=U>@V#~ve*yI?wgr?JM-p!@6B4z zLIUjVyCXO*(Cpd%pBXo-g zM4RIRwL0MUfD7M?E5EPRQ8?;NdFA&xv6?tSw|L%XujwZ;#iVA5m8ms2Zoa;yF~B*; z^acp}`TFvLf?rZwVKKmMnBxFt0*cJ)q}DgHMSHg)4M+3|`oOLY9E3t%-;{kcuX+=9 zy{XL_;qjl=bOs3eBG8%od`~WvPkMbbF-016Ixg_~Um^c=4d?=R$7F7xDY2TE=V@X5 zz8wHvN3_-IGF5UNyS7|7wfP=!u?eG&xKyfhc|tpw9N%@!9z&a==m;O~Tk!_aow!UBQ~5}q zp>i?{$P+ky#=3`xkD~6{dJy$Q(;QiUc=#x13{bhK<6{w=c?Y>emYj@ZD2+(+)6vxGyI3+n(SfmsPh@_4IpYe)fBbQMznM1DLp&g^zK3 z*6_=6@;UIN^8cA`u-Hhi&f6`utN zKm3@ifxCFpc)mdGKUqKK8(UZwPy-X&RU^2IYsT9(>;~uzfEy=_>(AM}p?!%E{TfWe=>-pJ**zf5X>W;|58z8R8fcgrq+gYq2IO`IbnV$rwEs-&$O7(d|e|YrN znlA-Rc^;5ENI#11+TwZ;$~Mz3(>WpO95MG85LeqnzZlc6zI@>ap*#qgVue~bmF0{v z_ZTp%5}CPsfZK@fo>H!c`z;K;SE6jK9f*>d&&L>guYmil=vY+`$vW>yQNlKxAXt^i zWGImtjcsLFOH(4V0^bt_k!raMMewAP9*rX}p=Umw;#>KRy(a#APq;ppD^#dZp+bcU h6)IGyP@%%?@judG-R$kK*4Y36002ovPDHLkV1kb7etZA` literal 0 HcmV?d00001 diff --git a/mods/ENTITIES/mobs_mc/vex.lua b/mods/ENTITIES/mobs_mc/vex.lua index cccdebe7a..22f1e70d2 100644 --- a/mods/ENTITIES/mobs_mc/vex.lua +++ b/mods/ENTITIES/mobs_mc/vex.lua @@ -3,13 +3,14 @@ --made for MC like Survival game --License for code WTFPL and otherwise stated in readmes -local S = minetest.get_translator("mobs_mc") +local S = minetest.get_translator(minetest.get_current_modname()) --################### --################### VEX --################### mobs:register_mob("mobs_mc:vex", { + description = S("Vex"), type = "monster", spawn_class = "hostile", pathfinding = 1, @@ -35,7 +36,6 @@ mobs:register_mob("mobs_mc:vex", { view_range = 16, walk_velocity = 3.2, run_velocity = 5.9, - attack_type = "dogfight", sounds = { -- TODO: random death = "mobs_mc_vex_death", diff --git a/mods/ENTITIES/mobs_mc/villager.lua b/mods/ENTITIES/mobs_mc/villager.lua index 7e6921f90..06cec9ed6 100644 --- a/mods/ENTITIES/mobs_mc/villager.lua +++ b/mods/ENTITIES/mobs_mc/villager.lua @@ -19,7 +19,7 @@ -- TODO: Internal inventory, pick up items, trade with other villagers -- TODO: Farm stuff -local S = minetest.get_translator("mobs_mc") +local S = minetest.get_translator(minetest.get_current_modname()) local N = function(s) return s end local F = minetest.formspec_escape @@ -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 @@ -412,6 +412,7 @@ local init_trades = function(self, inv) offered_stack = mcl_enchanting.get_uniform_randomly_enchanted_book({"soul_speed"}) else mcl_enchanting.enchant_randomly(offered_stack, math.random(5, 19), false, false, true) + mcl_enchanting.unload_enchantments(offered_stack) end end @@ -457,7 +458,9 @@ local set_trade = function(trader, player, inv, concrete_tradenum) player_tradenum[name] = concrete_tradenum local trade = trades[concrete_tradenum] inv:set_stack("wanted", 1, ItemStack(trade.wanted[1])) - inv:set_stack("offered", 1, ItemStack(trade.offered)) + local offered = ItemStack(trade.offered) + mcl_enchanting.load_enchantments(offered) + inv:set_stack("offered", 1, offered) if trade.wanted[2] then local wanted2 = ItemStack(trade.wanted[2]) inv:set_stack("wanted", 2, wanted2) @@ -924,6 +927,7 @@ end) --[=======[ MOB REGISTRATION AND SPAWNING ]=======] mobs:register_mob("mobs_mc:villager", { + description = S("Villager"), type = "npc", spawn_class = "passive", hp_min = 20, @@ -957,13 +961,21 @@ mobs:register_mob("mobs_mc:villager", { "mobs_mc_villager_smith.png", --hat }, }, - visual_size = {x=3, y=3}, + visual_size = {x=2.75, y=2.75}, + rotate = 270, + skittish = true, makes_footstep_sound = true, walk_velocity = 1.2, - run_velocity = 2.4, + run_velocity = 3, drops = {}, can_despawn = false, -- TODO: sounds + sounds = { + random = "mobs_mc_villager", + damage = "mobs_mc_villager_hurt", + death = "mobs_mc_villager_hurt", + distance = 10, + }, animation = { stand_speed = 25, stand_start = 40, @@ -1067,7 +1079,35 @@ mobs:register_mob("mobs_mc:villager", { -mobs:spawn_specific("mobs_mc:villager", mobs_mc.spawn.village, {"air"}, 0, minetest.LIGHT_MAX+1, 30, 20, 4, mobs_mc.spawn_height.water+1, mobs_mc.spawn_height.overworld_max) +mobs:spawn_specific( +"mobs_mc:villager", +"overworld", +"ground", +{ +"FlowerForest", +"Swampland", +"Taiga", +"ExtremeHills", +"BirchForest", +"MegaSpruceTaiga", +"MegaTaiga", +"ExtremeHills+", +"Forest", +"Plains", +"ColdTaiga", +"SunflowerPlains", +"RoofedForest", +"MesaPlateauFM_grasstop", +"ExtremeHillsM", +"BirchForestM", +}, +0, +minetest.LIGHT_MAX+1, +30, +20, +4, +mobs_mc.spawn_height.water+1, +mobs_mc.spawn_height.overworld_max) -- spawn eggs mobs:register_egg("mobs_mc:villager", S("Villager"), "mobs_mc_spawn_icon_villager.png", 0) diff --git a/mods/ENTITIES/mobs_mc/villager_evoker.lua b/mods/ENTITIES/mobs_mc/villager_evoker.lua index 226c82a32..030da5470 100644 --- a/mods/ENTITIES/mobs_mc/villager_evoker.lua +++ b/mods/ENTITIES/mobs_mc/villager_evoker.lua @@ -3,7 +3,7 @@ --made for MC like Survival game --License for code WTFPL and otherwise stated in readmes -local S = minetest.get_translator("mobs_mc") +local S = minetest.get_translator(minetest.get_current_modname()) --################### --################### EVOKER @@ -12,6 +12,7 @@ local S = minetest.get_translator("mobs_mc") local pr = PseudoRandom(os.time()*666) mobs:register_mob("mobs_mc:evoker", { + description = S("Evoker"), type = "monster", spawn_class = "hostile", physical = true, @@ -28,13 +29,13 @@ mobs:register_mob("mobs_mc:evoker", { "blank.png", --no hat -- TODO: Attack glow } }, - visual_size = {x=3, y=3}, + visual_size = {x=2.75, y=2.75}, makes_footstep_sound = true, damage = 6, walk_velocity = 0.2, run_velocity = 1.4, group_attack = true, - attack_type = "dogfight", + attack_type = "punch", -- Summon vexes custom_attack = function(self, to_attack) local r = pr:next(2,4) diff --git a/mods/ENTITIES/mobs_mc/villager_illusioner.lua b/mods/ENTITIES/mobs_mc/villager_illusioner.lua index 30e9f6f36..bec5762e5 100644 --- a/mods/ENTITIES/mobs_mc/villager_illusioner.lua +++ b/mods/ENTITIES/mobs_mc/villager_illusioner.lua @@ -3,13 +3,14 @@ --made for MC like Survival game --License for code WTFPL and otherwise stated in readmes -local S = minetest.get_translator("mobs_mc") -local mod_bows = minetest.get_modpath("mcl_bows") ~= nil +local S = minetest.get_translator(minetest.get_current_modname()) +local mod_bows = minetest.get_modpath("mcl_bows") mobs:register_mob("mobs_mc:illusioner", { + description = S("Illusioner"), type = "monster", spawn_class = "hostile", - attack_type = "shoot", + attack_type = "projectile", shoot_interval = 2.5, shoot_offset = 1.5, arrow = "mcl_bows:arrow_entity", @@ -17,7 +18,7 @@ mobs:register_mob("mobs_mc:illusioner", { if mod_bows then -- 1-4 damage per arrow local dmg = math.random(1, 4) - mcl_bows.shoot_arrow("mcl_bows:arrow", pos, dir, self.object:get_yaw(), self.object, nil, dmg) + mobs.shoot_projectile_handling("mcl_bows:arrow", pos, dir, self.object:get_yaw(), self.object, nil, dmg) end end, hp_min = 32, @@ -36,7 +37,7 @@ mobs:register_mob("mobs_mc:illusioner", { -- TODO: more sounds distance = 16, }, - visual_size = {x=3, y=3}, + visual_size = {x=2.75, y=2.75}, walk_velocity = 0.6, run_velocity = 2, jump = true, diff --git a/mods/ENTITIES/mobs_mc/villager_vindicator.lua b/mods/ENTITIES/mobs_mc/villager_vindicator.lua index 3e611acdd..6a6999b96 100644 --- a/mods/ENTITIES/mobs_mc/villager_vindicator.lua +++ b/mods/ENTITIES/mobs_mc/villager_vindicator.lua @@ -3,7 +3,7 @@ --made for MC like Survival game --License for code WTFPL and otherwise stated in readmes -local S = minetest.get_translator("mobs_mc") +local S = minetest.get_translator(minetest.get_current_modname()) --################### --################### VINDICATOR @@ -11,6 +11,7 @@ local S = minetest.get_translator("mobs_mc") mobs:register_mob("mobs_mc:vindicator", { + description = S("Vindicator"), type = "monster", spawn_class = "hostile", physical = false, @@ -30,13 +31,13 @@ mobs:register_mob("mobs_mc:vindicator", { -- TODO: Glow when attacking (mobs_mc_vindicator.png) }, }, - visual_size = {x=3, y=3}, + visual_size = {x=2.75, y=2.75}, makes_footstep_sound = true, damage = 13, reach = 2, walk_velocity = 1.2, run_velocity = 2.4, - attack_type = "dogfight", + attack_type = "punch", drops = { {name = mobs_mc.items.emerald, chance = 1, diff --git a/mods/ENTITIES/mobs_mc/villager_zombie.lua b/mods/ENTITIES/mobs_mc/villager_zombie.lua index d7f2203e1..088839b65 100644 --- a/mods/ENTITIES/mobs_mc/villager_zombie.lua +++ b/mods/ENTITIES/mobs_mc/villager_zombie.lua @@ -3,7 +3,7 @@ --made for MC like Survival game --License for code WTFPL and otherwise stated in readmes -local S = minetest.get_translator("mobs_mc") +local S = minetest.get_translator(minetest.get_current_modname()) --################### --################### ZOMBIE VILLAGER @@ -26,8 +26,12 @@ local professions = { } mobs:register_mob("mobs_mc:villager_zombie", { + description = S("Zombie Villager"), type = "monster", spawn_class = "hostile", + hostile = true, + rotate = 270, + eye_height = 1.65, hp_min = 20, hp_max = 20, xp_min = 5, @@ -38,20 +42,20 @@ mobs:register_mob("mobs_mc:villager_zombie", { visual = "mesh", mesh = "mobs_mc_villager_zombie.b3d", textures = { - {"mobs_mc_zombie_butcher.png"}, - {"mobs_mc_zombie_farmer.png"}, - {"mobs_mc_zombie_librarian.png"}, - {"mobs_mc_zombie_priest.png"}, - {"mobs_mc_zombie_smith.png"}, - {"mobs_mc_zombie_villager.png"} + {"mobs_mc_empty.png", "mobs_mc_zombie_butcher.png", "mobs_mc_empty.png"}, + {"mobs_mc_empty.png", "mobs_mc_zombie_farmer.png", "mobs_mc_empty.png"}, + {"mobs_mc_empty.png", "mobs_mc_zombie_librarian.png", "mobs_mc_empty.png"}, + {"mobs_mc_empty.png", "mobs_mc_zombie_priest.png", "mobs_mc_empty.png"}, + {"mobs_mc_empty.png", "mobs_mc_zombie_smith.png", "mobs_mc_empty.png"}, + {"mobs_mc_empty.png", "mobs_mc_zombie_villager.png", "mobs_mc_empty.png"}, }, - visual_size = {x=3, y=3}, + visual_size = {x=2.75, y=2.75}, makes_footstep_sound = true, damage = 3, reach = 2, walk_velocity = 1.2, - run_velocity = 2.4, - attack_type = "dogfight", + run_velocity = 3.5, + attack_type = "punch", group_attack = true, drops = { {name = mobs_mc.items.rotten_flesh, @@ -146,9 +150,99 @@ mobs:register_mob("mobs_mc:villager_zombie", { harmed_by_heal = true, }) -mobs:spawn_specific("mobs_mc:villager_zombie", mobs_mc.spawn.village, {"air"}, 0, 7, 30, 4090, 4, mobs_mc.spawn_height.overworld_min, mobs_mc.spawn_height.overworld_max) -mobs:spawn_specific("mobs_mc:villager_zombie", mobs_mc.spawn.solid, {"air"}, 0, 7, 30, 60000, 4, mobs_mc.spawn_height.overworld_min, mobs_mc.spawn_height.overworld_max) +mobs:spawn_specific( +"mobs_mc:villager_zombie", +"overworld", +"ground", +{ +"FlowerForest_underground", +"JungleEdge_underground", +"StoneBeach_underground", +"MesaBryce_underground", +"Mesa_underground", +"RoofedForest_underground", +"Jungle_underground", +"Swampland_underground", +"MushroomIsland_underground", +"BirchForest_underground", +"Plains_underground", +"MesaPlateauF_underground", +"ExtremeHills_underground", +"MegaSpruceTaiga_underground", +"BirchForestM_underground", +"SavannaM_underground", +"MesaPlateauFM_underground", +"Desert_underground", +"Savanna_underground", +"Forest_underground", +"SunflowerPlains_underground", +"ColdTaiga_underground", +"IcePlains_underground", +"IcePlainsSpikes_underground", +"MegaTaiga_underground", +"Taiga_underground", +"ExtremeHills+_underground", +"JungleM_underground", +"ExtremeHillsM_underground", +"JungleEdgeM_underground", +"Mesa", +"FlowerForest", +"Swampland", +"Taiga", +"ExtremeHills", +"Jungle", +"Savanna", +"BirchForest", +"MegaSpruceTaiga", +"MegaTaiga", +"ExtremeHills+", +"Forest", +"Plains", +"Desert", +"ColdTaiga", +"MushroomIsland", +"IcePlainsSpikes", +"SunflowerPlains", +"IcePlains", +"RoofedForest", +"ExtremeHills+_snowtop", +"MesaPlateauFM_grasstop", +"JungleEdgeM", +"ExtremeHillsM", +"JungleM", +"BirchForestM", +"MesaPlateauF", +"MesaPlateauFM", +"MesaPlateauF_grasstop", +"MesaBryce", +"JungleEdge", +"SavannaM", +"FlowerForest_beach", +"Forest_beach", +"StoneBeach", +"ColdTaiga_beach_water", +"Taiga_beach", +"Savanna_beach", +"Plains_beach", +"ExtremeHills_beach", +"ColdTaiga_beach", +"Swampland_shore", +"MushroomIslandShore", +"JungleM_shore", +"Jungle_shore", +"MesaPlateauFM_sandlevel", +"MesaPlateauF_sandlevel", +"MesaBryce_sandlevel", +"Mesa_sandlevel", +}, +0, +7, +30, +4090, +4, +mobs_mc.spawn_height.overworld_min, +mobs_mc.spawn_height.overworld_max) +--mobs:spawn_specific("mobs_mc:villager_zombie", "overworld", "ground", 0, 7, 30, 60000, 4, mobs_mc.spawn_height.overworld_min, mobs_mc.spawn_height.overworld_max) -- spawn eggs mobs:register_egg("mobs_mc:villager_zombie", S("Zombie Villager"), "mobs_mc_spawn_icon_zombie_villager.png", 0) - diff --git a/mods/ENTITIES/mobs_mc/witch.lua b/mods/ENTITIES/mobs_mc/witch.lua index e95357564..34492a1b7 100644 --- a/mods/ENTITIES/mobs_mc/witch.lua +++ b/mods/ENTITIES/mobs_mc/witch.lua @@ -3,7 +3,7 @@ --made for MC like Survival game --License for code WTFPL and otherwise stated in readmes -local S = minetest.get_translator("mobs_mc") +local S = minetest.get_translator(minetest.get_current_modname()) --################### --################### WITCH @@ -13,6 +13,7 @@ local S = minetest.get_translator("mobs_mc") mobs:register_mob("mobs_mc:witch", { + description = S("Witch"), type = "monster", spawn_class = "hostile", hp_min = 26, @@ -25,7 +26,7 @@ mobs:register_mob("mobs_mc:witch", { textures = { {"mobs_mc_witch.png"}, }, - visual_size = {x=3, y=3}, + visual_size = {x=2.75, y=2.75}, makes_footstep_sound = true, damage = 2, reach = 2, @@ -33,7 +34,7 @@ mobs:register_mob("mobs_mc:witch", { run_velocity = 2.4, pathfinding = 1, group_attack = true, - attack_type = "dogshoot", + attack_type = "projectile", arrow = "mobs_mc:potion_arrow", shoot_interval = 2.5, shoot_offset = 1, @@ -99,8 +100,10 @@ mobs:register_arrow("mobs_mc:potion_arrow", { end }) --- TODO: Spawn when witch works properly +-- TODO: Spawn when witch works properly <- eventually -j4i --mobs:spawn_specific("mobs_mc:witch", mobs_mc.spawn.jungle, {"air"}, 0, minetest.LIGHT_MAX-6, 12, 20000, 2, mobs_mc.spawn_height.water-6, mobs_mc.spawn_height.overworld_max) -- spawn eggs mobs:register_egg("mobs_mc:witch", S("Witch"), "mobs_mc_spawn_icon_witch.png", 0, true) + +mcl_wip.register_wip_item("mobs_mc:witch") diff --git a/mods/ENTITIES/mobs_mc/wither.lua b/mods/ENTITIES/mobs_mc/wither.lua index 28c1a2138..22e095d98 100644 --- a/mods/ENTITIES/mobs_mc/wither.lua +++ b/mods/ENTITIES/mobs_mc/wither.lua @@ -3,20 +3,21 @@ --made for MC like Survival game --License for code WTFPL and otherwise stated in readmes -local S = minetest.get_translator("mobs_mc") +local S = minetest.get_translator(minetest.get_current_modname()) --################### --################### WITHER --################### mobs:register_mob("mobs_mc:wither", { + description = S("Wither"), type = "monster", spawn_class = "hostile", hp_max = 300, hp_min = 300, xp_min = 50, xp_max = 50, - armor = {undead = 80, fleshy = 80}, + armor = {undead = 80, fleshy = 100}, -- This deviates from MC Wiki's size, which makes no sense collisionbox = {-0.9, 0.4, -0.9, 0.9, 2.45, 0.9}, visual = "mesh", @@ -25,7 +26,6 @@ mobs:register_mob("mobs_mc:wither", { {"mobs_mc_wither.png"}, }, visual_size = {x=4, y=4}, - makes_footstep_sound = true, view_range = 16, fear_height = 4, walk_velocity = 2, @@ -43,6 +43,7 @@ mobs:register_mob("mobs_mc:wither", { dogshoot_switch = 1, dogshoot_count_max =1, attack_animals = true, + can_despawn = false, drops = { {name = mobs_mc.items.nether_star, chance = 1, @@ -51,7 +52,7 @@ mobs:register_mob("mobs_mc:wither", { }, lava_damage = 0, fire_damage = 0, - attack_type = "dogshoot", + attack_type = "projectile", explosion_strength = 8, dogshoot_stop = true, arrow = "mobs_mc:wither_skull", @@ -65,12 +66,21 @@ mobs:register_mob("mobs_mc:wither", { run_start = 0, run_end = 20, }, harmed_by_heal = true, + do_custom = function(self) + if self.health < (self.hp_max / 2) then + self.base_texture = "mobs_mc_wither_half_health.png" + self.fly = false + self.object:set_properties({textures={self.base_texture}}) + self.armor = {undead = 80, fleshy = 80} + end + mcl_bossbars.update_boss(self.object, "Wither", "dark_purple") + end, on_spawn = function(self) minetest.sound_play("mobs_mc_wither_spawn", {object=self.object, gain=1.0, max_hear_distance=64}) end, }) -local mobs_griefing = minetest.settings:get_bool("mobs_griefing") ~= false +--local mobs_griefing = minetest.settings:get_bool("mobs_griefing") ~= false mobs:register_arrow("mobs_mc:wither_skull", { visual = "sprite", @@ -105,3 +115,5 @@ mobs:register_arrow("mobs_mc:wither_skull", { --Spawn egg mobs:register_egg("mobs_mc:wither", S("Wither"), "mobs_mc_spawn_icon_wither.png", 0, true) + +mcl_wip.register_wip_item("mobs_mc:wither") diff --git a/mods/ENTITIES/mobs_mc/wolf.lua b/mods/ENTITIES/mobs_mc/wolf.lua index fe3031895..0b685d40f 100644 --- a/mods/ENTITIES/mobs_mc/wolf.lua +++ b/mods/ENTITIES/mobs_mc/wolf.lua @@ -1,6 +1,6 @@ --License for code WTFPL and otherwise stated in readmes -local S = minetest.get_translator("mobs_mc") +local S = minetest.get_translator(minetest.get_current_modname()) local default_walk_chance = 50 @@ -19,16 +19,35 @@ end -- Wolf local wolf = { + description = S("Wolf"), type = "animal", spawn_class = "passive", can_despawn = true, + neutral = true, hp_min = 8, hp_max = 8, xp_min = 1, xp_max = 3, + rotate = 270, passive = false, group_attack = true, - collisionbox = {-0.3, -0.01, -0.3, 0.3, 0.84, 0.3}, + + --head code + has_head = false, + head_bone = "head", + + swap_y_with_x = false, + reverse_head_yaw = false, + + head_bone_pos_y = 3.6, + head_bone_pos_z = -0.6, + + head_height_offset = 1.0525, + head_direction_offset = 0.5, + head_pitch_modifier = 0, + --end head code + + collisionbox = {-0.3, -0.00, -0.3, 0.3, 0.85, 0.3}, visual = "mesh", mesh = "mobs_mc_wolf.b3d", textures = { @@ -52,7 +71,7 @@ local wolf = { run_velocity = 3, damage = 4, reach = 2, - attack_type = "dogfight", + attack_type = "punch", fear_height = 4, follow = mobs_mc.follow.wolf, on_rightclick = function(self, clicker) @@ -74,6 +93,7 @@ local wolf = { dog:set_yaw(yaw) ent = dog:get_luaentity() ent.owner = clicker:get_player_name() + ent.tamed = true -- cornfirm taming minetest.sound_play("mobs_mc_wolf_bark", {object=dog, max_hear_distance=16}, true) -- Replace wolf @@ -138,23 +158,35 @@ dog.owner = "" -- TODO: Start sitting by default dog.order = "roam" dog.owner_loyal = true -dog.follow_velocity = 3.2 +dog.follow_velocity = 3.2 -- Automatically teleport dog to owner dog.do_custom = mobs_mc.make_owner_teleport_function(12) -dog.follow = mobs_mc.follow.dog dog.attack_animals = nil dog.specific_attack = nil +dog.breed_distance = 1.5 +dog.baby_size = 0.5 +dog.follow_distance = 2 +dog.follow = "mcl_mobitems:beef" + dog.on_rightclick = function(self, clicker) local item = clicker:get_wielded_item() - if mobs:protect(self, clicker) then + --owner is broken for this + --attempt to enter breed state + if mobs.enter_breed_state(self,clicker) then return - elseif item:get_name() ~= "" and mobs:capture_mob(self, clicker, 0, 2, 80, false, nil) then + end + + --make baby grow faster + if self.baby then + mobs.make_baby_grow_faster(self,clicker) return - elseif is_food(item:get_name()) then + end + + if is_food(item:get_name()) then -- Feed to increase health local hp = self.health - local hp_add = 0 + local hp_add -- Use eatable group to determine health boost local eatable = minetest.get_item_group(item, "eatable") if eatable > 0 then @@ -232,6 +264,34 @@ end mobs:register_mob("mobs_mc:dog", dog) -- Spawn -mobs:spawn_specific("mobs_mc:wolf", mobs_mc.spawn.wolf, {"air"}, 0, minetest.LIGHT_MAX+1, 30, 9000, 7, mobs_mc.spawn_height.water+3, mobs_mc.spawn_height.overworld_max) +mobs:spawn_specific( +"mobs_mc:wolf", +"overworld", +"ground", +{ +"FlowerForest", +"Swampland", +"Taiga", +"ExtremeHills", +"BirchForest", +"MegaSpruceTaiga", +"MegaTaiga", +"ExtremeHills+", +"Forest", +"Plains", +"ColdTaiga", +"SunflowerPlains", +"RoofedForest", +"MesaPlateauFM_grasstop", +"ExtremeHillsM", +"BirchForestM", +}, +0, +minetest.LIGHT_MAX+1, +30, +9000, +7, +mobs_mc.spawn_height.water+3, +mobs_mc.spawn_height.overworld_max) mobs:register_egg("mobs_mc:wolf", S("Wolf"), "mobs_mc_spawn_icon_wolf.png", 0) diff --git a/mods/ENTITIES/mobs_mc/zombie.lua b/mods/ENTITIES/mobs_mc/zombie.lua index df9727d34..e1247d8bd 100644 --- a/mods/ENTITIES/mobs_mc/zombie.lua +++ b/mods/ENTITIES/mobs_mc/zombie.lua @@ -3,7 +3,7 @@ --made for MC like Survival game --License for code WTFPL and otherwise stated in readmes -local S = minetest.get_translator("mobs_mc") +local S = minetest.get_translator(minetest.get_current_modname()) --################### --################### ZOMBIE @@ -46,8 +46,11 @@ table.insert(drops_zombie, { }) local zombie = { + description = S("Zombie"), type = "monster", spawn_class = "hostile", + hostile = true, + rotate = 270, hp_min = 20, hp_max = 20, xp_min = 5, @@ -58,7 +61,11 @@ local zombie = { visual = "mesh", mesh = "mobs_mc_zombie.b3d", textures = { - {"mobs_mc_zombie.png"}, + { + "mobs_mc_empty.png", -- armor + "mobs_mc_zombie.png", -- texture + "mobs_mc_empty.png", -- wielded_item + } }, visual_size = {x=3, y=3}, makes_footstep_sound = true, @@ -69,8 +76,25 @@ local zombie = { damage = "mobs_mc_zombie_hurt", distance = 16, }, - walk_velocity = .8, - run_velocity = 1.6, + + --head code + has_head = false, + head_bone = "Head", + + swap_y_with_x = true, + reverse_head_yaw = true, + + head_bone_pos_y = 2.4, + head_bone_pos_z = 0, + + head_height_offset = 1.1, + head_direction_offset = 0, + head_pitch_modifier = 0, + --end head code + + eye_height = 1.65, + walk_velocity = 1, + run_velocity = 3.5, damage = 3, reach = 2, fear_height = 4, @@ -88,7 +112,8 @@ local zombie = { ignited_by_sunlight = true, sunlight_damage = 2, view_range = 16, - attack_type = "dogfight", + attack_type = "punch", + punch_timer_cooloff = 0.5, harmed_by_heal = true, } @@ -98,6 +123,7 @@ mobs:register_mob("mobs_mc:zombie", zombie) -- A smaller and more dangerous variant of the zombie local baby_zombie = table.copy(zombie) +baby_zombie.description = S("Baby Zombie") baby_zombie.collisionbox = {-0.25, -0.01, -0.25, 0.25, 0.94, 0.25} baby_zombie.xp_min = 12 baby_zombie.xp_max = 12 @@ -111,7 +137,14 @@ mobs:register_mob("mobs_mc:baby_zombie", baby_zombie) -- Husk. -- Desert variant of the zombie local husk = table.copy(zombie) -husk.textures = {{"mobs_mc_husk.png"}} +husk.description = S("Husk") +husk.textures = { + { + "mobs_mc_empty.png", -- armor + "mobs_mc_husk.png", -- texture + "mobs_mc_empty.png", -- wielded_item + } + } husk.ignited_by_sunlight = false husk.sunlight_damage = 0 husk.drops = drops_common @@ -122,6 +155,7 @@ mobs:register_mob("mobs_mc:husk", husk) -- Baby husk. -- A smaller and more dangerous variant of the husk local baby_husk = table.copy(husk) +baby_husk.description = S("Baby Husk") baby_husk.collisionbox = {-0.25, -0.01, -0.25, 0.25, 0.94, 0.25} baby_husk.xp_min = 12 baby_husk.xp_max = 12 @@ -135,11 +169,227 @@ mobs:register_mob("mobs_mc:baby_husk", baby_husk) -- Spawning -mobs:spawn_specific("mobs_mc:zombie", mobs_mc.spawn.solid, {"air"}, 0, 7, 30, 6000, 4, mobs_mc.spawn_height.overworld_min, mobs_mc.spawn_height.overworld_max) +mobs:spawn_specific( +"mobs_mc:zombie", +"overworld", +"ground", +{ +"FlowerForest_underground", +"JungleEdge_underground", +"StoneBeach_underground", +"MesaBryce_underground", +"Mesa_underground", +"RoofedForest_underground", +"Jungle_underground", +"Swampland_underground", +"MushroomIsland_underground", +"BirchForest_underground", +"Plains_underground", +"MesaPlateauF_underground", +"ExtremeHills_underground", +"MegaSpruceTaiga_underground", +"BirchForestM_underground", +"SavannaM_underground", +"MesaPlateauFM_underground", +"Desert_underground", +"Savanna_underground", +"Forest_underground", +"SunflowerPlains_underground", +"ColdTaiga_underground", +"IcePlains_underground", +"IcePlainsSpikes_underground", +"MegaTaiga_underground", +"Taiga_underground", +"ExtremeHills+_underground", +"JungleM_underground", +"ExtremeHillsM_underground", +"JungleEdgeM_underground", +"Mesa", +"FlowerForest", +"Swampland", +"Taiga", +"ExtremeHills", +"Jungle", +"Savanna", +"BirchForest", +"MegaSpruceTaiga", +"MegaTaiga", +"ExtremeHills+", +"Forest", +"Plains", +"Desert", +"ColdTaiga", +"MushroomIsland", +"IcePlainsSpikes", +"SunflowerPlains", +"IcePlains", +"RoofedForest", +"ExtremeHills+_snowtop", +"MesaPlateauFM_grasstop", +"JungleEdgeM", +"ExtremeHillsM", +"JungleM", +"BirchForestM", +"MesaPlateauF", +"MesaPlateauFM", +"MesaPlateauF_grasstop", +"MesaBryce", +"JungleEdge", +"SavannaM", +"FlowerForest_beach", +"Forest_beach", +"StoneBeach", +"ColdTaiga_beach_water", +"Taiga_beach", +"Savanna_beach", +"Plains_beach", +"ExtremeHills_beach", +"ColdTaiga_beach", +"Swampland_shore", +"MushroomIslandShore", +"JungleM_shore", +"Jungle_shore", +"MesaPlateauFM_sandlevel", +"MesaPlateauF_sandlevel", +"MesaBryce_sandlevel", +"Mesa_sandlevel", +}, +0, +7, +30, +6000, +4, +mobs_mc.spawn_height.overworld_min, +mobs_mc.spawn_height.overworld_max) -- Baby zombie is 20 times less likely than regular zombies -mobs:spawn_specific("mobs_mc:baby_zombie", mobs_mc.spawn.solid, {"air"}, 0, 7, 30, 60000, 4, mobs_mc.spawn_height.overworld_min, mobs_mc.spawn_height.overworld_max) -mobs:spawn_specific("mobs_mc:husk", mobs_mc.spawn.desert, {"air"}, 0, 7, 30, 6500, 4, mobs_mc.spawn_height.overworld_min, mobs_mc.spawn_height.overworld_max) -mobs:spawn_specific("mobs_mc:baby_husk", mobs_mc.spawn.desert, {"air"}, 0, 7, 30, 65000, 4, mobs_mc.spawn_height.overworld_min, mobs_mc.spawn_height.overworld_max) +mobs:spawn_specific( +"mobs_mc:baby_zombie", +"overworld", +"ground", +{ +"FlowerForest_underground", +"JungleEdge_underground", +"StoneBeach_underground", +"MesaBryce_underground", +"Mesa_underground", +"RoofedForest_underground", +"Jungle_underground", +"Swampland_underground", +"MushroomIsland_underground", +"BirchForest_underground", +"Plains_underground", +"MesaPlateauF_underground", +"ExtremeHills_underground", +"MegaSpruceTaiga_underground", +"BirchForestM_underground", +"SavannaM_underground", +"MesaPlateauFM_underground", +"Desert_underground", +"Savanna_underground", +"Forest_underground", +"SunflowerPlains_underground", +"ColdTaiga_underground", +"IcePlains_underground", +"IcePlainsSpikes_underground", +"MegaTaiga_underground", +"Taiga_underground", +"ExtremeHills+_underground", +"JungleM_underground", +"ExtremeHillsM_underground", +"JungleEdgeM_underground", +"Mesa", +"FlowerForest", +"Swampland", +"Taiga", +"ExtremeHills", +"Jungle", +"Savanna", +"BirchForest", +"MegaSpruceTaiga", +"MegaTaiga", +"ExtremeHills+", +"Forest", +"Plains", +"Desert", +"ColdTaiga", +"MushroomIsland", +"IcePlainsSpikes", +"SunflowerPlains", +"IcePlains", +"RoofedForest", +"ExtremeHills+_snowtop", +"MesaPlateauFM_grasstop", +"JungleEdgeM", +"ExtremeHillsM", +"JungleM", +"BirchForestM", +"MesaPlateauF", +"MesaPlateauFM", +"MesaPlateauF_grasstop", +"MesaBryce", +"JungleEdge", +"SavannaM", +"FlowerForest_beach", +"Forest_beach", +"StoneBeach", +"ColdTaiga_beach_water", +"Taiga_beach", +"Savanna_beach", +"Plains_beach", +"ExtremeHills_beach", +"ColdTaiga_beach", +"Swampland_shore", +"MushroomIslandShore", +"JungleM_shore", +"Jungle_shore", +"MesaPlateauFM_sandlevel", +"MesaPlateauF_sandlevel", +"MesaBryce_sandlevel", +"Mesa_sandlevel", +}, +0, +7, +30, +60000, +4, +mobs_mc.spawn_height.overworld_min, +mobs_mc.spawn_height.overworld_max) + + +mobs:spawn_specific( +"mobs_mc:husk", +"overworld", +"ground", +{ +"Desert", +"SavannaM", +"Savanna", +"Savanna_beach", +}, +0, +7, +30, +6500, +4, +mobs_mc.spawn_height.overworld_min, +mobs_mc.spawn_height.overworld_max) +mobs:spawn_specific( +"mobs_mc:baby_husk", +"overworld", +"ground", +{ +"Desert", +"SavannaM", +"Savanna", +"Savanna_beach", +}, +0, +7, +30, +65000, +4, +mobs_mc.spawn_height.overworld_min, +mobs_mc.spawn_height.overworld_max) -- Spawn eggs mobs:register_egg("mobs_mc:husk", S("Husk"), "mobs_mc_spawn_icon_husk.png", 0) diff --git a/mods/ENTITIES/mobs_mc/zombiepig.lua b/mods/ENTITIES/mobs_mc/zombiepig.lua index 8c29a4bff..b4088deef 100644 --- a/mods/ENTITIES/mobs_mc/zombiepig.lua +++ b/mods/ENTITIES/mobs_mc/zombiepig.lua @@ -3,7 +3,7 @@ --made for MC like Survival game --License for code WTFPL and otherwise stated in readmes -local S = minetest.get_translator("mobs_mc") +local S = minetest.get_translator(minetest.get_current_modname()) --################### --################### ZOMBIE PIGMAN @@ -11,16 +11,20 @@ local S = minetest.get_translator("mobs_mc") local pigman = { + description = S("Zombie Pigman"), -- type="animal", passive=false: This combination is needed for a neutral mob which becomes hostile, if attacked type = "animal", passive = false, + neutral = true, + rotate = 270, spawn_class = "passive", + hostile_cooldown = 15, --seconds hp_min = 20, hp_max = 20, xp_min = 6, xp_max = 6, armor = {undead = 90, fleshy = 90}, - attack_type = "dogfight", + attack_type = "punch", group_attack = { "mobs_mc:pigman", "mobs_mc:baby_pigman" }, damage = 9, reach = 2, @@ -40,6 +44,22 @@ local pigman = { damage = "mobs_mc_zombiepig_hurt", distance = 16, }, + + --head code + has_head = false, + head_bone = "head", + + swap_y_with_x = true, + reverse_head_yaw = true, + + head_bone_pos_y = 2.4, + head_bone_pos_z = 0, + + head_height_offset = 1.1, + head_direction_offset = 0, + head_pitch_modifier = 0, + --end head code + jump = true, makes_footstep_sound = true, walk_velocity = .8, @@ -94,6 +114,7 @@ mobs:register_mob("mobs_mc:pigman", pigman) -- A smaller and more dangerous variant of the pigman local baby_pigman = table.copy(pigman) +baby_pigman.description = S("Baby Zombie Pigman") baby_pigman.collisionbox = {-0.25, -0.01, -0.25, 0.25, 0.94, 0.25} baby_pigman.xp_min = 13 baby_pigman.xp_max = 13 @@ -111,12 +132,38 @@ baby_pigman.child = 1 mobs:register_mob("mobs_mc:baby_pigman", baby_pigman) -- Regular spawning in the Nether -mobs:spawn_specific("mobs_mc:pigman", mobs_mc.spawn.solid, {"air"}, 0, minetest.LIGHT_MAX+1, 30, 6000, 3, mobs_mc.spawn_height.nether_min, mobs_mc.spawn_height.nether_max) +mobs:spawn_specific( +"mobs_mc:pigman", +"nether", +"ground", +{ +"Nether" +}, +0, +minetest.LIGHT_MAX+1, +30, +6000, +3, +mobs_mc.spawn_height.nether_min, +mobs_mc.spawn_height.nether_max) -- Baby zombie is 20 times less likely than regular zombies -mobs:spawn_specific("mobs_mc:baby_pigman", mobs_mc.spawn.solid, {"air"}, 0, minetest.LIGHT_MAX+1, 30, 100000, 4, mobs_mc.spawn_height.nether_min, mobs_mc.spawn_height.nether_max) +mobs:spawn_specific( +"mobs_mc:baby_pigman", +"nether", +"ground", +{ +"Nether" +}, +0, +minetest.LIGHT_MAX+1, +30, +100000, +4, +mobs_mc.spawn_height.nether_min, +mobs_mc.spawn_height.nether_max) -- Spawning in Nether portals in the Overworld -mobs:spawn_specific("mobs_mc:pigman", mobs_mc.spawn.nether_portal, {"air"}, 0, minetest.LIGHT_MAX+1, 30, 500, 4, mobs_mc.spawn_height.overworld_min, mobs_mc.spawn_height.overworld_max) +--mobs:spawn_specific("mobs_mc:pigman", mobs_mc.spawn.nether_portal, {"air"}, 0, minetest.LIGHT_MAX+1, 30, 500, 4, mobs_mc.spawn_height.overworld_min, mobs_mc.spawn_height.overworld_max) -- spawn eggs mobs:register_egg("mobs_mc:pigman", S("Zombie Pigman"), "mobs_mc_spawn_icon_zombie_pigman.png", 0) diff --git a/mods/ENTITIES/mobs_mc_gameconfig/depends.txt b/mods/ENTITIES/mobs_mc_gameconfig/depends.txt deleted file mode 100644 index 2f89674f3..000000000 --- a/mods/ENTITIES/mobs_mc_gameconfig/depends.txt +++ /dev/null @@ -1,2 +0,0 @@ -mcl_init -mcl_core diff --git a/mods/ENTITIES/mobs_mc_gameconfig/init.lua b/mods/ENTITIES/mobs_mc_gameconfig/init.lua index 06d7eb87f..27cb4b4bf 100644 --- a/mods/ENTITIES/mobs_mc_gameconfig/init.lua +++ b/mods/ENTITIES/mobs_mc_gameconfig/init.lua @@ -200,14 +200,14 @@ end mobs_mc.override.enderman_block_texture_overrides = { ["mcl_core:cactus"] = ctable, -- FIXME: replace colorize colors with colors from palette - ["mcl_core:dirt_with_grass"] = - { - "mcl_core_grass_block_top.png^[colorize:green:90", - "default_dirt.png", - "default_dirt.png^(mcl_core_grass_block_side_overlay.png^[colorize:green:90)", - "default_dirt.png^(mcl_core_grass_block_side_overlay.png^[colorize:green:90)", - "default_dirt.png^(mcl_core_grass_block_side_overlay.png^[colorize:green:90)", - "default_dirt.png^(mcl_core_grass_block_side_overlay.png^[colorize:green:90)"} + ["mcl_core:dirt_with_grass"] = { + "mcl_core_grass_block_top.png^[colorize:green:90", + "default_dirt.png", + "default_dirt.png^(mcl_core_grass_block_side_overlay.png^[colorize:green:90)", + "default_dirt.png^(mcl_core_grass_block_side_overlay.png^[colorize:green:90)", + "default_dirt.png^(mcl_core_grass_block_side_overlay.png^[colorize:green:90)", + "default_dirt.png^(mcl_core_grass_block_side_overlay.png^[colorize:green:90)", + }, } -- List of nodes on which mobs can spawn diff --git a/mods/ENTITIES/mobs_mc_gameconfig/mod.conf b/mods/ENTITIES/mobs_mc_gameconfig/mod.conf new file mode 100644 index 000000000..a9d0d3d7b --- /dev/null +++ b/mods/ENTITIES/mobs_mc_gameconfig/mod.conf @@ -0,0 +1,4 @@ +name = mobs_mc_gameconfig +author = Wuzzy +description = mobs_mc game configuration for MCL2 +depends = mcl_init, mcl_core diff --git a/mods/ENVIRONMENT/lightning/API.md b/mods/ENVIRONMENT/lightning/API.md new file mode 100644 index 000000000..ad4f0a3b4 --- /dev/null +++ b/mods/ENVIRONMENT/lightning/API.md @@ -0,0 +1,31 @@ +# lightning +Lightning mod for MineClone2 with the following API: + +## lightning.register_on_strike(function(pos, pos2, objects)) +Custom function called when a lightning strikes. + +* `pos`: impact position +* `pos2`: rounded node position where fire is placed +* `objects`: table with ObjectRefs of all objects within a radius of 3.5 around pos2 + +## lightning.strike(pos) +Let a lightning strike. + +* `pos`: optional, if not given a random pos will be chosen +* `returns`: bool - success if a strike happened + + +### Examples: + +``` +lightning.register_on_strike(function(pos, pos2, objects) + for _, obj in pairs(objects) do + obj:remove() + end + minetest.add_entity(pos, "mobs_mc:sheep") +end) + +minetest.register_on_respawnplayer(function(player) + lightning.strike(player:get_pos()) +end) +``` \ No newline at end of file diff --git a/mods/ENVIRONMENT/lightning/depends.txt b/mods/ENVIRONMENT/lightning/depends.txt deleted file mode 100644 index 356c2f185..000000000 --- a/mods/ENVIRONMENT/lightning/depends.txt +++ /dev/null @@ -1,2 +0,0 @@ -mcl_fire -mcl_death_messages? diff --git a/mods/ENVIRONMENT/lightning/description.txt b/mods/ENVIRONMENT/lightning/description.txt deleted file mode 100644 index 98fdb3626..000000000 --- a/mods/ENVIRONMENT/lightning/description.txt +++ /dev/null @@ -1 +0,0 @@ -A mod that adds thunder and lightning effects. diff --git a/mods/ENVIRONMENT/lightning/init.lua b/mods/ENVIRONMENT/lightning/init.lua index 5c9fe7e61..83494462f 100644 --- a/mods/ENVIRONMENT/lightning/init.lua +++ b/mods/ENVIRONMENT/lightning/init.lua @@ -1,6 +1,7 @@ --[[ Copyright (C) 2016 - Auke Kok +Adapted by MineClone2 contributors "lightning" is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as @@ -9,24 +10,36 @@ of the license, or (at your option) any later version. --]] -local S = minetest.get_translator("lightning") +local S = minetest.get_translator(minetest.get_current_modname()) -lightning = {} +local get_connected_players = minetest.get_connected_players +local line_of_sight = minetest.line_of_sight +local get_node = minetest.get_node +local set_node = minetest.set_node +local sound_play = minetest.sound_play +local add_particlespawner = minetest.add_particlespawner +local after = minetest.after +local add_entity = minetest.add_entity +local get_objects_inside_radius = minetest.get_objects_inside_radius +local get_item_group = minetest.get_item_group -lightning.interval_low = 17 -lightning.interval_high = 503 -lightning.range_h = 100 -lightning.range_v = 50 -lightning.size = 100 --- disable this to stop lightning mod from striking -lightning.auto = true +lightning = { + interval_low = 17, + interval_high = 503, + range_h = 100, + range_v = 50, + size = 100, + -- disable this to stop lightning mod from striking + auto = true, + on_strike_functions = {}, +} local rng = PcgRandom(32321123312123) local ps = {} local ttl = -1 -local revertsky = function(dtime) +local function revertsky(dtime) if ttl == 0 then return end @@ -42,10 +55,22 @@ end minetest.register_globalstep(revertsky) +-- lightning strike API + +-- See API.md +--[[ + lightning.register_on_strike(function(pos, pos2, objects) + -- code + end) +]] +function lightning.register_on_strike(func) + table.insert(lightning.on_strike_functions, func) +end + -- select a random strike point, midpoint local function choose_pos(pos) if not pos then - local playerlist = minetest.get_connected_players() + local playerlist = get_connected_players() local playercount = table.getn(playerlist) -- nobody on @@ -67,14 +92,14 @@ local function choose_pos(pos) pos.z = math.floor(pos.z - (lightning.range_h / 2) + rng:next(1, lightning.range_h)) end - local b, pos2 = minetest.line_of_sight(pos, {x = pos.x, y = pos.y - lightning.range_v, z = pos.z}, 1) + local b, pos2 = line_of_sight(pos, { x = pos.x, y = pos.y - lightning.range_v, z = pos.z }, 1) -- nothing but air found if b then return nil, nil end - local n = minetest.get_node({x = pos2.x, y = pos2.y - 1/2, z = pos2.z}) + local n = get_node({ x = pos2.x, y = pos2.y - 1/2, z = pos2.z }) if n.name == "air" or n.name == "ignore" then return nil, nil end @@ -82,12 +107,11 @@ local function choose_pos(pos) return pos, pos2 end --- lightning strike API -- * pos: optional, if not given a random pos will be chosen -- * returns: bool - success if a strike happened -lightning.strike = function(pos) +function lightning.strike(pos) if lightning.auto then - minetest.after(rng:next(lightning.interval_low, lightning.interval_high), lightning.strike) + after(rng:next(lightning.interval_low, lightning.interval_high), lightning.strike) end local pos2 @@ -96,21 +120,28 @@ lightning.strike = function(pos) if not pos then return false end + local objects = get_objects_inside_radius(pos2, 3.5) + if lightning.on_strike_functions then + for _, func in pairs(lightning.on_strike_functions) do + func(pos, pos2, objects) + end + end +end - minetest.add_particlespawner({ +lightning.register_on_strike(function(pos, pos2, objects) + local particle_pos = vector.offset(pos2, 0, (lightning.size / 2) + 0.5, 0) + local particle_size = lightning.size * 10 + local time = 0.2 + add_particlespawner({ amount = 1, - time = 0.2, + time = time, -- make it hit the top of a block exactly with the bottom - minpos = {x = pos2.x, y = pos2.y + (lightning.size / 2) + 1/2, z = pos2.z }, - maxpos = {x = pos2.x, y = pos2.y + (lightning.size / 2) + 1/2, z = pos2.z }, - minvel = {x = 0, y = 0, z = 0}, - maxvel = {x = 0, y = 0, z = 0}, - minacc = {x = 0, y = 0, z = 0}, - maxacc = {x = 0, y = 0, z = 0}, - minexptime = 0.2, - maxexptime = 0.2, - minsize = lightning.size * 10, - maxsize = lightning.size * 10, + minpos = particle_pos, + maxpos = particle_pos, + minexptime = time, + maxexptime = time, + minsize = particle_size, + maxsize = particle_size, collisiondetection = true, vertical = true, -- to make it appear hitting the node that will get set on fire, make sure @@ -120,59 +151,34 @@ lightning.strike = function(pos) glow = minetest.LIGHT_MAX, }) - minetest.sound_play({ name = "lightning_thunder", gain = 10 }, { pos = pos, max_hear_distance = 500 }, true) + sound_play({ name = "lightning_thunder", gain = 10 }, { pos = pos, max_hear_distance = 500 }, true) -- damage nearby objects, transform mobs - local objs = minetest.get_objects_inside_radius(pos2, 3.5) - for o=1, #objs do - local obj = objs[o] + for _, obj in pairs(objects) do local lua = obj:get_luaentity() - if obj:is_player() then - -- Player damage - if minetest.get_modpath("mcl_death_messages") then - mcl_death_messages.player_damage(obj, S("@1 was struck by lightning.", obj:get_player_name())) - end - obj:set_hp(obj:get_hp()-5, { type = "punch", from = "mod" }) - -- Mobs - elseif lua and lua._cmi_is_mob then - -- pig → zombie pigman (no damage) - if lua.name == "mobs_mc:pig" then - local rot = obj:get_yaw() - obj:remove() - obj = minetest.add_entity(pos2, "mobs_mc:pigman") - obj:set_yaw(rot) - -- mooshroom: toggle color red/brown (no damage) - elseif lua.name == "mobs_mc:mooshroom" then - if lua.base_texture[1] == "mobs_mc_mooshroom.png" then - lua.base_texture = { "mobs_mc_mooshroom_brown.png", "mobs_mc_mushroom_brown.png" } - else - lua.base_texture = { "mobs_mc_mooshroom.png", "mobs_mc_mushroom_red.png" } - end - obj:set_properties({textures = lua.base_texture}) - -- villager → witch (no damage) - elseif lua.name == "mobs_mc:villager" then - -- Witches are incomplete, this code is unused - -- TODO: Enable this code when witches are working. - --[[ - local rot = obj:get_yaw() - obj:remove() - obj = minetest.add_entity(pos2, "mobs_mc:witch") - obj:set_yaw(rot) - ]] - -- charged creeper - elseif lua.name == "mobs_mc:creeper" then - local rot = obj:get_yaw() - obj:remove() - obj = minetest.add_entity(pos2, "mobs_mc:creeper_charged") - obj:set_yaw(rot) - -- Other mobs: Just damage + if lua and lua._on_strike then + lua._on_strike(lua, pos, pos2, objects) + end + -- remove this when mob API is done + if lua and lua.name == "mobs_mc:pig" then + mcl_util.replace_mob(obj, "mobs_mc:pigman") + elseif lua and lua.name == "mobs_mc:mooshroom" then + if lua.base_texture[1] == "mobs_mc_mooshroom.png" then + lua.base_texture = { "mobs_mc_mooshroom_brown.png", "mobs_mc_mushroom_brown.png" } else - obj:set_hp(obj:get_hp()-5, { type = "punch", from = "mod" }) + lua.base_texture = { "mobs_mc_mooshroom.png", "mobs_mc_mushroom_red.png" } end + obj:set_properties({ textures = lua.base_texture }) + elseif lua and lua.name == "mobs_mc:villager" then + mcl_util.replace_mob(obj, "mobs_mc:witch") + elseif lua and lua.name == "mobs_mc:creeper" then + mcl_util.replace_mob(obj, "mobs_mc:creeper_charged") + else + mcl_util.deal_damage(obj, 5, { type = "lightning_bolt" }) end end - local playerlist = minetest.get_connected_players() + local playerlist = get_connected_players() for i = 1, #playerlist do local player = playerlist[i] local sky = {} @@ -182,7 +188,7 @@ lightning.strike = function(pos) local name = player:get_player_name() if ps[name] == nil then ps[name] = {p = player, sky = sky} - mcl_weather.skycolor.add_layer("lightning", {{r=255,g=255,b=255}}, true) + mcl_weather.skycolor.add_layer("lightning", { { r = 255, g = 255, b = 255 } }, true) mcl_weather.skycolor.active = true end end @@ -197,35 +203,34 @@ lightning.strike = function(pos) if rng:next(1,100) <= 3 then skeleton_lightning = true end - if minetest.get_item_group(minetest.get_node({x = pos2.x, y = pos2.y - 1, z = pos2.z}).name, "liquid") < 1 then - if minetest.get_node(pos2).name == "air" then + if get_item_group(get_node({ x = pos2.x, y = pos2.y - 1, z = pos2.z }).name, "liquid") < 1 then + if get_node(pos2).name == "air" then -- Low chance for a lightning to spawn skeleton horse + skeletons if skeleton_lightning then - minetest.add_entity(pos2, "mobs_mc:skeleton_horse") + add_entity(pos2, "mobs_mc:skeleton_horse") local angle, posadd angle = math.random(0, math.pi*2) for i=1,3 do - posadd = {x=math.cos(angle),y=0,z=math.sin(angle)} + posadd = { x=math.cos(angle),y=0,z=math.sin(angle) } posadd = vector.normalize(posadd) - local mob = minetest.add_entity(vector.add(pos2, posadd), "mobs_mc:skeleton") + local mob = add_entity(vector.add(pos2, posadd), "mobs_mc:skeleton") mob:set_yaw(angle-math.pi/2) angle = angle + (math.pi*2) / 3 end -- Cause a fire else - minetest.set_node(pos2, {name = "mcl_fire:fire"}) + set_node(pos2, { name = "mcl_fire:fire" }) end end end - -end +end) -- if other mods disable auto lightning during initialization, don't trigger the first lightning. -minetest.after(5, function(dtime) +after(5, function(dtime) if lightning.auto then - minetest.after(rng:next(lightning.interval_low, + after(rng:next(lightning.interval_low, lightning.interval_high), lightning.strike) end end) diff --git a/mods/ENVIRONMENT/lightning/locale/lightning.pl.tr b/mods/ENVIRONMENT/lightning/locale/lightning.pl.tr new file mode 100644 index 000000000..1b0edbd1f --- /dev/null +++ b/mods/ENVIRONMENT/lightning/locale/lightning.pl.tr @@ -0,0 +1,4 @@ +# textdomain: lightning +@1 was struck by lightning.=@1 została trafiona przez piorun. +Let lightning strike at the specified position or yourself=Pozwala by piorun uderzył we wskazaną pozycję lub ciebie +No position specified and unknown player=Nie wskazano pozycji i nieznany gracz diff --git a/mods/ENVIRONMENT/lightning/mod.conf b/mods/ENVIRONMENT/lightning/mod.conf index 948a40751..346a4a0b9 100644 --- a/mods/ENVIRONMENT/lightning/mod.conf +++ b/mods/ENVIRONMENT/lightning/mod.conf @@ -1 +1,5 @@ name = lightning +author = sofar +description = A mod that adds thunder and lightning effects. +depends = mcl_fire + 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 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 nz|hLTVAXnkpn4 VOID_DAMAGE_FREQ then voidtimer = 0 local enable_damage = minetest.settings:get_bool("enable_damage") - local players = minetest.get_connected_players() + local players = get_connected() for p=1, #players do local player = players[p] local pos = player:get_pos() - local void, void_deadly = mcl_worlds.is_in_void(pos) + local _, void_deadly = is_in_void(pos) if void_deadly then local immortal_val = player:get_armor_groups().immortal local is_immortal = false @@ -65,15 +71,14 @@ minetest.register_globalstep(function(dtime) if is_immortal or not enable_damage then -- If damage is disabled, we can't kill players. -- So we just teleport the player back to spawn. - local spawn = mcl_spawn.get_player_spawn_pos(player) + local spawn = get_spawn_pos(player) player:set_pos(spawn) - mcl_worlds.dimension_change(player, mcl_worlds.pos_to_dimension(spawn)) - minetest.chat_send_player(player:get_player_name(), S("The void is off-limits to you!")) + dim_change(player, pos_to_dim(spawn)) + send_chat(player:get_player_name(), S("The void is off-limits to you!")) elseif enable_damage and not is_immortal then -- Damage enabled, not immortal: Deal void damage (4 HP / 0.5 seconds) if player:get_hp() > 0 then - mcl_death_messages.player_damage(player, S("@1 fell into the endless void.", player:get_player_name())) - player:set_hp(player:get_hp() - VOID_DAMAGE) + mcl_util.deal_damage(player, VOID_DAMAGE, {type = "out_of_world"}) end end end diff --git a/mods/ENVIRONMENT/mcl_void_damage/locale/mcl_void_damage.pl.tr b/mods/ENVIRONMENT/mcl_void_damage/locale/mcl_void_damage.pl.tr new file mode 100644 index 000000000..c943d3e67 --- /dev/null +++ b/mods/ENVIRONMENT/mcl_void_damage/locale/mcl_void_damage.pl.tr @@ -0,0 +1,3 @@ +# textdomain: mcl_void_damage +The void is off-limits to you!=Otchłań jest poza twoim zasięgiem! +@1 fell into the endless void.=@1 spadła w bezkresną otchłań. diff --git a/mods/ENVIRONMENT/mcl_void_damage/mod.conf b/mods/ENVIRONMENT/mcl_void_damage/mod.conf index 7e0ea4bac..1358e5217 100644 --- a/mods/ENVIRONMENT/mcl_void_damage/mod.conf +++ b/mods/ENVIRONMENT/mcl_void_damage/mod.conf @@ -1 +1,4 @@ name = mcl_void_damage +author = Wuzzy +description = Deal damage to entities stuck in the deep void +depends = mcl_worlds diff --git a/mods/ENVIRONMENT/mcl_weather/depends.txt b/mods/ENVIRONMENT/mcl_weather/depends.txt deleted file mode 100644 index 0e5110c41..000000000 --- a/mods/ENVIRONMENT/mcl_weather/depends.txt +++ /dev/null @@ -1,3 +0,0 @@ -mcl_init -mcl_worlds -lightning? diff --git a/mods/ENVIRONMENT/mcl_weather/description.txt b/mods/ENVIRONMENT/mcl_weather/description.txt deleted file mode 100644 index 3f28b271e..000000000 --- a/mods/ENVIRONMENT/mcl_weather/description.txt +++ /dev/null @@ -1 +0,0 @@ -Weather and sky handling: Rain, snow, thunderstorm, End and Nether ambience diff --git a/mods/ENVIRONMENT/mcl_weather/init.lua b/mods/ENVIRONMENT/mcl_weather/init.lua index e4ebfb2dc..e13242996 100644 --- a/mods/ENVIRONMENT/mcl_weather/init.lua +++ b/mods/ENVIRONMENT/mcl_weather/init.lua @@ -1,4 +1,4 @@ -local modpath = minetest.get_modpath("mcl_weather") +local modpath = minetest.get_modpath(minetest.get_current_modname()) mcl_weather = {} @@ -12,6 +12,6 @@ dofile(modpath.."/snow.lua") dofile(modpath.."/rain.lua") dofile(modpath.."/nether_dust.lua") -if minetest.get_modpath("lightning") ~= nil then +if minetest.get_modpath("lightning") then dofile(modpath.."/thunder.lua") end diff --git a/mods/ENVIRONMENT/mcl_weather/locale/mcl_weather.pl.tr b/mods/ENVIRONMENT/mcl_weather/locale/mcl_weather.pl.tr new file mode 100644 index 000000000..fc4c72a31 --- /dev/null +++ b/mods/ENVIRONMENT/mcl_weather/locale/mcl_weather.pl.tr @@ -0,0 +1,8 @@ +# textdomain: mcl_weather +Gives ability to control weather=Daje możliwość kontrolowania pogody +Changes the weather to the specified parameter.=Zmienia pogodę na wskazany parametr +Error: No weather specified.=Błąd: nie wskazano pogody. +Error: Invalid parameters.=Błąd: nieprawidłowy parametr. +Error: Duration can't be less than 1 second.=Błąd: Czas trwania nie może być mniejszy niż 1 sekunda. +Error: Invalid weather specified. Use “clear”, “rain”, “snow” or “thunder”.=Błąd: wskazano nieprawidłową pogodę. Użyj "clear", "rain", "snow" lub "thunder". +Toggles between clear weather and weather with downfall (randomly rain, thunderstorm or snow)=Zmienia pomiędzy czystą pogodą i pogodą z opadami (losowo deszcz, burza lub śnieg) diff --git a/mods/ENVIRONMENT/mcl_weather/mod.conf b/mods/ENVIRONMENT/mcl_weather/mod.conf index 4cc16984e..4f1102b7a 100644 --- a/mods/ENVIRONMENT/mcl_weather/mod.conf +++ b/mods/ENVIRONMENT/mcl_weather/mod.conf @@ -1 +1,5 @@ name = mcl_weather +author = xeranas +description = Weather and sky handling: Rain, snow, thunderstorm, End and Nether ambience +depends = mcl_init, mcl_worlds +optional_depends = lightning diff --git a/mods/ENVIRONMENT/mcl_weather/nether_dust.lua b/mods/ENVIRONMENT/mcl_weather/nether_dust.lua index 735676454..d328dae21 100644 --- a/mods/ENVIRONMENT/mcl_weather/nether_dust.lua +++ b/mods/ENVIRONMENT/mcl_weather/nether_dust.lua @@ -2,7 +2,7 @@ mcl_weather.nether_dust = {} mcl_weather.nether_dust.particles_count = 99 -- calculates coordinates and draw particles for Nether dust -mcl_weather.nether_dust.add_dust_particles = function(player) +function mcl_weather.nether_dust.add_dust_particles(player) for i=mcl_weather.nether_dust.particles_count, 1,-1 do local rpx, rpy, rpz = mcl_weather.get_random_pos_by_player_look_dir(player) minetest.add_particle({ @@ -27,7 +27,7 @@ minetest.register_globalstep(function(dtime) if timer < 0.7 then return end timer = 0 - for _, player in ipairs(minetest.get_connected_players()) do + for _, player in pairs(minetest.get_connected_players()) do if not mcl_worlds.has_dust(player:get_pos()) then return false end diff --git a/mods/ENVIRONMENT/mcl_weather/rain.lua b/mods/ENVIRONMENT/mcl_weather/rain.lua index 9b4210060..220b61006 100644 --- a/mods/ENVIRONMENT/mcl_weather/rain.lua +++ b/mods/ENVIRONMENT/mcl_weather/rain.lua @@ -1,6 +1,8 @@ local PARTICLES_COUNT_RAIN = 30 local PARTICLES_COUNT_THUNDER = 45 +local get_connected_players = minetest.get_connected_players + mcl_weather.rain = { -- max rain particles created at time particles_count = PARTICLES_COUNT_RAIN, @@ -18,7 +20,7 @@ mcl_weather.rain = { init_done = false, } -mcl_weather.rain.sound_handler = function(player) +function mcl_weather.rain.sound_handler(player) return minetest.sound_play("weather_rain", { to_player = player:get_player_name(), loop = true, @@ -26,7 +28,7 @@ mcl_weather.rain.sound_handler = function(player) end -- set skybox based on time (uses skycolor api) -mcl_weather.rain.set_sky_box = function() +function mcl_weather.rain.set_sky_box() if mcl_weather.state == "rain" then mcl_weather.skycolor.add_layer( "weather-pack-rain-sky", @@ -36,7 +38,7 @@ mcl_weather.rain.set_sky_box = function() {r=85, g=86, b=98}, {r=0, g=0, b=0}}) mcl_weather.skycolor.active = true - for _, player in pairs(minetest.get_connected_players()) do + for _, player in pairs(get_connected_players()) do player:set_clouds({color="#5D5D5FE8"}) end end @@ -44,8 +46,7 @@ end -- creating manually parctiles instead of particles spawner because of easier to control -- spawn position. -mcl_weather.rain.add_rain_particles = function(player) - +function mcl_weather.rain.add_rain_particles(player) mcl_weather.rain.last_rp_count = 0 for i=mcl_weather.rain.particles_count, 1,-1 do local random_pos_x, random_pos_y, random_pos_z = mcl_weather.get_random_pos_by_player_look_dir(player) @@ -68,7 +69,7 @@ mcl_weather.rain.add_rain_particles = function(player) end -- Simple random texture getter -mcl_weather.rain.get_texture = function() +function mcl_weather.rain.get_texture() local texture_name local random_number = math.random() if random_number > 0.33 then @@ -83,7 +84,7 @@ end -- register player for rain weather. -- basically needs for origin sky reference and rain sound controls. -mcl_weather.rain.add_player = function(player) +function mcl_weather.rain.add_player(player) if mcl_weather.players[player:get_player_name()] == nil then local player_meta = {} player_meta.origin_sky = {player:get_sky()} @@ -93,9 +94,9 @@ end -- remove player from player list effected by rain. -- be sure to remove sound before removing player otherwise soundhandler reference will be lost. -mcl_weather.rain.remove_player = function(player) +function mcl_weather.rain.remove_player(player) local player_meta = mcl_weather.players[player:get_player_name()] - if player_meta ~= nil and player_meta.origin_sky ~= nil then + if player_meta and player_meta.origin_sky then player:set_clouds({color="#FFF0F0E5"}) mcl_weather.players[player:get_player_name()] = nil end @@ -117,14 +118,14 @@ end) -- adds and removes rain sound depending how much rain particles around player currently exist. -- have few seconds delay before each check to avoid on/off sound too often -- when player stay on 'edge' where sound should play and stop depending from random raindrop appearance. -mcl_weather.rain.update_sound = function(player) +function mcl_weather.rain.update_sound(player) local player_meta = mcl_weather.players[player:get_player_name()] - if player_meta ~= nil then - if player_meta.sound_updated ~= nil and player_meta.sound_updated + 5 > minetest.get_gametime() then + if player_meta then + if player_meta.sound_updated and player_meta.sound_updated + 5 > minetest.get_gametime() then return false end - if player_meta.sound_handler ~= nil then + if player_meta.sound_handler then if mcl_weather.rain.last_rp_count == 0 then minetest.sound_fade(player_meta.sound_handler, -0.5, 0.0) player_meta.sound_handler = nil @@ -138,9 +139,9 @@ mcl_weather.rain.update_sound = function(player) end -- rain sound removed from player. -mcl_weather.rain.remove_sound = function(player) +function mcl_weather.rain.remove_sound(player) local player_meta = mcl_weather.players[player:get_player_name()] - if player_meta ~= nil and player_meta.sound_handler ~= nil then + if player_meta and player_meta.sound_handler then minetest.sound_fade(player_meta.sound_handler, -0.5, 0.0) player_meta.sound_handler = nil player_meta.sound_updated = nil @@ -148,13 +149,13 @@ mcl_weather.rain.remove_sound = function(player) end -- callback function for removing rain -mcl_weather.rain.clear = function() +function mcl_weather.rain.clear() mcl_weather.rain.raining = false mcl_weather.rain.sky_last_update = -1 mcl_weather.rain.init_done = false mcl_weather.rain.set_particles_mode("rain") mcl_weather.skycolor.remove_layer("weather-pack-rain-sky") - for _, player in ipairs(minetest.get_connected_players()) do + for _, player in pairs(get_connected_players()) do mcl_weather.rain.remove_sound(player) mcl_weather.rain.remove_player(player) end @@ -164,11 +165,10 @@ minetest.register_globalstep(function(dtime) if mcl_weather.state ~= "rain" then return false end - mcl_weather.rain.make_weather() end) -mcl_weather.rain.make_weather = function() +function mcl_weather.rain.make_weather() if mcl_weather.rain.init_done == false then mcl_weather.rain.raining = true mcl_weather.rain.set_sky_box() @@ -176,7 +176,7 @@ mcl_weather.rain.make_weather = function() mcl_weather.rain.init_done = true end - for _, player in ipairs(minetest.get_connected_players()) do + for _, player in pairs(get_connected_players()) do if (mcl_weather.is_underwater(player) or not mcl_worlds.has_weather(player:get_pos())) then mcl_weather.rain.remove_sound(player) return false @@ -188,7 +188,7 @@ mcl_weather.rain.make_weather = function() end -- Switch the number of raindrops: "thunder" for many raindrops, otherwise for normal raindrops -mcl_weather.rain.set_particles_mode = function(mode) +function mcl_weather.rain.set_particles_mode(mode) if mode == "thunder" then mcl_weather.rain.particles_count = PARTICLES_COUNT_THUNDER else @@ -247,7 +247,7 @@ if mcl_weather.allow_abm then end end end - }) + }) -- Wetten the soil minetest.register_abm({ @@ -262,7 +262,7 @@ if mcl_weather.allow_abm then end end end - }) + }) end if mcl_weather.reg_weathers.rain == nil then diff --git a/mods/ENVIRONMENT/mcl_weather/screenshot.png b/mods/ENVIRONMENT/mcl_weather/screenshot.png deleted file mode 100644 index 1ee3ea0597008b48c09fb306a00cf0e7ecf2776e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 30710 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

^ul$R>3DDykb8lXf}k-Si2T? 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 diff --git a/mods/ENVIRONMENT/mcl_weather/skycolor.lua b/mods/ENVIRONMENT/mcl_weather/skycolor.lua index 6cc94b5c1..6b89c33be 100644 --- a/mods/ENVIRONMENT/mcl_weather/skycolor.lua +++ b/mods/ENVIRONMENT/mcl_weather/skycolor.lua @@ -11,7 +11,7 @@ mcl_weather.skycolor = { -- Update interval. update_interval = 15, - -- Main sky colors: starts from midnight to midnight. + -- Main sky colors: starts from midnight to midnight. -- Please do not set directly. Use add_layer instead. colors = {}, @@ -43,7 +43,7 @@ mcl_weather.skycolor = { -- Remove layer from colors table remove_layer = function(layer_name) - for k, name in ipairs(mcl_weather.skycolor.layer_names) do + for k, name in pairs(mcl_weather.skycolor.layer_names) do if name == layer_name then table.remove(mcl_weather.skycolor.layer_names, k) mcl_weather.skycolor.force_update = true @@ -205,8 +205,8 @@ mcl_weather.skycolor = { -- Returns first player sky color. I assume that all players are in same color layout. get_current_bg_color = function() local players = mcl_weather.skycolor.utils.get_players(nil) - for _, player in ipairs(players) do - return player:get_sky() + if players[1] then + return players[1]:get_sky() end return nil end @@ -235,7 +235,7 @@ minetest.register_globalstep(function(dtime) end) -local initsky = function(player) +local function initsky(player) if (mcl_weather.skycolor.active) then mcl_weather.skycolor.force_update = true end diff --git a/mods/ENVIRONMENT/mcl_weather/snow.lua b/mods/ENVIRONMENT/mcl_weather/snow.lua index 986d38d43..9f89a3a0a 100644 --- a/mods/ENVIRONMENT/mcl_weather/snow.lua +++ b/mods/ENVIRONMENT/mcl_weather/snow.lua @@ -1,82 +1,84 @@ +local get_connected_players = minetest.get_connected_players + mcl_weather.snow = {} mcl_weather.snow.particles_count = 15 mcl_weather.snow.init_done = false --- calculates coordinates and draw particles for snow weather -mcl_weather.snow.add_snow_particles = function(player) - mcl_weather.rain.last_rp_count = 0 - for i=mcl_weather.snow.particles_count, 1,-1 do - local random_pos_x, random_pos_y, random_pos_z = mcl_weather.get_random_pos_by_player_look_dir(player) - random_pos_y = math.random() + math.random(player:get_pos().y - 1, player:get_pos().y + 7) - if minetest.get_node_light({x=random_pos_x, y=random_pos_y, z=random_pos_z}, 0.5) == 15 then - mcl_weather.rain.last_rp_count = mcl_weather.rain.last_rp_count + 1 - minetest.add_particle({ - pos = {x=random_pos_x, y=random_pos_y, z=random_pos_z}, - velocity = {x = math.random(-100,100)*0.001, y = math.random(-300,-100)*0.004, z = math.random(-100,100)*0.001}, - acceleration = {x = 0, y=0, z = 0}, - expirationtime = 8.0, - size = 1, - collisiondetection = true, - collision_removal = true, - object_collision = false, - vertical = false, - texture = mcl_weather.snow.get_texture(), - playername = player:get_player_name() - }) - end - end +-- calculates coordinates and draw particles for snow weather +function mcl_weather.snow.add_snow_particles(player) + mcl_weather.rain.last_rp_count = 0 + for i=mcl_weather.snow.particles_count, 1,-1 do + local random_pos_x, _, random_pos_z = mcl_weather.get_random_pos_by_player_look_dir(player) + local random_pos_y = math.random() + math.random(player:get_pos().y - 1, player:get_pos().y + 7) + if minetest.get_node_light({x=random_pos_x, y=random_pos_y, z=random_pos_z}, 0.5) == 15 then + mcl_weather.rain.last_rp_count = mcl_weather.rain.last_rp_count + 1 + minetest.add_particle({ + pos = {x=random_pos_x, y=random_pos_y, z=random_pos_z}, + velocity = {x = math.random(-100,100)*0.001, y = math.random(-300,-100)*0.004, z = math.random(-100,100)*0.001}, + acceleration = {x = 0, y=0, z = 0}, + expirationtime = 8.0, + size = 1, + collisiondetection = true, + collision_removal = true, + object_collision = false, + vertical = false, + texture = mcl_weather.snow.get_texture(), + playername = player:get_player_name() + }) + end + end end -mcl_weather.snow.set_sky_box = function() - mcl_weather.skycolor.add_layer( - "weather-pack-snow-sky", - {{r=0, g=0, b=0}, - {r=85, g=86, b=86}, - {r=135, g=135, b=135}, - {r=85, g=86, b=86}, - {r=0, g=0, b=0}}) - mcl_weather.skycolor.active = true - for _, player in pairs(minetest.get_connected_players()) do - player:set_clouds({color="#ADADADE8"}) - end - mcl_weather.skycolor.active = true +function mcl_weather.snow.set_sky_box() + mcl_weather.skycolor.add_layer( + "weather-pack-snow-sky", + {{r=0, g=0, b=0}, + {r=85, g=86, b=86}, + {r=135, g=135, b=135}, + {r=85, g=86, b=86}, + {r=0, g=0, b=0}}) + mcl_weather.skycolor.active = true + for _, player in pairs(get_connected_players()) do + player:set_clouds({color="#ADADADE8"}) + end + mcl_weather.skycolor.active = true end -mcl_weather.snow.clear = function() - mcl_weather.skycolor.remove_layer("weather-pack-snow-sky") - mcl_weather.snow.init_done = false +function mcl_weather.snow.clear() + mcl_weather.skycolor.remove_layer("weather-pack-snow-sky") + mcl_weather.snow.init_done = false end -- Simple random texture getter -mcl_weather.snow.get_texture = function() - return "weather_pack_snow_snowflake"..math.random(1,2)..".png" +function mcl_weather.snow.get_texture() + return "weather_pack_snow_snowflake"..math.random(1,2)..".png" end local timer = 0 minetest.register_globalstep(function(dtime) - if mcl_weather.state ~= "snow" then - return false - end - - timer = timer + dtime; - if timer >= 0.5 then - timer = 0 - else - return - end + if mcl_weather.state ~= "snow" then + return false + end - if mcl_weather.snow.init_done == false then - mcl_weather.snow.set_sky_box() - mcl_weather.snow.init_done = true - end + timer = timer + dtime; + if timer >= 0.5 then + timer = 0 + else + return + end - for _, player in ipairs(minetest.get_connected_players()) do - if (mcl_weather.is_underwater(player) or not mcl_worlds.has_weather(player:get_pos())) then - return false - end - mcl_weather.snow.add_snow_particles(player) - end + if mcl_weather.snow.init_done == false then + mcl_weather.snow.set_sky_box() + mcl_weather.snow.init_done = true + end + + for _, player in pairs(get_connected_players()) do + if (mcl_weather.is_underwater(player) or not mcl_worlds.has_weather(player:get_pos())) then + return false + end + mcl_weather.snow.add_snow_particles(player) + end end) -- register snow weather diff --git a/mods/ENVIRONMENT/mcl_weather/thunder.lua b/mods/ENVIRONMENT/mcl_weather/thunder.lua index b1837f023..f8e5a0371 100644 --- a/mods/ENVIRONMENT/mcl_weather/thunder.lua +++ b/mods/ENVIRONMENT/mcl_weather/thunder.lua @@ -1,61 +1,61 @@ +local get_connected_players = minetest.get_connected_players + -- turn off lightning mod 'auto mode' lightning.auto = false mcl_weather.thunder = { - next_strike = 0, - min_delay = 3, - max_delay = 12, - init_done = false, + next_strike = 0, + min_delay = 3, + max_delay = 12, + init_done = false, } minetest.register_globalstep(function(dtime) - if mcl_weather.get_weather() ~= "thunder" then - return false - end - - mcl_weather.rain.set_particles_mode("thunder") - mcl_weather.rain.make_weather() + if mcl_weather.get_weather() ~= "thunder" then + return false + end - if mcl_weather.thunder.init_done == false then - mcl_weather.skycolor.add_layer( - "weather-pack-thunder-sky", - {{r=0, g=0, b=0}, - {r=40, g=40, b=40}, - {r=85, g=86, b=86}, - {r=40, g=40, b=40}, - {r=0, g=0, b=0}}) - mcl_weather.skycolor.active = true - for _, player in pairs(minetest.get_connected_players()) do - player:set_clouds({color="#3D3D3FE8"}) - end - mcl_weather.thunder.init_done = true - end - - if (mcl_weather.thunder.next_strike <= minetest.get_gametime()) then - lightning.strike() - local delay = math.random(mcl_weather.thunder.min_delay, mcl_weather.thunder.max_delay) - mcl_weather.thunder.next_strike = minetest.get_gametime() + delay - end + mcl_weather.rain.set_particles_mode("thunder") + mcl_weather.rain.make_weather() + if mcl_weather.thunder.init_done == false then + mcl_weather.skycolor.add_layer("weather-pack-thunder-sky", { + {r=0, g=0, b=0}, + {r=40, g=40, b=40}, + {r=85, g=86, b=86}, + {r=40, g=40, b=40}, + {r=0, g=0, b=0}, + }) + mcl_weather.skycolor.active = true + for _, player in pairs(get_connected_players()) do + player:set_clouds({color="#3D3D3FE8"}) + end + mcl_weather.thunder.init_done = true + end + if (mcl_weather.thunder.next_strike <= minetest.get_gametime()) then + lightning.strike() + local delay = math.random(mcl_weather.thunder.min_delay, mcl_weather.thunder.max_delay) + mcl_weather.thunder.next_strike = minetest.get_gametime() + delay + end end) -mcl_weather.thunder.clear = function() - mcl_weather.rain.clear() - mcl_weather.skycolor.remove_layer("weather-pack-thunder-sky") - mcl_weather.skycolor.remove_layer("lightning") - mcl_weather.thunder.init_done = false +function mcl_weather.thunder.clear() + mcl_weather.rain.clear() + mcl_weather.skycolor.remove_layer("weather-pack-thunder-sky") + mcl_weather.skycolor.remove_layer("lightning") + mcl_weather.thunder.init_done = false end -- register thunderstorm weather if mcl_weather.reg_weathers.thunder == nil then - mcl_weather.reg_weathers.thunder = { - clear = mcl_weather.thunder.clear, - light_factor = 0.33333, - -- 10min - 20min - min_duration = 600, - max_duration = 1200, - transitions = { - [100] = "rain", - } - } + mcl_weather.reg_weathers.thunder = { + clear = mcl_weather.thunder.clear, + light_factor = 0.33333, + -- 10min - 20min + min_duration = 600, + max_duration = 1200, + transitions = { + [100] = "rain", + }, + } end diff --git a/mods/ENVIRONMENT/mcl_weather/weather_core.lua b/mods/ENVIRONMENT/mcl_weather/weather_core.lua index 365f6e549..34f69406d 100644 --- a/mods/ENVIRONMENT/mcl_weather/weather_core.lua +++ b/mods/ENVIRONMENT/mcl_weather/weather_core.lua @@ -1,27 +1,29 @@ -local S = minetest.get_translator("mcl_weather") +local S = minetest.get_translator(minetest.get_current_modname()) + +local math = math -- weather states, 'none' is default, other states depends from active mods mcl_weather.state = "none" - + -- player list for saving player meta info mcl_weather.players = {} - + -- default weather check interval for global step mcl_weather.check_interval = 5 - + -- weather min duration mcl_weather.min_duration = 600 - + -- weather max duration mcl_weather.max_duration = 9000 -- weather calculated end time mcl_weather.end_time = nil - + -- registered weathers mcl_weather.reg_weathers = {} --- global flag to disable/enable ABM logic. +-- global flag to disable/enable ABM logic. mcl_weather.allow_abm = true mcl_weather.reg_weathers["none"] = { @@ -37,24 +39,25 @@ mcl_weather.reg_weathers["none"] = { local storage = minetest.get_mod_storage() -- Save weather into mod storage, so it can be loaded after restarting the server -local save_weather = function() +local function save_weather() + if not mcl_weather.end_time then return end storage:set_string("mcl_weather_state", mcl_weather.state) storage:set_int("mcl_weather_end_time", mcl_weather.end_time) minetest.log("verbose", "[mcl_weather] Weather data saved: state="..mcl_weather.state.." end_time="..mcl_weather.end_time) end minetest.register_on_shutdown(save_weather) -mcl_weather.get_rand_end_time = function(min_duration, max_duration) +function mcl_weather.get_rand_end_time(min_duration, max_duration) local r - if min_duration ~= nil and max_duration ~= nil then + if min_duration and max_duration then r = math.random(min_duration, max_duration) else r = math.random(mcl_weather.min_duration, mcl_weather.max_duration) - end + end return minetest.get_gametime() + r end -mcl_weather.get_current_light_factor = function() +function mcl_weather.get_current_light_factor() if mcl_weather.state == "none" then return nil else @@ -65,7 +68,7 @@ end -- Returns true if pos is outdoor. -- Outdoor is defined as any node in the Overworld under open sky. -- FIXME: Nodes below glass also count as “outdoor”, this should not be the case. -mcl_weather.is_outdoor = function(pos) +function mcl_weather.is_outdoor(pos) local cpos = {x=pos.x, y=pos.y+1, z=pos.z} local dim = mcl_worlds.pos_to_dimension(cpos) if minetest.get_node_light(cpos, 0.5) == 15 and dim == "overworld" then @@ -76,11 +79,11 @@ end -- checks if player is undewater. This is needed in order to -- turn off weather particles generation. -mcl_weather.is_underwater = function(player) +function mcl_weather.is_underwater(player) local ppos = player:get_pos() local offset = player:get_eye_offset() - local player_eye_pos = {x = ppos.x + offset.x, - y = ppos.y + offset.y + 1.5, + local player_eye_pos = {x = ppos.x + offset.x, + y = ppos.y + offset.y + 1.5, z = ppos.z + offset.z} local node_level = minetest.get_node_level(player_eye_pos) if node_level == 8 or node_level == 7 then @@ -90,14 +93,12 @@ mcl_weather.is_underwater = function(player) end -- trying to locate position for particles by player look direction for performance reason. --- it is costly to generate many particles around player so goal is focus mainly on front view. -mcl_weather.get_random_pos_by_player_look_dir = function(player) +-- it is costly to generate many particles around player so goal is focus mainly on front view. +function mcl_weather.get_random_pos_by_player_look_dir(player) local look_dir = player:get_look_dir() local player_pos = player:get_pos() - local random_pos_x = 0 - local random_pos_y = 0 - local random_pos_z = 0 + local random_pos_x, random_pos_y, random_pos_z if look_dir.x > 0 then if look_dir.z > 0 then @@ -122,6 +123,7 @@ mcl_weather.get_random_pos_by_player_look_dir = function(player) end local t, wci = 0, mcl_weather.check_interval + minetest.register_globalstep(function(dtime) t = t + dtime if t < wci then return end @@ -145,7 +147,7 @@ minetest.register_globalstep(function(dtime) end) -- Sets random weather (which could be 'none' (no weather)). -mcl_weather.set_random_weather = function(weather_name, weather_meta) +function mcl_weather.set_random_weather(weather_name, weather_meta) if weather_meta == nil then return end local transitions = weather_meta.transitions local random_roll = math.random(0,100) @@ -165,11 +167,11 @@ end -- * explicit_end_time is OPTIONAL. If specified, explicitly set the -- gametime (minetest.get_gametime) in which the weather ends. -- * changer is OPTIONAL, for logging purposes. -mcl_weather.change_weather = function(new_weather, explicit_end_time, changer_name) +function mcl_weather.change_weather(new_weather, explicit_end_time, changer_name) local changer_name = changer_name or debug.getinfo(2).name.."()" - if (mcl_weather.reg_weathers ~= nil and mcl_weather.reg_weathers[new_weather] ~= nil) then - if (mcl_weather.state ~= nil and mcl_weather.reg_weathers[mcl_weather.state] ~= nil) then + if (mcl_weather.reg_weathers and mcl_weather.reg_weathers[new_weather]) then + if (mcl_weather.state and mcl_weather.reg_weathers[mcl_weather.state]) then mcl_weather.reg_weathers[mcl_weather.state].clear() end @@ -198,7 +200,7 @@ mcl_weather.change_weather = function(new_weather, explicit_end_time, changer_na return false end -mcl_weather.get_weather = function() +function mcl_weather.get_weather() return mcl_weather.state end @@ -207,7 +209,7 @@ minetest.register_privilege("weather_manager", { give_to_singleplayer = false }) --- Weather command definition. Set +-- Weather command definition. Set minetest.register_chatcommand("weather", { params = "(clear | rain | snow | thunder) []", description = S("Changes the weather to the specified parameter."), @@ -267,12 +269,12 @@ minetest.register_chatcommand("toggledownfall", { -- Configuration setting which allows user to disable ABM for weathers (if they use it). -- Weather mods expected to be use this flag before registering ABM. local weather_allow_abm = minetest.settings:get_bool("weather_allow_abm") -if weather_allow_abm ~= nil and weather_allow_abm == false then +if weather_allow_abm == false then mcl_weather.allow_abm = false -end +end -local load_weather = function() +local function load_weather() local weather = storage:get_string("mcl_weather_state") if weather and weather ~= "" then mcl_weather.state = weather diff --git a/mods/HELP/doc/description.txt b/mods/HELP/doc/description.txt deleted file mode 100644 index 59a7a4c21..000000000 --- a/mods/HELP/doc/description.txt +++ /dev/null @@ -1 +0,0 @@ -Provides an extensible in-game help with texts about gameplay basics (such a crafting), items and advanced usage. diff --git a/mods/HELP/doc/doc/init.lua b/mods/HELP/doc/doc/init.lua index 360cc149c..304900753 100644 --- a/mods/HELP/doc/doc/init.lua +++ b/mods/HELP/doc/doc/init.lua @@ -1,13 +1,11 @@ -local S = minetest.get_translator("doc") +local S = minetest.get_translator(minetest.get_current_modname()) local F = function(f) return minetest.formspec_escape(S(f)) end --- Compability for 0.4.14 or earlier -local colorize -if minetest.colorize then - colorize = minetest.colorize -else - colorize = function(color, text) return text end -end +local mod_central_messages = minetest.get_modpath("central_message") +local mod_inventory_plus = minetest.get_modpath("inventory_plus") + +local math = math +local colorize = minetest.colorize doc = {} @@ -41,10 +39,10 @@ doc.FORMSPEC.ENTRY_HEIGHT = doc.FORMSPEC.ENTRY_END_Y - doc.FORMSPEC.ENTRY_START_ -- Internal helper variables local DOC_INTRO = S("This is the help.") -local COLOR_NOT_VIEWED = "#00FFFF" -- cyan -local COLOR_VIEWED = "#FFFFFF" -- white -local COLOR_HIDDEN = "#999999" -- gray -local COLOR_ERROR = "#FF0000" -- red +local COLOR_NOT_VIEWED = "#00FFFF" -- cyan +local COLOR_VIEWED = "#FFFFFF" -- white +local COLOR_HIDDEN = "#999999" -- gray +local COLOR_ERROR = "#FF0000" -- red local CATEGORYFIELDSIZE = { WIDTH = math.ceil(doc.FORMSPEC.WIDTH / 4), @@ -69,7 +67,7 @@ local set_category_order_was_called = false local function get_entry(category_id, entry_id) local category = doc.data.categories[category_id] local entry - if category ~= nil then + if category then entry = category.entries[entry_id] end if category == nil or entry == nil then @@ -99,7 +97,7 @@ end -- Add a new category function doc.add_category(id, def) - if doc.data.categories[id] == nil and id ~= nil then + if doc.data.categories[id] == nil and id then doc.data.categories[id] = {} doc.data.categories[id].entries = {} doc.data.categories[id].entry_count = 0 @@ -129,7 +127,7 @@ end -- Add a new entry function doc.add_entry(category_id, entry_id, def) local cat = doc.data.categories[category_id] - if cat ~= nil then + if cat then local hidden = def.hidden or (def.hidden == nil and cat.def.hide_entries_by_default) if hidden then cat.hidden_count = cat.hidden_count + 1 @@ -183,7 +181,7 @@ function doc.mark_entry_as_revealed(playername, category_id, entry_id) doc.data.players[playername].entry_textlist_needs_updating = true -- Notify player of entry revelation if doc.data.players[playername].stored_data.notify_on_reveal == true then - if minetest.get_modpath("central_message") ~= nil then + if mod_central_messages then local cat = doc.data.categories[category_id] cmsg.push_message_player(minetest.get_player_by_name(playername), S("New help entry unlocked: @1 > @2", cat.def.name, entry.name)) end @@ -230,7 +228,7 @@ function doc.mark_all_entries_as_revealed(playername) msg = S("All help entries are already revealed.") end -- Notify - if minetest.get_modpath("central_message") ~= nil then + if mod_central_messages then cmsg.push_message_player(minetest.get_player_by_name(playername), msg) else minetest.chat_send_player(playername, msg) @@ -239,7 +237,7 @@ end -- Returns true if the specified entry has been viewed by the player function doc.entry_viewed(playername, category_id, entry_id) - local entry, category_id, entry_id = get_entry(category_id, entry_id) + local _, category_id, entry_id = get_entry(category_id, entry_id) if doc.data.players[playername].stored_data.viewed[category_id] == nil then return false else @@ -249,7 +247,7 @@ end -- Returns true if the specified entry is hidden from the player function doc.entry_revealed(playername, category_id, entry_id) - local entry, category_id, entry_id = get_entry(category_id, entry_id) + local _, category_id, entry_id = get_entry(category_id, entry_id) local hidden = doc.data.categories[category_id].entries[entry_id].hidden if doc.data.players[playername].stored_data.revealed[category_id] == nil then return not hidden @@ -308,7 +306,7 @@ function doc.show_entry(playername, category_id, entry_id, ignore_hidden) minetest.show_formspec(playername, "doc:error_no_categories", doc.formspec_error_no_categories()) return end - local entry, category_id, entry_id = get_entry(category_id, entry_id) + local _, category_id, entry_id = get_entry(category_id, entry_id) if ignore_hidden or doc.entry_revealed(playername, category_id, entry_id) then local playerdata = doc.data.players[playername] playerdata.category = category_id @@ -433,7 +431,7 @@ end -- Returns the currently viewed entry and/or category of the player function doc.get_selection(playername) local playerdata = doc.data.players[playername] - if playerdata ~= nil then + if playerdata then local cat = playerdata.category if cat then local entry = playerdata.entry @@ -454,18 +452,18 @@ end doc.entry_builders = {} -- Scrollable freeform text -doc.entry_builders.text = function(data) +function doc.entry_builders.text(data) local formstring = doc.widgets.text(data, doc.FORMSPEC.ENTRY_START_X, doc.FORMSPEC.ENTRY_START_Y, doc.FORMSPEC.ENTRY_WIDTH - 0.4, doc.FORMSPEC.ENTRY_HEIGHT) return formstring end -- Scrollable freeform text with an optional standard gallery (3 rows, 3:2 aspect ratio) -doc.entry_builders.text_and_gallery = function(data, playername) +function doc.entry_builders.text_and_gallery(data, playername) -- How much height the image gallery “steals” from the text widget local stolen_height = 0 local formstring = "" -- Only add the gallery if images are in the data, otherwise, the text widget gets all of the space - if data.images ~= nil then + if data.images then local gallery gallery, stolen_height = doc.widgets.gallery(data.images, playername, nil, doc.FORMSPEC.ENTRY_END_Y + 0.2, nil, nil, nil, nil, false) formstring = formstring .. gallery @@ -482,7 +480,7 @@ end doc.widgets = {} -- Scrollable freeform text -doc.widgets.text = function(data, x, y, width, height) +function doc.widgets.text(data, x, y, width, height) if x == nil then x = doc.FORMSPEC.ENTRY_START_X end @@ -508,7 +506,7 @@ end -- Image gallery -- Currently, only one gallery per entry is supported. TODO: Add support for multiple galleries in an entry (low priority) -doc.widgets.gallery = function(imagedata, playername, x, y, aspect_ratio, width, rows, align_left, align_top) +function doc.widgets.gallery(imagedata, playername, x, y, aspect_ratio, width, rows, align_left, align_top) if playername == nil then return nil end -- emergency exit local formstring = "" @@ -593,13 +591,11 @@ doc.widgets.gallery = function(imagedata, playername, x, y, aspect_ratio, width, formstring = formstring .. "label["..nx..","..ny..";"..i.."]" pos = pos + 1 end - local bw, bh - return formstring, ih end -- Direct formspec -doc.entry_builders.formspec = function(data) +function doc.entry_builders.formspec(data) return data end @@ -613,7 +609,7 @@ do minetest.log("action", "[doc] doc.mt opened.") local string = file:read() io.close(file) - if(string ~= nil) then + if string then local savetable = minetest.deserialize(string) for name, players_stored_data in pairs(savetable.players_stored_data) do doc.data.players[name] = {} @@ -680,13 +676,13 @@ function doc.formspec_main(playername) local data = doc.data.categories[id] local bw = doc.FORMSPEC.WIDTH / math.floor(((doc.data.category_count-1) / CATEGORYFIELDSIZE.HEIGHT)+1) -- Skip categories which do not exist - if data ~= nil then + if data then -- Category buton local button = "button["..((x-1)*bw)..","..y..";"..bw..",1;doc_button_category_"..id..";"..minetest.formspec_escape(data.def.name).."]" local tooltip = "" -- Optional description - if data.def.description ~= nil then - tooltip = "tooltip[doc_button_category_"..id..";"..minetest.formspec_escape(data.def.description).."]" + if data.def.description then + tooltip = "tooltip[doc_button_category_"..id..";"..minetest.formspec_escape(data.def.description).."]" end formstring = formstring .. button .. tooltip y = y + 1 @@ -709,7 +705,7 @@ function doc.formspec_main(playername) end end local sel = doc.data.categories[doc.data.players[playername].category] - if sel ~= nil then + if sel then formstring = formstring .. ";" formstring = formstring .. doc.data.categories[doc.data.players[playername].category].order_position end @@ -719,7 +715,7 @@ function doc.formspec_main(playername) notify_checkbox_y = doc.FORMSPEC.HEIGHT-1 end local text - if minetest.get_modpath("central_message") then + if mod_central_messages then text = F("Notify me when new help is available") else text = F("Play notification sound when new help is available") @@ -810,7 +806,7 @@ function doc.get_sorted_entry_names(cid) local cat = doc.data.categories[cid] local used_eids = {} -- Helper function to extract the entry ID out of the output table - local extract = function(entry_table) + local function extract(entry_table) local eids = {} for k,v in pairs(entry_table) do local eid = v.eid @@ -952,7 +948,7 @@ function doc.process_form(player,formname,fields) local playername = player:get_player_name() --[[ process clicks on the tab header ]] if(formname == "doc:main" or formname == "doc:category" or formname == "doc:entry") then - if fields.doc_header ~= nil then + if fields.doc_header then local tab = tonumber(fields.doc_header) local formspec, subformname, contents local cid, eid @@ -967,7 +963,7 @@ function doc.process_form(player,formname,fields) elseif(tab==3) then doc.data.players[playername].galidx = 1 contents = doc.formspec_entry(cid, eid, playername) - if cid ~= nil and eid ~= nil then + if cid and eid then doc.mark_entry_as_viewed(playername, cid, eid) end subformname = "entry" @@ -992,7 +988,7 @@ function doc.process_form(player,formname,fields) if fields["doc_mainlist"] then local event = minetest.explode_textlist_event(fields["doc_mainlist"]) local cid = doc.data.category_order[event.index] - if cid ~= nil then + if cid then if event.type == "CHG" then doc.data.players[playername].catsel = nil doc.data.players[playername].category = cid @@ -1022,10 +1018,10 @@ function doc.process_form(player,formname,fields) elseif(formname == "doc:category") then if fields["doc_button_goto_entry"] then local cid = doc.data.players[playername].category - if cid ~= nil then + if cid then local eid = nil local eids, catsel = doc.data.players[playername].entry_ids, doc.data.players[playername].catsel - if eids ~= nil and catsel ~= nil then + if eids and catsel then eid = eids[catsel] end doc.data.players[playername].galidx = 1 @@ -1048,7 +1044,7 @@ function doc.process_form(player,formname,fields) local cid = doc.data.players[playername].category local eid = nil local eids, catsel = doc.data.players[playername].entry_ids, event.index - if eids ~= nil and catsel ~= nil then + if eids and catsel then eid = eids[catsel] end doc.mark_entry_as_viewed(playername, cid, eid) @@ -1109,7 +1105,7 @@ function doc.process_form(player,formname,fields) minetest.show_formspec(playername, "doc:entry", formspec) end else - if fields["doc_inventory_plus"] and minetest.get_modpath("inventory_plus") then + if fields["doc_inventory_plus"] and mod_inventory_plus then doc.show_doc(playername) return end @@ -1177,18 +1173,18 @@ minetest.register_on_joinplayer(function(player) end -- Add button for Inventory++ - if minetest.get_modpath("inventory_plus") ~= nil then + if mod_inventory_plus then inventory_plus.register_button(player, "doc_inventory_plus", S("Help")) end end) ---[[ Add buttons for inventory mods ]] -local button_action = function(player) +local function button_action(player) doc.show_doc(player:get_player_name()) end -- Unified Inventory -if minetest.get_modpath("unified_inventory") ~= nil then +if minetest.get_modpath("unified_inventory") then unified_inventory.register_button("doc", { type = "image", image = "doc_button_icon_hires.png", @@ -1198,7 +1194,7 @@ if minetest.get_modpath("unified_inventory") ~= nil then end -- sfinv_buttons -if minetest.get_modpath("sfinv_buttons") ~= nil then +if minetest.get_modpath("sfinv_buttons") then sfinv_buttons.register_button("doc", { image = "doc_button_icon_lores.png", tooltip = S("Collection of help texts"), diff --git a/mods/HELP/doc/doc/locale/doc.pl.tr b/mods/HELP/doc/doc/locale/doc.pl.tr new file mode 100644 index 000000000..bd0f3dbaa --- /dev/null +++ b/mods/HELP/doc/doc/locale/doc.pl.tr @@ -0,0 +1,52 @@ +# textdomain:doc +<=< +>=> +Access to the requested entry has been denied; this entry is secret. You may unlock access by progressing in the game. Figure out on your own how to unlock this entry.=Brak dostępu do zażądanego wpisu; ten wpis jest tajemnicą. Możesz odblokować do niego dostęp przez robienie postępów w grze. Wymyśl jak go odblokować. +All entries read.=Wszystkie wpisy przeczytane. +All help entries revealed!=Wszystkie wpisy pomocnicze odkryte! +All help entries are already revealed.=Wszystkie wpisy pomocnicze są już odkryte. +Allows you to reveal all hidden help entries with /help_reveal=Pozwala odkryć wszystkie wpisy pomocnicze przy użyciu /help_reveal +Category list=Lista kategorii +Currently all entries in this category are hidden from you.=Aktualnie wszystkie wpisy w tej kategorii są przed tobą ukryte. +Unlock new entries by progressing in the game.=Odblokuj nowe wpisy przez robienie postępów w grze. +Help=Pomoc +Entry=Wpis +Entry list=Lista wpisów +Error: Access denied.=Błąd: Odmowa dostępu. +Error: No help available.=Błąd: Brak dostępnej pomocy. +Go to category list=Idź do listy kategorii +Go to entry list=Idź do listy wpisów +Help > @1=Pomoc > @1 +Help > @1 > @2=Pomoc > @1 > @2 +Help > @1 > (No Entry)=Pomoc > @1 > (Brak wpisu) +Help > (No Category)=Pomoc > (Brak kategorii) +Hidden entries: @1=Ukryte wpisy: @1 +Nameless entry (@1)=Nienazwany wpis (@1) +New entries: @1=Nowe wpisy: @1 +New help entry unlocked: @1 > @2=Nowy wpis pomocniczy odblokowany: @1 > @2 +No categories have been registered, but they are required to provide help.=Nie zarejestrowano żadnych kategorii, ale są one wymagane do uzyskania pomocy. +The Documentation System [doc] does not come with help contents on its own, it needs additional mods to add help content. Please make sure such mods are enabled on for this world, and try again.=System dokumentacji [doc] nie ma sam z siebie żadnej zawartości, potrzebuje dodatkowych modów, które dodadzą zawartość. +Number of entries: @1=Liczba wpisów: @1 +OK=OK +Open a window providing help entries about Minetest and more=Otwórz okno aby zobaczyć wpisy pomocnicze na temat Minetest i innych rzeczy +Please select a category you wish to learn more about:=Wybierz kategorię o której chciałbyś się więcej dowiedzieć: +Recommended mods: doc_basics, doc_items, doc_identifier, doc_encyclopedia.=Rekomendowane mody: doc_basics, doc_items, doc_identifier, doc_encyclopedia. +Reveal all hidden help entries to you=Odkryj wszystkie ukryte wpisy pomocnicze +Show entry=Pokaż wpis +Show category=Pokaż kategorię +Show next entry=Pokaż następny wpis +Show previous entry=Pokaż poprzedni wpis +This category does not have any entries.=W tej kategorii nie ma żadnych wpisów. +This category has the following entries:=W tej kategorii są następujące wpisy: +This category is empty.=Ta kategoria jest pusta. +This is the help.=To jest pomoc. +You haven't chosen a category yet. Please choose one in the category list first.=Nie wybrano żadnej kategorii. Proszę wybrać jedną z listy kategorii. +You haven't chosen an entry yet. Please choose one in the entry list first.=Nie wybrano wpisu. Proszę wybrać jeden z listy wpisów. +Collection of help texts=Kolekcja tekstów pomocniczych. +Notify me when new help is available=Powiadom mnie gdy nowa pomoc jest dostępna. +Play notification sound when new help is available=Odegraj dźwięk powiadomienia gdy nowa pomoc jest dostępna +Show previous image=Pokaż poprzedni obrazek +Show previous gallery page=Pokaż poprzednią stronę galerii +Show next image=Pokaż następny obrazek +Show next gallery page=Pokaż następną stronę galerii + diff --git a/mods/HELP/doc/doc/mod.conf b/mods/HELP/doc/doc/mod.conf index 302fd83d1..0f65ddff7 100644 --- a/mods/HELP/doc/doc/mod.conf +++ b/mods/HELP/doc/doc/mod.conf @@ -1,3 +1,4 @@ name = doc -optional_depends = unified_inventory, sfinv_buttons, central_message, inventory_plus +author = Wuzzy description = A simple in-game documentation system which enables mods to add help entries based on templates. +optional_depends = unified_inventory, sfinv_buttons, central_message, inventory_plus 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/init.lua b/mods/HELP/doc/doc_identifier/init.lua index 2e041ae2e..c1c2043d3 100644 --- a/mods/HELP/doc/doc_identifier/init.lua +++ b/mods/HELP/doc/doc_identifier/init.lua @@ -1,4 +1,6 @@ -local S = minetest.get_translator("doc_identifier") +local S = minetest.get_translator(minetest.get_current_modname()) + +local mod_doc_basics = minetest.get_modpath("doc_basics") local doc_identifier = {} @@ -6,15 +8,16 @@ doc_identifier.registered_objects = {} -- API doc.sub.identifier = {} -doc.sub.identifier.register_object = function(object_name, category_id, entry_id) + +function doc.sub.identifier.register_object(object_name, category_id, entry_id) doc_identifier.registered_objects[object_name] = { category = category_id, entry = entry_id } end -- END OF API -doc_identifier.identify = function(itemstack, user, pointed_thing) +function doc_identifier.identify(itemstack, user, pointed_thing) local username = user:get_player_name() - local show_message = function(username, itype, param) + local function show_message(username, itype, param) local vsize = 2 local message if itype == "error_item" then @@ -24,9 +27,9 @@ doc_identifier.identify = function(itemstack, user, pointed_thing) elseif itype == "error_unknown" then vsize = vsize + 2 local mod - if param ~= nil then + if param then local colon = string.find(param, ":") - if colon ~= nil and colon > 1 then + if colon and colon > 1 then mod = string.sub(param,1,colon-1) end end @@ -36,8 +39,8 @@ doc_identifier.identify = function(itemstack, user, pointed_thing) S("• The author of the game or a mod has made a mistake") message = message .. "\n\n" - if mod ~= nil then - if minetest.get_modpath(mod) ~= nil then + if mod then + if minetest.get_modpath(mod) then message = message .. S("It appears to originate from the mod “@1”, which is enabled.", mod) message = message .. "\n" else @@ -45,7 +48,7 @@ doc_identifier.identify = function(itemstack, user, pointed_thing) message = message .. "\n" end end - if param ~= nil then + if param then message = message .. S("Its identifier is “@1”.", param) end elseif itype == "error_ignore" then @@ -66,8 +69,8 @@ doc_identifier.identify = function(itemstack, user, pointed_thing) if pointed_thing.type == "node" then local pos = pointed_thing.under local node = minetest.get_node(pos) - if minetest.registered_nodes[node.name] ~= nil then - local nodedef = minetest.registered_nodes[node.name] + if minetest.registered_nodes[node.name] then + --local nodedef = minetest.registered_nodes[node.name] if(node.name == "ignore") then show_message(username, "error_ignore") elseif doc.entry_exists("nodes", node.name) then @@ -82,14 +85,14 @@ doc_identifier.identify = function(itemstack, user, pointed_thing) local object = pointed_thing.ref local le = object:get_luaentity() if object:is_player() then - if minetest.get_modpath("doc_basics") ~= nil and doc.entry_exists("basics", "players") then + if mod_doc_basics and doc.entry_exists("basics", "players") then doc.show_entry(username, "basics", "players", true) else -- Fallback message show_message(username, "player") end -- luaentity exists - elseif le ~= nil then + elseif le then local ro = doc_identifier.registered_objects[le.name] -- Dropped items if le.name == "__builtin:item" then @@ -112,7 +115,7 @@ doc_identifier.identify = function(itemstack, user, pointed_thing) doc.show_entry(username, "nodes", itemstring, true) end -- A known registered object - elseif ro ~= nil then + elseif ro then doc.show_entry(username, ro.category, ro.entry, true) -- Undefined object (error) elseif minetest.registered_entities[le.name] == nil then @@ -195,10 +198,10 @@ minetest.register_craft({ {"group:stick", ""} } }) -if minetest.get_modpath("mcl_core") ~= nil then +if minetest.get_modpath("mcl_core") then minetest.register_craft({ output = "doc_identifier:identifier_solid", - recipe = { { "mcl_core:glass" }, + recipe = { { "mcl_core:glass" }, { "group:stick" } } }) end diff --git a/mods/HELP/doc/doc_identifier/locale/doc_identifier.pl.tr b/mods/HELP/doc/doc_identifier/locale/doc_identifier.pl.tr new file mode 100644 index 000000000..3af2c377d --- /dev/null +++ b/mods/HELP/doc/doc_identifier/locale/doc_identifier.pl.tr @@ -0,0 +1,18 @@ +# textdomain:doc_identifier +Error: This node, item or object is undefined. This is always an error.=Błąd: Ten węzeł, przedmiot lub obiekt nie jest zdefiniowany. To zawsze jest błąd. +This can happen for the following reasons:=To może się zdarzyć z następujących powodów: +• The mod which is required for it is not enabled=• Mod który jest do tego potrzebny nie jest włączony +• The author of the game or a mod has made a mistake=• Autor gry lub moda popełnił błąd +It appears to originate from the mod “@1”, which is enabled.=Wygląda na to, że powodem jest mod "@1", który jest włączony. +It appears to originate from the mod “@1”, which is not enabled!=Wygląda na to, że powodem jest mod "@1", który nie jest włączony! +Its identifier is “@1”.=Identyfikator to "@1". +Lookup Tool=Narzędzie rozpoznające +No help entry for this block could be found.=Nie znaleziono wpisu pomocniczego dla tego bloku. +No help entry for this item could be found.=Nie znaleziono wpisu pomocniczego dla tego przedmiotu. +No help entry for this object could be found.=Nie znaleziono wpisu pomocniczego dla tego obiektu. +OK=OK +Punch any block, item or other thing about you wish to learn more about. This will open up the appropriate help entry. The tool comes in two modes which are changed by using. In liquid mode, this tool points to liquids as well while in solid mode this is not the case.=Uderz dowolny blok, przedmiot lub inną rzecz aby dowiedzieć się o niej czegoś. To otworzy odpowiedni wpis pomocniczy. Narzędzie jest dostępne w dwóch trybach które można zmienić przez kliknięcie Użyj. W trybie płynów narzędzie to wskazuje również na płyny, podczas gdy w trybie stałym tak nie jest. +This block cannot be identified because the world has not materialized at this point yet. Try again in a few seconds.=Ten blok nie może być zidentyfikowany, ponieważ świat jeszcze się nie zmaterializował. Spróbuj ponownie za kilka sekund. +This is a player.=To jest gracz. +This useful little helper can be used to quickly learn more about about one's closer environment. It identifies and analyzes blocks, items and other things and it shows extensive information about the thing on which it is used.=To jest małe pomocnicze narzędzie, które może być użyte by szybko dowiedzieć się więcej na temat bliskiego otoczenia. Identyfikuje ono oraz analizuje bloki, przedmioty i inne rzeczy oraz pokazuje dokładne informacje na temat tego na czym zostanie użyte. +Show help for pointed thing=Pokaż pomoc dla wskazywanej rzeczy diff --git a/mods/HELP/doc/doc_identifier/mod.conf b/mods/HELP/doc/doc_identifier/mod.conf index 4a7626a4e..28a09d07e 100644 --- a/mods/HELP/doc/doc_identifier/mod.conf +++ b/mods/HELP/doc/doc_identifier/mod.conf @@ -1,4 +1,5 @@ name = doc_identifier +author = Wuzzy +description = Adds a tool which shows help entries about almost anything which it punches. depends = doc, doc_items optional_depends = doc_basics, mcl_core -description = Adds a tool which shows help entries about almost anything which it punches. 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 zcmV*DKy1H>P)Px#32;bRa{vGi!~g&e!~vBn4jTXf00(qQO+^Rb2m}xyB+w%cw*UYD3~5wYbVF}# zZDnqB000000KBfUnE(JF07*naRCwCtz1Ndu%XugEeVKV|`S#Ou$6s#&!Vm;400JZ> zEQ8AkNuYO~8-|zDVzxhA?CoptnSqcD3Db58E!ITU0EQaY9Ic_lh zLqv-!%N7rXG)|P1Q$H3b(N1f}cYFYFxeEXU1Sh?SD9Iv=58~3oip^VCUc2obrPc8N zl)MlTJjXMuGXI(9xz>8>-Gp%bAhda|@B2v{5mBCJ0Dy=iUKO!B=#Tu>@TIl>)SI8q z^L*R~q*g?vtv8K`;{L$qlZu|%IxRKe{-48FyW6rkvT|6S`mzAvdamdDMC3Tmgxe~q zw9)_|j(*?u0HED&X&w8%&lpE!Fot&N**83!3lU|W+w6t8k~{%`IEw)wbVI=f0-gqq zQz>MxwOcM#T*pPk8KUv<8l({b^x^>kRDv=9d5*^zvjJhAXF*u9Srrj^egFXG^GO^5 zLY_SXNFw5#Pkk<9?8dDdS1(^3%NiI500huPahd=CcO3J8(KK+tp9~BjOMWQ0&|1w3 z_C#bJVQy&TXAqPSanSE-tfJb>P6Gshh)EP9B1JI}1m%zbxDZFtXw8Dh zGF${M_~G9d8%v#DJIlt({C$R=CZ6j}-C+a(O@L@_Wo~P}H4I21;tp3*iSZlq^sJL4 zHs4{4d7gh9)6)*X`9y#xl^S^}fRL#yQ<>S9YETtINDKY;B(P6nfS70uagv*Yge8m5)vfo!k6JDFeXQxeGY z>le-6pFDhMqtq3CH9%z8?zRslOugD5AZDQ>XwpU0FCqfYMOdori^^VS_&^ac&r-+r zPA?~og;}dLu+w6U^(Lax{%{+OM!VfUZh%N*QW7C!ekt_Bz|t%%^ioQx#l@wA1>^Si z<`F$VilbVkHkIk*S?;** zym{-!wX4sce)|r+GGV2Rh=Xo#Zo5az%PWWL-`?IjswPf6L0 zhvjJuGZknf-)}JJJC5Ud{`?-YxV(I*fq#7WZcz=~N>($Wwe0j-huiMCekrV;Ou1ml z;xzVMe-chAH2_G{Buf)_p1T(g-P}k>dv{79@*|?KQZ|3j(o|+6oD>|nI<*IpXdjS7 z6b}YAu>+aQ3BqvLYc&Fd&F0>T*Xnq|Asdl-dZ@n7oJ~n7rQCOp8-YA0sYOH=uUr8D zC1sW+4x0~FI6k%=E)$MJtGT(?7&(v3j`k@Z58k z5OFZ*GsYi1`j{~`4?rp<0iYC=06-I^d6wqsxDD(_y}%1j#)FJiKj?SO$s%H@T(#67 zxo|9*?4eH;0Pf$tO+;Z>(psN??t)U9X#Zq6=k~`j;ko8S!b(|d9rp)-Mzx^XGP3=Z zXng=kVoU&#=Lbqk*PE`93Z+!1-DHe$A%b9zt`S3~LI|Z4B4)?JzLr+3B}&`v))znf ztDD=KN~=dt9u_)U%i|}aAP52Ag%@6yQpRzll-k?dnTNW{8Rq~F7nPutWGNza<30io zQ$wzDdp;t^$9T;KcG^wOc^H-u(M0XX(#DBs#;9{9`gQltO(7iL4>;$Ig~dZdVCqe> zB=v&n#;rN};q4+IO()li!*V%^#;Ln#I9ePHh=@oBrP6eD)V#3F^KRBe#9F-$h^@W7 znXvZbq;LMm_kH7nGinbIan5JR0uVtdwb)n$fO9M7fM8?$$;S4EQfjtnG*rtNGp1?1 z-ne`BHe+l~DGEg7IW7P!R~G>wP7^>FB*io?#yLz&v_M3ywUjv#rD2W|>YL$~I-u#wxuB1%U)bqS~xL6F-SC&@Kt*$f1 z?mf867~j}_!Wd(-hKknu>ec7(-Mej+D+9%O0CGRz>v{kXxIO}QqOK5PYTCz%wJ&1~ zXKCWP9^;&I!8tcR3FmYmJg!4_JFQB!ZnH40G_y#@;ewCMH%36?K{bFh`s#G;n#d2s ztlhTBo6XYHaoqxrnR2yu_~lZ$Y~GVGwzaWAL}`-Xd?FBBh%||lI0B+lxdI46IP*ZG zQtG*L7XaYm`o&JKv$MDDxHC@j9JX2w6p6Ii$Yb!Z%68~Qy+*k)!I&|mQ})6}qalPy z({wNxL{T)HV)87ZbNhEWatB1r^9=HRHo&=XJ{HWgMJT=y%!Nx>-D~c7gy%_9yiM-~lwmS*AJ_O=oAr1ga>SH=Ou^}Q@jZ7`E1sq1?qbbg|8<>`BMyPe^% z>WT3`i%=|qaK+QZ&gWZXSUyOSP*V2hlQ(#{ZAly_aco{}VP$!KFGWO^O0805Cm7QJ)bLuh#%j%ZAj$7-)HCjl5@<-kz2n*=|4WY0z;rCUC#W|gd%5q zRVvlJylHFgwy|wU6+>a=9|gdI-ek&aNrjSzcL2JN|cKKwiH5 zJRC%#@87?T$Z};-K?Bg-+pX2=HZM;5dN`~n)XQ0KnihTLi7Y>NI}0Hkmxi zl^PK_p3`l&)x^vVMATX_c0!MU*4hBl#9A(1xnfTbrmWF2_+kF?{0lFchjPwuT>k(W zJMwCsy}fZ7sW`6L&x)9YD*$oO?*>7M3o$>cMMQ%})3Xd)-FWl_ z09@B~T&G$q{AwS6eD~V57pH!Oa}Iz>mL^%s86$#n5YPz%ssv8J@BV1(-rL(rKW7Y0 zQR&kMAtq9~r*KE_{a@{ce^#Ha0nt8_G=#Ufva;_n0%$jzhk)$&yEbNFp(BgqI4tdF zc;@L?AC<~;46SkiX$h2!=#M-7mljVh43VQw zhCMjbHa4y1{IWF`?%DP@_>EVU9Awkr{7(#A8ix4muB zZuql>Du|2?`h5WCb-P5=SXc;3CD(P2pm8P%O2Y~Dy}X@k#W}B3s&i6S5BgR?oWw*_ zE|p!!b)31Bw3}Bu$d55r9Gz0^mrAARusZgb;bgk$WKtS_iU2F;mOlJ`iwN$&-xCf) z2AmyK+fp0oW9e>v8vuDivM{zWW1^^(q za9tPXd6{k{he`mPC^@!NDs6Amw5%&YhV8w$mFj=|^T-Pr00?Ku_d^;zpQbfO>t*@* zGO81^38?HS&~IbT>>8t#NQm6a9s ztVo&ndN}}S-D)%z;Gi7wurzzN@=9qHC$R~uC|S4>W$}k{I7oLifSid(8j*lO+71Sr zBJH}!$Qu)E5YgwC0_hH^ny-=aO)IXL6{`MteNo+SHVEn@a9}uS;6j z7Z!=g_k&)qYn99yMU92VR4ftD^5TkN)|*>T0N}~SBdyi7D=#XoYSjh}x&0EE`*yv8 zg0Pf#+9N<{lSW|3Wp{f!O8Nk>yu2!eGr!~&##pCg+LLJ_T3lS_oZ~zj*c>*Z)KbsS zg*yyLM~EA@KU!K`4*VdPT(dX!E+k{8eScBqoN-N3B2yD-S_5NKnd8 zAWqg}*w1C72LPiWS(x3@z?TI;p7^CMdW7xIiv z+%bj-tyYtW(mcI(<#{NQVRsVz3wEgCO~}YQ{Y5~W^JZ($m`R%S3s+t=yx+<(lZm~X z%g6`-7}o%Rjx)u-O~m|A$5WaG3dXjgcxhU+8Ub>x9mbBIpZrL>%bYYuW_AD(G8PQA zMA5N!Jcsr-94FY2mS>HO5$u;)8`)qi$>Y?8h@DouVdunt;p&Tb?%y7X&m>LmKe!7A zQGnN8dfj#0sd@QYYuEKmiRQDC@T3|Y=X_^p)4Zzh2en$`1i~sx6U)a5A?`i6yU!p! z|NPqdxuS76BTr^>w$(bvNsR$JcsqUV@(ZTd+Y$ZQtZM7Mb>xId$f&6P&%%<9`cq4Q zCjVL!HIuZHWQgDkzFt07JT4&n{tv_s54sslU1FK7GJeSqu=e?v@7r$+8R?+L#_T7N9w%>$g7SfBEs)m>q z4IyHhCfnN^W=+e>YjM9nS8qp_rG{hy;M(QqVa}IuMcmx?PX=CT&YCK_`|+JaB6#uI zOIqtnrMi7z54I}+z{L1`cOhtUH*q3XD(h&9Fl;61N*Em1NFVk3nbHUA1OSMoVu<<_ z+BP9zA|=_&=3$_2Pxg$K5mK za@7%4jXRh;U+BgB%?GG;l*$QEuBvS+(qTJn@Dh$i6vl0dXz!2}W zyJld^$WMBlpRb&bF%gu0*Dr^akqTt5+qDFt<=81x23>E|ZH#}d^&z{TzJO7wh^7U> zYp=XK~cy`{&~L4yFK1~Ohm5Z27XW}SLgaf0?P6fAT@)l0ne4p2KSDB(Q#<%Xbm&AV&c{B_Z9>Haj!4+low0Ysq4!S;-94XEBPTmtu^Y0 zH>^~v{Z7Y5BQ-N5rq66aB&|RG_&xv#A+**PE?gX^e4gIqF=-X=zW-AIFoE~C-uTRW z@BYO2tAxrGlRi1GgGi1ISo|37NVuMF3D)s>B4SJ)opT+%`J{@0pAzi)Lx$%?QyWg|mN5B!~>HNuhkAMTHeI&H@nw)b$48p+k zJX=O&y#~hiTXL9LK=<$8Gm2}uTq&2!MO&YWxAP3M4ZQH7n>DEY5)AWi)oqw;BIppkxc?5ja)yf z#N9{W3AU7T%Ja#B4*dZ79T?J`SeCRu`(@<^@ugQ#Ng$0fi!Z)d|H=PL(;{F9aJ$vH zT&tW;UVyr(`89S#fb_e)9(98tWQ-36y(vu(5Yr^KZ1P_Y%Yy?)@!^n`BuRF6cR1&s z=W)niiwtIKN}TTd(rfTLAQ-Z&mK>PtlQwB?~m99dlSlOzFv!RQIBb13=-@?Ag8 z)8jpbe%>x3ZKCZ{uZNHCJ-2=t0M4JgkY#BuWtOE;9359|T<)gor~%0w1%xLCApkJf z)sszP6RSvKmZz=He-%mhU-~r49Eeap&7C6G>%H>X@~w9)h>tj)BF_c@5Y#5|7Xb7K zl4YDT#%uM3{o%m`NfN=R5Vw7k8^>|sShVIKJ4c%&xNf&wt=6yrJ=rbLTE>*|Ebz@3ZN&>o{&HEG;w^ zJKZ)B4WjBk&fwY3me%WqJgHq+98|`nmoKpJI6m05~!wm?*yZf(-}(;AXRZ ztx-GG7E4f%h_B-qE$kq@+i?NFOrA)SIM1_T4sK}{TGAL}%w*>nkBcS(1U-vH4g`#n zLEZJlIJ?snN&-L_hKShhb^*v_c+N-25CC|t2M49lX_jVr_H%{C(>NZCjbVI6^;!b} zTJ5IECLj5Ef4O~15RNPYLZFO_y=gKxyv=|})m_OCNBkt&fBx%R4J4v2r`<*Z+ z5B)G{G39c(QmIxdRUsV5v1qT)#cAjj5q;0ERcf_L?KHRgxpm}ft!vf#`s(=$>lXzV zt~j=(NcJ&_(eylYtO%fp4V2eaVX7TT41tKT#y9_J`hApo{73)N@}cqRi`Fw3S6`vV z^!YaoP6*-oLABPX)*5ltH+?~;5^5)c6)762pdFH zt2E4)JKYwMmMR~~`$7xGX(@REKQM(Ky{N~DODz%bp9mUBlcrj!1^`v8W_cE+QLb|H zg7w$#wLiRkN{v(#4zy=VIE*BGhK%Bf90#WbRGD?ebz=}+tJ_9~MoTM%>>JAc@+cs( z@h4Bu&`ek=S8Dq?EA71|Agb}6sv^Oau>zLw-`rTm1lD1{IE}=~CO{BTwNf`P&>!@& zJUOu|678xX38)m5NGn84^DIi^c@*Y;vbwG#oSLYaliTa=A)QbKFiO&H9~gQLo0J|x zj5WUT7wzBt+7xEt`P%hame>$!rj$)hu+p?Sh{~=rqFjSR_RW#b6-8s3zj?1a;v65= zH4Lk)Tlqm()74^L}Zq=*Nky9UwN{41VF9z^Dn&I?RJ{Y-N`N$1T1jOBVk5F zrLbIrG6Dj^&fX?NM)T~lMntY~T;Ui=(i!yT`nV%D`U@|r-nsa~l!J9{%HmEGN)dc9%BS^>cQ z`*%i)Ttu9ixkW%gu(YtcZ*gYH9H>(tQ%_i0Yw9rQAp=Sm7L*yN~jfiAa`Ufy@T!1aB{)1-4H>($20<(28eYB&7a!1Kf77B6!@I6JFQMT&00y?%f?!jgFIg@1*bnN-PG=j&Txz|2(26w zK^O`ld_RyfH^Vb0lPg(gj4UoLjU>W)eW6}&RI610NRn6-BEb`|`6!8v$Z{Rw%wf>d z@kN&XQrQa;7(+M%*~mGsHx?TUOKF-Yr5--G3p1UCcEnmi(n84}y!jQTRpNz!_`4wOZZp+-S7LpZ?o3KdM+9f zwY#m6f=nipVYpC`l4Eek472 z=;n9Jf|QWik6-^S&3NRM*wE`-`QbnCi4#8^3k_A)>b=kW%G8fJoxP>M`!~aIMXj04 z^HOEw^S>RhoCgA<*@~!t`TzOf?MAwQCVF|XAy1uVhyubd`@@!DV`A4rK?l*M-fGX!JzMXJ^; zv8?l!jl<=nh?r-&%yT8>ey69R+*A-_^l0_k_R{&(^|@96z@B}DtruQf|L~_1Zk}tJ zibK(E+02B?7T1t8q2O7JQa=3hA1c>R7S{j(mBgWZvAkT3m)88&j@4@-KI-+?N~aBL zQ4aZiC7$EYFn&DwQJU18wY77HLa5bhGRBFl!l6p3cDq%rPBBcx5aMBXcLxB1AP9o+ zG?gjwwCT-eTclFmXmI)Rl{kvhB%P{`7xNQML!$|M%o~ux5yBCOsFhMmrEy}T*fT+- zareI4-gHP~>y>3G96rW((qCFZAUb926cNnOl4&Qm^(((4x~<*Uei=y{{S!xtanxFQ z1x8zBO3$EQ5kmezic1{SQ-7glRJl^Ebz04lJFuV5<#`5>S(YVnlx1ly^U0@aD%}C5 zfRO)ZU%5K`9aGs6$59jwIA`W6r)sq(gz$qPES0p+pxVUla z&V^Um7#WU4)$I*7Eo+%gJCV|j_v05|9c2nSNF?sxWu12L58rejJ=*=XuP~WUb*Q#q zcysmbzbCsMWQxe++~KFTrE_3q#!KvQ+l5_sSu#aN7F>XH&X93rffu-r3jk7$%_V$= z{{R3W07*naRCZ3&ba8QcGIMzbgh$Yr=XsLEQ8aKIXM)i(N)pEQAgtBuPo=->xV~R1 zm1Hi35XUmPZPCJo;MU1*X9L0`%kzBS^*thDjC0PjER!kT`d+!S=_WnS_;8I8DDGr# z5c}nEH{7}U(#oBWCde^@X+BZ_U@W7zrUBJz!B3eB&>j+c#Oe$@g}Eb8;M6 zt!azub(W`q%x`X4nkuPM^;5?x03mN>t?Hg&!V!+lb3e4za%CW44l|ecnL>#jNJkPWclY@9ujU!^r+kBkX8klF|-d(Zrh#VIH z$Umx8iheI&T(US0-1^LKE`IO>OT9GHIz1L(Jc(N}7t453m1DKw11b6`egnnpJEKSpUMBLlkSzo^}X~CZ?EndESWiq7_QMp=aEG{f8 zEt<~Z@K5g|%JZC;yU53q$)zVZ^>{ZjQz~A2ZZazJF_A6u+STye-}HX; zk9>FAAaJzedi?{ivrR-i*!=u&+xzV{2hmI%ap9d302p&)(C?>FJm~ZWo$h46V*!hl zNQ`ORZm?GhO69OzE7wXvNl7Kuq|7zj3ZNNis*61P#Uoatpj-}0rJzzd`$tE;{`^8X z!9t`Jn4WOf!5y`-wAOKd5cT>eKF~tnVTj1^{=<9sAKtrt|JKbr zH-=rob1Buc_Y0pA6G8c@uVSukPM>i*_4gYhctLR3Ie&(GH}1Oj@PkKdSH<|aJdP(O zB;r!O{p(+KG}DYt_^`;c&dPdaZ;CgC94EMUC%JHGI{nFf;|pI~ef#e%H$csZ$Du+a z{TZ?>Pu=m__2Gd6QMq1gr>T`HN8|-TmLvsE*33l(UU%>z2Z>d+9}<73j$@ z8(|1g`RTsneRFri3Rj5zP8T%DTxvOe6ABH1Unti{o_nX)u~bJ3(3f$dGR7FPbF1si ziz_QjD@v;~0HoRIuu@T4wVHeL9w2kLk9n3w-Coq~Cxhq&brnjf#=?Gfl^dp{$9{cn z=b;)Odf|Dtcj+3JdB4`U@z&?Af9eZw|JqlT5OQA#5CCYHu4>+U!GMVqP3QpRJl_5q#g5upb&A6-k*68YRu}3E zrLg?Wn5+4KL~E_J+S+`wx4Yf#v>9VF%&4CH+(EZD==Rbm1^`x|mFvO0Yff5@U8*ZH zIg0K{ILZ$fe)^BjqmO_1<*(m<^;1bu%KQLNM9d=3wl2RoeZ`Jb{@`6pn&_Xu!ejx< zaHBt%$%#~d+yDe*m|BbCVZG0IQ)MP)CY4kwS4ZSgAp))hqa(e-^yi$$D(LjcG-IV) z*Q-{lQ9K}mPPc7;hZFR)H@0t{XWLsF0O0!p5!LFAGw4UEl#2UaY;D4uYY0Tqqi+LFp)|Vu~YMC;)Du;6-dcAJ`wTYXb1pg zDiIM77-Ptgac-ad?2J(y_ssX4C8m}xG6 zGX$Z`b2-!p-l&L5Nu|`F-&0D-JogV`(1kKcnYBbk#3UZ%Stj$mxw{h$`bx@DrHZ5C zQBgD)>STw}Zh73X`Z9mgIA6Yh+uPY%eEa(%8VJ)!+hiAV&hsp8EKYWtv1uTbo*#7E zZW>P`aqcwtvbA$I8- zQi2^6lTn@B#IW9I{xo?v_8nADES)uJqp&f~wN^x=rJQ#-{xDlTjt7q8dYpH==&b|I0{q3J8K?wjx`b8G+ z+}L^XRX&ktO?6+R)=_Pt)M-w4P9(|XihBgm08#@uKF<^B*(Q;7(sU*CPj4KOqgl+k z3z^I;JNF48EGKqqrMcs*udNY4x79*~!Ne(UzT?HmnojWl{A({9rx?bVIPm-&HXya6 zwn7uFor7FKM8+87!eMOmEbc-~K}sp7Nlw$%x=6iY?)$%0Cmsj+$ltx9M0WuAVhFpUtP?|Pg{@m*ApV@C< z*>(6Vn4|wVNG?X6@Lb0>H`U%|A)+7*%|v0>^Q-lSN!JGeeXJD0;UYO^or(#!Hj1Uu zfDvXt7JHQ6f)E)O%nVzUc}~U4{}3_i_w6U?m`4Ob7=|SP9Q3;YsALXvmW=?=+S>(y zovjTG5Qe3GzsETOK%O{TUhNy}uLFRq<>8Czxe z@4fZQ7p_mi3^7*z@cs4|eieum0RSZG+0>k8Kg^WW*17d}+ufHJXV9iZdwLDdOUj9~ zrHjr8Lwoaw9~_6)IxLrAzx^`X*?5AC9cFvOsCs{kvE4#&!MVeQCuZx<^uu7XD@Ztw z<9d$g7xnv}Y>`Anq{C7hebVN5);fPIn|ZDWw)xRvSypYZorAo_~%D!G%~T z*N!m3B8Knq?C4y=nZ@CWgyW`m8GW;RCb^#HdLAN5na5Eyr#Pop*m_t^y57e7d&t1` z0YDSr?>&C!-(LLOX!;=i(Fg<*Gb^?0*e%>^KAzVupe zc@;I8$UbW6GRv5uv}x{kcs=a)UtVmSK5&RW<`1M;b(E5Weisg!^Onlhaa`M;l~1J& zGml_#Wp!Uudzd9je3(ssLhq9}a9b&V+XIkBV{d1Q-__5K!31O7 zG%LH#47U5(_Ty$129N*{hUFvnk?XpdHS2Hf?pgM;A)=LqRjrhfw|5`j5mUb)Cc23a zlP9&(TFoo|X4*r1;($cNu(BU-9dvv1PRCKm*raq&J+?(IK-k>X!kHW&*Pz(gCc6lT z&ejv>-5=ln-LF3#EHi#RnYA!{@Av-nt^e>p+nd~5gQ)7&PcID9ceC=>!)!2ma6=S5 z%{{JE>vMIO2c>Y(?HL2|^7$*whV<;1I&(ay)oPxyQQR-eRjO8kaw#a6gnRNnj#{Bt z8p~_{_}=%&BanXlsb8J!FFF6yA51eZo>?|=K|+M@|D^JrZ&bham$kq7_u;!g1_1Ae z-=8rr(^`uHl1!Fs7qcT5FxgPy2ch5$Ds}f-GF@Zd_l&QS(4GqR>i?Nn6QW4@uK_U!UJ@ z66ZKxgFpaaMBJ-<`)`3E?{$In)4m!9FM@U|8QG5`19<1_|Mf5Z`Tsz6-7Yy|a~55? z0U*7eh1Wbe$Sk2EvqU(y@wr~RW9DAiTyEgUy@BB_v-JLDX?940N-3q(-rjDn*X{MX zjIpys9pi#=fsDhMjj7;FIHFXmc!BQ)!G23si&qw&oDhY{$CD`%-MaePM2k+VV?B-- z0!NIbdNRl!^wS5AH|u}-Z}_0cdtCs4QIKZc4%wwCC)&0V5zo`Owq(D(+fgiLVdbKO z`3DLL6wnu-pW!5}=>)@`b{L!TVy^EMC=0?7vO-EJrQF@!>2%tILH{h#h=`0kj0IHsSE@?fbVX;=Mv@o_N?Z3SHoe8}RJJrTy|Ht!x_m^-mMz5LV+i`ZM zlU#2_j|W*KRjTx$T=ir&m0n8!_rII@R&Bied9)4!bHuHgbiM${?-{j_WS2tdwgtKMbAme&e8?(3p9k z858b!@uC@{QQOFf93>TFAFW(!Ci(SNbiFlbrm~wUMKnC*k7@ngFMM_S21*HbTPLk? z)mgomg#~&eG?R2j!VvPe3w&M|=`)yE2g&wUb3 zf!bly(DoO@r@}ZM@VPjSd_SalkB%YIL?)rBRH+y=W@(CuTCwWtpuam>N&2Jv-~ZRo z{}vy$JOp@f@p(#90{Geb^IbpWTANS02mCwJFu4VX;=EH`s7-6`BY;HH zK+*NSyxz;dcj?uCy!2|~xUQ1?M6Bf2^RL@1+EyA^yJwipdyDG@Xbdo$Q7oEz0FM26 z6?kZSw`osB`wgJSAu7-FJkOITno|jEq1#4-!5lGxz&U^L@!f|H@7?(5{UnYo%UEWD z#;{Z>*J_vFEKM*yJe?~7NwAaYkNWcFKt7DslSFX@ju55tly<#l%qA39{)>NS6F0*m zC7O4>_;sG!N{t!bR9wUsYQ*<{ z`AgGJ!ErIQ0!(V18tTM@jh8=P!1JNh%(!C)ZZLa4DI(@Y@|P2^(?6*ZBt<6MQV zm@Ev#iOvEflEM+wdNGy0@z?#Y|A9>pd=117)@<4=riyO&_C5GV5l+WIXt#{1)is(}tca$i1<`IIpTuc1&7Z{CR+2Z< z+yq08yaU%Nb^W#WmgPPnKs(Lq{%pn*$xY>45XbB~#<^gOo5m{#JIpOpNzK?jA#5ca zJB^ZK1S1hOcXskD^Q`Ap%tT@;C9^Eu+?^IlWDl>B2)SJ%i{h$2kNZ_8~zO38J)Ly1G68R*NPZHVA zWv(gHgwsy^or`al(gMCWO~hxUc2P{A$72bZQC5ZHLXjD!aS@wnW`xTSJ>RP@G=frS zT5g<~#hB;$#>S&3Pad}0O{L`7q~ai=%=0Ww_qMn0-MX>2z140u89PscW%WKhAtsYuDG)) zarnXKzr>Ge@`pO4&xOxL&GVayd=%xGrc_g+_VeIy1YZVwd39&?swdMz1TiZ%ulBUv z2zt<38`psE`>yMXiEZ$;wTpOWlJLk-Vj^-~*KytYLL&&neNFX5fJDUHI#7d%XEBRr zti{Co-EP0vy?5(oySdkC6^Ppsfa7|8bu1yq$gkzyiL7ucubd{4vb0%WBme^PIQJO$ z7_Ylt-Er%V>oVpt1^{pV=sVhO2DLpe;!53GeZH8ZE=gx|YzXSB!bI-PcNPcXrdS@8uT*Ym=9 zs`Al?B9Z;Z;E5W)6-h29KPJ{A*0C?>2m-+a!EyCmLpXKE^BDIy_c%AFHGE*1=Pz$q zg>8JnERULze&^Dgh1{gAB%PJfBR^JT(NHQK6DAcx2qApmH)uTUswT7C?%l_}$BgNo zh`8W>7}OUUwZ%ph4gUX7fDd3sAux`dBcF;!t#JMI-EqHtC2PefCa|i>SzQQ_(>~-p z&Ros{!PiUvddXie`&Cy|U9orJa_%@&X*-ApWHsFte8*NAc7y6(d9ldG!eBPS$7M%Q%>AhR^H!4X@3?)<(mJq1%KY69K6f9JuY`|p4FPMpL^ntZ}&Ji|mF z8#GSf?g{e$s{PSPj0J|~r{Ov4C2zg#*FC4%M{IZ?%_Rd7YA}V zT5d2S{q2{34U3$|)*zbI>800mn=X)+NmRx;LRxn_t$x2ZIc6r5Qj5z=21r{Qnxrd#+6&*bu$5UD%8xyV|#0hmr znbIz21i%pqfFUde?l7>87@VBjdFPE^`rJ4FLQSmSQCzG({&?fU6&oIB&tm(2Nhq0f z+uUkIOr#9N47#+S0J*Ki+7$nGmSw*07q~4VX+0S1&jYShYe00Qu9Xc#e0g^Wr`kb6Z73L@JfMKf-}F2VB|w?Pa>G0k-nMi zCC8eY;eoesDd1I?uZ7-H;4TO5qVFDYhZ&7@%5i9IQ{#93{vBmO{RH3(>)8QB|JxV; zsL%#J?hR(8NTu&&Q$3YMwYEcUYaICfUbo-x^|~FI=ZAcsjg+KIE6bked7gL16p4uK zPV45a>o;zGc=!ITvxkI%V(696R7pKRW2I8Pc=eiAY62I^ko}AH(|NrMK40*8!{-g3 zFZ$dZ>*S@UdWvY`GT%Obaq5DV5Et*6%1X|u_2_YN+aGV*TbW*TK#_R-A`Zr%CFrfKibCX!Y>}OJNu~1-u6T_VfR| z&}yIbqglBX(swg-rrfGfLnoLzL}=V_jONbHQLE4QJzB zz5M#6%hx>5pBexqBEg**!Xos`fmia~kcbENM2{HPcrHyXp8gy9f|Z^cf;RHjSroB{wflxA&M<%C7YT#{$AIaXekb)rSE6Y&LFE zbWq*b!V!gfN}Sdl8%I9lB&0#3P3F$TO)Dsxh#begce~A9^6D9*kuhGW)~mIKAB2Sl_Y{7R7^`6sz+yV7rcO_dXj!;tGT*n+NSC%A zOS^X3f)xPCzy7U1Eo2!=qL~Rp7o)e6Vg8GV!WCR_F8Imx-pLv%8%OV!P-Kh+K>%la z88lWZwOW1Ql~>Q%G+;D?}elpUw!hxdh4cJkLJgbSFlt1fs{7`B`+`1;;Tz z|KYd)jOhYuPAny#QLF-8?0* zUu&(k4ohLFQm!v9j7)EzHyV9E^!=b(YdEf3Y%`BdfU7QzWpJL(CrzpV=uGQCnN5?~ zsP*G(FHW`1G-IFs{c(UBb;UyP9@m5Tpi(_IdI#O za8#+RN@Xq_F2ri!nV*L1)?KIWIt|xV2f3+K{4js^>aXb{b#tCal zL4_y%(Fd7L8_GHLB_jm^pCSz3|K(qQ`R(s(&o}pDQttiE@0(svNcynp(}J??y);=* zeug?_zO{5=ZRcbA9UJ8NtlB^!hwfkZD_<^+qbk?)vhnH$A}T2(xt}#!uGAPXJ*t<6 zI6ZxH$AKcbUuQCQyJ(=P z;<;D~n_v6-@Dbyv8tZ`b*e+aD^F=GR4JZ8Yt>6CVfAg=DwLD~q54!#HmD!{LQ%cBz z)L65SEJhm*&*kpN(Za&wk=bOd-E7UbzxDWQp4S4G6!ZKkHLJiq zAWX6hi_2RCY&Q3HcXxJoceb~;jFu+=AWO3>&5$vMSgBR#s*4^sSP5XU+%O};cY94l zc9xhxgd|VQ?zoOS^ZOUAd^vu}oT`gXza_`m^m=l?6?|6rD+%TzGuv)98WGFh6#sSx zV6!#$!m#Q)ZEIop&MUuq>B$XQBpZ?8^gyVsFr4VW@=K*OD$tof41z%%8UBcfTU(nr zoI6TdE2Y}a*5b-4*w2cX5n>H8mnsVjrCL3#o>~9-Aznafo~C)4$?Oxf7?o6Ud^8=| z%yAp%p7C}53{ycg;~+(^D|+3*&h~;U4u3qx%tsDcomFE?TQ+Ym5TKB-x_|!VBGLx# zwtF)?l>T?3Ne+ubT`fmxD{O>~C&cRc=gwWYSYKRnTz4`a{8DMQlGFH?maB`Epj`G# zXRoOeQ6{rAPji`TtO&rBiZ25EO{)$95u6|mm0$FLf);AKBz5oCq07*naRAP23 z(R~4TFNn|$`s6zQajSKTV`laIdDG7q09?=W{1rru27}h_&RI^nCLo6kBOBv50)nt) zRaKPEu33gAt(DGI&KU;)!NnQ8_yOioNeKX*cFS>`B*E&k*W2uA6A(wFBs%1(YotM` z{n68--o3fEw=l6^csEWf{uF&vpOnJJU5&umjWWwm4}z+YnY~7e0Joa$EA{HE&Lw&$ z34h5SDG`E7B`M-n@mx24HV}185?g1NRzW@ve0C=#H)XHc>Ge7$U;4xzsgc~=R%Dab$XHk|uV1{p zcHvT3E}syJ1^1;?tqzf6o@ZI7xtHhJS*D~7qcP3Xe!nMW4nSwQfLFf0s>T;S{OL!3 zrzYm@~TYSKbPeVs88!&Dq7k5c2yniU*G$KX~-$<2a7; z{Gj-=NYH!V2prdA#u6b~Ya(5)*3MnL6qYN+W-TD51;Zi7?~jZnaU4g3PP-+gER@VX zE9sPF*ca_ld^M>*avV>|*G(-zXt~Q&h#akt&dZW-f9{_Z zwZ3NPV{@MPfWR2zoOiqJy}g|$Pab4hnx^TYsIa`selQkq@Pr70FC$scrV2 zic7-DV2GnZ97UaWOGz`!>P!_y(|A9Qh-iF?opuvGi58}am?UwM#D|^j=5by9jYT!SFU5a)=R0yjJ~!gj>gQfOoxUwK zQqS5m85HR~!?cS0a-mIo(vOOq;Tygeb zV2m+D-}e!5ssc7AG{y&^*f1=evdrwbFl1uv-7+TlM8){YqeqvnT$#ipZ0FHW*Eft) z#3q502z&O5*v12+fQ{_D zsxrO)soKW7qpSNeE-v-9AC#9TENLphG|{XQzI?_8cB)|L@;KL)k8Rafg~}y&=vhnk zVQVw@$6^Y335B}siv%!D-#mk4RL1~rc&r*(_yn83uH=Kba>@-_bkM=1V zJ@JX;Xnx{o?6g~qAplgWjZ=DY&b?WA^y4;nNAvZsJbLF}z4|-OnA#b}Sehj6#C+~S znokWFW&oD$Xvxk-Co(vEy6hw6OK*Pkz4fiTPk-x$S4#fjKAJeh)suw;1;A%V3vA9f z0TqIl$wagNuq#9^<*e1w$!JVvnx(nSeaHJmGPaFGGMefqGX0|0Z5ddWD>XP#%Qj@F zCGjyZ;iNS(7(Y>AXM6j(ix($9S81AB7ppCN38rtwaRNW`??9l#@Z#f-7H+&8R*Z!>6P0bILFJ-E7eLZAZnuI4aZ6e`RUhZ&U7kYWLn0&&o7Y*=Ebfk**TX@Xw_Ox5L0GyKMNU z?mhG4abyV1mp)x-ZTo5Lr?HpCggE?jT!(wy>(A^w-s7fO&Tf8Ln$^G*EB&!7;jgo%D*TUobmF_d4aMZfo-aE<{8uk9- z@^p_&p5Fh>-#`DOZ&~`*ZK9gC*8m!|MdX-eSsX{hNgzcfn<3*u-y*F!<6`and8Je| z7!<8=MMRa$Qwl4kR43ZgS2U<3Xtm zG%4ungj}Wicsp8imGk&=ck5AkthC(P+`N4C>d}zq&>tVfA)u;LPXc|f-sbMuB8%=umoWo#RUmY=Eqv-p{aS(I#*I@rHLG|@4`Vu z;TEg$JDihhuN;yl0B{_~5l*#IXNn5gOAmH&V3eOZiTS$fv_ z&pCIEJtFtas_Lrh?&|7&rf0z88PC|m7!O$37+bOgmJt$2NEYIqM;>_L30dM1fy4_4 z5C{+md+f0XkC*B3%yf5kbyasQT}$qdjPba(N|dB}*=pS%pZ-FCo?bYxt0Q6!DHlLTpKF7|GDV*<5aF{=0K*RW!_kL` zuvRQ_fYYBdU(~yNZRPe)aMD)ju5<9}O`0l9ikj<~y;jOy4TP+k#!UD_^rd;#7;U(k z@@d-zM8X&k0zbW0^a9V+vl+2KPK|wyf-npMLP+5IhGiyzx8=UVN!8UtN+D$s29#2r zYr2+ss>IYNgVMHaLP)t(Znc|X6oz5A;EHWRh!j!^NeH2wp4ZIWpeT{Ele94q5{8lx z=mmi<#HIF6hPtH?>~$Ia)WHjblS0aF8_+$|zWm|~4qS&$%JOl~ZNGf8{OJCK1LfM* z#~&VEe|7SUOL=tji`7SWFg=pRtO`Sb_zwf~731{d5Ye(M(=;u!KnM7`5@O0U$^R#i^Lz4+B38bkjsaQog- zvkA8Tx%Qv8@BZNPt?ODmsxPCo+3Qq`6N3JsT~Izy@}I3dyubVUTil;qjuR9sPGi$* zrv>}F+v>hjugqkholjijst)78gH=|kV3&%8G63!LnnFZEh&W=%OoWI@1JDV8?|Po& za!u28jlKwO9nGO>Xbj)_0U;zn)C~hDEZAW~M1i7SZ4g2zrH99dVHnJi)ib!?ksyQs z1`j^ zU-{vmJ$>_?G|F)Ii(kL~o&S*5^`IaSXVR|(48r|T-_g(L*3$=#h=`(GtO5W4ZFLR_ z5+To4EccvVtys&Hgrn&wAo3h{*zKt?3@2yM?JbfD!ypJe-yJ%q*Ra@Nrd+A7Y;A0> ztgJ3Rfb`5EL=lQ8h@vn$y$NSFqfX1(0Oka9Zjy3nFsOppkk<9d$kxy!;1MJZ*iR`>qzdwMywUvli ztE|+ktBu;4WtA4egwI8h&edn426o)xTwE!{6K-^tQ;en#pk8lOtF>~uG8-EK^2|{! zmaD~5rC6#UO0z*_qBzEM5wb}ZX>|1Fduf(uciNJt71@wQlRWATW_9kMf&VC&$?5f- z;lOnUZmK!nRGEFAGi~D!H#pN63(x^pmMmmlg1)NfXhGnK}vaY>sS9_1~mfUhBJ#14nJ_t zD?`IDGCc$lP2(h6sJLaO&DI9uY?!`f#-QaupAs3MZN&EUT>7k zl}e?OLnutYXq4pjUs_2v5nsRe;|VU`us_iv1u2_1-%cf_gA7WBW>JQZdxM!_I!WSx z?oa<1%e2o#&ic-jptE+veKzm#RctSy?TX z%Z6#jS;erTkvCi&pk|5188TSlSd z2Q#8w;@aM%EQR-64f$J!4R6Pu!m~f7D()9VT?>vo}F+4f@g0TDOfNdkk=LqFsb3@tC1tQLf(vlMv+1p4~#rEQ95Q7E%aCFuFV z%ygk6{U>K%hjX5F^9yz{nJk5rJ!dfVTuKNDgUpp#0!1cP1PYaEwO(&5tAU6RB82cf z&vBe(nW>0qSe9wqjkPt?w#mGu5|Y{#E7>Cb=AZtz2|kkNOstg!DIa~~+cUPc5sz-Z zmtGlqQRL04wSp4wGyhDEC&#E+&iTai1p-pR;4g+C5s`CVE>|};HVwlxj0vC*Ig*|! zP30(x9LEWQK%~fy&S@(w+pe#zt*o!>h5<3A%k-CKQA`|+GO_NA0=>UGc|2fb*=a(W zAZ7V*FXiHoUws!+0}%i~+w)a30H^fK2Y?Wf>a*W*=?3yLKQAk?l8VOD)_X1<00yPR za=AX45Q(0&o47qa@k|`UhYBcH$qv%R5))B&Ec{VEd1L55y!N63L@?zl0Pn zfB%2#!wJQ4A=6%4sgsi;-l-%L-UzY$!Yj}eEon+Ul*<*>B9|4W$PawSos4$P-QloU zDFdax<1P#CK?qT+)lc9<9arXU3^%9f@>ICmCp@ER%c%}Ul!%pD4FHOE@$m34ljwzU z);lnObI>J1(KMn}tuZO}(2rBTlG1Pe$$t$}wHJY8jHCb;eCZFLK8xrWle{z1^8;I( zfxQMF>iBh!h|E+$2C);e?5$R5$doIs}$ES>E$J-}i$cSl$Bs zFMsLHWLcdg(Gu$ffHAV9=B$Yq1L)6c+ZlnU>;?BUm)^=24oDFrr8wza3+0kkENIKi z@2T(goT2Zza!E;r(Ml96sw$iXfBQGS_ESMjIVk1SZGM(?%#(Nw1D{;fYj@zx3Ktxn za56;^7XXNiZAxh{Vra?-X}VS@mrUDI&E^Z(`t!p;5itmS*BJ)B7lk2NUe5#~dY%`C zp#qGY%j=(etZiEfD&g?Me-AX)!?}O|Uh+COe(Rr*rJ6iRGz!q0RaII@PA4j)h_atc zW@@RHYZG3OX8}{9j1?+n28_a-trvjy@o|E26-A-v48y=*R$ZuCMi_>Q8-%Z`oxWD)NEr>^~pp+)t(inx*vM(kR0wFEWpN%r)1U}WKc|Z>Mc1o#`BEch| znWH_3gb*O0SaE*bnC4Z55bki`Is-K}by;?*Di-&Bf8GUgeh^zB$u!n`{HF=`b~+OV zhZO(v*DtIx45b_d;cVz?mlFf0AYuB7}fQypZl8Q#=RpB4?cqUgkHZtAx3B2d>fa&feFgcn-#Da zNBB^m<^egT`nax(h_+SO+Su9Ix?Hdels=!mMYFE}$64)^0#)3&v~yZ&`1H&*QjCfl zXSFsz2ruo#b_w>Len^>-VDlu;Y{W3s8fzCeJk#`iKBEvWw3whGw_E6WUJiu(5d%vp zO2zW}>c*w5%cfy!T$`~msaSEj+<0*=Aw(2Kp65kT1hXKZD2l%DPHdurX{`BaQm>Fd z3H(!A-@LFEDFb-io6#H?ilQ&Q$nzs#;v$s)dDW!~#j2IsN@I0i9^FVW{(o)+0LmEW znr@iWhmqd#PbPo=1-+cX5GWub*L1Gwnr@K18zMwxS+S?q`t-XrexMhnwBJuc zi^ag#cV4=<+Zcv3qfCd622DvR5mD1L#f^)9uSL{JAY!pxDV56QN^1C{i)s|*_g7zh zAx+aYP1p3ywW(nk{jFdAYq7_v(W6`cX_}=re)Tso3NP$7?hb}CdKNK1J}E%!4?Cx6 zReyFR+&$ZBjm%8wW}nY!7Hq{-h*+*vOXW(TSeoekWPM3QWSsxs#-6C@hWezhqPqIh zW#5nWWFWEQ;o#t4LQ+b~i!1@%NX)Ey#;3@V-ZTw2&cq^JPQ@Ulv{bGXOJ%a43Bd`h zE2AikE`aRUbW_s}#wVwe0Z4*f*824Ksb(kae7Bp_#V38wy7A@(_U6dU!ZSeZAE}`? zkQ|;FapURvp}s#e)M>iJ$UXp+%9V1ZS}c`t+0r+PLLnj{qUA1wQmW~Oavdq9#<+_y z_K$z-Z%2_l{TXc_WpI4^KPP-etJNH<43V1ZQ~bs+VHjLkKJ;f;KP;XxRl4w@@*7pV z=?n`q_}-Hzg;J?ftu8Us4M5A4s+7|AJXQO$u&)kJ)nO<)j-n6%C}qnPPlS+1k3Ro* z|M7o}T?M7|7k>WdPaj#Y-#axYt4|L9do1BetQ*xxoRxZ-`w&!BFp%PVCV}zOJ|5k& zf+6M#^P-d)L@n289Bb?khU=#w6fk@NG7HG$>0Q#2!As7lC8FDJSIhPEr=!5vn8rqv zBvW2N5S+Jfxe%h)>2zAHVyU#Uwl=n`=9Ir6=NIIplv=iJLm>$Kzz^osKzYU>8C!vk zh)N{_s39LqYx6M-ZEW!kB67yP=($ByJk{q0KzsZ5<1&++kml~uO8LCq3;1kkY@rrw z5xns;18$c*tI_Xuvr3lD^{wMRZiuL9x}lr( zYPHjD9~|uGK%1MP$0!6LL{Lg8iezB*CBuv}|ft6h%R5%LNI_CN&{ z6hu+DNTb~<6n^8^e>vf;<2M#HBMBqR3y@6(W(ODrreT!|<(1m1p&Jrqn$yW)QzR$u z6iS%qy4_a$_~6j@yf6qgP0vx@nIr!$&bftDNo#{Mp23~rak^{J>-9SwDdpPcCgWV! z^+oc)=$oVvjg?hG$lChG@$pf&(++}wF0Tz-N+G47KnV~^=dPmtAmE&j)rV0OF~;KN zC3C|@DdQ|sO3CA6f3uc9_)Z6V#I7PrRhL|_i-c2G;}kFf=ty~e&E?=A)7t~5JHTlMxekbBS1tb2qCA@Up>z|gI$zF%|I#Rym@qV zu)BM>x99sliUsKb<6NX(A+lY&{>mF~zHJz$s&ZHsD+&>cC=7fTalXrtQtB~yn*i{; zzxO){#uZD1k(W4KJt0tX3erYxLcuOJsw*q?Rn9oT80_X8(lf{Q0zjcq7Kjl_B$%GB za@3JV$qiOW)C>r&^HC`4yo5^ISsw(!(f&RGTu>8j90H$|VHjSzeC4&*-+bxnb#1Zw z`TVv-VGxCW;JXtYtlW0&ul>z$$K9JWAOX=VuO>Wp=t(+_MG6$%_E?^gQkIJ4TBW{H zo6TJDX@UX@+%ZhST{)mDGKDIc#+b&q&Vj-i`z0eb89_B}DJ`1q{8WSxnx^>H^Vq;7)C3NSdfzMe((1aXe!w$n%15Hii62hL=jQr zTD4rORq7MbR>o7BmP_Ktyj}t~rUB|56XnW2U>6aAfa^M)PP^T1(J9}IYg}<7xd8Qs zoo2JsY_^Y&Vc7tFiWS4an@O+ww|@4gMT|F|$Yxkr*-6r5{&W^8$qai000PBgfWp>m z>l56$bKD33{z6da5Rsp9^)nEwZWsw9rJ0&$XiJ>YdwMI|M@PMO+Zha&-fka7f#Sw| zibqKk%4m{b8jt$`lqKk70P=WxiaU3m%3;C*j`GdJ+J>B!o?A zk%kVLx~xwn5)?PiGG37VX)2VZAfD5gXuF9=5O=1AX=G-?9PSNJ`0T;m&mTW{y8Bq; zT6!6Vxi~-JzW^W#!`9*9u-~5_VsHALL@C3-6H%yYgC^ecSO3b_!YBrQn?i1Uejw!T zQ+GN_kI3wb78EO<=SEG_a#(#^E897!C=}tym>O~8Jjh^_VB_f-cXfR&E0UkWoK-`P ze)Pfnn;ToYW>hLm>(~H*FbD$QM?||=~yC4u?8U+MH$9vvSd;{M_8N@H!Mu{tMk&NQqD0G{JWDYq_N zavjHWz2!D82@w%N06+@ygZF>J7$t=K*^83u_1E6q-rVZ;x_f)OXHD_XK7IY>O#n95 zzAA5A?H@dhKUTsh2sy>!q9j@B!KIK1p{DWNh=ejKqD4$1@j}ng#!OyOu)jhG1xRzI zYQ-50GY_amvR!Q@a-X`ZPJQ~+R%sj8rSWTWm~8Yl~6?8)vU zLde5M_g}eoL)VQZmSv;FLa9gyDVAW+?}x$c(JoTc4K^C(!8kZ0&WY!FV@uT#k#R#r zWAY7N_mB{BZQVQ*f7z}-XB#9WvE3GVX;s%u*L75&>%~=RC(3XkLJ9zs7D7ZdkY|G5 z#kC+KN&o=3fop1Jn)Qs_#gmGHj2&W{uH#^sHgq|*9(OkGDc2r8y8p@DTg}#S5C%&Q znIIO5#ag3YUun!Xlp6Scy6GD7Ti^Uztk`<`IPOM!esI z2Z(5zmT6kWVoAA1Q~G>4yu>q}k)~;eVI=3D>gC2_C?^cV_Hnaycqp?VWg((nC{W9? z(+nRqOcS%a4fh^?mXfI`rANmH_aA)v;jJG7kmXL5IH`NAR%(s9T`VkEF08HAgK)gJ zeDA@7*dVh^%J@-$X(T90L7oG-qhXkqWfzMjLWo>8SnvohbbL8`uGbEtJj#G^PAToR z+nr{!b##p4gK=HpL3VgS0XzjFPxeYI!Qmf9pOk7I&n}6q5Vk8v1edku(jb>#%p>5*fu|KC% zMa0d`&5ezXwY9aBn-hg|M70~C)IFDKS(%7{6U;^%0YLlsxYKO*+T%ylA>!D;3|N+p zh`#TM5xm@z8Wg0Iw{Cx+G}5J=mu$;kZmR?U)Ef1`4+xS$zdI*smGF)UZx1Re0I|U* zm?kTTI5wvm1VOP_JZZ_HbaQi4HJk74?a^hI(JMaOUfagp=_RTqNZu7n}@?eV|8Utbpt6$KMccr_wVYu4nW_y`Bv^4k=g7uP$XEY z)I=18VW0*E&+z%hVnGNowrcsw?vpoOdm|i&R*X{Wg<9zLV)O$HeQD|W8N)xiZ>(LP zC@<8qx3{;WDC+n7j^oUV8*_&SU%qw&032u7YB$@RR+@6~P=vNVdx@`t9qpqd$`~P} zTCXD_`;Bkkn8*O8Y3(2EA`;uqwybWio1=a&4(D9q(g`7U_Z|m9;CXJP{M zIps5yDtGihQo69a^b^oxb!J8!)wrR;RuPj?@aaR?efpzrky zMj`umQB2)12>>W%N+yJnY#R&)ys<&T zDqimUUf_Fq;T}~ChQ~3?(eV-IS`=fEn&nl0&>F8NDfC@YF!CFR?xUYrm%nhvwG4tF z%|tOov~9asED}O`y`JMbOk<0oAE!SkR7&T~!fK_~sI3qn2ZwvDb~6ma)7+Tv>>ztK zDAjqm-tdL?CrT-$yTXw2|OEqTc`@!Z3Mqo{|n5 z>s#Afm->TVtJUoGJ7E-Z#&djKrnlfTc|*r>9LG60*x%W?q|ymXOeCnzAkH<*E)EA> zLSVU79i#Plj%QjXBA!8N{QUDrfBxf>j%11C?aMF%lqnX9y?*bRD8W&_REk*d4pCaw zO|N$t=hF>5S+Vm6>%FHRSy#SzTG^^r^voxYgi?lxlu|$N{lGtxk~6;2Sk<+8&`(;q zBZRQ6g1ue1!mf%aI@sS2GmZoW%29+1Wx~^D;i$`IYim2-L+I?{D~QrAoOlAmK_79M zT3Y$~M+XN=W3O#(jogo~{`6mZ|A)79oe@G9A-A7Cr@ya!~P7u5AH#zc z@4x%bYaieK^!#6b?|a|<=Fk1SA|N56uYTq0r_3iYIJh?wH|5QjM`Xs0LJ|f(A#$n! zDV5%Un#K9;4+VN~w68d4rM_Ys*7VQxU6f;eSLng+E+J$%7{st^qPTrNIF|Jf9-RI^ zOQ+j)jSzxJ?jMCOG7%j2qDCpd{PmCSTbJJ*wJ!lcx7#h3%UPfE>a`p1|KtY=fhz!L zwwua$v@1Z;^qSslNs&Aw&|C7h@i}VOoZ1p}Y{Hfe`Z6 z>#y8<@Pu=AE{?)n*HNWQ=N*p(Y>v@C1CZ-$+9@)6)`6SoCl@xZn)OXYltTEfH#P{i zNI#7NeZ2cfvE`-B%Q=`yA)D~*IKrB4gyX;e|cVPVJc->!h7wt^Oq}O6vFAWHKm1esZcJN zwiSmfnS)NG6qQmXM|{f(oJd4Z_n$Od$H%QBmaa0}bKLofTE^J==ElbMX01`@oJ*Nu zPUvJd7!2ovV-1AB2{!_{7*`ZUt;54XuQ%v+7vBM}wXqtF(}s-EVcam8#I5tg{1ziH zK6v`+IJRe2v0&PkVOuDt#adAKWz%S(Fbbn6dc60j({1~KKc`b;>Cifrv7l*MV|8V7 zXS-TYTThlo6V6!|5m2nCy1$oe7Ansn48x=SeRnvFvV$?_zKX@dSU(E@65?zL^UorQ z)2w~C{}5vG)M^Y?v065ZHrMzxW~!KlTTX#`zSn9upX@&F4|j6)?1ygab~S$P`~ zQA*P^4a3lNeKf~A_W4t8;tW}l65s@C)tY75OV8=4A=;-L+a{eSP!NrK`4G$ij+q zks}JA(RG}o{r$lAQ-U?cFArL_Q)bAdpJT=`gtWxQd z+qYEIK0P-IDdt39{Xzf9-s7ixk6q6l(YEg`6kwK8dO9=7IajQBh8w8@H7b-!E9+}q z!s=Xc|uX$m8NNqK*Hgi?z2 z^-Z;vj~+b?;v3i(HeLb%`rYoz#s=e>+aJufU|mR2u#9jVf`RIY9n1XXtsA|kx5pYR zQW6RzKe#qf8Mu(Kf|*iADSP_#u@Iu(Xq3xU(=_A6mXM-etsgcI=X`2(FzhQjDGqz} zdc!cxOp=swO$Isr$(RyfR4Nh1rZP~_WMuo5rk`B!qnT?eRbdcR#%o8;F-l4b6A<@=qWHO8Zalq@^~-&QKd; ztlQ~4e)RB@k3Yf;g_rZSXq@5j$>T?N@7&J1qG-zv0RE0|3+5!NLATAblxi zt=6d38kDm8_wQZ|ZbYtWT+;wx*z3u#-mn`EP8DkIbf2Njn_3Cw)+W|K?BCioXz z)5Cnjv?opefNAr`G@Hj0#YR4JR0#3%%Qvz*T0#hCkQ3G=4BQ+f z+F0L6CK^QahRzxD3;>P}_a;^|2?@?A?4Kx#)N}6K{rC&-emROFR6{jiv>Urm@5C0? zP;za}$W5lqu&UR;kn$jQAAO$5IFwSp@#foq{QmdzF`>@%ncJ&~_{yuVjr!|fq?SBP zD59v>=}e^w&+GBEwRIsxtJR#jSXxC64rT~ien8(M5K%p0t8V;Cjt82)7yj)rdv@MTxw{o zf#|!EJS)^5akY?BKw6;eKKQVF<&F6XEJ~SWm_@7ThyHQr2mqGLjf&X@gZ`&?Ke25a z3AuFXO76gt8Z(?=sZC@;NQy~tP6*lD+;&~J-EPrEji;Z)jWY0E0HBmp#^<3JGl~3B zFj_YZvtRJM;Y5oRaXe-hH%ngc@P*p}2q7Z$q(n>Cx9cb4CL&23Un;q_+m80y(N054 z7Sp_OY4n?>>mx)KO1WOHr_qFy$2;n%xq}qJS*2L9EK8NOWKf2NLE@S4{{XUlXx?X_l%fCt002ovPDHLkV1kE@K$-vm diff --git a/mods/HELP/doc/doc_items/init.lua b/mods/HELP/doc/doc_items/init.lua index b0be3e12d..325ad9abb 100644 --- a/mods/HELP/doc/doc_items/init.lua +++ b/mods/HELP/doc/doc_items/init.lua @@ -1,6 +1,12 @@ -local S = minetest.get_translator("doc_items") +local S = minetest.get_translator(minetest.get_current_modname()) local N = function(s) return s end +local math = math +local string = string + +local tostring = tostring +local pairs = pairs + doc.sub.items = {} -- Template texts @@ -34,13 +40,17 @@ local suppressed = { local forbidden_core_factoids = {} -- Helper functions -local yesno = function(bool) - if bool==true then return S("Yes") - elseif bool==false then return S("No") - else return "N/A" end +local function yesno(bool) + if bool == true then + return S("Yes") + elseif bool == false then + return S("No") + else + return "N/A" + end end -local groups_to_string = function(grouptable, filter) +local function groups_to_string(grouptable, filter) local gstring = "" local groups_count = 0 for id, value in pairs(grouptable) do @@ -50,7 +60,7 @@ local groups_to_string = function(grouptable, filter) -- List seperator gstring = gstring .. S(", ") end - if groupdefs[id] ~= nil and doc.sub.items.settings.friendly_group_names == true then + if groupdefs[id] and doc.sub.items.settings.friendly_group_names == true then gstring = gstring .. groupdefs[id] else gstring = gstring .. id @@ -66,7 +76,7 @@ local groups_to_string = function(grouptable, filter) end -- Removes all text after the first newline (including the newline) -local scrub_newlines = function(text) +local function scrub_newlines(text) local spl = string.split(text, "\n") if spl and #spl > 0 then return spl[1] @@ -76,7 +86,7 @@ local scrub_newlines = function(text) end --[[ Append a newline to text, unless it already ends with a newline. ]] -local newline = function(text) +local function newline(text) if string.sub(text, #text, #text) == "\n" or text == "" then return text else @@ -85,7 +95,7 @@ local newline = function(text) end --[[ Make sure the text ends with two newlines by appending any missing newlines at the end, if neccessary. ]] -local newline2 = function(text) +local function newline2(text) if string.sub(text, #text-1, #text) == "\n\n" or text == "" then return text elseif string.sub(text, #text, #text) == "\n" then @@ -97,7 +107,7 @@ end -- Extract suitable item description for formspec -local description_for_formspec = function(itemstring) +local function description_for_formspec(itemstring) if minetest.registered_items[itemstring] == nil then -- Huh? The item doesn't exist for some reason. Better give a dummy string minetest.log("warning", "[doc] Unknown item detected: "..tostring(itemstring)) @@ -111,26 +121,26 @@ local description_for_formspec = function(itemstring) end end -local get_entry_name = function(itemstring) +local function get_entry_name(itemstring) local def = minetest.registered_items[itemstring] - if def._doc_items_entry_name ~= nil then + if def._doc_items_entry_name then return def._doc_items_entry_name - elseif item_name_overrides[itemstring] ~= nil then + elseif item_name_overrides[itemstring] then return item_name_overrides[itemstring] else return def.description end end -doc.sub.items.get_group_name = function(groupname) - if groupdefs[groupname] ~= nil and doc.sub.items.settings.friendly_group_names == true then +function doc.sub.items.get_group_name(groupname) + if groupdefs[groupname] and doc.sub.items.settings.friendly_group_names == true then return groupdefs[groupname] else return groupname end end -local burntime_to_text = function(burntime) +local function burntime_to_text(burntime) if burntime == nil then return S("unknown") elseif burntime == 1 then @@ -146,16 +156,16 @@ end * Full punch interval * Damage groups ]] -local factoid_toolcaps = function(tool_capabilities, check_uses) +local function factoid_toolcaps(tool_capabilities, check_uses) if forbidden_core_factoids.tool_capabilities then return "" end local formstring = "" if check_uses == nil then check_uses = false end - if tool_capabilities ~= nil and tool_capabilities ~= {} then + if tool_capabilities and tool_capabilities ~= {} then local groupcaps = tool_capabilities.groupcaps - if groupcaps ~= nil then + if groupcaps then local miningcapstr = "" local miningtimesstr = "" local miningusesstr = "" @@ -164,7 +174,7 @@ local factoid_toolcaps = function(tool_capabilities, check_uses) local useslines = 0 for k,v in pairs(groupcaps) do -- Mining capabilities - local minrating, maxrating + --[[local minrating, maxrating if v.times then for rating, time in pairs(v.times) do if minrating == nil then minrating = rating else @@ -177,7 +187,7 @@ local factoid_toolcaps = function(tool_capabilities, check_uses) else minrating = 1 maxrating = 1 - end + end]] local maxlevel = v.maxlevel if not maxlevel then -- Default from tool.h @@ -188,7 +198,7 @@ local factoid_toolcaps = function(tool_capabilities, check_uses) caplines = caplines + 1 for rating=3, 1, -1 do - if v.times ~= nil and v.times[rating] ~= nil then + if v.times and v.times[rating] then local maxtime = v.times[rating] local mintime local mintimestr, maxtimestr @@ -255,7 +265,7 @@ local factoid_toolcaps = function(tool_capabilities, check_uses) -- Weapon data local damage_groups = tool_capabilities.damage_groups - if damage_groups ~= nil then + if damage_groups then formstring = formstring .. S("This is a melee weapon which deals damage by punching.") .. "\n" -- Damage groups formstring = formstring .. S("Maximum damage per hit:") .. "\n" @@ -266,7 +276,7 @@ local factoid_toolcaps = function(tool_capabilities, check_uses) -- Full punch interval local punch = 1.0 - if tool_capabilities.full_punch_interval ~= nil then + if tool_capabilities.full_punch_interval then punch = tool_capabilities.full_punch_interval end formstring = formstring .. S("Full punch interval: @1 s", string.format("%.1f", punch)) @@ -282,7 +292,7 @@ end - Digging times/groups - level group ]] -local factoid_mining_node = function(data) +local function factoid_mining_node(data) if forbidden_core_factoids.node_mining then return "" end @@ -292,7 +302,7 @@ local factoid_mining_node = function(data) -- Check if there are no mining groups at all local nogroups = true for groupname,_ in pairs(mininggroups) do - if data.def.groups[groupname] ~= nil or groupname == "dig_immediate" then + if data.def.groups[groupname] or groupname == "dig_immediate" then nogroups = false break end @@ -324,7 +334,7 @@ local factoid_mining_node = function(data) local minegroupcount = 0 for group,_ in pairs(mininggroups) do local rating = data.def.groups[group] - if rating ~= nil then + if rating then mstring = mstring .. S("• @1: @2", doc.sub.items.get_group_name(group), rating).."\n" minegroupcount = minegroupcount + 1 end @@ -344,18 +354,18 @@ local factoid_mining_node = function(data) end -- Pointing range of itmes -local range_factoid = function(itemstring, def) +local function range_factoid(itemstring, def) local handrange = minetest.registered_items[""].range local itemrange = def.range if itemstring == "" then - if handrange ~= nil then + if handrange then return S("Range: @1", itemrange) else return S("Range: 4") end else if handrange == nil then handrange = 4 end - if itemrange ~= nil then + if itemrange then return S("Range: @1", itemrange) else return S("Range: @1 (@2)", get_entry_name(""), handrange) @@ -364,14 +374,14 @@ local range_factoid = function(itemstring, def) end -- Smelting fuel factoid -local factoid_fuel = function(itemstring, ctype) +local function factoid_fuel(itemstring, ctype) if forbidden_core_factoids.fuel then return "" end local formstring = "" local result, decremented = minetest.get_craft_result({method = "fuel", items = {itemstring}}) - if result ~= nil and result.time > 0 then + if result and result.time > 0 then local base local burntext = burntime_to_text(result.time) if ctype == "tools" then @@ -392,7 +402,7 @@ local factoid_fuel = function(itemstring, ctype) end -- Shows the itemstring of an item -local factoid_itemstring = function(itemstring, playername) +local function factoid_itemstring(itemstring, playername) if forbidden_core_factoids.itemstring then return "" end @@ -405,7 +415,7 @@ local factoid_itemstring = function(itemstring, playername) end end -local entry_image = function(data) +local function entry_image(data) local formstring = "" -- No image for air if data.itemstring ~= "air" then @@ -414,7 +424,7 @@ local entry_image = function(data) formstring = formstring .. "image["..(doc.FORMSPEC.ENTRY_END_X-1)..","..doc.FORMSPEC.ENTRY_START_Y..";1,1;".. minetest.registered_items[""].wield_image.."]" -- Other items - elseif data.image ~= nil then + elseif data.image then formstring = formstring .. "image["..(doc.FORMSPEC.ENTRY_END_X-1)..","..doc.FORMSPEC.ENTRY_START_Y..";1,1;"..data.image.."]" else formstring = formstring .. "item_image["..(doc.FORMSPEC.ENTRY_END_X-1)..","..doc.FORMSPEC.ENTRY_START_Y..";1,1;"..data.itemstring.."]" @@ -432,9 +442,9 @@ factoid_generators.craftitems = {} --[[ Returns a list of all registered factoids for the specified category and type * category_id: Identifier of the Documentation System category in which the factoid appears * factoid_type: If set, oly returns factoid with a matching factoid_type. - If nil, all factoids for this category will be generated + If nil, all factoids for this category will be generated * data: Entry data to parse ]] -local factoid_custom = function(category_id, factoid_type, data) +local function factoid_custom(category_id, factoid_type, data) local ftable = factoid_generators[category_id] local datastring = "" -- Custom factoids are inserted here @@ -450,17 +460,17 @@ local factoid_custom = function(category_id, factoid_type, data) end -- Shows core information shared by all items, to be inserted at the top -local factoids_header = function(data, ctype) +local function factoids_header(data, ctype) local datastring = "" if not forbidden_core_factoids.basics then local longdesc = data.longdesc local usagehelp = data.usagehelp - if longdesc ~= nil then + if longdesc then datastring = datastring .. S("Description: @1", longdesc) datastring = newline2(datastring) end - if usagehelp ~= nil then + if usagehelp then datastring = datastring .. S("Usage help: @1", usagehelp) datastring = newline2(datastring) end @@ -484,7 +494,7 @@ local factoids_header = function(data, ctype) datastring = datastring .. S("This item points to liquids.").."\n" end end - if data.def.on_use ~= nil then + if data.def.on_use then if ctype == "nodes" then datastring = datastring .. S("Punches with this block don't work as usual; melee combat and mining are either not possible or work differently.").."\n" elseif ctype == "tools" then @@ -510,7 +520,7 @@ local factoids_header = function(data, ctype) end -- Shows less important information shared by all items, to be inserted at the bottom -local factoids_footer = function(data, playername, ctype) +local function factoids_footer(data, playername, ctype) local datastring = "" datastring = datastring .. factoid_custom(ctype, "groups", data) datastring = newline2(datastring) @@ -518,7 +528,7 @@ local factoids_footer = function(data, playername, ctype) -- Show other “exposable” groups if not forbidden_core_factoids.groups then local gstring, gcount = groups_to_string(data.def.groups, miscgroups) - if gstring ~= nil then + if gstring then if gcount == 1 then if ctype == "nodes" then datastring = datastring .. S("This block belongs to the @1 group.", gstring) .. "\n" @@ -577,11 +587,8 @@ doc.add_category("nodes", { description = S("Item reference of blocks and other things which are capable of occupying space"), build_formspec = function(data, playername) if data then - local formstring = "" - local datastring = "" - - formstring = entry_image(data) - datastring = factoids_header(data, "nodes") + local formstring = entry_image(data) + local datastring = factoids_header(data, "nodes") local liquid = data.def.liquidtype ~= "none" and minetest.get_item_group(data.itemstring, "fake_liquid") == 0 if not forbidden_core_factoids.basics then @@ -600,7 +607,7 @@ doc.add_category("nodes", { datastring = datastring .. S("This block is a liquid with these properties:") .. "\n" local range, renew, viscos if data.def.liquid_range then range = data.def.liquid_range else range = 8 end - if data.def.liquid_renewable ~= nil then renew = data.def.liquid_renewable else renew = true end + if data.def.liquid_renewable then renew = data.def.liquid_renewable else renew = true end if data.def.liquid_viscosity then viscos = data.def.liquid_viscosity else viscos = 0 end if renew then datastring = datastring .. S("• Renewable") .. "\n" @@ -620,7 +627,7 @@ doc.add_category("nodes", { --- Direct interaction with the player ---- Damage (very important) if not forbidden_core_factoids.node_damage then - if data.def.damage_per_second ~= nil and data.def.damage_per_second > 1 then + if data.def.damage_per_second and data.def.damage_per_second > 1 then datastring = datastring .. S("This block causes a damage of @1 hit points per second.", data.def.damage_per_second) .. "\n" elseif data.def.damage_per_second == 1 then datastring = datastring .. S("This block causes a damage of @1 hit point per second.", data.def.damage_per_second) .. "\n" @@ -633,7 +640,7 @@ doc.add_category("nodes", { end end local fdap = data.def.groups.fall_damage_add_percent - if fdap ~= nil and fdap ~= 0 then + if fdap and fdap ~= 0 then if fdap > 0 then datastring = datastring .. S("The fall damage on this block is increased by @1%.", fdap) .. "\n" elseif fdap <= -100 then @@ -655,11 +662,11 @@ doc.add_category("nodes", { datastring = datastring .. S("This block can be climbed.").."\n" end local bouncy = data.def.groups.bouncy - if bouncy ~= nil and bouncy ~= 0 then + if bouncy and bouncy ~= 0 then datastring = datastring .. S("This block will make you bounce off with an elasticity of @1%.", bouncy).."\n" end local slippery = data.def.groups.slippery - if slippery ~= nil and slippery ~= 0 then + if slippery and slippery ~= 0 then datastring = datastring .. S("This block is slippery.") .. "\n" end datastring = datastring .. factoid_custom("nodes", "movement", data) @@ -759,7 +766,7 @@ doc.add_category("nodes", { datastring = newline2(datastring) --- List nodes/groups to which this node connects to - if not forbidden_core_factoids.connects_to and data.def.connects_to ~= nil then + if not forbidden_core_factoids.connects_to and data.def.connects_to then local nodes = {} local groups = {} for c=1,#data.def.connects_to do @@ -774,7 +781,7 @@ doc.add_category("nodes", { local nstring = "" for n=1,#nodes do local name - if item_name_overrides[nodes[n]] ~= nil then + if item_name_overrides[nodes[n]] then name = item_name_overrides[nodes[n]] else name = description_for_formspec(nodes[n]) @@ -782,7 +789,7 @@ doc.add_category("nodes", { if n > 1 then nstring = nstring .. S(", ") end - if name ~= nil then + if name then nstring = nstring .. name else nstring = nstring .. S("Unknown Node") @@ -813,9 +820,9 @@ doc.add_category("nodes", { datastring = newline2(datastring) -- Non-default drops - if not forbidden_core_factoids.drops and data.def.drop ~= nil and data.def.drop ~= data.itemstring and data.itemstring ~= "air" then + if not forbidden_core_factoids.drops and data.def.drop and data.def.drop ~= data.itemstring and data.itemstring ~= "air" then -- TODO: Calculate drop probabilities of max > 1 like for max == 1 - local get_desc = function(stack) + local function get_desc(stack) return description_for_formspec(stack:get_name()) end if data.def.drop == "" then @@ -831,10 +838,10 @@ doc.add_category("nodes", { datastring = datastring .. S("This block will drop the following when mined: @1.", desc).."\n" end end - elseif type(data.def.drop) == "table" and data.def.drop.items ~= nil then + elseif type(data.def.drop) == "table" and data.def.drop.items then local max = data.def.drop.max_items local dropstring = "" - local dropstring_base = "" + local dropstring_base if max == nil then dropstring_base = N("This block will drop the following items when mined: @1.") elseif max == 1 then @@ -852,7 +859,7 @@ doc.add_category("nodes", { local rarity_history = {} for i=1,#data.def.drop.items do local local_rarity = data.def.drop.items[i].rarity - local chance = 1 + local chance local rarity = 1 if local_rarity == nil then local_rarity = 1 @@ -885,7 +892,7 @@ doc.add_category("nodes", { if chance > 0 then probtable = {} probtable.items = {} - for j=1,#data.def.drop.items[i].items do + for j = 1, #data.def.drop.items[i].items do local dropstack = ItemStack(data.def.drop.items[i].items[j]) local itemstring = dropstack:get_name() local desc = get_desc(dropstack) @@ -907,7 +914,7 @@ doc.add_category("nodes", { -- Do some cleanup of the probability table if max == 1 or max == nil then -- Sort by rarity - local comp = function(p1, p2) + local function comp(p1, p2) return p1.rarity < p2.rarity end table.sort(probtables, comp) @@ -937,7 +944,6 @@ doc.add_category("nodes", { end local rarity = probtable.rarity - local raritystring = "" -- No percentage if there's only one possible guaranteed drop if not(rarity == 1 and #data.def.drop.items == 1) then local chance = (1/rarity)*100 @@ -957,7 +963,7 @@ doc.add_category("nodes", { dropstring = dropstring .. dropstring_this pcount = pcount + 1 end - if max ~= nil and max > 1 then + if max and max > 1 then datastring = datastring .. S(dropstring_base, max, dropstring) else datastring = datastring .. S(dropstring_base, dropstring) @@ -992,15 +998,15 @@ doc.add_category("tools", { if entries[2].eid == "" then return false end local comp = {} - for e=1, 2 do + for e = 1, 2 do comp[e] = {} end -- No tool capabilities: Instant loser - if entries[1].data.def.tool_capabilities == nil and entries[2].data.def.tool_capabilities ~= nil then return false end - if entries[2].data.def.tool_capabilities == nil and entries[1].data.def.tool_capabilities ~= nil then return true end + if entries[1].data.def.tool_capabilities == nil and entries[2].data.def.tool_capabilities then return false end + if entries[2].data.def.tool_capabilities == nil and entries[1].data.def.tool_capabilities then return true end -- No tool capabilities for both: Compare by uses if entries[1].data.def.tool_capabilities == nil and entries[2].data.def.tool_capabilities == nil then - for e=1, 2 do + for e = 1, 2 do if type(entries[e].data.def._doc_items_durability) == "number" then comp[e].uses = entries[e].data.def._doc_items_durability else @@ -1055,7 +1061,7 @@ doc.add_category("tools", { comp[e].count = groupcount comp[e].group = group comp[e].mintime = mintime - if realuses ~= nil then + if realuses then comp[e].uses = realuses elseif type(entries[e].data.def._doc_items_durability) == "number" then comp[e].uses = entries[e].data.def._doc_items_durability @@ -1086,11 +1092,8 @@ doc.add_category("tools", { end, build_formspec = function(data, playername) if data then - local formstring = "" - local datastring = "" - - formstring = entry_image(data) - datastring = factoids_header(data, "tools") + local formstring = entry_image(data) + local datastring = factoids_header(data, "tools") -- Overwritten durability info if type(data.def._doc_items_durability) == "number" then @@ -1120,11 +1123,8 @@ doc.add_category("craftitems", { description = S("Item reference of items which are neither blocks, tools or weapons (esp. crafting items)"), build_formspec = function(data, playername) if data then - local formstring = "" - local datastring = "" - - formstring = entry_image(data) - datastring = factoids_header(data, "craftitems") + local formstring = entry_image(data) + local datastring = factoids_header(data, "craftitems") datastring = datastring .. factoids_footer(data, playername, "craftitems") formstring = formstring .. doc.widgets.text(datastring, nil, nil, doc.FORMSPEC.ENTRY_WIDTH - 1.2) @@ -1166,9 +1166,9 @@ local function gather_descs() -- 1st pass: Gather groups of interest for id, def in pairs(minetest.registered_items) do -- Gather all groups used for mining - if def.tool_capabilities ~= nil then + if def.tool_capabilities then local groupcaps = def.tool_capabilities.groupcaps - if groupcaps ~= nil then + if groupcaps then for k,v in pairs(groupcaps) do if mininggroups[k] ~= true then mininggroups[k] = true @@ -1179,7 +1179,7 @@ local function gather_descs() -- ... and gather all groups which appear in crafting recipes local crafts = minetest.get_all_craft_recipes(id) - if crafts ~= nil then + if crafts then for c=1,#crafts do for k,v in pairs(crafts[c].items) do if string.sub(v,1,6) == "group:" then @@ -1194,7 +1194,7 @@ local function gather_descs() end -- ... and gather all groups used in connects_to - if def.connects_to ~= nil then + if def.connects_to then for c=1, #def.connects_to do if string.sub(def.connects_to[c],1,6) == "group:" then local group = string.sub(def.connects_to[c],7,-1) @@ -1213,7 +1213,7 @@ local function gather_descs() else help.longdesc["air"] = S("A transparent block, basically empty space. It is usually left behind after digging something.") end - if minetest.registered_items["ignore"]._doc_items_create_entry ~= nil then + if minetest.registered_items["ignore"]._doc_items_create_entry then suppressed["ignore"] = minetest.registered_items["ignore"]._doc_items_create_entry == true end @@ -1242,23 +1242,23 @@ local function gather_descs() }) end - local add_entries = function(deftable, category_id) + local function add_entries(deftable, category_id) for id, def in pairs(deftable) do local name, ld, uh, im local forced = false - if def._doc_items_create_entry == true and def ~= nil then forced = true end + if def._doc_items_create_entry == true and def then forced = true end name = get_entry_name(id) if not (((def.description == nil or def.description == "") and def._doc_items_entry_name == nil) or (def._doc_items_create_entry == false) or (suppressed[id] == true)) or forced then if def._doc_items_longdesc then ld = def._doc_items_longdesc end - if help.longdesc[id] ~= nil then + if help.longdesc[id] then ld = help.longdesc[id] end if def._doc_items_usagehelp then uh = def._doc_items_usagehelp end - if help.usagehelp[id] ~= nil then + if help.usagehelp[id] then uh = help.usagehelp[id] end if def._doc_items_image then @@ -1269,7 +1269,6 @@ local function gather_descs() if type(def._doc_items_hidden) == "boolean" then hidden = def._doc_items_hidden end - local custom_image name = scrub_newlines(name) local infotable = { name = name, @@ -1308,13 +1307,13 @@ local function reveal_item(playername, itemstring) if itemstring == nil or itemstring == "" or playername == nil or playername == "" then return false end - if minetest.registered_nodes[itemstring] ~= nil then + if minetest.registered_nodes[itemstring] then category_id = "nodes" - elseif minetest.registered_tools[itemstring] ~= nil then + elseif minetest.registered_tools[itemstring] then category_id = "tools" - elseif minetest.registered_craftitems[itemstring] ~= nil then + elseif minetest.registered_craftitems[itemstring] then category_id = "craftitems" - elseif minetest.registered_items[itemstring] ~= nil then + elseif minetest.registered_items[itemstring] then category_id = "craftitems" else return false @@ -1334,7 +1333,7 @@ end minetest.register_on_dignode(function(pos, oldnode, digger) if digger == nil then return end local playername = digger:get_player_name() - if playername ~= nil and playername ~= "" and oldnode ~= nil then + if playername and playername ~= "" and oldnode then reveal_item(playername, oldnode.name) reveal_items_in_inventory(digger) end @@ -1343,7 +1342,7 @@ end) minetest.register_on_punchnode(function(pos, node, puncher, pointed_thing) if puncher == nil then return end local playername = puncher:get_player_name() - if playername ~= nil and playername ~= "" and node ~= nil then + if playername and playername ~= "" and node then reveal_item(playername, node.name) end end) @@ -1351,7 +1350,7 @@ end) minetest.register_on_placenode(function(pos, newnode, placer, oldnode, itemstack, pointed_thing) if placer == nil then return end local playername = placer:get_player_name() - if playername ~= nil and playername ~= "" and itemstack ~= nil and not itemstack:is_empty() then + if playername and playername ~= "" and itemstack and not itemstack:is_empty() then reveal_item(playername, itemstack:get_name()) end end) @@ -1359,7 +1358,7 @@ end) minetest.register_on_craft(function(itemstack, player, old_craft_grid, craft_inv) if player == nil then return end local playername = player:get_player_name() - if playername ~= nil and playername ~= "" and itemstack ~= nil and not itemstack:is_empty() then + if playername and playername ~= "" and itemstack and not itemstack:is_empty() then reveal_item(playername, itemstack:get_name()) end end) @@ -1371,7 +1370,7 @@ minetest.register_on_player_inventory_action(function(player, action, inventory, if action == "take" or action == "put" then itemstack = inventory_info.stack end - if itemstack ~= nil and playername ~= nil and playername ~= "" and (not itemstack:is_empty()) then + if itemstack and playername and playername ~= "" and (not itemstack:is_empty()) then reveal_item(playername, itemstack:get_name()) end end) @@ -1379,9 +1378,9 @@ end) minetest.register_on_item_eat(function(hp_change, replace_with_item, itemstack, user, pointed_thing) if user == nil then return end local playername = user:get_player_name() - if playername ~= nil and playername ~= "" and itemstack ~= nil and not itemstack:is_empty() then + if playername and playername ~= "" and itemstack and not itemstack:is_empty() then reveal_item(playername, itemstack:get_name()) - if replace_with_item ~= nil then + if replace_with_item then reveal_item(playername, replace_with_item) end end @@ -1391,10 +1390,12 @@ minetest.register_on_joinplayer(function(player) reveal_items_in_inventory(player) end) ---[[ Periodically check all items in player inventory and reveal them all. +--[[ +Periodically check all items in player inventory and reveal them all. TODO: Check whether there's a serious performance impact on servers with many players. -TODO: If possible, try to replace this functionality by updating the revealed items as - soon the player obtained a new item (probably needs new Minetest callbacks). ]] +TODO: If possible, try to replace this functionality by updating the revealed items as soon the player obtained a new item (probably needs new Minetest callbacks). +]] + local checktime = 8 local timer = 0 minetest.register_globalstep(function(dtime) diff --git a/mods/HELP/doc/doc_items/locale/doc_items.de.tr b/mods/HELP/doc/doc_items/locale/doc_items.de.tr index 90747c38a..f14c99314 100644 --- a/mods/HELP/doc/doc_items/locale/doc_items.de.tr +++ b/mods/HELP/doc/doc_items/locale/doc_items.de.tr @@ -10,9 +10,9 @@ # Itemname (ca. 25%) @1 (ca. @2%)=@1 (ca. @2%) # List separator (e.g. “one, two, three”) -, =, +, =, # Final list separator (e.g. “One, two and three”) - and = und + and = und 1 second=1 Sekunde A transparent block, basically empty space. It is usually left behind after digging something.=Ein transparenter Block, praktisch leerer Raum. Er wird üblicherweise hinterlassen, nachdem man etwas ausgegraben hat. Air=Luft @@ -32,7 +32,7 @@ Item reference of items which are neither blocks, tools or weapons (esp. craftin Liquids can flow into this block and destroy it.=Flüssigkeiten können in diesen Block hereinfließen und ihn zerstören. Maximum stack size: @1=Maximale Stapelgröße: @1 Mining level: @1=Grabestufe: @1 -Mining ratings:=Grabewertungen: +Mining ratings:=Grabewertungen: • @1, rating @2: @3 s - @4 s=• @1, Wertung @2: @3 s - @4 s • @1, rating @2: @3 s=• @1, Wertung @2: @3 s Mining times:=Grabezeiten: @@ -76,9 +76,8 @@ This block connects to these blocks: @1.=Dieser Block verbindet sich mit den fol This block connects to this block: @1.=Dieser Block verbindet sich mit diesem Block: @1. This block decreases your breath and causes a drowning damage of @1 hit point every 2 seconds.=Dieser Block reduziert Ihren Atem und verursacht beim Ertrinken einen Schaden von @1 Trefferpunkt alle 2 Sekunden. This block decreases your breath and causes a drowning damage of @1 hit points every 2 seconds.=Dieser Block reduziert Ihren Atem und verursacht beim Ertrinken einen Schaden von @1 Trefferpunkten alle 2 Sekunden. -This block glows faintly. It is barely noticable.=Dieser Block leuchtet schwach. Es ist kaum merklich. This block is a light source with a light level of @1.=Dieser Block ist eine Lichtquelle mit einer Helligkeitsstufe von @1. -This block glows faintly with a light level of @1.=Dieser Block leuchtet schwach mit einer Helligkeitsstufe von @1. +This block glows faintly with a light level of @1.=Dieser Block leuchtet schwach mit einer Helligkeitsstufe von @1. This block is a building block for creating various buildings.=Dieser Block ist für den Bau diverser Gebäude vorgesehen. This block is a liquid with these properties:=Dieser Block ist eine Flüssigkeit mit folgenden Eigenschaften: This block is affected by gravity and can fall.=Dieser Block wird von der Schwerkraft beeinflusst und kann fallen. diff --git a/mods/HELP/doc/doc_items/locale/doc_items.fr.tr b/mods/HELP/doc/doc_items/locale/doc_items.fr.tr index 5d655404d..824ceeeba 100644 --- a/mods/HELP/doc/doc_items/locale/doc_items.fr.tr +++ b/mods/HELP/doc/doc_items/locale/doc_items.fr.tr @@ -2,7 +2,7 @@ Using it as fuel turns it into: @1.=L'utiliser comme combustible le transforme en : @1. @1 seconds=@1 secondes # Item count times item name -%@1×@2=%@1×@ +@1×@2=@1×@ # Itemname (25%) @1 (@2%)=@1 (@2%) # Itemname (<0.5%) diff --git a/mods/HELP/doc/doc_items/locale/doc_items.pl.tr b/mods/HELP/doc/doc_items/locale/doc_items.pl.tr new file mode 100644 index 000000000..8ff945368 --- /dev/null +++ b/mods/HELP/doc/doc_items/locale/doc_items.pl.tr @@ -0,0 +1,144 @@ +# textdomain:doc_items +Using it as fuel turns it into: @1.=Używanie tego jako paliwa zamienia to w: @1. +@1 seconds=@1 sekund(y) +# Item count times item name +@1×@2=@1×@2 +# Itemname (25%) +@1 (@2%)=@1 (@2%) +# Itemname (<0.5%) +@1 (<0.5%)=@1 (<0.5%) +# Itemname (ca. 25%) +@1 (ca. @2%)=@1 (ca. @2%) +# List separator (e.g. “one, two, three”) +, =, +# Final list separator (e.g. “One, two and three”) + and = oraz +1 second=1 sekunda +A transparent block, basically empty space. It is usually left behind after digging something.=Przezroczysty blok, praktycznie puste miejsce. Jest zwykle pozostawiany po wykopaniu czegoś. +Air=Powietrze +Blocks=Bloki +Building another block at this block will place it inside and replace it.=Postawienie innego bloku w tym bloku postawi ich wewnątrz i zastąpi go. +Building this block is completely silent.=Budowanie tego bloku jest bezgłośne. +Collidable: @1=Zderzalne: @1 +Description: @1=Opis: @1 +Falling blocks can go through this block; they destroy it when doing so.=Spadające bloki mogą przelecieć przez ten blok; niszczą go gdy tak robią. +Full punch interval: @1 s=Pełny okres uderzenia: @1 s +Hand=Ręka +Hold it in your hand, then leftclick to eat it.=Weź to do ręki, następnie kliknij lewy przycisk by je zjeść. +Hold it in your hand, then leftclick to eat it. But why would you want to do this?=Weź to do ręki, następnie kliknij lewy przycisk by je zjeść. Ale dlaczego chciałabyś to zrobić? +Item reference of all wieldable tools and weapons=Informacje na temat wszystkich narzędzi i broni możliwych do trzymania. +Item reference of blocks and other things which are capable of occupying space=Informacje na temat wszystkich bloków i innych obiektów, które są w stanie zajmować miejsce +Item reference of items which are neither blocks, tools or weapons (esp. crafting items)=Informacje na temat wszystkich rzeczy, które nie są blokami, narzędziami i broniami (głównie materiały do wytwarzania) +Liquids can flow into this block and destroy it.=Płyny mogą wpłynąć na ten blok i go zniszczyć. +Maximum stack size: @1=Maksymalny rozmiar grupy: @1 +Mining level: @1=Poziom kopania: @1 +Mining ratings:=Klasyfikacja kopania +• @1, rating @2: @3 s - @4 s=• @1, klasyfikacja @2: @3 s - @4 s +• @1, rating @2: @3 s=• @1, klasyfikacja @2: @3 s +Mining times:=Czas wykopania: +Mining this block is completely silent.=Wykopanie tego bloku jet bezgłośne. +Miscellaneous items=Różne rzeczy +No=Nie +Pointable: No=Wskazywalne: Nie +Pointable: Only by special items=Wskazywalne: Tylko przez specjalne przedmioty +Pointable: Yes=Wskazywalne: Tak +Punches with this block don't work as usual; melee combat and mining are either not possible or work differently.=Uderzanie tym blokiem nie działa tak jak zwykle; walka wręcz i kopanie są niemożliwe lub działają inaczej. +Punches with this item don't work as usual; melee combat and mining are either not possible or work differently.=Uderzanie tym przedmiotem nie działa tak jak zwykle; walka wręcz i kopanie są niemożliwe lub działają inaczej. +Punches with this tool don't work as usual; melee combat and mining are either not possible or work differently.=Uderzanie tym narzędziem nie działa tak jak zwykle; walka wręcz i kopanie są niemożliwe lub działają inaczej. +Range: @1=Zasięg: @1 +# Range: () +Range: @1 (@2)=Zasięg @1 (@2) +Range: 4=Zasięg: 4 +# Rating used for digging times +Rating @1=Klasyfikacja @1 +# @1 is minimal rating, @2 is maximum rating +Rating @1-@2=Klasyfikacja od @1 do @2 +The fall damage on this block is increased by @1%.=Obrażenia od upadku na tym bloku są zwiększone o @1%. +The fall damage on this block is reduced by @1%.=Obrażenia od upadku na tym bloku są zmniejszone o @1%. +This block allows light to propagate with a small loss of brightness, and sunlight can even go through losslessly.=Ten blok przepuszcza światło z niewielką stratą jasności, a światło słoneczne przepuszcza bezstratnie. +This block allows light to propagate with a small loss of brightness.=Ten blok przepuszcza światło z niewielką stratą jasności. +This block allows sunlight to propagate without loss in brightness.=Ten blok przepuszcza światło słoneczne bez straty jasności. +This block belongs to the @1 group.=Ten blok należy do grupy @1. +This block belongs to these groups: @1.=Ten blok należy do tych grup: @1. +This block can be climbed.=Na ten blok można się wspiąć. +This block can be destroyed by any mining tool immediately.=Ten blok może być zniszczony przez dowolne narzędzie do kopania natychmiastowo. +This block can be destroyed by any mining tool in half a second.=Ten blok może być zniszczony przez dowolne narzędzie do kopania w pół sekundy. +This block can be mined by any mining tool immediately.=Ten blok może być wykopany przez dowolne narzędzie do kopania natychmiastowo. +This block can be mined by any mining tool in half a second.=Ten blok może być wykopany przez dowolne narzędzie do kopania w pół sekundy. +This block can be mined by mining tools which match any of the following mining ratings and its toughness level.=Ten blok może zostać wykopany przez narzędzia do kopania, które pasują do którychkolwiek klasyfikacji kopania i poziomu twardości. +This block can not be destroyed by ordinary mining tools.=Ten blok nie może być zniszczony przez typowe narzędzia do kopania. +This block can not be mined by ordinary mining tools.=Ten blok nie może być wykopany przez typowe narzędzia do kopania. +This block can serve as a smelting fuel with a burning time of @1.=Ten blok może być wykorzystany jako paliwo do przetapiania z czasem palenia @1. +This block causes a damage of @1 hit point per second.=Ten blok zadaje @1 obrażenie na sekundę. +This block causes a damage of @1 hit points per second.=Ten blok zadaje @1 obrażeń na sekundę. +This block connects to blocks of the @1 group.=Ten blok łączy się do bloków z grupy @1. +This block connects to blocks of the following groups: @1.=Ten blok łączy się z blokami z następujących grup: @1. +This block connects to these blocks: @1.=Ten blok łączy się z tymi blokami: @1. +This block connects to this block: @1.=Ten blok łączy się z tym blokiem: @1. +This block decreases your breath and causes a drowning damage of @1 hit point every 2 seconds.=Ten blok zmniejsza twój tlen i zadaje @1 obrażenie co 2 sekundy. +This block decreases your breath and causes a drowning damage of @1 hit points every 2 seconds.=Ten blok zmniejsza twój tlen i zadaje @1 obrażeń co 2 sekundy. +This block is a light source with a light level of @1.=Ten blok jest źródłem światła z poziomem oświetlenia @1. +This block glows faintly with a light level of @1.=Ten blok ma poświatę o poziomie oświetlenia @1. +This block is a building block for creating various buildings.=Ten blok jest blokiem budowlanym do tworzenia różnych budowli. +This block is a liquid with these properties:=Ten blok jest płynem z tymi własnościami: +This block is affected by gravity and can fall.=Na ten blok wpływa grawitacja i może upaść. +This block is completely silent when mined or built.=Ten blok jest bezgłośny przy kopaniu i budowaniu. +This block is completely silent when walked on, mined or built.=Ten blok jest bezgłośny gdy się po nim chodzi, kopie lub buduje. +This block is destroyed when a falling block ends up inside it.=Ten blok jest zniszczony gdy upadający blok upadnie w niego. +This block negates all fall damage.=Ten blok neguje wszystkie obrażenia od upadku. +This block points to liquids.=Ten blok wskazuje na płyny. +This block will drop as an item when a falling block ends up inside it.=Ten blok wypadnie jako przedmiot gdy blok upadnie na niego. +This block will drop as an item when it is not attached to a surrounding block.=Ten blok wypadnie jako przedmiot gdy nie jest połączony z sąsiadującym blokiem. +This block will drop as an item when no collidable block is below it.=Ten blok wypadnie jako przedmiot gdy nie będzie pod nim zderzalnego bloku. +This block will drop the following items when mined: @1.=Z tego bloku wypadną następujące przedmioty po wykopaniu: @1. +This block will drop the following when mined: @1×@2.=Z tego bloku wypadną następujące rzeczy po wykopaniu: @1×@2. +This block will drop the following when mined: @1.=Z tego bloku wypadną następujące rzeczy po wykopaniu: @1. +This block will drop the following when mined: @1.=Z tego bloku wypadną następujące rzeczy po wykopaniu: @1. +This block will make you bounce off with an elasticity of @1%.=Od tego bloku odbijesz się z elastycznością @1%. +This block will randomly drop one of the following when mined: @1.=Z tego bloku wypadnie losowo jedna z następujących rzeczy po wykopaniu: @1. +This block will randomly drop up to @1 drops of the following possible drops when mined: @2.=Z tego bloku losowo wypadnie maksymalnie @1 rzeczy spośród tego zbioru: @2. +This block won't drop anything when mined.=Z tego bloku nic nie wypadnie po wykopaniu. +This is a decorational block.=Ten blok jest dekoracyjny. +This is a melee weapon which deals damage by punching.=To jest broń do walki wręcz, która zadaje obrażenia przy uderzaniu. +Maximum damage per hit:=Maksymalne obrażenia przy uderzeniu: +This item belongs to the @1 group.=Ten przedmiot należy do grupy @1. +This item belongs to these groups: @1.=Ten przedmiot należy do tych grup: @1. +This item can serve as a smelting fuel with a burning time of @1.=Ten przedmiot może być wykorzystany jako paliwo do przetapiania z czasem palenia @1. +This item is primarily used for crafting other items.=Ten przedmiot jest głównie wykorzystywany do wytwarzania innych przedmiotów. +This item points to liquids.=Ten przedmiot wskazuje na płyny. +This tool belongs to the @1 group.=To narzędzie należy do grupy @1. +This tool belongs to these groups: @1.=To narzędzie należy do tych grup: @1. +This tool can serve as a smelting fuel with a burning time of @1.=To narzędzie może być wykorzystany jako paliwo do przetapiania z czasem palenia @1. +This tool is capable of mining.=Tym narzędziem można kopać. +Maximum toughness levels:=Maksymalna poziom twardości: +This tool points to liquids.=To narzędzie wskazuje na płyny. +Tools and weapons=Narzędzia i bronie +Unknown Node=Nieznany węzeł +Usage help: @1=Sposób użycia: @1 +Walking on this block is completely silent.=Chodzenie po tym bloku jest bezgłośne. +Whenever you are not wielding any item, you use the hand which acts as a tool with its own capabilities. When you are wielding an item which is not a mining tool or a weapon it will behave as if it would be the hand.=Gdy nie trzymasz żadnego przedmiotu używasz swojej ręki która działa jak narzędzie ze swoimi własnościami. Gdy trzymasz przedmiot, który nie jest narzędziem do kopania lub bronią, będzie się ono zachowywało jakby było ręką. +Yes=Tak +You can not jump while standing on this block.=Nie możesz skakać gdy stoisz na tym bloku. +any level=dowolny poziom +level 0=poziom 0 +level 0-@1=poziom 0-@1 +unknown=nieznane +Unknown item (@1)=Nieznany przedmiot (@1) +• @1: @2=• @1: @2 +• @1: @2 HP=• @1: @2 HP +• @1: @2, @3=• @1: @2, @3 +• Flowing range: @1=• Zasięg płynięcia: @1 +• No flowing=• Brak płynięcia +• Not renewable=• Nieodnawialne +• Renewable=• Odnawialne +• Viscosity: @1=• Lepkość: @1 +Itemstring: "@1"=Id przedmiotu: "@1" +Durability: @1 uses=Wytrzymałość: @1 użyć +Durability: @1=Wytrzymałość: @1 +Mining durability:=Wytrzymałość kopania: +• @1, level @2: @3 uses=• @1, poziom @2: @3 użyć +• @1, level @2: Unlimited=• @1, poziom @2: Nielimitowane +This block's rotation is affected by the way you place it: Place it on the floor or ceiling for a vertical orientation; place it at the side for a horizontal orientation. Sneaking while placing it leads to a perpendicular orientation instead.=Na rotację tego bloku wpływa sposób postawienia: Postaw go na podłodze lub suficie aby uzyskać pionową orientację; postaw go na boku by uzyskać poziomą orientację. Skradanie się podczas postawiania sprawia, że zostanie postawiony prostopadle. +Toughness level: @1=Poziom twardości: @1 +This block is slippery.=Ten blok jest śliski. + diff --git a/mods/HELP/doc/doc_items/locale/template.txt b/mods/HELP/doc/doc_items/locale/template.txt index 484e40ec1..77f107863 100644 --- a/mods/HELP/doc/doc_items/locale/template.txt +++ b/mods/HELP/doc/doc_items/locale/template.txt @@ -2,7 +2,7 @@ Using it as fuel turns it into: @1.= @1 seconds= # Item count times item name -%@1×@2= +@1×@2= # Itemname (25%) @1 (@2%)= # Itemname (<0.5%) diff --git a/mods/HELP/doc/doc_items/mod.conf b/mods/HELP/doc/doc_items/mod.conf index f1c0fbbc5..65d6e8366 100644 --- a/mods/HELP/doc/doc_items/mod.conf +++ b/mods/HELP/doc/doc_items/mod.conf @@ -1,3 +1,4 @@ name = doc_items -depends = doc +author = Wuzzy description = Adds automatically generated help texts for items. +depends = doc 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/doc/modpack.conf b/mods/HELP/doc/modpack.conf index 5e2f43080..f1268957d 100644 --- a/mods/HELP/doc/modpack.conf +++ b/mods/HELP/doc/modpack.conf @@ -1 +1,2 @@ name = doc +description = Provides an extensible in-game help with texts about gameplay basics (such a crafting), items and advanced usage. diff --git a/mods/HELP/mcl_craftguide/depends.txt b/mods/HELP/mcl_craftguide/depends.txt deleted file mode 100644 index 5bff11578..000000000 --- a/mods/HELP/mcl_craftguide/depends.txt +++ /dev/null @@ -1,6 +0,0 @@ -mcl_core -mcl_compass -mcl_clock -doc -sfinv? -sfinv_buttons? diff --git a/mods/HELP/mcl_craftguide/description.txt b/mods/HELP/mcl_craftguide/description.txt deleted file mode 100644 index b5c05403c..000000000 --- a/mods/HELP/mcl_craftguide/description.txt +++ /dev/null @@ -1,2 +0,0 @@ -The most comprehensive Crafting Guide -on Minetest. diff --git a/mods/HELP/mcl_craftguide/init.lua b/mods/HELP/mcl_craftguide/init.lua index eb98bcce0..3bc7b705a 100644 --- a/mods/HELP/mcl_craftguide/init.lua +++ b/mods/HELP/mcl_craftguide/init.lua @@ -33,7 +33,6 @@ local fmt, find, gmatch, match, sub, split, lower = local min, max, floor, ceil = math.min, math.max, math.floor, math.ceil local pairs, next, unpack = pairs, next, unpack -local vec_add, vec_mul = vector.add, vector.multiply local DEFAULT_SIZE = 10 local MIN_LIMIT, MAX_LIMIT = 10, 12 @@ -156,7 +155,7 @@ end local custom_crafts, craft_types = {}, {} function mcl_craftguide.register_craft_type(name, def) - local func = "mcl_craftguide.register_craft_guide(): " + local func = "mcl_craftguide.register_craft_type(): " assert(name, func .. "'name' field missing") assert(def.description, func .. "'description' field missing") assert(def.icon, func .. "'icon' field missing") @@ -410,7 +409,7 @@ local function get_tooltip(item, groups, cooktime, burntime) local tooltip if groups then - local gcol = "#FFAAFF" + local gcol = mcl_colors.LIGHT_PURPLE if #groups == 1 then local g = group_names[groups[1]] local groupstr @@ -418,9 +417,9 @@ local function get_tooltip(item, groups, cooktime, burntime) -- and just print the normal item name without special formatting if groups[1] == "compass" or groups[1] == "clock" then groupstr = reg_items[item].description - elseif group_names[groups[1]] then + elseif g then -- Use the special group name string - groupstr = minetest.colorize(gcol, group_names[groups[1]]) + groupstr = minetest.colorize(gcol, g) else --[[ Fallback: Generic group explanation: This always works, but the internally used group name (which @@ -446,12 +445,12 @@ local function get_tooltip(item, groups, cooktime, burntime) if not groups and cooktime then tooltip = tooltip .. "\n" .. - S("Cooking time: @1", colorize("yellow", cooktime)) + S("Cooking time: @1", colorize(mcl_colors.YELLOW, cooktime)) end if not groups and burntime then tooltip = tooltip .. "\n" .. - S("Burning time: @1", colorize("yellow", burntime)) + S("Burning time: @1", colorize(mcl_colors.YELLOW, burntime)) end return fmt(FMT.tooltip, item, ESC(tooltip)) @@ -546,7 +545,7 @@ local function get_recipe_fs(data, iY) if custom_recipe or shapeless or recipe.type == "cooking" then local icon = custom_recipe and custom_recipe.icon or - shapeless and "shapeless" or "furnace" + shapeless and "shapeless" or "furnace" if recipe.type == "cooking" then icon = "default_furnace_front_active.png" @@ -639,7 +638,7 @@ local function make_formspec(name) fs[#fs + 1] = "background9[1,1;1,1;mcl_base_textures_background9.png;true;7]" fs[#fs + 1] = fmt([[ tooltip[size_inc;%s] - tooltip[size_dec;%s] ]], + tooltip[size_dec;%s] ]], ESC(S("Increase window size")), ESC(S("Decrease window size"))) @@ -657,9 +656,9 @@ local function make_formspec(name) ]] fs[#fs + 1] = fmt([[ tooltip[search;%s] - tooltip[clear;%s] - tooltip[prev;%s] - tooltip[next;%s] ]], + tooltip[clear;%s] + tooltip[prev;%s] + tooltip[next;%s] ]], ESC(S("Search")), ESC(S("Reset")), ESC(S("Previous page")), @@ -727,7 +726,7 @@ local function make_formspec(name) return concat(fs) end -local show_fs = function(player, name) +local function show_fs(player, name) if sfinv_only then sfinv.set_player_inventory_formspec(player) else @@ -1001,7 +1000,7 @@ else end end) - local function on_use(user) + --[[local function on_use(user) local name = user:get_player_name() if next(recipe_filters) then @@ -1011,7 +1010,7 @@ else end show_formspec(name, "mcl_craftguide", make_formspec(name)) - end + end]] end @@ -1098,7 +1097,6 @@ if progressive_mode then local name = player:get_player_name() init_data(name) local meta = player:get_meta() - local name = player:get_player_name() local data = player_data[name] data.inv_items = deserialize(meta:get_string("inv_items")) or {} @@ -1144,7 +1142,7 @@ else end function mcl_craftguide.show(name) - local player = minetest.get_player_by_name(name) + local player = get_player_by_name(name) if next(recipe_filters) then local data = player_data[name] data.items_raw = get_filtered_items(player) diff --git a/mods/HELP/mcl_craftguide/locale/mcl_craftguide.pl.tr b/mods/HELP/mcl_craftguide/locale/mcl_craftguide.pl.tr new file mode 100644 index 000000000..064fd90d3 --- /dev/null +++ b/mods/HELP/mcl_craftguide/locale/mcl_craftguide.pl.tr @@ -0,0 +1,38 @@ +# textdomain: mcl_craftguide +Any shulker box=Dowolna skrzynia shulkerowa +Any wool=Dowolna wełna +Any wood planks=Dowolne deski +Any wood=Dowolne drewno +Any sand=Dowolny piasek +Any normal sandstone=Dowolny zwykły piaskowiec +Any red sandstone=Dowolny czerwony piaskowiec +Any carpet=Dowolny dywan +Any dye=Dowolna farba +Any water bucket=Dowolne wiadro wody +Any flower=Dowolny kwiat +Any mushroom=Dowolny grzyb +Any wooden slab=Dowolny drewniana płyta +Any wooden stairs=Dowolne drewniane schody +Any coal=Dowolny węgiel +Any kind of quartz block=Dowolny typ bloku kwarcu +Any kind of purpur block=Dowolny typ bloku purpury +Any stone bricks=Dowolne kamienne cegły +Any stick=Dowolny patyk +Any item belonging to the @1 group=Dowolny przedmiot z grupy @1 +Any item belonging to the groups: @1=Dowolny przedmiot należący do grup: @1 +Search=Wyszukaj +Reset=Zresetuj +Previous page=Poprzednia strona +Next page=Następna strona +Usage @1 of @2=Użycie @1 z @2 +Recipe @1 of @2=Receptura @1 z @2 +Burning time: @1=Czas wypalenia: @1 +Cooking time: @1=Czas pieczenia: @1 +Recipe is too big to be displayed (@1×@2)=Receptura jest zbyt długa do wyświetlenia (@1×@2) +Shapeless=Bezkształtne +Cooking=Pieczenie +Increase window size=Zwiększ rozmiar okna +Decrease window size=Zmniejsz rozmiar okna +No item to show=Brak przedmiotów do pokazania +Collect items to reveal more recipes=Zbierz przedmioty by odkryć więcej receptur + diff --git a/mods/HELP/mcl_craftguide/mod.conf b/mods/HELP/mcl_craftguide/mod.conf index d51c45413..ce99c0e32 100644 --- a/mods/HELP/mcl_craftguide/mod.conf +++ b/mods/HELP/mcl_craftguide/mod.conf @@ -1 +1,5 @@ name = mcl_craftguide +author = kilbith +description = The most comprehensive Crafting Guide on Minetest. +depends = mcl_core, mcl_compass, mcl_clock, doc, mcl_colors +optional_depends = sfinv, sfinv_buttons 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 zVoOIv0RI600RN!9r;`8x00(qQO+^Rb0~;0`0t)*0-v9uB07*naRCwC#{bzWl*L4_* zuC@1m+t&-q02oXshr>D)J0(g~w`E!GlI29UoU16duI>0ZadMoTN3qY3T-%AA^ElVX zR!*GwNY1frMW$t0y-=h?v6mr-(+g(M+lQ~dZI^X_Y~Uj}GXOqdI23b(_2{86z+2Y4 z_FikRzVItw`3kH6l2I&(GP~oH<{Ey!q>n!uJo4G+ z-+ue^&p+?FF43hI0D#uIzrTNadOC_C#u)Sph@{&79uod+!_~ye$R|GgFZ21rhd%V7 zBuOrR6k{w5!~5>LZ*g&PVPQcCarr}yF_}z;b3Q&k?l{gB5xz1uq$MxJnVp@8mO2g! zuMi*ild)`}&vV5UpQDuO>+3ss@ZganM?BBF;x)#Y{{H@p7cVNM5V2?C0Fr43`wVkt z8lExWIB;m6tHQRPJ_f>p%ie{ENs_$fEpNGa@nXB(zVbqlQcj=rc7aJXq3^)aaWmJX zKo|f5K!7WJ0wSi0hDz+lQRn2Onpo7XgZBN1U_Xff7{aZ)fQS%)2`_HVj$|7g($}fBqZ-&+fW;es6AJTJ0L|?8rT_l$@WXTvo}y&G{&&3T=-7jYm{!hQ~leoIBhfYWA8IO zIeY&-_nbO?I!)6nE`-*)TrPLQaA9i7Tz6f*zn>ekq_uIJbAR!dvJ>X3)q6kkvvDdl zLjBx@i!UC%?k7LMIeY4hUwQIBe(KJD`pa+q*`Im*-~AuX9fx<`d?+8M*<4l${;l8r z5BT7N4=#T&AORC5%y!OZd>pBSjYVNKYk#p68^bQ45$C+sYCZk* z(|6x}_Z6`xA|b@g%*@W6J2RP#*1CtSMg#}|giawkjVc~=N%vaul4%Ur#|(m zD=wR5uty$wWME)mU|>Kgb@`(iW1UV%DYa+Mo-|E+5DFFAY1mRddiv#(TWV{sI z7WvmTYBOKE{|J2)_BvZ|>i}KcCMVW3KRIbR0S7Mi)>Bhfyr) z)?Iu@iA56EN62+>s-|DOAaC61?CR%B4zK&WKqA}scXzz50Bt#)d(zop|W;{Mz z%``gdyD!%`ODfrc>q`$D8Gnpr8)?EynM`|N>6brLfAbJDLwNYv(%GZAIv)7iw;s9q z<{Mr23gXgkzC||8erCrX7u6u4~_Pw9{ts{T`)w!3Ci9-JVkN=|}lQB{X#+a3w3?u;;O#2>Z z9Ao85V9i!`;-ZRUUpUAZ1Gtn48DpGt$8k94LWs4P&|ZLujInk0837;>A>*Wwi~(>R z#yC&4!;m343yTZwR*Q4a7`vkEWQ;kEV_!!^m%PhL4SPbe6lXEW!Vff4EquqldRrKtIba$2CHxhsC zlplv3;W)X1=hEzb@A}XWy``0v|Ml_XJ1k$5DaimNg+P1NMt>|cPKqKZJs)7JeKlmQxs>xNJMt|bGo10#b+J* zbT3<1JthOF!6_vdUENY7M*3oh)AwJNMjLcIf6twurI9Hh5?zYVYGl@U5fRwm8*Pj- zn5JoUU}tf-MDh7f6caMW3;1%RfF=Rv}+gh-8+8#{g5Po_pg5Y-v9T<{d{h|Ju8ecf+7Utxo7|w;6j~3Dg0bk zpu~*e*^ZG)D~5O}Ze1pX9^i5gxzZ*;L8*Y);o9Yl6SgBrQs92haey)8p0^I?bYHO{ zGF=YYNc|&DkpStrOaKDFe4P^G`Z-r%3c?{WV2IGH^NLLoXFZgG35pS7mm8Ne0niA6 zA&5+#3?X++ngD4)25T6fJrV~10gwx~HP`%!-}o2z{n#)4n~&Um`q z(}|4`xg9yibPFnri?v1}BW7E{y@zMs`QD%VZ{K`j=E9TBf~&4;`k6p4WewpS3yU{n zc20VgVooG2jx0*`BhTa>dU(3CbS_%-@5wzv7axL zijCR16Myobn-f!x>tqUrvrF}fQb7<=NsV(f1ErKPXhrbsNfnd|&d@>9DG{ke0pePs ziZ+sDmt48dWeCQA6PS9S7R!0cx{CAk`Lob$tIY0wjC(*vYqjAkde~&WTucCnpeyo% z;9!Zf(8Q-t$ZTJqGqjg<3PhwO0K(cwoL#xA#)lBd0MD95Pc{0A#utV$c={B@DFwT) zM{6aTHIeC^I0yt}IBHjb??M{4+l^-2T8vv@RMQy@1ZPQVuUvMwI0A?efjpNR*$x{3 zJ}?eR8`_Opt6mG+E#WvsRIKzf&XcgyX)d@i7}L{Y5s)FOw-e>J+<{`*^;w#Wle+6@ z#^Kn>94{sJ?@n)d3w-9WbbOAFHDxyNT*nCk+fk?8pk_M}nOw#<^`+7mzshIFPM1nz z-=6-Zx)MQQ&t303^6=lvNUnI1HdrQP*lILA1m6#s=Pi8U%egllzV6Q3{aiLetd)wv zVvRDHu+=*IU;i85Jv#cM?|aKX{zaaq$N%gzOUF;T1N~_xXw~Z`iCZ^Z_nx2m389Ed z;}~W*lgN-W^0*WrwM8pqX>uvfTiL)-|mN-lUQzXE+fRb@y zh%QTr8&U}X1F-ngIKx9#<$&qCCHg+x1kxb>-Lo!5lte{#90>$72!IGYhfT~!U;n+kMGXc7^CN>pxQ zX;+0GTfp3lwZWV>ADg6-@rDN7Mr)zAsGd>4o-WF{t24 zQHe%*P|oLLji)E0S{O}U;QUtQ7V0V?$6?UpS|LcK`vxlg_uV}`GY80~r)Ojk^k*_- zU;3Kod&PV2+IQ>CezkJ(d*7!ho~_q~BQn)Wn~V1B>~)84!*c27pZEYyPA)zB!pXn- zd}@ry>G|RQRBQU~iwOgRZjO)aH!?x3);R;Wyw5JXn21oKlcP?-%*Dnj`*K&Gdghdx zS}-n3Hna~5c~S`&0~_geSE-I#E;qytvOc|tpc%sGK-!Av`$whA6a+rsaX`zcN89iV%aP+w++RZu_PNO!jwJz@3hloI6jBnW01Y8hA)ASkpdH0-u&Z+Y z1I;6UGdVN2I9x4xY)3Uanx}d*Y0f0iBzZzr%sTz0-26y*N~%JkxOWGas^Gf(p%ai{{{dbyzc)70M4PY1oyuq_`~1+|4vU|a6R7-vJ)51OkF&m%@xMa zpE5>&`)~hz>SEjVfO7x@vFmMCauEOu0cLDN!D=zrhBe!ByWC@hpk=(!Y2GBnp1k)B zWt#P<9V^e_dv;`t1*g?E?GOuD=DCh2hve)fn-)54n$2mRFp?|CNxp8o1LLeAW3C2h5)kGwRr zYv=q^&mDT}oBMCMDQb1@`pD1Do;=;GEhXRh_QcVb%R6_rGr`oagTMv{ zmv^~Q)WeQny?c7W{tBBO$q?rtOR(T^EcjAzb+(OTQ`#RaP_}A}0@5o7PEW?emQO;2 z|;n+FDTo(s+7^46PjNUA9dcSft2U=ttOvL4OwVg? zN11}WF?tnoUQ1*EfQ$q!jZsc%cmIvy6OVlJUOUx|Fjb_uc1Nm^^^`GAlE?%7Sx*GdN9Sf=%8bt!cE=ZX>>YB9 zoS31X_@Q|0g|RQb*hZsWm%EPWkvzr_XKZ|7VbBpyskrd+u{er{@4Gv3oEzTvo-~S% zJ^UyE6e{I#u{QVI^J%TNaO7w{2o}Hp)RTYxH@E(yk7RcYsENt(xw$Y+@BP>>I=&}3 zXC6-tnDkXz&1=83moXux#0i)L9+NA8gpiDJhbf;+W~5RnlA<2emDR7?j~3 z)9ZorDgtfZ?6Lcdq3-8PnwZDcj%?Bl;iWNfS=xq@t_&OD66qDqWz+j?!;^V6yCRSV zUg8ZO6G^;32wkDiPT4;*S=ft+WIZuGGu0*dtPhuXYYEUnS>bhQc-Bb=GI6a9FD-)0 z(gsvjIY8zS8Q3audVyDnL())`&H92&63fcKj$EPCX*au=E2##CMqSr4MhBT}xl%0_ zAYTf!(m*l-Wpwfi6RwgPo7y>uBqeK~AM|x{zSh#Lk@W&MBxNWN7$@Sb_s;712fwEl z2KMgNt<0HYPZ_P=@y^AU26$vpf+=o~! ztEcRe`y>vu6^AJe{O!XJdQp?OQ>3~aFa7|D`om^AmTp|$wRP2l*Xyd?N z{PFKP4*$SE_$2@!GOp{-PG0=h7eAZL7m_$8ozyy9S8i-GB7s1L(4$wON?X7Oh%~@V z+UEcb!kn9t6VZveX6!IBMk|!_HSf;b%=6!$Q?ogpq*^ggIDxMpxIKDq%#S*<(W&`b zO@*OSCW;dfeyNOm4|MkXId5Ug%K+jfBc{Q(=(5JckG$xAPCgl-2S(}ZTCCgHua^irPH%x z&pf;5E%&+AvT+@uOM7Tb?6>8mMSx*vj-%<%OJu4Y(W6Hc_&MG`po}!k0U2%X#JSS$ z>Fr{pftPtJz_^-CGD0CUCnrpt=rq5JfB^vM^mQYSA>e36#EiqJFRu_yy=@+TL4sfA z{S`%$&;=D=JK}Wz`l>65G|K=0ARjyRI7dk05C{wz0BkJHpLqUMz68bqBha~F%I;Gp zSw8g00GPFq*$n0ogGj+7Y|wL)J+zP>;BnFyC|YcYpZn4I??2~0`M55>vmtz@J1pY^ z8TaVIuPOK=6!}z|A{RMCWuU(*jvaTaS$^YQwG}YXbi%ONY(4k* z(_SVxeAnT7e&Oeu^(GM^V{V}kBR0;QE0jy&Vr_6_c<(R&W0$CZ|DNV|A0PWa{?FR% zT)oxuUDx;hQ?qk2425QXk8Xx_mUgojdzf-Yt}u*YgwW`a%bD?g101kdQ{ifm>F!8F zz=ifPahZ07;he&R+99#52gq%<##It$GhQnIFg~V&fy)i&1VD`rc@8(eZwv>z=ESks zUV1UvL?uO)TQ$&M{a=4zf6agr`<|+7G40~== z^cp4POl!@G7p4-am}&Z`h0;<8QSf*!{c9pH3LGI~VDp-)S$9{K!03A9O|%1TKoM{> zf)P&_E0Rf^lhy*7Fq?g@&n{YO4 z8JSi17$P9XVLAU3Ig(&tj3$K5TF6&T9H8a=7(xU9WC(&01EY-wvpG-9<*(>5k#!vo z(dYot()_fg6%uKY)45?|5&*U$KzsFL_b#DUqW}O3xYhw+CIjuAeXX(6UL1q(YZY^) zH0KUu+;Ol{oGG^ZXH?RfIL4fC=-yo#O{l$vBm+R&07K$HHfj6vTG{n6UuH$eiK3Xo z=;_Cw7LK^%&ci?Szy3xzzxeQ<{onaQp`6Wh<`BlnZmf~d`GKFtai`Y2|Kq>t z74wz;f&b?(KHF2?(1ti|4ts#9xfTFS&H|7zJkZr$hBRntFT5ILdNKE35%z|VLA{l< zlg89MM*tw1WJZne0>IUrffhF9doacTpf+Y|wn@mwX8=fQCvW<8r=(sJ;%rJnT{*#! zGyuf8TUV14wAGMx@7TRcBKMGWeA(}`<@F9^0CRzElw3J{K%P_4?95_0H#k@8L>&Xf zW?q7HGJMbQ%bH}H{FzSHMtBhb!O%*g+Sa^Qu#&lnh-oUNl#hM)iBhHfj(5HFhyT}q zws7|Rix2%B0Q$bCJWo1K%Gia4g$IA>W7U1TwbEbt;#Z?El2VEuU;J7F0{~431OyBj zhu(5|Hv~(OO`Mm=?F1(~6$WJU zL+~<$H@{~t1;&;od%d>wxxf6I{=tE}?|D<@pa0Xb$DW9rty#v8ciM0H;7`8$p1VlN zFZ}J7=4ap8JSC0%42_ZHlj=geqw~pA|aV>~r54S7UVO|1CsTJZ}6_c!wjMh3$ z(+xFJB3h^Jel<)cLX)$@Z>bB<7jhos{`}M~Wzyqw9%n=luUp1Sobz6YBc+U@X#FBM zBAT9@`rKcR4UO!$`L>(2Rs#bA2k*ZN0srQ+|NX*+i?%OBccY5ar%zucL2a9vb+#H2 zxvo1lHn!O|Dq8?VR7$PWJjU`y7={-wUc6!r^=k{ZG08f{7!f&+bMD-^-g;YHEpY&V zbH3IE7MW(VdEvr^YfT)xQUe16>uh~Q&ycIdebE{Fng_D^qL^kd(HdngU=g^IK60PuNywA)wbS2Fa!j- z`5UhVaS$=c1jd*&y>iT1ylyh@b$ikOaLByT@OeWavo(B{lYOqihivVcR^qR9?+?K3 zwhh~`4Xfd`F}^n+a=o_DO9J;B2bnh-KL67q^Mk@iSa(eq7#ISeO`eci>-CZAp~L4| zA54gwyKzH%&-&apuUFW3?&ji1gyteK19r9GOp{cb3qt}QM8%h8xfHau7`}PG$!hm6^Y36 zydVhH@ii-@I-Sm@wl5ijj5)5awbU|2#(K#hBO=CFHk-Xf(p`d2yWQSYwAS_%ZZsN7 zsZy!L80*n>K}5dq2SKpbZa_pSWvA159lTaHG?&e0uQ;us3$0dbEq}&qj!zH-zVEL? zoHR{4ozA8XLt~5(!gbv=O_fqt+?HZ+aFBsP#29lPL^r^5b?7?>H~Q4!lp5f)#smTj zjIk(+PMZQK)QA#nVqe zy?!Xn7*i^h_U_%=W1h;^z#cns9FL8Stsf)hobTGT>l&f48XwnnAAkJu^_PH%s@3YA zJ$sTQSwCaOj$;VJu-$H3ZKYT&I*wDVR)ZjrQW|5ryFx6*Y=8Rju9CT9&kQ10PG%sV z{N(O46P?+orq4H>(P@5t7FrzC6O;%x1H>Tuy6!`J?Qr zTgzmfBiE|y>k;R*0E>W9%8m?K|H?RyuMrxn-?Ex3)&VJH9LH-BXSq_(^Xm2b($W%R zY<_-zbab@8zh5a;uh(tzW~EZeWHL#T*hB^KX6L*2?Wz^C%yaTYl%~dIEMF<*GirZn zVLVRHFOHp7*H4(;S!gjZ<~5IM5Fw(Q$+Z_}E}nStroH*MKG45&sOkwyl9(gjc3riQ z-&J~kERp(|Q%8jB4(z>AD`}L1wFz-G_;ANX#K}`fT*2OTTduEK+BJ}Cham?uT=fs` zzJ7eRd3Jn$qBeK##j&A1*LnGpj3Xer1fQ!-P)6jOE2XBUrXG0UfkTH5Wipv+wQ7?v z%H?vi*_@e~sZ=UA-E`B`)YPy3>aWhu&VKf@pDmS2zVC17E&IVjx0dAxjmT>THtEk8 zGd@0UQzNZ4d*;lUQmJGY#is8rEiD~Adi2ntLqQNIrNq1U)g9q8#56U;0U4l%L~6%J zKbyN=$-TK&X7c4d(aUG>@T?vTpo2hW}&NOcB z8z~?tAasP&SFL!i8%5y*Z`vc3DHmpkE_nhI6@$n)PC4%10D-@?9|-c-0ipD{tLhG3t<@c_xHQ5Ym9LmM=6!2sq4C~>ms5Rxk~pqDO;_U=Xu>Lv)QbaG6;e+P225urBV?L-83Zt1Vki* z2wWf$C`CzXNOSFE4p!3&H;+xfu$Zb-{N5%NJ%}w2T@4d5;pim1aO%jOq1=Zb9E_#B zao^6N9k-k~eQsuMF7SP03^K+!9~$T{JI?sz!qNN#8&EM6q1W5A9cJ3@cOB zw#tMA$hhM*CQo)+t@q#4uar~C>IZJWFN~5GUp{81zWH9Pw9W+n$c~|f#l^v*cf+nd zo;P#DsQ<#*b92q4f8R}vJ7#5I#-@n#N^d1Z0BAOwqobog^;17pDwPHX1{#e$=5a(epgt_tP}B^%iz`u9VUmCe~j%JUl!z zGvj$)k|Y8c2!UZjNZ=s=ftG{}kRu}?)LKC%;0D}#cPq~|-#znGJ62EY2NLiEsI4&} zGEQ2~oqDNS3V!+>yRyD_V6;@Lx7uNN>fD7wKD%q@t!K|)T&g$2Fl2}`2#C0M_ijX7 zs4c$lft%W)Eak^)E%o@3@0SOMgX*YJ>6Rq|6K*(nzFAv%$K4~vZ1K?E0Vz`{)rE;E z#@OLo4t2ul#n<=eDcX>pMADaC|q+UBtp+i&z+MOFQVrG0Hvva+ig6br^_4x-S2&a zWHQi}+74LcZ9$eXrd%!yAv&E-qtR%!TAcGtCKHBX7>2oA&g!DwX_i`RtE#kGEnx^i z13Cb-+?j59#tAO}&oL+r7$hzj8FtUG;fUGs?hEcH;*;*1I#G7uqF-_Cyg~j(jczAlD zv45m^ZmRwG3y)Vv_ONWI_feaDn zeAmcuCk!uMoXq92j_bs6JYQSfH#)k1*UpKVxqENh?>M|#9!pa7_m3VW)*K9Ve_>AM&y4q}%&vjj^uXdxrnM}sUB(>JLChb>4b&iVZO zd>qFE0|P<`TR>;Mph~GmqhW0a#+Y@L)$4W3dzDJXaU89+Rjz@s{kI=ZlO#^% zn-A~bHQYY9fB49W$!Cr{zWc^EArrmyga_oZy|^?#F*=kV*^|3|IM-itXJ=+Q?dFbw zelHWuE!1QxCBWihT?nyburG|_LLuMjgbRzcPA6`6k~BGg?9}O-Z@A&mj=>A_3%B1e z$`FGfA0_JZUw}6)oQg`uIt)mZ8n=C(ZCrRW)Q$I4n&j?G606a zAmyYq1cU-iTY)QB92?=mOEWT&kSb%C?y+Kvh=5?R(NRiDZ3355B$bZhl)EVey%w|)(euwg z?|I%m_uOOa4{botahxPcY=VLB`v4%Ngq1iXBF@ar5K*B}5JI$CEz5pNsb;fjwNL=C zI&F_phmE}^E3SNGi~zLOXbc*ojR61#zz_j|AsQlWj1?$|NUO%(P|ru)8|oyq>e$%W znAUpt?%kP8W_EVg_kG5g%`|cxr`2i+A&SMKl+rrSZ1BVLyi6uz4F}G77=}tI*L6jh zfP+@0f!JsuuvLr1!GNIzP+%mSBK1Q`PADc{b{t#t%Xlupw4nUhLzXWwAU7jPZ1AV>@u#@Nu{fKob+ z6QzyP3FnM6UMiM+FV5w&&1Ne}WgJJ-HF@UiPrq=s9Vc38-Ljd_ScY?M?_!Li$Ueu= zCVKd+&mOD)x{i^#Vb$V>OxV3ZYn{*MlO&m)oz+?o4Gnpo*XeZ9G&RPw+wC1YcAPwU z((}C0(a|srIpm&kTc){ls1AR31mdAlw5%q zYP!}jGj-!Tka6+GQHLpWWNtGy7!eWe+gZ-}&e1dT?Koq|^Y3HfErIz;PX=%p=d8j}r6vkwwms0U3hpc9n0tarBWVP9^Ea z9W-!dq`TIpkoOPm8yK5dny*KO($mu(XWX#R_tTp>a>n8)=A0kcw^tjZWNPE!6j3I~ z^ydevrPkLTJJ#qV&z){AH4|fu>oC`K-hS`CdNY0c<=I}gQFjvvA)+YqeLsq#r=Na0 zo6YXqw=bX1BjU)&h;9916Ioo>wOJRLOh#+%d7eE08;wS>ShTA0SaNs~3$2R0} z;lhRe`}a2*jasc%uh;wf`bwozr_%ud8$YyRUSrJM+}!BssNf7a18$g(ZFCrv0j)tA zAVZ{pGdj1V+7Tq0+7SgV-ZCN_Kt+@yXtOzC4*(8Af1cmGzl^|NI=j$GqIQG}4LMv@ zjaJfM@`tMa%-sCU%$hh9Z$6uQCUH==8Ulg1p5&`WRD&BZqe_t`@ zE}s&xI#RbbHefrBa)7K0dxtW6hV$npn@g=ksrcxa7L1VrhvSWVibV4G$y2#(_WA?+ z;v_M~Br-K7eeC&@O7kP9>&MQ_I1cw*M!+7tbGPd`2S@w9cjSVNn)I0JZOuZ?`+K7|Z+8Ts5iE(CT1`+f5y!8+Oz}(zitJNwNivVD4 zNZ3q|Gcty{10fNi-CpJvL?EhWmiuBUqP!5X*3uYu*<%r4QA+*FlpE;FWGtgLqX;;s z9%fF$x=h&pmdkq<+uv9ld&9(l9+}WS#~8yox8Wko_DZQ|o_S_;bkyn{H{EoTWqTon z5W?Di);>qXAP9=Z;_>6hZEj$#Ruj*hlXvWM7^8y63_+{_2y{%uKsdD6F>_5b+cXRy z0tWI87N_BF6CY@M__Y9^p zwP>gs6mxufZoXEp_f`8m&wcUORFbOCfAfTt+I59+u&@o(6(0}Py-t{Gz( z^`spWfH4FJTI(>D)lw##2{OJDOLP4EVie0(WS%-5ySHAi2SHG+R;Q<@qbM32927!W-)T0RwRTsUrp;#4aU92S3Wb8@XJbqp$K7i- z+-F2YjFAw42*#l2#V@{S>U9u;h#2Azjf}vGs53+<5nmC00+AyUfFa6o{&1}}pQbKj zhKM8n?2a7_v7yvgI~}CnmTGP0=^Cz<2%hJ;uG=kGu?dn^`gENxZ0$tfO*z#8pxtg; z-8CK^horzYjO8E5~9%D8yf&AFWe-rqlZELHl+mu90xc`h%N{EYA1eyGo3 z{N{Z_z@40*MI+;+y<)iZLQShxkSlmT<7I*XP!tQ6m&QIY%PJ`GDs+r4lh_a||QJ%gZ-f;fozQ6Y5&WRCDa! z{Z1>Si#1&fO)H{Z6+T?$E{di!DI-B300g3M4Iur&=I_^%yr1ksy`>T#4 z$#&g^i8$tnp?!`Ga&DCgZ3xaDeOA_3J55SStD+z_76&VB)Yjs(-h=f3V2trsz;PT~ zDCjtj4aZ9;Rxf)F-hK1# zLM{_aQz`KvaI!&r_fYx5bYo(^+3LhEoSM!0uF_^lf7TfNz~P+?p;`)D$Mb_sE)xhQ zPn?;4{Dm{qi!xTib&WBm7XfSaB>qiV7hLg#sd4|M=|e?C|ig4F)=n<9S}1rq)kmk3M@&YOO7Q=JWZU z>Xp#MGF?m@X4KjBx;GMR&cL5CyH2 z3t7FuX7E`Tl$BW)tUt!Oonb|Tz1)eq1;>o<`-MUwiXyu--SW#)sbqCvyCRK70}*Sr znw1w_W8P{s%j=%R#5fF>7%^CA(D_9@RA7fkot+gP$J9&+5f~?*0T3!h2%roQ2OvNV zo?yMpGa^F(H|-xdJ5f73Sy!61qqEgg_Lc+v%nO9;4>Ct^=6GWNuIl;8`muAf+L%hw zf71TD+CaWgSB{oUuzEj88jQZiWf_UqrqdX%Zl2Q*=^SzoFS`?H=y$#L4}Koix=?y*$p4KeQZ_%TY=SAb|u;+ z*5Ku&=p7kEv{4_ewbt5(AG#hOyOfzs#;T?^J2Z}C*L6M5vx$dRWLPZ*00c)M!c-Fn z$OpJoGp>M<3a=;RfE}|#07%wHoq*v03=##v02HKZb0UO@GC}TbcU0O@^wdieGqvc# zY&2JE@2KVu-!SAlzT@~KRiTvB8ZJyPMV)kXxLC@tQlZF&=Qy74%K6&j!%v;>#56u1 zRtn;d8!B%)wBz)6{bV}{`j$7!M%Y+4kpUDp>>asr-{8@+b7#-DJTEhN-F?}?Lz8D7 zhwSim*&Jh{oDCM6?VW?A7f-ZD2K=GEOn=e$GdTb!69|FoTTh-{s7I&A+xfgR-0!~q z?mb%3lgFkQ!%ex4tsw8_Kmh<_%%&#V1+x;@Mk9hC5JFg~Z=H3v4ltX|T1C_{o^=~o zt!xwW9)KZAqMg2fV=njqOi#}yiOZM)-~cydv-TQ~v8Gaw*XubU0HCGRn@gp;i^aCq z41gm}rD;d&E&*b#8De4#c2B~sdPlAGYt?T{I$NH133oY;V|~bB7~0G1jjO$;u$hw( zRw^?s*r*Z!*eoThYuFXEXRkHvt+rzA1fwWfQJf4^O0Hizadt6Q zJ!S9^fHsC9YlmT{-P|)ec;`*NFVy_p)D4Fp;2<5>&sB!by!6GsVy0T{pKo;HBt}Fs zCP`8aSt0|v{p8WP3sa4Yv!URsujIV*-o0Q#eh{En3>(1`lHr->* zvQRgX&F1FAO1BFkM4F~u5o`ZsjT5WK+Kt$|+0*q=aDbLlV^MTdE_W!K?S96y&1RR3 z4&r0&df9h*CPX7=#)L!1o@q&L(fSFOKWM9sQg$KU+Hc#fPWCP#X ztfgV4qwUQhrL?lPn+;<(84-D&7e!Im7jJz7-Ku$emJ(4M$9B7Tp4V(PyE|ijz*i?y zN}{&b1Fq{cW>)_CT&raX92+y_d3P0y9jzIFK&&a%P>LfG5l0NQmMhaY381N$O9X5f zW3w*3)oftTF>Ci)8_XVYm)~oD@I245?&T3h==mhh*fLTxN`gVOTDgX=SisyWO^#_rh>68UzES2@xHRt=KTem-D{}z@3pW_4x+6ncWj}N2xbN<&cWS% zedTO62&$!`HU!8xvR1oQZ?(IrIlb&N+nb{s(zWjF?yj}y3B<%0d)!&KkF&yK4AEr_ ziEt&NC~SWuM3NG%E2TH$T*3xcfLeaA`ySR#LZFqTnXb8bc|c-Q>Znaovi{g+vzf_c z?3re*1K;;;PE0OHfxW^k&zK=*xM7^=G-`rBTxe|Sk47RLL`o0Gy#CpXgCN# zOo9O<4os0YL5x8cdSLVW^@of@LKK);|gntw1*b zM21|~$@oG_-IsSb#TVqxaH)PnxfZu(hx+mWMk|_H2>n(Xcw(U*P0V#1rptML+rgb9 z{rPsgGuT(=oD(4eDJ3Hrrc#r!b9a09T9M5}gO#plp66LUwC7=xB-TMXH#Y|W-EtUv zuhqw_=4o|QD~xUVcGp3_F)FKaju>J~DMM6r92c>x@VvQH;)s#fPc|BwXi3V%7)0cV zEu}i$I3eP6nkHstx*}q7;K1_t8bg^3%*}1qChT%lw>EG6kFw%ywNunye~I$BS)0(N z&KqNFmUh>LW?9{aaBYyO)9JKYEgLqprDRrgc2^`#Q-KD|%El!kAn;sfv$72!AxQ&V z6XOU56$et}F)#=^1tyTprj!Z;0EQsr`|U7N%BW;f>$AhV_bi=dK$OqdhL@0%?k?$W z5Tp^LB_x*a?rxBfSdi{eQoyA{y1Tm@TpE$?_wo0C_nV^2>^?JR&YW}K*QlyM&YDgF z`MtPVau!8}-S4}l+HywcrRYm5sgXwRywui;yF8Mm`zYgn z%IJneg^)+UU^LQ+((at+6Tgs#N#o=<(FjS`6wgJgdG{8 z`Hfg87@R08g;>`91d70fHE1-+_ZO(CQwC4G_47=6P$=K>Mr2TGES(0I4J3oD* zC9cJ*kdJ#I-EcoXBw?$)#gY76v}DR2!~^7%7pniy*op>ga#)^%*94})UVJ2qChO(6BM+36Y#`nIhA zN+d=wbd=@onn~&PTLC3|jC8~J14sWjog~)~>&U_7uqyTAF`PGMLcu(ik_r~+KNrIk z)zM_6WQw{CTI$ZcYU||Nrf(5^Ps;;Pmkn&DF~r@ACiZSTr3vL$cq@<>%8utxYhT=(LgMwi`0+u>V`1YT`+O}*WyAU|+V0cjsT0nOTaR5ve-(5;CaJ6xEC2f|Iu zMDRNIY;1f2;hPrNxqUnQ%p-5h%JWH3U__h7l-#XbBYdmx+7r%{njV) zEqCuGj(}H!m}d@Kj5Y0hbF7{UVOx;%`@-q6W;%p#v1*Sz%^qUV^eR6f5gndbG7bqlvd~-6rr3HrQw!A+d+v^2>Q4=&#WV>iOB#Y5^?=3Foju3*KCqvdRRp8BfRtW`V!J2r&l{&y6g3 zi}!qlnu5m(+6w+6OX@s{aZ{b&J8*ZyibGbu1C{j^{gK9)IgdciYW>iH^edbch4N1+ zBkV*0sN4bPv{=&np3d;bAm)UtVaR(N5H_s_3nlS~`}_3dS!n0S=!(m>thF1m)AG4@ zRr3aRqP7}??$Qhf9NXD`xn5h{Kwj;@ZF{A(;9*x!3VVzobF8wkPSuX-GZo7NUPjmX zaKQtU(?d)Wh)`y&LK0t6VuWx|1YhvU?*UYQWIO~&$WEqu1ldf|S=Xr_^>n{A!e_OD zDR%?Gyos?<&imX(t6ybx0_G3}5t=%YDE<}yi4j;$+)jiVn^3uyA~-7sFX@`enokd6 zvWe_MJ9Jq_!C77)118Hj{JA6RGV6F?T0QC57-c*$&SLd0McoEkuTn2x1P|)>=ExdD zBq@re(HPu|4u3pemC9x#riE%IGUOgHlxitd{`6I~{7Mi%?>FzTH>=!HbL3Ed?10@( z=`O(AU)-lNUZ+|`7&E8VQt{|0ABgq(y=MUqh$fNS^QJ3WxH&s9XlT4aWkg%tF6XRG zfuVK#OptBe06EVvK7?QZsDI|D44?_w6)Z2)(*i}VIorAW*kdd$Qy|}GN%@&sTUW=& z%WF2~@jV1L79yFCD)fp2{_~MZCN6g|3SS5!4=9Q+PGX!pb(hP{Qr)*bFLCD0J)(p; zF%gmFOib<6mS_f-LYc*sV*|y6at3)`HV6LSfH{T4LhulsGCB^2-%71au_haJ_oLKU zJGV0Kg2{s0{(lgI%QSW6^$t^15OSOpr*EXh$d5qsjio|W-pMU{`B;;WS`2d#e|P&qckN{ zwVDcYkcAHk4gL@Xr<}~BK+lb&07v9o!7L(-XM0{06$){Q8(TlpdKy+ijI;%+`>F=T z*di6M8=rTWDOWHC`Dvia=h{?s9gXufI5-Zw_9A9JIwpS*#~OW(bn8;ech^4~!@ELL zjaG3LuE6iSi3Iv9&8?Q8q|Mvpd%}m>4kH+@E;Gy`kr;m0-_=$)Z|wThu>GelF}PoG zGq!?6gtiq&g{5=_VYEqe5b&RtXx>z4#nBNWjy$G zdlr>_qZvn9%+8{xL|y(u1np<)DpAYkoL2vh$~jx8)=`2S<=enV@1UR;;fwFhWH-}h z3Z>U^6qWJGDC61H;%H`tXM&z*mTQjtGS*iUlO?Ug*@E#9HY!YpQd>H^fx%HvD<0mT`)5@y!rWu^g_do;;xmVWPo zB|}?2{HAPP_!Jg?0kMP$%Q}Hr*&eUAc&Ga8WsTET<1!hYLn+bA?7?b<^d##A!3Nj- zBViAB_7&T8zZpqQco>}~**EZ>`q+5ExGY5_RKmo82WVxsc!qP~{WgpGwUHB;Fp z%YZ6dXLxOvph)`Jnn}B%jcXQJ3YJ^ zqltHHGK-@SGL+id5oP&BX7}sjj39(>a<2?3HRn3*?~MeRO9qgv4F2k5-2dsp0$R~a z<{MjECRyU*B2zq6?KG`U1>yEs z`rj8m8#fbq;#7zsA1rVc7j~G)KSt}rwa3s&FhS@)Ojjh7q}Di)v@Vin$Nhc9IDS6( za~Hu;E6kmf0aTz4a#nm(5xspqT?GYOW^t(JYW_Ti9U$3g_tYxZRR2>`EVEg z`=6TdY*)q7sUPY`Ou?}Y} zqJK_U5-B+_XIEt1O%B}}eq>R={z1@L!_%s3ve7n8dI}t14J(88SdEsN+)C8T)PeFQ z!AMvGH0h+=>TY;B=^sfbj{L29`CR++RV9!`0&RV3D3ryIzqbkTk|B$L9FMlk#GWBp-qoIVj?EdNconGV4Vzma2Yv^QXe#j8w{?AdhFm-&f|#emSE{HGDlg~f!q4--ORchOGmbe}0Xp%*14CwaHCz!{4o1hn$j37sckD6=U>9srlBO%;YDQ zr}Dz`g#eGa!OWfiy4Vt$^27xo;n}<9LT_=)d^drI2aC($=8z-x*lEQ&Yw3f28R~e+ zgmea#{>INHNmHJWgwh}VY&3p4=(=`q2heexy&#!gOpTm@5~~N+rthxLew-@UHm(<$ zps~xEzfJuyr2P5xUZH=~w0Ir=FDarT$UVo)PmIdaT&b z9wX{41{p0fI@dh}Yd`lq-(b18&yBrM71Bp54pm?&llZEk+n3 zt$`B(`;citI2o>$jm=O4!Mb-_0~%q5Z=2)mpYybFv6b1Pe%BtxQez@|giZb7^uXI(0L zjOX)ONPH~qN+I*R!v3|NtFk115xTGVUB+SI6so($VV?1$nRfYV%rmNRMlT&6Idq7w z{Hn>aTi&r6)Nc92ft*ECm7%&SZ2uwKv8ek9v=AwjDq?Tbm-6;8PUKYQ$!R}>ow zZ}i%4lO@+jc{GXrUEK}!F4^|$mzP(0<&u_TyDe0gat=KLj}w?HO205x{vbpw4DGH( zyew^c%+vS{O?pdj)si-3IFlKgRW)H>`HDv8FAR(*$Ou^ZLiax>ySliXdr0?t7_2N; z4e0&%@BFF`elHjW1vKfm7iS21TAwzyUqJy!!qk+S9#+5*e?zfA*4Vn|io+VW$O61Q zQup-q^qa5mrZ+Z%-kVpT{2Rssn*F<(2=$67*8Lh9JTh80<%~anO^Dk%1@Ihu>OapF zc`ck0WRcp;KlJH^LfcHUP#d>0B^ou0(#%Y9Sm&)alvAiZ^gvD|8HRtB;GzG9RY7p6 zt|kx4{*cbELATeuyh9i*AlSO7d&Kl+5`CeRxaM%5@Yea?8~vC9DItvB zK)6l)_`kQS_{EGGjN=1F_$G-`7omdkI_8_U@9xqInn@70x^VxulWjO>dH&r)0TR9b zfw@ff#xL}sVDQPOp_#}|VlE`WP~%c~>D*K&`f3HuuMKts|G&58*hoggi83AM)M6ba z?n#f^84h_84_tx9dNRV}4hr+k$tcD~Xrhs1*?4?B;)+J?q9;vNcvGX@Vaj?7;ESYo z`;}6oqjuayhMxvkDCv5e)zKwM@t9KzZ3?ESH;}jVxr)sosngV$%nmTWP122(H}O=Oy{rI_sKCG3*u%*?x2GqpShi*loU z|25}rmX&>_CNu3dq3bV1JTr8fW`$Uy*NRO)?d!!aH$z1tBF6bi6H#ysb-+9zqMkTo zHl>*i*@79=qU0QvFHMdOUQ zBqWs2R%Zbl)yv%%Ct989QrYS(+iWReC~7PPbZ{WY8P&2+bY+XO3$gu8ug&N=t{K$1 zbsVpM$$QL3BXC(V3XM?>Ao!#Z5F%P zY&d@PMka0$?ycF#nC1x|sYvukg%yAJ?m?HePGVZF$b;X&=SW~pQPx102D*q#=mkG= zdQHgXWZgQ|+pR%D)QwCoTzZy;q8)n9}wuW>`#}&9T-+4?BL5q ze0cL2J|Oa>;+eG`@ledq7nziNLm87$nJ#XMXSRJNSn705BmCv2UVD2ZZ`>R|kDF{P?f z(#rCsO@toBUEYw<^8KEjO*VgrFIB>fn!uXIm%sCn?Z$w(u#9bE2I4w!hs+NWlf2Py z1dxY0#v#1U*{zz37gbZ*@!Z8bO={d{pN3l=?uEmpplf9dY0KT!YPW}zm@@de1H?Q1 zT;mDc1@$zE^0wR}nRbCvr9AJ`w_SICN54|nx_Rq3bIfSE zRG5*qkR~@PiG^(wv9Hg6}=5AYD@7nl1Cf zE180N>{S;7YFGU3}lQ6kYv zcp6rZa?shoA{*A%o+qMxspp-V@3Gp8^$h%`l?ge}(jhkcwfA#xSb~}hapaY*`Dpa> z!?1qA$kY&i0f!{PcI$L@yj?snn~IO+t_Ng}Mb4Wb114((Y=%1b$!pKm+BbW;i#I| zDv8bnvWGxL(sIP^r0X(dO#7(-&(cjdJ^Sa^*c4e=o+kv)*4JLydpLb7sH-b~kPvBW z3T)yd?Z)aFcnj;eA>1+%k?0B7b=>4>UnSvZhjN$=1rO zhmtFf_)-vkMh(dh-HedHvjH_I^sQp&X_uS@!-M34&qB}MRva}sk`Ii0A;tmeL?F_R zztua5s7`5txX_@(sKbyZWqjw5ol>>_7X%FZXk-xMZR#~MeaGf+XOp#TosB!K5eCD~ z$jr>~X%eQEtueB>7v7HpE&OGzfjR>{=Qms1+u6kH^*1 zFS!2=Gr}1)saJ|R-||+xny$_VrE4u!-E9%DH59Lxzz^8Ej`7P4Wdh{xKiK z!mvm}yD_d&Sr^ccI-1^i8XS)!R2N0*-v2FOea9*q9GbscerJO1pEjy@G;9(_$JPM0 zwD?sBRZdbSSa-G(rI}h^pX;H`X<&)=4=ZK+Jh-PP1$-*-jbUrG}vv_65}{Hu5UlG zl(FN$W9v_k+Q06)R}8X){Cx+Hf`laVJs1odp@-JN9&*q8av8BH23%a{u!ka3oImc9z|yCKtqSeBjg1+=cR!d1}qRs3gwcaijZt zc{(~*rz#iemR2v1r!Pea^0f*(oDfKW#?q|?faOm@?B;5J+*Fbmp-}V@+MhE%2yMJR zS-o35nE7Y~KhWe=-5)C-_RAFik-%s~i%itxoVne7Ru2r9)&3G-<>KPRsJXnG zSa%?V6bwxus{NND_J76@>P`JadvBrxEh&kj3sz?_1jF}Vv$6f2*5obLa$TDDeSczxMIXl#lipmox=HTEwsIk8nWZ}%5W zMWW}EF^cuAi8W_(uZ3zgma3VH(jXXvCex)_o)k2UWX6a|5subdD1L4L8HBx~6q8wb zM(K@YuE2_4&&YB7j12#5heImWqePH#nc4W_th_usSC-zvo+DVG=wsHQEy*@p4 zBEi>L6u9mGwr_qo8FzcC=!I7T=Ik_v3($6Et&RU;+@E{$(3dx~Zm9aw0RdzUCS<-L z|I$N;TezME;bsq=HN-t|hqcC?t`nkn0S+uv*oHG?EaDiLBr(B}3Z-=N4aWA=X2I5E zw4nSG*Ou{^p932nYYSF-9Spq*>cuv`Q1)udC}|lJVq2&Y@);AYZ*F6$&LD8sd}Z%l zHfKv?3P|?LS9WqbiRn>4G-U@$hDn0#Mr>$Z$*lkf*G22|b70XdSvCQ?3u$b`QFHs* zO=6)d{~7ROTiddaOvxh_ZHZxRq{L<}m?dfL)dl z4yS(p0kBIqxmhLBwQ;c17ABrhS_A}814ldT`(Am4nR@kn2=|@;^FI$JaB7~Mj8{KI zemW4v86d88+Gqz}cF|Sy%{pu_)|tLpU8zi!*>#eiZkV*Tu!p;9KYd~X48NI;?3CamA7p)iIqs@2JBQ{)Y}uD zj?;qd03S2HJhRbA&lkf|D>(^iy09v%v-{pD@E4O`s4h+Po7s%=rfP>z6%GuoEIN+A z7Zguv%@|bN%azB9%jS$t5_C)1=o4vrF~(9}LWHojYBK!jRIq|Uh>@KEGMgg?`zZ+v zsigw3d#*v7W6)XPAyD{o#!HTWN<>7i9BDi7)Ga4)YNBtny6L`D!j*eBIH@pG!P;!q zu-bDJJsB`tzuuAsrCi>$F-F1m=M#F2KPCq`|dqD^_IPA zZCm4#f{;=9de8&iBU~{3{k@_0H2A^LYQs>M!%gP55I}}R`waTr>1NR6Mi)oxd+NiL zY3PGl5!m;MQh(lW{lHyTPOf(8c&XMZMO`Y=&cN!Dl#2!@(egYWuD@vr-<=T&p%V^e zKQSTa=uNHGh_o-iiB)vC;Xz&nL6p#%R_B_(K0psll8Wi%F2m*@RrBe1Cq0E6aoA^)=Db5VqP54JEARKX$nO^Utrhu?UF4; z^MNcz)$N^l2pxmDnurwV2r_0!LWA4mCr1lty?WW2qhBsENTGCLVCo*69k$QW2Kj~@ z!%bU=`!$>Q9n%#>Go}0I)j1wG!4_tJt(Si4dj;`&w;zPJrbT&ULC+~h^u4_DZ1H^x z>~t=*OYi*7P2)%SC$a^D)I z<}h-9ziYTuA{`J_{=7S@eh8AqeJk(2dG<{1&C&RGv3zN`p>^##{ZGJ)$A{mmgx9uV_9 z^H>M~oYxH7Ai0@Y>@iR9=L@blMi|jHPzXt(%h&u1@L&#_Q94D>29s19fD11aa;k;T z1@NA~ePe9Ka{>I&)HRxbF&tV1Myfj4j4Ma~u5MnJ)6<@bDj4&r5d&zWEwy+#0lnXP z6++z@9zBU%>=5*LB>3@2lsY8D&_YBn>yBR6H6As428F9@VUF zZn}l@@aYa+_jXc=#h|kk+i)|L*RsQk8>=p{Ss@F#TXy5z97U zMqWDnx5IquDt;TrL|}Tm-TORaW%TQ=m^TGYahgflU_dQ0;=9Z0ar*P+3Qz%LB1>oVPzM=SeD z{JMJ*TS$Qvitem`^{DJ4=kVLTTBmg&b8=P+)cAwS_OMg;Zg3 z0_~2oWmt@wLMc1XIWJ;%9b&$P_Lv1g=~MaT%1nd9G)7_;*Hh;S3Y*g1U^EBOfuerQ z*}C*6@}nfFrxgz?k6@!hfFEB(7x)l_TyW|LJ=6FG3Rr08w&ei>m=gE zhP|9}ZnP<0hP>xzX6MJ*L({}Wk@C%c(FFf3;D$uV( zIPDV=lAU^l_^=6wtE*>_*AeH37&hqAtuMe4Y9kh;y zH#ghKuCN$15<8CkdhTVB;jX zA=WjsEH%Ysl`sMonpBeuBr+T>kYl6`wnUtJ#vhbd0J_m%9MHVh^Yd}~B!tI4G?Ilz zwx1E9g#%rmFca^$$jb^HdX7yNBUFxhXzzgAdB_BCj$?&nf|1hUzYnVI!n5?te{+u) zN>oFoH7Z}M@jA06qLS`M+DlQF2lyBH)0&DlT2*@uc1&y&baQ}YG)4W|3Z4s02E|SY zlP(YIzLvj52wmS-0Sz(}GR*Ja65q9>N#n`xGO>)Zqj2`6_|)mCbaVBa^JJ_zwy>l3 zsFc*Ie9Af*uIAT{wdhu64k1f=--rO=sko*-=>@n%-WD7}pW!4}Pv(7|i(3n1Ml_cE z2Zk(aL7f*q3mzgS)~MTs>NabFLe}qzNqR)FNbuqi`U_74V52v@!JQ|^y(#z&|7IWv z`uVC-b9CfKk-cyNaizM#my!D@GuL)W___FZec@@s+tDphuh@l}fhISY{sL61{HT}C z{%|z4>z+kmcPlnB6e&ZJu{`zBx(00W^vado_c|;iLly18$#V^z#GwumeDU*0-7>(u zdFGEDl3Md=(MPNg1?iuaOKHX{m>t)btG>dgiL8GB(0;lu!)&NWJdW(_dFkN%{E>* zT~;d=oPIsun||lwle`ePk$@Wcp}J zQER19F(vhV^1%H!33%3&u8m?Qfm;`{8*$vesT6!BrvJQkYwX z`L#vml(mIZ(2aQ0!>P#ocHy?F%PY>8r`g%Uqh>PYPb=AGNRf1A;mgx{`M1?hfk#tm zahnlnrQ)ytTEUco}YNoRFQS`tZIB&i4I>cC^pmI`XD9OG=Z5X2)}t zZR;DuTx9Jq(z#Z(4~`xW4Vh{Q*HD8)S*Cu{;`}M>NEdh`Bo@b!r2NBpBXUbj*A7;ng|b$p zlSl_h4q7}1`!6roHzf=l z_u+>Xq7ToFK~I$c9S-Z|+UW%-`X70x`_ib~eC81NQEw?E#Gm6NP`c!Mx`Ng5XFJBJ z!gi)A_eu9VqQuiJJlO3Lb6o=9AjS&_S&|2sqdLTciSTpW{qCWoaf(qgDC zCcp&);ATzwrz{T=dU1&jD@IP#McFwyDe9OQ7|?aW$VCcl8)PE`3{$;``u&P7$;oz` z;{G9&`huT&6ukVE{;5(P=>Rtj()>P@Of0DOx0u;a9X46D%fBO>SeTfEXyGGz-3}%# z_NhE+9RR8O%9W;zm6v^blTHT;ow3i4~xQ7XdEK$l;tn2YB|bOpE^kL_Y# zs((yjD*%iHZ+~*0jJ8-yqs)lxtP!JXlErjXgN2;*^xGuyyCgvLaQXcUB}>|f-ukJQ zR3jMb+O)dk{t0?@wP5rDpsGv(_#oADPZ05di=c^uok96rVKSr|V0Aolsq`yFMb&_W;dV;Dkrnw26POlbs{CH{-8K1JPx_;kHZByYk0M!px3jY4Jn$x{s4aKtBgmy1JYe8k5OA??WZT1tt z{@hu!eYElZWp1C07EfZ|Y+pLtg&)DdP7?YGNgqEK{P(>&C$tN1&RrZ`D{HlX#m&Tz4g;_W)Nz8g_mham4yW_RF>;Zm6C$w?d+8= zqZ1QnD~)GqL3e4YIl>-)HYNRZ@!u~Pc&#}B3s?N{Pfy2FrGwASLXZXTfJ05n42o1e%P)oSs3 ziZTnP38r;KNg#K2l2Zh)pekH4DdYx0nMd$``?tPsHh45-@I7Br~G#Z zVP)V|IWVs#A2wc|Ly@rnE$YVO+QyTC9|r~|=JS2!%YBa5deg68w{k(3a=`ohg8$mA*>o@HO2L}lW2|yYM z2*ibi{)=frw_k#8L$LgfZEOyDsGgmPBLV^fUN)&7LjmgEbIzGR?B8tM0KOcrRTsJP zxkHWyW#;G067c|FqaC^W)UQJvfs94@I0@V-ItM(*5M;_*KcF-Ub7jD-Jg zPjx)4bUfV-i2ny^1bt+}KmD~6*KuFo0aPY)RA7l82U3}9x1_y^|9WP52}Aq(w4j7v zOlA)X<-0|(uxaF}Q>cqL>22HQSsbBc@xK6-nLyUl^G(MK5Xk;wz5KyCYr9z&Y&%dE zf4LAp6N*dz+ZcG%n9nq9Svz0B)sI5+JQ8%r`Bm)Rx?1P)exc)8q~k)Q>ajEtAABhO~%R!$GIIZR#T(!WGDgR@}na_`@Zb=PrYlfkfN@|lCp7^vvIIK zz1LiiX7#fjSfCDN13*l$K^PNI&EsYW`}5ApLnU50HyUueQ{4^vZ9J_1`!6JbMwOB> zFy{*)H1#u3W8gx{4zVznYuZt&Vo^ihXxpw*~O*o0%Vkw?S=VuSyy&> zK0`zvqIuVq*F)vvPFHSq^D>v!UjvT2kf|PtUbX=msi(cQwY7%Pb7rS4gJveSQevVh zH9xgmqzi2=^J{0QcB>XjhvQ*$z!X{%HaA?aeK-2|U$na91J&$XzAt~2<$qAVoiEGO zXLdvfG0}dn*B$abdX+aet#G{FMur0<|08>U0rC()#RZVou}M7r*T+i;AfP#6M0gD; zvbp~)*m3s{{tAZ9|J%y=`RT*<-G#4wpV}Wz?F0bdKx|wbpx74_Yy>Ar^jg+37uB7M zPF(!G^C$A4={-KSFVzHiKH1sXtBp=ZiF9L@Np68nd&)8jrBqK-RR1WHfv2!QM^jUP zP|YQuSk8vI2(JS$J`o^e>~(4-c(v$}kuC=7SmvF+rVYO6-7Ew5WVVkVzoz3Qa3g-} z86DStQf6%yuKCF@9+3u3k!~d9DsmL@3%oM~g{E^MX_Klu-^Da+4ikz$?}$@IY_+Uk zRq!bXT?hubxw`&6AE0{KGkV^0gN*|~QY`;X1fxeFf<5kWrYX=bc)$T={~Lh7cH*gr zat>U{8+huL$BK`Zl$7*u1qYoh1fBpp%Tm4FLd(X}X~*+X$1?zX6bEFKCkzZl{+l7l z_Cp6>pBBIFxi*#L`VO=F=uZbQk^n*n3kxgg*o;cV<8b!hh~CJ>WsCpAWB7}8fWN-) z%dS>|EkfqrIUrY`0C>cVs=4~(Edd6dxhDY6K@gWGSljk>mFP=m zYj~vof1959@ovyLwiSEU15D({(ciI_aP(iE`!L>Thi|2;TeFqC=WGy zjg5^hq4opZ&g)%$<;bO_rHl-ce*}eWw-v%nEz>7~5_eC}2E$5`xLUITOg|)WN%P%J<2PEeNY3u4vj*gCiblW4{(>{Q;#p~>}Z5i$#1XGVk z*KX`t3&q5M6Kuy^#J=rra07%mGc&U@AUOa;z-4n~4(Urze-%&jS#{Uvw`@>>11mib z0*(VpdCXS=kA~o#L{@`^0E?S9%UUy)E8L4u`F3qX&BpRi{V<8wk=BAeM;FZ)Q9W-r zj`5G!L%A(Aq`Si%1WjM2+QwY9Z_=)J?_TP?o~s=`=~9Z{Jk{h;tjK5gtC*otTB$Q> zmRr`M#zcF5`VeBmYYKuRhzWjF8>>0_jA*JyR|hU)`FMpD77c%BO~wM9yhO$qVEIl< zi`P5J6VGDHtXYd{GqcU-vfbP9wBB-aOx1V}w#j0!3A}AOyO5(}j5`ZhIP=>89-JR$ z&~ja4ka%9bL^EI9g%yI3QR3sNl0&Lo&vv7)BWL zUS1xRXlola6lS=kXFU?obYXSSpaBb!hrWJ|xglt1kMlQnPpUn(GKP%UwW`FAF_pwN3VyXy2H$T{7^{f5*^ZjYn9{ggoHHfDh zJ%I~85&~bKf$FE!`nD?}Rg8JW<9jlpaV6XD;m`EHC0OKCc(BbApk z9*@NS4|s*qA8%7AtO#&cH-E0XbwQRWH%@41L&yr%Kc&-M)osSf}k!cr3*!0Vc z!8ku=U%?Nt9XxD63P!c7n{!D>B=|1bmho#R7Si&=8u_}Cw&0wbRhgtvk0u2+gl;k5!UE! z+LMaE#2vZ{YwE^0T&g&<(vq5quveK<*jnBmGW#NoIDCj%1_oDxKdjWUn+=pUF{HC`JZMD4f05;Te@mx!MiiZlq<|d5=e&L$S00j^co!aj#&CCkQ z%9<;_#>H6zUcWIdL&NbRAs(J>cVV+?;L3}uJO7=X9l&eID8tIk?9#HP9}*>F>gt+U z63)iS=_N!i{(QTWE9&>pI)|_hXKZf|f$;!&uZIx%-BM|^u{pbOgDQ(uFgGnNHeK{L zWeLmt?ula_1nRXmW;FG?%um56!H~nwavjxxKpbM_w1u#Ds5ih7vE6lV7${04F{)Au zIaA}K)z{U{&d&o@PjcXoxWJtQsqA{qEiHnMt2!DQ7xQ{f|IV3t0oO|n4lApUH$cMl zl~QzAgL8gvP82w-Q+~Db_P#9uHmZY?Jg}Y~LP#e-*uMEk%3W!k;DP{qe;H7kNg5)5 z>sr{@2w+tI!qw-7^>wj1yodh~^2pVn90~Hbvva3|=c=Utdz75(}{Y0h1dBz`dxeyS%vp?td6KaQ`>*in20c zm+i28CZnLIE8tGBf&Tu}ma}$|v)0;{mWRuOnVWS#CnkI#pEYK#icAlu@m=~MgBZnd za{og)MyS`lv`lV?jXYdY4PRfZ>jWkx9acV{s(1RjO|8&gpuCKw@^%66HW(SbjEkHB zU$+=AK+G>@7r)2Oz5V;53H+{)o37^d{QUfwi-3cugM&k<=3&GC)pf1mP_1ov_#9^2 z9nghQ4ueq{#*88C*+Wb-ns##7(O8LLqaufd-H?rOrr}GBafqavLd`gYoMU!H5}TNq zkTl96a>%)6zy17ve81M8^{#8J>w2F1y`Ou%&vT1{yM6JRnwq1dqeQifK0cG6FiA;C z8D~spfFyZ_Q1f(k9R!;G<+(Ti3=MH-H)jSbw4*-V>M69iNr?E(br9oTXLjgNZC#yQ zf-S){p3!jh*?YVEyHrKEekt=hvpQKpX@@g8?GqlyL=My-Q!U<*nR?;{7AH3soVA0X zuH|!wmpb(>k4DfS2r^RrSuTMdy-305hc}!7at^NU<-Hp# z(2iNZ)!4WRSQ3yXu9z3@Od@fNJ(d{6Z9(MN7@&+=gm9{>s{nV3cV>8S@DQL^nj}ii zyVkA-9tn=rD=l(B=il$? z$O2sd^drH<`l={|9w}z0rz;f0u6TLH(E?wa^#s>1>lH>@m6fBh#3vQd1A1G`0QZEI zm6dk%mv%tz0KL@QB_C_L`_=x$zb6*~Xe^Z;PrL>K*3;SS0O<#;zq%ch(Y8mXBQ=ht z5Y<1AGM3NMx3pkon+PCY{CgQY_1nUrj=AMpR5xBtXG)y?QNK@4ULGh=g;W${Dv&QM z+&AEF>hx+)Prdfc>@1K6g(D+i%FxC#Xc+lw>V2h& z(OD;We2Le{5dq%MOsYwTepbpW}O1(Ur`p|4FO^AX9~l|>EULfK z;tAyf{}`0=PcqWY#S@_MZMpwAHj-HEbnwvyArG)UoxK^C!X8=L4gFz9+kwO@nMp-J z9}=;+H~C3GGjKYnzGc$z0HdiY6 ztx?(RQQj8EYJy=H;T_{>B>LF32QuiO$r%@ zO#L0L-W1fc8T(x*`D6ub8NW}2#BMq6)*>)2Zq>!c&Q(1}_I9FA$x6eZ`d|;D)>>2x z(5aXHzYMvb%84GIEL;~fr=>_e7Hp7v@pl<9vJ)Ov$*y(n=i^A^wcm5YB zO(v@jW5xn~m0PV0GrvpkySWq2OV4s!%?vn7DB2~LKwLK|a-cUeOlW~2$@_D+NFg~S zB1G5FyO4z?$w^D$Y<#IQGE7Bg3Hd$>X8QucMmgt-FIqN(zyXj9oQ@s=+m^C2gM51j z!wurYG~F)~D)-@6y_TQrepHY}D%_E^X$nLtGT$*YvI{zWn_QH&5u4%#n#2Q#*pVWL zX_JUK^r@si!2}N5zst0MM#1^HPh*T!vkb=fmsL~99nxaR8JT7l6NY}6!*HYY&42ke zjXnH&T(knD+U_6w0+DDBhnoHj!XZ|oTB1WO1(?$)B~w{LQjKGXYJ-(63gKuf<%WoZ z1-Ll9_0%=AKW-?^I-{^Kx|ISLW{jvV2uaT78ZQ> z`pn<=?n=45F!l|6TrQivc=Ca%Mb%risM}Ofn{|(-Oe0H;y3@!VfT?r1=H|f;OBSr)R9ml74AWERZ$X&MBqs$4A_3dlZ!wc1}%Y%Vi$U#a=+1Tjn>b?_`{hKS*b?#JGSC^NgIcfqN>#b^N)~{y+0s?ZI zb_)}=o89I;-Cph?e<)Ugb^cadM&AQNt)Qh48<~C3tLCQ@RL*+jYRBJEas_*#+#qw2 zI370;PEzF(Fh0Pjs7FzFRzabWdOzvdL^}%%qqurnCr2;+4}3mgOco2veQ!^uQlvT@ z>)AOuE;Jgp=X$Xspj$n&)|KS*RR^ip&BErsc3gLlE>QYWLP)Q@FuII=Y1_`8uC07L z4DRu+dbzEg8EG#s8#`$agTeH}DQ@Au-r;@(pG$t=0>k4>%rQ7q4Bo;8k0;6!7Ql{C9LPM9SNy*XY80#h diff --git a/mods/HELP/mcl_doc/depends.txt b/mods/HELP/mcl_doc/depends.txt deleted file mode 100644 index 93440a299..000000000 --- a/mods/HELP/mcl_doc/depends.txt +++ /dev/null @@ -1,2 +0,0 @@ -doc -doc_items diff --git a/mods/HELP/mcl_doc/description.txt b/mods/HELP/mcl_doc/description.txt deleted file mode 100644 index 4ae29f507..000000000 --- a/mods/HELP/mcl_doc/description.txt +++ /dev/null @@ -1 +0,0 @@ -This MineClone 2 mod sets up and configures the Help modpack mods to tailor the help towards MineClone 2. diff --git a/mods/HELP/mcl_doc/init.lua b/mods/HELP/mcl_doc/init.lua index 6948aed04..9be688ec2 100644 --- a/mods/HELP/mcl_doc/init.lua +++ b/mods/HELP/mcl_doc/init.lua @@ -1,4 +1,4 @@ -local S = minetest.get_translator("mcl_doc") +local S = minetest.get_translator(minetest.get_current_modname()) -- Disable built-in factoids; it is planned to add custom ones as replacements doc.sub.items.disable_core_factoid("node_mining") @@ -50,8 +50,8 @@ end) doc.sub.items.register_factoid("nodes", "groups", function(itemstring, def) local formstring = "" - if def.groups.leafdecay ~= nil then - if def.drop ~= "" and def.drop ~= nil and def.drop ~= itemstring then + if def.groups.leafdecay then + if def.drop ~= "" and def.drop and def.drop ~= itemstring then formstring = S("This block quickly decays when there is no wood block of any species within a distance of @1. When decaying, it disappears and may drop one of its regular drops. The block does not decay when the block has been placed by a player.", def.groups.leafdecay) else formstring = S("This block quickly decays and disappears when there is no wood block of any species within a distance of @1. The block does not decay when the block has been placed by a player.", def.groups.leafdecay) @@ -62,7 +62,6 @@ end) -- nodes which have flower placement rules doc.sub.items.register_factoid("nodes", "groups", function(itemstring, def) - local datastring = "" if def.groups.place_flowerlike == 1 then return S("This plant can only grow on grass blocks and dirt. To survive, it needs to have an unobstructed view to the sky above or be exposed to a light level of 8 or higher.") elseif def.groups.place_flowerlike == 2 then @@ -130,7 +129,7 @@ end) -- Armor doc.sub.items.register_factoid(nil, "use", function(itemstring, def) - local def = minetest.registered_items[itemstring] + --local def = minetest.registered_items[itemstring] local s = "" local head = minetest.get_item_group(itemstring, "armor_head") local torso = minetest.get_item_group(itemstring, "armor_torso") @@ -155,7 +154,7 @@ doc.sub.items.register_factoid(nil, "use", function(itemstring, def) return s end) doc.sub.items.register_factoid(nil, "groups", function(itemstring, def) - local def = minetest.registered_items[itemstring] + --local def = minetest.registered_items[itemstring] local s = "" local use = minetest.get_item_group(itemstring, "mcl_armor_uses") local pts = minetest.get_item_group(itemstring, "mcl_armor_points") @@ -173,7 +172,6 @@ end) doc.sub.items.register_factoid(nil, "groups", function(itemstring, def) if def._repair_material then local mdef = minetest.registered_items[def._repair_material] - local desc if mdef and mdef.description and mdef.description ~= "" then return S("This item can be repaired at an anvil with: @1.", mdef.description) elseif def._repair_material == "group:wood" then @@ -291,7 +289,7 @@ doc.sub.items.register_factoid("nodes", "drops", function(itemstring, def) local itemname = item:get_name() local itemcount = item:get_count() local idef = minetest.registered_items[itemname] - local text = "" + local text if idef.description and idef.description ~= "" then text = idef.description else @@ -401,7 +399,7 @@ doc.sub.items.register_factoid("tools", "misc", function(itemstring, def) local formstring = "" -- Weapon data local damage_groups = tool_capabilities.damage_groups - if damage_groups ~= nil and damage_groups.fleshy ~= nil then + if damage_groups and damage_groups.fleshy then formstring = formstring .. S("This is a melee weapon which deals damage by punching.") .. "\n" -- Damage groups @@ -410,7 +408,7 @@ doc.sub.items.register_factoid("tools", "misc", function(itemstring, def) -- Full punch interval local punch = 1.0 - if tool_capabilities.full_punch_interval ~= nil then + if tool_capabilities.full_punch_interval then punch = tool_capabilities.full_punch_interval end formstring = formstring .. S("Full punch interval: @1 s", string.format("%.1f", punch)) diff --git a/mods/HELP/mcl_doc/locale/mcl_doc.pl.tr b/mods/HELP/mcl_doc/locale/mcl_doc.pl.tr new file mode 100644 index 000000000..c451c8c39 --- /dev/null +++ b/mods/HELP/mcl_doc/locale/mcl_doc.pl.tr @@ -0,0 +1,80 @@ +# textdomain: mcl_doc +Water can flow into this block and cause it to drop as an item.=Woda może wpłynąć na ten blok i sprawić, że on wypadnie. +This block can be turned into dirt with a hoe.=Ten blok może być zamieniony w ziemię za pomocą motyki. +This block can be turned into farmland with a hoe.=Ten blok może być zamieniony w ziemię uprawną za pomocą motyki. +This block acts as a soil for all saplings.=Ten blok może być glebą dla wszystkich sadzonek. +This block acts as a soil for some saplings.=Ten blok może być glebą dla niektórych sadzonek. +Sugar canes will grow on this block.=Trzcina cukrowa będzie rosnąć na tym bloku. +Nether wart will grow on this block.=Netherowa brodawka będzie rosnąć na tym bloku. +This block quickly decays when there is no wood block of any species within a distance of @1. When decaying, it disappears and may drop one of its regular drops. The block does not decay when the block has been placed by a player.=Ten blok szybko zanika gdy w odległości @1 nie ma żadnego bloku drewna dowolnego rodzaju. Gdy zanika może wyrzucić z siebie jeden z przedmiotów typowo wyrzucanych. +This block quickly decays and disappears when there is no wood block of any species within a distance of @1. The block does not decay when the block has been placed by a player.=Ten blok szybko zanika gdy w odległości @1 nie ma żadnego bloku drewna dowolnego rodzaju. Ten blok nie zanika gdy został postawiony przez gracza. +This plant can only grow on grass blocks and dirt. To survive, it needs to have an unobstructed view to the sky above or be exposed to a light level of 8 or higher.=Ta roślina może rosnąć tylko na blokach trawy i ziemi. Aby przetrwać musi mieć nieblokowany dostęp do nieba powyżej lub być oświetlana światłem o poziomie 8 lub wyższym. +This plant can grow on grass blocks, podzol, dirt and coarse dirt. To survive, it needs to have an unobstructed view to the sky above or be exposed to a light level of 8 or higher.=Ta roślina może rosnąć na blokach trawy, bielicy, ziemi i twardej ziemi. Aby przetrwać musi mieć nieblokowany dostęp do nieba powyżej lub być oświetlana światłem o poziomie 8 lub wyższym. +This block is flammable.=Ten blok jest łatwopalny. +This block destroys any item it touches.=Ten blok niszczy się gdy dowolny przedmiot go dotyka. +To eat it, wield it, then rightclick.=Aby to zjeść, weź to, następnie kliknij prawy przycisk myszy. +You can eat this even when your hunger bar is full.=Możesz to zjeść nawet gdy twój pasek nasycenia jest pełny. +You cannot eat this when your hunger bar is full.=Nie możesz tego jeść gdy twój pasek nasycenia jest pełny. +To drink it, wield it, then rightclick.=Aby to wypić, weź to, następnie kliknij prawy przycisk myszy. +You cannot drink this when your hunger bar is full.=Nie możesz tego pić gdy twój pasek nasycenia jest pełny. +To consume it, wield it, then rightclick.=Aby to skonsumować, weź to, następnie kliknij prawy przycisk myszy. +You cannot consume this when your hunger bar is full.=Nie możesz tego skonsumować gdy twój pasek nasycenia jest pełny. +You have to wait for about 2 seconds before you can eat or drink again.=Musisz poczekać przez 2 sekundy zanim znów będziesz mogła jeść lub pić. +Hunger points restored: @1=Przywrócone punkty głodu: @1 +Saturation points restored: @1%.1f=Przywrócone punkty nasycenia: @1%.1f +This item can be repaired at an anvil with: @1.=Ten przedmiot może być naprawiony przy kowadle przy użyciu: @1. +This item can be repaired at an anvil with any wooden planks.=Ten przedmiot może być naprawiony przy kowadle przy użyciu desek. +This item can be repaired at an anvil with any item in the “@1” group.=Ten przedmiot może być naprawiony przy kowadle przy użyciu dowolnego przedmiotu z grupy "@1". +This item cannot be renamed at an anvil.=Ten przedmiot nie może być przemianowany przy kowadle. +This block crushes any block it falls into.=Ten blok rozbija dowolny blok na który spadnie. +When this block falls deeper than 1 block, it causes damage to any player it hits. The damage dealt is B×2−2 hit points with B @= number of blocks fallen. The damage can never be more than 40 HP.=Gdy ten blok spada więcej niż o 1 blok, zadaje on obrażenia dowolnemu graczowi którego uderzy. Zadaje on B×2−2 punktów obrażeń, gdzie B @= liczba bloków o który spadł. +Diamond Pickaxe=Diamentowy kilof +Iron Pickaxe=Żelazny kilof +Stone Pickaxe=Kamienny kilof +Golden Pickaxe=Złoty kilof +Wooden Pickaxe=Drewniany kilof +Diamond Axe=Diamentowa siekiera +Iron Axe=Żelazna siekiera +Stone Axe=Kamienna siekiera +Golden Axe=Złota siekiera +Wooden Axe=Drewniana siekiera +Diamond Shovel=Diamentowa łopata +Iron Shovel=Żelazna łopata +Stone Shovel=Kamienna łopata +Golden Shovel=Złota łopata +Wooden Shovel=Drewniana łopata +This block can be mined by any tool instantly.=Ten blok może zostać wykopany dowolnym narzędziem natychmiastowo. +This block can be mined by:=Ten blok może być wykopany przy użyciu: +Hardness: ∞=Twardość: ∞ +Hardness: @1=Twardość: @1 +This block will not be destroyed by TNT explosions.=Ten blok nie będzie zniszczony przez eksplozję trotylu. +This block drops itself when mined by shears.=Ten blok wyrzuca siebie gdy wykopany nożycami. +@1×@2=@1×@2 +This blocks drops the following when mined by shears: @1=Ten blok wyrzuca siebie gdy wykopany nożycami. +, =, +• Shears=• Nożyce +• Sword=• Miecz +• Hand=• Ręka +This is a melee weapon which deals damage by punching.=To jest broń ręczna która zadaje obrażenia przy uderzenia. +Maximum damage: @1 HP=Maksymalne obrażenia: @1 HP +Full punch interval: @1 s=Pełny okres uderzenia: @1 s +This tool is capable of mining.=To narzędzie jest w stanie kopać. +Mining speed: @1=Szybkość kopania: @1 +Painfully slow=Boleśnie powolne +Very slow=Bardzo wolne +Slow=Wolne +Fast=Szybkie +Very fast=Bardzo szybkie +Extremely fast=Ekstremalnie szybkie +Instantaneous=Natychmiastowe +@1 uses=@1 użyć +Unlimited uses=Nielimitowane użycia +Block breaking strength: @1=Siła niszczenia bloku: @1 +Mining durability: @1=Wytrzymałość kopania: @1 +Armor points: @1=Punkty zbroi: @1 +Armor durability: @1=Wytrzymałość zbroi: @1 +It can be worn on the head.=Może być noszony na głowie. +It can be worn on the torso.=Może być noszone na piersi. +It can be worn on the legs.=Może być noszony na nogach. +It can be worn on the feet.=Może być noszony na stopach. + diff --git a/mods/HELP/mcl_doc/mod.conf b/mods/HELP/mcl_doc/mod.conf index f5c27d080..d939761d5 100644 --- a/mods/HELP/mcl_doc/mod.conf +++ b/mods/HELP/mcl_doc/mod.conf @@ -1 +1,4 @@ name = mcl_doc +author = Wuzzy +description = This MineClone 2 mod sets up and configures the Help modpack mods to tailor the help towards MineClone 2. +depends = doc, doc_items diff --git a/mods/HELP/mcl_doc_basics/init.lua b/mods/HELP/mcl_doc_basics/init.lua index e700e82bd..45ce75877 100644 --- a/mods/HELP/mcl_doc_basics/init.lua +++ b/mods/HELP/mcl_doc_basics/init.lua @@ -2,7 +2,7 @@ Basic help for MCL2. Fork of doc_basics ]] -local S = minetest.get_translator("mcl_doc_basics") +local S = minetest.get_translator(minetest.get_current_modname()) doc.add_category("basics", { diff --git a/mods/HELP/mcl_doc_basics/locale/mcl_doc_basics.pl.tr b/mods/HELP/mcl_doc_basics/locale/mcl_doc_basics.pl.tr new file mode 100644 index 000000000..37fe955ca --- /dev/null +++ b/mods/HELP/mcl_doc_basics/locale/mcl_doc_basics.pl.tr @@ -0,0 +1,512 @@ +# textdomain: mcl_doc_basics +Basics=Podstawy +Everything you need to know to get started with playing=Wszystko co musisz wiedzieć by zacząć grać +Advanced usage=Zaawansowane użycie +Advanced information which may be nice to know, but is not crucial to gameplay=Zaawansowane informacje które mogą być przydatne, ale nie są niezbędne podczas grania +Quick start=Szybki start +This is a very brief introduction to the basic gameplay:=Jest to bardzo krótki wstęp do podstawowej rozgrywki: +Basic controls:=Podstawowe sterowanie: +• Move mouse to look=• Porusz myszą by się rozglądać +• [W], [A], [S] and [D] to move=• Użyj [W], [A], [S] i [D] aby się poruszać +• [E] to sprint=• Użyj [E] aby biegać +• [Space] to jump or move upwards=• Użyj [Spacja] aby skakać lub poruszać się w górę +• [Shift] to sneak or move downwards=• Użyj [Shift] aby się skradać lub poruszać w dół +• Mouse wheel or [1]-[9] to select item=• Użyj kółka myszy lub klawiszy [1]-[9] aby wybrać przedmiot +• Left-click to mine blocks or attack=• Kliknij lewym przyciskiem by kopać bloki lub atakować +• Recover from swings to deal full damage=• Poczekaj aż ochłoniesz po zamachu, aby zadać pełne obrażenia +• Right-click to build blocks and use things=• Kliknij prawym przyciskiem aby kłaść bloki lub używać rzeczy +• [I] for the inventory=• Użyj [I] aby otworzyć ekwipunek +• First items in inventory appear in hotbar below=• Pierwsze przedmioty w ekwipunku pojawią się w pasku szybkiego dostępu +• Lowest row in inventory appears in hotbar below=• Najniższy wiersz ekwipunku pojawi się w pasku szybkiego dostępu +• [Esc] to close this window=• Użyj [Esc] aby zamknąć okno +How to play:=Jak grać: +• Punch a tree trunk until it breaks and collect wood=• Uderzaj pień drzewa aż się zniszczy i zbierz drewno +• Place the wood into the 2×2 grid (your “crafting grid”) in your inventory menu and craft 4 wood planks=• Umieść drewno w siatce 2×2 (twojej "siatce do wytwarzania") w twoim ekwipunku i wytwórz 4 deski +• Place them in a 2×2 shape in the crafting grid to craft a crafting table=• Umieść je w kształt 2×2 w twojej siatce do wytwarzania i wytwórz stół rzemieślniczy +• Place the crafting table on the ground=• Umieść stół rzemieślniczy na ziemi +• Rightclick it for a 3×3 crafting grid=• Kliknij go prawym przyciskiem aby zyskać dostęp do siatki 3×3 +• Use the crafting guide (book icon) to learn all the possible crafting recipes=• Użyj przewodnika do wytwarzania (ikona książki) aby poznać wszystkie możliwe receptury do wytwarzania +• Craft a wooden pickaxe so you can dig stone=• Wytwórz drewniany kilof aby wykopać kamień +• Different tools break different kinds of blocks. Try them out!=• Różne narzędzia są w stanie zniszczyć różne typy bloków. Wypróbuj je! +• Read entries in this help to learn the rest=• Przeczytaj inne wpisy aby dowiedzieć się resztę +• Continue playing as you wish. There's no goal. Have fun!=• Graj tak jak chcesz. Nie ma żadnego celu. Miłej zabawy! +Minetest=Minetest +Minetest is a free software game engine for games based on voxel gameplay, inspired by InfiniMiner, Minecraft, and the like. Minetest was originally created by Perttu Ahola (alias “celeron55”).=Minetest jest wolnym oprogramowaniem i silnikiem do gier opartych o rozgrywkę na voxelach, inspirowanym przez InfiniMinera, Minecrafta i podobnym. Minetest był oryginalnie stworzony przez Perttu Ahola (alias “celeron55”). +The player is thrown into a huge world made out of cubes or blocks. These cubes usually make the landscape they blocks can be removed and placed almost entirely freely. Using the collected items, new tools and other items can be crafted. Games in Minetest can, however, be much more complex than this.=Gracz jest wrzucony do ogromnego świata stworzonego z sześcianów lub bloków. Te sześciany zwykle tworzą widoczny krajobraz i mogą być usuwane oraz stawiane niemal całkowicie dowolnie. Korzystając z zebranych przedmiotów nowe narzędzia i inne rzeczy mogą zostać utworzone. Gry w Minetest mogą jednak być dużo bardziej skomplikowane niż to. +A core feature of Minetest is the built-in modding capability. Mods modify existing gameplay. They can be as simple as adding a few decorational blocks or be very complex by e.g. introducing completely new gameplay concepts, generating a completely different kind of world, and many other things.=Główną cechą Minetesta jest wbudowana możliwość budowania. Mody modyfikują istniejącą rozgrywkę. Mogą być tak proste jak dodanie kilku bloków dekoracyjnych, lub bardzo skomplikowane np. wprowadzając zupełnie nowe sposoby rozgrywki, generując zupełnie inny rodzaj świata i wiele innych rzeczy. +Minetest can be played alone or online together with multiple players. Online play will work out of the box with any mods, with no need for additional software as they are entirely provided by the server.=W Minetest można grać samotnie lub online z kilkoma graczami. Gra online będzie działać od razu z modami, bez potrzeby dodatkowych programów jako, że są one całkowicie dostarczane przez serwer. +Minetest is usually bundled with a simple default game, named “Minetest Game” (shown in images 1 and 2). You probably already have it. Other games for Minetest can be downloaded from the official Minetest forums .=Minetest jest zwykle dystrybuowany wraz z prostą domyślną grą, nazwaną "Gra Minetest" (pokazana na obrazka 1 i 2). Prawdopodobnie już ją masz. Inne gry dla Minetesta mogą być pobrane z oficjalnych forum Minetesta . +Minetest as well as Minetest Game are both unfinished at the moment, so please forgive us when not everything works out perfectly.=Zarówno Minetest jak i Gra Minetest są aktualnie niedokończone, więc prosimy o wybaczenie jeśli nie wszystkie rzeczy działają idealnie. +Sneaking=Skradanie +Sneaking makes you walk slower and prevents you from falling off the edge of a block.=Skradanie sprawia, że chodzisz wolniej i zapobiega spadaniu z bloków. +To sneak, hold down the sneak key (default: [Shift]). When you release it, you stop sneaking. Careful: When you release the sneak key at a ledge, you might fall!=Aby się skradać przytrzymaj przycisk skradania (domyślnie: [Shift]). Gdy go puścisz, przestaniesz się skradać. Ostrożnie: Jeśli puścisz przycisk skradania na krawędzi możesz spaść! +• Sneak: [Shift]=• Skradanie: [Shift] +Sneaking only works when you stand on solid ground, are not in a liquid and don't climb.=Skradanie działa tylko gdy stoisz na stałym gruncie, nie w wodzie oraz nie podczas wspinania. +If you jump while holding the sneak key, you also jump slightly higher than usual.=Jeśli skoczysz podczas skradania, skoczysz nieco wyżej niż zwykle. +Sneaking might be disabled by mods. In this case, you still walk slower by sneaking, but you will no longer be stopped at ledges.=Skradanie może być wyłączone przez mody. W takim przypadku wciąż będziesz chodziła wolniej przy skradaniu, ale wciąż będziesz mogła spaść z bloków. +Controls=Sterowanie +These are the default controls:=To jest domyślne sterowanie: +Basic movement:=Podstawy poruszania: +• Moving the mouse around: Look around=• Poruszanie myszką: Rozglądnij się +• W: Move forwards=• W: Idź naprzód +• A: Move to the left=• A: Idź w lewo +• D: Move to the right=• D: Idź w prawo +• S: Move backwards=• S: Idź w tył +• E: Sprint=• E: Biegnij +While standing on solid ground:=Podczas stania na stałym gruncie: +• Space: Jump=• Spacja: Skok +• Shift: Sneak=• Shift: Skradanie +While on a ladder, swimming in a liquid or fly mode is active=Podczas wspinania, pływania w płynie lub aktywnego trybu latania: +• Space: Move up=• Spacja: W górę +• Shift: Move down=• Shift: W dół +Extended movement (requires privileges):=Rozszerzone poruszanie: +• J: Toggle fast mode, makes you run or fly fast (requires “fast” privilege)=• J: Przełącz tryb szybki, co umożliwia szybkie bieganie i latanie (wymaga przywileju "fast") +• K: Toggle fly mode, makes you move freely in all directions (requires “fly” privilege)=• K: Przełącz tryb latania, co umożliwia swobodne poruszanie w dowolnym kierunku (wymaga przywileju "fly") +• H: Toggle noclip mode, makes you go through walls in fly mode (requires “noclip” privilege)=• H: Przełącz tryb noclip, co umożliwia przechodzenie przez ściany w trybie latania (wymaga przywileju "noclip") +• E: Move even faster when in fast mode=• E: Poruszaj się jeszcze szybciej w trybie szybkim +• E: Walk fast in fast mode=• Poruszaj się szybciej w trybie szybkim +World interaction:=Interakcja ze światem: +• Left mouse button: Punch / mine blocks / take items=• Lewy przycisk myszy: Uderz / kop bloki / weź przedmiot +• Left mouse button: Punch / mine blocks=• Lewy przycisk myszy: Uderz / kop bloki +• Right mouse button: Build or use pointed block=• Prawy przycisk myszy: Zbuduj lub użyj wskazywany blok +• Shift+Right mouse button: Build=• Shift+Prawy przycisk myszy: Zbuduj +• Roll mouse wheel: Select next/previous item in hotbar=• Kręć kółkiem myszy: Wybierz następny/poprzedni przedmiot w pasku szybkiego dostępu +• Roll mouse wheel / B / N: Select next/previous item in hotbar=• Kręć kółkiem myszy / B / N: Wybierz następny/poprzedni przedmiot w pasku szybkiego dostępu +• 1-9: Select item in hotbar directly=• 1-9: Wybierz przedmiot z pasku szybkiego dostępu +• Q: Drop item stack=• Q: Wyrzuć grupę przedmiotów +• Shift+Q: Drop 1 item=• Shift+Q: Wyrzuć jeden przedmiot +• I: Show/hide inventory menu=• I: Pokaż/schowaj menu ekwipunku +Inventory interaction:=Interakcja z ekwipunkiem: +See the entry “Basics > Inventory”.=Zobacz wpis "Podstawy > Ekwipunek". +Camera:=Kamera: +• Z: Zoom=• Z: Przybliż +• F7: Toggle camera mode=• F7: Zmień tryb kamery +• F8: Toggle cinematic mode=• F8: Zmień na tryb kinowy +Interface:=Interfejs: +• Esc: Open menu window (pauses in single-player mode) or close window=• Esc: Otwórz okno menu (zatrzymuje grę w trybie pojedynczego gracza) lub zamknij okno +• F1: Show/hide HUD=• F1: Pokaż/ukryj interfejs +• F2: Show/hide chat=• F2: Pokaż/ukryj czat +• F9: Toggle minimap=• F9: Przełącz minimapę +• Shift+F9: Toggle minimap rotation mode=• Shift+F9: Przełącz tryb rotacji minimapy +• F10: Open/close console/chat log=• F10: Otwórz/zamknij konsolę/okno czatu +• F12: Take a screenshot=• F12: Zrób zrzut ekranu +Server interaction:=Interakcja z serwerem: +• T: Open chat window (chat requires the “shout” privilege)=• T: Otwórz okno czatu (chat wymaga przywileju "shout") +• /: Start issuing a server command=• /: Rozpocznij wpisywanie komendy serwera +Technical:=Techniczne: +• R: Toggle far view (disables all fog and allows viewing far away, can make game very slow)=• R: Przełącz tryb dalekiego widzenia (wyłącza mgłę i pozwala widzieć odległe obiekty, może znacząco spowolnić grę) +• +: Increase minimal viewing distance=• +: Zwiększ minimalny zasięg widzenia +• -: Decrease minimal viewing distance=• -: Zmniejsz minimalny zasięg widzenia +• F3: Enable/disable fog=• F3: Włącz/wyłącz mgłę +• F5: Enable/disable debug screen which also shows your coordinates=• F5: Włącz/wyłącz ekran debug'u, który pokazuje również twoje położenie +• F6: Only useful for developers. Enables/disables profiler=• F6: Przydatne tylko dla deweloperów. Włącza/wyłącza profiler +• P: Only useful for developers. Writes current stack traces=• P: Przydatne tylko dla deweloperów. Zapisuje aktualny zrzut stosu +Players=Gracze +Players (actually: “player characters”) are the characters which users control.=Gracze (właściwie "postacie graczy") są postaciami kontrolowanymi przez użytkowników. +Players are living beings. They start with a number of health points (HP) and a number of breath points (BP).=Gracze są żywymi stworzeniami. Zaczynają z pewną liczbą punktów życia (HP) oraz punktów oddechu (BP). +Players are capable of walking, sneaking, jumping, climbing, swimming, diving, mining, building, fighting and using tools and blocks.=Gracze są w stanie chodzić, skradać się, skakać, wspinać, pływać, nurkować, kopać, budować walczyć oraz korzystać z narzędzi i bloków. +Players can take damage for a variety of reasons, here are some:=Gracze mogą otrzymać obrażenia z wielu powodów, oto niektóre: +• Taking fall damage=• Obrażenia od upadku +• Touching a block which causes direct damage=• Dotknięcie bloku który zadaje obrażenia +• Drowning=• Tonięcie +• Being attacked by another player=• Zaatakowanie przez innego gracza +• Being attacked by a computer enemy=• Zaatakowanie przez przeciwnika sterowanego przez komputer +At a health of 0, the player dies. The player can just respawn in the world.=Gdy zdrowie osiągnie poziom 0, gracz umiera. Gracz może wtedy odrodzić się w świecie. +Other consequences of death depend on the game. The player could lose all items, or lose the round in a competitive game.=Inne konsekwencje śmierci zależą od gry. Gracz może stracić wszystkie przedmioty, lub stracić punkty w grze konkurencyjnej. +Some blocks reduce breath. While being with the head in a block which causes drowning, the breath points are reduced by 1 for every 2 seconds. When all breath is gone, the player starts to suffer drowning damage. Breath is quickly restored in any other block.=Niektóre bloki zmniejszają oddech. Podczas przebywania w bloku powodującym topienie się, punkty oddechu są zmniejszane o 1 co 2 sekundy. Gdy punkty oddechu się skończą, gracz zacznie otrzymywać obrażenia od tonięcia. Oddech szybko odnawia się w dowolnym innym bloku. +Damage can be disabled on any world. Without damage, players are immortal and health and breath are unimportant.=Obrażenia mogą zostać wyłączone w dowolnym świecie. Bez obrażeń gracze są nieśmiertelni, a ich życie i oddech są nieistotne. +In multi-player mode, the name of other players is written above their head.=W trybie wieloosobowym imię innych graczy jest napisane powyżej ich głów. +Items=Przedmioty +Items are things you can carry along and store in inventories. They can be used for crafting, smelting, building, mining, and more. Types of items include blocks, tools, weapons and items only used for crafting.=Przedmioty są rzeczami które możesz przenosić i przechowywać w ekwipunku. Mogą być wykorzystane do wytwarzania, przetapiania, budowania, kopania i w innych celach. Typy przedmiotów to m.in. bloki, narzędzia bronie oraz przedmioty użyteczne tylko w wytwarzaniu. +An item stack is a collection of items of the same type which fits into a single item slot. Item stacks can be dropped on the ground. Items which drop into the same coordinates will form an item stack.=Grupa przedmiotów jest zbiorem przedmiotów tego samego typu, która mieści się w jednym miejscu na przedmiot. Grupy przedmiotów mogą zostać upuszczone na ziemię. Przedmioty, które zostaną upuszczone na te same współrzędne utworzą grupę przedmiotów. +Dropped item stacks will be collected automatically when you stand close to them.=Upuszczone grupy przedmiotów zostaną podniesione automatycznie gdy staniesz w ich pobliżu. +Items have several properties, including the following:=Przedmioty mają wiele właściwości, między innymi: +• Maximum stack size: Number of items which fit on 1 item stack=• Maksymalny rozmiar grupy: Liczba przedmiotów które mieszczą się w jednej grupie +• Pointing range: How close things must be to be pointed while wielding this item=• Zasięg wskazywania: Jak blisko muszą być przedmioty aby można na nie wskazać za pomocą tego przedmiotu +• Group memberships: See “Basics > Groups”=• Przynależność do grupy: Zobacz "Podstawy > Grupy" +• May be used for crafting or cooking=• Mogą być używane do wytwarzania lub pieczenia +Tools=Narzędzia +Some items may serve as a tool when wielded. Any item which has some special use which can be directly used by its wielder is considered a tool.=Niektóre przedmioty służą jako narzędzia gdy trzyma się je w rękach. Dowolny przedmiot, który ma specjalne użycia które mogą być bezpośrednio użyte przez jego posiadacza jest uznawany za narzędzie. +A common subset of tools is mining tools. These are important to break all kinds of blocks. Weapons are a kind of tool. There are of course many other possible tools. Special actions of tools are usually done by left-click or right-click.=Częstym podzbiorem narzędzi są narzędzia do kopania. Są one istotne przy niszczeniu różnych typów bloków. Bronie są innym rodzajem narzędzia. Jest oczywiście wiele innych możliwych narzędzi. Specjalne akcje narzędzi są zwykle aktywowane przy użyciu lewego lub prawego przycisku myszy. +When nothing is wielded, players use their hand which may act as tool and weapon.=Gdy nic nie jest trzymane, gracze używają swojej ręki, która może służyć jako narzędzie i broń. +Mining tools are important to break all kinds of blocks. Weapons are another kind of tool. There are some other more specialized tools. Special actions of tools are usually done by right-click.=Narzędzia do kopania są istotne do niszczenia różnych bloków. Innym rodzajem narzędzi są bronie. Istnieją również inne, bardzie wyspecjalizowane narzędzia. Specjalne akcje narzędzi są zwykle wykonywane przy użyciu lewego oraz prawego przycisku myszy. +When nothing is wielded, players use their hand which may act as tool and weapon. The hand is capable of punching and deals minimum damage.=Gdy nic nie jest trzymane gracze używają swojej dłoni, która może służyć za narzędzie i za broń. Ręką można uderzać co zadaje minimalne obrażenia. +Many tools will wear off when using them and may eventually get destroyed. The damage is displayed in a damage bar below the tool icon. If no damage bar is shown, the tool is in mint condition. Tools may be repairable by crafting, see “Basics > Crafting”.=Wiele narzędzi będzie się zużywać podczas używania, co w końcu sprawi, że zostaną zniszczone. Zużycie jest wyświetlane jako pasek poniżej ikony narzędzia. Jeśli pasek nie jest pokazywany, narzędzie jest w idealnym stanie. Narzędzia mogą być naprawiane przez wytwarzania, zobacz "Podstawy > Wytwarzanie". +Weapons=Bronie +Some items are usable as a melee weapon when wielded. Weapons share most of the properties of tools.=Niektóre przedmioty są przydatne jako bronie wręcz gdy trzymane. Bronie mają wiele podobnych własności co narzędzia. +Melee weapons deal damage by punching players and other animate objects. There are two ways to attack:=Bronie wręcz zadają obrażenia przy uderzaniu graczy i innych obiektów. +• Single punch: Left-click once to deal a single punch=• Pojedyncze uderzenie: Kliknij lewy przycisk myszy aby wykonać jedno uderzenie +• Quick punching: Hold down the left mouse button to deal quick repeated punches=• Szybkie uderzenia: Przytrzymaj lewy przycisk myszy aby zadać szybkie, powtarzające się uderzenia +There are two core attributes of melee weapons:=Dwie istotne cechy każdej broni wręcz: +• Maximum damage: Damage which is dealt after a hit when the weapon was fully recovered=• Maksymalne obrażenia: Obrażenia zadawane gdy broń przy uderzeniu gdy broń jest całkowicie ochłonięta +• Full punch interval: Time it takes for fully recovering from a punch=• Pełny okres uderzenia: Czas który jest potrzebny do ochłonięcia broni po uderzeniu +A weapon only deals full damage when it has fully recovered from a previous punch. Otherwise, the weapon will deal only reduced damage. This means, quick punching is very fast, but also deals rather low damage. Note the full punch interval does not limit how fast you can attack.=Broń zadaje pełne obrażenia tylko gdy jest w pełni ochłonięta z poprzedniego uderzenia. W przeciwnym wypadku zadane obrażenia będą zmniejszone. To oznacza, że szybkie uderzanie jest bardzo szybkie, ale zadaje niskie obrażenia. Zauważ, że pełny okres uderzenia nie jest limitem na to jak szybko możesz atakować. +There is a rule which sometimes makes attacks impossible: Players, animate objects and weapons belong to damage groups. A weapon only deals damage to those who share at least one damage group with it. So if you're using the wrong weapon, you might not deal any damage at all.=Istnieje reguła która sprawia, że ataki są czasem niemożliwe: Gracze, ruchome obiekty i bronie należą do grup obrażeń. Broń zadaje obrażenia tylko tym, którzy należą do przynajmniej jednej z jej grup obrażeń. +Pointing=Wskazywanie +“Pointing” means looking at something in range with the crosshair. Pointing is needed for interaction, like mining, punching, using, etc. Pointable things include blocks, players, computer enemies and objects.="Wskazywanie" oznacza patrzenia na coś w zasięgu celownikiem. Wskazywanie jest wymagane podczas interakcji takich jak kopanie, uderzanie, używanie itp. Wskazywalne obiekty to między innymi bloki, gracze, przeciwnicy komputerowi i obiekty. +To point something, it must be in the pointing range (also just called “range”) of your wielded item. There's a default range when you are not wielding anything. A pointed thing will be outlined or highlighted (depending on your settings). Pointing is not possible with the 3rd person front camera.=Aby na coś wskazać musi być to w zasięgu wskazywania (zwykle nazywanym po prostu "zasięgiem") trzymanego przez ciebie przedmiotu. Gdy nic nie jest trzymane jest to zasięg domyślny. Wskazywany przedmiot będzie obrysowany lub podświetlony (w zależności od twoich ustawień). Wskazywanie nie jest możliwe gdy włączona jest przednia kamera trzecioosobowa. +A few things can not be pointed. Most blocks are pointable. A few blocks, like air, can never be pointed. Other blocks, like liquids can only be pointed by special items.=Na niektóre rzeczy nie można wskazywać. Większość bloków jest wskazywalna. Na niektóre bloki, np. powietrze, nie można wskazać. Inne bloki, takie jak płyny, mogą być wskazane tylko przy użyciu specjalnych przedmiotów. +Camera=Kamera +There are 3 different views which determine the way you see the world. The modes are:=Istnieją 3 różne widoki, które definiują w jaki sposób będziesz obserwował świat. Te widoki to: +• 1: First-person view (default)=• 1: Widok pierwszoosobowy (domyślny) +• 2: Third-person view from behind=• 2: Widok trzecioosobowy od tyłu +• 3: Third-person view from the front=• 3: Widok trzecioosobowy od przodu +You can change the camera mode by pressing [F7].=Możesz zmienić widok kamery naciskając [F7]. +You might be able to zoom with [Z] to zoom the view at the crosshair. This allows you to look further.=Możesz być w stanie przybliżać widok naciskając [Z]. To pozawala spojrzeć dalej w kierunku celownika. +Zooming is a gameplay feature that might be enabled or disabled by the game. By default, zooming is enabled when in Creative Mode but disabled otherwise.=Przybliżanie jako cecha rozgrywki może być włączone lub wyłączone przez grę. Domyślnie przybliżanie jest włączone w trybie Kreatywny i wyłączone w przeciwnym przypadku. +There is also Cinematic Mode which can be toggled with [F8]. With Cinematic Mode enabled, the camera movements become more smooth. Some players don't like it, it is a matter of taste.=Istnieje również tryb kinowy, który może być włączony naciskając [F8]. Gdy jest on włączony ruchy kamery są bardziej wygładzone. Niektórzy gracze go nie lubią, jest to kwestia gustu. +By holding down [Z], you can zoom the view at your crosshair. You need the “zoom” privilege to do this.=Przytrzymując [Z] możesz przybliżyć widok na swoim celowniku. Potrzebujesz przywileju "zoom" aby to zrobić. +• Switch camera mode: [F7]=• Zmień widok kamery: [F7] +• Toggle Cinematic Mode: [F8]=• Przełącz tryb kinowy: [F8] +• Zoom: [Z]=• Przybliż: [Z] +Blocks=Bloki +The world of MineClone 2 is made entirely out of blocks (voxels, to be precise). Blocks can be added or removed with the correct tools.=Świat MineClone 2 jest w całości złożony z bloków (a bardziej precyzyjnie voxeli). Bloki mogą być dodawane lub usuwane przy użyciu odpowiednich narzędzi. +The world is made entirely out of blocks (voxels, to be precise). Blocks can be added or removed with the correct tools.=Świat jest w całości złożony z bloków (a bardziej precyzyjnie voxeli). Bloki mogą być dodawane lub usuwane przy użyciu odpowiednich narzędzi. +Blocks can have a wide range of different properties which determine mining times, behavior, looks, shape, and much more. Their properties include:=Bloki mogą mieć wiele różnych właściwości określających czas kopania, zachowanie, wygląd, kształt i wiele więcej. Te własności to między innymi: +• Collidable: Collidable blocks can not be passed through; players can walk on them. Non-collidable blocks can be passed through freely=• Zderzalne: Przez bloki z tą własnością nie można przechodzić; gracze mogą po nich chodzić. Przez nie-zderzalne bloki można swobodnie przechodzić. +• Pointable: Pointable blocks show a wireframe or a halo box when pointed. But you will just point through non-pointable blocks. Liquids are usually non-pointable but they can be pointed at by some special tools=• Wskazywalne: Te bloki pokażą obwód lub poświatę gdy zostaną wskazane. Ale przez niewskazywalne bloki będziesz wskazywała bloki znajdujące się za nimi. Płyny są zwykła niewskazywalne, ale można na nie wskazać przy użyciu specjalnych narzędzi. +• Mining properties: By which tools it can be mined, how fast and how much it wears off tools=• Własności kopania: Przez jakie narzędzia mogą być wykopane, jak szybko oraz jak bardzo zużyje to narzędzie +• Climbable: While you are at a climbable block, you won't fall and you can move up and down with the jump and sneak keys=• Wspinaczkowe: Gdy jesteś obok bloków wspinaczkowych nie spadniesz, oraz możesz poruszać się w górę i w dół korzystając z przycisków do skakania i skradania. +• Drowning damage: See the entry “Basics > Player”=• Obrażenia tonięcia: Zobacz wpis "Podstawy > Gracz" +• Liquids: See the entry “Basics > Liquids”=• Płyny: Zobacz wpis "Podstawy > Płyny" +• Group memberships: Group memberships are used to determine mining properties, crafting, interactions between blocks and more=• Przynależność do grup: Przynależności do grup definiują własności kopania, wytwarzania, interakcje między blokami i wiele więcej +Mining=Kopanie +Mining (or digging) is the process of breaking blocks to remove them. To mine a block, point it and hold down the left mouse button until it breaks.=Kopanie (lub wydobywanie) jest procesem niszczenia i usuwania bloków. Aby wykopać blok, wskaż na niego i przytrzymaj lewy przycisk myszy aż się zniszczy. +Blocks require a mining tool to be mined. Different blocks are mined by different mining tools, and some blocks can not be mined by any tool. Blocks vary in hardness and tools vary in strength. Mining tools will wear off over time. The mining time and the tool wear depend on the block and the mining tool. The fastest way to find out how efficient your mining tools are is by just trying them out on various blocks. Any items you gather by mining will drop on the ground, ready to be collected.=Bloki wymagają narzędzi do kopania aby je wykopać. Różne bloki są wykopywane przez różne narzędzia, a niektóre nie mogą być wykopane przez żadne narzędzie. Najszybszym sposobem testowania jak efektowne są twoje narzędzia do kopania jest po prostu wypróbowanie ich na różnych blokach. Wszystkie przedmioty które wykopiesz zostaną upuszczone na ziemię, gotowe do podniesienia. +After mining, a block may leave a “drop” behind. This is a number of items you get after mining. Most commonly, you will get the block itself. There are other possibilities for a drop which depends on the block type. The following drops are possible:=Po wykopaniu, blok może upuścić "zrzut". Jest to kilka przedmiotów zdobytych przez kopanie. Najczęściej będzie to wykopany blok. Możliwe są inne zrzuty zależne od typu bloku. Następujące zrzuty są możliwe: +• Always drops itself (the usual case)=• Zawsze wyrzuca siebie (typowy przypadek) +• Always drops the same items=• Zawsze wyrzuca te same przedmioty +• Drops items based on probability=• Wyrzuca przedmioty z pewnym prawdopodobieństwem +• Drops nothing=• Nie wyrzuca niczego +Building=Budowanie +Almost all blocks can be built (or placed). Building is very simple and has no delay.=Prawie wszystkie bloki mogą być zbudowane (lub postawione). Stawianie jest bardzo proste i natychmiastowe. +To build your wielded block, point at a block in the world and right-click. If this is not possible because the pointed block has a special right-click action, hold down the sneak key before right-clicking.=Aby postawić trzymany blok, wskaż na blok w świecie i kliknij prawy przycisk. Jeśli jest to niemożliwe, ponieważ wskazany blok ma specjalną akcję aktywowaną prawym przyciskiem myszy, przytrzymaj przycisk skradania przed kliknięciem prawego przycisku. +Blocks can almost always be built at pointable blocks. One exception are blocks attached to the floor; these can only be built on the floor.=Bloki prawie zawsze mogą być zbudowane na wskazywalnych blokach. Jednym z wyjątków są bloki przyczepione do podłogi; takie mogą być zbudowane tylko na podłodze. +Normally, blocks are built in front of the pointed side of the pointed block. A few blocks are different: When you try to build at them, they are replaced.=Zwykle, bloki są zbudowane przed wskazaną stroną wskazanego bloki. Niektóre bloki są inne: Gdy próbujesz na nich coś postawić są one tym zastępowane. +Liquids=Płyny +Liquids are special dynamic blocks. Liquids like to spread and flow to their surrounding blocks. Players can swim and drown in them.=Płyny są specjalnymi dynamicznymi blokami. Płyny lubią się rozprzestrzeniać i wpływać na otaczające bloki. Gracze mogą w nich pływać i tonąć. +Liquids usually come in two forms: In source form (S) and in flowing form (F).=Płyny zwykle pojawiają się w dwóch formach: W formie źródła (S) oraz w formie bieżącej (F). +Liquid sources have the shape of a full cube. A liquid source will generate flowing liquids around it from time to time, and, if the liquid is renewable, it also generates liquid sources. A liquid source can sustain itself. As long it is left alone, a liquid source will normally keep its place and does not drain out.=Źródła płynów są w kształcie pełnej kostki. Źródło płynu od czasu do czasu wygeneruje bieżący formę płynu w swoim otoczeniu oraz jeśli płyn jest odnawialny, utworzy również źródła płynu. Źródło płynu podtrzymuje siebie. Tak długo jak nie jest ruszane, źródło wody zostanie w miejscu i nie kończy się. +Flowing liquids take a sloped form. Flowing liquids spread around the world until they drain. A flowing liquid can not sustain itself and always comes from a liquid source, either directly or indirectly. Without a liquid source, a flowing liquid will eventually drain out and disappear.=Bieżące płyny przyjmują formę ściętą. Rozprzestrzeniają się one po świecie dopóki się nie wyczerpią. Bieżący płyn nie podtrzymuje sam siebie i zawsze powstaje ze źródła płynu, bezpośrednio lub pośrednio. Bez źródła płynu, płyn bieżący prędzej czy później wyczerpie się i zniknie. +All liquids share the following properties:=Wszystkie płyny mają następujące własności: +• All properties of blocks (including drowning damage)=• Wszystkie własności bloków (włączając w to obrażenia od tonięcia) +• Renewability: Renewable liquids can create new sources=• Odnawialność: Odnawialne płyny mogą tworzyć nowe źródła +• Flowing range: How many flowing liquids are created at maximum per liquid source, it determines how far the liquid will spread. Possible are ranges from 0 to 8. At 0, no flowing liquids will be created. Image 5 shows a liquid of flowing range 2=• Zasięg płynięcia: Ile maksymalnie płynów bieżących jest utworzonych przez źródło płynu. Definiuje to jak daleko płyn może się rozprzestrzenić. Możliwe wartości są od 0 do 8. Przy 0, żadne płyny bieżące nie będą utworzone. Obrazek 5 pokazuje płyn z zasięgiem płynięcia 2 +• Viscosity: How slow players move through it and how slow the liquid spreads=• Lepkość: Jak wolno gracze poruszają się przez niego i jak wolno płyn się rozprzestrzenia +Renewable liquids create new liquid sources at open spaces (image 2). A new liquid source is created when:=Odnawialne płyny mogą tworzyć nowe źródła płynów w wolnej przestrzeni (obrazek 2). Nowe źródło płynu jest tworzone gdy: +• Two renewable liquid blocks of the same type touch each other diagonally=• Dwa odnawialne źródła płynów tego samego typu stykają się po przekątnej +• These blocks are also on the same height=• Bloki te są na tej samej wysokości +• One of the two “corners” is open space which allows liquids to flow in=• Jeden z dwóch "rogów" jest wolną przestrzenią gdzie może wpłynąć płyn +When those criteria are met, the open space is filled with a new liquid source of the same type (image 3).=Gdy te kryteria są spełnione, wolna przestrzeń jest zapełniona źródłem płynu tego samego typu (obrazek 3). +Swimming in a liquid is fairly straightforward: The usual direction keys for basic movement, the jump key for rising and the sneak key for sinking.=Pływanie w płynie jest całkiem proste: Klawisze chodzenia powodują ruch w danym kierunku, przycisk skakania powoduje wznoszenia, a skradania opadanie. +The physics for swimming and diving in a liquid are:=Fizyka pływania i nurkowania w płynach jest następująca: +• The higher the viscosity, the slower you move=• Im wyższa lepkość, tym wolniej się poruszasz +• If you rest, you'll slowly sink=• Jeśli się nie ruszasz, będziesz powoli opadała +• There is no fall damage for falling into a liquid as such=• Nie ma obrażeń od upadku gdy wpadniesz do płynu +• If you fall into a liquid, you will be slowed down on impact (but don't stop instantly). Your impact depth is determined by your speed and the liquid viscosity. For a safe high drop into a liquid, make sure there is enough liquid above the ground, otherwise you might hit the ground and take fall damage=• Gdy wpadasz do płynu będziesz spowolniona przy zetknięciu (ale nie natychmiast). Zanurzenie po upadku jest ustalane na podstawie twojej szybkości oraz lepkości płynu. Żeby bezpiecznie skoczyć do płynu, upewnij się, że jest go wystarczająco dużo nad ziemię. W przeciwnym wypadku możesz uderzyć w ziemię i otrzymać obrażenia od upadku. +Liquids are often not pointable. But some special items are able to point all liquids.=Płyny są zwykle niewskazywalne, ale niektóre specjalne przedmioty mogą wskazywać na płyny. +Crafting=Wytwarzanie +Crafting is the task of combining several items to form a new item.=Wytwarzanie jest procesem łączenia i przetwarzania przedmiotów aby utworzyć nowy przedmiot. +To craft something, you need one or more items, a crafting grid (C) and a crafting recipe. A crafting grid is like a normal inventory which can also be used for crafting. Items need to be put in a certain pattern into the crafting grid. Next to the crafting grid is an output slot (O). Here the result will appear when you placed items correctly. This is just a preview, not the actual item. Crafting grids can come in different sizes which limits the possible recipes you can craft.=Aby coś wytworzyć potrzebujesz jednego lub więcej przedmiotów, siatki do wytwarzania oraz receptury. Siatka do wytwarzania jest jak zwykły ekwipunek, który może być użyty do wytwarzania. Przedmioty muszą być ułożone w konkretny wzór w siatce do wytwarzania. Obok siatki wytwarzania jest miejsce wyjściowe (O). Tutaj pojawi się rezultat gdy poprawnie umieścisz przedmioty. Jest to tylko podgląd, a nie faktyczny przedmiot. Siatki do wytwarzania mogą mieć różne rozmiary, co ogranicza liczbę receptur które możesz wytworzyć. +To complete the craft, take the result item from the output slot, which will consume items from the crafting grid and creates a new item. It is not possible to place items into the output slot.=Aby zakończyć wytwarzanie zabierze wynikowy przedmiot z miejsca wyjściowego. Skonsumuje to przedmioty z siatki do wytwarzania i utworzy nowy przedmiot. Nie da się umieszczać przedmiotów w miejscu wyjściowym. +A description on how to craft an item is called a “crafting recipe”. You need this knowledge to craft. There are multiple ways to learn crafting recipes. One way is by using a crafting guide, which contains a list of available crafting recipes. Some games provide crafting guides. There are also some mods which you can download online for installing a crafting guide. Another way is by reading the online manual of the game (if one is available).=Opis w jaki sposób uzyskać dany przedmiot nazywa się "recepturą wytwarzania". Potrzebujesz tej wiedzy do wytwarzania. Jest kilka sposobów by je poznać. Jednym z nich jest korzystanie z przewodnika do wytwarzania, który zawiera listę dostępnych receptur do wytwarzania. Niektóre gry dostarczają takie przewodniki. Istnieją także mody, które możesz pobrać z internetu dodające przewodniki. Innym sposobem jest przeczytanie instrukcji gry w internecie (jeśli taka jest dostępna). +Crafting recipes consist of at least one input item and exactly one stack of output items. When performing a single craft, it will consume exactly one item from each stack of the crafting grid, unless the crafting recipe defines replacements.=Receptury do wytwarzania składają się z przynajmniej jednego przedmiotu na wejściu i dokładnie jednej grupy przedmiotów wyjściowych. Podczas dokonywania pojedynczego wytwarzania skonsumowany zostanie dokładnie jeden przedmiot z każdej grupy w siatce wytwarzania, chyba, że receptura definiuje zamienniki. +There are multiple types of crafting recipes:=Istnieje kilka typów receptur: +• Shaped (image 2): Items need to be placed in a particular shape=• Kształtne (obrazek 2): Przedmioty muszą być ułożone w konkretny kształt +• Shapeless (images 3 and 4): Items need to be placed somewhere in input (both images show the same recipe)=• Bezkształtne (obrazki 3 i 4): Przedmioty muszą być ułożone gdzieś w wejściu (oba obrazki pokazują tę samą recepturę) +• Cooking: Explained in “Basics > Cooking”=• Pieczenie: Wyjaśnione w "Podstawy > Pieczenie" +• Repairing (image 5): Place two damaged tools into the crafting grid anywhere to get a tool which is repaired by 5%=• Naprawianie (obrazek 5): Postaw dwa uszkodzone narzędzia w siatce do wytwarzania w dowolnym miejscu aby uzyskać narzędzie naprawione o 5% +In some crafting recipes, some input items do not need to be a concrete item, instead they need to be a member of a group (see “Basics > Groups”). These recipes offer a bit more freedom in the input items. Images 6-8 show the same group-based recipe. Here, 8 items of the “stone” group are required, which is true for all of the shown items.=W niektórych recepturach, niektóre przedmioty wejściowe nie muszą być konkretnymi przedmiotami, tylko przynależeć do pewnej grupy (zobacz "Podstawy > Grupy"). Te receptury są nieco mniej restrykcyjne jeśli chodzi o wejściowe przedmioty. Obrazki 6-8 pokazują tę samą recepturę opartą o grupy. W tym przypadku 8 przedmiotów z grupy "kamień" są potrzebne, a wszystkie pokazane przedmioty do niej należą. +Rarely, crafting recipes have replacements. This means, whenever you perform a craft, some items in the crafting grid will not be consumed, but instead will be replaced by another item.=Czasami, receptury mają zamienniki. To oznacza, że po wykonaniu przetwarzania, niektóre przedmioty w siatce nie będą skonsumowane, a jedynie zamienione w inny przedmiot. +Cooking=Pieczenie +Cooking (or smelting) is a form of crafting which does not involve a crafting grid. Cooking is done with a special block (like a furnace), an cookable item, a fuel item and time in order to yield a new item.=Pieczenie (lub przetapianie) jest formą wytwarzania, która nie wymaga siatki do wytwarzania. Pieczenie jest wykonywane przy użyciu specjalnego bloku (np. pieca), przedmiotu który można upiec, paliwa oraz czasu potrzebnego na uzyskanie nowego przedmiotu. +Each fuel item has a burning time. This is the time a single item of the fuel keeps a furnace burning.=Każdy przedmiot będący paliwem ma czas wypalania. Jest to czas przez jaki pojedynczy przedmiot tego paliwa utrzymuje piec zapalony. +Each cookable item requires time to be cooked. This time is specific to the item type and the item must be “on fire” for the whole cooking time to actually yield the result.=Każdy przedmiot możliwy do upieczenia potrzebuje czasu by zostać upieczony. Czas ten jest przypisany do typu przedmiotu i każdy przedmiot musi być "na ogniu" przez cały ten czas by uzyskać przedmiot wynikowy. +Hotbar=Pasek szybkiego dostępu +At the bottom of the screen you see some squares. This is called the “hotbar”. The hotbar allows you to quickly access the first items from your player inventory.=Na dole swojego ekwipunku możesz zobaczyć kwadraty. To nazywa się "pasek szybkiego dostępu". Pozwala on na szybki dostęp do pierwszych przedmiotów z twojego ekwipunku. +You can change the selected item with the mouse wheel or the keyboard.=Możesz zmieniać wybrany przedmiot przy użyciu kółka myszy lub klawiatury. +• Select previous item in hotbar: [Mouse wheel up] or [B]=• Wybierz poprzedni przedmiot w pasku: [Kółko myszy w górę] lub [B] +• Select next item in hotbar: [Mouse wheel down] or [N]=• Wybierz następny przedmiot w pasku: [Kółko myszy w dół] lub [N] +• Select item in hotbar directly: [1]-[9]=• Wybierz bezpośrednio przedmiot w pasku: [1]-[9] +The selected item is also your wielded item.=Wybrany przedmiot jest również przedmiotem, który trzymasz. +Minimap=Minimapa +If you have a map item in any of your hotbar slots, you can use the minimap.=Jeśli masz przedmiot mapy w którymś z twoich miejsc na pasku szybkiego dostępu, możesz korzystać z minimapy. +Press [F9] to make a minimap appear on the top right. The minimap helps you to find your way around the world. Press it again to select different minimap modes and zoom levels. The minimap also shows the positions of other players.=Naciśnij [F9] aby minimapa pojawiła się w prawym górnym rogu. Minimapa pomoże ci odnaleźć się w świecie. Naciśnij [F9] ponownie aby wybrać inny tryb minimapy i stopień przybliżenia. Minimapa pokazuje również pozycję innych graczy. +There are 2 minimap modes and 3 zoom levels.=Są 2 tryby minimapy oraz 3 stopnie przybliżenia. +Surface mode (image 1) is a top-down view of the world, roughly resembling the colors of the blocks this world is made of. It only shows the topmost blocks, everything below is hidden, like a satellite photo. Surface mode is useful if you got lost.=Tryb powierzchni (obrazek 1) jest widokiem z lotu ptaka na świat, mniej więcej odzwierciedlającym kolory bloków z których stworzony jest świat. Pokazuje tylko najwyżej położone bloki, wszystko poniżej jest ukryte, podobnie jak zdjęcie satelitarne. Tryb ten jest przydatny gdy się zgubisz. +Radar mode (image 2) is more complicated. It displays the “denseness” of the area around you and changes with your height. Roughly, the more green an area is, the less “dense” it is. Black areas have many blocks. Use the radar to find caverns, hidden areas, walls and more. The rectangular shapes in image 2 clearly expose the position of a dungeon.=Tryb radaru (obrazek 2) jest bardziej skomplikowany. Pokazuje "gęstość" obszaru wokół ciebie i zmienia się z wysokością. Z grubsza, im bardziej zielony jest obszar, ty mniej "gęsty" jest. Czarne obszary mają wiele bloków. Użyj tego trybu by znaleźć jaskinie, ukryte obszary, ściany i więcej. Prostokątne kształty w obrazku 2 wyraźnie ujawniają pozycję lochów. +There are also two different rotation modes. In “square mode”, the rotation of the minimap is fixed. If you press [Shift]+[F9] to switch to “circle mode”, the minimap will instead rotate with your looking direction, so “up” is always your looking direction.=Istnieją również dwa różne tryby rotacji. W "trybie kwadratowym" rotacja minimapy jest ustalona. Jeśli naciśniesz [Shift]+[F9] aby zmienić na "tryb okręgu", minimapy będzie natomiast obracać się wraz z twoim kierunkiem patrzenia. +In some games, the minimap may be disabled.=W niektórych grach minimapa może być wyłączona. +• Toggle minimap mode: [F9]=• Przełącz tryb minimapy: [F9] +• Toggle minimap rotation mode: [Shift]+[F9]=• Przełącz tryb rotacji minimapy: [Shift]+[F9] +Inventory=Ekwipunek +Inventories are used to store item stacks. There are other uses, such as crafting. An inventory consists of a rectangular grid of item slots. Each item slot can either be empty or hold one item stack. Item stacks can be moved freely between most slots.=Ekwipunki są wykorzystywane do przechowywania grup przedmiotów. Mogą być również wykorzystywane w innych celach, np. wytwarzanie. Ekwipunek składa się z prostokątnej siatki miejsc na przedmioty. Każde miejsce na przedmioty może być puste lub zapełnione jedną grupą przedmiotów. Grupy przedmiotów można dowolnie przenosić pomiędzy miejscami. +You have your own inventory which is called your “player inventory”, you can open it with the inventory key (default: [I]). The first inventory slots are also used as slots in your hotbar.=Posiadasz swój własny ekwipunek nazywany "ekwipunkiem gracza", możesz go otworzyć klikając przycisk inwentarza (domyślnie: [I]). Pierwsze miejsca ekwipunku są również wykorzystywane jako miejsca na pasku szybkiego dostępu. +Blocks can also have their own inventory, e.g. chests and furnaces.=Bloki mogą mieć swój własny ekwipunek, np. skrzynie lub piece. +Inventory controls:=Sterowanie w ekwipunku +Taking: You can take items from an occupied slot if the cursor holds nothing.=Zabieranie: Możesz zabierać przedmioty z zajętego miejsca jeśli na kursorze niczego nie ma. +• Left click: take entire item stack=• Lewy przycisk: weź całą grupę przedmiotów +• Right click: take half from the item stack (rounded up)=• Prawy przycisk: weź połowę przedmiotów z grupy (zaokrąglone w górę) +• Middle click: take 10 items from the item stack=• Środkowy przycisk: weź 10 przedmiotów z grupy +• Mouse wheel down: take 1 item from the item stack=• Kółko myszy w dół: Weź 1 przedmiot z grupy +Putting: You can put items onto a slot if the cursor holds 1 or more items and the slot is either empty or contains an item stack of the same item type.=Wstawianie: Możesz wstawić przedmioty w miejsce jeśli na kursorze jest przynajmniej 1 przedmiot, a wskazane miejsce jest puste lub zawiera grupę przedmiotów tego samego typu. +• Left click: put entire item stack=• Lewy przycisk: Wstaw całą grupę przedmiotów +• Right click: put 1 item of the item stack=• Prawy przycisk: Wstaw 1 przedmiot z grupy +• Right click or mouse wheel up: put 1 item of the item stack=• Prawy przycisk lub kółko myszy w górę: Wstaw 1 przedmiot z grupy +• Middle click: put 10 items of the item stack=• Środkowy przycisk: wstaw 10 przedmiotów z grupy +Exchanging: You can exchange items if the cursor holds 1 or more items and the destination slot is occupied by a different item type.=Wymienianie: Możesz wymieniać przedmioty jeśli na kursorze jest przynajmniej jeden przedmiot, a we wskazanym miejscu znajduje się grupa innych przedmiotów. +• Click: exchange item stacks=• Kliknij: wymień grupy przedmiotów +Throwing away: If you hold an item stack and click with it somewhere outside the menu, the item stack gets thrown away into the environment.=Wyrzucanie: Jeśli trzymasz grupę przedmiotów i klikniesz poza menu ekwipunku, grupa przedmiotów zostanie wyrzucona w świat. +Quick transfer: You can quickly transfer an item stack to/from the player inventory to/from another item's inventory slot like a furnace, chest, or any other item with an inventory slot when that item's inventory is accessed. The target inventory is generally the most relevant inventory in this context.=Szybki transfer: Możesz szybko przemieszczać grupę przedmiotów z/do ekwipunku gracza do/z ekwipunku innego przedmiotu, takich jak piec, skrzynia czy innego z ekwipunkiem, gdy jego ekwipunek jest otworzony. Docelowy ekwipunek jest najczęściej najbardziej istotnym ekwipunkiem w takim kontekście. +• Sneak+Left click: Automatically transfer item stack=• Skradanie+Lewy przycisk: Automatycznie przenieś grupę przedmiotów +Online help=Pomoc online +You may want to check out these online resources related to MineClone 2.=Możesz chcieć zobaczyć na te zasoby online powiązane z MineClone 2. +MineClone 2 download and forum discussion: =MineClone 2 pobieranie oraz dyskusja na forum: +Here you find the most recent version of MineClone 2 and can discuss it.=Tutaj możesz znaleźć najnowszą wersję MineClone 2 i porozmawiać o niej +Bug tracker: =Śledzenie błędów: +Report bugs here.=Zgłaszaj tu zauważone błędy. +Minetest links:=Linki dotyczące Minetest: +You may want to check out these online resources related to Minetest:=Możesz chcieć zobaczyć te zasoby online dotyczące Minetest +Official homepage of Minetest: =Oficjalna strona Minetest: +The main place to find the most recent version of Minetest, the engine used by MineClone 2.=Miejsce gdzie można znaleźć najnowszą wersję Minetesta, silnika wykorzystywanego przez MineClone 2. +The main place to find the most recent version of Minetest.=Miejsce gdzie można znaleźć najnowszą wersję Minetesta. +Community wiki: =Wiki społeczności: +A community-based documentation website for Minetest. Anyone with an account can edit it! It also features a documentation of Minetest Game.=Utrzymywana przez społeczność dokumentacja na temat Minetest. Każdy z kontem może ją edytować! Znajduje się na niej również dokumentacja Gry Minetest. +Minetest forums: =Forum Minetest: +A web-based discussion platform where you can discuss everything related to Minetest. This is also a place where player-made mods and games are published and discussed. The discussions are mainly in English, but there is also space for discussion in other languages.=Platforma dyskusyjna, gdzie możesz porozmawiać na wszystkie tematy związane z Minetestem. Jest to również miejsce gdzie stworzone przez graczy mody i gry są publikowane i omawiane. Rozmowy są prowadzone głównie po angielsku ale jest również miejsce na rozmowy w innych językach. +Chat: =Czat: +A generic Internet Relay Chat channel for everything related to Minetest where people can meet to discuss in real-time. If you do not understand IRC, see the Community Wiki for help.=Ogólne kanał IRC na dowolny temat związany z Minetest, gdzie ludzie mogą się spotkać i rozmawiać w czasie rzeczywistym. Jeśli nie rozumiesz IRC, zobacz na Wiki społeczności by znaleźć pomoc. +Groups=Grupy +Items, players and objects (animate and inanimate) can be members of any number of groups. Groups serve multiple purposes:=Przedmioty, gracze i obiekty (ruchome i nieruchome) mogą przynależeć do dowolnej liczby grup. Grupy pełnią kilka funkcji: +• Crafting recipes: Slots in a crafting recipe may not require a specific item, but instead an item which is a member of a particular group, or multiple groups=• Receptury wytwarzania: Miejsca w recepturze mogą nie wymagać konkretnego przedmiotu, lecz przedmiotu, który przynależy do konkretnej grupy, lub kilku grup +• Digging times: Diggable blocks belong to groups which are used to determine digging times. Mining tools are capable of digging blocks belonging to certain groups=• Czas kopania: Bloki które można wykopać należą do grupy, które definiują czas ich kopania. Narzędzia do kopania są w stanie kopać przedmioty należące do pewnych grup +• Block behavior: Blocks may show a special behaviour and interact with other blocks when they belong to a particular group=• Zachowanie bloku: Bloki mogą wykazywać się pewnym zachowaniem i wchodzić w interakcję z innymi blokami gdy należą do pewnych grup +• Damage and armor: Objects and players have armor groups, weapons have damage groups. These groups determine damage. See also: “Basics > Weapons”=• Obrażenia i zbroja: Obiekty i gracze mają grupy zbroi, bronie mają grupy obrażeń. Te grupy definiują obrażenia. Zobacz również: "Podstawy > Bronie" +• Other uses=• Inne użycia +In the item help, many important groups are usually mentioned and explained.=We wpisach o przedmiotach wiele istotnych grup jest zwykle wymienionych i opisanych. +Glossary=Słowniczek +This is a list of commonly used terms:=Jest to lita często używanych terminów: +Controls:=Sterowanie: +• Wielding: Holding an item in hand=• Trzymanie: Posiadanie przedmiotu w ręce +• Pointing: Looking with the crosshair at something in range=• Wskazywanie: Patrzenie na coś w zasięgu celownikiem +• Dropping: Throwing an item or item stack to the ground=• Upuszczanie: Wyrzucenie przedmiotu lub grupy przedmiotów na ziemię +• Punching: Attacking with left-click, is also used on blocks=• Uderzanie: Atakowanie lewym przyciskiem myszy, używane również na blokach +• Sneaking: Walking slowly while (usually) avoiding to fall over edges=• Skradanie: Powolne chodzenie i (zwykle) unikanie spadania z bloków +• Climbing: Moving up or down a climbable block=• Wspinanie: Wchodzenie w górę lub schodzenie w dół po wspinaczkowych blokach +Blocks:=Bloki: +• Block: Cubes that the worlds are made of=• Blok: Kostki z którego stworzony jest świat +• Mining/digging: Using a mining tool to break a block=• Kopanie/Wydobywanie: Używanie przedmiotów do kopania do niszczenia bloków +• Building/placing: Putting a block somewhere=• Budowanie/Umieszczanie: Wstawianie gdzieś bloku +• Drop: Items you get after mining a block=• Zrzut: Przedmioty uzyskane po wykopaniu bloku +• Using a block: Right-clicking a block to access its special function=• Używanie bloku: Kliknięcie prawym przyciskiem na blok aby uruchomić jego specjalną funkcję +Items:=Przedmioty: +• Item: A single thing that players can possess=• Przedmiot: Pojedyncza rzecz, którą gracz może posiadać +• Item stack: A collection of items of the same kind=• Grupa przedmiotów: Zbiór przedmiotów tego samego typu +• Maximum stack size: Maximum amount of items in an item stack=• Maksymalny rozmiar grupy: Maksymalna liczba przedmiotów w grupie przedmiotów +• Slot / inventory slot: Can hold one item stack=• Miejsce / miejsce w ekwipunku: Może przechowywać jedną grupę przedmiotów +• Inventory: Provides several inventory slots for storage=• Ekwipunek: Dostarcza kilka miejsc w ekwipunku do przechowywania +• Player inventory: The main inventory of a player=• Ekwipunek gracza: Główny ekwipunek gracza +• Tool: An item which you can use to do special things with when wielding=• Narzędzie: Przedmiot, który można wykorzystać w specjalny sposób podczas trzymania +• Range: How far away things can be to be pointed by an item=• Zasięg: Jak dalekie rzeczy mogą być wskazane przedmiotem +• Mining tool: A tool which allows to break blocks=• Narzędzie do kopania: Narzędzie pozwalające niszczyć bloki +• Craftitem: An item which is (primarily or only) used for crafting=• Przedmiot do wytwarzania: Przedmiot który jest (głównie lub tylko) wykorzystywany do wytwarzania. +Gameplay:=Rozgrywka +• “heart”: A single health symbol, indicates 2 HP=• "serce": Pojedynczy symbol zdrowia, reprezentujący 2 HP +• “bubble”: A single breath symbol, indicates 1 BP=• "bąbel": Pojedynczy symbol oddechu, reprezentujący 1 BP +• HP: Hit point (equals half 1 “heart”)=• HP: Punkt zdrowia (równy połowie serca) +• BP: Breath point, indicates breath when diving=• BP: Punkt oddechu reprezentujący ilość powietrza podczas nurkowania +• Mob: Computer-controlled enemy=• Mob: Przeciwnik sterowany przez komputer +• Crafting: Combining multiple items to create new ones=• Wytwarzanie: Łączenie kilku przedmiotów w celu uzyskania innych +• Crafting guide: A helper which shows available crafting recipes=• Przewodnik wytwarzania: Pomocniczy spis dostępnych receptur wytwarzania +• Spawning: Appearing in the world=• Spawnowanie: Pojawienie się w świecie +• Respawning: Appearing again in the world after death=• Odradzanie: Ponownie pojawienie się w świecie po śmierci +• Group: Puts similar things together, often affects gameplay=• Grupa: Łączy podobne rzeczy razem, często wpływa na rozgrywkę +• noclip: Allows to fly through walls=• noclip: Pozwala przelatywać przez ściany +Interface=Interfejs: +• Hotbar: Inventory slots at the bottom=• Pasek szybkiego dostępu: Miejsca ekwipunku na dole ekranu +• Statbar: Indicator made out of half-symbols, used for health and breath=• Pasek statusu: Wskaźniki składające się z symboli używane dla oznaczania życia oraz oddechu +• Minimap: The map or radar at the top right=• Minimapa: Mapa lub radar w prawym górnym rogu ekranu +• Crosshair: Seen in the middle, used to point at things=• Celownik: Widoczny na środku ekranu, używany do wskazywania na rzeczy +Online multiplayer:=Gra wieloosobowa w internecie: +• PvP: Player vs Player. If active, players can deal damage to each other=• PvP: Gracz kontra Gracz. Jeśli ten tryb jest aktywny, gracze mogą zadawać sobie obrażenia +• Griefing: Destroying the buildings of other players against their will=• Griefowanie: Celowe niszczenie budynków innych graczy wbrew ich woli +• Protection: Mechanism to own areas of the world, which only allows the owners to modify blocks inside=• Ochrona: Mechanizm pozwalający wejść w posiadanie pewnych części świata, co pozwala tylko właścicielom modyfikować bloki wewnątrz +Technical terms:=Techniczne terminy: +• Minetest: This game engine=• Minetest: Ten silnik gier +• MineClone 2: What you play right now=• MineClone 2: To w co teraz grasz +• Minetest Game: A game for Minetest by the Minetest developers=• Gra Minetest: Gra w Minetest napisana przez jego twórców +• Game: A complete playing experience to be used in Minetest; such as a game or sandbox or similar=• Gra: Kompletny doświadczenie do wykorzystania w Minetest; takie jak gry, piaskownice i podobne +• Mod: A single subsystem which adds or modifies functionality; is the basic building block of games and can be used to further enhance or modify them=• Mod: Pojedynczy system, który dodaje, lub modyfikuje funkcjonalność; jest podstawowym blokiem budowalnym gier i może być wykorzystywany do dalszego urozmaicania i modyfikowania ich +• Privilege: Allows a player to do something=• Przywilej: Pozwala graczowi coś zrobić +• Node: Other word for “block”=• Węzeł: Inna nazwa na "blok" +Settings=Ustawienia +There is a large variety of settings to configure Minetest. Pretty much every aspect can be changed that way.=Jest wiele różnych ustawień pozwalających zmodyfikować działanie Minetesta. Niemal każdy aspekt może być w ten sposób zmieniony. +These are a few of the most important gameplay settings:=Oto kilka najważniejszych ustawień dotyczących rozgrywki: +• Damage enabled (enable_damage): Enables the health and breath attributes for all players. If disabled, players are immortal=• Włączone obrażenia (enable_damage): Włącza paski zdrowia i oddechu. Jeśli wyłączone, gracze są nieśmiertelni +• Creative Mode (creative_mode): Enables sandbox-style gameplay focusing on creativity rather than a challenging gameplay. The meaning depends on the game; usual changes are: Reduced dig times, easy access to almost all items, tools never wear off, etc.=• Tryb kreatywny (creative_mode): Włącza rozgrywkę w stylu piaskownicy, skupiająca się na kreatywności a nie wyzwaniach. Dokładne znaczenie zależy od gry; najczęstsze zmiany to: Zmniejszony czas kopania, łatwy dostęp do niemal wszystkich przedmiotów, narzędzie się nie wykorzystują itp. +• PvP (enable_pvp): Short for “Player vs Player”. If enabled, players can deal damage to each other=• PvP (enable_pvp): Skrót od "Player vs Player" (gracz kontra gracz). Jeśli włączone, gracze mogą zadawać sobie obrażenia +For a full list of all available settings, use the “All Settings” dialog in the main menu.=Aby zobaczyć pełną listę dostępnych ustawień, użyj przycisku "Wszystkie ustawienia" w menu głównym. +Movement modes=Tryby poruszania +You can enable some special movement modes that change how you move.=Możesz uruchomić specjalne tryby poruszania, które zmieniają sposób w jaki się przemieszczasz. +Pitch movement mode:=Alternatywny tryb poruszania bez-ważkiego: +• Description: If this mode is activated, the movement keys will move you relative to your current view pitch (vertical look angle) when you're in a liquid or in fly mode.=• Opis: Jeśli ten tryb jest włączony, klawisze ruchu będą poruszać cię prostopadle do kierunku patrzenia, gdy jesteś w płynach lub w trybie latania. +• Default key: [L]=• Domyślny przycisk: [L] +• No privilege required=• Nie potrzeba żadnego przywileju +Fast mode:=Tryb szybki: +• Description: Allows you to move much faster. Hold down the the “Use” key [E] to move faster. In the client configuration, you can further customize fast mode.=• Opis: Pozwala poruszać się znacznie szybciej. Przytrzymaj swój przycisk "Używania" [E] aby poruszać się szybciej. W konfiguracji klienta możesz dokładniej skonfigurować tryb szybki. +• Default key: [J]=• Domyślny przycisk: [J] +• Required privilege: fast=• Potrzebny przywilej: fast +Fly mode:=Tryb latania: +• Description: Gravity doesn't affect you and you can move freely in all directions. Use the jump key to rise and the sneak key to sink.=• Opis: Grawitacja przestaje na ciebie wpływać i możesz swobodnie poruszać się w dowolnym kierunku. Użyj przycisku skoku aby się wznosić, a przycisku skradania aby opadać. +• Default key: [K]=• Domyślny przycisk: [K] +• Required privilege: fly=• Potrzebny przywilej: fly +Noclip mode:=Tryb noclip: +• Description: Allows you to move through walls. Only works when fly mode is enabled, too.=• Opis: Pozwala przechodzić przez ściany. Działa tylko gdy uruchomiony jest tryb latania. +• Default key: [H]=• Domyślny przycisk: [H] +• Required privilege: noclip=• Potrzebny przywilej: noclip +Console=Konsola +With [F10] you can open and close the console. The main use of the console is to show the chat log and enter chat messages or server commands.=Naciskając [F10] możesz otworzyć i zamknąć konsolę. Głównym zastosowaniem konsoli jest wyświetlenie czatu oraz wysyłanie wiadomości lub wpisywanie komend serwera. +Using the chat or server command key also opens the console, but it is smaller and will be closed after you sent a message.=Korzystanie z przycisku czatu lub komand serwera również otwiera konsolę, będzie ona jednak mniejsza i zostanie zamknięta po wysłaniu wiadomości. +Use the chat to communicate with other players. This requires you to have the “shout” privilege.=Użyj czatu by komunikować się z innymi graczami. Wymaga to przywileju "shout". +Just type in the message and hit [Enter]. Public chat messages can not begin with “/”.=Aby to zrobić wpisz wiadomość i naciśnij [Enter]. Publiczne wiadomości nie mogą rozpoczynać się od znaku "/". +You can send private messages: Say “/msg ” in chat to send “” which can only be seen by .=Możesz wysyłać prywatne wiadomości: Napisz "/msg " w czacie aby wysłać "" widoczną tylko przez . +There are some special controls for the console:=W konsoli obowiązuje kilka specjalnych metod sterowania: +• [F10] Open/close console=• [F10] Otwórz/zamknij konsolę +• [Enter]: Send message or command=• [Enter]: Wyślij wiadomość lub komendę +• [Tab]: Try to auto-complete a partially-entered player name=• [Tab]: Spróbuj dokończyć częściowo wprowadzone imię gracza +• [Ctrl]+[Left]: Move cursor to the beginning of the previous word=• [Ctrl]+[Lewo]: Przenieś kursor na początek poprzedniego słowa +• [Ctrl]+[Right]: Move cursor to the beginning of the next word=• [Ctrl]+[Prawo]: Przenieś kursor na początek następnego słowa +• [Ctrl]+[Backspace]: Delete previous word=• [Ctrl]+[Backspace]: Usuń poprzednie słowo +• [Ctrl]+[Delete]: Delete next word=• [Ctrl]+[Delete]: Usuń następne słowo +• [Ctrl]+[U]: Delete all text before the cursor=• [Ctrl]+[U]: Usuń cały tekst przed kursorem +• [Ctrl]+[K]: Delete all text after the cursor=• [Ctrl]+[K]: Usuń cały tekst po kursorze +• [Page up]: Scroll up=• [Page up]: Przewiń do góry +• [Page down]: Scroll down=• [Page down]: Przewiń w dół +There is also an input history. Minetest saves your previous console inputs which you can quickly access later:=Istnieje również historia wprowadzania. Minetest zapisuje wprowadzone komendy, do szybkiego dostępu później: +• [Up]: Go to previous entry in history=• [Góra]: Idź do poprzedniej komendy w historii +• [Down]: Go to next entry in history=• [Dół]: Idź do następnej komendy w historii +Server commands=Komendy serwera +Server commands (also called “chat commands”) are little helpers for advanced users. You don't need to use these commands when playing. But they might come in handy to perform some more technical tasks. Server commands work both in multi-player and single-player mode.=Komendy serwera (zwane również "komendy czatu") są drobnymi pomocnymi komendami dla zaawansowanych użytkowników. Nie musisz korzystać z tych komend podczas grania, ale mogą okazać się przydatne przy wykonywaniu technicznych zadań. Działają one zarówno w grze wieloosobowej i jednoosobowej. +Server commands can be entered by players using the chat to perform a special server action. There are a few commands which can be issued by everyone, but some commands only work if you have certain privileges granted on the server. There is a small set of basic commands which are always available, other commands can be added by mods.=Komendy serwera mogą być wprowadzane przy użyciu czatu, aby wykonać akcje na serwerze. Niektóre komendy mogą być wywołane przez każdego, ale niektóre działają tylko jeśli masz przyznane przywileje na serwerze. Mały zbiór podstawowych komend dostępny jest zawsze, inne komendy mogą być dodane przez mody. +To issue a command, simply type it like a chat message or press Minetest's command key (default: [/]). All commands have to begin with “/”, for example “/mods”. The Minetest command key does the same as the chat key, except that the slash is already entered.=Aby wywołać komendę, po prostu wpisze ją jako wiadomość czatu lub kliknij przycisk komend Minetesta (domyślnie: [/]). Wszystkie komendy muszą zaczynać się od "/', np. "/mods". Przycisk komend Minetesta robi dokładnie to samo co przycisk czatu, ale "/" jest od razu wpisany. +Commands may or may not give a response in the chat log, but errors will generally be shown in the chat. Try it for yourselves: Close this window and type in the “/mods” command. This will give you the list of available mods on this server.=Komendy mogą, ale nie muszą wypisać odpowiedź w czacie, ale błędy będą zwykle pokazane w czacie. Sama spróbuj: Zamknij to okno i wpisz komendę "/mods". Ta komenda wypiszę listę dostępnych modów na tym serwerze. +“/help all” is a very important command: You get a list of all available commands on the server, a short explanation and the allowed parameters. This command is also important because the available commands often differ per server.="/help all" jest bardzo ważną komendą: Zostanie ci pokazana lista wszystkich dostępnych komend na serwerze, krótkie wyjaśnienie oraz dozwolone parametry. Ta komenda jest również ważna, ponieważ dostępne komendy będą inne w zależności od serwera. +Commands are followed by zero or more parameters.=Po komendach mogą wystąpić parametry. +In the command reference, you see some placeholders which you need to replace with an actual value. Here's an explanation:=W opisie komend możesz zobaczyć tekst zastępczy, który musisz zamienić na faktyczną wartość. Oto krótkie wyjaśnienie: +• Text in greater-than and lower-than signs (e.g. “”): Placeholder for a parameter=• Teks pomiędzy symbolami większe niż oraz mniejsze niż (np. ""): Tekst zastępczy dla parametru +• Anything in square brackets (e.g. “[text]”) is optional and can be omitted=• Cokolwiek w nawiasach kwadratowych (np. "[tekst]") jest opcjonalne i może być pominięte +• Pipe or slash (e.g. “text1 | text2 | text3”): Alternation. One of multiple texts must be used (e.g. “text2”)=• Pionowa kreska lub slesz (np. "tekst1 | tekst2 | tekst3"): Alternatywa. Jeden z wymienionych tekstów musi być użyty (np. "tekst2") +• Parenthesis: (e.g. “(word1 word2) | word3”): Groups multiple words together, used for alternations=• Nawiasy (np. "((słowo1 słowo2) | słowo3)"): Grupuje wiele słów razem, używane przy alternatywach +• Everything else is to be read as literal text=• Wszystko inne powinno być czytane jako dosłowny tekst +Here are some examples to illustrate the command syntax:=Oto kilka przykładów ilustrujących składnię komend: +• /mods: No parameters. Just enter “/mods”=• /mods: Brak parametrów. Po prostu wpisz "/mods" +• /me : 1 parameter. You have to enter “/me ” followed by any text, e.g. “/me orders pizza”=• /ja : 1 parametr. Musisz wpisać "/ja ", a następnie dowolny tekst, np. "/ja zamawiam pizzę" +• /give : Two parameters. Example: “/give Player default:apple”=• /give : Dwa parametry. Przykładowo: "/give gracz default:apple" +• /help [all|privs|]: Valid inputs are “/help”, “/help all”, “/help privs”, or “/help ” followed by a command name, like “/help time”=• /help [all|privs|]: Poprawne użycia tej komendy to "/help", "/help all", "/help privs" lub "/help ", po którym następują nazwa komendy, np. "/help mods" +• /spawnentity [,,]: Valid inputs include “/spawnentity boats:boat” and “/spawnentity boats:boat 0,0,0”=• /spawnentity [,,]: Poprawne użycia tej komendy to np. "/spawnentity boats:boat" oraz "/spawnentity boats:boat 0,0,0" +Some final remarks:=Kilka uwag na koniec: +• For /give and /giveme, you need an itemstring. This is an internally used unique item identifier which you may find in the item help if you have the “give” or “debug” privilege=• Aby użyć komend /give oraz /giveme, potrzebujesz nazwy przedmiotu. Jest to używany wewnętrznie unikalny identyfikator, który możesz znaleźć w pomocy jeśli masz przywileje "give" lub "debug" +• For /spawnentity you need an entity name, which is another identifier=• Aby użyć /spawnentity musisz znać nazwę obiektu, która podobnie jest identyfikatorem +Privileges=Przywileje +Each player has a set of privileges, which differs from server to server. Your privileges determine what you can and can't do. Privileges can be granted and revoked from other players by any player who has the privilege called “privs”.=Każdy gracz ma zbiór przywilejów, które są różne w zależności od serwera. Twoje przywileje definiują co możesz, a czego nie możesz robić. Przywileje mogą być nadane i odebrane przez dowolnego gracza, który ma przywilej "privs". +On a multiplayer server with the default configuration, new players start with the privileges called “interact” and “shout”. The “interact” privilege is required for the most basic gameplay actions such as building, mining, using, etc. The “shout” privilege allows to chat.=Na serwerze z domyślną konfiguracją nowi gracze zaczynają z przywilejami "interact" oraz "shout". Przywilej "interact" pozwala na podstawowe akcje gry takie jak budowanie, kopanie, używanie itp. Przywilej "shout" pozwala na używanie czatu. +There is a small set of core privileges which you'll find on every server, other privileges might be added by mods.=Mały zbiór bazowych przywilejów znajdziesz na każdym serwerze, inne przywileje mogą zostać dodane przez mody. +To view your own privileges, issue the server command “/privs”.=Aby zobaczyć swoje przywileje, użyj komendy serwera "/privs". +Here are a few basic privilege-related commands:=Oto kilka podstawowych komend związanych z przywilejami: +• /privs: Lists your privileges=• /privs: Pokazuje twoje przywileje +• /privs : Lists the privileges of =• /privs : Pokazuje przywileje +• /help privs: Shows a list and description about all privileges=• /help privs: Pokazuje listę i opis wszystkich przywilejów +Players with the “privs” privilege can modify privileges at will:=Gracze z przywilejem "privs" mogą zmieniać przywileje jak chcą: +• /grant : Grant to =• /grant : Nadal +• /revoke : Revoke from =• /revoke : Odbierz +In single-player mode, you can use “/grantme all” to unlock all abilities.=W trybie jednoosobowym możesz użyć "/grantme all" aby odblokować wszystkie umiejętności. +Light=Światło +As the world is entirely block-based, so is the light in the world. Each block has its own brightness. The brightness of a block is expressed in a “light level” which ranges from 0 (total darkness) to 15 (as bright as the sun).=Jako, że świat jest całkowicie oparty na blokach, jest tak również w przypadku światła. Każdy blok ma swoją własną jasność. Jasność bloku jest wyrażona w "poziomie oświetlenia", który przyjmuje wartości od 0 (zupełnie ciemny) do 15 (jasny jak słońce). +There are two types of light: Sunlight and artificial light.=Są dwa typy światła: słoneczne oraz sztuczne. +Artificial light is emitted by luminous blocks. Artificial light has a light level from 1-14.=Światło sztuczne jest emitowane przez oświetlające bloki. Sztuczne światło ma poziom oświetlenia od 1 do 14. +Sunlight is the brightest light and always goes perfectly straight down from the sky at each time of the day. At night, the sunlight will become moonlight instead, which still provides a small amount of light. The light level of sunlight is 15.=Światło słoneczne jest najjaśniejszym światłem i zawsze świeci bezpośrednio w dół w trakcie dnia. W nocy światło to zamieni się w księżycowe, które wciąż daje niewielką ilość światła. Poziom oświetlenia słonecznego jest równy 15. +Blocks have 3 levels of transparency:=Bloki mają 3 poziomy przeźroczystości: +• Transparent: Sunlight goes through limitless, artificial light goes through with losses=• Przeźroczysty: Światło słoneczne przenika bez strat, sztuczne przenika ze spadkiem +• Semi-transparent: Sunlight and artificial light go through with losses=• Półprzeźroczysty: Światło słoneczne i sztuczne przenika ze stratą jasności +• Opaque: No light passes through=• Nieprzeźroczysty: Światło nie przenika +Artificial light will lose one level of brightness for each transparent or semi-transparent block it passes through, until only darkness remains (image 1).=Światło sztuczne będzie traciło jeden poziom jasności z każdym przeźroczystym lub nieprzeźroczystym blokiem przez który przenika, dopóki nie pozostanie tylko ciemność (obrazek 1). +Sunlight will preserve its brightness as long it only passes fully transparent blocks. When it passes through a semi-transparent block, it turns to artificial light. Image 2 shows the difference.=Światło słoneczne zachowuje swoją jasność tak długo jak przenika tylko przez w pełni przeźroczyste bloki. Gdy przenika przez półprzeźroczyste bloki, zamienia się w światło sztuczne. Obrazek 2 pokazuje różnicy. +Note that “transparency” here only means that the block is able to carry brightness from its neighboring blocks. It is possible for a block to be transparent to light but you can't see trough the other side.=Zwróć uwagę, że "przeźroczystość" odnosi się tutaj tylko do możliwości przenoszenia poziomu oświetlenia z sąsiednich bloków. Jest możliwe by blok był przeźroczysty dla światła, ale nie będziesz w stanie przez niego zobaczyć. +Coordinates=Współrzędne +The world is a large cube. And because of this, a position in the world can be easily expressed with Cartesian coordinates. That is, for each position in the world, there are 3 values X, Y and Z.=Świat jest wielką kostką. I z tego powodu pozycja w świecie może być łatwo wyrażona we współrzędnych kartezjańskich. To oznacza, że dla każdej pozycji na świecie są 3 wartości X, Y oraz Z. +Like this: (5, 45, -12)=Na przykład: (5, 45, -12) +This refers to the position where X@=5, Y@=45 and Z@=-12. The 3 letters are called “axes”: Y is for the height. X and Z are for the horizontal position.=To opisuje pozycje w której X@=5, Y@=45 i Z@=-12. Te 3 litery nazywamy "osiami": Y jest wysokością, X i Z są dla pozycji poziomej. +The values for X, Y and Z work like this:=Wartości dla X, Y i Z działają następująco: +• If you go up, Y increases=• Jeśli pójdziesz w górę, Y się zwiększy +• If you go down, Y decreases=• Jeśli pójdziesz w dół, Y się zmniejszy +• If you follow the sun, X increases=• Jeśli podążysz za słońcem, X się zwiększy +• If you go to the reverse direction, X decreases=• Jeśli pójdziesz w przeciwnym kierunku, X się zmniejszy +• Follow the sun, then go right: Z increases=• Podążaj za słońcem następnie, w prawo: Z się zwiększy +• Follow the sun, then go left: Z decreases=• Podążaj za słońcem następnie, w lewo: Z się zmniejszy +• The side length of a full cube is 1=• Długość boku jednego sześcianu wynosi 1 +You can view your current position in the debug screen (open with [F5]).=Możesz zobaczyć swoją aktualną pozycję na ekranie debug (otwórz go naciskając [F5]). + +# MCL2 extensions +Creative Mode=Tryb kreatywny +Enabling Creative Mode in MineClone 2 applies the following changes:=Włączenie trybu kreatywnego w MineClone 2 aplikuje następujące zmiany: +• You keep the things you've placed=• Nie tracisz postawionych rzeczy +• Creative inventory is available to obtain most items easily=• Kreatywny ekwipunek jest dostępny, który pozwala łatwo zdobywać przedmioty +• Hand breaks all default blocks instantly=• Ręka niszczy wszystkie domyślne bloki natychmiastowo +• Greatly increased hand pointing range=• Znacząco zwiększony zasięg reki +• Mined blocks don't drop items=• Wykopane bloki nie wyrzucają zrzutu +• Items don't get used up=• Przedmioty nie zużywają się +• Tools don't wear off=• Narzędzie nie niszczą się +• You can eat food whenever you want=• Możesz jeść jedzenie kiedy tylko chcesz +• You can always use the minimap (including radar mode)=• Zawsze możesz korzystać z minimapy (włączając w to tryb radaru) +Damage is not affected by Creative Mode, it needs to be disabled separately.=Tryb kreatywny nie ma wpływu na obrażenia, muszą być wyłączone osobno. +Mobs=Moby +Mobs are the living beings in the world. This includes animals and monsters.=Moby są żyjącymi stworzeniami w świecie. To między innymi zwierzęta i potwory. +Mobs appear randomly throughout the world. This is called “spawning”. Each mob kind appears on particular block types at a given light level. The height also plays a role. Peaceful mobs tend to spawn at daylight while hostile ones prefer darkness. Most mobs can spawn on any solid block but some mobs only spawn on particular blocks (like grass blocks).=Moby pojawiają się losowo w świecie. Nazywamy to "spawnowaniem". Każdy mob pojawia się na pewnym typie bloku przy pewnym poziomie oświetlenia. Wysokość również ma znaczenie. Spokojne moby najczęściej spawnują się w świetle, podczas gdy wrogie preferują ciemność. Większość mobów spawnuje się na dowolnym stałym bloku, ale niektóre moby spawnują się tylko na konkretnych blokach (np. blokach trawy). +Like players, mobs have hit points and sometimes armor points, too (which means you need better weapons to deal any damage at all). Also like players, hostile mobs can attack directly or at a distance. Mobs may drop random items after they die.=Podobnie jak gracze, moby mają punkty życia, a czasami również zbroi (co oznacza, że będziesz potrzebował lepszych broni by zadać im obrażenia). Również podobnie jak gracze wrogie moby mogą atakować bezpośrednio lub z dystansu. Moby mogą wyrzucać losowe przedmioty przy śmierci. +Most animals roam the world aimlessly while most hostile mobs hunt players. Animals can be fed, tamed and bred.=Większość zwierząt przemieszcza się po świecie bez celu, a większość wrogich mobów poluje na gracza. Zwierzęta mogą być karmione, oswajane i rozmnażane. +Animals=Zwierzęta +Animals are peaceful beings which roam the world aimlessly. You can feed, tame and breed them.=Zwierzęta są spokojnymi mobami, które przemierzają świat bez celu. Mogą być karmione, oswajane i rozmnażane. +Feeding:=Karmienie: +Each animal has its own taste for food and doesn't just accept any food. To feed, hold an item in your hand and rightclick the animal.=Każde zwierzę ma swój własny gust w jedzeniu i nie przyjmuje byle czego. Aby nakarmić, weź przedmiot do swojej ręki i kliknij prawym przyciskiem na zwierzę. +Animals are attraced to the food they like and follow you as long you hold the food item in hand.=Zwierzęta są przyciągane do jedzenia które lubią i będą za tobą podążać tak długo jak będziesz je trzymała w dłoni. +Feeding an animal has three uses: Taming, healing and breeding.=Karmienie zwierząt a trzy zastosowania: Oswajanie, uzdrawianie i rozmnażanie. +Feeding heals animals instantly, depending on the quality of the food item.=Karmienie natychmiast uzdrawia zwierzęta w zależności od jakości. +Taming:=Oswajanie +A few animals can be tamed. You can generally do more things with tamed animals and use other items on them. For example, tame horses can be saddled and tame wolves fight on your side.=Niektóre zwierzęta mogą być oswojony. Z oswojonymi zwierzętami możesz zwykle robić więcej rzeczy i używać na nich dodatkowych przedmiotów. Przykładowo oswojone konie mogą być osiodłane, a oswojone wilki walczą po twojej stronie. +Breeding:=Rozmnażanie +When you have fed an animal up to its maximum health, then feed it again, you will activate “Love Mode” and many hearts appear around the animal.=Gdy nakarmisz zwierzę do pełnego zdrowia, a następnie nakarmisz je jeszcze raz, aktywujesz "tryb miłości" i wiele serc pojawi się wokół zwierzęcia. +Two animals of the same species will start to breed if they are in Love Mode and close to each other. Soon a baby animal will pop up.=Dwa zwierzęta tego samego gatunku będą się rozmnażać jeśli są blisko siebie i w trybie miłości. Wkrótce potem pojawi się dziecko zwierzątko. +Baby animals:=Dzieci zwierzątka +Baby animals are just like their adult couterparts, but they can't be tamed or bred and don't drop anything when they die. They grow to adults after a short time. When fed, they grow to adults faster.=Dzieci zwierzątka są takie jak ich dorosłe odpowiedniki, jednak nie mogą być oswojone i rozmnażane oraz nie wyrzucają niczego gdy umierają. Po pewnym czasie wyrastają w dorosłe zwierze. Gdy są karmione wyrastają szybciej. +Hunger=Głód +Hunger affects your health and your ability to sprint. Hunger is not in effect when damage is disabled.=Głód wpływa na twoje zdrowie i możliwość biegania. Głód jest wyłączony gdy obrażenia są wyłączone. +Core hunger rules:=Główne zasady głodu: +• You start with 20/20 hunger points (more points @= less hungry)=• Zaczynasz z 20/20 punktami głodu (więcej punktów @= mniej głodna) +• Actions like combat, jumping, sprinting, etc. decrease hunger points=• Akcje takie jak walka, skakanie, bieganie itp. zmniejszają liczbę punktów głodu +• Food restores hunger points=• Jedzenie przywraca punkty głodu +• If your hunger bar decreases, you're hungry=• Jeśli twój pasek głodu zmniejsza się, staniesz się głodna +• At 18-20 hunger points, you regenerate 1 HP every 4 seconds=• Przy 18-20 punktach głodu, będziesz regenerował 1 HP co 4 sekundy +• At 6 hunger points or less, you can't sprint=• Przy 6 punktach głodu i mniej, nie możesz biegać +• At 0 hunger points, you lose 1 HP every 4 seconds (down to 1 HP)=• Przy 0 punktach głodu i mniej, tracisz 1 HP co 4 sekundy +• Poisonous food decreases your health=• Trujące jedzenie zmniejsza twoje zdrowie +Details:=Szczegóły: +You have 0-20 hunger points, indicated by 20 drumstick half-icons above the hotbar. You also have an invisible attribute: Saturation.=Masz 0-20 punktów głodu, oznaczanych przez 20 pałek pół-ikon nad paskiem szybkiego dostępu. Posiadasz również niewidzialną własność: Nasycenie. +Hunger points reflect how full you are while saturation points reflect how long it takes until you're hungry again.=Punkty głodu pokazują jak pełna jesteś, podczas gdy punkty nasycenia mówią jak długo zajmie zanim znów będziesz głodna. +Each food item increases both your hunger level as well your saturation.=Każde jedzenie zwiększa zarówno twój poziom głodu jak i nasycenia. +Food with a high saturation boost has the advantage that it will take longer until you get hungry again.=Jedzenie z większym wzrostem nasycenia ma tę przewagę, że sprawi, że dłużej zajmie zanim znów będziesz głodna. +A few food items might induce food poisoning by chance. When you're poisoned, the health and hunger symbols turn sickly green. Food poisoning drains your health by 1 HP per second, down to 1 HP. Food poisoning also drains your saturation. Food poisoning goes away after a while or when you drink milk.=Niektóre jedzenia mogą losowo wywołać zatrucie pokarmowe. Gdy jesteś otruta symbole życia i głodu zmienią kolor na zgniło-zielony. Zatrucie pokarmowe zmniejsza twoje życie o 1 HP na sekundę aż do 1 hp. Zmniejsza ono również twoje nasycenie. Zatrucie pokarmowe przechodzi po chwili lub gdy wypijesz mleko. +You start with 5 saturation points. The maximum saturation is equal to your current hunger level. So with 20 hunger points your maximum saturation is 20. What this means is that food items which restore many saturation points are more effective the more hunger points you have. This is because at low hunger levels, a lot of the saturation boost will be lost due to the low saturation cap.=Zaczynasz z 5 punktami nasycenia. Maksymalne nasycenie jest równe twojemu aktualnemu poziomowi głodu. Więc z 20 punktami głodu, twój maksymalny poziom nasycenia to 20. To oznacza, że jedzenie które zwiększa nasycenie jest bardziej efektywne im więcej punktów głodu masz. Jest tak ponieważ na niskich poziomach głodu spora część zwiększenia nasycenia zostanie stracona przez niski poziom maksymalny. +If your saturation reaches 0, you're hungry and start to lose hunger points. Whenever you see the hunger bar decrease, it is a good time to eat.=Gdy twój poziom nasycenia spadnie do 0 stajesz się głodna i zaczynasz tracić punkty głodu. Gdy widzisz, że twój pasek głodu zmniejsza się, to jest to dobry moment na jedzenie. +Saturation decreases by doing things which exhaust you (highest exhaustion first):=Nasycenie zmniejsza się gdy robisz rzeczy, które cię męczą (w kolejności od najbardziej męczącego): +• Regenerating 1 HP=• Odnowienie 1 HP +• Suffering food poisoning=• Zatrucie pokarmowe +• Sprint-jumping=• Skakanie podczas biegu +• Sprinting=• Bieganie +• Attacking=• Atakowanie +• Taking damage=• Otrzymywanie obrażeń +• Swimming=• Pływanie +• Jumping=• Skakanie +• Mining a block=• Kopanie bloku +Other actions, like walking, do not exaust you.=Inne akcje takie jak chodzenie nie męczą cię. +If you have a map item in any of your hotbar slots, you can use the minimap.=Jeśli masz przedmiot mapy w swoim pasku szybkiego dostępu możesz korzystać z minimapy. + diff --git a/mods/HELP/mcl_doc_basics/mcl_extension.lua b/mods/HELP/mcl_doc_basics/mcl_extension.lua index c6f9f0aa9..a0f31a2c8 100644 --- a/mods/HELP/mcl_doc_basics/mcl_extension.lua +++ b/mods/HELP/mcl_doc_basics/mcl_extension.lua @@ -1,4 +1,4 @@ -local S = minetest.get_translator("mcl_doc_basics") +local S = minetest.get_translator(minetest.get_current_modname()) doc.add_entry("advanced", "creative", { name = S("Creative Mode"), diff --git a/mods/HELP/mcl_doc_basics/mod.conf b/mods/HELP/mcl_doc_basics/mod.conf index 525619045..c23a0ad55 100644 --- a/mods/HELP/mcl_doc_basics/mod.conf +++ b/mods/HELP/mcl_doc_basics/mod.conf @@ -1,3 +1,4 @@ name = mcl_doc_basics -depends = doc +author = Wuzzy description = Adds some help texts explaining how to use MineClone 2. +depends = doc 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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 = A Cat in a Pop-Tart?!=A Cat in a Pop-Tart?! -Achievement gotten!=Succès obtenue! -Achievement gotten:=Succès obtenue: -Achievement gotten: @1=Succès obtenue: @1 +Achievement gotten!=Succès obtenu ! +Achievement gotten:=Succès obtenu : +Achievement gotten: @1=Succès obtenu : @1 Achievement not found.=Succès inconnu All your awards and statistics have been cleared. You can now start again.=Toutes vos récompenses et statistiques ont été effacées. Vous pouvez maintenant recommencer. Awards=Récompenses @@ -28,9 +28,9 @@ Join the game.=Rejoignez le jeu. List awards in chat (deprecated)=Liste des récompenses dans le chat (obsolète) Place a block: @1=Placer un bloc: @1 Place blocks: @1×@2=Placer des blocs: @1×@2 -Secret Achievement gotten!=Succès secret obtenu! -Secret Achievement gotten:=Succès secret obtenu: -Secret Achievement gotten: @1=Succès secret obtenu: @1 +Secret Achievement gotten!=Succès secret obtenu ! +Secret Achievement gotten:=Succès secret obtenu : +Secret Achievement gotten: @1=Succès secret obtenu : @1 Show details of an achievement=Afficher les détails d'un succès Show, clear, disable or enable your achievements=Affichez, effacez, désactivez ou activez vos succès Get this achievement to find out what it is.=Obtenez ce succès pour découvrir de quoi il s'agit. @@ -38,8 +38,8 @@ Write @1 chat messages.=Écrivez @1 messages de chat. Write something in chat.=Écrivez quelque chose dans le chat. You have disabled your achievements.=Vous avez désactivé vos succès. You have enabled your achievements.=Vous avez activé vos succès. -You have not gotten any awards.=Vous n'avez reçu aucun prix. -You've disabled awards. Type /awards enable to reenable.=Vous avez désactivé les récompenses. Type /awards enable pour les activer. +You have not gotten any awards.=Vous n'avez reçu aucune récompense. +You've disabled awards. Type /awards enable to reenable.=Vous avez désactivé les récompenses. Tapez "/awards enable" pour les réactiver. [c|clear|disable|enable]=[c|clear|disable|enable] OK=OK Error: No awards available.=Erreur: aucune récompense disponible. @@ -52,10 +52,10 @@ Eat @1 item(s).=Manger @1 aliment(s). Craft @1 item(s).=Fabriquer @1 objet(s). Can give achievements to any player=Peut donner des succès à n'importe quel joueur (grant ( | all)) | list=(grant ( | all)) | list -Give achievement to player or list all achievements=Donner un succès a un joueur ou répertorier toutes les succès +Give achievement to player or list all achievements=Donner un succès à un joueur ou répertorier tous les succès @1 (@2)=@1 (@2) Invalid syntax.=Syntaxe invalide. Invalid action.=Action invalide. Player is not online.=Le joueur n'est pas en ligne. Done.=Terminé. -Achievement “@1” does not exist.=La réalisation «@1» n'existe pas. +Achievement “@1” does not exist.=Le succès «@1» n'existe pas. diff --git a/mods/HUD/awards/locale/awards.pl.tr b/mods/HUD/awards/locale/awards.pl.tr new file mode 100644 index 000000000..76d5b9161 --- /dev/null +++ b/mods/HUD/awards/locale/awards.pl.tr @@ -0,0 +1,63 @@ +# textdomain:awards +@1/@2 chat messages=@1/@2 wiadomości na czacie +@1/@2 crafted=Wytworzono @1/@2 +@1/@2 deaths=@1/@2 śmierci +@1/@2 dug=Wykopano @1/@2 +@1/@2 game joins=Dołączono do @1/@2 gier +@1/@2 placed=Postawiono @1/@2 +@1 (got)=@1 (zdobyto) +@1: @2=@1: @2 +@1’s awards:=Nagrody @1: +(Secret Award)=(Sekretna nagroda) += += +Achievement gotten!=Zdobyto osiągnięcie! +Achievement gotten:=Zdobyto osiągnięcie: +Achievement gotten: @1=Zdobyto osiągnięcie: @1 +Achievement not found.=Nie znaleziono osiągnięcia. +All your awards and statistics have been cleared. You can now start again.=Wszystkie twoje nagrody i statystyki zostały usunięte. Możesz zacząć ponownie. +Awards=Nagrody. +Craft: @1×@2=Wytwórz: @1×@2 +Craft: @1=Wytwórz: @1 +Die @1 times.=Zgiń @1 razy. +Die.=Zgiń. +Get the achievements statistics for the given player or yourself=Zobacz statystyki osiągnięć danego gracza lub siebie +Join the game @1 times.=Dołącz do gry @1 razy. +Join the game.=Dołącz do gry. +List awards in chat (deprecated)=Wypisz nagrody w czacie (przestarzałe) +Place a block: @1=Postaw blok: @1 +Place blocks: @1×@2=Postaw bloki: @1×@2 +Secret achievement gotten!=Zdobyto sekretne osiągnięcie! +Secret achievement gotten:=Zdobyto sekretne osiągnięcie: +Secret achievement gotten: @1=Zdobyto sekretne osiągnięcie: @1 +Show details of an achievement=Pokaż szczegóły osiągnięcia +Show, clear, disable or enable your achievements=Pokaż, wyczyść, wyłącz lub włącz swoje osiągnięcia +Get this achievement to find out what it is.=Zdobądź to osiągnięcie aby dowiedzieć się jakie ono jest. +Write @1 chat messages.=Napisz @1 wiadomości na czacie. +Write something in chat.=Napisz coś na czacie. +You have disabled your achievements.=Twoje osiągnięcia zostały wyłączone. +You have enabled your achievements.=Twoje osiągnięcia zostały włączone. +You have not gotten any awards.=Nie zdobyto żadnych osiągnięć. +You've disabled awards. Type /awards enable to reenable.=Wyłączono osiągnięcia. Napisz /awards by je włączyć. +[c|clear|disable|enable]=[c|clear|disable|enable] +OK=OK +Error: No awards available.=Błąd: Brak dostępnych nagród. +Eat: @1×@2=Zjedz: @1×@2 +Eat: @1=Zjedz: @1 +@1/@2 eaten=Zjedzono @1/@2 +Place @1 block(s).=Postaw bloki: @1. +Dig @1 block(s).=Wykop bloki: @1. +Eat @1 item(s).=Zjedz przedmioty: @1. +Craft @1 item(s).=Wytwórz przedmioty: @1. +Can give achievements to any player=Może przyznawać osiągnięcia dowolnemu graczowi. +(grant ( | all)) | list=(grant ( | all)) | list +Give achievement to player or list all achievements=Daj osiągnięcie graczowi lub wypisz wszystkie osiągnięcia +@1 (@2)=@1 (@2) +Invalid syntax.=Niepoprawna składnia. +Invalid action.=Niepoprawna czynność. +Player is not online.=Gracz nie jest online. +Done.=Gotowe. +Achievement “@1” does not exist.=Osiągnięcie "@1" nie istnieje. +@1 has made the achievement @2=@2 zostało zdobyte przez @1. +Mine a block: @1=Wykop blok: @1 +Mine blocks: @1×@2=Wykop blok: @1×@2 diff --git a/mods/HUD/awards/locale/awards.ru.tr b/mods/HUD/awards/locale/awards.ru.tr index 19623f391..8495c270f 100644 --- a/mods/HUD/awards/locale/awards.ru.tr +++ b/mods/HUD/awards/locale/awards.ru.tr @@ -59,3 +59,4 @@ Invalid action.=Непредусмотренное действие. Player is not online.=Игрок не подключён. Done.=Сделано. Achievement “@1” does not exist.=Достижения “@1” не существует. +@1 has made the achievement @2=@1 получил(а) достижение @2 diff --git a/mods/HUD/awards/locale/template.txt b/mods/HUD/awards/locale/template.txt index 529d524c0..ac6a1d752 100644 --- a/mods/HUD/awards/locale/template.txt +++ b/mods/HUD/awards/locale/template.txt @@ -6,12 +6,11 @@ @1/@2 game joins= @1/@2 placed= @1 (got)= -@1: @1= +@1: @2= @1’s awards:= (Secret Award)= = = -A Cat in a Pop-Tart?!= Achievement gotten!= Achievement gotten:= Achievement gotten: @1= @@ -28,9 +27,9 @@ Join the game.= List awards in chat (deprecated)= Place a block: @1= Place blocks: @1×@2= -Secret Achievement gotten!= -Secret Achievement gotten:= -Secret Achievement gotten: @1= +Secret achievement gotten!= +Secret achievement gotten:= +Secret achievement gotten: @1= Show details of an achievement= Show, clear, disable or enable your achievements= Get this achievement to find out what it is.= @@ -59,3 +58,6 @@ Invalid action.= Player is not online.= Done.= Achievement “@1” does not exist.= +@1 has made the achievement @2= +Mine a block: @1= +Mine blocks: @1×@2= diff --git a/mods/HUD/awards/mod.conf b/mods/HUD/awards/mod.conf index 24042f267..1657323e2 100644 --- a/mods/HUD/awards/mod.conf +++ b/mods/HUD/awards/mod.conf @@ -5,3 +5,5 @@ description = Adds achievements to Minetest, and an API to register new ones. license = LGPL 2.1 or later forum = https://forum.minetest.net/viewtopic.php?t=4870 version = 2.3.0 +optional_depends = sfinv, unified_inventory +depends = mcl_colors diff --git a/mods/HUD/awards/screenshot.png b/mods/HUD/awards/screenshot.png deleted file mode 100644 index ab9e19e5672d4c1a2380cec52c6a1002f648987c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 63807 zcmeEtg;O2R*6rXD2oT&gXmGdS65JtpaDqGJpaB9QH~~U%cL*Nb-6gm~(1W|b;dk$? zy7krfs@@;)l1dSVIXykyd#}CL+RaxLB^h*7B2)kX(BH{QssRA34gkPJBg2AM9<;xX zf?p6#LOs_+M8F&%N^_`*=(kcQxE+HS+!yEws zPyp{F#WXzUp-WyVIDhJSkGH)>3io#Bj0r*%6UOzqe;cn4YbsDlVsfcwtHN+&;x;p4 z!N*bjB-m(Ki_ggTEUhvn8PQYxRhwNDhX#$vX9;(TJ{w9=<#F{s?J8<=GMtTb^v< z{vT`dDhOPoAoxshjVQ(F!8MY_Lx2ydRR$E?oT2QbX%+=$M~Z8{+!- z?s=@)>@x?Zz~k~OecEJAWJ<|}_`=Zz9p_S}IYZ7==i$G0tZ)9gUvMnpq}H6vz8o29 z@O>_<@SoAVhsUpLHq)Qy7izG;v-Pk42@5>^`&nyr&yzM$9u@g#hyUxD%FmnKMV9LK z&#PSS+{ZnKLxs%t{}^KY=3hfZjkMO-XdPsVU3YA#Z*tz^5;*Sh-LxT7)-H{XkTp|x zDC<5i)g{I7eXT{hlN+gwJbc4C53ja~_`8uBFz(0stYT?z4R{)JF~bWk&bw_$!Z>buy78 zUW3eai{L~vhXRnuu8p29i~z@{hpQF$1-s4=3?%<#hnD)B95e9J)v^eu(=w!aK-qu^6+w;-4chD|uWq5z4vfu0AShL_9fz`DTa^KAunLLH0i7Ly{ zx)oo@$$EFs54QeybgAdXMh``PPmjbrw$V#;?t_=)4kyLc$icG#p*!H`5dC>qyg5Zg zp1}1$6Y)4)|;XmmfADL2xI9T*rmTxx7R9bn2F@@TzVVo=W`@mO?9 z_qj}h3RVcN(LMo=ResOm&|6eo3

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/awards/sfinv.lua b/mods/HUD/awards/sfinv.lua index 5d02cbb58..3b41d29ab 100644 --- a/mods/HUD/awards/sfinv.lua +++ b/mods/HUD/awards/sfinv.lua @@ -1,5 +1,5 @@ if minetest.get_modpath("sfinv") then - local S = minetest.get_translator("awards") + local S = minetest.get_translator(minetest.get_current_modname()) sfinv.register_page("awards:awards", { title = S("Awards"), diff --git a/mods/HUD/awards/triggers.lua b/mods/HUD/awards/triggers.lua index 318a4b281..c7194d2c9 100644 --- a/mods/HUD/awards/triggers.lua +++ b/mods/HUD/awards/triggers.lua @@ -14,7 +14,7 @@ -- 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -- -local S = minetest.get_translator("awards") +local S = minetest.get_translator(minetest.get_current_modname()) awards.register_trigger("dig", function(def) local tmp = { @@ -250,9 +250,7 @@ minetest.register_on_dignode(function(pos, oldnode, digger) local tnodedug = string.split(entry.node, ":") local tmod = tnodedug[1] local titem = tnodedug[2] - if not tmod or not titem or not data.count[tmod] or not data.count[tmod][titem] then - -- table running failed! - elseif data.count[tmod][titem] > entry.target-1 then + if tmod and titem and data.count[tmod] and data.count[tmod][titem] and data.count[tmod][titem] > entry.target-1 then return entry.award end elseif awards.get_total_item_count(data, "count") > entry.target-1 then @@ -277,9 +275,7 @@ minetest.register_on_placenode(function(pos, node, digger) local tnodedug = string.split(entry.node, ":") local tmod = tnodedug[1] local titem = tnodedug[2] - if not tmod or not titem or not data.place[tmod] or not data.place[tmod][titem] then - -- table running failed! - elseif data.place[tmod][titem] > entry.target-1 then + if tmod and titem and data.place[tmod] and data.place[tmod][titem] and data.place[tmod][titem] > entry.target-1 then return entry.award end elseif awards.get_total_item_count(data, "place") > entry.target-1 then @@ -303,9 +299,7 @@ minetest.register_on_item_eat(function(hp_change, replace_with_item, itemstack, local titemstring = string.split(entry.item, ":") local tmod = titemstring[1] local titem = titemstring[2] - if not tmod or not titem or not data.eat[tmod] or not data.eat[tmod][titem] then - -- table running failed! - elseif data.eat[tmod][titem] > entry.target-1 then + if tmod and titem and data.eat[tmod] and data.eat[tmod][titem] and data.eat[tmod][titem] > entry.target-1 then return entry.award end elseif awards.get_total_item_count(data, "eat") > entry.target-1 then @@ -331,9 +325,7 @@ minetest.register_on_craft(function(itemstack, player, old_craft_grid, craft_inv local titemcrafted = string.split(entry.item, ":") local tmod = titemcrafted[1] local titem = titemcrafted[2] - if not tmod or not titem or not data.craft[tmod] or not data.craft[tmod][titem] then - -- table running failed! - elseif data.craft[tmod][titem] > entry.target-1 then + if tmod and titem and data.craft[tmod] and data.craft[tmod][titem] and data.craft[tmod][titem] > entry.target-1 then return entry.award end elseif awards.get_total_item_count(data, "craft") > entry.target-1 then @@ -390,7 +382,7 @@ end) minetest.register_on_chat_message(function(name, message) -- Run checks local idx = string.find(message,"/") - if not name or (idx ~= nil and idx <= 1) then + if not name or (idx and idx <= 1) then return end diff --git a/mods/HUD/awards/unified_inventory.lua b/mods/HUD/awards/unified_inventory.lua index be5ca5f94..3dc238e1a 100644 --- a/mods/HUD/awards/unified_inventory.lua +++ b/mods/HUD/awards/unified_inventory.lua @@ -1,6 +1,5 @@ -if minetest.get_modpath("unified_inventory") ~= nil then - local S = minetest.get_translator("awards") - +if minetest.get_modpath("unified_inventory") then + local S = minetest.get_translator(minetest.get_current_modname()) unified_inventory.register_button("awards", { type = "image", image = "awards_ui_icon.png", diff --git a/mods/HUD/hudbars/API.md b/mods/HUD/hudbars/API.md index ca6144ad1..ee112eceb 100644 --- a/mods/HUD/hudbars/API.md +++ b/mods/HUD/hudbars/API.md @@ -17,7 +17,7 @@ To give you a *very* brief overview over this API, here is the basic workflow on In order to use this API, you should be aware of a few basic rules in order to understand it: * A HUD bar is an approximate graphical representation of the ratio of a current value and a maximum value, i.e. current health of 15 and maximum health of 20. A full HUD bar represents 100%, an empty HUD bar represents 0%. -* The current value must always be equal to or smaller then the maximum +* The current value must always be equal to or smaller then the maximum * Both current value and maximum must not be smaller than 0 * Both current value and maximum must be real numbers. So no NaN, infinity, etc. * The HUD bar will be hidden if the maximum equals 0. This is intentional. @@ -45,7 +45,7 @@ a vertical gradient. ### Icon A 16×16 image shown left of the HUD bar. This is optional. -### `hb.register_hudbar(identifier, text_color, label, textures, default_start_value, default_start_max, default_start_hidden, format_string, format_string_config)` +### `hb.register_hudbar(identifier, text_color, label, textures, direction, default_start_value, default_start_max, default_start_hidden, format_string, format_string_config)` This function registers a new custom HUD bar definition to the HUD bars mod, so it can be later used to be displayed, changed, hidden and unhidden on a per-player basis. Note this does not yet display the HUD bar. @@ -63,6 +63,7 @@ for more information. * `bar`: The file name of the bar image (as string). This is only used for the `progress_bar` bar type (see `README.txt`, settings section). * `icon`: The file name of the icon, as string. For the `progress_bar` type, it is shown as single image left of the bar, for the two statbar bar types, it is used as the statbar icon and will be repeated. This field can be `nil`, in which case no icon will be used, but this is not recommended, because the HUD bar will be invisible if the one of the statbar bar types is used. * `bgicon`: The file name of the background icon, it is used as the background for the modern statbar mode only. This field can be `nil`, in which case no background icon will be displayed in this mode. +* `direction`: Either left to right(0), or right to left(1). * `default_start_value`: If this HUD bar is added to a player, and no initial value is specified, this value will be used as initial current value * `default_max_value`: If this HUD bar is added to a player, and no initial maximum value is specified, this value will be used as initial maximum value * `default_start_hidden`: The HUD bar will be initially start hidden by default when added to a player. Use `hb.unhide_hudbar` to unhide it. diff --git a/mods/HUD/hudbars/default_settings.lua b/mods/HUD/hudbars/default_settings.lua index 0bd267d0e..865a7cb6a 100644 --- a/mods/HUD/hudbars/default_settings.lua +++ b/mods/HUD/hudbars/default_settings.lua @@ -20,9 +20,9 @@ if hb.settings.bar_type == "progress_bar" then hb.settings.start_offset_right.x = hb.load_setting("hudbars_start_offset_right_x", "number", 15) hb.settings.start_offset_right.y = hb.load_setting("hudbars_start_offset_right_y", "number", -86) else - hb.settings.start_offset_left.x = hb.load_setting("hudbars_start_statbar_offset_left_x", "number", -265) + hb.settings.start_offset_left.x = hb.load_setting("hudbars_start_statbar_offset_left_x", "number", -258) hb.settings.start_offset_left.y = hb.load_setting("hudbars_start_statbar_offset_left_y", "number", -90) - hb.settings.start_offset_right.x = hb.load_setting("hudbars_start_statbar_offset_right_x", "number", 25) + hb.settings.start_offset_right.x = hb.load_setting("hudbars_start_statbar_offset_right_x", "number", 16) hb.settings.start_offset_right.y = hb.load_setting("hudbars_start_statbar_offset_right_y", "number", -90) end -- Modified in MCL2! @@ -37,7 +37,7 @@ hb.settings.alignment_pattern = hb.load_setting("hudbars_alignment_pattern", "st hb.settings.autohide_breath = hb.load_setting("hudbars_autohide_breath", "bool", true) local sorting = minetest.settings:get("hudbars_sorting") -if sorting ~= nil then +if sorting then hb.settings.sorting = {} hb.settings.sorting_reverse = {} for k,v in string.gmatch(sorting, "(%w+)=(%w+)") do diff --git a/mods/HUD/hudbars/init.lua b/mods/HUD/hudbars/init.lua index 44c826656..505ff403b 100644 --- a/mods/HUD/hudbars/init.lua +++ b/mods/HUD/hudbars/init.lua @@ -1,17 +1,22 @@ -local S = minetest.get_translator("hudbars") +local modname = minetest.get_current_modname() +local modpath = minetest.get_modpath(modname) + +local S = minetest.get_translator(modname) local N = function(s) return s end -hb = {} +local math = math +local table = table -hb.hudtables = {} - --- number of registered HUD bars -hb.hudbars_count = 0 - --- table which records which HUD bar slots have been “registered” so far; used for automatic positioning -hb.registered_slots = {} - -hb.settings = {} +hb = { + hudtables = {}, + -- number of registered HUD bars + hudbars_count = 0, + -- table which records which HUD bar slots have been “registered” so far; used for automatic positioning + registered_slots = {}, + settings = {}, + -- Table which contains all players with active default HUD bars (only for internal use) + players = {}, +} function hb.load_setting(sname, stype, defaultval, valid_values) local sval @@ -22,10 +27,10 @@ function hb.load_setting(sname, stype, defaultval, valid_values) elseif stype == "number" then sval = tonumber(minetest.settings:get(sname)) end - if sval ~= nil then - if valid_values ~= nil then + if sval then + if valid_values then local valid = false - for i=1,#valid_values do + for i = 1, #valid_values do if sval == valid_values[i] then valid = true end @@ -45,8 +50,9 @@ function hb.load_setting(sname, stype, defaultval, valid_values) end -- Load default settings -dofile(minetest.get_modpath("hudbars").."/default_settings.lua") -if minetest.get_modpath("mcl_experience") then +dofile(modpath.."/default_settings.lua") + +if minetest.get_modpath("mcl_experience") and not minetest.is_creative_enabled("") then -- reserve some space for experience bar: hb.settings.start_offset_left.y = hb.settings.start_offset_left.y - 20 hb.settings.start_offset_right.y = hb.settings.start_offset_right.y - 20 @@ -85,9 +91,6 @@ local function make_label(format_string, format_string_config, label, start_valu return ret end --- Table which contains all players with active default HUD bars (only for internal use) -hb.players = {} - function hb.value_to_barlength(value, max) if max == 0 then return 0 @@ -111,7 +114,7 @@ function hb.get_hudtable(identifier) end function hb.get_hudbar_position_index(identifier) - if hb.settings.sorting[identifier] ~= nil then + if hb.settings.sorting[identifier] then return hb.settings.sorting[identifier] else local i = 0 @@ -124,7 +127,7 @@ function hb.get_hudbar_position_index(identifier) end end -function hb.register_hudbar(identifier, text_color, label, textures, default_start_value, default_start_max, default_start_hidden, format_string, format_string_config) +function hb.register_hudbar(identifier, text_color, label, textures, direction, default_start_value, default_start_max, default_start_hidden, format_string, format_string_config) minetest.log("action", "hb.register_hudbar: "..tostring(identifier)) local hudtable = {} local pos, offset @@ -133,30 +136,33 @@ function hb.register_hudbar(identifier, text_color, label, textures, default_sta if hb.settings.alignment_pattern == "stack_up" then pos = hb.settings.pos_left offset = { - x = hb.settings.start_offset_left.x, + x = direction == 0 and hb.settings.start_offset_left.x or -hb.settings.start_offset_right.x, y = hb.settings.start_offset_left.y - hb.settings.vmargin * index } elseif hb.settings.alignment_pattern == "stack_down" then pos = hb.settings.pos_left offset = { - x = hb.settings.start_offset_left.x, + x = direction == 0 and hb.settings.start_offset_right.x or -hb.settings.start_offset_left.x, y = hb.settings.start_offset_left.y + hb.settings.vmargin * index } - else + else -- zigzag if index % 2 == 0 then pos = hb.settings.pos_left offset = { - x = hb.settings.start_offset_left.x, + -- -(24+18) = -42. using linear eq, -42 = -258m - 24. + x = direction == 0 and hb.settings.start_offset_left.x or (-42+24)/(-258.0) * hb.settings.start_offset_left.x - 24, y = hb.settings.start_offset_left.y - hb.settings.vmargin * (index/2) } else pos = hb.settings.pos_right offset = { - x = hb.settings.start_offset_right.x, + -- 24*10+30 - 24 = 234. using linear eq, 234 = 16m - 24. + x = direction == 0 and hb.settings.start_offset_right.x or (234+24)/(16) * hb.settings.start_offset_right.x - 24, y = hb.settings.start_offset_right.y - hb.settings.vmargin * ((index-1)/2) } end end + if format_string == nil then format_string = N("@1: @2/@3") end @@ -173,7 +179,7 @@ function hb.register_hudbar(identifier, text_color, label, textures, default_sta format_string_config.format_max_value = "%d" end - hudtable.add_all = function(player, hudtable, start_value, start_max, start_hidden) + function hudtable.add_all(player, hudtable, start_value, start_max, start_hidden) if start_value == nil then start_value = hudtable.default_start_value end if start_max == nil then start_max = hudtable.default_start_max end if start_hidden == nil then start_hidden = hudtable.default_start_hidden end @@ -181,6 +187,7 @@ function hb.register_hudbar(identifier, text_color, label, textures, default_sta local state = {} local name = player:get_player_name() local bgscale, iconscale, text, barnumber, bgiconnumber + if start_max == 0 or start_hidden then bgscale = { x=0, y=0 } else @@ -197,6 +204,7 @@ function hb.register_hudbar(identifier, text_color, label, textures, default_sta bgiconnumber = hb.settings.statbar_length text = make_label(format_string, format_string_config, label, start_value, start_max) end + if hb.settings.bar_type == "progress_bar" then ids.bg = player:hud_add({ hud_elem_type = "image", @@ -207,7 +215,7 @@ function hb.register_hudbar(identifier, text_color, label, textures, default_sta offset = { x = offset.x - 1, y = offset.y - 1 }, z_index = 0, }) - if textures.icon ~= nil then + if textures.icon then ids.icon = player:hud_add({ hud_elem_type = "image", position = pos, @@ -219,6 +227,7 @@ function hb.register_hudbar(identifier, text_color, label, textures, default_sta }) end end + local bar_image, bgicon, bar_size if hb.settings.bar_type == "progress_bar" then bar_image = textures.bar @@ -234,10 +243,12 @@ function hb.register_hudbar(identifier, text_color, label, textures, default_sta bgicon = textures.bgicon bar_size = {x=24, y=24} end + local text2 if hb.settings.bar_type == "statbar_modern" then text2 = bgicon end + ids.bar = player:hud_add({ hud_elem_type = "statbar", position = pos, @@ -247,7 +258,7 @@ function hb.register_hudbar(identifier, text_color, label, textures, default_sta item = bgiconnumber, alignment = {x=-1,y=-1}, offset = offset, - direction = 0, + direction = direction, size = bar_size, z_index = 1, }) @@ -258,7 +269,7 @@ function hb.register_hudbar(identifier, text_color, label, textures, default_sta text = text, alignment = {x=1,y=1}, number = text_color, - direction = 0, + direction = direction, offset = { x = offset.x + 2, y = offset.y - 1}, z_index = 2, }) @@ -298,7 +309,7 @@ function hb.register_hudbar(identifier, text_color, label, textures, default_sta hudtable.default_start_max = default_start_max hb.hudbars_count= hb.hudbars_count + 1 - + hb.hudtables[identifier] = hudtable end @@ -324,7 +335,7 @@ function hb.change_hudbar(player, identifier, new_value, new_max_value, new_icon end local value_changed, max_changed = false, false - if new_value ~= nil then + if new_value then if new_value ~= hudtable.hudstate[name].value then hudtable.hudstate[name].value = new_value value_changed = true @@ -332,7 +343,7 @@ function hb.change_hudbar(player, identifier, new_value, new_max_value, new_icon else new_value = hudtable.hudstate[name].value end - if new_max_value ~= nil then + if new_max_value then if new_max_value ~= hudtable.hudstate[name].max then hudtable.hudstate[name].max = new_max_value max_changed = true @@ -342,28 +353,29 @@ function hb.change_hudbar(player, identifier, new_value, new_max_value, new_icon end if hb.settings.bar_type == "progress_bar" then - if new_icon ~= nil and hudtable.hudids[name].icon ~= nil then + if new_icon and hudtable.hudids[name].icon then player:hud_change(hudtable.hudids[name].icon, "text", new_icon) end - if new_bgicon ~= nil and hudtable.hudids[name].bgicon ~= nil then + if new_bgicon and hudtable.hudids[name].bgicon then player:hud_change(hudtable.hudids[name].bgicon, "text", new_bgicon) end - if new_bar ~= nil then + if new_bar then player:hud_change(hudtable.hudids[name].bar , "text", new_bar) end - if new_label ~= nil then + if new_label then hudtable.label = new_label local new_text = make_label(hudtable.format_string, hudtable.format_string_config, new_label, hudtable.hudstate[name].value, hudtable.hudstate[name].max) player:hud_change(hudtable.hudids[name].text, "text", new_text) end - if new_text_color ~= nil then + if new_text_color then player:hud_change(hudtable.hudids[name].text, "number", new_text_color) end + else - if new_icon ~= nil and hudtable.hudids[name].bar ~= nil then + if new_icon and hudtable.hudids[name].bar then player:hud_change(hudtable.hudids[name].bar, "text", new_icon) end - if new_bgicon ~= nil and hudtable.hudids[name].bg ~= nil then + if new_bgicon and hudtable.hudids[name].bg then player:hud_change(hudtable.hudids[name].bg, "text", new_bgicon) end end @@ -413,8 +425,9 @@ function hb.hide_hudbar(player, identifier) local name = player:get_player_name() local hudtable = hb.get_hudtable(identifier) if hudtable == nil then return false end + if hudtable.hudstate[name].hidden == true then return true end if hb.settings.bar_type == "progress_bar" then - if hudtable.hudids[name].icon ~= nil then + if hudtable.hudids[name].icon then player:hud_change(hudtable.hudids[name].icon, "scale", {x=0,y=0}) end player:hud_change(hudtable.hudids[name].bg, "scale", {x=0,y=0}) @@ -431,10 +444,11 @@ function hb.unhide_hudbar(player, identifier) local name = player:get_player_name() local hudtable = hb.get_hudtable(identifier) if hudtable == nil then return false end + if hudtable.hudstate[name].hidden == false then return true end local value = hudtable.hudstate[name].value local max = hudtable.hudstate[name].max if hb.settings.bar_type == "progress_bar" then - if hudtable.hudids[name].icon ~= nil then + if hudtable.hudids[name].icon then player:hud_change(hudtable.hudids[name].icon, "scale", {x=1,y=1}) end if hudtable.hudstate[name].max ~= 0 then @@ -474,8 +488,8 @@ end --register built-in HUD bars if minetest.settings:get_bool("enable_damage") or hb.settings.forceload_default_hudbars then - hb.register_hudbar("health", 0xFFFFFF, S("Health"), { bar = "hudbars_bar_health.png", icon = "hudbars_icon_health.png", bgicon = "hudbars_bgicon_health.png" }, 20, 20, false) - hb.register_hudbar("breath", 0xFFFFFF, S("Breath"), { bar = "hudbars_bar_breath.png", icon = "hudbars_icon_breath.png", bgicon = "hudbars_bgicon_breath.png" }, 10, 10, true) + hb.register_hudbar("health", 0xFFFFFF, S("Health"), { bar = "hudbars_bar_health.png", icon = "hudbars_icon_health.png", bgicon = "hudbars_bgicon_health.png" }, 0, 20, 20, false) + hb.register_hudbar("breath", 0xFFFFFF, S("Breath"), { bar = "hudbars_bar_breath.png", icon = "hudbars_icon_breath.png", bgicon = "hudbars_bgicon_breath.png" }, 1, 10, 10, true) end local function hide_builtin(player) @@ -511,16 +525,16 @@ local function update_health(player) end -- update built-in HUD bars -local function update_hud(player) +local function update_hud(player, has_damage) if not player_exists(player) then return end - if minetest.settings:get_bool("enable_damage") then + if has_damage then if hb.settings.forceload_default_hudbars then hb.unhide_hudbar(player, "health") end --air local breath_max = player:get_properties().breath_max local breath = player:get_breath() - + if breath >= breath_max and hb.settings.autohide_breath == true then hb.hide_hudbar(player, "breath") else @@ -536,7 +550,7 @@ local function update_hud(player) end minetest.register_on_player_hpchange(function(player) - if hb.players[player:get_player_name()] ~= nil then + if hb.players[player:get_player_name()] then update_health(player) end end) @@ -564,10 +578,11 @@ minetest.register_globalstep(function(dtime) if main_timer > hb.settings.tick or timer > 4 then if main_timer > hb.settings.tick then main_timer = 0 end -- only proceed if damage is enabled - if minetest.settings:get_bool("enable_damage") or hb.settings.forceload_default_hudbars then + local has_dmg = minetest.settings:get_bool("enable_damage") + if has_dmg or hb.settings.forceload_default_hudbars then for _, player in pairs(hb.players) do -- update all hud elements - update_hud(player) + update_hud(player, has_dmg) end end end diff --git a/mods/HUD/hudbars/locale/hudbars.pl.tr b/mods/HUD/hudbars/locale/hudbars.pl.tr new file mode 100644 index 000000000..be06b3579 --- /dev/null +++ b/mods/HUD/hudbars/locale/hudbars.pl.tr @@ -0,0 +1,7 @@ +# textdomain: hudbars +Health=Życie +Breath=Tlen + +# Default format string for progress bar-style HUD bars, e.g. “Health 5/20” +@1: @2/@3=@1: @2/@3 + diff --git a/mods/HUD/hudbars/mod.conf b/mods/HUD/hudbars/mod.conf index 5fa238a83..9d49f65ec 100644 --- a/mods/HUD/hudbars/mod.conf +++ b/mods/HUD/hudbars/mod.conf @@ -1,2 +1,3 @@ name = hudbars +author = Wuzzy description = Replaces the health and breath symbols in the HUD by “progress bars” and shows exact values. Other mods can add more progress bars for custom player stats. diff --git a/mods/HUD/hudbars/screenshot.png b/mods/HUD/hudbars/screenshot.png deleted file mode 100644 index 88ee3238dbaac6e7d3769e212c0ccd4eed023b96..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9556 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 TgAVF{e>kZqXo9QcEI$7~BOnZ3 diff --git a/mods/HUD/mcl_achievements/depends.txt b/mods/HUD/mcl_achievements/depends.txt deleted file mode 100644 index 203a4c0ab..000000000 --- a/mods/HUD/mcl_achievements/depends.txt +++ /dev/null @@ -1 +0,0 @@ -awards diff --git a/mods/HUD/mcl_achievements/init.lua b/mods/HUD/mcl_achievements/init.lua index 7473568d2..c963773d1 100644 --- a/mods/HUD/mcl_achievements/init.lua +++ b/mods/HUD/mcl_achievements/init.lua @@ -3,7 +3,7 @@ -- If true, activates achievements from other Minecraft editions (XBox, PS, etc.) local non_pc_achievements = false -local S = minetest.get_translator("mcl_achievements") +local S = minetest.get_translator(minetest.get_current_modname()) -- Achievements from PC Edition @@ -238,3 +238,20 @@ minetest.register_on_player_receive_fields(function(player, formname, fields) awards.show_to(name, name, nil, false) end end) + + +awards.register_achievement("mcl:stoneAge", { + title = S("Stone Age"), + description = S("Mine a stone with new pickaxe."), + icon = "default_cobble.png", +}) +awards.register_achievement("mcl:hotStuff", { + title = S("Hot Stuff"), + description = S("Put lava in a bucket."), + icon = "bucket_lava.png", +}) +awards.register_achievement("mcl:obsidian", { + title = S("Ice Bucket Challenge"), + description = S("Obtain an obsidian block."), + icon = "default_obsidian.png", +}) diff --git a/mods/HUD/mcl_achievements/locale/mcl_achievements.pl.tr b/mods/HUD/mcl_achievements/locale/mcl_achievements.pl.tr new file mode 100644 index 000000000..78ab53f82 --- /dev/null +++ b/mods/HUD/mcl_achievements/locale/mcl_achievements.pl.tr @@ -0,0 +1,50 @@ +# textdomain:mcl_achievements +Aquire Hardware=Zdobądź narzędzie +Bake Bread=Upiecz chleb +Benchmarking=Rzemieślnictwo +Cow Tipper=Raz krowie śmierć +Craft a bookshelf.=Wytwórz półkę z książkami. +Craft a cake using wheat, sugar, milk and an egg.=Wytwórz ciasto z pszenicy, cukru, mleka i jajka. +Craft a crafting table from 4 wooden planks.=Wytwórz stół rzemieślniczy z 4 desek. +Craft a stone pickaxe using sticks and cobblestone.=Wytwórz kamienny kilof korzystając z patyków i brukowca. +Craft a wooden sword using wooden planks and sticks on a crafting table.=Wytwórz drewniany miecz korzystając z desek i patyków na stole rzemieślniczym. +DIAMONDS!=DIAMENTY! +Delicious Fish=Pyszna ryba +Dispense With This=Dozuj to +Eat a cooked porkchop.=Zjedz upieczony kotlet. +Eat a cooked rabbit.=Zjedz pieczonego królika. +Get really desperate and eat rotten flesh.=Bądź zdesperowany i zjedz zgniłe mięso. +Getting Wood=Zbieranie drewna +Getting an Upgrade=Ulepszenie +Hit a skeleton, wither skeleton or stray by bow and arrow from a distance of at least 20 meters.=Traf szkieleta, witherowego szkieleta lub tułacza strzałą z łuku z odległości co najmniej 20 metrów. +Hot Topic=Gorący temat +Into Fire=W ogień +Into the Nether=W Nether +Iron Belly=Żelazny żołądek +Librarian=Bibliotekarz +Mine emerald ore.=Wykop rudę szmaragdu. +On A Rail=Na torach +Pick up a blaze rod from the floor.=Podnieś płomienną różdżkę z podłogi. +Pick up a diamond from the floor.=Ponieś diament z podłogi. +Pick up a wood item from the ground.@nHint: Punch a tree trunk until it pops out as an item.=Podnieś drewniany przedmiot z ziemi.@nPodpowiedź: Uderzaj pień drzewa dopóki nie wyleci jako przedmiot. +Pick up leather from the floor.@nHint: Cows and some other animals have a chance to drop leather, when killed.=Podnieś skórkę z ziemi.@nPodpowiedź: Krowy i inne zwierzęta mają szansę upuścić skórę gdy zostaną zabite. +Place a dispenser.=Postaw dozownik. +Place a flower pot.=Postaw doniczkę. +Pork Chop=Kotlet +Pot Planter=Ogrodnik +Rabbit Season=Sezon na króliki +Sniper Duel=Pojedynek snajperów +Take a cooked fish from a furnace.@nHint: Use a fishing rod to catch a fish and cook it in a furnace.=Weź upieczoną rybę z pieca.@nPodpowiedź: Użyj wędki aby złapać rybę i upiecz ją w piecu. +Take an iron ingot from a furnace's output slot.@nHint: To smelt an iron ingot, put a fuel (like coal) and iron ore into a furnace.=Weź sztabkę żelaza z wyjściowego miejsca pieca.@nPodpowiedź: Aby wytopić sztabkę żelaza, umieść paliwo (np. węgiel) w piecu. +The Haggler=Handlarz +The Lie=Kłamstwo +Time to Farm!=Czas na rolnictwo! +Time to Mine!=Czas na kopanie! +Time to Strike!=Czas na atak! +Travel by minecart for at least 1000 meters from your starting point in a single ride.=Przejedź przez przynajmniej 1000 metrów od punktu startowego pojedynczą przejażdżką. +Use 8 cobblestones to craft a furnace.=Użyj 8 brukowców by wytworzyć piec. +Use a crafting table to craft a wooden hoe from wooden planks and sticks.=Użyj stołu rzemieślniczego aby wytworzyć drewnianą motykę z desek i patyków. +Use a crafting table to craft a wooden pickaxe from wooden planks and sticks.=Użyj stołu rzemieślniczego aby wytworzyć drewniany kilof z desek i patyków. +Use obsidian and a fire starter to construct a Nether portal.=Użyj obsydianu i źródła ognia aby skonstruować portal do Netheru. +Use wheat to craft a bread.=Użyj pszenicy by wytworzyć chleb. + diff --git a/mods/HUD/mcl_achievements/mod.conf b/mods/HUD/mcl_achievements/mod.conf index b9d5af185..ed11618d7 100644 --- a/mods/HUD/mcl_achievements/mod.conf +++ b/mods/HUD/mcl_achievements/mod.conf @@ -1 +1,4 @@ name = mcl_achievements +author = Wuzzy +description = Adds MCL2 Archivements +depends = awards diff --git a/mods/HUD/mcl_base_textures/description.txt b/mods/HUD/mcl_base_textures/description.txt deleted file mode 100644 index bfd0d06bb..000000000 --- a/mods/HUD/mcl_base_textures/description.txt +++ /dev/null @@ -1 +0,0 @@ -Provides core textures needed by Minetest. diff --git a/mods/HUD/mcl_base_textures/mod.conf b/mods/HUD/mcl_base_textures/mod.conf index 492aeca87..b36dccfe4 100644 --- a/mods/HUD/mcl_base_textures/mod.conf +++ b/mods/HUD/mcl_base_textures/mod.conf @@ -1 +1,3 @@ name = mcl_base_textures +author = Wuzzy +description = Provides core textures needed by Minetest. diff --git a/mods/HUD/mcl_base_textures/textures/object_crosshair.png b/mods/HUD/mcl_base_textures/textures/object_crosshair.png index e5a400e951b3fc543b6e2baf007c24f0949229cc..8e94dcc6bef47196a2f5cd93226eec0e8a8c3a24 100644 GIT binary patch delta 127 zcmbQnIDv73L5?G7 zU0v@cAq~|`P=ea(go5D2wDxeuh6N`m}?85qhYpS1w;{5@S9Ln;`PC4w4S8#xa>NKR-s z_|Yi9b3^)x0?#vMGXb{8&0H(C@yjphImI5(_Lot^d0!)Anm`Q8I<|G(d3<+LcElFk ie)z6&x4^?^3pp9Wy9BiC7%eV 0 or #bars > 0 do + local bar = table.remove(bars, 1) + local hud = table.remove(huds, 1) + + if bar and bar.id then + if bar.timeout then + bar.timeout = bar.timeout - dtime + end + if not bar.timeout or bar.timeout > 0 then + table.insert(bars_new, bar) + end + end + + if bar and not hud then + if i < mcl_bossbars.max_bars then + hud = { + color = bar.color, + image = bar.image, + text = bar.text, + text_id = player:hud_add({ + hud_elem_type = "text", + text = bar.text, + number = bar.color, + position = {x = 0.5, y = 0}, + alignment = {x = 0, y = 1}, + offset = {x = 0, y = i * 40}, + }), + image_id = player:hud_add({ + hud_elem_type = "image", + text = bar.image, + position = {x = 0.5, y = 0}, + alignment = {x = 0, y = 1}, + offset = {x = 0, y = i * 40 + 25}, + scale = {x = 3, y = 3}, + }), + } + end + elseif hud and not bar then + player:hud_remove(hud.text_id) + player:hud_remove(hud.image_id) + hud = nil + else + if bar.text ~= hud.text then + player:hud_change(hud.text_id, "text", bar.text) + hud.text = bar.text + end + + if bar.color ~= hud.color then + player:hud_change(hud.text_id, "number", bar.color) + hud.color = bar.color + end + + if bar.image ~= hud.image then + player:hud_change(hud.image_id, "text", bar.image) + hud.image = bar.image + end + end + + table.insert(huds_new, hud) + i = i + 1 + end + + mcl_bossbars.huds[name] = huds_new + mcl_bossbars.bars[name] = bars_new + end +end) + +mcl_bossbars.recalculate_colors() diff --git a/mods/HUD/mcl_bossbars/mod.conf b/mods/HUD/mcl_bossbars/mod.conf new file mode 100644 index 000000000..64cbd4c9f --- /dev/null +++ b/mods/HUD/mcl_bossbars/mod.conf @@ -0,0 +1,4 @@ +name = mcl_bossbars +author = Fleckenstein +description = Show enderdragon & wither boss bars. Also allows custom bars. +depends = mcl_util, mcl_colors diff --git a/mods/HUD/mcl_bossbars/textures/mcl_bossbars.png b/mods/HUD/mcl_bossbars/textures/mcl_bossbars.png new file mode 100644 index 0000000000000000000000000000000000000000..55bf36dc288f271d12228a67a6a39c98c6ca18e9 GIT binary patch literal 3689 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 literal 0 HcmV?d00001 diff --git a/mods/HUD/mcl_bossbars/textures/mcl_bossbars_empty.png b/mods/HUD/mcl_bossbars/textures/mcl_bossbars_empty.png new file mode 100644 index 0000000000000000000000000000000000000000..1e50b6afc2a8dddc0748ae7763a5975ef6956b24 GIT binary patch literal 3369 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 SEo%JRzk$BCkyed{6ZSuzSwWZp literal 0 HcmV?d00001 diff --git a/mods/HUD/mcl_credits/init.lua b/mods/HUD/mcl_credits/init.lua new file mode 100644 index 000000000..235b2a3cb --- /dev/null +++ b/mods/HUD/mcl_credits/init.lua @@ -0,0 +1,264 @@ +local modname = minetest.get_current_modname() +local S = minetest.get_translator(modname) + +mcl_credits = { + players = {}, +} + +mcl_credits.description = S("A faithful Open Source clone of Minecraft") + +-- Sub-lists are sorted by number of commits, but the list should not be rearranged (-> new contributors are just added at the end of the list) +mcl_credits.people = { + { S("Creator of MineClone"), 0x0A9400, { + "davedevils", + }}, + { S("Creator of MineClone2"), 0xFBF837, { + "Wuzzy", + }}, + { S("Maintainers"), 0xFF51D5, { + "Fleckenstein", + "kay27", + "oilboi", + }}, + { S("Developers"), 0xF84355, { + "bzoss", + "AFCMS", + "epCode", + "ryvnf", + "iliekprogrammar", + "MysticTempest", + "Rootyjr", + "Nicu", + "aligator", + "Code-Sploit", + "NO11", + }}, + { S("Contributors"), 0x52FF00, { + "Laurent Rocher", + "HimbeerserverDE", + "TechDudie", + "Alexander Minges", + "ArTee3", + "ZeDique la Ruleta", + "pitchum", + "wuniversales", + "Bu-Gee", + "David McMackins II", + "Nicholas Niro", + "Wouters Dorian", + "Blue Blancmange", + "Jared Moody", + "Li0n", + "Midgard", + "Saku Laesvuori", + "Yukitty", + "ZedekThePD", + "aldum", + "dBeans", + "nickolas360", + "yutyo", + "ztianyang", + "j45", + }}, + {"MineClone5", 0xA60014, { + "kay27", + "Debiankaios", + "epCode", + "NO11", + "j45", + }}, + { S("Original Mod Authors"), 0x343434, { + "Wuzzy", + "Fleckenstein", + "BlockMen", + "TenPlus1", + "PilzAdam", + "ryvnf", + "stujones11", + "Arcelmi", + "celeron55", + "maikerumine", + "GunshipPenguin", + "Qwertymine3", + "Rochambeau", + "rubenwardy", + "stu", + "oilboi", + "4aiman", + "Kahrl", + "Krock", + "UgnilJoZ", + "lordfingle", + "22i", + "bzoss", + "kilbith", + "xeranas", + "kddekadenz", + "sofar", + "4Evergreen4", + "jordan4ibanez", + "paramat", + }}, + { S("3D Models"), 0x0019FF, { + "22i", + "tobyplowy", + "epCode", + }}, + { S("Textures"), 0xFF9705, { + "XSSheep", + "Wuzzy", + "kingoscargames", + "leorockway", + "xMrVizzy", + "yutyo", + "NO11", + }}, + { S("Translations"), 0x00FF60, { + "Wuzzy", + "Rocher Laurent", + "wuniversales", + "kay27", + "pitchum", + }}, +} + +local function add_hud_element(def, huds, y) + def.alignment = {x = 0, y = 0} + def.position = {x = 0.5, y = 0} + def.offset = {x = 0, y = y} + def.z_index = 1001 + local id = huds.player:hud_add(def) + table.insert(huds.ids, id) + huds.moving[id] = y + return id +end + +function mcl_credits.show(player) + local name = player:get_player_name() + if mcl_credits.players[name] then + return + end + local huds = { + new = true, -- workaround for MT < 5.5 (sending hud_add and hud_remove in the same tick) + player = player, + moving = {}, + ids = { + player:hud_add({ + hud_elem_type = "image", + text = "credits_bg.png", + position = {x = 0, y = 0}, + alignment = {x = 1, y = 1}, + scale = {x = -100, y = -100}, + z_index = 1000, + }), + player:hud_add({ + hud_elem_type = "text", + text = S("Sneak to skip"), + position = {x = 1, y = 1}, + alignment = {x = -1, y = -1}, + offset = {x = -5, y = -5}, + z_index = 1001, + number = 0xFFFFFF, + }), + player:hud_add({ + hud_elem_type = "text", + text = " "..S("Jump to speed up (additionally sprint)"), + position = {x = 0, y = 1}, + alignment = {x = 1, y = -1}, + offset = {x = -5, y = -5}, + z_index = 1002, + number = 0xFFFFFF, + }), + }, + } + add_hud_element({ + hud_elem_type = "image", + text = "mineclone2_logo.png", + scale = {x = 1, y = 1}, + }, huds, 300, 0) + add_hud_element({ + hud_elem_type = "text", + text = mcl_credits.description, + number = 0x757575, + scale = {x = 5, y = 5}, + }, huds, 350, 0) + local y = 450 + for _, group in ipairs(mcl_credits.people) do + add_hud_element({ + hud_elem_type = "text", + text = group[1], + number = group[2], + scale = {x = 3, y = 3}, + }, huds, y, 0) + y = y + 25 + for _, name in ipairs(group[3]) do + y = y + 25 + add_hud_element({ + hud_elem_type = "text", + text = name, + number = 0xFFFFFF, + scale = {x = 1, y = 1}, + }, huds, y, 0) + end + y = y + 200 + end + huds.icon = add_hud_element({ + hud_elem_type = "image", + text = "mineclone2_icon.png", + scale = {x = 1, y = 1}, + }, huds, y) + mcl_credits.players[name] = huds +end + +function mcl_credits.hide(player) + local name = player:get_player_name() + local huds = mcl_credits.players[name] + if huds then + for _, id in pairs(huds.ids) do + player:hud_remove(id) + end + end + mcl_credits.players[name] = nil +end + +minetest.register_on_leaveplayer(function(player) + mcl_credits.players[player:get_player_name()] = nil +end) + +minetest.register_globalstep(function(dtime) + for _, huds in pairs(mcl_credits.players) do + local player = huds.player + local control = player:get_player_control() + if not huds.new and control.sneak then + mcl_credits.hide(player) + else + local moving = {} + local any + for id, y in pairs(huds.moving) do + y = y - 1 + + if control.jump then + y = y - 2 + if control.aux1 then + y = y - 5 + end + end + + if y > -100 then + if id == huds.icon then + y = math.max(400, y) + else + any = true + end + player:hud_change(id, "offset", {x = 0, y = y}) + moving[id] = y + end + end + if not any then + mcl_credits.hide(player) + end + huds.moving = moving + end + huds.new = false + end +end) diff --git a/mods/HUD/mcl_credits/locale/mcl_credits.de.tr b/mods/HUD/mcl_credits/locale/mcl_credits.de.tr new file mode 100644 index 000000000..fa26f5bc4 --- /dev/null +++ b/mods/HUD/mcl_credits/locale/mcl_credits.de.tr @@ -0,0 +1,14 @@ +# textdomain: mcl_credits +3D Models=3D Modelle +A faithful Open Source clone of Minecraft=Ein treuer Open-Source-Klon von Minecraft +Contributors=Mitwirkende +Creator of MineClone=Schöpfer von MineClone +Creator of MineClone2=Schöpfer von MineClone2 +Developers=Entwickler +Jump to speed up (additionally sprint)=Springen, um zu beschleunigen (zusätzlich sprinten) +Maintainers=Betreuer +MineClone5=MineClone5 +Original Mod Authors=Original-Mod-Autoren +Sneak to skip=Schleichen zum Überspringen +Textures=Texturen +Translations=Übersetzungen diff --git a/mods/HUD/mcl_credits/locale/mcl_credits.es.tr b/mods/HUD/mcl_credits/locale/mcl_credits.es.tr new file mode 100644 index 000000000..a8886286e --- /dev/null +++ b/mods/HUD/mcl_credits/locale/mcl_credits.es.tr @@ -0,0 +1,14 @@ +# textdomain: mcl_credits +3D Models= +A faithful Open Source clone of Minecraft= +Contributors= +Creator of MineClone= +Creator of MineClone2= +Developers= +Jump to speed up (additionally sprint)= +Maintainers= +MineClone5= +Original Mod Authors= +Sneak to skip= +Textures= +Translations= \ No newline at end of file diff --git a/mods/HUD/mcl_credits/locale/mcl_credits.fr.tr b/mods/HUD/mcl_credits/locale/mcl_credits.fr.tr new file mode 100644 index 000000000..b34249eff --- /dev/null +++ b/mods/HUD/mcl_credits/locale/mcl_credits.fr.tr @@ -0,0 +1,14 @@ +# textdomain: mcl_credits +3D Models=Modèles 3D +A faithful Open Source clone of Minecraft=Un clone open source de Minecraft +Contributors=Contributeurs +Creator of MineClone=Créateur de MineClone +Creator of MineClone2=Créateur de MineClone2 +Developers=Développeurs +Jump to speed up (additionally sprint)=Saut pour accélérer (peut être combiné avec sprint) +Maintainers=Mainteneurs +MineClone5=MineClone5 +Original Mod Authors=Auteurs des mods originaux +Sneak to skip=Shift pour passer +Textures=Textures +Translations=Traductions \ No newline at end of file diff --git a/mods/HUD/mcl_credits/locale/mcl_credits.pl.tr b/mods/HUD/mcl_credits/locale/mcl_credits.pl.tr new file mode 100644 index 000000000..a8886286e --- /dev/null +++ b/mods/HUD/mcl_credits/locale/mcl_credits.pl.tr @@ -0,0 +1,14 @@ +# textdomain: mcl_credits +3D Models= +A faithful Open Source clone of Minecraft= +Contributors= +Creator of MineClone= +Creator of MineClone2= +Developers= +Jump to speed up (additionally sprint)= +Maintainers= +MineClone5= +Original Mod Authors= +Sneak to skip= +Textures= +Translations= \ No newline at end of file diff --git a/mods/HUD/mcl_credits/locale/mcl_credits.ru.tr b/mods/HUD/mcl_credits/locale/mcl_credits.ru.tr new file mode 100644 index 000000000..a8886286e --- /dev/null +++ b/mods/HUD/mcl_credits/locale/mcl_credits.ru.tr @@ -0,0 +1,14 @@ +# textdomain: mcl_credits +3D Models= +A faithful Open Source clone of Minecraft= +Contributors= +Creator of MineClone= +Creator of MineClone2= +Developers= +Jump to speed up (additionally sprint)= +Maintainers= +MineClone5= +Original Mod Authors= +Sneak to skip= +Textures= +Translations= \ No newline at end of file diff --git a/mods/HUD/mcl_credits/locale/template.txt b/mods/HUD/mcl_credits/locale/template.txt new file mode 100644 index 000000000..3ee9fa56c --- /dev/null +++ b/mods/HUD/mcl_credits/locale/template.txt @@ -0,0 +1,14 @@ +# textdomain: mcl_credits +3D Models= +A faithful Open Source clone of Minecraft= +Contributors= +Creator of MineClone= +Creator of MineClone2= +Developers= +Jump to speed up (additionally sprint)= +Maintainers= +MineClone5= +Original Mod Authors= +Sneak to skip= +Textures= +Translations= diff --git a/mods/HUD/mcl_credits/mod.conf b/mods/HUD/mcl_credits/mod.conf new file mode 100644 index 000000000..3df6370af --- /dev/null +++ b/mods/HUD/mcl_credits/mod.conf @@ -0,0 +1,3 @@ +name = mcl_credits +author = Fleckenstein +description = Show a HUD containing the credits diff --git a/mods/HUD/mcl_credits/textures/credits_bg.png b/mods/HUD/mcl_credits/textures/credits_bg.png new file mode 100644 index 0000000000000000000000000000000000000000..ad74cbd3070227751113b46a48353ed8724f37db GIT binary patch literal 63056 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

_%cp93MR!&A(7A2qK7s zb?pB{VlaIhxFbLd4kR`m#1LJ^tVJIU@hGcjlFOe|t0Bi3bnr`F=TD&fV#n_BW!jLZ zO(TJYizYNc{_W{BL#t<3VIMagPS8-wY0hAZM^oTzl3+zU@A-p-*lY$WEkPVY5x{Mg zxmICThd)AeIw5VRz?;spSAeH_y8i|&HnFo8MkH7O000JJOGiWi z{{a60|De66lK=n!32;bRa{vG?BLDy{BLR4&KXw2B00(qQO+^Rg2MQ4rHGOzc6951p z07*naRCwC#z4?I zyPWQx>8iZq@VL_T!+X!eJu+){KuIQIXKI1n%C3Crkr5sq@A$rttAFuNzBT8%!7@v6 zcc%aVWvvm10pch`p2TR{9>=Q2W|;#3?v#S=IwVm9r4){3jqQs51^}nBK^z6hk{Ed$ zqH22_OR`sr#%Q|^X&gf-V1KT#TNMBRr4;t33RxT?Nn)(h80V(L{#@aHHQ6_9hb)Pq zl*04zjED8o+J8BoktY$-B*8k1acWvTA4@!LruWp1MwTW3fahb0ht1M{_Lsv6c@iT} z$^KZk_;NhsakGNr?^tV%JWT-rKORna+O7b$|8ajpo#{Igm@2MM&G>Q5B)8C8%o{wjwQGhH-P$Ut~4b9*C_0k@H)o5f%3}XzQ zPZhR&ZyOlwPbHEtK$67B;|Qg0@p3A$UFKkO)LJ8n$^LMzuvzBzv-hV8am4FK9HDAE z>`xWeMP}clyADwp0ss!@3hO)r09?!kr>a351_;9dX%wRAX#H4bDHiYVH{W&rfMFOB zMx!T?GEb=#rV9g0-!4c#nRLiYS` z{V?EA)~Gbu%lWQ!i(0oRvV@i#V^HMNVg&%o0DbS+htv13nif^lVwt799vLj1#R^b> zxuEL@?9UadW_lng0HxNbnid5w;4pOj+akrG*8Kf1==%ZtbB(HLCwrw(HX3E4`S@x4 zBF~)h>EHT6#`o>3M%&|8N=@VEDfX4-h1Aga<#hZ}6atX(TP)MWzPHFzY>Nbkx`hIL zX5aU8{CxiC`zw@9i>lEm(uAKUeEsqi$6DKeqvM~Qf2HXB>lS&+^N){z&DS6No%&(G zzN}H{4pFeM^S{z9YJLE_=YPcyTPS7c&#`Jyx1B%#dH&@|OxNESWNC_J8l%*mUF7;< zz`53BA1n|C3wn6B9dy?tjU#)m(lo&`iBPuPH2;PXrPgTL9$~ORupoQQ_KCZG#1V>w z7AyI;VH{EE4!ZB{`e6Wc{b22tQZU9KjzVN{gu0{k$6O4?@dEW1zj<%cBtpx7=!X#i zu*y^1sXO~+yS_&pN4Qf8SsbEndvrb7q)80jc2G*8?FIm_9+&G;C2@>9rI06N-{=l^ zN+C%iXx%|6py>uE1#DLZojhJF>$XLnBv4ABNF!9bN3As!6tW~n)3&^L(fALWrL|WI zsCA2+Z^#udWOYL~W0oeU8*LXq0OU>au`7Ne$ql*A5}bIF13;do*1m2#018jr$s2=G zsMw=WO7TS2sG0_VLXjn?cwv$Y?0QT9P&SiCLJL8QvTgtc6j_S0Zg}w_`?ovxc=#Zy z+PB|Vn(P5A^9*HG(>P-9cue9^EZKfjq&Sof&SIaX_V-fLb$GY)?ax2gzG-idU)AK% z0M_f1xYw`#a7`8vy^GAzAWxqe2 zKk>M3d1T_X(e($iB;mPaP_;dbG1eRNJfbv#F~)jbGUw7HMy*>IV^Fs}U<`KRvCTay z0Lvu8scEfEmc*#E%wL-S*5hLPrfHER5sWeHwRLD(vQOd|4WGA$=kI2j=3P2bHxKqIMsls@3Y}*gmdHe=82JqbLN7K{s5W%!NKr0YB`I=;ZvX z>H1yd`tidg45#Y{81}#wemtDe4;K_^3@A0(8?vYLLPE!DF6hS#U<^XnejIHIME3(W zS%Q)8pGLRHl9)U;W7z&e_amoBhVgf5~~?s?i-X zaiPVNu^x@$@##b=rO0)4yd=3uVgogKQ({jG+4P<(dk!I#bIfuabFT_e(`(0L!pz?F zs@yykJ>}#zc)@bl@!h~ikD_?{LS?S-0v@58Re~NYjbw(4drh95A*X} z_Vd!z%R${5-|%;+oIL4dPkF0KemAZkIC*sPp1HlemcO~**^bZuR5cCKWD4_Zt&zqt zhoKr-k~lWT{(fQmMr$OT=bC$2jV32Weq3+L^Qt&Zl-Efd;c_u(og9{Df0@2d)3!Ek zaxn&N*W*q?!8@gFSa|D479!nsXuHmOP7(?NKlCi^dk6Keil5}C4Cxt{^ffhk3cSXDRn$tP~P z*vlIgZXG}8Yii2N{IEaTP(ndbSg8EPhw^UAUq2J{JF&)EnES0ra`1pLVVVT@eHy2;$b?MlDdOpy(KSx&HFIavz|;)%=q=^W))6 zX$>{a4dq_@`NNEhMKVvn9L{zw%R_iR_tk7NH!X#N3RJ9;REp$s-FpvnM?wKwcW60m zJd~BSr+d47b=^?T{V%DcQ`JCsQ;w}|JE%K#wT5_~7e^u5uD6R-$1$Xv&yuQO+YdTQHD|S+_m%ETx=P+u>=uM$Y-GnkS1)CZ!~w zr0hafw>^q1MUkbGJ?F1%4y$SGO;_oD`m9Ey(jD37DXO-^o81~kmZ7ROFBb3@Fx`2J zQK>r=S%xCdQ0Wfu?l&kneXmGjW6+RiStb)!-7{G<8P<7vC1 z{9B{x!8=>D+=5lzP_n$pQkt`EhsW&-S(?z?mK>6^Xw_|R3r>yJXu1Jel90XJKS_ex zwRaY+rt9swXxk1=Hy}-8BuRv}AFy5KHh(NmjQp=s3fggoXrUUB#1WD>g6;;aiwsE= zL3h(4CJv0degIT(>iU5~Lh-JoG6(=a>`wrII1HffDDF<95OEY)`GdO(b{zgK+5Y!m z_E1V8jYGTmP^mV)>4oW*!o^iafB)?dFO-mEw^MgLvN(D*45U01$p`@8KYe=UgeJx9 zb=%ug^W5`LPWZOU==1->_dfyviX^hh$UKRVr^(F_u;M({I;T9-zx&Uh**>0Nr=FeF{OaN{_Q6~DLa0tJ1kR@I?SItN+}!eZF34)|Lt!-Qu30=FM0ge!Z?vh zY*{KH_Jy@?NotU%SDup_E^Z47LH_FRKGFDT#L4gu%QW)BKsO94D;j^7Q^+?T|J<}# zvQ%RhxlQ3NS2nG^0p*R1L8&_{HJRJG;o>HzFe1H7=?|*_o=ZMTf?EkNiG=EbL zscPLJjYA3%=i!@^l+XG5{w?1>Nfg+HER90Md_S7mXVkhy8pp_Zyx;x!V%HCG9^xoK z5=T?$d2zx=mPsZ2{_md;*4}V3J`5IEeDk>dE{#Iyu16Gv7{&{R@q*nlr{pCsPQl_1 zZ9k&zdME$^mqfu;hoHE}alJ%04E8DtR{as4-Win7s&qlnH?Kj7Cr4-w1#39-1Zor4fE!pz{ zMBxHu)1hp%QxKrPZHpAAszJo#>wdt8C$g7_jK=R!HZ2q`UjAWMq&QX@Q5ZsZH2$}2 zFN4HkfU_N+6WaWrU6JBcH;BV%8vk+YdC2np%SHpn*zuJ;e+{CD?Yn;Z{(Oz1FmTSl z;qlqNNN}$C`1=vsJ^zZ{6$O0#bPHfA2*~vl`mx zve*5H_q#RPzPFFID7Zu2^)$Zo{Q+Q;B{(x*O1TR0Wmw z!x(xf)NO}gu|PM{{l8o0=!WV33l?|ih7orn%<6b?004ETP|M*Vs)xpRBdN-3D!PK z@zuk|hJj*VqzQSTN@0_;L_xdxJK)Gk^{*ed6b5mE{OyjypwBNyTcSTyq~n>=R|;j^ourDqmh3scf0*oLvD=p# z=ce<#mVKqM%rks=v%@mau;gOF+j~C#mxEnw50&=9N2L_@mA2<^nWa{vM)ny#zZ`k7 zpU$6h5?+Uj!sl=7^~p~zBv-XCc`=cHAe&mZslXPKQpZ+6c70j#iD=mk6)E4EzsIJ1b^gEIt~~pP%@S#n;Q3Ut2OQ(vw6qYp_isZoqNmLYX&l@8 zU(z^-b8S7~Qg>eX1^^XDTo0?lhJi`}>m{X;j%DqwA8z^x0P2nkeA{KtX()a`{dfQP zYvZoOqGoT~4)^PV;$R8;`rcLsB#gV`SXJJ$WyN~ib$DR=DXC8K1vkkKrMy`AVO`jq z)!Xd~XU@Y+RlmeuR7pPCiv@)TR@VV82$?h>xuvj1??KJ&Cu0C08^zwhq1_Om}c?eJ1+@BM$+ zp2j~{4cj+YVW+JcTJ6|mFZ#1m&VQw^!bZ31DB+^9_G=rWef=Qk-%OQBzVQvrbpD&p z2AHIVC;Rsg8ysuxXt`?SY3fxG4GTvlw0zpG?D+5RH!Qq0wgbft2_?y2Ip6=D^;cD+ z@pikyscAhemsIwRp}dwc6mH5tiWJBgl>Q2GH&+w0z3x;t- zt?2^YDK)L00D{HBy1Yt}y;76?FpL;SQoAc-0Hu(|5;q$}!2&0zQe$S-wtg5ej3dq! zO*EwxdtWi@t`<0Q@|o=KoQezE4+Fi&T&!p_Ph!9Tak#*ttnKk%X1T6m7)Y&N)le{O zpRqm)h=Kt7GyhEi7sq3PqQs%7#li1cW+_P}j6oa**q6$Cq=(=MO0I zj74@A#9@HvlWRZa$`lm(p-0~j&U@(iSNSx)e7558-5OyxkXZQnRNC)IAzYUqcN?my=qOVgP2 zQ3hDt-J#?~aDM+NrTG58psZUvMiNJ)?=%MCV!;m|L;ojppATmkN2ve#pZ9|X{mIYCXw~7l%kd!>K81rTP;2Lf~S*Wdr7j_Tm?)M67M}9 zOFXQX-hw#SS;+;J_7BCXXzAB_WBb3RN}wdQ=kJ#)pgf^}*q^-qKk=%hzmKYI>iRW@ zCZFBjz8h+Esn&@{C6k2gNfPkRRfDU^gYxXN%=5-X`}NV^RX3#a zmj1`*1K#lX299owlk%dXmrzVp@$&l9%K>k;YwK-E;#(Gqp$FsZ4plD!AO=UoBR1y%j04dq;-> zJaU8aS$Ej2mRIA=KdbI~CoMzanop%lvkl=Tq4dD>ZfyI8#@Jhh?T^!mfo z4p6|p)HZaxeg0;$25W!M`K9J+v6_#qpm26{bqWd}-q7*Cl)n8;D&`!2>s^=+Ph#&L zzblsXJ%V{&OwQlFZ0z|n?uyBuU_?rxZ`d2kuf4tBOn!(_FcOa_dTnJ9unrgAKls<* zuqR}=SM_@S`gzfJI~wy;Ydmczbd=sZS9@n1S%+H8N6bxcjWH{Fv;bMU_jj4h-jGmHR zsudKnjT|$R{W{NZsx_i8K$;}z#u43c@%jVZYRNE+IB{M=@@dDaMieZNXDQl#MAwg# z&ZTJ)bJ-T`vL3`GR|>mjj(th?MV6xN2V0yFk4)M(6o-8Kb7RA`-KxO;Tq6ns6nV-O zpuw(ERnvIYrk=w+Isf;oC0@=I;xNE6&uj(F)kZ~8=!JZ4xc9JO`@pg92G1j*24o4j zdc2$}z)&!If6LxUu9lTQe&>#_fQR)8&*#z}f7A80*VDCkzrP!G;*;k;EZ4>??)7@9`}5N@2HNVt=me_1FD?#@drd zE$veZ$~KqFlDAv2eYil8r_fwMp5~wSs?F5g%_#}aCm+fNVX#1+CTO{W?an`G-;t2< zSWWYPv&?a1`^?%;<2Sms)p~Hs|Z(ETq9+%ij1 zHZ6k19nvI5#|i*fs4DA++`m;r#Sg>ba>e#>6k!-IxN}8Yu_Lv=?@c zzGqy?vkMZh@a`m^E7==IDj>anZflJ^X>L7*t#VisQ6YCVP8ThR!Qa(@Nmr`)Vp7gm=0d(ZkUgBKDo<*M7zbS5wp=5oBYw0#m+Pd+=C->MS z404m&P9f2TKJvb$9bb82lz2+>|Hz_wmT+;V@jBb2e(UAZ=Jp~QT{;PQ1x4d4-_vn( zTC!-(!_|3FLOd;3weBujBD!7XnSF|Ft>tDJYQALZjxN9j)2512e1*BkdbCuZpf zWs5p`@^rkp=j#vahUSl3P?|b7d;#@*4mY|*!{J_*rcQ*xX&43qxbxpt!fV}Hv1h^> zt~=%5zwSeFu7aoaqxZsBtDNsTs{s{x)#6XyK7LoX9pWgYBzhE*CS$Qc98p>FZgGcG z*&vBSdoa=`7={7LrnQSrmP9BUjVK6^BoW?hmbhCia5z^Jz5+ngQQ0&M0-T$c8Z(tb zp2RrT8d0!7mLzz)TOkMnJRiIDqL0H;dZTvwjN>{SKG(**C?{zqn9$pyC! zr%{Mw+1Q@JJWX&YC$H?QhYi9YBu16Rk6>z84nyqEHI^ymriwK2ysB>=Hwc0NpI(mK zhdA8~(lGpTuCUA~alcFxyqs(DDzXe8p0;d%u*WDZGDVgl3PU`fDy(ukwq=&$g}s_0 z&+zTj4q+JJ)AIq#d^-NJn#O;&5eccy3e9*PZ|Gwks@x0ACJgWJz?DFAjqMr>e1n?ktYTt6D5r*0984 zvB2}Gw9U_Q|EAn9eXbju+fL#T=UO9J+#yS1+^=#33o1sWGlfACM_6#7PGk#d9HFc! zs*9rtyJZG-cZXA1)B8WXx&KaDb0i^lr+_$$uuNm?T@a6oTsGY?4~NBHy6Y#NjsosL z$e1FDQHpoMUEt@2c~-$4B8Nw%1<1$js4PjC2h>5@%KBlzsctNfN8I6BPdqEkcvdIY z=fD^YD}#w=#XKq{Jg0Mw zvS|_X_+TDY*=W`ZQGI8bW!SRDNf<}{FyQ4>lSnlTY&a@Bs-=BG8x&b)HB!Q8>Nw;o z8;v*!NPG%~vun>|Epy*qcv8=&iUE(#@z*WNT2BjtV=uA<8viwWP4@YX@k?oyF}6Y| z$8YT$vF8QB$oEfJmY}BZFZSUAaTu`&>+`%6j6MG@&#UVPyqt*V6$J}Rv#6NIRk%E^ zESq>{3fDZYU@=`k76jWydrr2K#;>*Kk9ca0oqu8A^VID8XM4-jqOM{L!$>?W=5a|l zR<|8H0I_AKsr`4nF z2D@m9Fj_EHlGhr?5$a$3*#{HH(bUV+50pPDGA|LP9l+R<7a}(ll&YTYdn*vV)p~QM zs9mDc-4x2DiDg^WtfYTn9+1!%#3OQfRJIc6@TlfIt2rT5DY8E{tylRIx4h(P=9}%> zlQc-{jpb3*+BVA;d1|YGqKSFyR^Svo9+t~fl2Ej48ZXi9C8eRf3YZmZR#PQW!lGOD zu15t{cJE6)g>rc|X_}gr1gbafQ!7^8m)fiRooAY=_p_wFTS43v30}&Ehi24{QRj3JKMf3?w(F^d#%bL$#$e49Q-dDDNB{sJ07*naRH`Hbc^Y#S zkLV9B6|PCpL|5+i#ePKs+cJf5fgxG4l5>o$v~V zTB8(?FC~28NeK^XR}c>>jzW}9c%=-O$8~FbQrqj!w|B!kVB$eZLE-!7y<<<1#a)p( z_6?SKP7~Vlz>Iz3e*7|h|EuE{o|gUo#{2$Ckp!U~hO6^0*T3ZJCp@oi8140Qd0d5S z&pfQjKK1OC@Vr>U(hs9e3AEj4d0L_H(1fREh$p6SvF&F+?0Noj*w*%JZ>U8~yt6QH zd05vxEqUN~eE(dasO5$Q*)ESu+INJCG7RIylj{d88D?Q~^M`z_GDd)}1KF>-`UY4V?D%>O|rewRz zuX34F^7@u)-IpgQ&#SUZb%#ME(7c%v;#IFoDPL)B*;KDdJD?{1l)CnE=BjzzXlTC4 zvvPD*Zj$^a4{P?GxlT(wrk}^tGB`Urv$<;C?`CGN#(BSt>FT@+=d;Zf4$HAO@EKml z*hR|RU~!pQL$&)_=4@F_tSy&`w{fjnKE4T8$>J%;mt}b$##XuKJsLCU-$| zQ8LG}rch9H7j6GK$L2;=@P&C+ZrBEOn}_3yLp`2Vqi0nS^^^LZ+NsL?uy=S?+-fuD zSGg=Ksr;3V%Tv-`B7I&3ob#E=y0IvkPr{Q@lkn54WO z{x1hBD7DA0FnfrotA~J`zmLy*{$1Gziu+!ruGv^+Je+qpoA3MntGXysTaBoqW+^o* zs8vNZMG?EIM(i!2XswvFX_Y9dYVW;Tvu0}V5fN&O)GCqR^Zp#i_xEp(IDDMLc?Kr195E1Y}D*#dk5kEtywE(}! zOKV)(&WTx6vw-6CyTy)kIJI|q%*D@(M3_vJkMFUl zF)iRMG;?%+wi3w(TX@C6$Z>rWfBAGC{Ikg=r}_OY7I?_FEsu7~yY}FC+bRW!i1F|X zS$3Z(UMS=1OFoKV+3{(Ug;l+UH4{8sRbB*3Z*mqO_ z`%>CqP8I)G;yFanQC*A!cz;T8Vw8w%GM~+Yh3l}c6UY03Z=DLRe07kb8C|PK9RpR4 z?vq@=6DcpSu%bw;81`{t6}dTrdz*G1RCZ3l=*Ap_%s#hQ$qV{Xc=V9fj;bP&H(!nU z8){%IV*-a`U@q}q7o>bQVhM?Od|~ZGG(Kq6X`@SmCSQMSLIoXc4Kf>LpCRsvn|hNb zYF=!xXr$3o>i8i7+Up=E6MB?$4rOp?%Yn-D_kkX1cePM_iX zm<45QN^d(*!afsgpU)(UYO(_krab*>0Zp{-Q5U7YF+?O=6Yo@J4jyekBY|E-GsLFE z?kS>ExvvR#aN7&{%7=dmCN)FnMV_Q$s_&tbX+12d$i7ztFRZ9A(HQ%g2N=h1h8ZZQ z*W~ozt+{rYwv2G6xe(R0U}F8!+0kI0|9u*!fZODyX+j`)5>wx<*hWh^)&vt1Nv@n_4;)ppOyqIFI^ll#_jF5MDwl0 z3EDli6EL5D^M)+j&I>jMYu5c#SU+`xu%tJxz;9n7|2(MqZurenVIVmf=ljV>3_8FT zNrlLqZ3R>UWJIJ^fG@BZInTchPYj_XuqlV^eo^lCUM`HQ&nF z)s3!)?AK~Yk>#K4`EHJ8+Vdyfcx-KU0x9xkBMjx)h(ikH|okH|+eYC0mAieNP z+!ldDq0OoNBw%)lJ$sc=hNnDp4^!lY^$0}Fj*iXZ;nMeqiNxN>Y_oM}J!8DE?{NF) z1Y>h)#R*zs&3BIF&%JRr%7m^fbj!YS&L8br!r$X_sGvHWA%Zs|3-YNrZ}~%HvkN8w z1!ZUQZMl9Jy%_R(P&cF4?zXT014dAsZ)Nn(q>ne* zV!uJG#o@lW==ZUANEp2vAwNZxUQ;v`_G;Pn^LOUP`HF3MAo1iC_i@T87Kh6w4 zNJW+QysjQh7{#p4H-z3 zBMdTOvVqQwIDpM4z`uR3ra{~*MwQx>??+V5mmk!eC}cVoake#E@j?wgZwJr6U^@-p z;|?MFv?yi`jBNr`}j`P)5Pto6=h9Ui~cn}s)N-1L>DVFIUelFb%XOb{=P5Z_%1-!nwe zV}Qyny=x?`1X+M~KnwpZtY}GRwVG&ft<_UBYe(W-%7oGj6oCS1h}k>0=*7r|MM!5xe*3k84GCqnPC9hs{>_BbB>S zsBUF{@?VP%tV%@#5oUa?e|;tvH@@tA4@_4(e+#o|zV-Pp1>65cE#!)B6>RSq zmx%v^hY%vEb4(5h%_YJQb(p9?eYQsT?ID8orzetI!CU_pWdv_xoIb7lzO53NObNJ{ z7p~a<{_327-T%HkeFiDYu8?H}ISuFilgEkRh&3sAxI9G63A+BLmJnVb?QhChxlSY( zk;dN!e%e8fH6IP)?(Qj6_L3zPf_DRdA1eAOy!5?bL285ayec809~)b@&7VUm0_BIe z2gY8bCsekX-6ew1GkAC(NJCs=&!*wa8HU;@b*f&DW^l}t{VP!lOS<-{z|ct$Pn=$Z zlz8Rs{7d9d4w8h4mRy?r(HP7ba9B=0RhFptHeM*W2lFX)Q2+d@lxK}%z5qzBj{XhJ%9S#;+^JnSX;{2t0JHU znWIshGSS`3wqz}F`gg7hxmSPbm7lCpbn){|L#2s=^iULnzT9zCOM3pZCN8Uy`rd3I zAb+=InE#}H984GQ=&H<32F(V~n7M7XhoKIwUb|&pbE+aEA!4{T-)*;|4S6ADANs*l z*zHT9d+jF>$>O=HGw@^$RYW!DZfs@FOxKuX`DV?J`>$6l`Y!Vj*VEXQyp9wz-(Beu zyOP`aZv+d!{Va8V>coUW_t!lZWiSQ-W464!IAIqxC7^W_VR)K5FqU0H$nv7*0mS9+e-`O zIbYlzO`Bloo_cLzu#^dj7dB*HJ=35>t_&?)<|J*3SnNel7k!&91#bFx`M(Z~8eVIf$!*+*b?ywibaX zcJ@EpF-LzM7?YfDULOv)xtjbU-a(!PhA1(cYvSFLm7NAA1W8kFp9%mi7~=Wo&+MRd zLT#w!w{rpmE8Tlr(u0V}&oPZ{5qFD|JiwDWq8F-ars=TOT-Nb9-QJT_($S`{*6h*XXDEJzb<1U1stCBaR#Ylwgb3Rt_buz{4q~Ay=T+F6yy1_J zC_b>^`Sl$ObSftAA9>7D%IS^xjdco4uaJ4>oEbVj92V- zDqy9Ws&^Ew-Fe%TtZ%v|)Ze7>1JV}6=^>DNzx%CkefN_Kk~BK*Mz^}C@Gh=v4Bi^i zBO;iLH-Xc!+LUYb+?(K%_%!Fwt17E^vi2}8m5(_Poz$G)+MZlh(-fJ_tH6^!9P!P| zZIqdI82KW#(|(wlBe+`rOA&nwQfq2 z+#eR)hYQX^On9Q~AtiOq3>D%Rf45|p4E<+m0jhe-kl!P$*YN#2>_0K6rtc4`kW03C ziSk+V0&6p?@Q?!98Rcy4ftC<`2dP784eLl7>Ge~oG|fX-9Z0cwFEI?WT%eYiNXjX4 zdFYcU2@<4%P2Pdz;KHn|H9UrCi)E2U){m>gQ1?R~{8&$?lvRc%!~1B9#n)$Z4bzaX zg>p2~uyX?Gy(yOXn7eCwrIP6a(n!N4B^UZDJZ-?3rTGO=mlf7z>p}$CgH!EKXo=t3 z$W`@wKe?;?T9Vwz6f+`MOQz8XbNTG{OG`j$ZE9<1!w(TrP$K@ACz2bQ`)~|7;)II+ zjej?xF|E0v__-+5+RI=0)@IbwqeRm;R0hvOKSN4|mL5qzYtIz?U2 z-Q0%eU;i`Kq?V)(a6-dAI#B^8!JBXr5{7>OX)6|>Y5cv6O=rCYeF^K+R3~ayf=o34=81dG%@CC~x&31r6mNb{6jqF4MZTaZq9O5X>wZznRwB z(}>>o2(>>14F#pzH&}gZ8Df(_yUvKz`C-~++d6r@kfs3HkAp%a8!uR^FkEOhG2dP= zh53_Md$G^Hli%I8#paD6rK9-5t97Uf&wZVD%H#rKFQlQa_P9LEx7L+wrCeogzh?Df z3q?^7J&X8r!Hni4{EI7IG-?u{?HPk~Cna=5oH}gv#(6l%` z&*(A^pm9xWOb;ude%+a09DJ2&&qbKWgKr9Ln2O#O<; zXOOMUZKDCvX3wRi1-F(5zb78_#R%>H$7q$ zSOV6t>aqx>6m!nX;Ya~>$Q>7?deXVU$2wjC^etk_7l3`k(|21t=t+#1sl3q}sJ^`4 zhrKOS7UUYk)Pt2^M)o_J&p33#Ud;eH&Ohwy>>qLaUk5XR6Y0xx4dyKw&jJnN7=2X1rRXnP;gZ?!ZXihNl#lIa-Y3@N3-NURAg1ja^>gkhlJ&? zq}>5RtaZcmjc2>$kz1JJ$(oOP&2g0+x?wHomQ0bqI0vX>vs{&rXd=aY#J)o z4{C^i_2F3Vm4pVkUmqnXp3S`1U>f67VUCor+t})Kp77>)Fh^chn zDgS7=V(anxw_};z=hCKwkS6$B^h-sg$>oLSp2TOaaXM5!M5Ekl)8QR^$r$CWpA$1Jj0yX2S8vTLSG3oQs-OD~?uU{54L-BStm-lk(> zqx&sUA{LXh;!bxHE`zV@@KN``g3=0V?8Re_9>1!qp6|+Mu)y3BMS^!AZ)}YfXn#yPWi&q2ih`eZIy0#%316unmnFDV8B!h|G0V7o>h_m!eVgiUzS0 z`)2QU{lw1EF)Dd4cN0g%K67}Zx%S0!#I9*jROL74u(Vsn_Ffgy;NNgF--q8mBtC0* zzAI&!IWAE(kKJcdrY5u=(z}kk6Kz<~Ie$?mhz)DvhLqP78eDn9;6*&K*}=+@8z~o-pdO zY&xPV1^gz$3p^P8S+$&<{Th?JU*_OU(9e>rot^I$6LV+ft^xCIe=c19^63`Uj-72? zqTj5;cW{<+Hvv>M{%O(;fNGb*muaj#NLL&2eMK1_CU()V44DWHx(C)}*M*b-F28SL zlL+eTSCK7)ujf^;Zpz9APPDQLGF*fTNjl#3oG*9crvNVq3>?2-QdB2^e(`9B>(4!W zekHO~q5S-8iTqgdYT4VDP1O()e1k;)O>$(x*GuPfOM%~v*w#!^oyn$bf?B5*D#)t# ze+q!4S%%cNWcwwFnqUTL(?g@1DUE`~!4qTy^n~~TI_Y2oI?I|SAY;(W@lznVRpN)$ z1=rj|<>;RH7Y){5iON-d;eY~g4aqR``Z-$tIsb1E?n+~e-Q>Teb2P$P-gr@X4X(8{ z9A+dVqdqu#rC2INqAU4f&kOu>1kA%h4MK&bnUjr$rkx!s2mVu)4F83NcT*$@wy6p= z$Bo=BXKg=w?{L>cZf7uAori_|hlKM(KI6=}1N+kc``)$qEzX6<3V-H>!rd$Hnb5jz>`o1&FNn+hP3z^p| zYlhw6tK$~bc@5zXM=|53pF!@QbvgaQ`TMn3x_}4C2>iK1* z2S1X&A1&J59I!H?_2%yn>*aLZr@BEME^zuBMJ|=bVT}bt+9%$u>(6<2KB4NL-F;bt z`&&0LrkEtxgY$=1ZeRLxF`<0c+hfsJUmU__>=IKjG`g828po66i>c*YcioKlhl!W& zZtl1ax$rlb+)m-ky1AG9ZLKNi+L*zDsrW$j*8C(_KIEurTfkVli}BIq&V=ib=eg>u z3W&(nxfJtBTHtC`l-JZBo@UzTXHL@Mx7Ur0Xq8%KOu$L!pJ}yH2C6fNU%ykId~UxE z?XM@F5x)o3W^d<5pRmUd$XVZso#vQa(gmiEYDd0qT}4k43yuy;3Hd6g=CUXMJYp2% z_afr-Cl~<{VYlE6B^!z|#ppG~1vjX){7sW1_MqW^7VO zG{sMF@an$^SdG*3H-0m4gm_mE*4ibF4&-F=<&Ade*Ep8oqoKLI)jJ)pep&^sU=ffK z>n^zuN0;fn6zhuZ8(;}+!x2aQoxL=jh>7J)3__^`r$-0vcX8cCQS^E`x(`>UFzxo- zp<|uS7MM)+@Xt0!Pb|XS#j0Wt?}xc8C=B(o%If4_JirK3vw}fel5^?+o8YYm9W0tc z=&#Q~_~CRH*qVv-Z2%y?U(zWv4LxN}{KJc3B~!tcDTYb}|dkUfx6eqxQo#rPtj z*%Gzia#Ya2)*kJ=0uQGcB7Z*8&e^-}notG^gXpez@9`c~BF;)dOCaB4he}LR7}1n< zpfhQWD32-PzV;XQ&P%aW0-kXvN=unlj0G%mQybaXVa=9vaZJW$XPBw$CCa_2Lgq<5 zB`SrAuQLEtwb}1CYERPdWq2gb8`g^C@8c0iw^-5aXk)95QieV4mpjxC!IRJG`7=Z) zzDD`k?xc3Cr}HWfnM=1+8-Lk;T~%{7o%jaJg4vYLN`2-q`jW6th1p~Q6}gtwZMHuF zr{0mj`F||Hg!qW%iE;h*lA<$L)llv8n``TY8rMQ>!Eu3+n#M8cCrfw%{@%Vuy)>bk z=3u-&eS8qGNfIhDue|M6*Nb`)`@TM&=Th;&KTkQFb#={GJ<6G1A(`=~XHL4_BPq4U zR?qo;2SSpMrq0;3YxO)^tAeg5=OZ1@DEvO4{x+CY-JHR_w`dm`O0`+?rc4<J^d_MLTK|qVz%RPgn$}b-oE9&faC#*DogwHn$3T12;xmuu$bFKfFQDx9ataJ}5HHtU$M_YvjeYzo;ob$41c z6VjUtSkjpdAFl0j-6-cK+IR@jr=e8h^X%hIOO7Ar3U#p*;0#SaLU>e;qlBav-Dp=KJbZMcq_3JFp zQJCD?=1^0`YWQ6pz^wB30pi)w^b9F)tIr}GmyLKbsJ0n~`b&**WOHu#atY#`mX`Sn zsV$3q5pA&>ECqzWfQ7&Wnw+BnCP{QR;hsbjFbmg$Y?h^EB*Wv9U-}sq z=f>YU)}3{Cj{F{OKVemy08=r|D?R(OEB`0@@m5{)ERcrGCU7zd(QVaC5u7T%eL6xC z;sQ^$7~)tkf4+HUXoL<7F8w2!>(Z8Pf`q0fl+D2t;y*8<9k(pVvz;abTyJ)`pgKc- zD`gy@g3`=|qWs3T%tV6)33L3}%NH5Z&kVkLm{C~C=QNZr$7SgP^kK8OiE7&05^WI*c{QUwF9=>HG!fk6dpN8}a~yA>28lEDn9bhK+l{=Y%>HVe5rFTzy6D|q zT@S%eqaSURppl=`ErJ4=BtZiQv0<9b2uNN$=6cD&6|aA)gOFl8Go~LaA5NjPxGIm2 zR7>v#qK!2VdtKZ6#|q;d?c9)d@J&5!H$qKVn(6B8l}MR3n5T^w_MoN;*s2;K(l_Fr zR;-!RP~As7gw?htD_+>|bBsZIM|w3Wr^Lm^8$b^q*h=Xbw6t5*>$}kgmyIX7Gr#&1}8mKr%?Ghc!Ik&FppjVB3fxR zbCtl1HtL0xnDSDya?*{S=Mj?O=c2qcajD&G-WKucUM}m|S>(7UGyCW3l@1pIaxjzl zN`>8*gUO6w!wJ9zl}w0K$TOXR}Ylh zh=&sqW|ZCV5Q&xxb-~)zN-;J7Obb4ZQI>`?m>HHl$Xnp@5Y6JzDyeE6%`&`fhGqtp zrBrFj!#nB2Vhz_ehh@yPmA~+90;zA>^9DL>`BXfwsxn5ZG}3184M)ds?6~4;f2Zi$ z5bjo;!fi)-3QMV@-|a1QuGwu3@v*qHWVze}r*>BBPnrEp4(x%HSkc9A#t&Vb&M%uA z%I?rwV&NWU!*9>;G6r;l5S?cn&+p5v``=Z(1&a9xq7{Fhq`&~4{JhZLH+8e{y>P@< zY%beOw<*HBW{#GBHd{s~e)Wad)(44e#VK90Rn^bax{~h|?@-uO;Bwhvp@wjmW2r&L z*|&yA($8?yI^4HyfbPZe=8IBkpf*}*Ki%I|`1uQn;b42!!X`-Be3^TgIU=SK{Lz+D z#RN?kj^epwgOp(eZ8;-h+Cnv*k-BNO01)i9kIGR$8%=uR5ml@p&k61V70FU0dL&qBv zO+Y+*;2Rq01Ri^Lh8Ir-9x3bK_Gc0q*%kGW`wyT_uUgRTp8>hwwn2ZC*E98PU4;PB(vRFJiA8*=qNZNAfEiszWZn{=%yoyvgmf80X(q!W&=;47 zuQD&bt*n!>TQ$-@qt|LP8T(czUHZ66l*4KAX`oKJZR+6%{kGRKlPys*iWf~IzBU<+ z>4ws?j#XkGhDswGP6th$=Hb`Zf1j&M59-!U4VL;VrKXkga?6#64HjSac}S>e&o;3DDyVncC%MEfU%bP(mw47?sX#o%z-sJCxRz3b$p7#N^*KR6UCp^ZG{;i?We& zangx&QIM9HQ(T^IcAWiLw*o^Oc0fdgtow7XO1pghW%bP(Y}5lm_YOr9tr+8b72!T} z0gHzDQ7FSVLc&-I+b+tYlezpB-S{u7O*+7lJ-qZh=HqoHZ_b1w*BcVa&yS#U(v^5~bmq+~-m6c2#$aHJ#Qg7b zbfC|v_!+9+GT--^)o1Oy{&W3#XB5Z9mv0mQmW2JR^?P?icP@8FlbUMJ*-Y0Nx4J}b zC~&k=SLl?oh!>?(T&?8jk#>m@)veSP8Y5>bDSDOjbQ1uUE1q|2v?)VaR^5F4r6mcp zM81*FbilXr<`Jd@H0;I}B}vofW90rL=xqlos}J?k)w*e)^yRV;d8pA@?&3 zFM>{^xcKMC2+~P9^(ONvJvU*`IlVB;m$(!fe0;|J>e4D_lA#L?t2@ce z=>k_^Uv$(>2NI!feK5)eMBNZ;{*c;9*3eRjUSy1fLlanw=@p^Cs`XS1swyJ=M{_po z6mH;t5bL_>&{JJW?br4_)s;Sirzvr~Vy{kTG4_2>$DLPTqkwMS*;N3+$-CqN#R1;K zdxi?_0@Rc*n`}Bl3BJyYt3v6~YBim|AUXHFm(0%OXkIwZ!ch#lIV4vxjJ6-Ix9sv< z!F_K9LP@UsdwoXCQ<=yFX(!`1X}w>Y-|qzDO-PbR(^mVv;r43RC>lqxmYbE>Jk-ZbNyo;`Bze%wL6Nlc0b>FX zr3IL8CrSbHEhgvN719}smhtvewtsfb_rSj|fN=;fv10yf{eDSX9fao~bJ3ISgn+*! zXj^YC?6WnqClVKed;$h-pgRER@u&qxNV9k--HaDfB=uMSvz-yaT!iiqN>(mSpHjMA zc!T4etn_~V`CO3IElgQKJRZAAn64YN$=mljI0qRzA>ENOgk`?C17NG+XV6^x+1Opq z>vnK(5d_3o zyy_kaW`c!Rzy8wJV+=B5_;C3lduT?|-w#L8EMIFUECPuQSu(1vdO*XEPZ4?HtE{qO zvY^0W-CrheVEZCz&vh#fW8?orN1k6l7_Ubn%(dH)Cgv|{i*oGU98@l&5KD3pv3f_r zRLIQK{vc3pnI`bD9v$K$!U~4V6jTG;qv-O-_((MtGr}upXS8&wJ)C)vb+};~%67lP za#na5FxU2et5w(_ToZZ~pF(S-c_LG1h;T>;bgNF!%%Lfwp4z$w#; zbzIjrHdx&AsEwwvHSPKvq^Uu-9^$cUC~*{P-Hi=_89zZh397Byy1v-jSVKGc_pdHh z!1lq%ln#9Vg)vamcYvpkYPj#rDbSAA6l(QbFJ2ZOJ$EJtD3P!EgW{o5^Ie-|k+t2B zIuUgG{_?#wGxX>;rf8%$s>-vio$;Xw*nE#rBj_J}KYk1L{1{Ni_A6jJVuK}smzE4(>Ny< zl{m3ca?Jkcqij~|T<}YP2p+V(%bW|;_T^JgKRm_1qSsA2X8~!iHB0o&^!{GAAtB`G zp#xfNIx7o@XudwNX7w1ctpS2_Gh8&W#%1RobH=Gjm7n#(IStro4D`;?rQxIo@2-37 zE3#$QA!0^tJ6s+1ZqL_=F6YtBy=MONntT{)^v-V6Wx{Otp%1sU0rwkJuW`BsPrRacXm+@BHAMM=o{quP0isb5L6)^#jh9r398tc z>bBs&qhh7V;O=fULc;NUcio{7&dEr0Pv32{S@1vJb1LfYTXb*cn#p#I3!vi)-qd_! zcu?1?`@UQGVsk^mx&+ke;D-mIw=Vp;I{TBu{A$<~Rlnmm1c9%7baE(JpEZX}o8|J@ zrhxCfJPSijz|?nqH6Y+kbLh?o&a#xB3#4z^gc9E^{v$d}5i>ZI*ETZKaflf-fH$$d z&AxV9$R0Pg8eJeohz!DOkvev!L;w?17q;VIJYx}S?O{86Q1cIcYlc&7q1+fDpAPt# zHGuh0&}?6!^F1^RVcx$-AeoegboHnJOnh`0UC*aV@x^=Bw+Cit-O}Xg)-!&A;L)yZ zzmM_+R(y*C1C9 z>BXnzi9e;m)(2!Z9DE<##Lr~%$j>`PR8=W-%vj8PIyE}vLDI;tRy1q*q92+?6{2{byz-~S2#52-?$mS zX$5UjI9*29^uS8bKWz;Jev1Ek9+m|P5&K}M(S-M(V3A?^3nJ< zb^1i3bp(P^MV@%l!2>Gx&G0{vI3?7Jw+|r8diN`e*e~9M$VI!iXLfux$9hk|jK3RKDFcU?&r~E;}Fr+L~*|Q$YuIU^+R9xLJ1=O>eTN z(ZQOpH3IgjI_Gz$%atWwaArkSm7up^KE0&{=E0|D`-xNK3$fo9nNPqnNVuahoavy@ zQMKw@HxnbKv(rx5eO}0kLM*`}e2|$Mipe$y60_!q4a{}RDi)a|Rk@Rw`~#0I#*$PV zMFm8~>Y%uH_iG~c#<=OG)0y)U1@3W`oTQ}ff8#C4H(_{fOp6OIut6A6Ke?45`3mac z;hvcEL|y-d${kiiCxj|>Gy*nAsoz1V%~TV`)#6{Z-DmO=Q+o zgajX?B+!ue5mrb#V$B_^WwC-HQ2*{#dAl4SYH2i`F75XCJVGwAT;9?P1x$h7uUFm{ zS!(AuTlN?d(P0oZN2e*}?(|6%eRs4BPD7e zH>Gw4dF}cwLVZ+DJ^hnKIo92L9|j4PjtVvne?IIt0M0G9H@ThKxM`Z_H=m!%YjV=Z z^e@||_1Hzc_)soh#u`cw#+nH6)>S*K0$#j0{tRL1RqIOB7w=o)DCuRPRJF{V{}vv# zu}pE6`+%S$gITDo9+ryR@Df;*+jQ{rMonTQ<9@Z&e*cn_*j<@ryQ=l!EOo!8X5-N} zEgFYc=!iFq{pfHw=WX4zujQ}Vcr1S8GHG(f!JoZSCTP?UoZn*qRIb_!7WKy-KI46) z!Q8Tjd*JQU8Cy0-e$i_#UnBZrz^Aw|uUX(m_V zM6SGddmyRu7!cm6Mk53tEt>!*cHsbT?vUtzMXg*#7KB-SDbO-+Cq4}|o`n<2fBCL` z|Em}QcY>e{5U)qX zRw}7T)K!Op&ROO^bk~K=NbAAmGyfl7B_%I;`aV}Jc9w;R-1hx&cZ}zy93DGZk)<^+oQ1T4`?(BWWh3Nke?>@c0M(KZAb^>Gs5m z0bSHBwp{)mE($+JhLpkHpcU4pk&?I3S-B5RsvN^^DSFek2!4?Mcf2`y~-@7H2_*KGkO3_4z1XTad$i{7vSvv8JF{o-7slJ`5`X}<32b?u1`4@A`G307=l@h(5I!-~|Y z$=)4x`O>)7uiS*vwfomhE*c_GsUt*k_fp^&lTNue6Xkf5tg)}ZU?28lFSZNzXdYdE zOMHgARh=yLDiZp?)q!@~dmvT<;iKJ22-AUB{W@imP_L#`(aJ%MIZfs2`?D%_mR{JK zu*VlM*{ubx+1S zo)QK7)65gOeYvkDX&CPKoy&{gceGU0)FC&7rzS?Gw zFe-Oj1HuF$_x3r#X-t0+ou;-D#CMn1PX8jjnx!Dz`5&*ptbMyZK^aaGj=2W;+N8L= zvk*OF)h~7Dpc=v#zO@m4-6x9Nf6{+Y@q8t4sX?K=)#7%j4WpH8&qj~ocX24fRB>@$ z^o0Ub>JR)+IO_WK%_a^sOK*D{_@Lsvk2$)DYrlfekWWEbzjUf4$m+g5rD3ab<6ST~ znO~iO$3m?-c>mq;4us?T3aO77h{ZEx8L=~nLr5Vtt{ykzV+D#fvR3TUZiDGA<<+`R ze7{8SPLk^wn3(6}g@YqUf5Z=VGL&jcWSq^Vg?R-AR=+6`=^l_cQY5}j+vbwPDb;wz!SsoBG9O6qGrv#?MII?in`n!Dx~^J(Vkcb%ucmPvHlKU+N!rohXa*UHOS zrwxaq%&J53A0||WD^f*W0B3Pao5gEm8G%jT(|nl7zn;~F4o2aAYPa3;%D!SopJwa2 z^p|g0cbJ(rtgax>cSzEcch5N-DxDJzupOaIUBQ7ZTQv`lB(JQL&@sWzfv0wj8OmN{R8=WVb{a_cyKaW*9q%fA)!$j%QJM4$?4pBPGiJU`JaZ;Q$M zvG0Bq`+}?PA28K^^vc-C?y+1HFW{1bIt_HIU0wc@zS+{nG`^Zhv}v{z(&txjt9s5r|0&#o>a$plA9qVqC8+0snYht zwlJ(m+$-wRl6DG^$hU2shnV5hMUR?`CIEzO?wC=|P0;j}YU#VuTqRlCm}e9UUdOtB z$vyjldJsKGHGsG3yHoRhf!p^qd3SjI#JH@8>yna-UxV4;b#~F?D^Dym@qfym_Mr(U z9jHT=Wl&v=`w>o+d z-p}O#CRQrB)-_~duFZ-YoAC>u6r8}aWdqDHRlw)8sY*p^Zat+yp?r2bHMkj}fp)8x zJ393-ANLypA4M$3cJbPqYDo)C`|CoRlfDcTZ@tux_U3YPhBoDaRAo;;ieR@rqrqzS zg9`NMhd3cxO7N&d^`klYrvHu+`xWjZhH{M4HO(q^ho<1A`O?fSaW>JSYr6`|jS42p zyS=jYI*h^X8J`CXekIVAd^B5+*0&-`%WA|mchgw?FfsWo9<&^Tr(yq5=IB6{BVI|l z4X-9Q5b9%ue5e*u+^i;E43e{Mf}B*7=Ujqc%|M>f4jdrfwJE@*j;e%Y`dE5GCdM2*=hf1>9Q-$5!CamW;UItCS}fr_tVR<}h0HPE5cBCb z0zoG1d7IxU9cu4S{0J=A3Gn*LO)Rk!fbb=$n*X;LdmMW}Y}ZLol<}o9{>8kr`rU{r z%)qDzaO-H!rMP!PM0u2NL5sP^-EGgG=(p8|KD8W{yqkSebFo>b>5^IDKx$f0de8W@ zr6ia~Hj+23c!<4suYcAVHl}`*Eux;dU%@%zz(k9b!rulD^$8V~#ZkSMTrtryg$2F0 zKV$+8(7lv_3jdCCcxm#sq}WjzR@%+>e=NZ9bJ$Pz|r&JDIwl6 zFx@y#Wq{8*GH~X{aaqC>`rR~x6Eq67vv^Q(;+@(>e;L#Jq4~P!h=m>pdU$}DP@?1l zbaW&5`s?rGX^AC2R57}G8Ghkzt}Ocy5I5M*nI&gX{E?2stG^yr2gl3%C6H&yY;LaU z`--4FZrL==uIexoVZv2rv786GHjod9r)|n>JcR-X*#EX|5!}ESfXV2Uor3R)I*7hKbv=!8RP2+eW49Bh=c!TGO^Zr=l)h74?jOi6G#VoN-Inhs&+90 zYd`Zn3{@{A4459!Sr|wQ>wwU`WGW@MiPqnxp+}X*6(HEvRBAQ zwqp-4sIG$i&N02r>ZDD@p0XmIPmc&CKw`+~&lX3R5cj7k;Ua7tmICgr=mR?_dh$mC zq+|W7Q~#YLB=<_ZhOK3?x5F^8LJaa<=X|P{5hNnV4T=+LPT=?~UpnHexD?E+im_BK zfBGUr9#RAZIQJBl40+XApbjk&ri{tYM@dU;>5dL@QXk^%a~j*QBhqQ8-rFzqWbM>O z2Rkz!MqK+MJ#lz_#d?BvkGrkV$Joc_2n0xc57b%aNNVu7w!NH-F>X@Xhuj2nPk_*Y za6DySrApQR$j^7=sqmiJDd+2N-{wqOKH9Rp;mjce+lvP}uOBH%elQeT?sk-5%aY)F zEGYW$a&ljVT^gS+OLTnsYGmFsv#I=tC0%bvH_oGazp&{y-D9M-0qcAAcQ);R5hE-; zL?dAT_$(FtMaL+Z9#O{R?;KK1%C=p2eRvcjb(d(=Yoe)yaXO%H!CgL;_w0n+L#N4Y z{D!#OitcE{<40M|Jv*i7D(-W1PUsT!fX2paHdEWgn&2jzR&NXWpi$n6 zt^fV4c38`NuxpF&N~i$B)Nsz`lZM>oL9e_a(Hn2?#n2&N?s3;UG%sfUC@SlfjH3ZP zA5~jgpK_bz&ibNM1}B+-jWAo>`-<^;57P=J2#2=hla__Nt@x)6+v9%~i8VkvL;=cl z?hyJ`blD?2Pnq*pIK_A{38y@6X^&tOjqT9rsNG>j|edA>FPVV~k(C;F0GkuqgE!v%*zpe-G4Bz&ZY`w8TW z1juRnmIo5n!8`jl7_A4_lltFIz#1J41F;!Fd*ZwLJjtybOJt41mb!$i6AVPGhf{@= ztMPu!Ry_n$Euy(~%*hdR1X|n3+U7n?_Bin1KNRWgbo~6@eS9Id2#B!Ph|IfTIEJ-T z(qPb_EY9Wu75D^wq}IUgdvCJT>#SMJk6t@YU!#*^wGD6Cbx64rl{gi5`%T(p3A>Bw z?qe^@v}xn}gs_jAe-G@eH;n^2JO3X|Ume%v`@IjMl)$8WNOw035Rn!}mxM@z(lHvT z(cLi+Bm^V`krI*7HKjpvNK1@~l)&%t{rP?W;^k||p1ALGpL3n-x(**SCfK{&SkOGt z=HF?-^6=(#JflU;hSDY{TE-jg@IX#j+ikah|G9wE&}ahjek^<@PkHA>Pi8Hu;Y&^H zzI43)v+za&z}}spi2qhS6C~Ys1N^p>MWGPE_r<* zn3-kiEXC2%?V>8b{P~817Vlcg?Js7@7TAP`jdWk8Pvej~1Mlu?(cG=g%`$;=Zk6$; zmK$dK4~373Z(uZrBWKb|w|8;=XdU9j7VEa{kXoWY#)(}uuey*^4A{nQNr-@F7d&)klB4Ipwa=YE8?fWyf$C!f&tjtC z9~rTY?z#RF_4o#v}bt%{bh9>VGfdx>`#dBNdf{fGU>*UEWjk*6`YKid5QuxHRyx*Y> zAl$C?Ia4C4YL*ZkZ=mJx+78Q&Xv#KCUIO1W(ner`dmTj(C(rDO)3X|T5>aV(pXC6?nu9#DtKrrPUYuB<2@tc zxIr!#<=tYccXuZWy!qVZU7GF=a|UnZrvQG)R<_sY zh1^-mZ3sx45|qMnwdL^nYM0^`Z-AR3Tmqx@3_PtFqU{=BYoari zcN(vL7mQhJ2`g}#@n;5~`9E5yQwoh1hSYt%Y-X{VWBl0JS2c#DMC4q3#-LWuKI?bh z2MMIGF^qm^Km^2C=_kXmCgHUFfkMO3jkc~mg$K+G#MosI zPIqqn6SGsl6I~&KrWb95S}guAS|Js%`em#-k_v|VIts3w# z0A?030CbxVP4BC)%+Miv;==EZ4x$%xiy9Rb-7h36prHiC?xADdksoeU4{idRkqP9+ zW&M1xZarNy28l9ua7+Xe>CH>%SX6m{4|#XRDO%@moah#Nrck@!Y9aoMgr}>k($~XO zYJm94d|Z9G$K@`%@YxH!R|)uMHf!d|se4*L*41$lhQT>LSeDG{I4%;xC|PzzHOM7z z8^rixSL6UY*0IWewj hHBxR|K<6&nj70xEa#L@r=sQJbiIOlkmz%Dg7l{lnRVOZ4VU6|TiIQ-cTWDf zM9Mc`_}6P2qtk~s0wDedlJ+;Y_aYY3CICiomM4O9o?5bNm>M02ZrJM(Ez|$5k(9l^ z2{4-Y8JMw+Np!#I!4na1$&;6qICBCk)1#$P(izTZy;macYu_}&fw zmoYnb%IEF38%{^JO|C0-B{d9h3pdWoT%hW!6Ee!$?ap-}4Tuffnb~M_2z2l&wNn!s zcBI|_bdd(&k&(C#zr#dhr1RIXLRFVEU%q`PYjs)+o~QnpFUtX@IjAwG*qCv3gqhJ7 zW^@d^%Ymz+ibbL7x43_?e|YD$a(;`N0Y(vw;`?G6dwn_oT;R>snO6y; z$fJR?hPo2zPgJ)zUh-?Un~rM>$RHbojikgKw{4?8dqF9~eMtD}1Vl|rZWPI&Eth%dz##dzU~le#5Xg=8hs@-5@p%|TFIz`cALc}zb&!h~V)ZMr=;M+{Pj zPJ{?Fn)gGH!aDa@H=(0l@^TQVyJ5^I^1q|uk-W4rt2 zjzjnD43H4krs|!>$-J%CRB=w_ObR(n>{bRyw&ce5JlRG?#0)xWDto@(eNB(0a;E`f z#+OTKohU+q=%p6`0azsi;l>vntN2cw$qvfaRc5$|84_B4~5je zcyN2-=<@fjl{z!2Leg9oF&WIF;BKYRy|0{-0vTz2v-cJ@D>OsOhS?Nmc>|UE&>wE9 zGwBe{AKbU5noa&#xIHcJsSD>-rN*y%T2MD5AvveyIvJtXi=+q^M$d_Ww4WhnkU~H= zgD0j{>3A&d@mjEBipX5p^EI0_K7xnG`DkE-jqo|rC9&T z`6^12sPM1{@-St4;~+x)ZtI3g&lUVVlG1<-MM!uDUPUbe-4{UZI2-i-cL+ocyaTS(fEn|B&r#Jj~k9yT+f!kdr|2kzVxLYxwXo9cCV$ zK{0EUs`}U)ZykW+?O_(n>p1T}$|{Ghe7l5_KokF@vQt4&D&|v;Tftxn?C%!wZfqm! zJ4;FyZUULxSTBWO&Q}_Ft$JY{ z)?=`%a+-6}Q&bx44I0@E^k0_+P=_@bJ)6JMuXlV>tLcUr&yX4FpfEH*;8iNEU_b_d6KdSkob; zE{nF6b(`vNQ#%ueXn8HozDRMpq0qhF~T*>VA! zEckL%q*{SZH0l`BA3?q%>5qNUgbq{r%31-G{FbG8SUf6+m@@ZtF;rDGL)V(JGp&{s zPMPueT5A3rDJYU_s5Xb-jok}Udhqv)^Z(u=l*T43G$dzWXfp4}hT-K3ZT3RllJwej z9^6>E{IpqQe{gKGgCI^6lsLEg{8|iDdrkpLJxk>v76iEgsIe-Ko71hQlt{qsI|eic zC?=ee$z|T5`MUo%m6iD%R-!98&-sM!ad}~y7 zi7n}limg0F&Y{YBfNP4;(#oUdl(*6!Im->deNDp0Rx*hMhK}6h;$#wUI?1pnZkCCd z?XkK2%T7Jro?H1ILQA{w?C4$O085{D=fU{ zC(!>m$}} zIr{+Jfyop(sMg&IF?&~aIioY#P>=Qi-CZ|+TId52@Q9o|K1OWW#>@W|JW}F9oRtWl zG#=6dN&k1_D)`+l@}yf@isr$TFJUJg1Mm!2ffw8Ags|&;dz) z2#Idna_19(=6@Dw=bqzdU0fY645OA( zvx&w2aVAoeM30F^qRO?KWS{icl3G=z%pYu zKo@|#^%yaDG>;tRj_{%Y*cW1N`4@i6CT(|&!+E#_T30P31Trz=bk;t$iak+I{`d0@r zaG;GxmySD>`XJH?ywhmi5qAJ zd3nhR&Uv8z-$5vx2|vZ6+`77~$t29SVP@~jf0U690Pn@brb=<7Qqg# zI3dNyVGo~Cg{xgm3=aDCOjh^&C7P!b<=wp8VNU*!yAY4uL^?rff}y>c!aoARFgbC^&BBj7}VRI*&jpr z@EJm)4XRxMssT;*g*5{x&`dbD4|&6P)8Wj+Z+&wVvNEkpeS4OXCFiL}TlL zV8#0U?G0a&Dwm`lP#nA;zuuf;{rkEt5p?GonR6^2a*YcDJYEIvJ!J--T+&}$ltw<; zM$EQv{H^K+o(=4!6U@xz<>6|HQk`H}>}qwhgfblrc`hSX#rNUDLImXI(~Hb_y*;Ra z-NCWQe0_C)^^un?;x^gm>JTQSZYw$`;rR_+cJim!^Mg=)Hvd1yiD4Gk%}LSiDtWn*cUJ4agql;LMqWCr zqlX`3Bo|sR)R_iOd=VTr) zzEf1RVe18Ne3=L5#Eea4>f8r3q^4wn7JEw9-;efqh`&qxJTU#pOhx6swGh#*hq-T{ z^LH}hXnDgR3ZgvE9^mZl6 zwK0dc|2~qBu|E;`BYe`SNc93M>(*l#EC{Za%{^RxtVRwB)pBXV^d33^7; z#sY2M!jL!7v0ZD${i*99gC)dA{6K08SW>e$ylMGLclEM zrvA6l`&nAb(u?&&u=XK8`_yG{2t!Jykmu3cK)ICqtR*xx$?b`;I-~FLjCp!5EK6gAW96NvXpJ_Y+;lWRWVuI@MzO;ll$IAHOX z!zzFl%sLc`qVapoc!D{jeQb^<=;_bDc=-bq13sG3Bv&w5&F=C7#%2npY5yVT(0)qP zUeepIJ2k|v9Pzp}54#Izr&+U5R=ZJOZHcga@#C7j0q167zmhNyKa|&wjAr=i>n`)h zvzL2AH#{F6`kI^JIRHB>8TqYxX@e&yBSv+>0Pyo4N0}Pm5`s<4=hXU68y7&H4{VUl z!=sB#EJ}**=B1T7Lf4#Lv8uMtA+Y&8BVG9ylGickp~{1+0iYc9w{McQF6-UW{a?1@V#r0b{!?nFZ=>ZNl1C_@(ge zI;h2fSZ9hY;qllD09l*lA;Z?yRH{(mb8%)xw!Dq*^(*0ItuH-RS_zkWrMu9D4-wGZ z;8=!?A`OPn5ebKWi7rfeS$dOgUivG?jW-kPwy(!{E4_B!zIN3!%9WetV-G}@T>oSq zWKd6q>ri%r>Yp&{G^Qz%<9X;n00&F zTK=~CJiKrG-(tjaDB-MPTYw}}z!@O#Jorc60nkaHhWfz*WEvLP-O{WT?o*Sc9JGDZ zL#hA`Ru27-=Nb?1$GnzSUhs#w+uh#-hP4`LlTFS%=}_rSrSU7%&A-Lat97JCnqf z`GZ&h(G`ei0?#JF6jPtMV<=EgbzCbysTnovcj(6W)^dx~x`WLMX)pz;KMvvR^vhQ4 z@`K_*ZU618M}M2oQl&5+NA>Dw!q_D+6WBz*_^D5w&xihCA3!OB^OSxQxk2--C-S3- zo#a((Y0~!0c;tvo*NuBF@)S5AUyg3sU%Tf$x_qJfw+>);v|g#xkb~TQkrkVgmPJID z>r=7WC+A#dh6B}u;;TAGiD}DEq=&ga;xyv3FEp#tU?#<~ua*TWfmFm!Fvpjeb1u7K zS=cGUfTxzY!NX)e=ky)T=y9WK6f}q9sQX3w;bYg=k8NjcUlMy@(w0VH2u+%;?N|IfjdlgzfL40u79}q ze_Vi>k00?zTE*wL0Pw}2@5cqzRm~<E}`#v>x8`nvBE}XKn1g> zZXUc`=HN#THKrPeNqy-LB2Z?(>nDt%LQ__ltcz$?w*MJ8hdR|i6y>^10Z{F@^1MTK zC_!;BvxFy3DPsVf?faS8Qwrm9w?gtUim~xS^dM)$*OMdxaX0^e5ak!Af6y9C4`7D$ z?+e?M=t6yO@o(&pKO>1ii7*Q{cz!mQ=%mJM$>6H|<9#ed@czGx`1WsTc%y0n&I1)=SzBHnpR$^Q^)D>`vhH-E;zC_hE;RsO zm6sDQr>E+GEFke>p||s!W_DzGVNGBZP)`MEAAWNpKJx6KHZ&RBc6?NT20RpWr+*z1 z0V-kF-yXS6PcYlWM~9t9|2jY{x6j<-S=cfxS$aipNBrXPCBkk3RSqX~F(EcNLocpi zz|5*cExdumW8}u{Lj*9=8fNBQ;7w4V8pgq0ms%+3zTJ#HoCxWiYG-k}O}@aXBKHxO@VY_@Fm ztzSvMo%>|Z@`cxJ>3#@FZ_lJ1E}=Itd}IB3e3_WI56PA#rY@%hcWjwht46H`2Zxj1 zTc^KfhgkrCd_!p0EObffG9I?Q5A3QpZ<;3fqwXlt))MRwy7PFr6VbH^@iBaUeS^LP ztmqnI0KOYQWYYDuINY+E{et~StG&3^>JYVW{-@4*bf~7N!3I?|&6%aM=_y0U5o6E; z0nQ+xW%Pt~5lQ|k+_UIS;p^a(<3{^r;Y#{efXRn2o?;=HZm7G=?R^NaNFi~$BH+j>lW-tV8zV9dDdCk?b1 zpc+y@dt;B{)(;c(Kv?_3t4`dTb4NuaQjz;4@^}eongzyIZN3ezHTMT(zs~$6Xj@UJ zo2U+HAixc>2xkZ9>?5Z96}V_mJRUBQdB`~&UlZ`~p~9IE zngGQANKc)#wqqA*Q4=eYsr>m8r7@Xh0$ z7q#i$BYgFmeXx+KI=<$Km_N^-a`!QPbkX_aoe?8jrXO(ojUlDI8Hv37N74Bt?A9kB z0=OVv)x=8YKTLkSBcLr@>Bo>(qk)dPSFG`N8~uP?ktBOi&J!#%;ER=0mX`aB0P_vxo#aX|1dCwAP$&u7@F)r->^2^dNJkEi1ub6Wq1>N1OBRtMg3 zK!_e>)MARw<64jSv%nJcODkiZV5Kikou4LpIF_UFQkBBi^pj)y*{?QM42QL0*J!JT zxdW7Vl`v7l(Ht*SC#6nxS+A>YM671OEKZqm=Bl+3!lFqZ1Lxeev?hn{FoE`)s?SfA zkm5CjAHDvCw~|DU4l>Y>J69jXFcxSl1h9N{>sJj%)aRVQIjv_Njsk5dYNy>a=8@(~ z_f9^DLgW@gPCA+x8EEHdHKSkgRw2uGAJF*Wg^P*qJ_pcFWtQ~g=`j01@&F++3pY(nV$ z7Z6-aRI_r(`f+2W01dSh6B0QIv~P+k$y6Vg*DyTMj~Gt<5_(}Z$L$KwaSVwG4Uf>S%%r0}04$jU*&)oAF_PC`k6Z4nvaDs0f)X1VvU&$k z$po>DI5Cynh}77}56+{0PaMOZ2U_+bM`S8$JHh;0F67W^u{Mh}8Gy92w!AG0tsOjx zhG+eELUV5vlA~Pn`(;E>$!OlsnXvVC+$YokDaB9w>?i`B-A5S8^6k$JDTL+4E|4q% za*bzOwl3)J@kPoollRSGINvV!K_QWo)jz<^9DV75ut@Dcp`c6HlR=0AZ*}T8MTcL z4QxJ)_)j_{L(R)Z%TTW|4_o#Pcf^{P3{A|9xud=bjcVnYPD#j)4l>lPphzV^MP?{){yHKxMD`s+~73_2)gI+Yz4S_C`g|*R$;A zz2ds4-X3oS!ez5uC%=hZb2_tnN4K8uaw_!MM?h$-9eJle!_M--$BNXuz0~e#`(UN9 zN#ZvVN=@kp^)xqxId>3iZ`x3o%yV$P;n;)Y{hbaf`u-1Df(q=hP~)$kPT+P_ht*e6 zkW0XS8|m*i8|H9pmWpu&zSQ8eMtZb8Q|pq9QKCYqOJ`&s(tFm%I5b^-yW?lb$!bRfe!I^a(H_K+3~fVYFUSBHJH-X)}n7XGFi)!xygK9-~AD z-TiXEnDT}mp?^XJs+DPX`G<*j?T>^|gr~rb5$o-k-Ib*;E=i%ACyjiQP&r~hbn_<@ zwmt|yGPBlVNj&e-EU36>@AdJtf)#0?KeIcnl=bW@S@e3lkgUTLD;d#Sy;eJLj>z)+ zz`D-cX}`n|uXs7%HWiV1F}+~WFWz%vVZp6Pi|!r{2G+G9hug{XS6>`O`)?1f2p*9` z)f09#=}6Ls>-k%JFXFb#kLQ$bHSPsY1SeLi(!>mOSR07Q6YB7y#meW-R&NgRsDGL# zq|XTgOFuK@guzO zQxHpa>BPQL!?U+@@hShWWPKq#QHFTnZ4SoAx!Aod)zIZjM!>B|&PrIsrL= z6*6u@LLG81zaMf>}W+zsv-~9_e~AYXxw$uqu+ctvqXt;=s%&{{!7+U zYhk1#J@h$XY^sA6Oja`HPW$^Pbze~8wz1O(QkOyeyTP3%$pJvZy;B6@NkDF2fkMCA z6-!`EYwz}Z%YT^iV2sj25Fhf!c!VM*y&!PB=l0VXeY$jK;Jz%^tmOSG%q4#Bt@E=+=YWhYhZXT8v_e6tErEmuhn z!;`OOm|U1PkQ?|GQ;r{b`3%F-O&fUuzk$6V+sQ`}Fn>*^4N7cdB@}Z!vPh_&DI<0- z2)!F~E&%kDfnkBVl`elI$ z?}D!%YpA6!xDU9F!px8prJHuR#122SN>YEb{GA8N@Ry?lZM%6BrRDyn2_H@W773f& z&t&Uvx3V42B4CwDLyBARE7@)8sJ!dz03;Kyl8mT3cjoKM#ZF`YM#G=1UVV=tICWzL z8qYJDe*s09I;QN)A}#02()&24&FQZnB%~%}><*}3Y1}tVyx#KPC4^dmX+powSZfyW zT-J8g0WAL%9evQbDQ^HNCn?84)_ddsv>r>smGkrn>SPRuzP*)S(RYP-+G}Gg>9%~Q z`MLMIz&c7CPF?N3)TOEf&;@JBv2p{Mp3TZk#ag9r5o~#`X#?b5s~7X_8|=*nBkSfw zp#6w??vJ%14U;mC2pVR}m@4tOZRVQ&;Efv+(x}4W=&DU9J`y$fdK#DO#;c@ouB2j& zGE!{^%7g#_hqtA%5P`5U2~830LC9NnOxwTLJ_>sU(?!aeiYLrbu=sRslg5^$T96j_ z`(7ggU#g2IIxsZ0$RDrh1>(M5c7^gk9^_SPjlvji{_-VQWVhppWG5i->5 z4Nd-V)0#w|tB;T&DfNmzva&Uujjamk@pNxL0tBS1w>MW7QXJ%I3B32lY1G;bBnSl= zsUB_BNMqkEr>R-T^r3n)L+YS~Kv->7#(b`3xZJ$2lxW;#r$`gO(As7rh~FLAuEHT% z|1Aad2Ip$X($8(C&oYD?*Sfc=Y5h^{H_gq}BgJQkSy{GsdcuzX3MH$q*&MFDfyA2S z<2rX5?hgL=0ITBV{lxmcWh8^JY2xcYBQquk%+#Gl^%Bp!0Y=DGU1u|(Hs{-}S^PMA z-m*a7QT+@CE&HZHWqD(4{4CcgU7`+1uF(5i(czqObs2_^(3D8K@8z?LNxK@vT!a0Q zfo3+BB7VFpS=M4mS5wJ0pdq44Kr45LrgBFI6DhosO2es4DJww3bw!7_0~Z%6fxW2Td5$X5;J6QCMq5cUNn7Kc|2bsn zbqkk`I4ho0JY4WpRRmUR=|?Wa4?w}e%`|4t_t55Y%aMrmITC1<*V_;j*GV3q1i9}$ z`;@rwyjk{I;agtv72U$a0AnQNbJd0eTf|URq|JoL#rRyn>TvAzDS;MIjCv-}0)63) z$4mrDIr%KLA)X=DaXzJ*^TKqR3|a-SzI+qBJ7cU??F<3pqIZt1VHU7f%$f4Z$}Ahw zU}2FHZxhvVi07~*saF(lj>w^j%zpNi!?h#6Zlydc{oFPvXrP+k575?qolhFY>#XBd zcqd3;D>le?i(&?+&Yz&=`5y~u1>effnf6L=UvVFE4NcAiMd7O#Yrc#>T9F&w5{x~- z_kI>8hnZ?*=E=_&v$qH(D}2WP=C_RF)m2o9=dH5Lj1Lh4GK=DM$0*SDp*-d{n}ik0 zPRWF44|`7fJ{*nV&8*L0%#m&f<~KNBvDepBimHr7=B1N1Y|;E|i#$3^a9GYm=lkB# zg~|8@htbj~KQqn`fz{Pi6nE1nk+h+*bF;QRR$z@$ z3--}3ayH97#qh4Ieps^iWpCysbt*LDEAOr4Us-Oi_V9|OH^ro?cfUEkE3;^(^mUk2 z{bcN%xOb3mSjx^rji9FedC()S88Ly`S;8=qCr;9#(z2^Wf0`E;_3q(2Osx&c*qYd@xK-5wCTGs{qS!PRFp+zoy3ZVcj1PHFXS)VGV$uTkM0RX_ z8Yd9|N3H?QIEeeW-BOC}gS)ULYJ2-P(M}vyY-n;F2p|NJay*|tpd(Jzz_)YS&4af@ zZ(p2WAQwfNmx2akxKA6{6*m?iV5VRG{qZa%+^q0w(4WL^`zC(ulqFxR0QiCxArTA& z(D8YCEhFkbNGPuvzOlkD1V~^TVME9Q7-d)Zd$SHt{ap&F}HyVVzAQy&;0 z193+H@TgZbi4?c(b9AOm@AZp>VW5ti&oU+x*QDw#eA>v**k@UrkO$v{)<00ib>B9$ zw6X$j@Bti`>kDS@u(J|ykCRB+Q}B?ZVRF{Ja5Z{$fAzS|8CzpEOy+1BzZZI>L3Y_a zDAhpt{?{=~i{@%kqw|)q57#Iw3n3LGeNv{kNHSxs;iFZmj=ljOz`!8h0{m%dsDC)seV5>6XP+Letbpkf z)K;p@w8ohkgF>Is;SbSq@nNplaZbZ;zIyC(BqZ_cE`P`WSX6-*q%t0%7(^SFbidBv z(FpcY*|5PwaEAulTWijrvHxmvNiK({8#_-j{ZRM*X+G}!X)Z>>e(F~rN8XPfVU^Z^ z>q&`y^2uw~PH{G{w(d-ko0jwq)Y$KmlB;tm$P+?$mmTh0kQr#Lq|zd$zZAemoB4Fn z1owWIiEu_aFszGK8N_Z$tLMioi>K}Z)&jWLVK?24d0$*rO4yeIkic$#LfAtZzi&V9 zQ1P^dsOX5&=Dyq|Q4`pcS)c!n0;muN#3VZ;EhqSBH}Xs*i($N}uWQ|1@KVN0b7 zOuNh)$uN_DI7@Wk<1zNg(CZ@-D34U(316buG&?wh1?StenanybGXdoNeZZAk>83Qs z$+)Pmb3>YHwb?px3vEJ=sq5{L_AYqn2{XDJ3K2NFVgK&9d}_u)p7Ib}eB5{kwQkG& zQ5N@e_BKQGnPb+>sWy+5sdHuhef&%nSrN0b(%NGO2%X(rZ#fM<(nbL z^q%?i?0FYJt9TpwO8sguUELR$jZ1=%#!UfuY5+03jsF`6oA>w;{C*?N zt_&H2nI;J>#wTSJv6}`8%eKxNhIFcbvNrY9YtvnCmL9c4TxS{f`S_XB2a|Phzp469 z`=95x$xxrtezdJ?E}MGDqn=;0v?e|#AnTy1d(IF`&r{%ju82b)${VgfFc+ss(qXq~82Won|i z6`v&fQODr!4OkqsJ^I3$8jDX={_qJ!tZ!X$rAFBU2dnaGx90mJ_v_n=d5ela08|3G zN{0DlfP!Qb`SA|}A=IH9P%8&6qupf#V2ae*bt=Z{67VaF`l1&-Dq7J_zU!LTd;?CJk)aD~)S%w*l5>IN^a{~cCGDX4 zvOdJoGs*__GpIRh1B3Wbk?B8rxX*1tyIBBU&GM-V;FOcism)~^ zDSA@O_1pCCZ$}<05bV#Ti)Vjqz9~;bJMp5^_Dt`9{GpexilEymagoggz7sGG@|5eOzU)e!g>}&cNFH%1H zZ5_LHTikH$Atg1H${tgW4qO6w6uJ!C=uBGPilp$1GZq{k`+t-vb0%-*7czD`BTPAC z;+KGj0ANme?^msVk2nJq-wZ+1f4cx(^?L0+HpTEFd$U~#^3EptylV21GPuED@AvgC zbfsyGs}ZB`+$B8tu5`L7hqvN+_{3RiBMMuiOk)nt0arw3+z3)kKEB>uB}efkSJxMq z3Qi8G_xdCTWf5s6$RzS^0&_J01Dg^kL42hu)4Ahy$GgIvcYV8RZpmLlZy(*e=;6aH z>ya*(KkTX?k%!wxWKH#zgmQpQoU;hWkeA7(pH>}gdkpS@tiqoJ$gDXcKIG#G@~jq$ z)K*2|Y&lE~qj4OT*^VJCW5}SUA_j1Z!N_sr&%50C!azgu*-$Mms>J8e!?MJ$A^0*=8$ z=mU_|mJ7xXvBmrDUo7JYb3&&^!MtrL5Y+D$R#yb!7z8|Y`5TcM3jw6YfhLn}=}ga0 zLPzewVM zbhOa&jk~<1gKb2Yi~gt2!<4Gbj6iNc0~Dvuu@6kANc10^^vN8owXfSQq*^TiiXK1) zL{vN0-&%MN;|Yjne~%`peE93SsJ!gP4XJZWfHEUY3i{65xWFj3_#toSw*yw?eu-(ALhB(JYAxohb{5M zvm=`e)NnPk)F546x z9gz6$9p@Lbab|YoL}e+Lhi(mHj#ZK-Sl-g%v@Lg0agRQ`0;GQ34)a0wEW@a|>%8e4 zmP&PbeTdh7xh3!KpF-Nze%qeG7JeE8IsYCZ>D--Po-(CJpn0F%M^DNp5x+kZfs_mx z0CTia>!ZsR`n1@usJFe%CykOaZF_O}l%7wB zH20K!=e1G#4d@U6dy{u6bEiPA5vNWVOw!c5k!OZq}*czE&2Ptn&;)zw){lo<0(>mm3%Yx_&e5d%g-j^9{ zRXppexu@%1QM7Z3%DBLA#qYcK@skCtsF28@c{;h>HqWp_%;aY(8)N|VBx_PR@v67{ zaQUG%W6lN8SQe zyQL8}bAr9!q;&w!R#Z<>eTx)CfGZ?rh5W86YuRKc=PQw`j(*pIQ2k~DspUs>myv_7 z{`e&p_WORT&?|2(oLv)T<|htqFHixz;FqsxH2#kZAPx~Uy|Aqu3seCLd)13j^9^9= z2{FSrVvFKkCSw)wEaR5T`@{lwDLA|T1j=)0>dwlFjS4Po%&jXVW6<7u2In)0CCup7 z65}m5pF6$=x;nW2_zs#ZT}$~jJ!v5cX7Y_fX{ioi$JV@o?f~WvhO1(Q)QA(&ETeIE zjfV4r!m@#7Z>fYy?laE?5?+3w++upu#Lu_{K<+bZ+jB@*IqsCNjt-{QWneXUk)Y`X zBIm0x%HZiuRqm(NVcvI2OnOG7Es7b8x(w`qqLb>LGf165-gYy1K>~=Fq2?G{UEB1E zd73BI8t6D?zm%wp$De-8pJp8n-?4cb4^(ShLm6>$bfHQQr8GW0!K4R{4_Z}JgFmh0 z5{495(t>kq1%X+nF)45rYW9={Cqu}u`$%yy2%FhsUcbaF*^~QaCd%}P?|^aKJD1{Z zQOxN!EqF#L0FqyuHge)9s=#tY7!%bKd~*5w43$5aQ|hSB#D7O&(_G<~tko2-&j)_q z1Gz9Usxvu1i(-=x>JIy1*d9fD!HY_egL!{0tDFBkP+3%1b~hy}L#UEhDp2!h4$n`r zFr_rHxU1w@5^0{g{CxrKMnOKHA)Ub^0dSA`9Xvae-P<*Fa|3633N2ZQ@mj8NP5q|I zwtR)r8w^aZrp+D&>0Stx>5CsI7<5wxK5#NVc6bHnp(F@@!@T*Py0N%sl>ov**`Tvd zo)Yo<_cDozZ&eJuf}s3?9q!Kg_)8n3sEuxV(dWQ0ykhHAg#8&+s;1ko#5)YMh*>4m zF5Wn|P$}z@zt8YL>l`h<^$x}ZzwzNG*57>lALuX3xdDam6Z z|BEqu#=~9VlgXdOXX5DH4=9jzj{*CDJRh4mQofsOEjj1zxyHPfk3T1eJ;HndJ}w1J z?X?G_cW8?rIrEdaFf=|+wN#6DT5_1CD;^%YUI!&*p`4e zvq%>C?W}2q_OC*WKz!p?z(<#Ywej&g-P`Ne8?$H?s?YMeQ+Hnk(9hw|-Dy9%H8cTI_OJVMn>`?-App#QU=y)+DNk~bc$yk)O z0E$oNMc4Y(+4V*ayyO6w6GDDxbuh@LKzd&yfy6-~-p*Qy5^#Sbh!`t-8)UqeiHRN~ z6j5C@ECMe}@YO(7Xbth#Ljtov7ighcp1m&>K)g#*_gXGn>Ws zULL|UQ&KKdVjy@r7N7wy3rCxW|GX>!xq1)sj;UT5;PyZ;w4c%$;%h%zi*Kv~5kM8D z)x9|wTF56AXqi=$?4&Ie-U0w*?&CN(`-j+?R?He2EkH&J(iTNI8D{agCeU_yn@c;s zd^B%b7PR_-nogeyNIAqo+9?~VGY=aWJ6VaL{E1Dx0zeMPyEz);L>!*mHihs&b9_azV-*gKMFC#i4FB@c~F#YMxDr7WK29 zRF=21R6KyQ?&WkO7;DG)Z&c&a-E{hrxUjnsOvpLtlxSb_1_>BO)VjT8QgTA%yp1%c zm})ZOrSiL9@%-VHUGF=Cw2>Z)pq-z53>;Ja=zt|eINyp6F0Z1L?)c$pGlvx3I0ZEP_6>DcTyCC0>QDnEK8QICFv}n>f?3Yh*rUNWz&BJI{f}} zun(**@681k3$nyh*s_>xTA6p7%#@#_3-R?IFf{GdXIv;hOt`a=VE9R)W!CKJ)Yl#8 zatq-d!1eNS>!!2Ag{xNsyX?M^1&hbk!^{3@H>J@9jh_4fb%8g3k z;q7l{rEM|15P?PBe0T+QGCLiD4C50GXTNs=!1^7??d}=Vy!)tDeyw)Rn zuczU+s#=hmo-v#*YdF`2K9)(1LTs!?0dDXC4%pD>d%H zK->8H1;S}9#QWNv>Nc=beU4@9@>K_3rB}p1{hc`eJAkZ($ab{K)}!x0zP={dJrhs9 z!z8g5NEwxm;hM(T0rfRwxqR>Z_!SSQ##fv!`HNBlA2(WBWs^K9k#~>;d=gqES%b(( zqATyV@1wM)+z5oLiPyolVs|b?Jqx>LQJiDu`@(s#gRxgLso= z(bB3W(kp+NddIX7(=IyZen(o|ODxZAiug9*kgDIm9{%weIka&?%%lVwZ5!>|*~V|0 zb8cmc&ziTNRnAsX;Lo@kL#$R@fl4|0u!W?hc-ErD8y+j$=n~{OdM>;v@VKpM%lKytm!K^WU~p znxYHgd;c#VFyPNKJE`GWY2d@-hS!4a3cBu6(5E`5ytJtxt)FVJ!92C@Tuh9lf)Crh zVc1bE?0o#uK_%CuSsveWAI!tD(gt_aay`h(xwX_4o|JSGbT zJpF&3m1A!=^AgV0b$dQ@(*Y|H5(i6huh>GHeB7b;U?9;oRCNTU$aByz$&{{N=M?&@uZF5~Y%J%Q(WkVc_! z(6cDS(yGQWgW_pXWf44p|MB4wTYJcD)I6;@N||?l<^g#gz;FNbnG$@FocwhXOGv0& zYPfZ0onvJNz=L1^;Uo4c(&sIj7S>7ZVwF|=S5WwHSYxH{zyJOtCWM)X)mWa=JcQF@ z!)|h%yz`5HP&_Tq@|dLF@=QlP_S-s$i$ld{>LxRV2ptz3Slw^+HQa-^uhnx>$`9BID)$C zAqadJ#tHgyg8S_nlgIRMg@KQ(sICX20Qa8f!8VOW_1g9$^uq`b2juB^#CH$<71Z4T zRoj7QCgfSsd+*X1$_Awp9r3Wfy4m86N-tub7FH8&LX)e8$kPf*%{#!?w>z8?O_w(c zd??!vO7eQJB#eJOtP?mBPpIh!X!-%(-W_m#vX8?6iU!Atc{Ct^|AsuRT6kJ@KfwF@ z12kPHTT&FT{S_Wlp?FF?^RzlSM&>yc)Es)9=Y-6%Zys)-=GG?or@^y|LTx|eQH8!^ z&jk@M>ikCmRBV5Lkn;!dBRs1-k@XwmVZFOY9vXW{$g^r4o)tf^d$G4XthaYNj8G^< zjEHAd)U6bx_@TEvxIpgTH#a+I)s*MZ_n~ZCYaa$yk)9F{i+FTRKftTQ#^GrN{tBwL zhnjg-zE!Ai(in=Sg}}$>x9bPE->sn=^!jMuw7oN60ypIlsNK{xK1cs9(#nXBQ?74Fy%hYh50ED655 zErx+#jwdh%WOmt{XLYP_EZCcy9b}5f!*1-S<4I1|OVv>LX20@|WkbT#J-Wg4&GvBE z5>My_01WI|qR?PD*z$-l!TI+7fIO{~ct$rn$g>naJ`#^;ZFxpo4gXYPQeSvRv_4~T zg{QP^gl`^h1nX?z|4p9N<5}~> zFbVZT_G`8`?)qlFes;;T;xG_-R(52URm0=EJQtW?e|LW)VITm&Yr-0Tcs$Bx^;|SI zeL=adXX3HFy+2?WNW&yv-5^%{`zPXAIrp#q?}eV9uWt7aPmXz5pXvG8((|L$?A-5{ zr3t(`Z0++)_?R?79+oi%Hfbz8EXQN4QO5AF-#|iPAOMcf}KK6`STBPX*OW)jXDF4;M ztHTaGk{L!>R}s0%k>B8+2o6=#!t0wYoa=6}YUmN2LC-P-0Gww?eTrY-?S<#FTs1^{ z)^70)#q6xN_XjwZtwVF*sXJUn0nci$cthdWzI(WV=dzZtx1jR%B2SAB^3CmDLd5qE zw{{TbOv|P7EyYjeK~=TWKEmt&-^jBvioeg|M6};uwYOEmrS0ONjRFuz+t2T>6sA3 zBv^N33d1;}+P!LsM}YVl)Q3zE1wNceKqovZwSGSg&<~@-%*s>b`7jUbsCYiw9>DUn zbc6IdOEFJj47Mq7^QotKR-VJd(mbtAo+%zt08g5SWn9UG7jaaLvQ z`koq;?Q7OqD(gpq()+%)){|ppZRhs;C{Dp67YJCA228tF9z&x23T zFX&AzB;NUF=4a{Od5DGOX)UPXNvFjd0{0&32HiPNi@z}!`B}=F68kTg_MEu);HU7Q zj^d4IdW7YF{bS)#sn1WU^vmP_0s9%Biq+~Lz8r-Psw;WxY>8iGB`-Wn@WbPbXSJZS zGGOl?{X2_6U*GJUFt8M&D99w|oRaL^$j@^Hzkh!DK{b2H4bfcmAt?}Rr#>G~aJSny z$$w6~>uO&b$KqY-2ItQ&XSkiK*_&2$SImx2NFA?L?Zy~*K9{gx=aPn+>#i&hD-`ca zcvy42h36sZuTw)L008cH8}L>DWz!3MYe}oYr?74Z0B9s6dUdmf6(CQG;eQ$`<>;?w zp`r)K^8un4Fb~U+z2}JbJSnT{L9buk9RNIlmkPsG%>mO~EBx6&QTI+o@a^3Vcpm1* zEKf`Eyy)ifSTm#W&;W3Sr)8W?gV#56%7h2-{(*Q}Wesoc_M+Bt2Dlo|;`|s-YkyfQ z6A_Xp=wF=|`Pu(L9u@1>bOmdPN40$XmsP(xx)=c9{i_?Xm(5B6=q^YcnzCU4-ajb& z*=FTvwwSh1+v7I?@a`VleV&WP*{tS*ReqnM?$m5U17F=9z<`05vbor--1jijW@D>~ zhVD57FI6k8b3dfHDw__b$@)1D^vs>A2JW`&i_4=eB?i6iL8i7JPl?0Nw;FarRL<0w;Qz(aDuxoU;n z&<~oYg}W#>Z~}NRP;)d8nt8X*aGHqb`3$2o8ca{$vG`Vy0>QCB9vAbl8m=5t4lGnW zFK&+JkZ{h^YWoqjX)33stA$-ZIN{>$b`4Kte~qW5tDRjpIN`?a-tx58d5RNJSR3ap z@SL>02g1{e!T`2^7EcOq(!1RT9$!j`10Obderd0cpF_4U4i9PzUugYJmi>sm!ElRs zVgPWRN40SLhSqm@Si3Dez7*>GDSPs$;xLp4tyMfTKK{p3A>Z@RvR@))Th36WQH+(9Q+>j)ZOw`hooP(KtQ8%)Q zZdml7_@ps6N2LA= zVZq(tOSWv!qET);kU@|vhFh}dZ=u?X_OOzoSwk*Qi%HY^%UDm6)?>vv$!eq_6)wKf z?Id1Io{GlDTu(~RDU}Y-DNkMEr5ci8l;?F#Ilj!3vO^Ls{zuF%R_JdO&x!wr8$WyI^7$*8)@iwM z+ixnTiP=@9*Vfa5**JMs_~F;hXBM&wzMPRm%@v+prtmekC`AI$h3C&05`MFmN0MWYQ> z48sr;?Hs$NNklWwa94iVuOaY#cs!LBA43(xEJ+{=0ytF-3Pe3*$e#-9RlPoJAP55Z z@^TgtDbq^1;qzEl7<+pjtdm$#7E}28b_aeCz~|?aFt?5R19WY*Leot+#etaU7nTjsPYt|hk`>?udY<3k=+1h<0^NfKsO<@->nx}>9PgG&7kViy3E}%wiu_yM{5>KnA3K6>UKGFa@fTC`2GPJ{EN)bcC zJR{;MF^?+>eGxwjk1I{-^i3B$D35tg=K{_(@t{K2em&!HF%Jsl{QXoO)wIB)n*MB_ z)nUf7YUlQ$Yrj@JD()K4JTb2D6~u$GJS^lN#TqNN zZ~FnSAFYq}c>c?}ML-{UsCk;eE=x$3VCep#`>$ysQqNyWt!CXpx87^(*6k}{3KGX`SnnvpSIlMw`RL;HtM z_BH8169W7p4-2P2i@wcFI5p?r{na-ni6Usa4)s^v0IL<|kJuYwT^4&->o|h4>s942 zhPpv}=3yPSs)7g}G+hf>9Mhy|RJOAYE2n-!ZsFnlg$J_=VrqFnFLf)G!*!NQ6|ka2 z-@|^ZT3|eB-SNQXX>sMStP%8AHa!&xcA}T^Jf)!m55=YxhoT;=^VIe-{uob-#GcP( z14UJVNA_G51CvI^40CZ=^whVFB+F8r8HR{>yf~<=a7*f zC__)Bc5)BrS77k)hmA@>Nu#m$?=DA&v762!uBhRW4Sf&mCF#LZ|JS*)H2@k7k zq<=S~`=1l-U<};Sd_t|cV#Pq7gizF-=&-UlmfSa|kLEn9y6Gh3%LvR@t4d(gcG7}l zz`%}L%%+Jdh+PLs6oLPfG5D)8ku3(%d*|55CgiV4xorri? znc`{nBl4s;q4#_)p&us+>H1-WO%@}MDhzQmNi5GtcvvA4Js(eJ=*LlbSWQ2`K1-0t z6$T;*6`qg7(*pQ(JR?ttJg~O6JgqPcB)km65ImTmA11}q0{H&vGd^Fiao#&#G_j4_1QiQWiw(P*wXr4k32Ht9KXB%oF~Qu zB0hXM3eU_KwohQB`;YqoBf9=*KP}r+L~$UVRuqO%ls3GZ^Q-_Y&x*r7zJEtx`&w|{ z)*kO)riwWB9p1kqJ%5&m<%5|p5&<(oKpxoV;|aQ95XnN*56H7JAkPnmcY*M%bo}BcWl!IfK-G^L#F0m?lUfeE!>Egggpi0s!A%i8F*A zm*wHDRx4EPm$d&xA$b4kU;m|oBtz^rvSS@@u`>`rvs` zH`rd_k(Z-wWCo&=EzG%Eyb-aNf*V^RO8B`wugmW>SEiR$?dY_0Bdp8P;`M5WnN(Jm zkEIEw?)u=q-chF4u*p+V$?Lx@F|pXI@U+hAM|e`6;}u;h>$NUQtHu{)4YSw$bbBM~ z>vO!w!| zH#BSF0!JCn-^{ET8ti1|O!2TPmTJS?NYM)S&HNi7kdo=*;rhF#jGFA73OC zlxfPs%uj zG^1>dTUA@+c~#4zC|Ib<8NI%tDKn*BZE@b-#qn2_9ODuXi}5l#wB^tF9r3K(&+qc9 zbXA$BEHTdb5{AYY~Nhe0-t%S5JAmoNP0%iu3F6{%yp*q|xz9Fg;M4 z7~kh#j%Rx2Y*kQK`G2q~2nHTcrETk>!4k{5F1voy+EmW-sgO`mR|S{;ID%Hi zla1<7XUzq_SxpUzaTG$+^{`uKki;=m%)=s?!y*r-X`t?UNFp3}aa@^~;F8H7BZm>BRK^0ZRqVeuyB0QnpqRs$tfCi66bvgzRdfQ_Wg)0%Hux<|06 zmUu+l8Bfd524s0${EK5x^VVM9>>($fcQNNN8E_hEk;kNXTx5^=FS`lyW@ZdH!qcLx zEzgPUzoJI!pTeVJ9@jcoJg8e-UrQV8rejEWYB!?``#ZEhUGTub=Ch32t$ETm000?Q zNkl3|B=hw$ykbSN`Kia#WpW%w!dfRBOsV@%iV? z2$ShcJgbDRzv8jYcvzydQuiNBM+}3XTt${s=cIcTWGogk~oGWj-cs!*l)10 znVle3yR);TfeLNgA${dP{;Pj(ycM?9q)9CNoR3c@lH!LXiW?!00*Qm?Oe}7U-lXXA z{qgfry0JNKMxIVWA*TBt9O7*$PXCARA1x1vv=~_uN$bvH_?M-yqtf%=fB1s-afHeA z7I|7c&dc-M5RmQn8CLp!^T$uvYnVjRAiYi_726Z&Utu^tOJh+ViI9y~N*Drqe!L_gP_^_jaDBzYqAALA9@X5QClvu0IsSFx^0XYR@j_e8p03|7fBz8-7_l#EPR)qX6RPo4DVxCdsB-FWTcB&fTDK*`I zJf%60skUTR9x*2NrCq=726+E~JSJX0n(?3(c~Vi}@T6S(8INjq{4b^Ad36K4S3IsC zw@;Kk^So&N+2>~-6-yGF(&J9VD zfcFm~T7-wy_we?1kI1Gu&x+cOqA-x--(`6Jgds*Q%yZ-GkIC&7luZXEc`{Mx%Z9Vf zVkl}$mY1Ahf|+sjZ?PRJYDlq>3*Y5M{Cae~7-mHh(@?jLp6!zztKD4Wg+ z|9D4_qX-V`%;C}OHu(GTTw=F*9KpFkcW+X=cF}Z@BoW;0H-bgwc9}GeX(Tv)0~Ir# z7MGXPIEGh;9i&Mjp4r_F`C825*`_g^s@75S8sY)vX#%fr(4I++_d5&&KOJAd7`$1I zWg}{Meh=Yk-R&VuQz|JNcy-t*9+44yho@z*Uog)Sczbt%b()F_`Sr~Xd0fQPI^>D) zwDh<3bAe^>clXS*a(PNNa)(dMqmtv#2>-H!b)Le9 zFGm2wJSxOz8Vqi`;?tkI5Lw;}8nke

u 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 JPDHLkV1ldgMFju= literal 0 HcmV?d00001 diff --git a/mods/HUD/mcl_credits/textures/mineclone2_icon.png b/mods/HUD/mcl_credits/textures/mineclone2_icon.png new file mode 100644 index 0000000000000000000000000000000000000000..e479dfff5a55bf28d90056e968246e803aad0297 GIT binary patch literal 3961 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 Tj70 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 aYyTg9*d2kzhi~x!0000 highest_damage then - highest_damage = dmg - highest_damage_def = def - end - end - if highest_damage_def and highest_damage_def._mcl_node_death_message then - local field = highest_damage_def._mcl_node_death_message - local field_msg - if type(field) == "table" then - field_msg = field[math.random(1, #field)] - else - field_msg = field - end - local textdomain - if highest_damage_def.mod_origin then - textdomain = highest_damage_def.mod_origin - else - textdomain = "mcl_death_messages" - end - -- We assume the textdomain of the death message in the node definition - -- equals the modname. - msg = minetest.translate(textdomain, field_msg, name) - end - elseif reason.type == "drown" then - msg = dmsg("drown", name) - elseif reason.type == "punch" then - -- Punches - local hitter = reason.object - local hittername, hittertype, hittersubtype, shooter - -- Custom message - if last_damages[name] then - msg = last_damages[name].message - -- Unknown hitter - elseif hitter == nil then - msg = dmsg("murder_any", name) - -- Player - elseif hitter:is_player() then - hittername = hitter:get_player_name() - if hittername ~= nil then - msg = dmsg("murder", name, hittername) - else - msg = dmsg("murder_any", name) - end - -- Mob (according to Common Mob Interface) - elseif hitter:get_luaentity()._cmi_is_mob then - if hitter:get_luaentity().nametag and hitter:get_luaentity().nametag ~= "" then - hittername = hitter:get_luaentity().nametag - end - hittersubtype = hitter:get_luaentity().name - if hittername then - msg = dmsg("murder", name, hittername) - elseif hittersubtype ~= nil and hittersubtype ~= "" then - msg = mmsg(hittersubtype, name) - else - msg = dmsg("murder_any", name) - end - -- Arrow - elseif hitter:get_luaentity().name == "mcl_bows:arrow_entity" or hitter:get_luaentity().name == "mobs_mc:arrow_entity" then - local shooter - if hitter:get_luaentity()._shooter then - shooter = hitter:get_luaentity()._shooter - end - local is_mob = false - local s_ent = shooter and shooter:get_luaentity() - if shooter == nil then - msg = dmsg("arrow", name) - elseif shooter:is_player() then - msg = dmsg("arrow_name", name, shooter:get_player_name()) - elseif s_ent and s_ent._cmi_is_mob then - if s_ent.nametag ~= "" then - msg = dmsg("arrow_name", name, shooter:get_player_name()) - elseif s_ent.name == "mobs_mc:skeleton" then - msg = dmsg("arrow_skeleton", name) - elseif s_ent.name == "mobs_mc:stray" then - msg = dmsg("arrow_stray", name) - elseif s_ent.name == "mobs_mc:illusioner" then - msg = dmsg("arrow_illusioner", name) - else - msg = dmsg("arrow_mob", name) - end - else - msg = dmsg("arrow", name) - end - -- Blaze fireball - elseif hitter:get_luaentity().name == "mobs_mc:blaze_fireball" then - if hitter:get_luaentity()._shot_from_dispenser then - msg = dmsg("fire_charge", name) - else - msg = dmsg("blaze_fireball", name) - end - -- Ghast fireball - elseif hitter:get_luaentity().name == "mobs_monster:fireball" then - msg = dmsg("ghast_fireball", name) - end - -- Falling - elseif reason.type == "fall" then - msg = dmsg("fall", name) - -- Other - elseif reason.type == "set_hp" then - if last_damages[name] then - msg = last_damages[name].message - end - end - if not msg then - msg = dmsg("other", name) - end - minetest.chat_send_all(msg) - last_damages[name] = nil - end -end) - --- dmg_sequence_number is used to discard old damage events -local dmg_sequence_number = 0 -local start_damage_reset_countdown = function (player, sequence_number) - minetest.after(1, function(playername, sequence_number) - if last_damages[playername] and last_damages[playername].sequence_number == sequence_number then - last_damages[playername] = nil - end - end, player:get_player_name(), sequence_number) -end - --- Send a custom death mesage when damaging a player via set_hp or punch. --- To be called directly BEFORE damaging a player via set_hp or punch. --- The next time the player dies due to a set_hp, the message will be shown. --- The player must die via set_hp within 0.1 seconds, otherwise the message will be discarded. -function mcl_death_messages.player_damage(player, message) - last_damages[player:get_player_name()] = { message = message, sequence_number = dmg_sequence_number } - start_damage_reset_countdown(player, dmg_sequence_number) - dmg_sequence_number = dmg_sequence_number + 1 - if dmg_sequence_number >= 65535 then - dmg_sequence_number = 0 - end -end - +local S = minetest.get_translator(minetest.get_current_modname()) + +mcl_death_messages = { + assist = {}, + messages = { + in_fire = { + _translator = S, + plain = "@1 went up in flames", + assist = "@1 walked into fire whilst fighting @2", + }, + lightning_bolt = { + _translator = S, + plain = "@1 was struck by lightning", + assist = "@1 was struck by lightning whilst fighting @2", + }, + on_fire = { + _translator = S, + plain = "@1 burned to death", + assist = "@1 was burnt to a crisp whilst fighting @2", + }, + lava = { + _translator = S, + plain = "@1 tried to swim in lava", + assist = "@1 tried to swim in lava to escape @2" + }, + hot_floor = { + _translator = S, + plain = "@1 discovered the floor was lava", + assist = "@1 walked into danger zone due to @2", + }, + in_wall = { + _translator = S, + plain = "@1 suffocated in a wall", + assist = "@1 suffocated in a wall whilst fighting @2", + }, + drown = { + _translator = S, + plain = "@1 drowned", + assist = "@1 drowned whilst trying to escape @2", + }, + starve = { + _translator = S, + plain = "@1 starved to death", + assist = "@1 starved to death whilst fighting @2", + }, + cactus = { + _translator = S, + plain = "@1 was pricked to death", + assist = "@1 walked into a cactus whilst trying to escape @2", + }, + fall = { + _translator = S, + plain = "@1 hit the ground too hard", + assist = "@1 hit the ground too hard whilst trying to escape @2", + -- "@1 fell from a high place" -- for fall distance > 5 blocks + -- "@1 fell while climbing" + -- "@1 fell off some twisting vines" + -- "@1 fell off some weeping vines" + -- "@1 fell off some vines" + -- "@1 fell off scaffolding" + -- "@1 fell off a ladder" + }, + fly_into_wall = { + _translator = S, + plain = "@1 experienced kinetic energy", + assist = "@1 experienced kinetic energy whilst trying to escape @2", + }, + out_of_world = { + _translator = S, + plain = "@1 fell out of the world", + assist = "@1 didn't want to live in the same world as @2", + }, + generic = { + _translator = S, + plain = "@1 died", + assist = "@1 died because of @2", + }, + magic = { + _translator = S, + plain = "@1 was killed by magic", + assist = "@1 was killed by magic whilst trying to escape @2", + killer = "@1 was killed by @2 using magic", + item = "@1 was killed by @2 using @3", + }, + dragon_breath = { + _translator = S, + plain = "@1 was roasted in dragon breath", + killer = "@1 was roasted in dragon breath by @2", + }, + wither = { + _translator = S, + plain = "@1 withered away", + escape = "@1 withered away whilst fighting @2", + }, + wither_skull = { + _translator = S, + plain = "@1 was killed by magic", + killer = "@1 was shot by a skull from @2", + }, + anvil = { + _translator = S, + plain = "@1 was squashed by a falling anvil", + escape = "@1 was squashed by a falling anvil whilst fighting @2", + }, + falling_node = { + _translator = S, + plain = "@1 was squashed by a falling block", + assist = "@1 was squashed by a falling block whilst fighting @2", + }, + mob = { + _translator = S, + killer = "@1 was slain by @2", + item = "@1 was slain by @2 using @3", + }, + player = { + _translator = S, + killer = "@1 was slain by @2", + item = "@1 was slain by @2 using @3" + }, + arrow = { + _translator = S, + killer = "@1 was shot by @2", + item = "@1 was shot by @2 using @3", + }, + fireball = { + _translator = S, + killer = "@1 was fireballed by @2", + item = "@1 was fireballed by @2 using @3", + }, + thorns = { + _translator = S, + killer = "@1 was killed trying to hurt @2", + item = "@1 was killed by @3 trying to hurt @2", -- yes, the order is intentional: @1 @3 @2 + }, + explosion = { + _translator = S, + plain = "@1 blew up", + killer = "@1 was blown up by @2", + item = "@1 was blown up by @2 using @3", + -- "@1 was killed by [Intentional Game Design]" -- for exploding bed in nether or end + }, + cramming = { + _translator = S, + plain = "@1 was squished too much", + assist = "@1 was squashed by @2", -- surprisingly "escape" is actually the correct subtype + }, + fireworks = { + _translator = S, + plain = "@1 went off with a bang", + item = "@1 went off with a bang due to a firework fired from @3 by @2", -- order is intentional + }, + -- Missing snowballs: The Minecraft wiki mentions them but the MC source code does not. + }, +} + +local function get_item_killer_message(obj, messages, reason) + if messages.item then + local wielded = mcl_util.get_wielded_item(reason.source) + local itemname = wielded:get_meta():get_string("name") + if itemname ~= "" then + itemname = "[" .. itemname .. "]" + if mcl_enchanting.is_enchanted(wielded:get_name()) then + itemname = minetest.colorize(mcl_colors.AQUA, itemname) + end + return messages._translator(messages.item, mcl_util.get_object_name(obj), mcl_util.get_object_name(reason.source), itemname) + end + end +end + +local function get_plain_killer_message(obj, messages, reason) + return messages.killer and messages._translator(messages.killer, mcl_util.get_object_name(obj), mcl_util.get_object_name(reason.source)) +end + +local function get_killer_message(obj, messages, reason) + return reason.source and (get_item_killer_message(obj, messages, reason) or get_plain_killer_message(obj, messages, reason)) +end + +local function get_assist_message(obj, messages, reason) + if messages.assist and mcl_death_messages.assist[obj] then + return messages._translator(messages.assist, mcl_util.get_object_name(obj), mcl_death_messages.assist[obj].name) + end +end + +local function get_plain_message(obj, messages, reason) + if messages.plain then + return messages._translator(messages.plain, mcl_util.get_object_name(obj)) + end +end + +local function get_fallback_message(obj, messages, reason) + return "mcl_death_messages.messages." .. reason.type .. " " .. mcl_util.get_object_name(obj) +end + +local function fallback_translator(s) + return s +end + +mcl_damage.register_on_death(function(obj, reason) + if not minetest.settings:get_bool("mcl_showDeathMessages", true) then + return + end + + local send_to + + 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") + + if send_to then + local messages = mcl_death_messages.messages[reason.type] or {} + messages._translator = messages._translator or fallback_translator + + local message = + get_killer_message(obj, messages, reason) or + get_assist_message(obj, messages, reason) or + get_plain_message(obj, messages, reason) or + get_fallback_message(obj, messages, reason) + + if send_to == true then + minetest.chat_send_all(message) + else + minetest.chat_send_player(send_to, message) + end + end +end) + +mcl_damage.register_on_damage(function(obj, damage, reason) + if obj:get_hp() - damage > 0 then + if reason.source then + mcl_death_messages.assist[obj] = {name = mcl_util.get_object_name(reason.source), timeout = 5} + else + mcl_death_messages.assist[obj] = nil + end + end +end) + +minetest.register_globalstep(function(dtime) + for obj, tbl in pairs(mcl_death_messages.assist) do + tbl.timeout = tbl.timeout - dtime + if not obj:is_player() and not obj:get_luaentity() or tbl.timeout > 0 then + mcl_death_messages.assist[obj] = nil + end + end +end) diff --git a/mods/HUD/mcl_death_messages/locale/mcl_death_messages.de.tr b/mods/HUD/mcl_death_messages/locale/mcl_death_messages.de.tr index b9ef6680d..39235dff7 100644 --- a/mods/HUD/mcl_death_messages/locale/mcl_death_messages.de.tr +++ b/mods/HUD/mcl_death_messages/locale/mcl_death_messages.de.tr @@ -1,58 +1,58 @@ # textdomain: mcl_death_messages -@1 was fatally hit by an arrow.=@1 wurde tödlich von einem Pfeil getroffen. -@1 has been killed by an arrow.=@1 wurde von einem Pfeil getötet. -@1 was shot by an arrow from @2.=@1 wurde mit einem Pfeil von @2 abgeschossen. -@1 was shot by an arrow from a skeleton.=@1 wurde von einem Skelett mit Pfeil und Bogen abgeschossen. -@1 was shot by an arrow from a stray.=@1 wurde von einem Eiswanderer mit Pfeil und Bogen abgeschossen. -@1 was shot by an arrow from an illusioner.=@1 wurde von einem Illusionisten mit Pfeil und Bogen abgeschossen. -@1 was shot by an arrow.=@1 wurde mit einem Pfeil abgeschossen. -@1 forgot to breathe.=@1 vergaß, zu atmen. -@1 drowned.=@1 ertrank. -@1 ran out of oxygen.=@1 ging die Luft aus. -@1 was killed by @2.=@1 wurde von @2 getötet. -@1 was killed.=@1 wurde getötet. -@1 was killed by a mob.=@1 wurde von einem Mob getötet. -@1 was burned to death by a blaze's fireball.=@1 wurde von einem Feuerball einer Lohe zu Tode verbrannt. -@1 was killed by a fireball from a blaze.=@1 wurde von einem Feuerball einer Lohe getötet. -@1 was burned by a fire charge.=@1 wurde von einer Feuerkugel verbrannt. -A ghast scared @1 to death.=Ein Ghast hat @1 zu Tode erschrocken. -@1 has been fireballed by a ghast.=@1 wurde von einem Ghast mit einer Feuerkugel abgeschossen. -@1 fell from a high cliff.=@1 stürzte von einer hohen Klippe. -@1 took fatal fall damage.=@1 nahm tödlichen Fallschaden. -@1 fell victim to gravity.=@1 fiel der Schwerkraft zum Opfer. -@1 died.=@1 starb. -@1 was killed by a zombie.=@1 wurde von einem Zombie getötet. -@1 was killed by a baby zombie.=@1 wurde von einem Zombiebaby getötet. -@1 was killed by a blaze.=@1 wurde von einer Lohe getötet. -@1 was killed by a slime.=@1 wurde von einem Schleim getötet. -@1 was killed by a witch.=@1 wurde von einer Hexe getötet. -@1 was killed by a magma cube.=@1 wurde von einem Magmakubus getötet. -@1 was killed by a wolf.=@1 wurde von einem Wolf getötet. -@1 was killed by a cat.=@1 wurde von einer Katze getötet. -@1 was killed by an ocelot.=@1 wurde von einem Ozelot getötet. -@1 was killed by an ender dragon.=@1 wurde von einem Enderdrachen getötet. -@1 was killed by a wither.=@1 wurde von einem Wither getötet. -@1 was killed by an enderman.=@1 wurde von einem Enderman getötet. -@1 was killed by an endermite.=@1 wurde von einer Endermilbe getötet. -@1 was killed by a ghast.=@1 wurde von einem Ghast getötet. -@1 was killed by an elder guardian.=@1 wurde von einem Großen Wächter getötet. -@1 was killed by a guardian.=@1 wurde von einem Wächter getötet. -@1 was killed by an iron golem.=@1 wurde von einem Eisengolem getötet. -@1 was killed by a polar_bear.=@1 wurde von einem Eisbären getötet. -@1 was killed by a killer bunny.=@1 wurde von einem Killerkaninchen getötet. -@1 was killed by a shulker.=@1 wurde von einem Schulker getötet. -@1 was killed by a silverfish.=@1 wurde von einem Silberfischchen getötet. -@1 was killed by a skeleton.=@1 wurde von einem Skelett getötet. -@1 was killed by a stray.=@1 wurde von einem Eiswanderer getötet. -@1 was killed by a slime.=@1 wurde von einem Schleim getötet. -@1 was killed by a spider.=@1 wurde von einer Spinne getötet. -@1 was killed by a cave spider.=@1 wurde von einer Höhlenspinne getötet. -@1 was killed by a vex.=@1 wurde von einem Plagegeist getötet. -@1 was killed by an evoker.=@1 wurde von einem Magier getötet. -@1 was killed by an illusioner.=@1 wurde von einem Illusionisten getötet. -@1 was killed by a vindicator.=@1 wurde von einem Diener getötet. -@1 was killed by a zombie villager.=@1 wurde von einem Dorfbewohnerzombie getötet. -@1 was killed by a husk.=@1 wurde von einem Wüstenzombie getötet. -@1 was killed by a baby husk.=@1 wurde von einem Wüstenzombiebaby getötet. -@1 was killed by a zombie pigman.=@1 wurde von einem Schweinezombie getötet. -@1 was killed by a baby zombie pigman.=@1 wurde von einem Schweinezombiebaby getötet. +@1 went up in flames=@1 ging in Flammen auf +@1 walked into fire whilst fighting @2=@1 ist während eines Kampfes mit @2 in ein Feuer gelaufen +@1 was struck by lightning=@1 wurde von einem Blitz erschlagen +@1 was struck by lightning whilst fighting @2=@1 wurde während eines Kampfes mit @2 von einem Blitz erschlagen +@1 burned to death=@1 ist verbrannt +@1 was burnt to a crisp whilst fighting @2=@1 ist während eines Kampfes mit @2 verbrannt +@1 tried to swim in lava=@1 hat versucht, in Lava zu schwimmen +@1 tried to swim in lava to escape @2=@1 hat versucht, in Lava zu schwimmen, um @2 zu entkommen +@1 discovered the floor was lava=@1 hat festgestellt, dass der Boden Lava ist +@1 walked into danger zone due to @2=@1 ist wegen @2 in eine Gefahrenzone gelaufen +@1 suffocated in a wall=@1 ist in einer Mauer erstickt +@1 suffocated in a wall whilst fighting @2=@1 ist während eines Kampfes mit @2 in einer Mauer erstickt +@1 drowned=@1 ist ertrunken +@1 drowned whilst trying to escape @2=@1 ist während dem Versuch, @2 zu entkommen, ertrunken +@1 starved to death=@1 ist verhungert +@1 starved to death whilst fighting @2=@1 ist während eines Kampfes mit @2 verhungert +@1 was pricked to death=@1 wurde zu Tode gestochen +@1 walked into a cactus whilst trying to escape @2=@1 ist während dem Versuch, @2 zu entkommen, in einen Kaktus gelaufen +@1 hit the ground too hard=@1 ist zu hart auf dem Boden aufgetroffen +@1 hit the ground too hard whilst trying to escape @2=@1 ist während dem Versuch, @2 zu entkommen, zu hart auf dem Boden aufgetroffen +@1 experienced kinetic energy=@1 hat kinetische Energie erfahren +@1 experienced kinetic energy whilst trying to escape @2=@1 hat während dem Versuch, @2 zu entkommen, kinetische Energie erfahren +@1 fell out of the world=@1 ist aus der Welt gefallen +@1 didn't want to live in the same world as @2=@1 wollte nicht in der gleichen Welt wie @2 leben +@1 died=@1 ist gestorben +@1 died because of @2=@1 ist wegen @2 gestorben +@1 was killed by magic=@1 wurde von Magie getötet +@1 was killed by magic whilst trying to escape @2=@1 wurde während dem Versuch, @2 zu entkommen, von Magie getötet +@1 was killed by @2 using magic=@1 wurde von @2 mit Magie getötet +@1 was killed by @2 using @3=@1 wurde von @2 mit @3 getötet +@1 was roasted in dragon breath=@1 wurde in Drachenatem geröstet +@1 was roasted in dragon breath by @2=@1 wurde in Drachenatem von @2 geröstet +@1 withered away=@1 ist davon gewithert +@1 withered away whilst fighting @2=@1 ist während einem Kampf mit @2 davon gewithert +@1 was killed by magic=@1 wurde von Magie getötet +@1 was shot by a skull from @2=@1 wurde von einem Schädel von @2 erschossen +@1 was squashed by a falling anvil=@1 wurde von einem fallenden Amboss erquetscht +@1 was squashed by a falling anvil whilst fighting @2=@1 wurde während einem Kampf mit @2 von einem fallenden Amboss erquetscht +@1 was squashed by a falling block=@1 wurde von einem fallenden Block erquetscht +@1 was squashed by a falling block whilst fighting @2=@1 wurde während einem Kampf mit @2 von einem fallenden Block erquetscht +@1 was slain by @2=@1 wurde von @2 erschlagen +@1 was slain by @2 using @3=@1 wurde von @2 mit @3 erschlagen +@1 was slain by @2=@1 wurde von @2 erschlagen +@1 was slain by @2 using @3=@1 wurde von @2 mit @3 erschlagen +@1 was shot by @2=@1 wurde von @2 erschossen +@1 was shot by @2 using @3=@1 wurde von @2 mit @3 erschossen +@1 was fireballed by @2=@1 wurde von @2 gefeuerballt +@1 was fireballed by @2 using @3=@1 wurde von @2 mit @3 gefeuerballt +@1 was killed trying to hurt @2=@1 ist bei dem Versuch, @2 zu verletzten gestorben +@1 was killed by @3 trying to hurt @2=@1 ist bei dem Versuch, @2 zu verletzten, von @3 getötet worden +@1 blew up=@1 ist gesprengt worden +@1 was blown up by @2=@1 wurde von @2 gesprengt +@1 was blown up by @2 using @3=@1 wurde von @2 mit @3 gesprengt +@1 was squished too much=@1 war zu gequetscht +@1 was squashed by @2=@1 wurde von @2 erquetscht +@1 went off with a bang=@1 ging mit einem Knall ab +@1 went off with a bang due to a firework fired from @3 by @2=@1 ging mit einem Knall wegen eines Feuerwerks, das mit @3 von @2 gefeuert wurde, ab diff --git a/mods/HUD/mcl_death_messages/locale/mcl_death_messages.es.tr b/mods/HUD/mcl_death_messages/locale/mcl_death_messages.es.tr index 6ed106db8..a56199e00 100644 --- a/mods/HUD/mcl_death_messages/locale/mcl_death_messages.es.tr +++ b/mods/HUD/mcl_death_messages/locale/mcl_death_messages.es.tr @@ -55,3 +55,4 @@ A ghast scared @1 to death.=Se ha asustado @1 hasta morir. @1 was killed by a baby husk.=@1 fue asesinado por un bebé husk. @1 was killed by a zombie pigman.=@1 fue asesinado por un cerdo zombie. @1 was killed by a baby zombie pigman.=@1 fue asesinado por un bebé cerdo zombie. +@1 was slain by @2.= diff --git a/mods/HUD/mcl_death_messages/locale/mcl_death_messages.fr.tr b/mods/HUD/mcl_death_messages/locale/mcl_death_messages.fr.tr index 6d0a5115c..05cf99976 100644 --- a/mods/HUD/mcl_death_messages/locale/mcl_death_messages.fr.tr +++ b/mods/HUD/mcl_death_messages/locale/mcl_death_messages.fr.tr @@ -56,3 +56,4 @@ A ghast scared @1 to death.=Un ghast a éffrayé @1 à mort. @1 was killed by a baby husk.=@1 a été tué par un bébé zombie momie. @1 was killed by a zombie pigman.=@1 a été tué par un zombie-couchon. @1 was killed by a baby zombie pigman.=@1 a été tué par un bébé zombie-couchon +@1 was slain by @2.= diff --git a/mods/HUD/mcl_death_messages/locale/mcl_death_messages.pl.tr b/mods/HUD/mcl_death_messages/locale/mcl_death_messages.pl.tr new file mode 100644 index 000000000..65fcde760 --- /dev/null +++ b/mods/HUD/mcl_death_messages/locale/mcl_death_messages.pl.tr @@ -0,0 +1,59 @@ +# textdomain: mcl_death_messages +@1 went up in flames=@1 stanęła w płomieniach +@1 walked into fire whilst fighting @2=@1 weszła w płomienie podczas walki z @2 +@1 was struck by lightning=@1 została trafiona piorunem +@1 was struck by lightning whilst fighting @2=@1 została trafiona piorunem z @2 +@1 burned to death=@1 została spalona żywcem +@1 was burnt to a crisp whilst fighting @2=@1 została usmażona podczas walki z @2 +@1 tried to swim in lava=@1 próbowała pływać w lawie +@1 tried to swim in lava to escape @2=@1 próbowała pływać w lawie by uciec od @20 +@1 discovered the floor was lava=@1 odkryła, że podłoga to lawa +@1 walked into danger zone due to @2=@1 weszła do niebezpiecznej strony przez @2 +@1 suffocated in a wall=@1 udusiła się w ścianie +@1 suffocated in a wall whilst fighting @2=@1 udusiła się w ścianie podczas walki z @2 +@1 drowned=@1 utopiła się +@1 drowned whilst trying to escape @2=@1 utopiła się podczas ucieczki przed @2 +@1 starved to death=@1 zagłodziła się na śmierć +@1 starved to death whilst fighting @2=@1 zagłodziła się na śmierć podczas walki z @2 +@1 was pricked to death=@1 została zakłuta na śmierć +@1 walked into a cactus whilst trying to escape @2=@1 weszła w kaktus podczas ucieczki przed @2 +@1 hit the ground too hard=@1 zbyt twardo wylądowała +@1 hit the ground too hard whilst trying to escape @2=@1 zby twardo wylądowała podczas walki z @2 +@1 experienced kinetic energy=@1 doświadczyła energii kinetycznej +@1 experienced kinetic energy whilst trying to escape @2=@1 doświadczyła energii kinetycznej podczas ucieczki przed @2 +@1 fell out of the world=@1 wyleciała poza świat +@1 didn't want to live in the same world as @2=@1 nie chciała żyć w tym samym świecie co @2 +@1 died=@1 umarła +@1 died because of @2=@1 umarła przez @2 +@1 was killed by magic=@1 została zabita magią +@1 was killed by magic whilst trying to escape @2=@1 została zabita magią podczas ucieczki przed @2 +@1 was killed by @2 using magic=@1 została zabita przez @2 korzystając z magii +@1 was killed by @2 using @3=@1 została zabita przez @2 korzystając z @3 +@1 was roasted in dragon breath=@1 została usmażona przez oddech smoka +@1 was roasted in dragon breath by @2=@1 została usmażona przez oddech smoka od @2 +@1 withered away=@1 odeszła na wieki +@1 withered away whilst fighting @2=@1 odeszła na wieki podczas walki z @2 +@1 was killed by magic=@1 została zabita magią +@1 was shot by a skull from @2=@1 została zastrzelona czaszką przez @2 +@1 was squashed by a falling anvil=@1 została zmiażdżona spadającym kowadłem +@1 was squashed by a falling anvil whilst fighting @2=@1 została zmiażdżona spadającym kowadłem podczas walki z @2 +@1 was squashed by a falling block=@1 została zmiażdżona spadającym blokiem +@1 was squashed by a falling block whilst fighting @2=@1 została zmiażdżona spadającym blokiem podczas walki z @2 +@1 was slain by @2=@1 została zabita przez @2 +@1 was slain by @2 using @3=@1 została zabita przez @2 przy użyciu @3 +@1 was slain by @2=@1 została zabita przez @2 +@1 was slain by @2 using @3=@1 została zabita przez @2 przy użyciu @3 +@1 was shot by @2=@1 została zastrzelona przez @2 +@1 was shot by @2 using @3=@1 została zastrzelona przez @2 przy użyciu @3 +@1 was fireballed by @2=@1 została zabita kulą ognia przez @2 +@1 was fireballed by @2 using @3=@1 została zabita kulą ognia przez @2 przy użyciu @3 +@1 was killed trying to hurt @2=@1 została zabita gdy próbowała skrzywdzić @2 +@1 was killed by @3 trying to hurt @2=@1 została zabita przez @3 gdy próbowała skrzywdzić @2 +@1 blew up=@1 wybuchła +@1 was blown up by @2=@1 została wysadzona przez @2 +@1 was blown up by @2 using @3=@1 została wysadzona przez @2 przy użyciu @3 +@1 was squished too much=@1 została zbyt mocno ściśnięta +@1 was squashed by @2=@1 została ściśnięta przez @2 +@1 went off with a bang=@1 odeszła z hukiem +@1 went off with a bang due to a firework fired from @3 by @2=@1 odeszła z hukiem przez fajerwerki wystrzelone z @3 przez @2 + diff --git a/mods/HUD/mcl_death_messages/locale/mcl_death_messages.ru.tr b/mods/HUD/mcl_death_messages/locale/mcl_death_messages.ru.tr index f9f164dd3..d5b6ec396 100644 --- a/mods/HUD/mcl_death_messages/locale/mcl_death_messages.ru.tr +++ b/mods/HUD/mcl_death_messages/locale/mcl_death_messages.ru.tr @@ -56,3 +56,4 @@ A ghast scared @1 to death.=Гаст напугал @1 до смерти. @1 was killed by a baby husk.=@1 был(а) убит(а) машылом-кадавром. @1 was killed by a zombie pigman.=@1 был(а) убит(а) зомби-свиночеловеком. @1 was killed by a baby zombie pigman.=@1 был(а) убит(а) малышом-зомби-свиночеловеком. +@1 was slain by @2.= diff --git a/mods/HUD/mcl_death_messages/locale/template.txt b/mods/HUD/mcl_death_messages/locale/template.txt index db074f756..67ba9fd1c 100644 --- a/mods/HUD/mcl_death_messages/locale/template.txt +++ b/mods/HUD/mcl_death_messages/locale/template.txt @@ -1,58 +1,58 @@ # textdomain: mcl_death_messages -@1 was fatally hit by an arrow.= -@1 has been killed with an arrow.= -@1 was shot by an arrow from @2.= -@1 was shot by an arrow from a skeleton.= -@1 was shot by an arrow from a stray.= -@1 was shot by an arrow from an illusioner.= -@1 was shot by an arrow.= -@1 forgot to breathe.= -@1 drowned.= -@1 ran out of oxygen.= -@1 was killed by @2.= -@1 was killed.= -@1 was killed by a mob.= -@1 was burned to death by a blaze's fireball.= -@1 was killed by a fireball from a blaze.= -@1 was burned by a fire charge.= -A ghast scared @1 to death.= -@1 has been fireballed by a ghast.= -@1 fell from a high cliff.= -@1 took fatal fall damage.= -@1 fell victim to gravity.= -@1 died.= -@1 was killed by a zombie.= -@1 was killed by a baby zombie.= -@1 was killed by a blaze.= -@1 was killed by a slime.= -@1 was killed by a witch.= -@1 was killed by a magma cube.= -@1 was killed by a wolf.= -@1 was killed by a cat.= -@1 was killed by an ocelot.= -@1 was killed by an ender dragon.= -@1 was killed by a wither.= -@1 was killed by an enderman.= -@1 was killed by an endermite.= -@1 was killed by a ghast.= -@1 was killed by an elder guardian.= -@1 was killed by a guardian.= -@1 was killed by an iron golem.= -@1 was killed by a polar_bear.= -@1 was killed by a killer bunny.= -@1 was killed by a shulker.= -@1 was killed by a silverfish.= -@1 was killed by a skeleton.= -@1 was killed by a stray.= -@1 was killed by a slime.= -@1 was killed by a spider.= -@1 was killed by a cave spider.= -@1 was killed by a vex.= -@1 was killed by an evoker.= -@1 was killed by an illusioner.= -@1 was killed by a vindicator.= -@1 was killed by a zombie villager.= -@1 was killed by a husk.= -@1 was killed by a baby husk.= -@1 was killed by a zombie pigman.= -@1 was killed by a baby zombie pigman.= +@1 went up in flames= +@1 walked into fire whilst fighting @2= +@1 was struck by lightning= +@1 was struck by lightning whilst fighting @2= +@1 burned to death= +@1 was burnt to a crisp whilst fighting @2= +@1 tried to swim in lava= +@1 tried to swim in lava to escape @2= +@1 discovered the floor was lava= +@1 walked into danger zone due to @2= +@1 suffocated in a wall= +@1 suffocated in a wall whilst fighting @2= +@1 drowned= +@1 drowned whilst trying to escape @2= +@1 starved to death= +@1 starved to death whilst fighting @2= +@1 was pricked to death= +@1 walked into a cactus whilst trying to escape @2= +@1 hit the ground too hard= +@1 hit the ground too hard whilst trying to escape @2= +@1 experienced kinetic energy= +@1 experienced kinetic energy whilst trying to escape @2= +@1 fell out of the world= +@1 didn't want to live in the same world as @2= +@1 died= +@1 died because of @2= +@1 was killed by magic= +@1 was killed by magic whilst trying to escape @2= +@1 was killed by @2 using magic= +@1 was killed by @2 using @3= +@1 was roasted in dragon breath= +@1 was roasted in dragon breath by @2= +@1 withered away= +@1 withered away whilst fighting @2= +@1 was killed by magic= +@1 was shot by a skull from @2= +@1 was squashed by a falling anvil= +@1 was squashed by a falling anvil whilst fighting @2= +@1 was squashed by a falling block= +@1 was squashed by a falling block whilst fighting @2= +@1 was slain by @2= +@1 was slain by @2 using @3= +@1 was slain by @2= +@1 was slain by @2 using @3= +@1 was shot by @2= +@1 was shot by @2 using @3= +@1 was fireballed by @2= +@1 was fireballed by @2 using @3= +@1 was killed trying to hurt @2= +@1 was killed by @3 trying to hurt @2= +@1 blew up= +@1 was blown up by @2= +@1 was blown up by @2 using @3= +@1 was squished too much= +@1 was squashed by @2= +@1 went off with a bang= +@1 went off with a bang due to a firework fired from @3 by @2= diff --git a/mods/HUD/mcl_death_messages/mod.conf b/mods/HUD/mcl_death_messages/mod.conf index 4e4396074..a634e16de 100644 --- a/mods/HUD/mcl_death_messages/mod.conf +++ b/mods/HUD/mcl_death_messages/mod.conf @@ -1 +1,4 @@ name = mcl_death_messages +author = 4Evergreen4 +description = Shows messages in chat when a player dies. +depends = mcl_colors diff --git a/mods/HUD/mcl_experience/init.lua b/mods/HUD/mcl_experience/init.lua index 32c2d9424..e514ffc19 100644 --- a/mods/HUD/mcl_experience/init.lua +++ b/mods/HUD/mcl_experience/init.lua @@ -1,5 +1,11 @@ -local S = minetest.get_translator("mcl_experience") +local S = minetest.get_translator(minetest.get_current_modname()) + mcl_experience = {} + +local vector = vector +local math = math +local string = string + local pool = {} local registered_nodes local max_xp = 2^31-1 @@ -34,7 +40,7 @@ minetest.register_on_mods_loaded(function() registered_nodes = minetest.registered_nodes end) -local load_data = function(player) +local function load_data(player) local name = player:get_player_name() pool[name] = {} local temp_pool = pool[name] @@ -46,7 +52,7 @@ local load_data = function(player) end -- saves data to be utilized on next login -local save_data = function(player) +local function save_data(player) local name = player:get_player_name() local temp_pool = pool[name] local meta = player:get_meta() @@ -64,8 +70,11 @@ minetest.register_on_leaveplayer(function(player) end) -- create instance of new hud -hud_manager.add_hud = function(player,hud_name,def) +function hud_manager.add_hud(player,hud_name,def) local name = player:get_player_name() + if minetest.is_creative_enabled(name) then + return + end local local_hud = player:hud_add({ hud_elem_type = def.hud_elem_type, position = def.position, @@ -91,7 +100,7 @@ hud_manager.add_hud = function(player,hud_name,def) end -- delete instance of hud -hud_manager.remove_hud = function(player,hud_name) +function hud_manager.remove_hud(player,hud_name) local name = player:get_player_name() if player_huds[name] and player_huds[name][hud_name] then player:hud_remove(player_huds[name][hud_name]) @@ -100,7 +109,7 @@ hud_manager.remove_hud = function(player,hud_name) end -- change element of hud -hud_manager.change_hud = function(data) +function hud_manager.change_hud(data) local name = data.player:get_player_name() if player_huds[name] and player_huds[name][data.hud_name] then data.player:hud_change(player_huds[name][data.hud_name], data.element, data.data) @@ -108,12 +117,12 @@ hud_manager.change_hud = function(data) end -- gets if hud exists -hud_manager.hud_exists = function(player,hud_name) +function hud_manager.hud_exists(player,hud_name) local name = player:get_player_name() if player_huds[name] and player_huds[name][hud_name] then - return(true) + return true else - return(false) + return false end end ------------------- @@ -124,7 +133,7 @@ minetest.register_on_leaveplayer(function(player) end) -- is used for shutdowns to save all data -local save_all = function() +local function save_all() for name,_ in pairs(pool) do local player = minetest.get_player_by_name(name) if player then @@ -141,7 +150,7 @@ end) function mcl_experience.get_player_xp_level(player) local name = player:get_player_name() - return(pool[name].level) + return pool[name].level end function mcl_experience.set_player_xp_level(player,level) @@ -181,7 +190,7 @@ minetest.register_on_joinplayer(function(player) hud_elem_type = "text", position = {x=0.5, y=1}, name = "xp_level", text = tostring(temp_pool.level), number = 0x80FF20, - offset = {x = 0, y = -(48 + 24 + 24)}, + offset = {x = 0, y = -(48 + 24 + 24)}, z_index = 12, }) end) @@ -259,35 +268,7 @@ function mcl_experience.add_experience(player, experience) if #final_candidates > 0 then local can = final_candidates[math.random(#final_candidates)] local stack, list, index, wear = can.stack, can.list, can.index, can.wear - local unbreaking_level = mcl_enchanting.get_enchantment(stack, "unbreaking") - local uses - local armor_uses = minetest.get_item_group(stack:get_name(), "mcl_armor_uses") - if armor_uses > 0 then - uses = armor_uses - if unbreaking_level > 0 then - uses = uses / (0.6 + 0.4 / (unbreaking_level + 1)) - end - else - local def = stack:get_definition() - if def then - local fixed_uses = def._mcl_uses - if fixed_uses then - uses = fixed_uses - if unbreaking_level > 0 then - uses = uses * (unbreaking_level + 1) - end - end - end - if not uses then - local toolcaps = stack:get_tool_capabilities() - local groupcaps = toolcaps.groupcaps - for _, v in pairs(groupcaps) do - uses = v.uses - break - end - end - end - uses = uses or 0 + local uses = mcl_util.calculate_durability(stack) local multiplier = 2 * 65535 / uses local repair = experience * multiplier local new_wear = wear - repair @@ -299,17 +280,13 @@ 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 temp_pool.xp = math.min(math.max(temp_pool.xp + experience, 0), max_xp) if (temp_pool.xp < temp_pool.xp_next_level) and (temp_pool.xp >= old_xp) then - temp_pool.bar = mcl_experience.xp_to_bar(temp_pool.xp, temp_pool.level) + temp_pool.bar = temp_pool.bar + temp_pool.bar_step * experience else temp_pool.level = mcl_experience.xp_to_level(temp_pool.xp) temp_pool.bar, temp_pool.bar_step, temp_pool.xp_next_level = mcl_experience.xp_to_bar(temp_pool.xp, temp_pool.level) @@ -357,14 +334,12 @@ minetest.register_on_dieplayer(function(player) mcl_experience.throw_experience(player:get_pos(), xp_amount) end) - -local name local collector, pos, pos2 local direction, distance, player_velocity, goal local currentvel, acceleration, multiplier, velocity local node, vel, def local is_moving, is_slippery, slippery, slip_factor -local size, data +local size local function xp_step(self, dtime) --if item set to be collected then only execute go to player if self.collected == true then @@ -614,9 +589,26 @@ minetest.register_entity("mcl_experience:bottle",{ local pos = self.object:get_pos() local node = minetest.get_node(pos) local n = node.name - if n ~= "air" and n ~= "mcl_portals:portal" and n ~= "mcl_portals:portal_end" and minetest.get_node_group(n, "liquid") == 0 then + if n ~= "air" and n ~= "mcl_portals:portal" and n ~= "mcl_portals:portal_end" and minetest.get_item_group(n, "liquid") == 0 then minetest.sound_play("mcl_potions_breaking_glass", {pos = pos, max_hear_distance = 16, gain = 1}) mcl_experience.throw_experience(pos, math.random(3, 11)) + minetest.add_particlespawner({ + amount = 50, + time = 0.1, + minpos = vector.add(pos, vector.new(-0.1, 0.5, -0.1)), + maxpos = vector.add(pos, vector.new( 0.1, 0.6, 0.1)), + minvel = vector.new(-2, 0, -2), + maxvel = vector.new( 2, 2, 2), + minacc = vector.new(0, 0, 0), + maxacc = vector.new(0, 0, 0), + minexptime = 0.5, + maxexptime = 1.25, + minsize = 1, + maxsize = 2, + collisiondetection = true, + vertical = false, + texture = "mcl_particles_effect.png^[colorize:blue:127", + }) self.object:remove() end end, diff --git a/mods/HUD/mcl_experience/locale/mcl_experience.pl.tr b/mods/HUD/mcl_experience/locale/mcl_experience.pl.tr new file mode 100644 index 000000000..5834bac14 --- /dev/null +++ b/mods/HUD/mcl_experience/locale/mcl_experience.pl.tr @@ -0,0 +1,8 @@ +# textdomain: mcl_experience +[[] ]=[[] b5zuXzm*1$WoQT-F>^ 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 Szv7-(%mF^d{oUdo{{I8{KZR2O literal 313165 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

;U9 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

Hq$O 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 diff --git a/mods/ITEMS/mcl_armor/models/mcl_armor_character.blend b/mods/ITEMS/mcl_armor/models/mcl_armor_character.blend index 37489f1b1ea68ff9edcea6d07b8b01501939f95f..a613eef89303dc9b6df5b5bbf63c46a1ef996702 100644 GIT binary patch literal 1242020 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

$-U6MY~hY4O>ch%`>TXeJ-o*Ab?^pw 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 KRS^2rzyAZ&`bpma literal 1078600 zcmeEP34B$>)xUuNPenzvmbwN(8(M*|DMH}AuxL;=0ReFdAw&`df+0WzB~M%1RIB1v z0T;lwO4ZuBR8c|_!M4w@YOQs_6{^<8)>hiu)><{+IWzOW@7#I!zN{kPy}#U?nKS2{ zSA;}_rcg59ahzS-=Ir-r6(#7%FlXP6jx)8Wcww=^w(j4w zu~Vl-NMd5<^7T7}{5Xl@Gb<}=c6f$k5ZXX!1ECFsHW1oCXak`Qgf^^V>=k;=8o7gaL}Ojef#xW*Q-~r*;%1I z?9=|xuYdn_(O7JU->K|jgt3RdY!AIdd)UXG_ZoW2Da!Yi{wW4<9PqOR#<}rf;K211 zH{xNO-hFYpEo04dI!=!1e3JfV_vzE8>Xc!_0`(na2aNC6uiyH%v?=8M{B4KlcJ}XK z!-lJQo#%G;VVtK>S?l%RKh*yoJ{R<*b$vP?Zk6uM9Fd)!9S?o@^Y`JljB!p*PW$WM ztOI(}{Lz-Sg}k4??F=3~B<=RJjSl<@g40%8Q*wK{#^EE+>{om++0A2rwI{f@~ z*p@M7{qy{u^#451Ja7tM6Q-FPg60gy)1G0d|2;hZv+WERFks#A++2^|q1V>>KJ$my zeyP5nmzPIx13QheSj+=$Jo11|(c9&AK1dGe7B5-S$nC0%U+#em%gQ`?l&>^&fK``! z`7T>orT8Gfsro@@!>0J`@}NBMfOb8|qZ|-;z#x23In%R`;p8!99Men4X}^={f=v}q+hXlw|%z$0%%$dWK!T9(=ELZ0;v-7{n!oPPDAj3H#$IGLAe$OEs0 zptEIie)^0VN&O3*vMnsSxV-U_Eyg?2b>mp)<5inX)2d5ZyY^(bcSCW&=!<6 z)oxi19>_o$An<@T9(jg#TH?SjVGup=pp|ksE%guomo&_WJVWFm4|z#rr)^r~r9AM+ zGR94uG%3dZf9cAVTBk<0m#nx{>3`|6O6A{|Uba%%!3u(xEWfmo^RNLK3ph>lMm@<^ z`j_pObptPPXrqLZ&JWKxNdtL+Hjl)E4>TwPv}N0L$lG+__w#?yf=0?fn#({ZaejD| zH$@L#oBp)Z@}2UEipEP;kdG@r)_%@j@^Rt!Yy%u07|)RNOj|H}cHFK9 zdGs65#@l&GhcrXbNobcN&onZPd~&!m4H#}Vf#{*(TbzO7@vjPu%F^!$%GUF^ ze?G1CFHFYz%db#+=j%V#H*~A*AT_UTfo!BI-gw3tXJoKkdCGP$zNtKDBps)b_bUgE zp*+C{UOO-O{K_CpmO+-}wdpu-`@iIqyujNKG!pNZ1|373OovmJ`{8Dtdv4Xd64Jk! z1EBB4OO`6#L%+aFsO&?qiGZTQ+!t%57P8 z9(<4^%WeO+X=Gc#CvlK1%lu@34rRzoJ}FnG&pdNV)%*nu8<+DM(D;7E(xr`jUBJ55 zI@U1(bAgKeM(?nPCB#GVBm;G$EwV1VJ(31|ppki7hRipIuDLW)F4`d>%58a^M;V}> z|8tq7McPju${^2%CF7UdFer;!J(lq<`Cx7!9j8-flnsGRY(|APmRY3wv`kQ-DE zJVTpSmid+2^s~;<`+&-q$p%>ep1I$w15$9tUf2$b=FW}Va?uXp83GpsLCfVxO9;Hp z580pv9rChVmO+lBlWCh4Wi}t^fVcf$){iuJWFGuBlr)^i2|B-Wlrcm(AaI8Cr3=^7BarC6Ty zfA(=>2RiQ4oM3FgjR%yUG-(ov^7c>GDbr|^AHBqZ2lRFxc<^w!O#9J;$EF2dLZm?p zDDl7nqO7I<&wMyp7UTg!uB5SXvaBf?kjwDYQ%_apyobz&2oP zgL&vWGG1JKLDlTS!m61wXU4{lAMc!Y+G!5m3sBdYXb+%lJ8%;El>;Z~IBnyR_k+Os z$>1_sj_5oR^JpZfMZsvU* z=k?mq)jyZ9{teCA+iq{XmCxI6Z(MuZZH>3ASxe`d#v5k{NI)ZUdTi~2ueE00uJr5 zp&uRZ1Cegj9spm*scQk!tMYwI&#Z66eLWxO^#JQ1C)Du1`WfYGl+-r=bm?7mDc|< zSNE_11rh7joUhk}D8J^~>y*w}@A}j>kjy9N1-jo9m+i3I9aJXqNK0PE`Q_zUfX|Os z;+mq9w5Ss}nYaBPa%G!959lWcI0+%k4?@08Z`T1{#$PaRUKQ(eX=P>dK9KTp9p9mA zhKT=||F5}jmGS#K8aW0efBx-`l`gY_TBb-o9<$Y=Lx-H9=uvVO;jfPTPG!x!q>a1(l<3D7T?qj(ku(vRumYOM|v4 z{|6l)%StDY>EsD|8-m797HB2S%(Ks~T2x-HbY4lir#afa##cVhae(K3K&%54?h5Vm zq;uu_YzLecHh?){?X9;pPM$p3eKv^OAloS01UzVh^1%B+;G_)3*?5%8`u)T^#KQZI!T&k-tN3rP^EeN`mubR5=gJP?|GW-B+Qfrf zRaHOMY1fKHxwH`N*Rj^fm;Y#M?M218G3p|AA+S z6S8Gqrny|^k!C1)kq&~O2S4bP{^=PY75~Nh&(=Av`C$`oEMWgPI(MO&0}u~5KJaR#|i#)Jdy@{ptt=WcnOh~^-Gz+OC0kA@yRlz0U=A~S^s>$ z7y4(vPR{?<9x&E`MC0fG$_|XLBNku{!1)CW7sgSyglLxynFctU9(aZ_E$NU(Ipl!{ zcsuXMCwXPLlp*nc{x9nRpX8C{!23baaT(+QN_v}4(jc9mpRe_A=708e)<5FEf~0Tc zmEMgVAQrIR-Td8BPxILNUfXl=ZoeB1va+m;cO2feHd zX}b)0DGRh{8=$0}Fkynj&-3#7A9~gPpY(C8|6l_O8vo}wp!83=UblXO()k?*Vjalk zYi_+&UHhX=vJHN1wsDdVWl{$EX44^WL-5*o&I2dwvD19KEz+PvJ{><~ z1<}&8o>kww`szl04_Lkb$@9AK@f4j)J0M!6f8+OexR7H$$AjdWU~xr-(m&dccJclr z+Ga!aOF~Hl8ITDm@t_9|vOo(c%Yl=S(>OsZ%Wb)~|AWU5f>%N*+b?a)k!`cfAQy6E zp7!L(|F2T9WtJO*<>b`H2%JMrY1EyQ*MzVO8OrIaPCt=2lIeHci^jGGA1C;!r0|X62q){gMP;UFbO$$0dURj2^ zY#i|5mwBYYBlEHyjHhQm;tLj*)v51*u>aFqQ0qIn=LZ|GA;$pr|7+>_A3pgxplhzX zuJPO7`A*}C%SgAZOLIzHYn;|S>sZkOx;z@sa}vb{&%Tk}2lNkPfpXb@q(Otc4Z$lR zc!D6y06pY!-p~I*3t5uh#z|VFLGPCb4sEfaESGh0tSw(m-+!QQH>vf$YXkJ&2ff!X zPku*)zxBeW(xcLw_E`@Oc+i1|@HW5e_e{%t;3df4BBJ+5GVHz}k3KO(I$fDf16n}H zk&w%9f*<9;gCEe(|3NExk%nCG`{iv~7Ukrq<_{m>lHduI)y&S zr-6rGyEfqJjs2EwL+cTKpQJbCpck@T8p3It(2$-Pqh_XGi=)3x2UA6b zdWi!ML!6*Ro}umkkRfR}E%A^eaiEbn&_NdRpph_L8T0eA->iSW?q5dFez>t4I)d*4 zDxI+&wLQ2o9OX*?NgHy@U3r?<_I1{|8w*7G-1E+lqd({`An-QyD+djiA#Fp+C(AgE zyiJ2LS#JA3>hz<9JU}T&(gP0&nczcSmIG(g$o#BXvy}e%*>8UKbNQwE8*i>12z|=f z?8X9R4<>dSTGyA2O{h3x(kugc#EB&2*kMj3_cHg|0sWHDFD?7bAaLO4ygVfyX@>HI3_z4Yj-3bHS<|OiVg1K3fWHOe>VS2@dJsB>-n9-* zJcrH{6#i}I0WHtSfjmIs@%X-#r)z~edT!9|tLzWbfPQ^MKS2WsT80vbG@vYJoXkUp zO&jF@;0GU|%`fwyVF-Sd1A+$Sp!F*U4v?<9W4Qif{qwhgQguu|OW%pqc98U6Wdo!~ z&?`MFThVr*ZG`>V*oi3vA8gB|Q{~eCb)8EqFZqn_Rm9Lw3DFN5hdjywfoEvrkO!1B zzyYF6$^(vR{QRHspt1RYmozdBdOw^WFX#cmXXnp4>nyeYXT2-^({&*0QR>u9vwoxw z4V{b+@O4+mM5A%q&ruGj=6oYFh0e7Hx)z{zO`SST*#P>&5NV8ogfi_%XOD%<2g#N) zB|Y%W=jZ=Yo@|ShVdMSskOPQ%CA4Ki4j^bbuhxI&JD{w8z7BvMT)(vR?CO^E1KW_a zY!Aq5X!6iApt21e8}!;QX4g{7@qQutBB4y9kANt{*w~QEB@ObxNr<#9 zL)PWz|DgAiEpd=9p-f9TvQ9~Zv`s7XOmlugftvsMn@>FEeE%OhV>?iBANm(i$8_k+ zirK7Jr8gZ%Tzg=g(Wk1z(0Fw1(m;mhNydqljTc@t-?ahRPfq)t=rhI&Q1XHX{Kx}J zyq&gbZ2#wS@GzA0vJ7||N?w@;osE-qfQF&OBR!A4_0H=*K3NYO16ViO29mKG@mlL0 z<)j<2#siO+pJ}{ulDbUVgQ6kb>o~ylCywNGs;Y^tWG@ptEN?tP0YXY_b?k~o`PGcc!Z-BVZZd-HRC@hiS%Y=EG#19c5ZKIQd&uix`KBOI$4 z@}4pOUI?eblY}A`K&MJ?$vH&n-r#f$V4czloSRNwKSKY2pr^Q2=httHfh^-R@)80s zq2!me7*jyWWBb1>gADLNKA@xxqLFye0|)tjc)s4({!jWh_xE)i&^Ex=f4ml8eU_2$ z^6x<`t6WYxUaa)2o)a?9fABqEob1c;WSuDg7I@f&>-SQ}tY>ghQDrr*9e8 z(-^4x#c~WVE)0>DV*?x@%KV^BgFGPf1o=PHfX;??U7(eaX^=-6FdZJUnTCJ&hu`;h zpYx{}pziy!El@h>IWUi{@H0SoPKeTcU)c3yTUXGl1+{I6m@mp8^sb?{0q8!dGxlB9tI;h%F7wkj@Ul#&jsLszKV+HsAZ!eCKtVz3 zZ_mgvK>y`f1&urKL9{`5)MxuY=w%yF2Y66s=RpSuI^-FG2WgZ^Jjz`CQ=Dg?zMO1; zPmh07o^|f(opmnkgMDAw0L6b_-6{Q$&Im%E43TEraMPeA9CQhYxbM=c7@_52E@8N^ zY*9VGUm(W@X^a6N#s=d7DCvQdkkdh@Et~VU|4aFx2ZUVYB}ADGnTBzomF2Qb;yI1) z{anKOhwg=sd+oqH_h(%rFb(UU$6o7({ZpTucX6)%jlPwx;oAnf`ZvCHo^_;rpy(PUB>MH#ijw%vuljq4m!?*Lw8&DC30A{qzn!E4$J3%7$#(z`U-To-K`I z?9gACN7{ydv~rwK-dxD?O zUfF>5eVsRPz?uX2TQE}ZZklw)X}Le3%2<~;;mgua7zceTn6xh)U$m`ho8!Ie@M!#4q$hD&MY3N-+<`cSCwqa!P9wqcW~{@#PsyS)DM z#(v@V(7Dky;(@k@OIoBE2Km3F;k2v|Wxz=&(?NXT2V@?c;8FUg^*`o* z_&)L;otwFyac<1VI>5#8e4tOJqu&#aqkeu~kFPUS9C!6;)^wDI-nIX0Jkq%CM;u`p z*yBZC&^JKfQ9trrjx-=}$ooOY$G1Lz<32|4b=E&v%#~8`-bZNT|@H4diA7xS=a18Bqx;)zJ2O%H)$b+`9 zaE`kF=jxneJDqkOI>jCk=UtmIzOQhM7kT;}D5ZbY%kAK`8qEuJtW)^6*B&^|%M-R? zAlV1@cv+r(qAouu#{p@{AH)M1ln3Sg@P7W!IHqODG8rNd2s|M0fGx#?&xXAJ!}YU1 z8M5wGp7bd3tXJPW@CI^hU^@1HhN#bO?|HOW$K|YRhHMKmpMod7b2-O-hPFK90fXuV z-iASZP2o|V4od&ulhP-heDaQ=Lx=8&<>l!!W+3u_j7J$Dmr*)u@(Oa=;G(hEj(+|6 ztxwnA?Cd`A+z}&oj2Ic+G1592H)7;SRhCST+|j>(|FkmG)fbj!&6Z;@V8DR-6#W~0 zDw{xBLQdPKu@l$;>z>cPP3WK7^7XHOJ$~}ZL+hoE*%q|!rT(KkhUbphaolmodHNvx z6Q;fTZE8GDIN^l&$wB@P9osR0@X#~c2&Zwv_hBC=o_ON=rrN;eJ$v??J$T5FIzJoG zw!rof-O=Y8-?+Rv@x2`&KKuCNPng}SSFhQ}(aAc(*_!d^H38d?^!r>L z_X}GiFXU<32KKZu;yHfEkdxf`AdLHapAOqbevt==Ir-r zmE&~Fa2)z`va$x8)XnL^Np&P1oAUD=R37Pi#X}1IAf4FDxwSzo2wsaYgasioQeo4epoIe_r8&;>GJ?|d!SUl06K9%g>x>CAN*7KjT-X#{y7F&Rp&Q835mMRg z_Xa+w;@k6uI^G4qjz&)PGh-iS`uwZbDEj=n@BXRE8#r_3nqR1Vhwmx6EaKxpse+}E z(HfBd)ER0VBiXYQM7}!V#cwK@sLE|vQvcrvxLr6lT|41T&X38PmN%IOD`NWnX@H($ z@8>G|c-J!&gdEHd$WJdVUY0e!@RH(kU|I&NAAR^YvYpN4#(d>CM>+8>nVDMu9mx)~ z=3ozzy3^J8*mA2&ZdG`|)hqS*&;5FhWQFH(&Z0u}?+P*q zZd2rgjml24;}81woB1L{2l)?B8hxRpGh-^v5nxtSm#sPgnZjiq6A8lWKq1{dC3+;0CW%T3f>u=g`BLRLk zV=4u~vLzMHyw>T8$EhXy+ExDzwN6JI0ZjZx$5TLzKj6k|8WrErr>3Wk7tj~v2I&iN zxV`)f?QTk6XcxD$ggS?QU1t1psOcyAJ!eVjd~&6Ji;L$M7gZF@DXTUr+SMNQA4ozs?lj|n z?R`oQ-2XV?VHXEbTF%#$RR_;q%N9&pR9s$IQC2>=yo^#6rNxU)af?C1*a08}pl-Aa z<>}frecad?gT@q0npV(y??C-cL9`2YoUUE%IbPLo8NC^ZcG}|wx^(UOBE}1LpRQf) zIbQk3&j5qQ3+3tB^+k*q{4`y=+H<@jCN2O5jTg$(wQF~dm%H9E>l=5ybI8xs{Dtck z^apUp)Cs&_$BWZeA1zt$ppuALp8~E<==BaD=+Z&>JRs9@T;l5q$PHTWR=*#HQ?*ELbQ)myhxSSQ%+9hgh^tExV-ai0rcv|ZV&~9hCJgq_0G6`|1nrZc1Nhm#Z(MA6H+88hsf(qF;bBrcNy?FI}Xr{#tYG$8uVuuY98~ zz#h+NeF36<&4K#~BIpZpgY=burde0D)Ac&q-ITu2E>~YhKd!zGGx{=m6kStE*4L8x zyI)_`YqWp4@F}gYY6IvN;u_NYIT>Q5Z-n6CdW ztA0}->W4j{UF}gnUmsWh;aX*{)l-e$&G@4})UO7e{$-nXwY~msN@Vu_*Qxpwe@pg1 zP9@Mwx^;JZUJoStXgvU`#?e2lIoU3_T_{i2uHAV(;I_-yQMz`u=XmAcoiO*;Gz=Oq z(4}kF7cpM2`*iJU*YWyL`&qt$f#YS$)3xi17%%u~x^}hacqI~f>UtJ1XuMFKu3Zx+ zjTyUpcFV;5KC_;2*Effo^^IBgpg({!rcNuatXNWBoHe%j* zfJ2|v>l;AOrGq+>J8HijbR3s>y#cxQdINNcneDf}$s(a>cT?*Pw98$O8vQ_DXkWzW z5qZEFQ_q^7HFmDP-PekHeJrOn`r3GvzCR0?_@&ktAle65S+CbEo9@u}kr#XV4 zY|#4KI`;6S}hBJJ%aiM?22W9%RSnxz^uO!_j8+ z!4FOyJ+-KKVX;$DIIq~D8Pt!aDV$$C&VNm>+ic#fgx((jKJvmWeI1kWuDYHBzGW~T zO;4XJ$CxlgTJlD|y-2OkBRM};^E=9(dHU%Q&pbVTM4xjHR_CBWgGO?G?V7JCcu0pV zXV$@TX9=8MIFTL<_F`I=JGFHFg3_Xv@uX5G#{*@Hr<^tl>Gp*6BrLvJJ}2m{yOECl zn^EDjq%77~Upe_wey%xnsgfOqZn-Q@n-xPd9VbRg2&9ex zt&gHO^*kwQ;v+GYcXsf^vz}XdPGYB*s;^cj+Lw;t=C-w5s=(h*IoU? zg+_qJLv%O-UxE?n;B@F_u4MUI%E{<}u&O#AGeeO0y}lkVdBJ;K&R0XJ2d;loA-{P< zv3a!SiAVpLIi!xy56#)*jNhc(zfYC_Wx?QD(T1u0A9Ek$;?WE4x|hZ_9!>5fKnJNj zHb&`RAX}OjtSQMzmy!B8$)%5OO#dERTwND;G-g!>I6Jnt>Zh&fq| zp=awOHMZVCE)|SZx27d*$Lj5$-pnyC2h}$QBSZnEM+guXxu} z+)X~vF3_P}Ha%bY7F|*_zrAjyCEn2ONo@DFi^8xv&@Rxq?RwKo&vWzK;-#fUZMs`w zDs2WpyGl$u&@S`??bYpCSXR2YwQu65Zw$+q2ik>ppk1Irdzo*^;^Kn2#oV?wy)FXL z9vIXv*puBZ*d5!~Ma9JnE6U2|FD|%X4!!zT!4KQF`h`4Ct5P#OUfpQ_6Zg*&M8a*) zA3Q*OM*a1&dDZJ(UbPdcuZNYYj2`@(3j7G_tGx_4+w+ zfOj3;+WtpAUaX(TT-;09Cw3wsulhi5J#B&^iiIdamTlV(=ATp zkuqGo@6e0Rr+;|~uXU)s^jz29zM;~3T|o$+qo=~1Gsda!I>x6s1@*MLCP_gHME)pU zA7lb*k_^>yb1|dVJW1Aj3UA}~vU;4?4j#v8wfob8->^?R7IZ*(O}_Q!q`C+Cp%=Qy!EB~bl~#psD^kx$wu>ifLxGyA#FK9hQo zx|8W71yZn2j9+u?lWh`q#c63<5o33e?q?~xi`=$SKL@z{r#gNvGH|tloj3kO#nXu< zu6}a2&i`54Z)Bz6&#cgLjxut0n)1&KTx$3qG;w;S$2}-g_;Ti@56E=t zXuuyZe$DX*3W*Nvg#AIS7mWQx{$cEStF}AnAJ<>de@pKlc2U+Ayk0DE_W@G-_~pY$ zoy&CUNU(mU5gOyi`e)bWgRYR=KXa2xQSia-X zbInoUN9;c%3VJSw9M}S`!CPw!P2Ee*5AP+jO3WekFViSbLe@`j%3}Q37H}O29a6EY zb3ff;-vhekxdlfut!)OjBVm)*g|GfHd`R+9~N#e-w(#~ z$++(4{XOg*0LtrpEehAF{MEla;jfx-u^*TavHX`L{9L&<;G^p@s13S zo8RfB;vDOTulq56&AIMpdW=(Z=`kM7rANP;L(h9sct3>cQ|-y|>`B4SxbG37$1~|G zC@%O}SzCXjM?J_vZJarMKlKd8(3u)WKAx-Y2?1Yi@POH8Yr4iNw@=iMY#E zM0iurjWGVt*@wrfU)J=1pts>iL-e~CJU;nUi1t;Q@!4ql0lt@wiJEo$4(N94bx{Rj~CAa<}_#|eq@bnR--XS5qky8wgQh4P?waX-F@ zXO0nJmeQiGfx)1-xSql$5 z3fMw6FL}OM>i~L7lew&9vPCH#cV4?d{@{S|!MKm---;s|*u#>j=l=jc=SWjo&e8 zR9-p#WFdXT)M?f4-$ACW+idF{AkeMCsI7+L7psK%a_?FENUD)%uhZ$R9prLpAQCVYS702v{6qmF98;+Aj5uh8z z0{Q;FL%-Qdfr!HROY|?pp-(grj5(bMY4;O(KxS+E5gB!X=Q^P65_hiz#I=S?&NJ_b zwNL##U&Kii;-p-2${Or*7TAFT6DNgh=;_mZY)nk*M9 z=*T~x(9iaMSfjpO8fj)bg6m+v*GKUIkBsQt?LCS;hy}?qrl|P1D*EBqRt`7h26$-@ zt0YaA&#Iy;j`_^xqx5FRfu`?;(?>W9e#=>|IG_%kk|aOwZCd|u2&jJ%=5xSm)V-pU!e<(jEv zd%I#R;ot8LKBe(j(`p(TKT!FZkN)nI%HL+w-yhcb#rL;7{U4oQv;6DB^ZtHJ?a;sL{N3Ly8b0}&Gismwlg`KH-86h; zmld^Huj%}LYc~(S_|uzfXZ}X#pXv4P@VA%TUt6}z#?&H+PmpMG#xZGNTBPpiw%J%3axz%`GcOGm)pJM zpt_xTI=`&(;@llKbgx@=lFrxXROUX}?JIQ~`|JD>dCPO3diyJNGyCd%WK(7C>s0YVeX>Uk-DQy{lEG8wA`%08Fk+`?VCG$OzxORch$yB z`^WxrVD2%OzFwP!{{8*f-0KJbs@5_6UvW*>+zl)4uia$E=Lg^V$MC;(_(APtGk%p5 zo*CZjkQKE@VSLN(8UEi-A#{(RVqBa`-V*fHk~`{%Ps`}v^H?@k$gbJD&L4`6Sz`u^^* z5u*HqW6yj16T!dczMnrX<-d6KCy&1`>R<42pUwM=_7$FR?&iZq`xo4J)n?hh@0Z=P zS@!>+iO+17;}iS#KQ@0L#_yGDy4L(qjPFx_KepyZG5!z#a$rrC(9dhL$JCrE^p~GK zt){2Y@0)81Ys!WG|2<`XjkJ%ux>wZX3j4WfQ)P{`ue|-0=I(nAtlMSmyZ-rtnr;8;T$gL??^{Prt*N~HliE$j{t90jQ?uc` zKh>5P`+Mm8AvMQ2zpd?I>~H%4$Jd

*3m)eyHt#RNupD%6@T6?av?8`6*pH);zm< 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

67AkQ%_iroaX5&gtE0f0Z|9H0eEDWy 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 z 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

eC$p}G{yp<|`ps87C-j@IDStrZ_Im|S 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

vB%46 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 MfKPFMx44J@|0R^pMgRZ+ literal 0 HcmV?d00001 diff --git a/mods/ITEMS/mcl_armor/models/mcl_armor_character_female.blend b/mods/ITEMS/mcl_armor/models/mcl_armor_character_female.blend new file mode 100644 index 0000000000000000000000000000000000000000..b0494efbff8f5d46bf13b3f4765abd55cb15c200 GIT binary patch literal 1242244 zcmeEP31AdO*6t)6t%4k)BBBg}8ayD}2q7~$kU>EZ5YbgbNCpxN2_^voC>aHGycI8S zJy2JdRo9bMl#pA4@71e! z)zMYe8575yl{Ieasf&i3He@Q@x;0JPebA(T|5`yebS20@o6$kjrsaByJSyIhVEVXe z({;k=e&@<1GY$B?gp7Z5&5HlxJc#Q+TnFMh5Z8gY4#agJt^;u$i0eRH2jV&q*Ma8L zfn)phxiih_dOywS+&N}U>Z_*?9Q06gmLD&xW%b?Bx9`2K^z>c$jUF?mCN7hfl}U5* zKY74_KSTB$rjAW}vpLI;m({YmHYg>f+9-c&3w9Kw8Y}gw{`8!?d zAL_cE*Iebt%V{}1OGrqVHDct*e;DP@_nkX;o)?!(%gLp=cz?(ths+x}YSb>5E71RA z`FHQ$y`;Hlh?moHde*I5w{n)h)8+E_|5^TrA92L8xLjIJF3rXJBaS%YN|rzM`GVws z)KN#RY%Ut&<+Plhk(_Ul@^=Qw|LESmuQ$r2ckkYJ(Y(ML)K}bi$|HdG7v;I} z$Rm%e=-RE@B^^3+$m70*5hi}$a&nE7_cZr+FUx;yT3V3&k3II-+l)8{4jS|rw-L5K z@*k;V$G$V_w9{T5GIZ!O0|pFuuuq>pcXjE~j4`WOAERRzM4&2D{C)*9O|C3HW+5ZlJ#)8G<`#)-s{OR37 zT<)*g`3srJ4JI8#eqI$cx?&Jl0V8a~}YB;$dvbzkU1mxuZsn`bfxsOtAbZt(xVPn3$L|Z20iE zvA)pWW<{rX!We-4fPKYAY|-T@!kv*-1Vk$)dY-2ca_&XR0}{j=;tBErj8 ztdQXqGNf_fW&C{6;&PF`+n95U#{dYb%5Rp&7(G91D&MK;|Cz#7Q zdv-PCU%qr{ko+f4Is2;9$B(~eeo=89{}w6vN2&vJ3ksg#I@4N$A(t($`1gucSJv^5 zb%5p`dxIZsDU3DyKmT{Xdld3tyktp`{HLFD&b96d6Ry9wu&Az>+5mpevd7QZ4p`mK z&dYm{)(fUC_j>;W*&{41Tlf;aTN1vZEyIux5E%#pmW1JlY0zV3xrLv}pgI)^#j~{L2{2K>o%y-+1r6{EE6OR!X~v>=8y{`^dvOKr3WS*fPF_A@;qT{o*#-O z`xoy3OGW|AGrIx(D)a3LS{F4`9sK+UAF1&Hi)5JHS$E|4Zt44S-Sp zvvc$Q)F}BkL0^D%p|#8p#iISocYspn)-XR5YxXbS0ZRGv8UP`GgANG!$A}MLU%~T3-44*TBe7`zv__ZS0ZRGv z8h|TSu2Mhg2UcC>lRhAZbb!vMn0TPh5yzVS4-)SHrTlpfKtTSi2P^A%&2KE}0L@8U zN9R(I_?v&vL}Sa0Mf;cU088l|U};?mtpPC0pXUUm{FNUtj0KvzA3*ETZlyU(7Jjqu zmuadpW6l0)jR(C0l=8oX)&K;{f0fu56p(+*>A*#^X07Siv13wG$)P3i#G?JncYq{+ zl0EMQ;dehq9pHDuA@Xler7kblMHmq#xD->@BMrLvEi{lCyh4#hh_)&BE%FEaaY z0v}*{KLj7p8f6cD$D;k`n^BT{3S8rm16e*V3!rLPBjH;1uk|I?;VzmwPhv;8l<^wJRdUn%-~ zuy?Dlq3;L-K44bP?B5^MO2&9*nIj&H{ePy7-vL7YOLz@{!T+=Uv;4#B0Li}*KH$QO zvTyIG>j(7Q4rE+k7>oAL?*OIzOT|84qx^aPr+)c2ye~NOyz_22(C2jPlR2Kps{PYG zeGlZ%YXDXl?4NZ3@^5M%Fm>AWD-P6mIgn|zVJzA|oyjsy$e;QEyas^fZ`1*!{Oi>L zdOt+Cw$d7sZ^OJF`jys}FOHUX2YUWkwf~c7A0V&u=P>}U0f79W11v|Q4%9au$S){( zFf%jje1iYMVl42>nG+`#ALz1dDE+Z$|NIV+<Tzdj!@W9H23m_Osj zkDo>DhhGP1e&;9ZYtC&b?+$dhShauJ26!~fo_~A}fKmQ@&+9-Um%p!$&W&3LS)Fm_ zne$i&s2{nH($7J9TMc8;{`nmswb{Q29UwozeLkZO@H^oveR2$F)C0SAVD#uQ7Z~Mx z&Wv-fcco`cHKw)2`&hOA_8mGT(Yya|*!H;}DCEB?paW9=S4Zpv1`ipMVU%xMJ?qQJ z1Kh`={WEPe@4iRMU!DUa-o+?Cz}UHczCe0WJY zpZ!a1KDYb){@*PBp!Of_fO;p0@u0CC;CF`n<91|hnzJk}|9~%uwf3LRTw4hFvktJ# z_&iUe{qwg$_{VF5mR-8Mj{U?E`VIvD_@2)V;4}YOZ&-(n@~3YJE{V%OcI|(}$dTpc z^bH4=J$^!lEXSZ9*)**U7C&X*kaM^&b!=Ljo$I&K`&hGo`bN{T$mGxZ5WNo2cZ7oG z0iA1t;jc$dd8al(>s}!k;^}N9T+%pP--N6 zX$yH`(f%h+oOF|w{Ox^!K?fq}2b_HJ$-~=%Y$L5>tl2-E|8rM^<Tk?D#*_{`vbafp>w%exUtWz}g4UccT6mmw&MDi#7YFb)UiQKdtrR_1FJ4-K!7>7)bvoYs;2z+p?* zFUHEBMLda_-{8T6UrbFMyNmYcSp3o{tpPt5!O)M^{=6Scb&b;!s(18_$LD`5`KQI@ zA2W7tr~60u?tQzp?Xy2_5%v{6D*L6X49?SasNkI0{Y zK>mE^*tE2_$X~oZdd!%bQKy}@ZTN_ho9LUZPt&)gA59)G;1Bdo*>w(w3KwJmnIuO@^xDLd1Ag%*(9f<2dTnFMh5Z8gY4#agJt^;u$ zi0eRH2jV&q*MYbW#C0I9192UQ>p)xw;yMu5fw&IDbs(+-aUF>3KwJmnIuO@^xDLd1 zAg%*(9f<2dTn7$Z9T-1xa>kT)nzs9(N&o(}Leu)t_Fvus>~IVo-bFi3YzC&N<{o$P ziFguKuuTAv-0&MU)1NZ(rPNN?`^D@j>{E*fX zHbpL3JNUhRshYMli_6bSpPoL2Zs6aJxAW6iyuFeAjP711LevudL&RqkcosV*<}C4) zASJr6=OGi8a5sH>gx%2iwr!tw`YdHH|;pYYfDJ-P`x5CRTi@`8QB4{>Tq__!-~@JmhPJM}ENLIq(9`ivEq1 z8UC!dl0WzSAe^mItHbi)&HN})OJa7lJ6QWq`(ENlhldfr>@LO& z9-H$p2JSIawfwy2Jo+Cb@AVf?61IiV3?FU0_Cwi5t^Y`d^}(+n{-I?XSRWkZ201}) z&=ts2;PJkcDe)<}dH)(5ucxqEnR#>xxoIzD2)X$~*{9;?0lD3l&`aZ=z1;poGBer+ z!y7M#W~uep+9^!(sb6kSD7mT72-}eR+WkYH6Mc>+--t*aHI0-TOd}ETx_r0wxBIR+oB%(+Z?n>XdCU? zI);OM52O1dj$r>L`#+*>S*QG)YFjpbBij~)zI#;LqC(J7Ux+%RZP68ev@Jb|EBxaN zJ_==-bv>vo?-@$B*QLvJ=sMy-xkDmGUPv8ZlkN{~biIe-Sh%(&2(PJB<~L?zzM0d;Ou{=Tdqc-JXJPf+PKgiSlH%U+Q^2{ur zzo59Zpsb*1t~M|wWpH%#BRA+loWrA{kY|k=*CW)GJP{i4)_1QPGC-cdYbQ_NFLUMm zLlempbk`?O&;|ba<*DX7qL(L4Ditp*)8;l@mdrlTV_>D$D~vp+-1)!?_NTb=l{^vd zJVDwgLgYi}yKaZzzwc@pBHbK9p1^A-PrR3HD*FW8^~n=-fqzWzda4BKw_e$I&9%Yx zoV~E1kW6r3si)ABTb4b$xZGUxdg6_RCyCRzPD}p3uSC0u(m+4x1^v3BAN7g_`gy9T zW|KAjpcnMJuaW#my%hb~vr871<`2v&$yp2zG*_6Q8T}SY1^+=W=!c!4Ua`P`rrG_v zHUB{`=tuofuUMeJGZCf#et_r~`4-CenaqDLrNb@`p?lai-TE)?LoA*@d4Z=Sr>wYS zN=Y%@l@)kO{TZUXseMlJ5h1`)Ht53haCFU>Fz(!;S=p1PXE)fpp!j-2&;>gTM^{tw zEB_tIFN7e}%r86-M^{Vm3w9HZuBPNy&EF)y5Zdtz&%@Ex68wUlhNG(~`L%xHbHXnm zwBr|^hoh@G`Gx+Z{zgN`2a|Yx84nH`b-@meNRAHEpETyvzU)ZXwF~b zlkK~EWuTu08W1uJ`zs#r0k2(uvgX&O9Up-1`udZg3p6vm+@D1K(4HFW$@Pkb_LS*x zZ@2CbfL_qgdHF)UVu60{5122sZ>U!|J8w$=lkYlMzW-Js=rZbsmlBaL99=Epe`;Q9 zsQ;Nti&s4*?0_0Gqy?YAHx7G8;eXtPnZo}gtXU@g4?-i}`tEt0f(!l!cVmU$3!8|^-7)yYv)UOA~fQy z@BSb|2FMe5?c`ZAzG>wNy6clC=mP&BPxoINF3*L9zl}VPjY6KuFW)Wf6JdFolqW)i zh{UaLh3psT6@mT%P0ff4Ax9uj;I)&ddvLK>zuQ#y3A*c(C+LDanO-s9r0R$E)mTri zmug>QcD@7jf_|o%FUT!c`v4<_Ehtdw5Rop<$IR= za%oQpffJ#7xwIqS{%eBff%&;wS|YN-o`4_rgmQpSpWSr!#Ql5VM|mg*bhv*G>fbkb z@|^3JOvu5f`s^3wLte07@Duu9vn1fBnD$uEf2N~mwCtDiJzt<7^n!k0nWP`}YBc?_ zxJLX<(6}GwzTJ9!0(wEezChBCdc^|$V!r;Z--~s(U|x?$;$4-(bbgvsy$r#d4zWS!t-!+wFJN5 zXTs6dl>AE0lKetw$1gk&M^{Vm3w|veT}{a^_w01JFHnVc{6fBPbe%OhYh3fZ?b0;# z_iJ8mXn%jYr@U-oiN`S|r=Y0e>xkgz!8Z;aQS|q9wO#|^n&q;;kI;zM?q0Ttv^d<5 zf&Dx8zk%1>|3+5*)g5B3cT z>Cmfi?PgQ9=gI$*d_)L-8SRqk!t-!+wMhR*>2Wx^nv!3&S4q1;XvZ%+4@cKIGfcgo zhA%?`8MYz&CoesP-Grm7DfzX2p44-MAkeH|cpi?fme4QQX*jx?l3%{rl3xhz_=V@; z=xR=WO{3j#<+QmC`{&;x!XabSAzU~ub6T#a$fK3z%=Kv0!w#1>+_R7}y_$9$^~c;t zo)F}3fn(pp4~NWy^E3U|^Tc~1-&IS*`+Ve&F64cE;jX}Q(9I$4jgb21Jp~>5;c`C+ zp1uCsYvLS+0T*-`%fF#RhoD`~pm2Uc zZgeoAxdZ&bv(l;KGjQLO;TA&X-DEtkCb;Z6x(<$@KBo6{aztF94I$DIayounL^(2^pwU<_p}6~s(VTNo z+582A01^-59EfwEO>v+Pz2N1u4B}Uu18tcD!Dn8X+f;9woJZ?GGbMbXUG@6g)r^Vb z&dM4$HGAB+8RN#;FjDrrY#thtTWh~-P`smIkaGMs&Ve?@fkZ8_t6?O|<0&m6QMy(G zD_rW{m%m7i&uiz(5LtLs6nepDhlYGY9{KD{3FCEs({6Y*|GrhfQ3D*B&ob%8l#9Oa3Frxq&SV0A+2^}ybMH@GOhTOUjljpvcpVZg#+`#~V zY{!$7D*7%TBj$Mm&*k0r?|N^wnukenX%5Xx^Ftbi#*6e_M&UAk zoKF3}G}d8$51v4RN(ny(A-vjG&EOqDYNx% z@+4gHx()(`ZPRS3>&~@nY3}>Av25Qi`tkZ1dqd55jN4kWo$zV6&q95wZ zu<#QSt|o(hhViHJinEY4Z3lykvmqQ58tP0i46D)->4xTg&DUAQj>3Yu`DKpWoZNhm zqoBx9mS0fnC>1Y7%$Y6YE|)w9S+>V`--q`e;ocKjqHAEH-c7z|abFj_zJROE7wAGh z&}GigWAEH0xrI&jN;Kc2`j@8nK*N!jrJ?yr=MX|KJ1hg?s&rkC6| z{6p}%mY#R3^gpY7*T}g0AsMni67P2s$f>mVzw1e$t1oohND=&``!RWTq3#Xt?-}z( za&P9p-s@yhA3aC*t4*)PH23=8@@Nd;WgKQaD7z;)X7}Z6+-r(!jgAM16K#*bo~Q)gm+S4$H;qHQPU+8O&Lpj?m-rCECLSO6 zqu*;UF5z~V=+(59|2;|E%eIOVEUvyH?RQz)mQGm~k3*7P6Mg28WJ7{GBM{*>2)Gf- zr}7+o)#(=PX#ncsoV%EA7L)dmE))1(wCh~yZ5y8&%W41U@(TSXxcHgzO1}0np?5QP zJ}AcbY;XCL0rs_x?ir6>`<<9)SU)6Jgk~FYuM0l2xjy|of~tb%obltw<@+cCe1E5V zJfm#l;<&tIn;no>ATFhEKc7+ilsxwunAe6#w6a)sr?@7KYr$x5_+_bku;pO(K>xtMi1knDO(go~qayQFf1;A^SugZA8HLlu zxzBTyU!ADpKXsJ-%QOYwU-dUnQF!;M=ZC8J+p@ja-3reZ6?Z83uT}hK70!|AT>n{A z2lT(I=$>_3pDLgG23{oSF!vvP4+h&0frPaCoQA6xJ8wp;F4zU|{8o0MPj?FXQEuA~ zjkaLC59JE%0{n}_F4#3fU;KVs>5-nH^m^b4Lf@fx`D(mZO|S;_2qj3Rxc?ZP-W|<) z$3JyJ?||pG(mUUjDW-7_C}@kJQP+(3p}c_Jfq#+c-7G@mR`Ug0=sprXs(Cm%J?hOm z#2o;2L63mvx6&j1JL~s$prdVtM%^*qhjIaW1pY;=M{2%lE1`@;k9?0tr$@)I9$_F& zx6mWt`K|OQ`JtZmye|&rVe3sX>W=X~w8qdQ@GlZQ67wNy-VySQc6~=jp?&uAA?|NZ zw%pGVT7$NbVw9orKD6#E&*_v5{;@pyy%}FLXH4JM6yMoQyJYOa{0>c9c*~l!FV5a5 z?kTF~T{MmMpE!{|_TY1!$j|dKzysUH+;c;9p}w^~z6!aQn(2*SM)@1>Lpj6p=}*bv zAL|0fIglYe_RHKXTQ@z#eC!758*qDpE`slCX`g!cy<*;s9*K+d_-Ez)^TJFgUxAQm zqqhJW@H|b3C2r)QHy=Mf>1@B}<*Hvh_vTRODCiOB1ipj>ex~wNF$_OLJ}!rwBg`ki zLibD~U(jE?%YgpkIp+!7gRam}(VfZpxsK+wYQB@@7*jrP>wlSlR=-fbuzbXrOYtv~ zwkd_s;GGqZ(fGZU|6SGyHJ8v+g@09Z1*6p1P0b~6xeI861@`KlL`uMV&{gf-quYqC zL4yVk4E)dXlwMp`9N)MV5$oca;v9%`AkKj}2jU!vb0E%vI0xb!XvG|Gq#M6!fQs@s zWDP~Ir|NOK=W&R6Z&jgZP82&#fISdqPYm2Q<_`3NKF|xCs7DDekVawy!tALH0I~pK zdU-Ardu1^G=ebPGlOQzCT}V`cd4RxIzAXx&r1e+s4cd!ior~u`Si1IC@+VD$r*`~D z5q;NP(qlhITYE}F<~6Lw{@`VB-B~_7{s;de8UJ&B@F~*#;77#yRlOt0&+~8CtH}97 z^+^kwe}kTJ-BTz(_D4NLlT23HF{8k<*g>D5ZRl!ou}G6>+<%8$cUg0GN3o8BlEkHt zTrJKC%|9kMT;ET|>ni+pa_VZQJzzPkogKXH9?#^QnT%mA^XJJ&xYn1*{RRk;KiaVT zN?9M~BhO=^e)lOpqF%uJuJ*2G{PsD{jly%|Go*0{{J;nN>wU6(l>4ssUNC;sI^p{8 z10V2jJW=u=<%ZDzuKb<@Xsr)F@BzPjjievthT!j167>GRKK#H3{QH$&q1+Js$3}-A z_<$dJjB-Qp&-yk<&+DTf_<$dLMY$pPpP#(c_qlWkp?x?@6? zV?pCSd7A(BFlpB+L^<#=tk+&jM80rzHRb-E+9Gu>qYCZlLOwgXxE?LBUj=@v)W%;= zEGY6!^EABo!|jK$&UqBa`#tcAL%scCu`Z0|=%P6M_X9R`h3>zlT?%x;&m)8$1259; z@VY+_KIcvo=c5VKL4S;R9V9%^b2{BaCxZZNBIBn{qW#vM654uQ$Y1s@D31CFLVjIj zdG)*5GC86|cj7?#Jv$ZJ0XgUacwv{vDxKxQeIJxF&W3N0$HZyGW6}la$vrlDVO18V zO`Ik)xok%J-HQurmn0sdEiM(#sH$oiB|bwd0`8~vD;Gk-y2zE&&ypI&F6U+hR{R!+{KaW6g8 zRXchgrA5Q<$r1WMN2L<&Xm}aYM)Yge%^U+bOF?A*1aF1AL zuYdUWpmW8U$OJ?Go@Mb9{epJkai$i$Tn#Fl?HfNM0;Jj7KgMbSD6722G~+!(nd8x> z#RR;Usiw;-e}X2y$K_S^q)_DHbh_t!-s&-%H$6SC?{OPAF<*u9nWhb-XLWTI?8~3# z=bE4u(l&Dg(1GzVEPPJafrXY&OcH$OAS8P1$$j$7pkmu3ZT&hM?}6u!FMIO8dK zx6>6$i+s|&f34_`Jk3}i+?Q_dk*;aOwi|w#bgzC5tsT>3`~~Cj9r2uH|ErqpFP1L9 zeJXqO+h?Af^M~Eq(aiQ~_blRcgMIp((mv}eH)7l-`|8m3Givj#<+guoh4ZAx28%Pk z0{G3kNAU+2rQE*aNohB9|GR@KoD>&u6b_-^W=>-qYl;uwKtHE;|KDg0w7=Y8z;Dh^ zaKq?V%{VyEm1Lhp^RQi)zvpTV_Gzro%D?Et79M*<^)q*z+wAtKFS54JEwO5!${zjp z`R!;i4_;q8I?*#Xd#ZTvDgQ$6q6!W6=}uSn8DaZfe>rCRVhF#Tpl$VXsSYS0UQWWshv8F#*Fe4!*q3r$2b?`77&MhkY9B^DB*k{z1Ii zeW*s;mz%l${OS$Me%jVpwNGV_e*3&&n|RNmE4!7t68e|zb0V*!kbgrnM3Q2#Pd&3m z>{Cz~qxM<7y>;2Azdi{xkMW-tvQK@!b^Ez3R_#;Squ)MfD*IG+YiDMeJVbBQOfF$I z*k?^v%h@OU_75L9Q}inX_4T)dDv9Df_71B4wTEoq=>ECN<<4;@zbfD;{VBR1%V`Yo z?%h`pd*)ByS9{MGO>G3@@;Yh$Y$)(E9)_j-qW$c(AmIHFWz=Fcl)WI`5(*i=k{2&Pi2pO`+VZRV(pr) z?AA^L=xvMa-)2uKD9g=n*i@0hK7FURtbK;o)2w?Gr!nVk5sp8}rb5P_H{9UZkhs6A znA@gt=2P?=%VSP1yK~QeJpS~LXK6Ou)$W73D#stkw+j0Vu8+$#G~H}poP*QkZ^FEr zoa=T?N!xb()v5EYs&Ibz-SL}G`No;rZs}mvjt0Z;{b9M&bN24a(VsjvmN8v?;RmTN zep=ylZ1`vl$5#)3eDgoATD|G8E^>b8hxykyM-F_h%6s{I(SDlYZyx^m*xgsH9@DLh zv`;g>V0{jzh0AOH%Zi3*(gObG-IHdyuFe0tDy8o4t_HN9UaC8ObSv&TR2S1^{2^V2 zzGJNI^Tk-TPi2pO`}~6(KkLeFgKHOvom=23%*&oo=9#ZGe7S<5{j51t*=IfF1}LcS zE>w4RT~p!2FBm#Buat2h*SHnSo!dX(RXO}NX`gHN|0DIuODdeHXG!~<`^jUQ-_BaS zDf>>@zrE}GYn(NI+F13%V;2egWcY0af4G9bgWw-0_|Xdfbb|j^=ITusD)QK4X0joi)p~_hXOiwThpqZp}MCq%XC$&zEA=K9xQC z?Q^%XPi41u8sMh)#A*V!N$k@%>9@B}d%tR}Q^vZR+rL6;KVPEuv#)ADsXg3G?ct{G zs{Q<)+Rs#KKku?>Kj#tr3k2Us!QVviyRKZlsjGtD{EuwcN7p>;+%c_|bl8eMBX!Mj zZ$(4oX~z1jdTh2UBPGps?BiUw=Cx1XQ`YwRa;(~?vPZvte!D}=KkLeF?Ih3rTb{o) z4L=7)HDzRIKlQU)-}v(m)BDdT$Ddo;x32N0p+2rHEj9l1oo+opR1>TAsqE2jpLe}0 z?NixpefHVt_bV8G&QSJQPq}vVgr?j1c1{m|#^cWqX#9EdH_pnWrC6sBoQK=byt8+w zI;kJZWl{TC$>Yxy)&AW<OH;@|Tow5C#*>dgY3#%%eTQ+|`(%EBZRX++0QW`Lwdn z6YhA+Swr@@McL;!FE4RsPk(dsJ4L6{e37Pof5DWh2Mf1tzITzd&)#P}GKUDn-ZCz``R&tZvp(U~ShY`OkAC}{SRmK;DZ7P!nnSlIC$C{IJq?%) z_UX=RIs3G3pUmwA#iLw*yVf-RG{T$L-_o-ujO%ZM*QlClG4Qb2ZmnpDJk402v6D_2 zHt?C#s!thkN%Oz|ywtk=d@Tm;lh5(UpCr#GIfKT5JQUO)O%Ut**3mu3@1vhle?=aV z7XA;fzvs=2z&C*a*AYnVzfwkRzJA&!P21;U4Bvk`?6kUA%Y77oT?b=)?9txOxBoWPDZsFGhEG=Znp+{UGCOm!3E#{i|cE zMtvpYe>^#N%#`cTta{zK5T%c>mzknw}=+%)ErUv8_K`KpY+-tW^fA1{2Y zs&b=@-!YGN$_?DFN)EBxQUcG*h zjQ2`kn)=GehgZ)$RmSy=<*6Ug^FOHPM|Uqv9eqmxzIbY3>e~kV7p%=mU9d*4?ybsy z^~C9^j$sMa*D3n)W@V*jJ-e^UrRX2`;*iv1Fa4m(f%<*bC-vrGFI8!({>!fKlzQK? z$Er3e{@lLe>oNaLyuE6Q;$Qis*T?khwydf*_*?w&m}hT0vucat|4*y08S~>0$5stf z^11W)3&!-=^~L5ICBLmd4j7|<8<6jxulafOXEOrwzx|OXMlU-$pdUSsy>Rq5Zv^z` z%K>kmmU&x1zj&_#RGS=_9;)gdG>woB3uWvH)$F=h7OBPMM*VoGds$_wL4R)D zSYBz=uZPl?RvPuMVoG`CCOx2^Uw%?jSv8}3^%|wW3vQlQ`NxMlSMO8$z2&X!%I)8E zs7_V-x1#s7%JR#9uG*;dFX!E?%KI+-cU8X9zo#!6UU{7Mx2m2>|8^d7eC5b~8>()7 zK(8ZRsM>MPk#U7O&1s#m%8 zsOP`CZ_|A%p4vQWuZ;IjxMI`5%F{Pjek0?Tf9u|K!pu7=r|*~XA1~~_>88b<$M}@L zxp>gF=Z8(3k-G60`TV0l%zS=RL2+t-<*!co;?C!`?rER;fr^{;PsR&|YuawnKX=vM zdD=CfwohG9w@bvA-9K~ms*8(LZ~9rr>rUM^I{BO#sk^_I@xB*!ALCu#c}&m$%J{Y4 zxW|k*_m0Xb|CI5YwJXMK*mU~leQ(J4)92qeW-irt_XZii|CnuKwi7@0-z4L={olu9 zT*R-Na%B9!ha{ywMf|KiUdDHx(j#>i^ZTQZ1bqdE9G^OX>{9UT4__yLSg!E@ zj{IQ(*+af6|F7f^k0N_XR`jty96|P^Df-zTb|HK7srt<(f4G9}@g`Z{OUWPJLiW1z zUow6N`NMybJ-beo{98)?@F4Ps3kqfYVDg9ekU!M!mGPg+AMPT5xZ?#GznlEwu8+Rh zoV-iMx0647>zfBR@BUK8H;_NPl>E_@A7%XaN+E=;z7a2d6{Nd2or&q2~`o#Y5 zf7IUYS8=oc%_e`??uNkg@5vtyH^ARb{_rjX{tw6>dJW|llRtdNKwmETLnHk~JR%vqkgeJH0mGw!($E#=pXyTpUw;DAN#{qf9dSkKlX?39on&aiqb#! zhv)D5xoXGtQvcZ>cKZI`RoZSDXMcF%M}MoDGD7MX`@^5k{7Y5swKC5BFsuLCs+138 zoc-b5pOja5`$>IZfB5L*uBw}|Wt{zC{-=jj`EFFt$seYSeQvX+`~&;L8{b4Q z{o%f$4_Brr|HA&zb#mfphw?w{51*eiF11$qC-#SrIp?OXQT~hl;i1na`Td)JU#1!d zVqD05LB4b~UX-!WzdSAsO^q_eFfP>RsBvLE<(f-CzuBCQzH+x4-+gM*f7Ts+^}nwA zqfFzmOz?Py_m!Ob*x=2#AHU>@f=&YmN?gHt7$)0s=@aX&ko&&g>T@Z5l7aJVd5ZH> zI<039?E8A3-iR!vy@%SZJLuDhqIX~g!ePq?x_m%bXKZXYOE}Cfxt?h50Vnsvb zX~z0|{fE!*C9c7<0^hy8Fq(-Eyb1|_0T&Q2q6Z3M+W5EZ07{N6;BQs~drzA%# z43U2$fC|lGRptqeKDR7T4xd{RiPE8Mf z1{*TlPayqI+n;wXzwpJUFWj?U^!)?yRxp95^3IsYc&}+I*Dp`&{@r56E%t9+bj*jF zKRe>%)Z6AR7v(G~SmYer{j#b#6ZVLABf)h5ec{T(v*2<;7wu34`X+2+_%GkDAh`F3UisWX^4-rZ?~WOK)H3I(lgA7AE=P9U+_P|e z+Rks6it_)Ka&7gsm*4A}=zL(Sq>~C!j<~(_4ngNaQ4NS(J3cXmO?T=0x>@f3YPu3) z3zNT{QuRI%+9}fICcM_U7@5DFQs+G1M`@&V5nq!trWA@(y*+e-VIwYMnTZaG=tMrh zaHTwF*Nob+|LLG}i_Oo?aU*{7vzCnO$tfYD%q1M&vV@<*N@lwAqvl9_%X9D4@vii(qsi=&SlJFyytx8c(iE(-pf#QdF3xCO{M$O zI1gW5d;c8`O@6!zC-4edIE^o_EK8)(y|^g!I{*8AMRmvLxs56p?c`6lyt`>AwNXQ; zt>Rq!j_5d++o&GYR&o5jlxv+&ZMiG`#Vy(C3~!Vx&M$nA^5OhKO>0kCm`48LlxM^d zGUmo#`qyo*o$?af;0ME<6WDm}1~BMXO23N`PoN9jetIbp&%@Ex+~*gH^QD!4V!A;y z-|S{ALHl9&(CI396t1J^{ggO`c%%#SCgD+MtD#j@S{B6q8{SRPSDXLb9ILD zfFI@6s`5aGe@>t=XU-VP1AdfOvryI#bTr8xU_*JpkMfdL{Xj>PoOxv^5BO1@uIdLm zn&b>0LwUfD^4yD+zNmVNGf60aV=w3@@T0t%`O+RhN0aOkC1Oz?@T0u^z0ZlWpFu~H zocU=e5BO1D@}^fr9}RT)_0zP8CtCiZe!!3N^sA)&K!;&ZU$jL8Jh$qLf{rFx(`}F+@S{910dzFU8dX)EnCn!1k^^B3$!n9E?vi6j)~lU_ z6l045y5~03JjT!|?J)YuD?uYYlPBLJsgdDxrU5dKNq&n9^+o+qUz7zt80(ur96^1f z+w2Fdq2cqU`l8>0ZxMt-G%UqGN1(pdbRVHXS&?9zoH1=-5mh=RlFVW9Se2RFgmc;a z4kQ*YU)OU&=H{Amj-X}g?AWSl@*5g~@-bHA(0B#XKj<={nx1&y?=rz<%pu2~#uPIS zer8NF-iv3|1$~e6pR;?#gioISy4~>VZ|TQRS5lnsDa}9|>HzvUr|~kE!O!f{?9z?+ z!opWG&8z6gx#$}O!wmF$DJj`Nzjxc8{z`M_e+(zcO9a_vIrxZm!udz50ZqhYEf?MRVELVk-F;MfgFNbG1^n~idUJ-)U{&UTHsGK2&aKivr#HqwhiZ!1znS9CjYGJz_`r#tZ~}sYZ7=bmr9qHe~Ny8dt&s@GEcxi^BnG?m$s!&q8~le zcGDd0tXHO2e|z?!0{&~7!|gxxQ0HGaNPoSP=5X8HnUendZ~D5pP6peI`)6igGhTlG ztiBa`AC+y8N4=E5Kg$DF>&5M$)x$4J5&oIpuT?*g z`T6F`J^jTywx_q;wN>k#w8gO}c`KK1u+6xCRt#^h!0(^cx0dgtf(`Phmkju4T71-~ z%c{(i+kk)e9og#q^H#EH+Kbef`HfeE-v}s_*}s|NoYRT*C;R3MsG?{5Y&c?&%6a7rHqSwpxF#W6ON2PH5M5BM+Kl7XoM*lpR z)<2Mcc5bF0Q#F{@Ka992rMl1NAtL@ht$%oaPyed*nV*m4=NoAK!ziC;%fO0s=0n^+ zGgDgVns%0^rI2%UZ(1nkLA%mD{g3#XHZ{GdfL=B5H@5u~d=WzjGFp{+N)-ONyic;& z13vS%JW-FD#mCEUzFc*<4F7Y@ikTI(rs9_p5e7;Qy=%z#D*3&IgHVBvZio zzA`-W13vjosi(jTJvZwg;E^Bj?&Bmp@S=RP9s(Zu0k1nGJn#a}u6*PNe11O(54@n? ztj{PP`2jy_l7t6d@XZb$`2pW^zyx8hzzaCk19Cz6$Pf5Y%1;0<{FB+P0FV5D@7Yh5 z54^A|JN_X*;5W9D`UAXxw<{m{0bko+@(*}npJu-f`jH>-8}F9>2Y3N*TfWK&lERf z500mErRX|}|9DpsY)!g96k|I%zDv}SlGArKFL*IPaQw`r}9N_JA{@{$fGXdRQf zlL~jxj?rop`4?Vp$B^!`-v4ZYS3)18C23t%F|8wj+#n~&4Yh+jMclhOQ}g~SAUBRH zx$)lZbCpsbqx8O`ig#1U`m1<2xm_XUrb)RSpHQ2~KYO_yYw%ZAa+A=gP3s9+Zu_Y^ z@Vg(-y<%_JN|HN|@hgdJEGeWeb@LO%nQnH(Ge5W;M7xJ}(D$jDKTz!>+CQ}8cKvGj z@t&m1mGn!ZUq-@%f-cK;aA}D=3s!}`4XPb{#;V=2t3@Ckb_qPNOSct1?+uv}vI*Kj zZ6x8McF-RN<|!M}4n9D9WB!@1*4_?6PLLbw4|$5XcPsHac^jV5sS^}GWIMxoOmY=|CEMt@zpdQ={JBPf+HIF|@{u?af6F zR9E)*^1A{%K9>=uYg@p^snugq2S{LS57lEz)_^H4OzYISNzwEA)^SSWX z7#EtyX&5&FABTOYKhTc~W51F>p(F85N}-*XR^yX7-->x<9pOglk89Gu5Z^{M;*I1U zepy#|VBfwk8s_ICDYGGYtauSQo=y?ze&qOCJ}2Y`IYDmj|4O+*o`O_uA4Bg1fVW4w0lse}$5S4QH$1fenf2Xcd)AUEA5 z?HBTtRp?IRldHA|s>AVbMf_??T&*6AQ;fMs#W6m?YpYso#))yIVSGX-My=L9OWD$t`ea|hoEp1veZ4$Oq&^DS-qw>oBmdtCfc5c^PN^<4?Aob>Gr7ce%oK7^Pdpi}U{kZnBw3~Y`+pyz}zE6FTc5v0vQxemjY*#JleYWFa z+ZN3_IHTWjFKzww-FvtE^VzN$ONQv%Ui@KO`kTq?T;1B2IQKoCXJX5T}?QuJNLcc`Q#@br`W5ORs8*$Ft z`(!$gM~oNysSDCZI!8UfyK3*Nw^k*6@p+Xgi^$IQo7|r4SB+D6@32)qBW}JA*%67jlFa2QE5D*(QPpGo+vrXGbd+ZVG|8x6&VLoFsHc0Q(89AQ(kf) zQQdU3rsU=1rp!(mp5qxdEH5Q*)QAy7b5n+$mYbL7IW1-OkX%pRNY9+%!%xc|oIN}x zrJQ~P=Pj7qbmhkYCbFf8{$GF|VLxUcsN(#LZEzx=5i5SuUk0t~44`V{o#P04Dd$Wf z`(>Ng3^YkPWZ5o36BkAKxcx+&^Q#}{553rbiur#vuY`G~8ntc^^G{gEfcYk@D=@EX z;1cS{AM^hFzU0U{b)uUNUvskM7~Qu_&j0(vOgTQSnbEj;CZEECez<$01->owO!E_4 zOmRWB?H{fuUt+#u%Nqns^A!k18!CA&=l?Z&53Y5fxeESS@GlHOiXeCBq$YQL-=VE!L*K6ftkVwriJ zeBOqf|4*d({~B$l_=T4n<7K_a`&%P!#vm{n6I;PO(&@aM% z3cQEIxzCOL1Q_rue?r*KO!RgMcfmx)^YtZwJt)1zL~0DbfHB*Mqmm52lfs; zuy^Go{URkN$W6aM^^25VNPYzMiztcT!(D)WQV7dLzm-za zFG74oNKQ_$>KFCWMr!=C)?p(WmYbZzFs8EaVvD1mRzzMb7&ew;us6sFa;s7HYiV~a zP$9ea75$>{a%;u?A|)rt4WfZO?fXUYT|g17uUt$&^nnLj@^wkOXg4YUtaX^N zLGSI>B}wSudA=aqlq4N+e_?Ns6XaHtC*=lt%8Jd((6qINc|DFhUf^eutV`m4DPI-B zo5*{^U!D(l1+PmQrFj$i7hY~GySBP6337tme9G@ao|3<@w=N0&+3<1;?$5R+dxM-H zH`oE>iFiwecI_MdB>D$t`p{P}r^jks-xKA!B$XfQl6t@VWXOBGUozXd%=Nv#L-4w! zL*AMw*2FY+9nR^rj>k=Fcb=m4I#i~2IIZcqiPrI~r?opAf1cL&^rtmFr^t0Y^kLkr z^r7W{-cq*X9ioxeh0r>lU$31Ww2o)Qr>_OA*F3#Z*Wp07^0Bkhcy$yq#+ zT*&<#u`WrCQ}}&GB<)EckD311T$dzw^@drO#9IK9+8-Isx}yqN@l45;b z5^v{^eq9p#G~w5{ub_TrKPN35=d}5LncKi~+A@phFDNc8C@Uyx%#yW$KMr`FQ?cPC zkYsz8zh|$Yf1^5AYyCudK2FWi@|+g;&uTy4kKxa0V>;CIv29sa54at2&;!tc^QC5< zD(MJ?2|jNP`2d%EoTMB00B=604fz1KMxAQ|e1Oxm55?>X=tMrim8_khM)j2X0(^cr(>ZO(2RPUZ@cH4iQ-w*Qe#i$njmJEAMm5jkoF9`DBlhq z`2oLE*%|PHZnJ)&eB=lGMs;o+@PdDK@W>DNo{wBCzAX&ApxX`}`2oLQof`+d&^NQ6 z0{zGjc(;-p@Phwl{R2Gm1AbJeUgEq(-~}A$fL;L}`2nv_mG%t0DBq5L%XPJ zuh<{9j_txejh%<)x?@vIuxqWwcVZr86wJ2-@N?*sbrKE;fLM+A?p ze28zk+Bc-aniAPw>E%}KR{eZNI|w|mOG|t)d~Vow#Xob6TYWpI)% zZ96}U=G?HGfIKMVc`UEfd~Vpyq{Td4WTnFlZq)m2Bs=pZq0OlWew^*iMNS8H96vWK zI+@O*Riwl|xs=r6+%WiI_+?%BW%z51D>1&qI0@qxBQ??NTkyTJLd;9~!)4MR*LWM} zmwgHk?Av{r1-|&c1*6zn^d9Xg|8yuz=44_@chA{A)jLLoQE335X*kf;5=h1#v0*SK#1<9_T@Fz;KybB3#L-@-AR zi7q?2$)|FEoc%r_&P9taThYaG6Z<(;yBXiN5S?%_*AX;+4YzMW^@Gqaa;x{Q=r3Wu z7xUH_w_-lnNFDo{fmAS$SLxs#dO`cRP);iyuPL8>C4c|PA3iMGLH9zLZp0hOz2Dvy z9@x9@QLBE@2-AA^*xAo%H(r&eWCX8&kAyF=o(FP+oFF%Sfzl5pPgxIIN3ErZ@u@%V zIzHlg+ou&XZnbuqV&2v;|3~W!HfXmc^3UE+Pb8g(-dl}VB{a9Mt?Po^AScKT_6vE+ zTJt`IB!k>29);YnZy|EIjUt)x&t7hj2Ky^3xk*cFz2~VyPLLb;0eNcT`>G$1z15QJ zYBH~%aq0_a{pW_P9RrHC&p)GoRwn5^>pt(5hFs31IA7R5jktU+=Yurur_=fO#n~Ij z9{k>6E;<8l)XO@+my< z5AI7X@Wt?XVTTd#n13NxYd;r5$q91PmrJ=po{}FtzjQv@V`^SGo{M-0%Wysz{5sh&X%r7C1=Uhhk`K3|q+1B{7lbi9p zFe|wQFi1SD};wDG18qyfExnaR1!U{R&NU8nZ=Hq7CF1&=Fqw znp%gc%djR>u1l>|>yv%&$@LvI7kn??^Vy+gI>dejD}wBRD4q4yK_TeCy6&D2%kKiy zBhw{kivfpxfb*$!rN9T^3i_@*Uw}hC!1X**u4e^4z-iiNqDclE@&T^4qvRX#0j{EB zFdXs$Zht2U2Yi4VLf@6=3*{jn;5Hs{y;ye)d;z%N@{kX3qpnfkl~?5k;Kl^i5BUJ6 zua@6k2R^`6bPR?=KETzyAlG*TAK)}?6K$~!?5jXNKb%_E4SaxG+@Twdnge{PQTYJp zK1AuSDi?756N34Pe1O||jDl160&v0nL_WZ|mAwF804}(G$Oky&13tuubl4;;hvm-u z4Pb}dcJYJq!Ezr5@S^of!{D7|=q4tp|I#8}zF947H ze)x8Z&x#I|Zws&T1AfgZvV7o$UfI!){D5Dt_QBLDync9-p8@^I5BPEg54?c4qaXPJ zzft*9;D!F0{S?Yae!$l%zXrU3ha8|6fJc77yPuTy2)xi+v)=+d@&mrMtCSz`0v>V< zDPQFW{F)ObJn*94W;;ju$Pf5Y{Z;u2FX*;|M}EN9V1F3sQ2xSfhbSNU0lz<8>L2ie z|90@m5BQnWmHjC?0B1)(^84YBlI;`l!mrrzf2PV0c(muh3%voJ5cw&61w5VuFW^uQ zJZJv#d=dH$m@m@b4c;$-@?k%)C-^ns8%mvuijML<@n~wPc)!G?gcI!dOH}ri-!W8S z&GmAAz2kQ?*>@|3ls{Sw}t+XFS_{S%ol1mfZE zurA^d3;q(M<$j4yv|pkV<+mHZvfL)qkJq(0EbvNbxnDxwho@2hPVFO7VffrF_mt%( z*4-;Q4=0;YW)YUCDN`p;88>zMgmKfdr%cZ-%2`w}H>a$ixF~yePDEdOIm-{>$cPLg zl$^=G*46R4mnVr}grT{jOMxCkZ=uJ)0{xcpHS`_Fm3}==($-|QQ+mvP82d-CKg7I$ zWRPNXI6XGJKc@X7DG8mD_-C)jQw;vwN{=P9q~3Us`k6!hd!@&9GBiJrmAGGz6}`}7 z{fF>$pF4T##4J|f+~T4#PkCAP;^LCRyymUd2X%FIDWnVisaS-KrNGY*RewJ}epK>Q zd@`3aZrqG<@g*%*`Rz4!A&)!)yL zpAJ7Bx9h@q-^RKjcLnGj)l9IwBE`}v{lTvvQD zqw{OVq5{w21;r(0*?9$}3kq|Vm^0eMXDBd7R#ad?*t*oi4~ynI2;M5<=ZC64_<_8- z;uGQs{rt#XSXx#*KYKw*@q$u3j3CSuV2&vS<|!#F@I(U(^gmEL2)#fkmOrQr0Zjo! z{h^;9s$buF_T%vv`w~?jC$O3!(*1ZCSNX?TJLEVE<1dV_FiymL3C3ICJjMyBq^z~{ zoEb*E5<27cSrH#y_ z(Oo)ywMKe4O<+;v4hNe6{v*7UTrEq5hDkj9)=KK6yKyX+my? ziFg*tev)cSR;vsc597T&;&|@IBW|SJ?rbmRMk`CGe>y4Q7V)$1pBnZ44NJM*;xC4= zwU&$R%|-l%{eDOlQ|u30MGF>%%^x!lOFfQhxeE&ylr;@SydRG)`3l=&Kc24qF#NJ_ zmVAE(e{G)s#5@}26^&H#S-3n8@H~YbXgt+F;UT(9u$(*4_uW>(>&_ASZkPVpeQ)FZ zGVs8@-D|AyU6�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 z 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 z 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

NyvyFD|;Ixh08xE*y( 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 SeQWB(QKfF>iU@t--~RxDz!O#g literal 0 HcmV?d00001 diff --git a/mods/ITEMS/mcl_armor/models/mcl_armor_character_female.blend1 b/mods/ITEMS/mcl_armor/models/mcl_armor_character_female.blend1 new file mode 100644 index 0000000000000000000000000000000000000000..1a13f1c92ecdc6b31be756978e2192d45a23c66c GIT binary patch literal 1212956 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 literal 0 HcmV?d00001 diff --git a/mods/ITEMS/mcl_armor/player.lua b/mods/ITEMS/mcl_armor/player.lua new file mode 100644 index 000000000..48fdb381f --- /dev/null +++ b/mods/ITEMS/mcl_armor/player.lua @@ -0,0 +1,173 @@ +mcl_player.player_register_model("mcl_armor_character.b3d", { + animation_speed = 30, + textures = { + "character.png", + "blank.png", + "blank.png", + }, + animations = { + stand = {x=0, y=79}, + lay = {x=162, y=166}, + walk = {x=168, y=187}, + mine = {x=189, y=198}, + walk_mine = {x=200, y=219}, + sit = {x=81, y=160}, + sneak_stand = {x=222, y=302}, + sneak_mine = {x=346, y=365}, + sneak_walk = {x=304, y=323}, + sneak_walk_mine = {x=325, y=344}, + swim_walk = {x=368, y=387}, + swim_walk_mine = {x=389, y=408}, + swim_stand = {x=434, y=434}, + swim_mine = {x=411, y=430}, + run_walk = {x=440, y=459}, + run_walk_mine = {x=461, y=480}, + sit_mount = {x=484, y=484}, + die = {x=498, y=498}, + fly = {x=502, y=581}, + bow_walk = {x=650, y=670}, + bow_sneak = {x=675, y=695}, + }, +}) + +mcl_player.player_register_model("mcl_armor_character_female.b3d", { + animation_speed = 30, + textures = { + "character.png", + "blank.png", + "blank.png", + }, + animations = { + stand = {x=0, y=79}, + lay = {x=162, y=166}, + walk = {x=168, y=187}, + mine = {x=189, y=198}, + walk_mine = {x=200, y=219}, + sit = {x=81, y=160}, + sneak_stand = {x=222, y=302}, + sneak_mine = {x=346, y=365}, + sneak_walk = {x=304, y=323}, + sneak_walk_mine = {x=325, y=344}, + swim_walk = {x=368, y=387}, + swim_walk_mine = {x=389, y=408}, + swim_stand = {x=434, y=434}, + swim_mine = {x=411, y=430}, + run_walk = {x=440, y=459}, + run_walk_mine = {x=461, y=480}, + sit_mount = {x=484, y=484}, + die = {x=498, y=498}, + fly = {x=502, y=581}, + bow_walk = {x=650, y=670}, + bow_sneak = {x=675, y=695}, + }, +}) + +function mcl_armor.update_player(player, info) + mcl_player.player_set_armor(player, info.texture, info.preview) + + local meta = player:get_meta() + meta:set_int("mcl_armor:armor_points", info.points) + + mcl_armor.player_view_range_factors[player] = info.view_range_factors +end + +local function is_armor_action(inventory_info) + return inventory_info.from_list == "armor" or inventory_info.to_list == "armor" or inventory_info.listname == "armor" +end + +local function limit_put(player, inventory, index, stack, count) + local def = stack:get_definition() + + if not def then + return 0 + end + + local element = def._mcl_armor_element + + if not element then + return 0 + end + + local element_index = mcl_armor.elements[element].index + + if index ~= 1 and index ~= element_index then + return 0 + end + + local old_stack = inventory:get_stack("armor", element_index) + + if old_stack:is_empty() or index ~= 1 and old_stack:get_name() ~= stack:get_name() and count <= 1 then + return count + else + return 0 + end +end + +local function limit_take(player, inventory, index, stack, count) + if mcl_enchanting.has_enchantment(stack, "curse_of_binding") and not minetest.is_creative_enabled(player:get_player_name()) then + return 0 + end + + return count +end + +minetest.register_allow_player_inventory_action(function(player, action, inventory, inventory_info) + if not is_armor_action(inventory_info) then + return + end + + if action == "put" then + return limit_put(player, inventory, inventory_info.index, inventory_info.stack, inventory_info.stack:get_count()) + elseif action == "take" then + return limit_take(player, inventory, inventory_info.index, inventory_info.stack, inventory_info.stack:get_count()) + else + if inventory_info.from_list ~= "armor" then + return limit_put(player, inventory, inventory_info.to_index, inventory:get_stack(inventory_info.from_list, inventory_info.from_index), inventory_info.count) + elseif inventory_info.to_list ~= "armor" then + return limit_take(player, inventory, inventory_info.from_index, inventory:get_stack(inventory_info.from_list, inventory_info.from_index), inventory_info.count) + else + return 0 + end + end +end) + +local function on_put(player, inventory, index, stack) + if index == 1 then + mcl_armor.equip(stack, player) + inventory:set_stack("armor", 1, nil) + else + mcl_armor.on_equip(stack, player) + end +end + +minetest.register_on_player_inventory_action(function(player, action, inventory, inventory_info) + if is_armor_action(inventory_info) then + if action == "put" then + on_put(player, inventory, inventory_info.index, inventory_info.stack) + elseif action == "take" then + mcl_armor.on_unequip(inventory_info.stack, player) + else + local stack = inventory:get_stack(inventory_info.to_list, inventory_info.to_index) + if inventory_info.to_list == "armor" then + on_put(player, inventory, inventory_info.to_index, stack) + elseif inventory_info.from_list == "armor" then + mcl_armor.on_unequip(stack, player) + end + end + end +end) + +minetest.register_on_joinplayer(function(player) + mcl_player.player_set_model(player, "mcl_armor_character.b3d") + player:get_inventory():set_size("armor", 5) + + minetest.after(1, function() + if player:is_player() then + mcl_armor.update(player) + end + end) +end) + +minetest.register_on_leaveplayer(function(player) + mcl_armor.player_view_range_factors[player] = nil +end) diff --git a/mods/ITEMS/mcl_armor/register.lua b/mods/ITEMS/mcl_armor/register.lua new file mode 100644 index 000000000..1f9ce7b02 --- /dev/null +++ b/mods/ITEMS/mcl_armor/register.lua @@ -0,0 +1,205 @@ +local S = minetest.get_translator(minetest.get_current_modname()) + +mcl_armor.register_set({ + name = "leather", + description = "Leather", + descriptions = { + head = "Cap", + torso = "Tunic", + legs = "Pants", + }, + durability = 80, + enchantability = 15, + points = { + head = 1, + torso = 3, + legs = 2, + feet = 1, + }, + craft_material = "mcl_mobitems:leather", +}) + +mcl_armor.register_set({ + name = "gold", + description = "Golden", + durability = 112, + enchantability = 25, + points = { + head = 2, + torso = 5, + legs = 3, + feet = 1, + }, + craft_material = "mcl_core:gold_ingot", + cook_material = "mcl_core:gold_nugget", + sound_equip = "mcl_armor_equip_iron", + sound_unequip = "mcl_armor_unequip_iron", +}) + +mcl_armor.register_set({ + name = "chain", + description = "Chain", + durability = 240, + enchantability = 12, + points = { + head = 2, + torso = 5, + legs = 4, + feet = 1, + }, + repair_material = "mcl_core:iron_ingot", + cook_material = "mcl_core:iron_nugget", +}) + +mcl_armor.register_set({ + name = "iron", + description = "Iron", + durability = 240, + enchantability = 9, + points = { + head = 2, + torso = 6, + legs = 5, + feet = 2, + }, + craft_material = "mcl_core:iron_ingot", + cook_material = "mcl_core:iron_nugget", +}) + +mcl_armor.register_set({ + name = "diamond", + description = "Diamond", + durability = 528, + enchantability = 10, + points = { + head = 3, + torso = 8, + legs = 6, + feet = 3, + }, + toughness = 2, + craft_material = "mcl_core:diamond", +}) + +mcl_armor.register_protection_enchantment({ + id = "projectile_protection", + name = S("Projectile Protection"), + description = S("Reduces projectile damage."), + power_range_table = {{1, 16}, {11, 26}, {21, 36}, {31, 46}, {41, 56}}, + incompatible = {blast_protection = true, fire_protection = true, protection = true}, + factor = 2, + damage_flag = "is_projectile", +}) + +mcl_armor.register_protection_enchantment({ + id = "blast_protection", + name = S("Blast Protection"), + description = S("Reduces explosion damage and knockback."), + power_range_table = {{5, 13}, {13, 21}, {21, 29}, {29, 37}}, + weight = 2, + incompatible = {fire_protection = true, protection = true, projectile_protection = true}, + factor = 2, + damage_flag = "is_explosion", +}) + +mcl_armor.register_protection_enchantment({ + id = "fire_protection", + name = S("Fire Protection"), + description = S("Reduces fire damage."), + power_range_table = {{5, 13}, {13, 21}, {21, 29}, {29, 37}}, + incompatible = {blast_protection = true, protection = true, projectile_protection = true}, + factor = 2, + damage_flag = "is_fire", +}) + +mcl_armor.register_protection_enchantment({ + id = "protection", + name = S("Protection"), + description = S("Reduces most types of damage by 4% for each level."), + power_range_table = {{1, 12}, {12, 23}, {23, 34}, {34, 45}}, + incompatible = {blast_protection = true, fire_protection = true, projectile_protection = true}, + factor = 1, +}) + +mcl_armor.register_protection_enchantment({ + id = "feather_falling", + name = S("Feather Falling"), + description = S("Reduces fall damage."), + power_range_table = {{5, 11}, {11, 17}, {17, 23}, {23, 29}}, + factor = 3, + primary = {combat_armor_feet = true}, + damage_type = "fall", +}) + +-- requires engine change +--[[mcl_enchanting.enchantments.aqua_affinity = { + name = S("Aqua Affinity"), + max_level = 1, + primary = {armor_head = true}, + secondary = {}, + disallow = {non_combat_armor = true}, + incompatible = {}, + weight = 2, + description = S("Increases underwater mining speed."), + curse = false, + on_enchant = function() end, + requires_tool = false, + treasure = false, + power_range_table = {{1, 41}}, + inv_combat_tab = true, + inv_tool_tab = false, +}]]-- + +mcl_enchanting.enchantments.curse_of_binding = { + name = S("Curse of Binding"), + max_level = 1, + primary = {}, + secondary = {armor_head = true, armor_torso = true, armor_legs = true, armor_feet = true}, + disallow = {}, + incompatible = {}, + weight = 1, + description = S("Item cannot be removed from armor slots except due to death, breaking or in Creative Mode."), + curse = true, + on_enchant = function() end, + requires_tool = false, + treasure = true, + power_range_table = {{25, 50}}, + inv_combat_tab = true, + inv_tool_tab = false, +} + +mcl_enchanting.enchantments.thorns = { + name = S("Thorns"), + max_level = 3, + primary = {combat_armor_chestplate = true}, + secondary = {combat_armor = true}, + disallow = {}, + incompatible = {}, + weight = 1, + description = S("Reflects some of the damage taken when hit, at the cost of reducing durability with each proc."), + curse = false, + on_enchant = function() end, + requires_tool = false, + treasure = false, + power_range_table = {{10, 61}, {30, 71}, {50, 81}}, + inv_combat_tab = true, + inv_tool_tab = false, +} + +-- Elytra + +minetest.register_tool("mcl_armor:elytra", { + description = S("Elytra"), + _doc_items_longdesc = mcl_armor.longdesc, + _doc_items_usagehelp = mcl_armor.usage, + inventory_image = "mcl_armor_inv_elytra.png", + groups = {armor = 1, non_combat_armor = 1, armor_torso = 1, non_combat_torso = 1, mcl_armor_uses = 10}, + sounds = { + _mcl_armor_equip = "mcl_armor_equip_leather", + _mcl_armor_unequip = "mcl_armor_unequip_leather", + }, + on_place = mcl_armor.equip_on_use, + on_secondary_use = mcl_armor.equip_on_use, + _mcl_armor_element = "torso", + _mcl_armor_texture = "mcl_armor_elytra.png" +}) diff --git a/mods/ITEMS/mcl_armor/textures/mcl_armor_elytra.png b/mods/ITEMS/mcl_armor/textures/mcl_armor_elytra.png new file mode 100644 index 0000000000000000000000000000000000000000..b51f2a564cdf36d9fa859d1a1cb61f21e5922220 GIT binary patch literal 271 zcmeAS@N?(olHy`uVBq!ia0vp^4nVBH!VDw>HYaZfQW60^A+B$~{|}yi(AL)0)6=v3 z-0%2xH(YDy>FDT8OZ?~tRKr*jlj0Sxf2@VD)t{zUw0Kbh)$z7s7O@R$84CXZ=Uvm7?e1LW{c)I$z JtaD0e0su8>RDA#d literal 0 HcmV?d00001 diff --git a/mods/ITEMS/mcl_armor/textures/mcl_armor_inv_boots_gold.png b/mods/ITEMS/mcl_armor/textures/mcl_armor_inv_boots_gold.png index dc452d41372344c624d15270867e81ea7551b52a..ef1f9fa87ca43be01bc084da406069ce278d3c1f 100644 GIT binary patch delta 382 zcmV-^0fGLf0ht4kB!32COGiWi{{a60|De66lK=n!32;bRa{vG?BLDy{BLR4&KXw2B z00(qQO+^Rg2NVS)N@!D*zX#WvQEA z04#(nBfex{Rjq`aWmi8Z5*|?Csfm&M27np1J9o)$LRS>Zl1E_v~4!`V2#&%;Q32n c`Ir8}H*o=PdJ9oayZ`_I07*qoM6N<$g80X(CIA2c delta 139 zcmV;60CfME1E&FyB!6y6L_t(|0b>|^;Q#;s_%N*uz|=^*L1E2{L6~|5?CR0_55iDB zhB#gWt}HkG|LS1U|0NYl7zO~vz;Ylp*bIQ#0#bm>0I(cT4PFC4nsFKc#25y^G?Rl- t4M^~)Ar`|7ppFYb4017LDUoUb0H9FFs6zF<5C8xG07*qoLI9vb# diff --git a/mods/ITEMS/mcl_armor/textures/mcl_armor_inv_elytra.png b/mods/ITEMS/mcl_armor/textures/mcl_armor_inv_elytra.png new file mode 100644 index 0000000000000000000000000000000000000000..f5d5cfda6cfe0d73c0eba195c5d613d6288566b2 GIT binary patch literal 355 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Ea{HEjtmSN`?>!lvI6;>1s;*b z3=G^tAk28_ZrvZCAbW|YuPgg~E;b$w-N64IbAUn;C9V-A!TD(=<%vb93~dIoxCe|nPd1J#`Kba4!^@ZTGt$j4+T@FqS>T0}!gL_>wi^N_kg3%f#~#k>RZ zKNx1s4^a?HJ3M7?Ua_U)jFd}zZ@zr}2MiSpcQdSM|K4=P^VJ6v<^x9` zF7owTl&5~!`7Y~+qWi)YvTqvP?3&dky*9ql=(Z-p|4~|AZTGD?#d=b&tgalKwQ<$l wHmO;>r3uN~>|csm{N8e~;{RW@`WAsWlhlp6t7RA$1AWHe>FVdQ&MBb@0LG|^GXMYp literal 0 HcmV?d00001 diff --git a/mods/ITEMS/mcl_armor_stand/depends.txt b/mods/ITEMS/mcl_armor_stand/depends.txt deleted file mode 100644 index 02ce27d73..000000000 --- a/mods/ITEMS/mcl_armor_stand/depends.txt +++ /dev/null @@ -1,5 +0,0 @@ -mcl_armor -mcl_core -mcl_sounds -mcl_stairs -screwdriver? diff --git a/mods/ITEMS/mcl_armor_stand/init.lua b/mods/ITEMS/mcl_armor_stand/init.lua index c451b6de1..d6080b8f8 100644 --- a/mods/ITEMS/mcl_armor_stand/init.lua +++ b/mods/ITEMS/mcl_armor_stand/init.lua @@ -1,84 +1,41 @@ -local S = minetest.get_translator("mcl_armor_stand") +local S = minetest.get_translator(minetest.get_current_modname()) -local elements = {"head", "torso", "legs", "feet"} - -local function get_stand_object(pos) - local object = nil - local objects = minetest.get_objects_inside_radius(pos, 0.5) or {} - for _, obj in pairs(objects) do - local ent = obj:get_luaentity() - if ent then - if ent.name == "mcl_armor_stand:armor_entity" then - -- Remove duplicates - if object then - obj:remove() - else - object = obj - end - end - end - end - return object +-- Spawn a stand entity +local function spawn_stand_entity(pos, node) + local luaentity = minetest.add_entity(pos, "mcl_armor_stand:armor_entity"):get_luaentity() + luaentity:update_rotation(node or minetest.get_node(pos)) + return luaentity end -local function update_entity(pos) - local node = minetest.get_node(pos) - local object = get_stand_object(pos) - if object then - if not string.find(node.name, "mcl_armor_stand:") then - object:remove() - return +-- Find a stand entity or spawn one +local function get_stand_entity(pos, node) + for _, obj in ipairs(minetest.get_objects_inside_radius(pos, 0)) do + local luaentity = obj:get_luaentity() + if luaentity and luaentity.name == "mcl_armor_stand:armor_entity" then + return luaentity end - else - object = minetest.add_entity(pos, "mcl_armor_stand:armor_entity") end - if object then - local texture = "blank.png" - local textures = {} - local meta = minetest.get_meta(pos) - local inv = meta:get_inventory() - local yaw = 0 - if inv then - for _, element in pairs(elements) do - local stack = inv:get_stack("armor_"..element, 1) - if stack:get_count() == 1 then - local item = stack:get_name() or "" - if minetest.registered_aliases[item] then - item = minetest.registered_aliases[item] - end - local def = stack:get_definition() or {} - local groups = def.groups or {} - if groups["armor_"..element] then - local texture = def.texture or item:gsub("%:", "_") - table.insert(textures, texture..".png") - end - end - end + return spawn_stand_entity(pos, node) +end + +-- Migrate the old inventory format +local function migrate_inventory(inv) + inv:set_size("armor", 5) + local lists = inv:get_lists() + for name, element in pairs(mcl_armor.elements) do + local listname = "armor_" .. name + local list = lists[listname] + if list then + inv:set_stack("armor", element.index, list[1]) + inv:set_size(listname, 0) end - if #textures > 0 then - texture = table.concat(textures, "^") - end - if node.param2 then - local rot = node.param2 % 4 - if rot == 1 then - yaw = 3 * math.pi / 2 - elseif rot == 2 then - yaw = math.pi - elseif rot == 3 then - yaw = math.pi / 2 - end - end - object:set_yaw(yaw) - object:set_properties({textures={texture}}) end end --- Drop all armor of the armor stand on the ground -local drop_armor = function(pos) - local meta = minetest.get_meta(pos) - local inv = meta:get_inventory() - for _, element in pairs(elements) do - local stack = inv:get_stack("armor_"..element, 1) +-- Drop all armor on the ground when it got destroyed +local function drop_inventory(pos) + local inv = minetest.get_meta(pos):get_inventory() + for _, stack in pairs(inv:get_list("armor")) do if not stack:is_empty() then local p = {x=pos.x+math.random(0, 10)/10-0.5, y=pos.y, z=pos.z+math.random(0, 10)/10-0.5} minetest.add_item(p, stack) @@ -111,136 +68,26 @@ minetest.register_node("mcl_armor_stand:armor_stand", { _mcl_hardness = 2, sounds = mcl_sounds.node_sound_wood_defaults(), on_construct = function(pos) - local meta = minetest.get_meta(pos) - local inv = meta:get_inventory() - for _, element in pairs(elements) do - inv:set_size("armor_"..element, 1) - end + spawn_stand_entity(pos) + end, + on_destruct = function(pos) + drop_inventory(pos) end, - -- Drop all armor on the ground when it got destroyed - on_destruct = drop_armor, - -- Put piece of armor on armor stand, or take one away on_rightclick = function(pos, node, clicker, itemstack, pointed_thing) local protname = clicker:get_player_name() + if minetest.is_protected(pos, protname) then minetest.record_protection_violation(pos, protname) return itemstack end - local inv = minetest.get_inventory({type = "node", pos = pos}) - if not inv then - return itemstack - end - - -- Check if player wields armor - local name = itemstack:get_name() - local list - for e=1, #elements do - local g = minetest.get_item_group(name, "armor_" .. elements[e]) - if g ~= nil and g ~= 0 then - list = "armor_" .. elements[e] - break - end - end - -- If player wields armor, put it on armor stand - local wielditem = clicker:get_wielded_item() - if list then - -- ... but only if the slot is free - local single_item = ItemStack(itemstack) - single_item:set_count(1) - if inv:is_empty(list) then - inv:add_item(list, single_item) - armor:play_equip_sound(single_item, nil, pos) - update_entity(pos) - itemstack:take_item() - return itemstack - end - end - - -- Take armor from stand if player has a free hand or wields the same armor type (if stackable) - for e=1, #elements do - local stand_armor = inv:get_stack("armor_" .. elements[e], 1) - if not stand_armor:is_empty() then - local pinv = clicker:get_inventory() - local taken = false - -- Empty hand - if wielditem:get_name() == "" then - pinv:set_stack("main", clicker:get_wield_index(), stand_armor) - taken = true - -- Stackable armor type (if not already full). This is the case for e.g. mob heads. - -- This is done purely for convenience. - elseif (wielditem:get_name() == stand_armor:get_name() and wielditem:get_count() < wielditem:get_stack_max()) then - wielditem:set_count(wielditem:get_count()+1) - pinv:set_stack("main", clicker:get_wield_index(), wielditem) - taken = true - end - if taken then - armor:play_equip_sound(stand_armor, nil, pos, true) - stand_armor:take_item() - inv:set_stack("armor_" .. elements[e], 1, stand_armor) - end - update_entity(pos) - return clicker:get_wielded_item() - end - end - update_entity(pos) - return itemstack - end, - after_place_node = function(pos) - minetest.add_entity(pos, "mcl_armor_stand:armor_entity") - end, - allow_metadata_inventory_take = function(pos, listname, index, stack, player) - local name = player:get_player_name() - if minetest.is_protected(pos, name) then - minetest.record_protection_violation(pos, name) - return 0 - else - return stack:get_count() - end - end, - allow_metadata_inventory_put = function(pos, listname, index, stack, player) - local name = player:get_player_name() - if minetest.is_protected(pos, name) then - minetest.record_protection_violation(pos, name) - return 0 - end - local def = stack:get_definition() or {} - local groups = def.groups or {} - if groups[listname] then - return 1 - end - return 0 - end, - allow_metadata_inventory_move = function() - return 0 - end, - on_metadata_inventory_put = function(pos) - update_entity(pos) - end, - on_metadata_inventory_take = function(pos) - update_entity(pos) - end, - after_destruct = function(pos) - update_entity(pos) - end, - on_blast = function(pos, _, do_drop) - local object = get_stand_object(pos) - if object then - object:remove() - end - minetest.after(1, function(pos) - update_entity(pos) - end, pos) - minetest.remove_node(pos) - if do_drop then - minetest.add_item(pos, "mcl_armor_stand:armor_stand") - end + return mcl_armor.equip(itemstack, get_stand_entity(pos, node).object, true) end, on_rotate = function(pos, node, user, mode) if mode == screwdriver.ROTATE_FACE then node.param2 = (node.param2 + 1) % 4 minetest.swap_node(pos, node) - update_entity(pos) + get_stand_entity(pos, node):update_rotation(node) return true end return false @@ -248,50 +95,44 @@ minetest.register_node("mcl_armor_stand:armor_stand", { }) minetest.register_entity("mcl_armor_stand:armor_entity", { - physical = true, - visual = "mesh", - mesh = "3d_armor_entity.obj", - visual_size = {x=1, y=1}, - collisionbox = {-0.1,-0.4,-0.1, 0.1,1.3,0.1}, - pointable = false, - textures = {"blank.png"}, - pos = nil, - timer = 0, + initial_properties = { + physical = true, + visual = "mesh", + mesh = "3d_armor_entity.obj", + visual_size = {x=1, y=1}, + collisionbox = {-0.1,-0.4,-0.1, 0.1,1.3,0.1}, + pointable = false, + textures = {"blank.png"}, + timer = 0, + static_save = false, + }, on_activate = function(self) - local pos = self.object:get_pos() - self.object:set_armor_groups({immortal=1}) - if pos then - self.pos = vector.round(pos) - update_entity(pos) - end + self.object:set_armor_groups({immortal = 1}) + self.node_pos = vector.round(self.object:get_pos()) + self.inventory = minetest.get_meta(self.node_pos):get_inventory() + migrate_inventory(self.inventory) + mcl_armor.update(self.object) end, on_step = function(self, dtime) - if not self.pos then - return - end - self.timer = self.timer + dtime - if self.timer > 1 then - self.timer = 0 - local pos = self.object:get_pos() - if pos then - if vector.equals(vector.round(pos), self.pos) then - return - end - end - update_entity(self.pos) + if minetest.get_node(self.node_pos).name ~= "mcl_armor_stand:armor_stand" then self.object:remove() end end, + update_armor = function(self, info) + self.object:set_properties({textures = {info.texture}}) + end, + update_rotation = function(self, node) + self.object:set_yaw(minetest.dir_to_yaw(minetest.facedir_to_dir(node.param2))) + end, }) --- FIXME: Armor helper entity can get destroyed by /clearobjects minetest.register_lbm({ label = "Respawn armor stand entities", name = "mcl_armor_stand:respawn_entities", nodenames = {"mcl_armor_stand:armor_stand"}, run_at_every_load = true, action = function(pos, node) - update_entity(pos, node) + spawn_stand_entity(pos, node) end, }) @@ -304,7 +145,6 @@ minetest.register_craft({ } }) - -- Legacy handling minetest.register_alias("3d_armor_stand:armor_stand", "mcl_armor_stand:armor_stand") minetest.register_entity(":3d_armor_stand:armor_entity", { diff --git a/mods/ITEMS/mcl_armor_stand/locale/mcl_armor_stand.pl.tr b/mods/ITEMS/mcl_armor_stand/locale/mcl_armor_stand.pl.tr new file mode 100644 index 000000000..cc134a2f0 --- /dev/null +++ b/mods/ITEMS/mcl_armor_stand/locale/mcl_armor_stand.pl.tr @@ -0,0 +1,6 @@ +# textdomain: mcl_armor_stand +Armor Stand=Stojak na zbroję +An armor stand is a decorative object which can display different pieces of armor. Anything which players can wear as armor can also be put on an armor stand.=Stojak na zbroję jest obiektem dekoracyjnym, na którym można wystawiać różne części zbroi. Cokolwiek co może być noszone przez gracza jako zbroja, może być wystawione na stojaku na zbroję. +Just place an armor item on the armor stand. To take the top piece of armor from the armor stand, select your hand and use the place key on the armor stand.=Aby to zrobić po prostu postaw przedmiot zbroi na stojaku. Aby wziąć górną część zbroi ze stojaka wybierz swoją dłoń i kliknij przycisk użyj na stojaku. +Displays pieces of armor=Prezentuje części zbroi + diff --git a/mods/ITEMS/mcl_armor_stand/mod.conf b/mods/ITEMS/mcl_armor_stand/mod.conf new file mode 100644 index 000000000..eb803dc56 --- /dev/null +++ b/mods/ITEMS/mcl_armor_stand/mod.conf @@ -0,0 +1,5 @@ +name = mcl_armor_stand +author = stujones11 +description = Adds an armor stand for armor storage and display. +depends = mcl_armor, mcl_core, mcl_sounds, mcl_stairs +optional_depends = screwdriver diff --git a/mods/ITEMS/mcl_armor_stand/models/3d_armor_entity.obj b/mods/ITEMS/mcl_armor_stand/models/3d_armor_entity.obj index 052f69255..37bc521e9 100644 --- a/mods/ITEMS/mcl_armor_stand/models/3d_armor_entity.obj +++ b/mods/ITEMS/mcl_armor_stand/models/3d_armor_entity.obj @@ -1,79 +1,132 @@ -# Blender v2.73 (sub 0) OBJ File: '3d_armor_entity_3.blend' +# Blender v2.92.0 OBJ File: '' # www.blender.org mtllib 3d_armor_entity.mtl +o Cube +v 1.000000 1.000000 -1.000000 +v 1.000000 -1.000000 -1.000000 +v 1.000000 1.000000 1.000000 +v 1.000000 -1.000000 1.000000 +v -1.000000 1.000000 -1.000000 +v -1.000000 -1.000000 -1.000000 +v -1.000000 1.000000 1.000000 +v -1.000000 -1.000000 1.000000 +vt 0.625000 0.500000 +vt 0.875000 0.500000 +vt 0.875000 0.750000 +vt 0.625000 0.750000 +vt 0.375000 0.750000 +vt 0.625000 1.000000 +vt 0.375000 1.000000 +vt 0.375000 0.000000 +vt 0.625000 0.000000 +vt 0.625000 0.250000 +vt 0.375000 0.250000 +vt 0.125000 0.500000 +vt 0.375000 0.500000 +vt 0.125000 0.750000 +vn 0.0000 1.0000 0.0000 +vn 0.0000 0.0000 1.0000 +vn -1.0000 0.0000 0.0000 +vn 0.0000 -1.0000 0.0000 +vn 1.0000 0.0000 0.0000 +vn 0.0000 0.0000 -1.0000 +usemtl Material +s off +f 1/1/1 5/2/1 7/3/1 3/4/1 +f 4/5/2 3/4/2 7/6/2 8/7/2 +f 8/8/3 7/9/3 5/10/3 6/11/3 +f 6/12/4 2/13/4 4/5/4 8/14/4 +f 2/13/5 1/1/5 3/4/5 4/5/5 +f 6/11/6 5/10/6 1/1/6 2/13/6 o Player_Cube -v 2.200000 9.763893 1.200000 -v 2.200000 9.763893 -1.200000 +v 2.200000 9.763893 1.200001 v 2.200000 2.663871 1.200000 v 2.200000 2.663871 -1.200000 +v 2.200000 9.763893 -1.200000 v -2.200000 9.763893 -1.200000 -v -2.200000 9.763893 1.200000 -v -2.200000 2.663871 -1.200000 +v -2.200000 9.763893 1.200001 v -2.200000 2.663871 1.200000 -v 2.300000 13.863962 2.300000 -v 2.300000 13.863962 -2.300000 +v -2.200000 2.663871 -1.200000 +v 2.300000 13.863962 2.300001 v 2.300000 9.263885 2.300000 -v 2.300000 9.263885 -2.300000 -v -2.300000 13.863962 -2.300000 -v -2.300000 13.863962 2.300000 -v -2.300000 9.263885 -2.300000 +v 2.300000 9.263885 -2.299999 +v 2.300000 13.863962 -2.299999 +v -2.300000 13.863962 -2.299999 +v -2.300000 13.863962 2.300001 v -2.300000 9.263885 2.300000 +v -2.300000 9.263885 -2.299999 v -2.322686 2.473175 -1.300000 v -2.322686 2.473175 1.300000 v -4.713554 2.682348 1.300000 v -4.713554 2.682348 -1.300000 -v -1.686446 9.745432 -1.300000 -v -1.686446 9.745432 1.300000 +v -4.077313 9.954605 -1.299999 v -4.077313 9.954605 1.300000 -v -4.077313 9.954605 -1.300000 -v 4.077313 9.954605 -1.300000 -v 4.077313 9.954605 1.300000 +v -1.686446 9.745432 1.300000 +v -1.686446 9.745432 -1.299999 v 1.686446 9.745432 1.300000 -v 1.686446 9.745432 -1.300000 -v 4.713554 2.682348 -1.300000 -v 4.713554 2.682348 1.300000 v 2.322686 2.473175 1.300000 +v 4.713554 2.682348 1.300000 +v 4.077313 9.954605 1.300000 +v 1.686446 9.745432 -1.299999 v 2.322686 2.473175 -1.300000 +v 4.077313 9.954605 -1.299999 +v 4.713554 2.682348 -1.300000 +v 2.538733 2.980834 -1.210000 v 0.139099 2.938947 -1.200000 v 0.139099 2.938947 1.200000 -v 0.261266 -4.059988 1.200000 -v 0.261266 -4.059988 -1.200000 -v 2.660901 -4.018101 1.190000 -v 2.660901 -4.018101 -1.210000 v 2.538733 2.980834 1.190000 -v 2.538733 2.980834 -1.210000 -v -0.139099 2.938947 -1.200000 -v -0.139099 2.938947 1.200000 -v -0.261266 -4.059988 1.200000 -v -0.261266 -4.059988 -1.200000 +v 0.261266 -4.059988 -1.200000 +v 2.660901 -4.018101 -1.210000 +v 2.660901 -4.018101 1.190000 +v 0.261266 -4.059988 1.200000 v -2.538734 2.980834 -1.210000 v -2.538734 2.980834 1.190000 +v -0.139099 2.938947 1.200000 +v -0.139099 2.938947 -1.200000 +v -0.261266 -4.059988 1.200000 +v -0.261266 -4.059988 -1.200000 v -2.660901 -4.018101 -1.210000 v -2.660901 -4.018101 1.190000 +v 0.000000 -4.387500 -1.400000 +v 0.000000 -4.387500 1.400000 v -2.799999 -4.387500 1.390000 v -2.799999 -4.387500 -1.410000 v -2.800000 -0.812499 1.390000 v -2.800000 -0.812499 -1.410000 -v -0.000000 -4.387500 -1.400000 -v -0.000000 -4.387500 1.400000 -v -0.000000 -0.812499 1.400000 -v -0.000000 -0.812499 -1.400000 -v 2.800000 -0.812499 -1.410000 -v 2.800000 -0.812499 1.390000 -v 2.799999 -4.387500 -1.410000 -v 2.799999 -4.387500 1.390000 +v 0.000000 -0.812499 1.400000 +v 0.000000 -0.812499 -1.400000 +v 0.000000 -0.812499 -1.400000 v 0.000000 -4.387500 -1.400000 v 0.000000 -4.387500 1.400000 v 0.000000 -0.812499 1.400000 -v 0.000000 -0.812499 -1.400000 -v 2.267006 13.830965 2.267006 -v 2.267006 13.830965 -2.267006 +v 2.800000 -0.812499 -1.410000 +v 2.799999 -4.387500 -1.410000 +v 2.799999 -4.387500 1.390000 +v 2.800000 -0.812499 1.390000 +v 2.267006 13.830965 2.267007 +v 2.267006 13.830965 -2.267005 +v 2.267006 9.296881 -2.267005 v 2.267006 9.296881 2.267006 -v 2.267006 9.296881 -2.267006 -v -2.267006 13.830965 -2.267006 -v -2.267006 13.830965 2.267006 -v -2.267006 9.296881 -2.267006 +v -2.267006 13.830965 -2.267005 +v -2.267006 13.830965 2.267007 +v -2.267006 9.296881 -2.267005 v -2.267006 9.296881 2.267006 +v -4.168111 10.060661 1.681621 +v 1.741822 -5.305762 4.169018 +v 1.718504 -5.438008 3.407457 +v -6.641035 -3.963995 3.407457 +v 4.191429 8.586647 1.681621 +v -6.617718 -3.831752 4.169018 +v 4.168111 8.454401 0.920061 +v -4.191429 9.928415 0.920061 +v -4.191429 8.586648 1.681620 +v 6.617716 -3.831752 4.169018 +v 6.641035 -3.963997 3.407457 +v -1.718504 -5.438006 3.407457 +v 4.168111 10.060658 1.681621 +v -1.741822 -5.305762 4.169018 +v 4.191429 9.928414 0.920061 +v -4.168111 8.454404 0.920061 vt 0.250000 0.375000 vt 0.250000 0.000000 vt 0.312500 0.000000 @@ -81,6 +134,8 @@ vt 0.312500 0.375000 vt 0.437500 0.375000 vt 0.437500 0.500000 vt 0.312500 0.500000 +vt 0.437500 0.500000 +vt 0.437500 0.375000 vt 0.562500 0.375000 vt 0.562500 0.500000 vt 0.437500 0.000000 @@ -97,97 +152,308 @@ vt 0.750000 1.000000 vt 0.625000 1.000000 vt 0.875000 0.750000 vt 0.875000 1.000000 +vt 0.750000 1.000000 +vt 0.750000 0.750000 vt 0.750000 0.500000 +vt 0.875000 0.750000 vt 0.875000 0.500000 vt 1.000000 0.750000 vt 1.000000 0.500000 vt 0.750000 0.375000 +vt 0.750000 0.500000 vt 0.812500 0.500000 vt 0.812500 0.375000 vt 0.687500 0.375000 vt 0.687500 0.500000 +vt 0.750000 0.500000 +vt 0.750000 0.375000 +vt 0.687500 0.375000 +vt 0.625000 0.375000 +vt 0.625000 0.000000 vt 0.687500 0.000000 vt 0.750000 0.000000 +vt 0.687500 0.000000 +vt 0.812500 0.375000 vt 0.812500 0.000000 vt 0.875000 0.375000 vt 0.875000 0.000000 +vt 0.812500 0.375000 +vt 0.812500 0.000000 +vt 0.875000 0.000000 +vt 0.875000 0.375000 +vt 0.750000 0.375000 +vt 0.750000 0.000000 +vt 0.687500 0.375000 +vt 0.687500 0.000000 +vt 0.687500 0.375000 +vt 0.687500 0.000000 +vt 0.625000 0.000000 +vt 0.625000 0.375000 +vt 0.750000 0.500000 +vt 0.687500 0.500000 +vt 0.750000 0.375000 +vt 0.812500 0.375000 +vt 0.812500 0.500000 +vt 0.750000 0.500000 vt 0.125000 0.375000 vt 0.062500 0.375000 vt 0.062500 0.500000 vt 0.125000 0.500000 vt 0.187500 0.375000 +vt 0.125000 0.375000 +vt 0.125000 0.500000 vt 0.187500 0.500000 vt 0.000000 0.375000 vt 0.000000 0.000000 vt 0.062500 0.000000 +vt 0.062500 0.375000 +vt 0.250000 0.375000 +vt 0.250000 0.000000 +vt 0.187500 0.000000 +vt 0.187500 0.375000 +vt 0.125000 0.000000 +vt 0.062500 0.000000 +vt 0.187500 0.375000 vt 0.187500 0.000000 vt 0.125000 0.000000 -vt 0.437500 0.875000 -vt 0.437500 1.000000 -vt 0.375000 1.000000 -vt 0.375000 0.875000 -vt 0.250000 0.875000 -vt 0.312500 0.875000 -vt 0.312500 0.656250 -vt 0.250000 0.656250 -vt 0.500000 0.875000 -vt 0.437500 0.656250 -vt 0.500000 0.656250 -vt 0.375000 0.656250 -vt 0.312500 1.000000 -usemtl Armor +vt 0.125000 0.375000 +vt 0.125000 0.375000 +vt 0.125000 0.500000 +vt 0.062500 0.500000 +vt 0.062500 0.375000 +vt 0.187500 0.375000 +vt 0.125000 0.375000 +vt 0.125000 0.000000 +vt 0.187500 0.000000 +vt 0.062500 0.000000 +vt 0.125000 0.000000 +vt 0.250000 0.375000 +vt 0.187500 0.375000 +vt 0.187500 0.000000 +vt 0.250000 0.000000 +vt 0.000000 0.375000 +vt 0.062500 0.375000 +vt 0.062500 0.000000 +vt 0.000000 0.000000 +vt 0.187500 0.375000 +vt 0.187500 0.500000 +vt 0.125000 0.500000 +vt 0.125000 0.375000 +vt 0.381250 0.832812 +vt 0.381250 0.845312 +vt 0.375000 0.845312 +vt 0.375000 0.832812 +vt 0.362500 0.832812 +vt 0.368750 0.832812 +vt 0.368750 0.810938 +vt 0.362500 0.810938 +vt 0.387500 0.832812 +vt 0.381250 0.832812 +vt 0.381250 0.810938 +vt 0.387500 0.810938 +vt 0.375000 0.832812 +vt 0.368750 0.832812 +vt 0.368750 0.810938 +vt 0.375000 0.810938 +vt 0.381250 0.832812 +vt 0.375000 0.832812 +vt 0.375000 0.810938 +vt 0.381250 0.810938 +vt 0.375000 0.845312 +vt 0.368750 0.845312 +vt 0.381250 0.832812 +vt 0.381250 0.810938 +vt 0.375000 0.810938 +vt 0.375000 0.832812 +vt 0.375000 0.832812 +vt 0.375000 0.810938 +vt 0.368750 0.810938 +vt 0.368750 0.832812 +vt 0.387500 0.832812 +vt 0.387500 0.810938 +vt 0.381250 0.810938 +vt 0.381250 0.832812 +vt 0.362500 0.832812 +vt 0.362500 0.810938 +vt 0.368750 0.810938 +vt 0.368750 0.832812 +vt 0.381250 0.832812 +vt 0.375000 0.832812 +vt 0.375000 0.845312 +vt 0.381250 0.845312 +vt 0.368750 0.845312 +vt 0.375000 0.845312 +vt 0.500000 0.750000 +vt 0.625000 0.750000 +vt 0.625000 0.500000 +vt 0.500000 0.500000 +vt 0.750000 0.750000 +vt 0.625000 1.000000 +vt 0.750000 1.000000 +vt 0.875000 0.750000 +vt 0.750000 0.750000 +vt 0.750000 1.000000 +vt 0.875000 1.000000 +vt 0.750000 0.500000 +vt 0.875000 0.750000 +vt 0.875000 0.500000 +vt 1.000000 0.750000 +vt 1.000000 0.500000 +vt 0.032859 0.558649 +vt 0.032859 0.998468 +vt 0.362724 0.998468 +vt 0.362724 0.558649 +vt 0.032859 0.558649 +vt 0.362724 0.558649 +vt 0.362724 0.998468 +vt 0.032859 0.998468 +vt 0.039157 0.992309 +vt 0.039157 0.656118 +vt 0.060169 0.656118 +vt 0.060169 0.992309 +vt -0.003415 0.501261 +vt 0.368238 0.501261 +vt 0.368238 0.563203 +vt -0.003415 0.563203 +vt 0.368238 0.996797 +vt -0.003415 0.996797 +vt -0.003415 0.934855 +vt 0.368238 0.934855 +vt 0.394691 0.498800 +vt 0.394691 0.994336 +vt 0.363720 0.994336 +vt 0.363720 0.498800 +vt 0.032859 0.998468 +vt 0.032859 0.558649 +vt 0.362724 0.558649 +vt 0.362724 0.998468 +vt 0.032859 0.998468 +vt 0.362724 0.998468 +vt 0.362724 0.558649 +vt 0.032859 0.558649 +vt 0.039157 0.656118 +vt 0.039157 0.992309 +vt 0.060169 0.992309 +vt 0.060169 0.656118 +vt -0.003415 0.996797 +vt 0.368238 0.996797 +vt 0.368238 0.934855 +vt -0.003415 0.934855 +vt 0.368238 0.501261 +vt -0.003415 0.501261 +vt -0.003415 0.563203 +vt 0.368238 0.563203 +vt 0.394691 0.994336 +vt 0.394691 0.498800 +vt 0.363720 0.498800 +vt 0.363720 0.994336 +vn 1.0000 0.0000 0.0000 +vn 0.0000 1.0000 0.0000 +vn 0.0000 -1.0000 0.0000 +vn 0.0000 0.0000 -1.0000 +vn -1.0000 0.0000 0.0000 +vn 0.0000 -0.0000 1.0000 +vn -0.0872 -0.9962 0.0000 +vn 0.0872 0.9962 0.0000 +vn -0.9962 0.0872 0.0000 +vn 0.9962 -0.0872 0.0000 +vn -0.9962 -0.0872 0.0000 +vn 0.9962 0.0872 0.0000 +vn -0.0872 0.9962 0.0000 +vn 0.0872 -0.9962 0.0000 +vn -0.0175 0.9998 0.0000 +vn 0.0175 -0.9998 0.0000 +vn 0.9998 0.0175 0.0000 +vn 0.0042 0.0001 1.0000 +vn -0.0042 -0.0001 -1.0000 +vn -0.9998 -0.0175 0.0000 +vn 0.0175 0.9998 0.0000 +vn 0.9998 -0.0175 0.0000 +vn 0.0042 -0.0001 -1.0000 +vn -0.0042 0.0001 1.0000 +vn -0.9998 0.0175 0.0000 +vn -0.0175 -0.9998 0.0000 +vn -0.0036 -0.0000 1.0000 +vn 0.0036 0.0000 -1.0000 +vn -0.0036 0.0000 -1.0000 +vn 0.0036 -0.0000 1.0000 +vn 0.0302 0.1710 0.9848 +vn -0.0302 -0.1710 -0.9848 +vn 0.1710 0.9698 -0.1737 +vn 0.9848 -0.1736 0.0000 +vn -0.9848 0.1736 -0.0000 +vn -0.1710 -0.9698 0.1736 +vn -0.0302 0.1710 0.9848 +vn 0.0302 -0.1710 -0.9848 +vn -0.1710 0.9698 -0.1736 +vn 0.9848 0.1736 0.0000 +vn -0.9848 -0.1736 -0.0000 +vn 0.1710 -0.9698 0.1736 +usemtl None s off -f 1/1 3/2 4/3 2/4 -f 5/5 6/6 1/7 2/4 -f 8/6 7/5 4/8 3/9 -f 5/5 2/4 4/3 7/10 -f 7/10 8/11 6/12 5/5 -f 8/11 3/13 1/14 6/12 -f 9/15 11/16 12/17 10/18 -f 13/19 14/20 9/21 10/18 -f 12/22 11/23 16/20 15/19 -f 13/19 10/18 12/17 15/24 -f 14/22 13/19 15/24 16/25 -f 9/26 14/22 16/25 11/27 -f 17/28 18/24 19/29 20/30 -f 24/31 23/32 22/24 21/28 -f 23/31 24/14 20/13 19/33 -f 24/31 21/28 17/34 20/33 -f 21/28 22/30 18/35 17/34 -f 22/30 23/36 19/37 18/35 -f 27/30 31/35 30/37 26/36 -f 28/28 32/34 31/35 27/30 -f 25/31 29/33 32/34 28/28 -f 26/31 30/33 29/13 25/14 -f 25/31 28/28 27/24 26/32 -f 32/28 29/30 30/29 31/24 -f 40/38 33/39 34/40 39/41 -f 36/42 38/38 37/41 35/43 -f 39/44 37/45 38/46 40/39 -f 34/1 35/2 37/47 39/42 -f 40/38 38/48 36/46 33/39 -f 33/42 36/47 35/48 34/38 -f 45/38 46/41 42/40 41/39 -f 41/42 42/38 43/48 44/47 -f 45/38 41/39 44/46 47/48 -f 42/1 46/42 48/47 43/2 -f 46/44 45/39 47/46 48/45 -f 44/42 43/43 48/41 47/38 -f 53/49 54/50 49/51 50/52 -f 51/53 52/54 50/55 49/56 -f 55/57 51/49 49/58 54/59 -f 52/52 56/54 53/55 50/60 -f 56/49 55/52 54/60 53/58 -f 52/52 51/51 55/61 56/54 -f 64/49 61/58 62/60 63/52 -f 57/52 59/60 61/55 64/54 -f 63/57 62/59 60/58 58/49 -f 58/53 60/56 59/55 57/54 -f 61/49 59/52 60/51 62/50 -f 57/52 64/54 63/61 58/51 -f 65/15 66/18 68/17 67/16 -f 69/19 66/18 65/21 70/20 -f 68/22 71/19 72/20 67/23 -f 69/19 71/24 68/17 66/18 -f 70/22 72/25 71/24 69/19 -f 65/26 67/27 72/25 70/22 +f 9/15/7 10/16/7 11/17/7 12/18/7 +f 13/19/8 14/20/8 9/21/8 12/18/8 +f 15/22/9 16/23/9 11/24/9 10/25/9 +f 13/19/10 12/18/10 11/17/10 16/26/10 +f 16/26/11 15/27/11 14/28/11 13/19/11 +f 15/27/12 10/29/12 9/30/12 14/28/12 +f 17/31/7 18/32/7 19/33/7 20/34/7 +f 21/35/8 22/36/8 17/37/8 20/34/8 +f 19/38/9 18/39/9 23/40/9 24/41/9 +f 21/35/10 20/34/10 19/33/10 24/42/10 +f 22/43/11 21/35/11 24/42/11 23/44/11 +f 17/45/12 22/43/12 23/44/12 18/46/12 +f 25/47/13 26/48/13 27/49/13 28/50/13 +f 29/51/14 30/52/14 31/53/14 32/54/14 +f 30/55/15 29/56/15 28/57/15 27/58/15 +f 29/51/10 32/54/10 25/59/10 28/60/10 +f 32/54/16 31/61/16 26/62/16 25/59/16 +f 31/61/12 30/63/12 27/64/12 26/62/12 +f 33/65/12 34/66/12 35/67/12 36/68/12 +f 37/69/17 38/70/17 34/66/17 33/65/17 +f 39/71/10 40/72/10 38/70/10 37/69/10 +f 36/73/18 35/74/18 40/75/18 39/76/18 +f 39/71/19 37/69/19 33/77/19 36/78/19 +f 38/79/20 40/80/20 35/81/20 34/82/20 +f 41/83/21 42/84/21 43/85/21 44/86/21 +f 45/87/22 46/88/22 47/89/22 48/90/22 +f 44/91/23 47/92/23 46/93/23 41/94/23 +f 43/95/24 48/96/24 47/97/24 44/98/24 +f 41/83/25 46/99/25 45/100/25 42/84/25 +f 42/101/26 45/102/26 48/103/26 43/104/26 +f 49/105/27 50/106/27 51/107/27 52/108/27 +f 52/109/28 51/110/28 53/111/28 54/112/28 +f 49/105/29 52/108/29 54/113/29 55/114/29 +f 51/115/30 50/116/30 56/117/30 53/118/30 +f 50/119/31 49/120/31 55/121/31 56/122/31 +f 54/123/32 53/124/32 56/125/32 55/126/32 +f 57/127/9 58/128/9 59/129/9 60/130/9 +f 61/131/11 62/132/11 60/133/11 59/134/11 +f 63/135/33 61/136/33 59/137/33 58/138/33 +f 62/139/34 64/140/34 57/141/34 60/142/34 +f 64/143/7 63/144/7 58/145/7 57/146/7 +f 62/139/8 61/147/8 63/148/8 64/140/8 +f 65/149/11 66/150/11 67/151/11 68/152/11 +f 69/153/35 70/154/35 66/155/35 65/156/35 +f 68/157/36 67/158/36 71/159/36 72/160/36 +f 72/161/7 71/162/7 70/163/7 69/164/7 +f 66/165/9 70/166/9 71/167/9 67/168/9 +f 69/153/8 65/156/8 68/169/8 72/170/8 +f 73/171/11 74/172/11 75/173/11 76/174/11 +f 77/175/9 74/172/9 73/176/9 78/177/9 +f 75/178/8 79/179/8 80/180/8 76/181/8 +f 77/175/12 79/182/12 75/173/12 74/172/12 +f 78/183/7 80/184/7 79/182/7 77/175/7 +f 73/185/10 76/186/10 80/184/10 78/183/10 +f 85/187/37 81/188/37 86/189/37 82/190/37 +f 87/191/38 83/192/38 84/193/38 88/194/38 +f 81/195/39 85/196/39 87/197/39 88/198/39 +f 85/199/40 82/200/40 83/201/40 87/202/40 +f 86/203/41 81/204/41 88/205/41 84/206/41 +f 82/207/42 86/208/42 84/209/42 83/210/42 +f 93/211/43 89/212/43 94/213/43 90/214/43 +f 95/215/44 91/216/44 92/217/44 96/218/44 +f 89/219/45 93/220/45 95/221/45 96/222/45 +f 93/223/46 90/224/46 91/225/46 95/226/46 +f 94/227/47 89/228/47 96/229/47 92/230/47 +f 90/231/48 94/232/48 92/233/48 91/234/48 diff --git a/mods/ITEMS/mcl_banners/depends.txt b/mods/ITEMS/mcl_banners/depends.txt deleted file mode 100644 index d7ac71050..000000000 --- a/mods/ITEMS/mcl_banners/depends.txt +++ /dev/null @@ -1,6 +0,0 @@ -mcl_sounds? -mcl_core? -mcl_wool? -mcl_cauldrons? -doc? -screwdriver? diff --git a/mods/ITEMS/mcl_banners/description.txt b/mods/ITEMS/mcl_banners/description.txt deleted file mode 100644 index 5e748a2ea..000000000 --- a/mods/ITEMS/mcl_banners/description.txt +++ /dev/null @@ -1 +0,0 @@ -Adds decorative banners in different colors which can be emblazoned with patterns, offering a countless number of combinations. diff --git a/mods/ITEMS/mcl_banners/init.lua b/mods/ITEMS/mcl_banners/init.lua index ce76f47fd..a396caf7d 100644 --- a/mods/ITEMS/mcl_banners/init.lua +++ b/mods/ITEMS/mcl_banners/init.lua @@ -1,6 +1,11 @@ -local S = minetest.get_translator("mcl_banners") +local modname = minetest.get_current_modname() +local modpath = minetest.get_modpath(modname) +local S = minetest.get_translator(modname) local N = function(s) return s end +local mod_mcl_core = minetest.get_modpath("mcl_core") +local mod_doc = minetest.get_modpath("doc") + local node_sounds if minetest.get_modpath("mcl_sounds") then node_sounds = mcl_sounds.node_sound_wood_defaults() @@ -35,13 +40,56 @@ mcl_banners.colors = { ["unicolor_light_blue"] = {"light_blue", S("Light Blue Banner"), "mcl_wool:light_blue", "#4040CF", "mcl_dye:lightblue", N("Light Blue") }, } + +local pattern_names = { + "", + "border", + "bricks", + "circle", + "creeper", + "cross", + "curly_border", + "diagonal_up_left", + "diagonal_up_right", + "diagonal_right", + "diagonal_left", + "flower", + "gradient", + "gradient_up", + "half_horizontal_bottom", + "half_horizontal", + "half_vertical", + "half_vertical_right", + "thing", + "rhombus", + "skull", + "small_stripes", + "square_bottom_left", + "square_bottom_right", + "square_top_left", + "square_top_right", + "straight_cross", + "stripe_bottom", + "stripe_center", + "stripe_downleft", + "stripe_downright", + "stripe_left", + "stripe_middle", + "stripe_right", + "stripe_top", + "triangle_bottom", + "triangle_top", + "triangles_bottom", + "triangles_top", +} + local colors_reverse = {} for k,v in pairs(mcl_banners.colors) do colors_reverse["mcl_banners:banner_item_"..v[1]] = k end -- Add pattern/emblazoning crafting recipes -dofile(minetest.get_modpath("mcl_banners").."/patterncraft.lua") +dofile(modpath.."/patterncraft.lua") -- Overlay ratios (0-255) local base_color_ratio = 224 @@ -50,11 +98,11 @@ local layer_ratio = 255 local standing_banner_entity_offset = { x=0, y=-0.499, z=0 } local hanging_banner_entity_offset = { x=0, y=-1.7, z=0 } -local rotation_level_to_yaw = function(rotation_level) +local function rotation_level_to_yaw(rotation_level) return (rotation_level * (math.pi/8)) + math.pi end -local on_dig_banner = function(pos, node, digger) +local function on_dig_banner(pos, node, digger) -- Check protection local name = digger:get_player_name() if minetest.is_protected(pos, name) then @@ -73,7 +121,7 @@ local on_dig_banner = function(pos, node, digger) minetest.remove_node(pos) end -local on_destruct_banner = function(pos, hanging) +local function on_destruct_banner(pos, hanging) local offset, nodename if hanging then offset = hanging_banner_entity_offset @@ -93,15 +141,15 @@ local on_destruct_banner = function(pos, hanging) end end -local on_destruct_standing_banner = function(pos) +local function on_destruct_standing_banner(pos) return on_destruct_banner(pos, false) end -local on_destruct_hanging_banner = function(pos) +local function on_destruct_hanging_banner(pos) return on_destruct_banner(pos, true) end -local make_banner_texture = function(base_color, layers) +local function make_banner_texture(base_color, layers) local colorize if mcl_banners.colors[base_color] then colorize = mcl_banners.colors[base_color][4] @@ -131,7 +179,7 @@ local make_banner_texture = function(base_color, layers) end end -local spawn_banner_entity = function(pos, hanging, itemstack) +local function spawn_banner_entity(pos, hanging, itemstack) local banner if hanging then banner = minetest.add_entity(pos, "mcl_banners:hanging_banner") @@ -147,7 +195,7 @@ local spawn_banner_entity = function(pos, hanging, itemstack) local colorid = colors_reverse[itemstack:get_name()] banner:get_luaentity():_set_textures(colorid, layers) local mname = imeta:get_string("name") - if mname ~= nil and mname ~= "" then + if mname and mname ~= "" then banner:get_luaentity()._item_name = mname banner:get_luaentity()._item_description = imeta:get_string("description") end @@ -155,7 +203,7 @@ local spawn_banner_entity = function(pos, hanging, itemstack) return banner end -local respawn_banner_entity = function(pos, node, force) +local function respawn_banner_entity(pos, node, force) local hanging = node.name == "mcl_banners:hanging_banner" local offset if hanging then @@ -300,24 +348,72 @@ minetest.register_node("mcl_banners:hanging_banner", { end, }) +-- for pattern_name, pattern in pairs(patterns) do for colorid, colortab in pairs(mcl_banners.colors) do + for i, pattern_name in ipairs(pattern_names) do local itemid = colortab[1] local desc = colortab[2] local wool = colortab[3] local colorize = colortab[4] - local itemstring = "mcl_banners:banner_item_"..itemid - local inv - if colorize then - inv = "mcl_banners_item_base.png^(mcl_banners_item_overlay.png^[colorize:"..colorize..")" + local itemstring + if pattern_name == "" then + itemstring = "mcl_banners:banner_item_" .. itemid else - inv = "mcl_banners_item_base.png^mcl_banners_item_overlay.png" + itemstring = "mcl_banners:banner_preview" .. "_" .. pattern_name .. "_" .. itemid end + local inv + local base + local finished_banner + if pattern_name == "" then + if colorize then + -- Base texture with base color + base = "mcl_banners_item_base.png^(mcl_banners_item_overlay.png^[colorize:"..colorize..")^[resize:32x32" + else + base = "mcl_banners_item_base.png^mcl_banners_item_overlay.png^[resize:32x32" + end + finished_banner = base + else + -- Banner item preview background + base = "mcl_banners_item_base.png^(mcl_banners_item_overlay.png^[colorize:#CCCCCC)^[resize:32x32" + + desc = S("Preview Banner") + + local pattern = "mcl_banners_" .. pattern_name .. ".png" + local color = colorize + + -- Generate layer texture + + -- TODO: The layer texture in the icon is squished + -- weirdly because the width/height aspect ratio of + -- the banner icon is 1:1.5, whereas the aspect ratio + -- of the banner entity is 1:2. A solution would be to + -- redraw the pattern textures as low-resolution pixel + -- art and use that instead. + + local layer = "(([combine:20x40:-2,-2="..pattern.."^[resize:16x24^[colorize:"..color..":"..layer_ratio.."))" + + function escape(text) + return text:gsub("%^", "\\%^"):gsub(":", "\\:") -- :gsub("%(", "\\%("):gsub("%)", "\\%)") + end + + finished_banner = "[combine:32x32:0,0=" .. escape(base) .. ":8,4=" .. escape(layer) + end + + inv = finished_banner + -- Banner items. - -- This is the player-visible banner item. It comes in 16 base colors. + -- This is the player-visible banner item. It comes in 16 base colors with a lot of patterns. -- The multiple items are really only needed for the different item images. -- TODO: Combine the items into only 1 item. + local groups + if pattern_name == "" then + groups = { banner = 1, deco_block = 1, flammable = -1 } + else + groups = { not_in_creative_inventory = 1 } + end + minetest.register_craftitem(itemstring, { description = desc, _tt_help = S("Paintable decoration"), @@ -326,7 +422,7 @@ for colorid, colortab in pairs(mcl_banners.colors) do wield_image = inv, -- Banner group groups together the banner items, but not the nodes. -- Used for crafting. - groups = { banner = 1, deco_block = 1, flammable = -1 }, + groups = groups, stack_max = 16, on_place = function(itemstack, placer, pointed_thing) @@ -451,7 +547,7 @@ for colorid, colortab in pairs(mcl_banners.colors) do end meta:set_int("rotation_level", rotation_level) - if banner_entity ~= nil then + if banner_entity then banner_entity:set_yaw(final_yaw) end @@ -477,7 +573,7 @@ for colorid, colortab in pairs(mcl_banners.colors) do end, }) - if minetest.get_modpath("mcl_core") and minetest.get_modpath("mcl_wool") then + if mod_mcl_core and minetest.get_modpath("mcl_wool") and pattern_name == "" then minetest.register_craft({ output = itemstring, recipe = { @@ -488,13 +584,14 @@ for colorid, colortab in pairs(mcl_banners.colors) do }) end - if minetest.get_modpath("doc") then + if mod_doc then -- Add item to node alias doc.add_entry_alias("nodes", "mcl_banners:standing_banner", "craftitems", itemstring) end + end end -if minetest.get_modpath("doc") then +if mod_doc then -- Add item to node alias doc.add_entry_alias("nodes", "mcl_banners:standing_banner", "nodes", "mcl_banners:hanging_banner") end diff --git a/mods/ITEMS/mcl_banners/locale/mcl_banners.de.tr b/mods/ITEMS/mcl_banners/locale/mcl_banners.de.tr index 3bf65629b..d5077dc75 100644 --- a/mods/ITEMS/mcl_banners/locale/mcl_banners.de.tr +++ b/mods/ITEMS/mcl_banners/locale/mcl_banners.de.tr @@ -22,7 +22,7 @@ Magenta=magenta Orange Banner=Orange Banner Orange=orange Purple Banner=Violettes Banner -Purple=violett +Violet=violett Brown Banner=Braunes Banner Brown=braun Pink Banner=Rosa Banner diff --git a/mods/ITEMS/mcl_banners/locale/mcl_banners.fr.tr b/mods/ITEMS/mcl_banners/locale/mcl_banners.fr.tr index ee8772728..cadf37c37 100644 --- a/mods/ITEMS/mcl_banners/locale/mcl_banners.fr.tr +++ b/mods/ITEMS/mcl_banners/locale/mcl_banners.fr.tr @@ -46,7 +46,7 @@ You can copy the pattern of a banner by placing two banners of the same color in @1 Per Bend Sinister=Division oblique (@1) @1 Flower Charge=Figure Fleur (@1) @1 Gradient=Dégradé (@1) -@1 Base Gradient=Dégradé de couleurs (@1) +@1 Base Gradient=Dégradé de couleurs (@1) @1 Per Fess Inverted=Division inverse (@1) @1 Per Fess=Division (@1) @1 Per Pale=Division (@1) @@ -73,5 +73,5 @@ You can copy the pattern of a banner by placing two banners of the same color in @1 Base Indented=Pied dentelé (@1)t @1 Chief Indented=Tête dentelée (@1) And one additional layer=Et une couche supplémentaire -And @1 additional layer(s)=Et @1 couche(s) supplémentaire(s) +And @1 additional layers=Et @1 couches supplémentaires Paintable decoration=Décoration à peindre diff --git a/mods/ITEMS/mcl_banners/locale/mcl_banners.pl.tr b/mods/ITEMS/mcl_banners/locale/mcl_banners.pl.tr new file mode 100644 index 000000000..9a21c08cf --- /dev/null +++ b/mods/ITEMS/mcl_banners/locale/mcl_banners.pl.tr @@ -0,0 +1,77 @@ +# textdomain: mcl_banners +White Banner=Biały sztandar +White=Biały +Grey Banner=Szary sztandar +Grey=Szary +Light Grey Banner=Jasnoszary sztandar +Light Grey=Jasnoszary +Black Banner=Czarny sztandar +Black=Czarny +Red Banner=Czerwony sztandar +Red=Czerwony +Yellow Banner=Żółty sztandar +Yellow=Żółty +Green Banner=Zielony sztandar +Green=Zielony +Cyan Banner=Błękitny sztandar +Cyan=Błękitny +Blue Banner=Niebieski sztandar +Blue=Niebieski +Magenta Banner=Karmazynowy sztandar +Magenta=Karmazynowy +Orange Banner=Pomarańczowy sztandar +Orange=Pomarańczowy +Purple Banner=Fioletowy sztandar +Violet=Fioletowy +Brown Banner=Brązowy sztandar +Brown=Brązowy +Pink Banner=Różowy sztandar +Pink=Różowy +Lime Banner=Jasnozielony sztandar +Lime=Jasnozielony +Light Blue Banner=Jasnoniebieski sztandar +Light Blue=Jasnoniebieski +Banners are tall colorful decorative blocks. They can be placed on the floor and at walls. Banners can be emblazoned with a variety of patterns using a lot of dye in crafting.=Sztandary są kolorowymi dekoracyjnymi blokami. Mogą być postawione na ziemi i na ścianach. Sztandary mogą być upiększone różnymi wzorami przy użyciu sporej ilości farby podczas wytwarzania. +Use crafting to draw a pattern on top of the banner. Emblazoned banners can be emblazoned again to combine various patterns. You can draw up to 12 layers on a banner that way. If the banner includes a gradient, only 3 layers are possible.=Użyj wytwarzania aby narysować wzór na górze sztandaru. Upiększone sztandary mogą być upiększone ponownie by połączyć kilka wzorów. Możesz narysować do 12 warstw na sztandarze w ten sposób. Jeśli baner zawiera gradient tylko 3 warstwy są możliwe. +You can copy the pattern of a banner by placing two banners of the same color in the crafting grid—one needs to be emblazoned, the other one must be clean. Finally, you can use a banner on a cauldron with water to wash off its top-most layer.=Możesz skopiować wzór sztandaru kładąc dwa sztandary tego samego koloru w siatce wytwarzania. Jeden z nich musi być upiększony, drugi czysty. Możesz również użyć sztandar na kociołku z wodą aby zmyć górną warstwę. +@1 Bordure=@1 z obramowaniem +@1 Bricks=@1 murowany +@1 Roundel=@1 krąg +@1 Creeper Charge=@1 creeper +@1 Saltire=@1 skośny krzyż +@1 Bordure Indented=@1 z ząbkowanym obramowaniem +@1 Per Bend Inverted=@1 z lewą dolną połową +@1 Per Bend Sinister Inverted=@1 z prawą dolną połową +@1 Per Bend=@1 z prawą górną połową +@1 Per Bend Sinister=@1 z lewą górną połową +@1 Flower Charge=@1 kwiat +@1 Gradient=@1 gradient +@1 Base Gradient=@1 odwrócony +@1 Per Fess Inverted=@1 z dolną połową +@1 Per Fess=@1 z górną połową +@1 Per Pale=@1 z lewą połową +@1 Per Pale Inverted=@1 z prawą połową +@1 Thing Charge=@1 kształt czegoś +@1 Lozenge=@1 romb +@1 Skull Charge=@1 kształt czaszki +@1 Paly=@1 z pionowymi paskami +@1 Base Dexter Canton=@1 lewy dolny róg +@1 Base Sinister Canton=@1 prawy dolny róg +@1 Chief Dexter Canton=@1 lewy górny róg +@1 Chief Sinister Canton=@1 prawy górny róg +@1 Cross=@1 krzyż +@1 Base=@1 dolny +@1 Pale=@1 pionowy pasek +@1 Bend Sinister=@1 odwrócony skos +@1 Bend=@1 skos +@1 Pale Dexter=@1 lewy +@1 Fess=@1 poziomy pasek +@1 Pale Sinister=@1 prawy +@1 Chief=@1 górny +@1 Chevron=@1 dolny trójkąt +@1 Chevron Inverted=@1 górny trójkąt +@1 Base Indented=@1 ząbkowany dolny +@1 Chief Indented=@1 ząbkowany górny +And one additional layer=I jedna dodatkowa warstwa +And @1 additional layers=I @1 dodatkowych warstw +Paintable decoration=Dekoracja do malowania diff --git a/mods/ITEMS/mcl_banners/locale/mcl_banners.ru.tr b/mods/ITEMS/mcl_banners/locale/mcl_banners.ru.tr index 01993ae2f..a6cee5a67 100644 --- a/mods/ITEMS/mcl_banners/locale/mcl_banners.ru.tr +++ b/mods/ITEMS/mcl_banners/locale/mcl_banners.ru.tr @@ -73,5 +73,5 @@ You can copy the pattern of a banner by placing two banners of the same color in @1 Base Indented=@1 Инвертированный основной @1 Chief Indented=@1 Инвертированный главный And one additional layer=И один индивидуальный слой -And @1 additional layer(s)=И @1 дополнительный(х) слой(я,ёв) +And @1 additional layers=И @1 дополнительныйх слойёв Paintable decoration=Художественное украшение diff --git a/mods/ITEMS/mcl_banners/locale/template.txt b/mods/ITEMS/mcl_banners/locale/template.txt index 944a1a7ac..cb8ec0b0c 100644 --- a/mods/ITEMS/mcl_banners/locale/template.txt +++ b/mods/ITEMS/mcl_banners/locale/template.txt @@ -73,5 +73,5 @@ You can copy the pattern of a banner by placing two banners of the same color in @1 Base Indented= @1 Chief Indented= And one additional layer= -And @1 additional layer(s)= +And @1 additional layers= Paintable decoration= diff --git a/mods/ITEMS/mcl_banners/mod.conf b/mods/ITEMS/mcl_banners/mod.conf index 211266581..8c3117206 100644 --- a/mods/ITEMS/mcl_banners/mod.conf +++ b/mods/ITEMS/mcl_banners/mod.conf @@ -1 +1,5 @@ name = mcl_banners +author = 22i +description = Adds decorative banners in different colors which can be emblazoned with patterns, offering a countless number of combinations. +depends = mcl_colors +optional_depends = mcl_sounds, mcl_core, mcl_wool, mcl_cauldrons, doc, screwdriver diff --git a/mods/ITEMS/mcl_banners/patterncraft.lua b/mods/ITEMS/mcl_banners/patterncraft.lua index e1f05ff11..79778a665 100644 --- a/mods/ITEMS/mcl_banners/patterncraft.lua +++ b/mods/ITEMS/mcl_banners/patterncraft.lua @@ -1,4 +1,4 @@ -local S = minetest.get_translator("mcl_banners") +local S = minetest.get_translator(minetest.get_current_modname()) local N = function(s) return s end -- Pattern crafting. This file contains the code for crafting all the @@ -8,9 +8,6 @@ local N = function(s) return s end -- Maximum number of layers which can be put on a banner by crafting. local max_layers_crafting = 12 --- Maximum number of layers when banner includes a gradient (workaround, see below). -local max_layers_gradient = 3 - -- Max. number lines in the descriptions for the banner layers. -- This is done to avoid huge tooltips. local max_layer_lines = 6 @@ -253,8 +250,13 @@ for colorid, colortab in pairs(mcl_banners.colors) do dye_to_colorid_mapping[colortab[5]] = colorid end +local dye_to_itemid_mapping = {} +for colorid, colortab in pairs(mcl_banners.colors) do + dye_to_itemid_mapping[colortab[5]] = colortab[1] +end + -- Create a banner description containing all the layer names -mcl_banners.make_advanced_banner_description = function(description, layers) +function mcl_banners.make_advanced_banner_description(description, layers) if layers == nil or #layers == 0 then -- No layers, revert to default return "" @@ -281,7 +283,7 @@ mcl_banners.make_advanced_banner_description = function(description, layers) -- Final string concatenations: Just a list of strings local append = table.concat(layerstrings, "\n") - description = description .. "\n" .. minetest.colorize("#8F8F8F", append) + description = description .. "\n" .. minetest.colorize(mcl_colors.GRAY, append) return description end end @@ -291,7 +293,7 @@ Parameters same as for minetest.register_craft_predict. craft_predict is set true when called from minetest.craft_preview, in this case, this function MUST NOT change the crafting grid. ]] -local banner_pattern_craft = function(itemstack, player, old_craft_grid, craft_inv, craft_predict) +local function banner_pattern_craft(itemstack, player, old_craft_grid, craft_inv, craft_predict) if minetest.get_item_group(itemstack:get_name(), "banner") ~= 1 then return end @@ -393,16 +395,6 @@ local banner_pattern_craft = function(itemstack, player, old_craft_grid, craft_i if #layers >= max_layers_crafting then return ItemStack("") end - -- Lower layer limit when banner includes any gradient. - -- Workaround to circumvent Minetest bug (https://github.com/minetest/minetest/issues/6210) - -- TODO: Remove this restriction when bug #6210 is fixed. - if #layers >= max_layers_gradient then - for l=1, #layers do - if layers[l].pattern == "gradient" or layers[l].pattern == "gradient_up" then - return ItemStack("") - end - end - end local matching_pattern local max_i = player:get_inventory():get_size("craft") @@ -421,7 +413,6 @@ local banner_pattern_craft = function(itemstack, player, old_craft_grid, craft_i if (pitem == d and minetest.get_item_group(itemname, "dye") == 0) or (pitem == e and itemname ~= e and inv_i ~= banner_index) then pattern_ok = false break - else end inv_i = inv_i + 1 if inv_i > max_i then @@ -491,7 +482,14 @@ local banner_pattern_craft = function(itemstack, player, old_craft_grid, craft_i imeta:set_string("description", ometa:get_string("description")) imeta:set_string("name", mname) end - return itemstack + + if craft_predict then + local itemid_prefix = "mcl_banners:banner_preview" + local coloritemid = dye_to_itemid_mapping[dye] + return ItemStack(itemid_prefix .. "_" .. matching_pattern .. "_" .. coloritemid) + else + return itemstack + end end minetest.register_craft_predict(function(itemstack, player, old_craft_grid, craft_inv) diff --git a/mods/ITEMS/mcl_beds/README.txt b/mods/ITEMS/mcl_beds/README.txt index cda6ebd92..34b493702 100644 --- a/mods/ITEMS/mcl_beds/README.txt +++ b/mods/ITEMS/mcl_beds/README.txt @@ -12,15 +12,7 @@ Authors of media (textures) BlockMen (CC BY-SA 3.0) This mod adds a bed to Minetest which allows to skip the night. -To sleep, rightclick the bed. If playing in singleplayer mode the night gets skipped -immediately. If playing multiplayer you get shown how many other players are in bed too, -if all players are sleeping the night gets skipped. The night skip can be forced if more -than 50% of the players are lying in bed and use this option. - -Another feature is a controlled respawning. If you have slept in bed (not just lying in -it) your respawn point is set to the beds location and you will respawn there after +To sleep, rightclick the bed. +Another feature is a controlled respawning. If you have slept in bed your respawn point is set to the beds location and you will respawn there after death. -You can disable the respawn at beds by setting "enable_bed_respawn = false" in -minetest.conf. -You can disable the night skip feature by setting "enable_bed_night_skip = false" in -minetest.conf or by using the /set command in-game. +Use the mcl_playersSleepingPercentage setting to enable/disable night skipping or set a percentage of how many players need to sleep to skip the night. \ No newline at end of file diff --git a/mods/ITEMS/mcl_beds/api.lua b/mods/ITEMS/mcl_beds/api.lua index 7bc86d175..85873f3c6 100644 --- a/mods/ITEMS/mcl_beds/api.lua +++ b/mods/ITEMS/mcl_beds/api.lua @@ -1,23 +1,97 @@ -local S = minetest.get_translator("mcl_beds") +local S = minetest.get_translator(minetest.get_current_modname()) + +local minetest_get_node = minetest.get_node +local minetest_get_node_or_nil = minetest.get_node_or_nil +local minetest_remove_node = minetest.remove_node +local minetest_facedir_to_dir = minetest.facedir_to_dir +local minetest_add_item = minetest.add_item +local vector_add = vector.add +local vector_subtract = vector.subtract + +local function get_bed_next_node(pos, node) + local node = node or minetest_get_node_or_nil(pos) + if not node then return end + + local dir = minetest_facedir_to_dir(node.param2) + + local pos2, bottom + if string.sub(node.name, -4) == "_top" then + pos2 = vector_subtract(pos, dir) + else + pos2 = vector_add(pos, dir) + bottom = true + end + + local node2 = minetest_get_node(pos2) + return pos2, node2, bottom, dir +end + +local function rotate(pos, node, user, mode, new_param2) + if mode ~= screwdriver.ROTATE_FACE then + return false + end + + local p, node2, bottom = get_bed_next_node(pos, node) + if not node2 then return end + + local name = node2.name + if not minetest.get_item_group(name, "bed") == 2 or not node.param2 == node2.param2 then return false end + + if bottom then + name = string.sub(name, 1, -5) + else + name = string.sub(name, 1, -8) + end + + if minetest.is_protected(p, user:get_player_name()) then + minetest.record_protection_violation(p, user:get_player_name()) + return false + end + + local newp + local new_dir = minetest_facedir_to_dir(new_param2) + + if bottom then + newp = vector_add(pos, new_dir) + else + newp = vector_subtract(pos, new_dir) + end + + local node3 = minetest_get_node_or_nil(newp) + if not node3 then return false end + + local node_def = minetest.registered_nodes[node3.name] + if not node_def or not node_def.buildable_to then return false end + + if minetest.is_protected(newp, user:get_player_name()) then + minetest.record_protection_violation(newp, user:get_player_name()) + return false + end + + node.param2 = new_param2 + -- do not remove_node here - it will trigger destroy_bed() + minetest.swap_node(p, {name = "air"}) + minetest.swap_node(pos, node) + minetest.swap_node(newp, {name = name .. (bottom and "_top" or "_bottom"), param2 = new_param2}) + + return true +end + local function destruct_bed(pos, oldnode) - local node = oldnode or minetest.get_node(pos) + local node = oldnode or minetest_get_node_or_nil(pos) if not node then return end - local dir = minetest.facedir_to_dir(node.param2) - local pos2, node2 - if string.sub(node.name, -4) == "_top" then - pos2 = vector.subtract(pos, dir) - node2 = minetest.get_node(pos2) - if node2 and string.sub(node2.name, -7) == "_bottom" then - minetest.remove_node(pos2) - end - minetest.check_for_falling(pos) - elseif string.sub(node.name, -7) == "_bottom" then - minetest.add_item(pos, node.name) - pos2 = vector.add(pos, dir) - node2 = minetest.get_node(pos2) + + local pos2, node2, bottom = get_bed_next_node(pos, oldnode) + + if bottom then + minetest_add_item(pos, node.name) if node2 and string.sub(node2.name, -4) == "_top" then - minetest.remove_node(pos2) + minetest_remove_node(pos2) + end + else + if node2 and string.sub(node2.name, -7) == "_bottom" then + minetest_remove_node(pos2) end end end @@ -76,11 +150,12 @@ function mcl_beds.register_bed(name, def) wield_image = def.wield_image, drawtype = "nodebox", tiles = def.tiles.bottom, + use_texture_alpha = minetest.features.use_texture_alpha_string_modes and "opaque" or false, paramtype = "light", paramtype2 = "facedir", is_ground_content = false, stack_max = 1, - groups = {handy=1, flammable = 3, bed = 1, dig_by_piston=1, bouncy=66, fall_damage_add_percent=-50, deco_block = 1, flammable=-1}, + groups = {handy=1, bed = 1, dig_by_piston=1, bouncy=66, fall_damage_add_percent=-50, deco_block = 1, flammable=-1}, _mcl_hardness = 0.2, _mcl_blast_resistance = 1, sounds = def.sounds or default_sounds, @@ -88,11 +163,12 @@ function mcl_beds.register_bed(name, def) selection_box = selection_box_bottom, collision_box = collision_box_bottom, drop = "", + node_placement_prediction = "", on_place = function(itemstack, placer, pointed_thing) local under = pointed_thing.under -- Use pointed node's on_rightclick function first, if present - local node = minetest.get_node(under) + local node = minetest_get_node(under) if placer and not placer:get_player_control().sneak then if minetest.registered_nodes[node.name] and minetest.registered_nodes[node.name].on_rightclick then return minetest.registered_nodes[node.name].on_rightclick(pointed_thing.under, node, placer, itemstack) or itemstack @@ -100,7 +176,7 @@ function mcl_beds.register_bed(name, def) end local pos - local undername = minetest.get_node(under).name + local undername = minetest_get_node(under).name if minetest.registered_items[undername] and minetest.registered_items[undername].buildable_to then pos = under else @@ -113,13 +189,13 @@ function mcl_beds.register_bed(name, def) return itemstack end - local node_def = minetest.registered_nodes[minetest.get_node(pos).name] + local node_def = minetest.registered_nodes[minetest_get_node(pos).name] if not node_def or not node_def.buildable_to then return itemstack end local dir = minetest.dir_to_facedir(placer:get_look_dir()) - local botpos = vector.add(pos, minetest.facedir_to_dir(dir)) + local botpos = vector_add(pos, minetest_facedir_to_dir(dir)) if minetest.is_protected(botpos, placer:get_player_name()) and not minetest.check_player_privs(placer, "protection_bypass") then @@ -127,7 +203,7 @@ function mcl_beds.register_bed(name, def) return itemstack end - local botdef = minetest.registered_nodes[minetest.get_node(botpos).name] + local botdef = minetest.registered_nodes[minetest_get_node(botpos).name] if not botdef or not botdef.buildable_to then return itemstack end @@ -150,38 +226,7 @@ function mcl_beds.register_bed(name, def) return itemstack end, - on_rotate = function(pos, node, user, mode, new_param2) - local dir = minetest.facedir_to_dir(node.param2) - local p = vector.add(pos, dir) - local node2 = minetest.get_node_or_nil(p) - if not node2 or not minetest.get_item_group(node2.name, "bed") == 2 or - not node.param2 == node2.param2 then - return false - end - if minetest.is_protected(p, user:get_player_name()) then - minetest.record_protection_violation(p, user:get_player_name()) - return false - end - if mode ~= screwdriver.ROTATE_FACE then - return false - end - local newp = vector.add(pos, minetest.facedir_to_dir(new_param2)) - local node3 = minetest.get_node_or_nil(newp) - local node_def = node3 and minetest.registered_nodes[node3.name] - if not node_def or not node_def.buildable_to then - return false - end - if minetest.is_protected(newp, user:get_player_name()) then - minetest.record_protection_violation(newp, user:get_player_name()) - return false - end - node.param2 = new_param2 - -- do not remove_node here - it will trigger destroy_bed() - minetest.set_node(p, {name = "air"}) - minetest.set_node(pos, node) - minetest.set_node(newp, {name = name .. "_top", param2 = new_param2}) - return true - end, + on_rotate = rotate, }) local node_box_top, selection_box_top, collision_box_top @@ -198,6 +243,7 @@ function mcl_beds.register_bed(name, def) minetest.register_node(name .. "_top", { drawtype = "nodebox", tiles = def.tiles.top, + use_texture_alpha = minetest.features.use_texture_alpha_string_modes and "opaque" or false, paramtype = "light", paramtype2 = "facedir", is_ground_content = false, @@ -214,7 +260,7 @@ function mcl_beds.register_bed(name, def) mcl_beds.on_rightclick(pos, clicker, true) return itemstack end, - on_rotate = false, + on_rotate = rotate, after_destruct = destruct_bed, }) diff --git a/mods/ITEMS/mcl_beds/beds.lua b/mods/ITEMS/mcl_beds/beds.lua index 8f41c7a3f..5043c85d2 100644 --- a/mods/ITEMS/mcl_beds/beds.lua +++ b/mods/ITEMS/mcl_beds/beds.lua @@ -1,4 +1,4 @@ -local S = minetest.get_translator("mcl_beds") +local S = minetest.get_translator(minetest.get_current_modname()) local mod_doc = minetest.get_modpath("doc") local nodebox = { diff --git a/mods/ITEMS/mcl_beds/depends.txt b/mods/ITEMS/mcl_beds/depends.txt deleted file mode 100644 index c7c874fd1..000000000 --- a/mods/ITEMS/mcl_beds/depends.txt +++ /dev/null @@ -1,9 +0,0 @@ -playerphysics -mcl_sounds? -mcl_worlds? -mcl_wool? -mcl_dye? -mcl_explosions? -mcl_weather? -mcl_spawn? -doc? diff --git a/mods/ITEMS/mcl_beds/functions.lua b/mods/ITEMS/mcl_beds/functions.lua index 8b1b82dfc..b8478fc1f 100644 --- a/mods/ITEMS/mcl_beds/functions.lua +++ b/mods/ITEMS/mcl_beds/functions.lua @@ -1,49 +1,47 @@ -local S = minetest.get_translator("mcl_beds") +local S = minetest.get_translator(minetest.get_current_modname()) local F = minetest.formspec_escape -local pi = math.pi +local math = math +local vector = vector local player_in_bed = 0 local is_sp = minetest.is_singleplayer() -local weather_mod = minetest.get_modpath("mcl_weather") ~= nil -local explosions_mod = minetest.get_modpath("mcl_explosions") ~= nil +local weather_mod = minetest.get_modpath("mcl_weather") +local explosions_mod = minetest.get_modpath("mcl_explosions") +local spawn_mod = minetest.get_modpath("mcl_spawn") +local worlds_mod = minetest.get_modpath("mcl_worlds") -- Helper functions local function get_look_yaw(pos) local n = minetest.get_node(pos) - if n.param2 == 1 then - return pi / 2, n.param2 - elseif n.param2 == 3 then - return -pi / 2, n.param2 - elseif n.param2 == 0 then - return pi, n.param2 + local param = n.param2 + if param == 1 then + return math.pi / 2, param + elseif param == 3 then + return -math.pi / 2, param + elseif param == 0 then + return math.pi, param else - return 0, n.param2 + return 0, param end end +local function players_in_bed_setting() + return tonumber(minetest.settings:get("mcl_playersSleepingPercentage")) or 100 +end + local function is_night_skip_enabled() - local enable_night_skip = minetest.settings:get_bool("enable_bed_night_skip") - if enable_night_skip == nil then - enable_night_skip = true - end - return enable_night_skip + return players_in_bed_setting() <= 100 end local function check_in_beds(players) - local in_bed = mcl_beds.player if not players then players = minetest.get_connected_players() end - - for n, player in ipairs(players) do - local name = player:get_player_name() - if not in_bed[name] then - return false - end + if player_in_bed <= 0 then + return false end - - return #players > 0 + return players_in_bed_setting() <= (player_in_bed * 100) / #players end -- These monsters do not prevent sleep @@ -76,7 +74,7 @@ local function lay_down(player, pos, bed_pos, state, skip) bed_center = {x = bed_pos.x - dir.x/2, y = bed_pos.y + 0.1, z = bed_pos.z - dir.z/2} -- save respawn position when entering bed - if minetest.get_modpath("mcl_spawn") and mcl_spawn.set_spawn_pos(player, bed_pos, false) then + if spawn_mod and mcl_spawn.set_spawn_pos(player, bed_pos, nil) then minetest.chat_send_player(name, S("New respawn position set!")) end @@ -86,7 +84,7 @@ local function lay_down(player, pos, bed_pos, state, skip) end for _, other_pos in pairs(mcl_beds.bed_pos) do - if vector.distance(bed_pos, other_pos) < 0.1 then + if vector.distance(bed_pos2, other_pos) < 0.1 then return false, S("This bed is already occupied!") end end @@ -102,9 +100,8 @@ local function lay_down(player, pos, bed_pos, state, skip) -- No sleeping if monsters nearby. -- The exceptions above apply. -- Zombie pigmen only prevent sleep while they are hostle. - local objs = minetest.get_objects_inside_radius(bed_pos, 8) - for _, obj in ipairs(objs) do - if obj ~= nil and not obj:is_player() then + for _, obj in pairs(minetest.get_objects_inside_radius(bed_pos, 8)) do + if obj and not obj:is_player() then local ent = obj:get_luaentity() local mobname = ent.name local def = minetest.registered_entities[mobname] @@ -121,7 +118,7 @@ local function lay_down(player, pos, bed_pos, state, skip) -- stand up if state ~= nil and not state then local p = mcl_beds.pos[name] or nil - if mcl_beds.player[name] ~= nil then + if mcl_beds.player[name] then mcl_beds.player[name] = nil player_in_bed = player_in_bed - 1 end @@ -156,7 +153,7 @@ local function lay_down(player, pos, bed_pos, state, skip) local def2 = minetest.registered_nodes[n2.name] if def1.walkable or def2.walkable then return false, S("You can't sleep, the bed is obstructed!") - elseif (def1.damage_per_second ~= nil and def1.damage_per_second > 0) or (def2.damage_per_second ~= nil and def2.damage_per_second > 0) then + elseif (def1.damage_per_second and def1.damage_per_second > 0) or (def2.damage_per_second and def2.damage_per_second > 0) then return false, S("It's too dangerous to sleep here!") end @@ -169,7 +166,7 @@ local function lay_down(player, pos, bed_pos, state, skip) mcl_beds.player[name] = 1 mcl_beds.pos[name] = pos - mcl_beds.bed_pos[name] = bed_pos + mcl_beds.bed_pos[name] = bed_pos2 player_in_bed = player_in_bed + 1 -- physics, eye_offset, etc player:set_eye_offset({x = 0, y = -13, z = 0}, {x = 0, y = 0, z = 0}) @@ -196,7 +193,7 @@ end local function update_formspecs(finished, ges) local ges = ges or #minetest.get_connected_players() local form_n = "size[12,5;true]" - local all_in_bed = ges == player_in_bed + local all_in_bed = players_in_bed_setting() <= (player_in_bed * 100) / ges local night_skip = is_night_skip_enabled() local button_leave = "button_exit[4,3;4,0.75;leave;"..F(S("Leave bed")).."]" local button_abort = "button_exit[4,3;4,0.75;leave;"..F(S("Abort sleep")).."]" @@ -219,7 +216,13 @@ local function update_formspecs(finished, ges) form_n = form_n .. bg_sleep form_n = form_n .. button_abort else - text = text .. "\n" .. S("You will fall asleep when all players are in bed.") + local comment = "You will fall asleep when " + if players_in_bed_setting() == 100 then + comment = S(comment .. "all players are in bed.") + else + comment = S(comment .. "@1% of all players are in bed.", players_in_bed_setting()) + end + text = text .. "\n" .. comment form_n = form_n .. bg_presleep form_n = form_n .. button_leave end @@ -272,7 +275,7 @@ end -- Throw a player out of bed function mcl_beds.kick_player(player) local name = player:get_player_name() - if mcl_beds.player[name] ~= nil then + if mcl_beds.player[name] then lay_down(player, nil, nil, false) update_formspecs(false) minetest.close_formspec(name, "mcl_beds_form") @@ -298,11 +301,15 @@ function mcl_beds.on_rightclick(pos, player, is_top) if player:get_meta():get_string("mcl_beds:sleeping") == "true" then return end - if minetest.get_modpath("mcl_worlds") then + if worlds_mod then local dim = mcl_worlds.pos_to_dimension(pos) if dim == "nether" or dim == "end" then -- Bed goes BOOM in the Nether or End. + local node = minetest.get_node(pos) + local dir = minetest.facedir_to_dir(node.param2) + minetest.remove_node(pos) + minetest.remove_node(string.sub(node.name, -4) == "_top" and vector.subtract(pos, dir) or vector.add(pos, dir)) if explosions_mod then mcl_explosions.explode(pos, 5, {drop_chance = 1.0, fire = true}) end @@ -314,17 +321,17 @@ function mcl_beds.on_rightclick(pos, player, is_top) -- move to bed if not mcl_beds.player[name] then - local success, message + local message if is_top then - success, message = lay_down(player, ppos, pos) + message = select(2, lay_down(player, ppos, pos)) else local node = minetest.get_node(pos) local dir = minetest.facedir_to_dir(node.param2) local other = vector.add(pos, dir) - success, message = lay_down(player, ppos, other) + message = select(2, lay_down(player, ppos, other)) end if message then - mcl_tmp_message.message(player, message) + mcl_title.set(player, "actionbar", {text=message, color="white", stay=60}) end else lay_down(player, nil, nil, false) @@ -343,7 +350,6 @@ function mcl_beds.on_rightclick(pos, player, is_top) end end - -- Callbacks minetest.register_on_joinplayer(function(player) local meta = player:get_meta() @@ -358,6 +364,7 @@ minetest.register_on_joinplayer(function(player) end) minetest.register_on_leaveplayer(function(player) + lay_down(player, nil, nil, false, true) local players = minetest.get_connected_players() local name = player:get_player_name() for n, player in ipairs(players) do diff --git a/mods/ITEMS/mcl_beds/locale/mcl_beds.de.tr b/mods/ITEMS/mcl_beds/locale/mcl_beds.de.tr index 16592115e..eb6967941 100644 --- a/mods/ITEMS/mcl_beds/locale/mcl_beds.de.tr +++ b/mods/ITEMS/mcl_beds/locale/mcl_beds.de.tr @@ -37,5 +37,6 @@ Players in bed: @1/@2=Spieler im Bett: @1/@2 Note: Night skip is disabled.=Anmerkung: Überspringen der Nacht deaktiviert. You're sleeping.=Sie schlafen. You will fall asleep when all players are in bed.=Sie werden einschlafen, wenn alle Spieler im Bett sind. +You will fall asleep when @1% of all players are in bed.=Sie werden einschlafen, wenn @1% der Spieler im Bett sind. You're in bed.=Sie sind im Bett. Allows you to sleep=Zum Einschafen diff --git a/mods/ITEMS/mcl_beds/locale/mcl_beds.pl.tr b/mods/ITEMS/mcl_beds/locale/mcl_beds.pl.tr new file mode 100644 index 000000000..3a1d8f6ce --- /dev/null +++ b/mods/ITEMS/mcl_beds/locale/mcl_beds.pl.tr @@ -0,0 +1,41 @@ +# textdomain: mcl_beds +Beds allow you to sleep at night and make the time pass faster.=Łóżka pozwalają na spanie w nocy i sprawiają, że czas płynie szybciej. +To use a bed, stand close to it and right-click the bed to sleep in it. Sleeping only works when the sun sets, at night or during a thunderstorm. The bed must also be clear of any danger.=Aby użyć łóżka stań blisko niego i kliknij je prawym przyciskiem myszy aby na nim zasnąć. Spać można tylko przy zachodzie słońca, w nocy lub podczas burz. Łóżko nie może być również narażone na niebezpieczeństwo. +You have heard of other worlds in which a bed would set the start point for your next life. But this world is not one of them.=Słyszałaś o światach w których łóżko byłoby twoim punktem wyjścia w następnym życiu. Ten świat nie jest jednym z nich. +By using a bed, you set the starting point for your next life. If you die, you will start your next life at this bed, unless it is obstructed or destroyed.=Korzystając z łóżka ustawiasz punkt wyjścia w następnym życiu. Jeśli umrzesz, odrodzisz się przy tym łóżku chyba, że zostanie zniszczone lub zawalone. +In this world, going to bed won't skip the night, but it will skip thunderstorms.=W tym świecie pójście do łóżka nie ominie nocy, jednak może pominąć burze. +Sleeping allows you to skip the night. The night is skipped when all players in this world went to sleep. The night is skipped after sleeping for a few seconds. Thunderstorms can be skipped in the same manner.=Spanie pozwala pominąć noc. Noc jest pomijana gdy wszyscy gracze w tym świecie pójdą spać. Jest ona pomijana po kilku sekundach. Burze można pomijać w ten sam sposób. +Bed=Łóżko +Red Bed=Czerwone łóżko +Blue Bed=Niebieskie łóżko +Cyan Bed=Błękitne łóżko +Grey Bed=Szare łóżko +Light Grey Bed=Jasnoszare łóżko +Black Bed=Czarne łóżko +Yellow Bed=Żółte łóżko +Green Bed=Zielone łóżko +Magenta Bed=Karmazynowe łóżko +Orange Bed=Pomarańczowe łóżko +Purple Bed=Fioletowe łóżko +Brown Bed=Brązowe łóżko +Pink Bed=Różowe łóżko +Lime Bed=Jasnozielone łóżko +Light Blue Bed=Jasnoniebieskie łóżko +White Bed=Białe łóżko +You can't sleep, the bed's too far away!=Nie możesz spać, łóżko jest zbyt daleko! +This bed is already occupied!=To łóżko jest zajęte! +You have to stop moving before going to bed!=Musisz przestać się poruszać przed pójściem do spania! +You can't sleep now, monsters are nearby!=Nie możesz spać, w pobliżu są potwory! +You can't sleep, the bed is obstructed!=Nie możesz spać, łóżko jest zawalone! +It's too dangerous to sleep here!=Tu jest zbyt niebezpiecznie by spać! +New respawn position set! But you can only sleep at night or during a thunderstorm.=Nowa pozycja do odrodzenia ustawiona! Ale możesz spać tylko podczas nocy, bądź burzy. +You can only sleep at night or during a thunderstorm.=Możesz spać tylko podczas nocy, bądź burzy. +New respawn position set!=Nowa pozycja odradzania ustawiona! +Leave bed=Opuść łóżka +Abort sleep=Przerwij sen +Players in bed: @1/@2=Graczy w łóżkach: @1/@2 +Note: Night skip is disabled.=Uwaga: Pomijanie nocy wyłączone. +You're sleeping.=Śpisz. +You will fall asleep when all players are in bed.=Zaśniesz gdy wszyscy gracze będą w łóżkach. +You're in bed.=Jesteś w łóżku. +Allows you to sleep=Pozwala spać diff --git a/mods/ITEMS/mcl_beds/locale/template.txt b/mods/ITEMS/mcl_beds/locale/template.txt index 8301dfa33..5525bd91b 100644 --- a/mods/ITEMS/mcl_beds/locale/template.txt +++ b/mods/ITEMS/mcl_beds/locale/template.txt @@ -37,5 +37,6 @@ Players in bed: @1/@2= Note: Night skip is disabled.= You're sleeping.= You will fall asleep when all players are in bed.= +You will fall asleep when @1% of all players are in bed.= You're in bed.= Allows you to sleep= diff --git a/mods/ITEMS/mcl_beds/mod.conf b/mods/ITEMS/mcl_beds/mod.conf index 62645f3b4..c3378d1f0 100644 --- a/mods/ITEMS/mcl_beds/mod.conf +++ b/mods/ITEMS/mcl_beds/mod.conf @@ -1 +1,5 @@ name = mcl_beds +author = BlockMen +description = +depends = playerphysics +optional_depends = mcl_sounds, mcl_worlds, mcl_wool, mcl_dye, mcl_explosions, mcl_weather, mcl_spawn, doc diff --git a/mods/ITEMS/mcl_books/depends.txt b/mods/ITEMS/mcl_books/depends.txt deleted file mode 100644 index e1ecc48c7..000000000 --- a/mods/ITEMS/mcl_books/depends.txt +++ /dev/null @@ -1,5 +0,0 @@ -mcl_init? -mcl_core? -mcl_sounds? -mcl_mobitems? -mcl_dye? diff --git a/mods/ITEMS/mcl_books/init.lua b/mods/ITEMS/mcl_books/init.lua index 45208c413..e549ef6f3 100644 --- a/mods/ITEMS/mcl_books/init.lua +++ b/mods/ITEMS/mcl_books/init.lua @@ -1,4 +1,4 @@ -local S =minetest.get_translator("mcl_books") +local S = minetest.get_translator(minetest.get_current_modname()) local max_text_length = 4500 -- TODO: Increase to 12800 when scroll bar was added to written book local max_title_length = 64 @@ -21,16 +21,16 @@ minetest.register_craftitem("mcl_books:book", { if minetest.get_modpath("mcl_core") and minetest.get_modpath("mcl_mobitems") then minetest.register_craft({ - type = 'shapeless', - output = 'mcl_books:book', - recipe = { 'mcl_core:paper', 'mcl_core:paper', 'mcl_core:paper', 'mcl_mobitems:leather', } + type = "shapeless", + output = "mcl_books:book", + recipe = { "mcl_core:paper", "mcl_core:paper", "mcl_core:paper", "mcl_mobitems:leather", } }) end -- Get the included text out of the book item -- itemstack: Book item -- meta: Meta of book (optional) -local get_text = function(itemstack) +local function get_text(itemstack) -- Grab the text local meta = itemstack:get_meta() local text = meta:get_string("text") @@ -56,7 +56,7 @@ local get_text = function(itemstack) return text end -local make_description = function(title, author, generation) +local function make_description(title, author, generation) local desc if generation == 0 then desc = S("“@1”", title) @@ -67,15 +67,15 @@ local make_description = function(title, author, generation) else desc = S("Tattered Book") end - desc = desc .. "\n" .. minetest.colorize("#AAAAAA", S("by @1", author)) + desc = desc .. "\n" .. minetest.colorize(mcl_colors.GRAY, S("by @1", author)) return desc end -local cap_text_length = function(text, max_length) +local function cap_text_length(text, max_length) return string.sub(text, 1, max_length) end -local write = function(itemstack, user, pointed_thing) +local function write(itemstack, user, pointed_thing) -- Call on_rightclick if the pointed node defines it if pointed_thing.type == "node" then local node = minetest.get_node(pointed_thing.under) @@ -96,7 +96,7 @@ local write = function(itemstack, user, pointed_thing) minetest.show_formspec(user:get_player_name(), "mcl_books:writable_book", formspec) end -local read = function(itemstack, user, pointed_thing) +local function read(itemstack, user, pointed_thing) -- Call on_rightclick if the pointed node defines it if pointed_thing.type == "node" then local node = minetest.get_node(pointed_thing.under) @@ -238,11 +238,9 @@ minetest.register_craft_predict(function(itemstack, player, old_craft_grid, craf end local original - local index for i = 1, player:get_inventory():get_size("craft") do if old_craft_grid[i]:get_name() == "mcl_books:written_book" then original = old_craft_grid[i] - index = i end end if not original then @@ -349,11 +347,11 @@ minetest.register_node("mcl_books:bookshelf", { }) minetest.register_craft({ - output = 'mcl_books:bookshelf', + output = "mcl_books:bookshelf", recipe = { - {'group:wood', 'group:wood', 'group:wood'}, - {'mcl_books:book', 'mcl_books:book', 'mcl_books:book'}, - {'group:wood', 'group:wood', 'group:wood'}, + {"group:wood", "group:wood", "group:wood"}, + {"mcl_books:book", "mcl_books:book", "mcl_books:book"}, + {"group:wood", "group:wood", "group:wood"}, } }) diff --git a/mods/ITEMS/mcl_books/locale/mcl_books.pl.tr b/mods/ITEMS/mcl_books/locale/mcl_books.pl.tr new file mode 100644 index 000000000..8ef0db873 --- /dev/null +++ b/mods/ITEMS/mcl_books/locale/mcl_books.pl.tr @@ -0,0 +1,28 @@ +# textdomain: mcl_books +Book=Książka +Books are used to make bookshelves and book and quills.=Książki są używane do tworzenia półek z książkami oraz książek z piórem. +“@1”=„@1” +Copy of “@1”=Kopia „@” +Copy of Copy of “@1”=Kopia kopii „@” +Tattered Book=Podarta książka +by @1=autorstwa @1 +# as in “to sign a book” +Sign=Podpisz +Done=Skończone +This item can be used to write down some notes.=Ten przedmiot może być wykorzystany do zapisania notatek +Hold it in the hand, then rightclick to read the current notes and edit then. You can edit the text as often as you like. You can also sign the book which turns it into a written book which you can stack, but it can't be edited anymore.=Weź ją do ręki, następnie kliknij prawym przyciskiem by przeczytać notatki i je edytować. Możesz edytować tekst tak często jak tylko chcesz. Możesz także podpisać książkę, co zamienia ją w zapisaną książkę, którą można grupować, ale nie można jej edytować. +A book can hold up to 4500 characters. The title length is limited to 64 characters.=W książce zmieści się maksymalnie 4500 znaków. Długość tytułu jest ograniczona do 64 znaków. +Enter book title:=Wprowadź tytuł książki: +by @1=autorstwa @1 +Note: The book will no longer be editable after signing=Uwaga: Książki nie da się edytować po podpisaniu +Sign and Close=Podpisz i zamknij +Cancel=Anuluj +Nameless Book=Nienazwana książka +Written Book=Zapisana książka +Written books contain some text written by someone. They can be read and copied, but not edited.=Zapisane książki przechowują tekst napisany przez kogoś. Mogą być czytane i kopiowane, ale nie edytowane. +Hold it in your hand, then rightclick to read the book.=Weź ją do ręki i kliknij prawym, aby przeczytać książkę. +To copy the text of the written book, place it into the crafting grid together with a book and quill (or multiple of those) and craft. The written book will not be consumed. Copies of copies can not be copied.=Aby skopiować tekst z zapisanej książki umieść ją w siatce wytwarzania z książką z piórem (lub kilkoma) i wytwarzaj. Zapisana książka nie zostanie wykorzystana. Kopie kopii nie mogą być kopiowane. +Bookshelf=Półka z książkami +Bookshelves are used for decoration.=Półki z książkami są używane jako dekoracje +Book and Quill=Książka z piórem +Write down some notes=Zapisz jakieś notatki diff --git a/mods/ITEMS/mcl_books/mod.conf b/mods/ITEMS/mcl_books/mod.conf index 9597005c1..cea9a5dd8 100644 --- a/mods/ITEMS/mcl_books/mod.conf +++ b/mods/ITEMS/mcl_books/mod.conf @@ -1 +1,4 @@ name = mcl_books +author = celeron55 +description = Books mod for MCL2 +optional_depends = mcl_init, mcl_core, mcl_sounds, mcl_mobitems, mcl_dye, mcl_colors diff --git a/mods/ITEMS/mcl_bows/arrow.lua b/mods/ITEMS/mcl_bows/arrow.lua index ff6875770..9a22ee622 100644 --- a/mods/ITEMS/mcl_bows/arrow.lua +++ b/mods/ITEMS/mcl_bows/arrow.lua @@ -1,20 +1,37 @@ -local S = minetest.get_translator("mcl_bows") +local S = minetest.get_translator(minetest.get_current_modname()) + +local math = math +local vector = vector -- Time in seconds after which a stuck arrow is deleted local ARROW_TIMEOUT = 60 -- Time after which stuck arrow is rechecked for being stuck local STUCK_RECHECK_TIME = 5 -local GRAVITY = 9.81 +--local GRAVITY = 9.81 local YAW_OFFSET = -math.pi/2 -local dir_to_pitch = function(dir) - local dir2 = vector.normalize(dir) +local function dir_to_pitch(dir) + --local dir2 = vector.normalize(dir) local xz = math.abs(dir.x) + math.abs(dir.z) return -math.atan2(-dir.y, xz) end +local function random_arrow_positions(positions, placement) + if positions == "x" then + return math.random(-4, 4) + elseif positions == "y" then + return math.random(0, 10) + end + if placement == "front" and positions == "z" then + return 3 + elseif placement == "back" and positions == "z" then + return -3 + end + return 0 +end + local mod_awards = minetest.get_modpath("awards") and minetest.get_modpath("mcl_achievements") local mod_button = minetest.get_modpath("mesecons_button") @@ -35,52 +52,13 @@ S("Arrows might get stuck on solid blocks and can be retrieved again. They are a end, }) --- This is a fake node, used as model for the arrow entity. --- It's not supposed to be usable as item or real node. --- TODO: Use a proper mesh for the arrow entity -minetest.register_node("mcl_bows:arrow_box", { - drawtype = "nodebox", - is_ground_content = false, - node_box = { - type = "fixed", - fixed = { - -- Shaft - {-6.5/17, -1.5/17, -1.5/17, -4.5/17, 1.5/17, 1.5/17}, - {-4.5/17, -0.5/17, -0.5/17, 5.5/17, 0.5/17, 0.5/17}, - {5.5/17, -1.5/17, -1.5/17, 6.5/17, 1.5/17, 1.5/17}, - -- Tip - {-4.5/17, 2.5/17, 2.5/17, -3.5/17, -2.5/17, -2.5/17}, - {-8.5/17, 0.5/17, 0.5/17, -6.5/17, -0.5/17, -0.5/17}, - -- Fletching - {6.5/17, 1.5/17, 1.5/17, 7.5/17, 2.5/17, 2.5/17}, - {7.5/17, -2.5/17, 2.5/17, 6.5/17, -1.5/17, 1.5/17}, - {7.5/17, 2.5/17, -2.5/17, 6.5/17, 1.5/17, -1.5/17}, - {6.5/17, -1.5/17, -1.5/17, 7.5/17, -2.5/17, -2.5/17}, - - {7.5/17, 2.5/17, 2.5/17, 8.5/17, 3.5/17, 3.5/17}, - {8.5/17, -3.5/17, 3.5/17, 7.5/17, -2.5/17, 2.5/17}, - {8.5/17, 3.5/17, -3.5/17, 7.5/17, 2.5/17, -2.5/17}, - {7.5/17, -2.5/17, -2.5/17, 8.5/17, -3.5/17, -3.5/17}, - } - }, - tiles = {"mcl_bows_arrow.png^[transformFX", "mcl_bows_arrow.png^[transformFX", "mcl_bows_arrow_back.png", "mcl_bows_arrow_front.png", "mcl_bows_arrow.png", "mcl_bows_arrow.png^[transformFX"}, - paramtype = "light", - paramtype2 = "facedir", - sunlight_propagates = true, - groups = {not_in_creative_inventory=1, dig_immediate=3}, - drop = "", - node_placement_prediction = "", - on_construct = function(pos) - minetest.log("error", "[mcl_bows] Trying to construct mcl_bows:arrow_box at "..minetest.pos_to_string(pos)) - minetest.remove_node(pos) - end, -}) - local ARROW_ENTITY={ physical = true, - visual = "wielditem", - visual_size = {x=0.4, y=0.4}, - textures = {"mcl_bows:arrow_box"}, + pointable = false, + visual = "mesh", + mesh = "mcl_bows_arrow.obj", + visual_size = {x=-1, y=1}, + textures = {"mcl_bows_arrow.png"}, collisionbox = {-0.19, -0.125, -0.19, 0.19, 0.125, 0.19}, collide_with_objects = false, _fire_damage_resistant = true, @@ -94,13 +72,14 @@ local ARROW_ENTITY={ _stuckrechecktimer=nil,-- An additional timer for periodically re-checking the stuck status of an arrow _stuckin=nil, --Position of node in which arow is stuck. _shooter=nil, -- ObjectRef of player or mob who shot it + _is_arrow = true, _viscosity=0, -- Viscosity of node the arrow is currently in _deflection_cooloff=0, -- Cooloff timer after an arrow deflection, to prevent many deflections in quick succession } -- Destroy arrow entity self at pos and drops it as an item -local spawn_item = function(self, pos) +local function spawn_item(self, pos) if not minetest.is_creative_enabled("") then local item = minetest.add_item(pos, "mcl_bows:arrow") item:set_velocity({x=0, y=0, z=0}) @@ -110,7 +89,7 @@ local spawn_item = function(self, pos) self.object:remove() end -local damage_particles = function(pos, is_critical) +local function damage_particles(pos, is_critical) if is_critical then minetest.add_particlespawner({ amount = 15, @@ -132,8 +111,10 @@ local damage_particles = function(pos, is_critical) end end -ARROW_ENTITY.on_step = function(self, dtime) - mcl_burning.tick(self.object, dtime) +function ARROW_ENTITY.on_step(self, dtime) + mcl_burning.tick(self.object, dtime, self) + + self._time_in_air = self._time_in_air + .001 local pos = self.object:get_pos() local dpos = table.copy(pos) -- digital pos @@ -184,6 +165,25 @@ ARROW_ENTITY.on_step = function(self, dtime) -- Check for object "collision". Done every tick (hopefully this is not too stressing) else + + if self._damage >= 9 and self._in_player == false then + minetest.add_particlespawner({ + amount = 1, + time = .001, + minpos = pos, + maxpos = pos, + minvel = vector.new(-0.1,-0.1,-0.1), + maxvel = vector.new(0.1,0.1,0.1), + minexptime = 0.5, + maxexptime = 0.5, + minsize = 2, + maxsize = 2, + collisiondetection = false, + vertical = false, + texture = "mobs_mc_arrow_particle.png", + glow = 1, + }) + end -- We just check for any hurtable objects nearby. -- The radius of 3 is fairly liberal, but anything lower than than will cause -- arrow to hilariously go through mobs often. @@ -200,10 +200,10 @@ ARROW_ENTITY.on_step = function(self, dtime) for k, obj in pairs(objs) do local ok = false -- Arrows can only damage players and mobs - if obj ~= self._shooter and obj:is_player() then + if obj:is_player() then ok = true - elseif obj:get_luaentity() ~= nil then - if obj ~= self._shooter and (obj:get_luaentity()._cmi_is_mob or obj:get_luaentity()._hittable_by_projectile) then + elseif obj:get_luaentity() then + if (obj:get_luaentity()._cmi_is_mob or obj:get_luaentity()._hittable_by_projectile) then ok = true end end @@ -221,11 +221,12 @@ ARROW_ENTITY.on_step = function(self, dtime) end -- If an attackable object was found, we will damage the closest one only - if closest_object ~= nil then + + if closest_object then local obj = closest_object local is_player = obj:is_player() local lua = obj:get_luaentity() - if obj ~= self._shooter and (is_player or (lua and (lua._cmi_is_mob or lua._hittable_by_projectile))) then + if obj == self._shooter and self._time_in_air > 1.02 or obj ~= self._shooter and (is_player or (lua and (lua._cmi_is_mob or lua._hittable_by_projectile))) then if obj:get_hp() > 0 then -- Check if there is no solid node between arrow and object local ray = minetest.raycast(self.object:get_pos(), obj:get_pos(), true) @@ -247,22 +248,60 @@ ARROW_ENTITY.on_step = function(self, dtime) -- Punch target object but avoid hurting enderman. if not lua or lua.name ~= "mobs_mc:enderman" then - if obj:is_player() and rawget(_G, "armor") and armor.last_damage_types then - armor.last_damage_types[obj:get_player_name()] = "projectile" + if self._in_player == false then + damage_particles(self.object:get_pos(), self._is_critical) end - damage_particles(self.object:get_pos(), self._is_critical) if mcl_burning.is_burning(self.object) then - mcl_burning.set_on_fire(obj, 4) + mcl_burning.set_on_fire(obj, 5) + end + if self._in_player == false then + obj:punch(self.object, 1.0, { + full_punch_interval=1.0, + damage_groups={fleshy=self._damage}, + }, self.object:get_velocity()) + if obj:is_player() then + local placement + self._placement = math.random(1, 2) + if self._placement == 1 then + placement = "front" + else + placement = "back" + end + self._in_player = true + if self._placement == 2 then + self._rotation_station = 90 + else + self._rotation_station = -90 + end + self._y_position = random_arrow_positions("y", placement) + self._x_position = random_arrow_positions("x", placement) + if self._y_position > 6 and self._x_position < 2 and self._x_position > -2 then + self._attach_parent = "Head" + self._y_position = self._y_position - 6 + elseif self._x_position > 2 then + self._attach_parent = "Arm_Right" + self._y_position = self._y_position - 3 + self._x_position = self._x_position - 2 + elseif self._x_position < -2 then + self._attach_parent = "Arm_Left" + self._y_position = self._y_position - 3 + self._x_position = self._x_position + 2 + else + self._attach_parent = "Body" + end + self._z_rotation = math.random(-30, 30) + self._y_rotation = math.random( -30, 30) + self.object:set_attach(obj, self._attach_parent, {x=self._x_position,y=self._y_position,z=random_arrow_positions("z", placement)}, {x=0,y=self._rotation_station + self._y_rotation,z=self._z_rotation}) + minetest.after(150, function() + self.object:remove() + end) + end end - obj:punch(self.object, 1.0, { - full_punch_interval=1.0, - damage_groups={fleshy=self._damage}, - }, self.object:get_velocity()) end if is_player then - if self._shooter and self._shooter:is_player() then + if self._shooter and self._shooter:is_player() and self._in_player == false then -- “Ding” sound for hitting another player minetest.sound_play({name="mcl_bows_hit_player", gain=0.1}, {to_player=self._shooter:get_player_name()}, true) end @@ -279,10 +318,14 @@ ARROW_ENTITY.on_step = function(self, dtime) end end end - minetest.sound_play({name="mcl_bows_hit_other", gain=0.3}, {pos=self.object:get_pos(), max_hear_distance=16}, true) + if self._in_player == false then + minetest.sound_play({name="mcl_bows_hit_other", gain=0.3}, {pos=self.object:get_pos(), max_hear_distance=16}, true) + end + end + if not obj:is_player() then + mcl_burning.extinguish(self.object) + self.object:remove() end - mcl_burning.extinguish(self.object) - self.object:remove() return end end @@ -353,7 +396,7 @@ ARROW_ENTITY.on_step = function(self, dtime) if not v then v = 0 end - local old_v = self._viscosity + --local old_v = self._viscosity self._viscosity = v local vpenalty = math.max(0.1, 0.98 - 0.1 * v) if math.abs(vel.x) > 0.001 then @@ -380,13 +423,13 @@ end -- Force recheck of stuck arrows when punched. -- Otherwise, punching has no effect. -ARROW_ENTITY.on_punch = function(self) +function ARROW_ENTITY.on_punch(self) if self._stuck then self._stuckrechecktimer = STUCK_RECHECK_TIME end end -ARROW_ENTITY.get_staticdata = function(self) +function ARROW_ENTITY.get_staticdata(self) local out = { lastpos = self._lastpos, startpos = self._startpos, @@ -408,7 +451,9 @@ ARROW_ENTITY.get_staticdata = function(self) return minetest.serialize(out) end -ARROW_ENTITY.on_activate = function(self, staticdata, dtime_s) +function ARROW_ENTITY.on_activate(self, staticdata, dtime_s) + self._time_in_air = 1.0 + self._in_player = false local data = minetest.deserialize(staticdata) if data then self._stuck = data.stuck @@ -449,15 +494,15 @@ minetest.register_entity("mcl_bows:arrow_entity", ARROW_ENTITY) if minetest.get_modpath("mcl_core") and minetest.get_modpath("mcl_mobitems") then minetest.register_craft({ - output = 'mcl_bows:arrow 4', + output = "mcl_bows:arrow 4", recipe = { - {'mcl_core:flint'}, - {'mcl_core:stick'}, - {'mcl_mobitems:feather'} + {"mcl_core:flint"}, + {"mcl_core:stick"}, + {"mcl_mobitems:feather"} } }) end -if minetest.get_modpath("doc_identifier") ~= nil then +if minetest.get_modpath("doc_identifier") then doc.sub.identifier.register_object("mcl_bows:arrow_entity", "craftitems", "mcl_bows:arrow") end diff --git a/mods/ITEMS/mcl_bows/bow.lua b/mods/ITEMS/mcl_bows/bow.lua index 87820071d..23b6b4310 100644 --- a/mods/ITEMS/mcl_bows/bow.lua +++ b/mods/ITEMS/mcl_bows/bow.lua @@ -1,4 +1,4 @@ -local S = minetest.get_translator("mcl_bows") +local S = minetest.get_translator(minetest.get_current_modname()) mcl_bows = {} @@ -33,7 +33,7 @@ local bow_load = {} -- Another player table, this one stores the wield index of the bow being charged local bow_index = {} -mcl_bows.shoot_arrow = function(arrow_item, pos, dir, yaw, shooter, power, damage, is_critical, bow_stack, collectable) +function mcl_bows.shoot_arrow(arrow_item, pos, dir, yaw, shooter, power, damage, is_critical, bow_stack, collectable) local obj = minetest.add_entity({x=pos.x,y=pos.y,z=pos.z}, arrow_item.."_entity") if power == nil then power = BOW_MAX_SPEED --19 @@ -59,13 +59,14 @@ mcl_bows.shoot_arrow = function(arrow_item, pos, dir, yaw, shooter, power, damag obj:set_yaw(yaw-math.pi/2) local le = obj:get_luaentity() le._shooter = shooter + le._source_object = shooter le._damage = damage le._is_critical = is_critical le._startpos = pos le._knockback = knockback le._collectable = collectable minetest.sound_play("mcl_bows_bow_shoot", {pos=pos, max_hear_distance=16}, true) - if shooter ~= nil and shooter:is_player() then + if shooter and shooter:is_player() then if obj:get_luaentity().player == "" then obj:get_luaentity().player = shooter end @@ -74,7 +75,7 @@ mcl_bows.shoot_arrow = function(arrow_item, pos, dir, yaw, shooter, power, damag return obj end -local get_arrow = function(player) +local function get_arrow(player) local inv = player:get_inventory() local arrow_stack, arrow_stack_id for i=1, inv:get_size("main") do @@ -88,7 +89,7 @@ local get_arrow = function(player) return arrow_stack, arrow_stack_id end -local player_shoot_arrow = function(itemstack, player, power, damage, is_critical) +local function player_shoot_arrow(itemstack, player, power, damage, is_critical) local arrow_stack, arrow_stack_id = get_arrow(player) local arrow_itemstring local has_infinity_enchantment = mcl_enchanting.has_enchantment(player:get_wielded_item(), "infinity") @@ -133,7 +134,7 @@ S("The speed and damage of the arrow increases the longer you charge. The regula _doc_items_usagehelp = S("To use the bow, you first need to have at least one arrow anywhere in your inventory (unless in Creative Mode). Hold down the right mouse button to charge, release to shoot."), _doc_items_durability = BOW_DURABILITY, inventory_image = "mcl_bows_bow.png", - wield_scale = { x = 1.8, y = 1.8, z = 1 }, + wield_scale = mcl_vars.tool_wield_scale, stack_max = 1, range = 4, -- Trick to disable digging as well @@ -161,7 +162,7 @@ S("The speed and damage of the arrow increases the longer you charge. The regula }) -- Iterates through player inventory and resets all the bows in "charging" state back to their original stage -local reset_bows = function(player) +local function reset_bows(player) local inv = player:get_inventory() local list = inv:get_list("main") for place, stack in pairs(list) do @@ -181,7 +182,7 @@ local reset_bows = function(player) end -- Resets the bow charging state and player speed. To be used when the player is no longer charging the bow -local reset_bow_state = function(player, also_reset_bows) +local function reset_bow_state(player, also_reset_bows) bow_load[player:get_player_name()] = nil bow_index[player:get_player_name()] = nil if minetest.get_modpath("playerphysics") then @@ -198,7 +199,7 @@ for level=0, 2 do description = S("Bow"), _doc_items_create_entry = false, inventory_image = "mcl_bows_bow_"..level..".png", - wield_scale = { x = 1.8, y = 1.8, z = 1 }, + wield_scale = mcl_vars.tool_wield_scale, stack_max = 1, range = 0, -- Pointing range to 0 to prevent punching with bow :D groups = {not_in_creative_inventory=1, not_in_craft_guide=1, bow=1, enchantability=1}, @@ -227,11 +228,10 @@ end controls.register_on_release(function(player, key, time) if key~="RMB" then return end - local inv = minetest.get_inventory({type="player", name=player:get_player_name()}) + --local inv = minetest.get_inventory({type="player", name=player:get_player_name()}) local wielditem = player:get_wielded_item() if (wielditem:get_name()=="mcl_bows:bow_0" or wielditem:get_name()=="mcl_bows:bow_1" or wielditem:get_name()=="mcl_bows:bow_2" or wielditem:get_name()=="mcl_bows:bow_0_enchanted" or wielditem:get_name()=="mcl_bows:bow_1_enchanted" or wielditem:get_name()=="mcl_bows:bow_2_enchanted") then - local has_shot = false local enchanted = mcl_enchanting.is_enchanted(wielditem:get_name()) local speed, damage @@ -271,7 +271,7 @@ controls.register_on_release(function(player, key, time) damage = math.max(1, math.floor(9 * charge_ratio)) end - has_shot = player_shoot_arrow(wielditem, player, speed, damage, is_critical) + local has_shot = player_shoot_arrow(wielditem, player, speed, damage, is_critical) if enchanted then wielditem:set_name("mcl_bows:bow_enchanted") @@ -298,7 +298,7 @@ controls.register_on_hold(function(player, key, time) if key ~= "RMB" or not (creative or get_arrow(player)) then return end - local inv = minetest.get_inventory({type="player", name=name}) + --local inv = minetest.get_inventory({type="player", name=name}) local wielditem = player:get_wielded_item() if bow_load[name] == nil and (wielditem:get_name()=="mcl_bows:bow" or wielditem:get_name()=="mcl_bows:bow_enchanted") and wielditem:get_meta():get("active") and (creative or get_arrow(player)) then local enchanted = mcl_enchanting.is_enchanted(wielditem:get_name()) @@ -345,7 +345,7 @@ minetest.register_globalstep(function(dtime) local name = player:get_player_name() local wielditem = player:get_wielded_item() local wieldindex = player:get_wield_index() - local controls = player:get_player_control() + --local controls = player:get_player_control() if type(bow_load[name]) == "number" and ((wielditem:get_name()~="mcl_bows:bow_0" and wielditem:get_name()~="mcl_bows:bow_1" and wielditem:get_name()~="mcl_bows:bow_2" and wielditem:get_name()~="mcl_bows:bow_0_enchanted" and wielditem:get_name()~="mcl_bows:bow_1_enchanted" and wielditem:get_name()~="mcl_bows:bow_2_enchanted") or wieldindex ~= bow_index[name]) then reset_bow_state(player, true) end @@ -362,19 +362,19 @@ end) if minetest.get_modpath("mcl_core") and minetest.get_modpath("mcl_mobitems") then minetest.register_craft({ - output = 'mcl_bows:bow', + output = "mcl_bows:bow", recipe = { - {'', 'mcl_core:stick', 'mcl_mobitems:string'}, - {'mcl_core:stick', '', 'mcl_mobitems:string'}, - {'', 'mcl_core:stick', 'mcl_mobitems:string'}, + {"", "mcl_core:stick", "mcl_mobitems:string"}, + {"mcl_core:stick", "", "mcl_mobitems:string"}, + {"", "mcl_core:stick", "mcl_mobitems:string"}, } }) minetest.register_craft({ - output = 'mcl_bows:bow', + output = "mcl_bows:bow", recipe = { - {'mcl_mobitems:string', 'mcl_core:stick', ''}, - {'mcl_mobitems:string', '', 'mcl_core:stick'}, - {'mcl_mobitems:string', 'mcl_core:stick', ''}, + {"mcl_mobitems:string", "mcl_core:stick", ""}, + {"mcl_mobitems:string", "", "mcl_core:stick"}, + {"mcl_mobitems:string", "mcl_core:stick", ""}, } }) end diff --git a/mods/ITEMS/mcl_bows/crossbow.lua b/mods/ITEMS/mcl_bows/crossbow.lua deleted file mode 100644 index 2690d9518..000000000 --- a/mods/ITEMS/mcl_bows/crossbow.lua +++ /dev/null @@ -1,442 +0,0 @@ -local S = minetest.get_translator("mcl_bows") - -mcl_bows = {} - --- local arrows = { --- ["mcl_bows:arrow"] = "mcl_bows:arrow_entity", --- } - -local GRAVITY = 9.81 -local BOW_DURABILITY = 385 - --- Charging time in microseconds -local BOW_CHARGE_TIME_HALF = 500000 -- bow level 1 -local BOW_CHARGE_TIME_FULL = 1000000 -- bow level 2 (full charge) - --- TODO: Use Minecraft speed (ca. 53 m/s) --- Currently nerfed because at full speed the arrow would easily get out of the range of the loaded map. -local BOW_MAX_SPEED = 60 - ---[[ Store the charging state of each player. -keys: player name -value: -nil = not charging or player not existing -number: currently charging, the number is the time from minetest.get_us_time - in which the charging has started -]] -local bow_load = {} - --- Another player table, this one stores the wield index of the bow being charged -local bow_index = {} - -mcl_bows.shoot_arrow = function(arrow_item, pos, dir, yaw, shooter, power, damage, is_critical, bow_stack, collectable) - local obj = minetest.add_entity({x=pos.x,y=pos.y,z=pos.z}, arrow_item.."_entity") - if power == nil then - power = BOW_MAX_SPEED --19 - end - if damage == nil then - damage = 3 - end - local knockback - if bow_stack then - local enchantments = mcl_enchanting.get_enchantments(bow_stack) - if enchantments.power then - damage = damage + (enchantments.power + 1) / 4 - end - if enchantments.punch then - knockback = enchantments.punch * 3 - end - if enchantments.flame then - mcl_burning.set_on_fire(obj, math.huge) - end - end - obj:set_velocity({x=dir.x*power, y=dir.y*power, z=dir.z*power}) - obj:set_acceleration({x=0, y=-GRAVITY, z=0}) - obj:set_yaw(yaw-math.pi/2) - local le = obj:get_luaentity() - le._shooter = shooter - le._damage = damage - le._is_critical = is_critical - le._startpos = pos - le._knockback = knockback - le._collectable = collectable - if shooter ~= nil and shooter:is_player() then - if obj:get_luaentity().player == "" then - obj:get_luaentity().player = shooter - end - obj:get_luaentity().node = shooter:get_inventory():get_stack("main", 1):get_name() - end - return obj -end - -local get_arrow = function(player) - local inv = player:get_inventory() - local arrow_stack, arrow_stack_id - for i=1, inv:get_size("main") do - local it = inv:get_stack("main", i) - if not it:is_empty() and it:get_name() == "mcl_bows:arrow" then - arrow_stack = it - arrow_stack_id = i - break - end - end - return arrow_stack, arrow_stack_id -end - -local player_shoot_arrow = function(itemstack, player, power, damage, is_critical) - local has_infinity_enchantment = mcl_enchanting.has_enchantment(player:get_wielded_item(), "infinity") - local infinity_used = false - - if has_infinity_enchantment then - infinity_used = true - end - local playerpos = player:get_pos() - local dir = player:get_look_dir() - local yaw = player:get_look_horizontal() - local has_multishot_enchantment = mcl_enchanting.has_enchantment(player:get_wielded_item(), "multishot") - - minetest.sound_play("mcl_bows_crossbow_shoot", {pos=playerpos, max_hear_distance=16}, true) - if has_multishot_enchantment then - for times_shot=0,2 do - mcl_bows.shoot_arrow("mcl_bows:arrow", {x=playerpos.x,y=playerpos.y+1.5,z=playerpos.z}, dir, yaw, player, power, damage, is_critical, player:get_wielded_item(), not infinity_used) - end - else - mcl_bows.shoot_arrow("mcl_bows:arrow", {x=playerpos.x,y=playerpos.y+1.5,z=playerpos.z}, dir, yaw, player, power, damage, is_critical, player:get_wielded_item(), not infinity_used) - end - - return true -end - --- Crossbows item, uncharged state -minetest.register_tool("mcl_bows:crossbow", { - description = S("Crossbow"), - _tt_help = S("Launches arrows"), - _doc_items_longdesc = S("Crossbows are ranged weapons to shoot arrows at your foes.").."\n".. -S("The speed and damage of the arrow increases the longer you charge. The regular damage of the arrow is between 1 and 9. At full charge, there's also a 20% of a critical hit, dealing 11 damage instead."), - _doc_items_usagehelp = S("To use the crossbow, you first need to have at least one arrow anywhere in your inventory (unless in Creative Mode). Hold down the right mouse button to charge, and wait for arrow to load. when the Crossbow is loaded, you will be able to tap right click to fire"), - _doc_items_durability = BOW_DURABILITY, - inventory_image = "mcl_bows_crossbow.png", - wield_scale = { x = 1.8, y = 1.8, z = 1 }, - stack_max = 1, - range = 4, - -- Trick to disable digging as well - on_use = function() return end, - on_place = function(itemstack, player, pointed_thing) - if pointed_thing and pointed_thing.type == "node" then - -- Call on_rightclick if the pointed node defines it - local node = minetest.get_node(pointed_thing.under) - if player and not player:get_player_control().sneak then - if minetest.registered_nodes[node.name] and minetest.registered_nodes[node.name].on_rightclick then - return minetest.registered_nodes[node.name].on_rightclick(pointed_thing.under, node, player, itemstack) or itemstack - end - end - end - - itemstack:get_meta():set_string("active", "true") - return itemstack - end, - on_secondary_use = function(itemstack) - itemstack:get_meta():set_string("active", "true") - return itemstack - end, - groups = {weapon=1,weapon_ranged=1,bow=1,enchantability=1}, - _mcl_uses = 385, -}) - -minetest.register_tool("mcl_bows:loaded_crossbow", { - description = S("Crossbow (loaded)"), - _tt_help = S("Launches arrows"), - _doc_items_durability = BOW_DURABILITY, - inventory_image = "mcl_bows_crossbow_3.png", - wield_scale = { x = 1.8, y = 1.8, z = 1 }, - stack_max = 1, - range = 4, - -- Trick to disable digging as well - on_use = function() return end, - on_place = function(itemstack, player, pointed_thing) - if pointed_thing and pointed_thing.type == "node" then - -- Call on_rightclick if the pointed node defines it - local node = minetest.get_node(pointed_thing.under) - if player and not player:get_player_control().sneak then - if minetest.registered_nodes[node.name] and minetest.registered_nodes[node.name].on_rightclick then - return minetest.registered_nodes[node.name].on_rightclick(pointed_thing.under, node, player, itemstack) or itemstack - end - end - end - - itemstack:get_meta():set_string("active", "true") - return itemstack - end, - on_secondary_use = function(itemstack) - itemstack:get_meta():set_string("active", "true") - return itemstack - end, - groups = {weapon=1,weapon_ranged=1,bow=1,enchantability=1,not_in_creative_inventory=1}, - _mcl_uses = 385, -}) - --- Iterates through player inventory and resets all the bows in "charging" state back to their original stage -local reset_bows = function(player) - local inv = player:get_inventory() - local list = inv:get_list("main") - for place, stack in pairs(list) do - if stack:get_name() == "mcl_bows:crossbow" or stack:get_name() == "mcl_bows:crossbow_enchanted" then - stack:get_meta():set_string("active", "") - elseif stack:get_name()=="mcl_bows:crossbow_0" or stack:get_name()=="mcl_bows:crossbow_1" or stack:get_name()=="mcl_bows:crossbow_2" then - stack:set_name("mcl_bows:crossbow") - stack:get_meta():set_string("active", "") - list[place] = stack - elseif stack:get_name()=="mcl_bows:crossbow_0_enchanted" or stack:get_name()=="mcl_bows:crossbow_1_enchanted" or stack:get_name()=="mcl_bows:crossbow_2_enchanted" then - stack:set_name("mcl_bows:crossbow_enchanted") - stack:get_meta():set_string("active", "") - list[place] = stack - end - end - inv:set_list("main", list) -end - --- Resets the bow charging state and player speed. To be used when the player is no longer charging the bow -local reset_bow_state = function(player, also_reset_bows) - bow_load[player:get_player_name()] = nil - bow_index[player:get_player_name()] = nil - if also_reset_bows then - reset_bows(player) - end -end - --- Bow in charging state -for level=0, 2 do - minetest.register_tool("mcl_bows:crossbow_"..level, { - description = S("Crossbow"), - _doc_items_create_entry = false, - inventory_image = "mcl_bows_crossbow_"..level..".png", - wield_scale = { x = 1.8, y = 1.8, z = 1 }, - stack_max = 1, - range = 0, -- Pointing range to 0 to prevent punching with bow :D - groups = {not_in_creative_inventory=1, not_in_craft_guide=1, bow=1, enchantability=1}, - -- Trick to disable digging as well - on_use = function() return end, - on_drop = function(itemstack, dropper, pos) - reset_bow_state(dropper) - itemstack:get_meta():set_string("active", "") - if mcl_enchanting.is_enchanted(itemstack:get_name()) then - itemstack:set_name("mcl_bows:crossbow_enchanted") - else - itemstack:set_name("mcl_bows:crossbow") - end - minetest.item_drop(itemstack, dropper, pos) - itemstack:take_item() - return itemstack - end, - -- Prevent accidental interaction with itemframes and other nodes - on_place = function(itemstack) - return itemstack - end, - _mcl_uses = 385, - }) -end - -controls.register_on_release(function(player, key) - if key~="RMB" then return end - reset_bows(player) -end) - -controls.register_on_press(function(player, key) - if key~="RMB" then return end - local inv = minetest.get_inventory({type="player", name=player:get_player_name()}) - local wielditem = player:get_wielded_item() - if wielditem:get_name()=="mcl_bows:loaded_crossbow" or wielditem:get_name()=="mcl_bows:loaded_crossbow_enchanted" then - local has_shot = false - - local enchanted = mcl_enchanting.is_enchanted(wielditem:get_name()) - local speed, damage - local p_load = bow_load[player:get_player_name()] - local charge - - -- Type sanity check - if type(p_load) == "number" then - charge = minetest.get_us_time() - p_load - else - -- In case something goes wrong ... - -- Just assume minimum charge. - charge = 0 - minetest.log("warning", "[mcl_bows] Player "..player:get_player_name().." fires arrow with non-numeric bow_load!") - end - charge = 1000000 - - local charge_ratio - - charge_ratio = charge / BOW_CHARGE_TIME_FULL - charge_ratio = math.max(math.min(charge_ratio, 1), 0) - - -- Calculate damage and speed - -- Fully charged - local is_critical = false - if charge >= BOW_CHARGE_TIME_FULL then - speed = BOW_MAX_SPEED - local r = math.random(1,5) - if r == 1 then - -- 20% chance for critical hit - damage = 11 - is_critical = true - else - damage = 9 - end - -- Partially charged - else - -- Linear speed and damage increase - speed = math.max(4, BOW_MAX_SPEED * charge_ratio) - damage = math.max(1, math.floor(9 * charge_ratio)) - end - - has_shot = player_shoot_arrow(wielditem, player, speed, damage, is_critical) - - if enchanted then - wielditem:set_name("mcl_bows:crossbow_enchanted") - else - wielditem:set_name("mcl_bows:crossbow") - end - - if has_shot and not minetest.is_creative_enabled(player:get_player_name()) then - local durability = BOW_DURABILITY - local unbreaking = mcl_enchanting.get_enchantment(wielditem, "unbreaking") - if unbreaking > 0 then - durability = durability * (unbreaking + 1) - end - wielditem:add_wear(65535/durability) - end - player:set_wielded_item(wielditem) - reset_bow_state(player, true) - end -end) - -controls.register_on_hold(function(player, key, time) - playerpos = player:get_pos() - arrow_stack = get_arrow(player) - local name = player:get_player_name() - local creative = minetest.is_creative_enabled(name) - if key ~= "RMB" or not (creative or get_arrow(player)) then - return - end - local inv = minetest.get_inventory({type="player", name=name}) - local wielditem = player:get_wielded_item() - if bow_load[name] == nil and (wielditem:get_name()=="mcl_bows:crossbow" or wielditem:get_name()=="mcl_bows:crossbow_enchanted") and wielditem:get_meta():get("active") and (creative or get_arrow(player)) then - local enchanted = mcl_enchanting.is_enchanted(wielditem:get_name()) - if enchanted then - wielditem:set_name("mcl_bows:crossbow_0_enchanted") - minetest.sound_play("mcl_bows_crossbow_drawback_0", {pos=playerpos, max_hear_distance=16}, true) - else - wielditem:set_name("mcl_bows:crossbow_0") - minetest.sound_play("mcl_bows_crossbow_drawback_0", {pos=playerpos, max_hear_distance=16}, true) - end - player:set_wielded_item(wielditem) - bow_load[name] = minetest.get_us_time() - bow_index[name] = player:get_wield_index() - else - if player:get_wield_index() == bow_index[name] then - if type(bow_load[name]) == "number" then - if wielditem:get_name() == "mcl_bows:crossbow_0" and minetest.get_us_time() - bow_load[name] >= BOW_CHARGE_TIME_HALF then - minetest.sound_play("mcl_bows_crossbow_drawback_1", {pos=playerpos, max_hear_distance=16}, true) - wielditem:set_name("mcl_bows:crossbow_1") - elseif wielditem:get_name() == "mcl_bows:crossbow_0_enchanted" and minetest.get_us_time() - bow_load[name] >= BOW_CHARGE_TIME_HALF then - minetest.sound_play("mcl_bows_crossbow_drawback_1", {pos=playerpos, max_hear_distance=16}, true) - wielditem:set_name("mcl_bows:crossbow_1_enchanted") - elseif wielditem:get_name() == "mcl_bows:crossbow_1" and minetest.get_us_time() - bow_load[name] >= BOW_CHARGE_TIME_FULL then - minetest.sound_play("mcl_bows_crossbow_drawback_2", {pos=playerpos, max_hear_distance=16}, true) - wielditem:set_name("mcl_bows:crossbow_2") - if minetest.get_us_time() - bow_load[name] >= 1000000 then - minetest.sound_play("mcl_bows_crossbow_load", {pos=playerpos, max_hear_distance=16}, true) - wielditem:set_name("mcl_bows:loaded_crossbow") - local arrow_stack, arrow_stack_id = get_arrow(player) - local arrow_itemstring - local has_infinity_enchantment = mcl_enchanting.has_enchantment(player:get_wielded_item(), "infinity") - local infinity_used = false - - if minetest.is_creative_enabled(player:get_player_name()) then - if arrow_stack then - arrow_itemstring = arrow_stack:get_name() - else - arrow_itemstring = "mcl_bows:arrow" - end - else - if not arrow_stack then - return false - end - arrow_itemstring = arrow_stack:get_name() - if has_infinity_enchantment and minetest.get_item_group(arrow_itemstring, "ammo_bow_regular") > 0 then - infinity_used = true - else - arrow_stack:take_item() - end - local inv = player:get_inventory() - inv:set_stack("main", arrow_stack_id, arrow_stack) - end - if not arrow_itemstring then - return false - end - end - elseif wielditem:get_name() == "mcl_bows:crossbow_1_enchanted" and minetest.get_us_time() - bow_load[name] >= BOW_CHARGE_TIME_FULL then - minetest.sound_play("mcl_bows_crossbow_drawback_2", {pos=playerpos, max_hear_distance=16}, true) - wielditem:set_name("mcl_bows:crossbow_2_enchanted") - if minetest.get_us_time() - bow_load[name] >= 60000 then - wielditem:set_name("mcl_bows:loaded_crossbow_enchanted") - end - end - else - if wielditem:get_name() == "mcl_bows:crossbow_0" or wielditem:get_name() == "mcl_bows:crossbow_1" or wielditem:get_name() == "mcl_bows:crossbow_2" then - wielditem:set_name("mcl_bows:crossbow") - elseif wielditem:get_name() == "mcl_bows:crossbow_0_enchanted" or wielditem:get_name() == "mcl_bows:crossbow_1_enchanted" or wielditem:get_name() == "mcl_bows:crossbow_2_enchanted" then - wielditem:set_name("mcl_bows:crossbow_enchanted") - end - end - player:set_wielded_item(wielditem) - else - reset_bow_state(player, true) - end - end -end) - -minetest.register_globalstep(function(dtime) - for _, player in pairs(minetest.get_connected_players()) do - local name = player:get_player_name() - local wielditem = player:get_wielded_item() - local wieldindex = player:get_wield_index() - local controls = player:get_player_control() - if type(bow_load[name]) == "number" and ((wielditem:get_name()~="mcl_bows:crossbow_0" and wielditem:get_name()~="mcl_bows:crossbow_1" and wielditem:get_name()~="mcl_bows:crossbow_2" and wielditem:get_name()~="mcl_bows:crossbow_0_enchanted" and wielditem:get_name()~="mcl_bows:crossbow_1_enchanted" and wielditem:get_name()~="mcl_bows:crossbow_2_enchanted") or wieldindex ~= bow_index[name]) then - reset_bow_state(player, true) - end - end -end) - -minetest.register_on_joinplayer(function(player) - reset_bows(player) -end) - -minetest.register_on_leaveplayer(function(player) - reset_bow_state(player, true) -end) - -if minetest.get_modpath("mcl_core") and minetest.get_modpath("mcl_mobitems") then - minetest.register_craft({ - output = 'mcl_bows:crossbow', - recipe = { - {'mcl_core:stick', 'mcl_core:iron_ingot', 'mcl_core:stick'}, - {'mcl_mobitems:string', 'mcl_core:iron_ingot', 'mcl_mobitems:string'}, - --TODO make this^^ trip wire (as of now no such thing exists) - {'', 'mcl_core:stick', ''}, - } - }) -end - -minetest.register_craft({ - type = "fuel", - recipe = "group:bow", - burntime = 15, -}) - --- Add entry aliases for the Help -if minetest.get_modpath("doc") then - doc.add_entry_alias("tools", "mcl_bows:crossbow", "tools", "mcl_bows:crossbow_0") - doc.add_entry_alias("tools", "mcl_bows:crossbow", "tools", "mcl_bows:crossbow_1") - doc.add_entry_alias("tools", "mcl_bows:crossbow", "tools", "mcl_bows:crossbow_2") -end \ No newline at end of file diff --git a/mods/ITEMS/mcl_bows/depends.txt b/mods/ITEMS/mcl_bows/depends.txt deleted file mode 100644 index a797e7184..000000000 --- a/mods/ITEMS/mcl_bows/depends.txt +++ /dev/null @@ -1,11 +0,0 @@ -controls -awards? -mcl_achievements? -mcl_core? -mcl_mobitems? -playerphysics? -doc? -doc_identifier? -mesecons_button? -mcl_particles -mcl_enchanting diff --git a/mods/ITEMS/mcl_bows/init.lua b/mods/ITEMS/mcl_bows/init.lua index 4c333c4e4..a2745d950 100644 --- a/mods/ITEMS/mcl_bows/init.lua +++ b/mods/ITEMS/mcl_bows/init.lua @@ -1,6 +1,5 @@ dofile(minetest.get_modpath("mcl_bows") .. "/arrow.lua") dofile(minetest.get_modpath("mcl_bows") .. "/bow.lua") -dofile(minetest.get_modpath("mcl_bows") .. "/crossbow.lua") minetest.register_alias("mcl_throwing:bow", "mcl_bows:bow") minetest.register_alias("mcl_throwing:arrow", "mcl_bows:arrow") diff --git a/mods/ITEMS/mcl_bows/locale/mcl_bows.pl.tr b/mods/ITEMS/mcl_bows/locale/mcl_bows.pl.tr new file mode 100644 index 000000000..a518ac0ea --- /dev/null +++ b/mods/ITEMS/mcl_bows/locale/mcl_bows.pl.tr @@ -0,0 +1,16 @@ +# textdomain: mcl_bows +Arrow=Strzała +Arrows are ammunition for bows and dispensers.=Strzały są amunicją do łuku i dozowników. +An arrow fired from a bow has a regular damage of 1-9. At full charge, there's a 20% chance of a critical hit dealing 10 damage instead. An arrow fired from a dispenser always deals 3 damage.=Strzała wypuszczona z łuku ma typowe obrażania 1-9. Przy pełnym napięciu jest szansa 20% na trafienie krytyczne zadające 10 obrażeń. Strzała wystrzelona z dozownika zawsze zadaje 3 obrażenia. +Arrows might get stuck on solid blocks and can be retrieved again. They are also capable of pushing wooden buttons.=Strzały zatrzymują się na stałych blokach i mogą być wówczas odzyskane. Są również w stanie klikać drewniane przyciski. +To use arrows as ammunition for a bow, just put them anywhere in your inventory, they will be used up automatically. To use arrows as ammunition for a dispenser, place them in the dispenser's inventory. To retrieve an arrow that sticks in a block, simply walk close to it.=Aby użyć strzał jako amunicję do łuku umieść je gdziekolwiek w twoim ekwipunku, będą użyte automatyczne. Aby użyć strzał jako amunicję do dozownika umieść je w jego ekwipunku. Aby odzyskać strzałę wbitą w blok po prostu podejdź do niej. +Bow=Łuk +Bows are ranged weapons to shoot arrows at your foes.=Łuki to bronie dystansowe do strzelania strzałami w twoich przeciwników. +The speed and damage of the arrow increases the longer you charge. The regular damage of the arrow is between 1 and 9. At full charge, there's also a 20% of a critical hit, dealing 10 damage instead.=Szybkość i obrażenia strzały wzrastają im dłużej ją naciągasz. Zwykłe obrażenia strzały są pomiędzy 1 a 9. Przy pełnym napięciu jest szansa 20% na trafienie krytyczne zadające 10 obrażeń. +To use the bow, you first need to have at least one arrow anywhere in your inventory (unless in Creative Mode). Hold down the right mouse button to charge, release to shoot.=Aby użyć łuku musisz mieć przynajmniej jedną strzałę gdziekolwiek w twoim ekwipunku (chyba, że to tryb Kreatywny). Przytrzymaj prawy przycisk myszy aby napiąć łuk, puść by strzelić. +Bow=Łuk +Ammunition=Amunicja +Damage from bow: 1-10=Obrażenia z łuku 1-10 +Damage from dispenser: 3=Obrażenia z dozownika: 3 +Launches arrows=Strzela strzałami + diff --git a/mods/ITEMS/mcl_bows/mod.conf b/mods/ITEMS/mcl_bows/mod.conf new file mode 100644 index 000000000..79ae42436 --- /dev/null +++ b/mods/ITEMS/mcl_bows/mod.conf @@ -0,0 +1,6 @@ +name = mcl_bows +author = Arcelmi +description = This mod adds bows and arrows for MineClone 2. +depends = controls, mcl_particles, mcl_enchanting, mcl_init +optional_depends = awards, mcl_achievements, mcl_core, mcl_mobitems, playerphysics, doc, doc_identifier, mesecons_button + diff --git a/mods/ITEMS/mcl_bows/models/mcl_bows_arrow.obj b/mods/ITEMS/mcl_bows/models/mcl_bows_arrow.obj new file mode 100644 index 000000000..bee2c0f4b --- /dev/null +++ b/mods/ITEMS/mcl_bows/models/mcl_bows_arrow.obj @@ -0,0 +1,56 @@ +# Blender v2.92.0 OBJ File: '' +# www.blender.org +mtllib mcl_bows_arrow.mtl +o Plane +v 3.782006 1.444249 -0.000500 +v 3.782006 -1.443249 -0.000500 +v -3.782006 -1.443249 -0.000500 +v -3.782006 1.444249 -0.000500 +v 3.331104 -1.100076 -1.064829 +v 3.331104 1.069925 -1.064830 +v 3.331104 1.069925 1.085017 +v 3.331104 -1.100076 1.085017 +v 3.782006 0.001000 -1.443750 +v -3.782006 0.001000 -1.443749 +v -3.782006 0.001000 1.443750 +v 3.782006 0.001000 1.443749 +v 3.782006 1.444249 0.000500 +v -3.782006 1.444249 0.000500 +v -3.782006 -1.443249 0.000500 +v 3.782006 -1.443249 0.000500 +v 3.782006 0.000000 -1.443750 +v 3.782006 -0.000000 1.443749 +v -3.782006 -0.000000 1.443750 +v -3.782006 0.000000 -1.443749 +vt -0.000893 0.835148 +vt -0.000893 1.008567 +vt 0.486244 1.008567 +vt 0.486244 0.835148 +vt 0.159016 0.682983 +vt 0.159016 0.849928 +vt -0.005031 0.849928 +vt -0.005031 0.682983 +vt -0.000893 0.835148 +vt 0.486244 0.835148 +vt 0.486244 1.008567 +vt -0.000893 1.008567 +vt -0.000893 0.835148 +vt 0.486244 0.835148 +vt 0.486244 1.008567 +vt -0.000893 1.008567 +vt -0.000893 0.835148 +vt -0.000893 1.008567 +vt 0.486244 1.008567 +vt 0.486244 0.835148 +vn 0.0000 0.0000 -1.0000 +vn 1.0000 0.0000 0.0000 +vn 0.0000 1.0000 0.0000 +vn 0.0000 -0.0000 1.0000 +vn -0.0000 -1.0000 -0.0000 +usemtl Material.002 +s 1 +f 1/1/1 2/2/1 3/3/1 4/4/1 +f 5/5/2 6/6/2 7/7/2 8/8/2 +f 9/9/3 10/10/3 11/11/3 12/12/3 +f 13/13/4 14/14/4 15/15/4 16/16/4 +f 17/17/5 18/18/5 19/19/5 20/20/5 diff --git a/mods/ITEMS/mcl_bows/sounds/mcl_bows_crossbow_drawback_0.ogg b/mods/ITEMS/mcl_bows/sounds/mcl_bows_crossbow_drawback_0.ogg deleted file mode 100644 index f4f81b30749b453245ee3b3280244ceecb167fe0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 13529 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

f;m2@iI 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�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 Qoyb|&u<}Xhfw1ns0I+TuF#rGn diff --git a/mods/ITEMS/mcl_bows/sounds/mcl_bows_crossbow_load.ogg b/mods/ITEMS/mcl_bows/sounds/mcl_bows_crossbow_load.ogg deleted file mode 100644 index 02d2fd1afcbb49c4eb423909287e3c80378435a0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7627 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 diff --git a/mods/ITEMS/mcl_bows/sounds/mcl_bows_crossbow_shoot.ogg b/mods/ITEMS/mcl_bows/sounds/mcl_bows_crossbow_shoot.ogg deleted file mode 100644 index a7d7b69d12fdd3ff614c0c612faa7a2d03f40459..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9767 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 h@mz2nxK18jA1T) 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 BFlqn* literal 173 zcmeAS@N?(olHy`uVBq!ia0vp^N+8U_3?xrvihTr9q5(c3u0Z<5ix*FyJUDs$U}2Pd zdXUTHzK)8C>sA0I7)yfuf*Bm1-ADs++&oh diff --git a/mods/ITEMS/mcl_bows/textures/mcl_bows_arrow_back.png b/mods/ITEMS/mcl_bows/textures/mcl_bows_arrow_back.png index 18164e90a991d123c0be6a9fea216cd7a0a9201a..4fa82ce26da5e9aec5dddad48d51048d07dc9239 100644 GIT binary patch delta 196 zcmZo+yuvs^qMn0|fq}uwo%;}wVoUONcVTz|f-jEWF$Rio7I;J!Gca%qgD@k*tT_@u zLG}_)Usv|0%sk@k0%x{dTMraU^mK6yi8!2`Ai=sgL8PZC(7@rr(Qa`b{kS~~W>zgb z_$bh=$cc^j&+)WrEiEjb&-i8uNS1P#%6zhwZ~Oo6=g0kR|A6^>bP0l+XkKhZ!Z~ diff --git a/mods/ITEMS/mcl_bows/textures/mcl_bows_arrow_overlay.png b/mods/ITEMS/mcl_bows/textures/mcl_bows_arrow_overlay.png index 2ca26c58a8cc478a025a0f8708c1113600c96466..ee628e29da37776efb17ea2e461195cd45711c0e 100644 GIT binary patch literal 3065 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 Hu0mjf7r+3| literal 317 zcmeAS@N?(olHy`uVBq!ia0vp^N+8U^1|+TAxeoy;#^NA%Cx&(BWL^R}7O4@QX}-P; zT0k}j17mw80}DtA5K93u0|V0nCb)>w0%imoB&oQmIS)u}_H=O!iQr65kYHV`XduM| zCPMfc#r5O cbjafXhKP~Pfv%lW*&uIty85}Sb4q9e0ODF%DgXcg diff --git a/mods/ITEMS/mcl_bows/textures/mcl_bows_crossbow.png b/mods/ITEMS/mcl_bows/textures/mcl_bows_crossbow.png deleted file mode 100644 index 736d1a2c61c2510794ee5ed675dfaf968d49cb69..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 558 zcmV+}0@3}6P)|Elyj=lQ2gM)cR1&L&iB3?M1)1w?h{KU_aXjM z#|Imt`>U%VPj_SNZ7KPBE((|i)a!L=G#XSY6?Np>vcD4}>8$`TxC!BSE1Wj_uw?xc z=}~I6ni(yfPRqMjt{f&TNo@XI`YfBxPFXNbp->PJ;V@yz>zA8GJbC%9cnWa$a#_s_c}X|>J29GPeJ-yt;&yk$oA;kM z`B=h_+j1}9_+Uev)mtvFq173yi{8+PKfHZ`=Z1OwC^8o^_aC%6V-*B}XmPtcGIsp9 zEv?R2%~%-RgwO}2Qc3dpyqRPY;zX8bE%d&9$637vAeYOTz$WczNOF69%8JUQqT;z> znrD3;CZ1ERR%g=oL37AZe&%d=#Rc6Y=@Z@4%>Lv%)e0BRaYK48>jM*si-07*qoM6N<$f){D}@$rOoB81uM^ZA=70C)SKPx8Sg0F6dNOw*)Nsi^IwSJH_P z8Ep-K@tK>Twnnox0+;9S3sx)jdR_E*6g?g#m&?hUR}snT9?>^1!@5@}6dV@Z7RWSB z05;q|Bpd!svvtVPDYSbtW!)(ji&rcv5!)j9d|tBQuQXeS1Ok2ly2AlGSvCRnHd0000EnPb zzBLiSbzSngZ8~30SjFq-_eI^$&!-eJQEcagPhUj?@B!p=+W<71O|fm8dcCf_$Ofg5 ziBdHD08FlYL<~PIXAB#GzdtA`jYdPvbOJM-pjtyY&T_!N6&zDp_ola_PJ*(G%Pb4}IMYPB_snuuqSN~I#D_-9(qDVv*N0D8kIo&H?2EQ`@- zBnJlv+9H9cKzUwlR{pcepeT}6Y^X~i6U8|mb9RZ>-0r#*4L_-Pm~1jA`~yA}RnhQ! zo>lQ82|zBFyIH{^I{mrU8&19EcGqQRcaOt;YfXtagUOZ8o493JOG|4 zt5Ic>L5YO#P<*mQcQ9jeam{4;m0m4Z{ zK~y-)m6OkF6G0TmKU3D2O^Ia@ON`Mpsl-TkOQ0=1Sg>A#UaZID=tc0nAb9CP@FIl0 z`(Gp{>1EF)y)8wE*my7)u_ctm#$e!i&>iv<>K6uPn0cS~zHeq236@ zu^|AR3j-@Q>MHd3|o=V=iCtGU?>c?%Cmf~b@#c?vG0JyG8 zGMStY*mX=e;gA@vd*?_&BWwByI?fInD)xo2X zcl$47(uOgstf1Lfq4!b9ENMXJ!q6ReU3V_z_JoZEfY!Gk`oV-(<+?7f-n^f(1L&Ip zP){G+kX&k!`f;0^_Oq!HL(gFYv)L@KUp}GJ{Y}v9DAx{0a5?}010qNS#tmY3ljhU3ljkVnw%H_000McNliruY|9%OsbSS6J<9$FfxH3^B0v4Qarc8&RvI`G2#GR!mco0*qxx69Ivc|_z) zXZhN+48FsWNCW`$=2gm{zcOqatFz+Yo6Q#M%W+l~lx*#a0#G7>UjS^|#&un_W@?gM zjH5?;0Mt*y=+Pb}?;Gu(u=S;*0K$XWDwPU`VUWw^+ct(_(0c!p>sphN*WkGQClJ80tPzPJ|Khr?Di(|E*P0~bmx$?6*3*|UQr=Gl`6)LW;Ns~x38gp~y)0RDbY zGBc%#eqjpz;xtBbhS%?EfBl6snVHh${+&2G`#;z_X#GE6um|O8NBsu;dib=XqM7CZ O0000 + Copyright (C) 2011-2012 celeron55, Perttu Ahola This program is free software; you can redistribute it and/or modify diff --git a/mods/ITEMS/mcl_buckets/depends.txt b/mods/ITEMS/mcl_buckets/depends.txt deleted file mode 100644 index eb9bca8d8..000000000 --- a/mods/ITEMS/mcl_buckets/depends.txt +++ /dev/null @@ -1,4 +0,0 @@ -mcl_worlds -mcl_core? -mclx_core? -doc? diff --git a/mods/ITEMS/mcl_buckets/init.lua b/mods/ITEMS/mcl_buckets/init.lua index 3a06272b3..931214b95 100644 --- a/mods/ITEMS/mcl_buckets/init.lua +++ b/mods/ITEMS/mcl_buckets/init.lua @@ -1,23 +1,35 @@ -local S = minetest.get_translator("mcl_buckets") - --- Minetest 0.4 mod: bucket -- See README.txt for licensing and other information. +local modname = minetest.get_current_modname() +local S = minetest.get_translator(modname) +local modpath = minetest.get_modpath(modname) +-- Compatibility with old bucket mod minetest.register_alias("bucket:bucket_empty", "mcl_buckets:bucket_empty") minetest.register_alias("bucket:bucket_water", "mcl_buckets:bucket_water") minetest.register_alias("bucket:bucket_lava", "mcl_buckets:bucket_lava") local mod_doc = minetest.get_modpath("doc") local mod_mcl_core = minetest.get_modpath("mcl_core") -local mod_mclx_core = minetest.get_modpath("mclx_core") +--local mod_mclx_core = minetest.get_modpath("mclx_core") + +-- Localize some functions for faster access +local vector = vector +local math = math +local string = string + +local raycast = minetest.raycast +local get_node = minetest.get_node +local add_node = minetest.add_node +local add_item = minetest.add_item + if mod_mcl_core then minetest.register_craft({ - output = 'mcl_buckets:bucket_empty 1', + output = "mcl_buckets:bucket_empty 1", recipe = { - {'mcl_core:iron_ingot', '', 'mcl_core:iron_ingot'}, - {'', 'mcl_core:iron_ingot', ''}, - } + {"mcl_core:iron_ingot", "", "mcl_core:iron_ingot"}, + {"", "mcl_core:iron_ingot", ""}, + }, }) end @@ -25,163 +37,218 @@ mcl_buckets = {} mcl_buckets.liquids = {} -- Sound helper functions for placing and taking liquids -local sound_place = function(itemname, pos) +local function sound_place(itemname, pos) local def = minetest.registered_nodes[itemname] if def and def.sounds and def.sounds.place then minetest.sound_play(def.sounds.place, {gain=1.0, pos = pos, pitch = 1 + math.random(-10, 10)*0.005}, true) end end -local sound_take = function(itemname, pos) +local function sound_take(itemname, pos) local def = minetest.registered_nodes[itemname] if def and def.sounds and def.sounds.dug then minetest.sound_play(def.sounds.dug, {gain=1.0, pos = pos, pitch = 1 + math.random(-10, 10)*0.005}, true) end end -local place_liquid = function(pos, itemstring) +local function place_liquid(pos, itemstring) local fullness = minetest.registered_nodes[itemstring].liquid_range sound_place(itemstring, pos) minetest.add_node(pos, {name=itemstring, param2=fullness}) end --- Register a new liquid --- source_place = a string or function. --- * string: name of the node to place --- * function(pos): will returns name of the node to place with pos being the placement position --- source_take = table of liquid source node names to take --- itemname = itemstring of the new bucket item (or nil if liquid is not takeable) --- inventory_image = texture of the new bucket item (ignored if itemname == nil) --- name = user-visible bucket description --- longdesc = long explanatory description (for help) --- usagehelp = short usage explanation (for help) --- tt_help = very short tooltip help --- extra_check(pos, placer) = optional function(pos) which can returns false to avoid placing the liquid. --- placer is object/player who is placing the liquid, can be nil --- groups = optional list of item groups --- --- This function can be called from any mod (which depends on this one) -function mcl_buckets.register_liquid(source_place, source_take, itemname, inventory_image, name, longdesc, usagehelp, tt_help, extra_check, groups) - for i=1, #source_take do - mcl_buckets.liquids[source_take[i]] = { - source_place = source_place, - source_take = source_take[i], - itemname = itemname, +local function give_bucket(new_bucket, itemstack, user) + local inv = user:get_inventory() + if minetest.is_creative_enabled(user:get_player_name()) then + --TODO: is a full bucket added if inv doesn't contain one? + return itemstack + else + if itemstack:get_count() == 1 then + return new_bucket + else + if inv:room_for_item("main", new_bucket) then + inv:add_item("main", new_bucket) + else + add_item(user:get_pos(), new_bucket) + end + itemstack:take_item() + return itemstack + end + end +end + +local pointable_sources = {} + +local function bucket_raycast(user) + --local pos = user:get_pos() + local pos = user:get_pos() + --local pos = vector.add(user:get_pos(), user:get_bone_position("Head_Control")) + pos.y = pos.y + user:get_properties().eye_height + local look_dir = user:get_look_dir() + look_dir = vector.multiply(look_dir, 5) + local pos2 = vector.add(pos, look_dir) + + local ray = raycast(pos, pos2, false, true) + if ray then + for pointed_thing in ray do + if pointed_thing and pointable_sources[get_node(pointed_thing.above).name] then + --minetest.chat_send_all("found!") + return {under=pointed_thing.under,above=pointed_thing.above} + end + end + end + return nil +end + +local function get_node_place(source_place, place_pos) + local node_place + if type(source_place) == "function" then + node_place = source_place(place_pos) + else + node_place = source_place + end + return node_place +end + +local function get_extra_check(check, pos, user) + local result + local take_bucket + if check then + result, take_bucket = check(pos, user) + if result == nil then result = true end + if take_bucket == nil then take_bucket = true end + else + result = true + take_bucket = true + end + return result, take_bucket +end + +local function get_bucket_drop(itemstack, user, take_bucket) + -- Handle bucket item and inventory stuff + if take_bucket and not minetest.is_creative_enabled(user:get_player_name()) then + -- Add empty bucket and put it into inventory, if possible. + -- Drop empty bucket otherwise. + local new_bucket = ItemStack("mcl_buckets:bucket_empty") + if itemstack:get_count() == 1 then + return new_bucket + else + local inv = user:get_inventory() + if inv:room_for_item("main", new_bucket) then + inv:add_item("main", new_bucket) + else + add_item(user:get_pos(), new_bucket) + end + itemstack:take_item() + return itemstack + end + else + return itemstack + end +end + +function mcl_buckets.register_liquid(def) + for _,source in ipairs(def.source_take) do + mcl_buckets.liquids[source] = { + source_place = def.source_place, + source_take = source, + on_take = def.on_take, + bucketname = def.bucketname, } - if type(source_place) == "string" then - mcl_buckets.liquids[source_place] = mcl_buckets.liquids[source_take[i]] + pointable_sources[source] = true + if type(def.source_place) == "string" then + mcl_buckets.liquids[def.source_place] = mcl_buckets.liquids[source] end end - if itemname ~= nil then - minetest.register_craftitem(itemname, { - description = name, - _doc_items_longdesc = longdesc, - _doc_items_usagehelp = usagehelp, - _tt_help = tt_help, - inventory_image = inventory_image, - stack_max = 16, - groups = groups, - on_place = function(itemstack, user, pointed_thing) - -- Must be pointing to node - if pointed_thing.type ~= "node" then - return - end + if def.bucketname == nil or def.bucketname == "" then + error(string.format("[mcl_bucket] Invalid itemname then registering [%s]!", def.name)) + end - local node = minetest.get_node(pointed_thing.under) - local place_pos = pointed_thing.under - local nn = node.name - -- Call on_rightclick if the pointed node defines it - if user and not user:get_player_control().sneak then - if minetest.registered_nodes[nn] and minetest.registered_nodes[nn].on_rightclick then - return minetest.registered_nodes[nn].on_rightclick(place_pos, node, user, itemstack) or itemstack - end - end + minetest.register_craftitem(def.bucketname, { + description = def.name, + _doc_items_longdesc = def.longdesc, + _doc_items_usagehelp = def.usagehelp, + _tt_help = def.tt_help, + inventory_image = def.inventory_image, + stack_max = 1, + groups = def.groups, + on_place = function(itemstack, user, pointed_thing) + -- Must be pointing to node + if pointed_thing.type ~= "node" then + return + end + -- Call on_rightclick if the pointed node defines it + local new_stack = mcl_util.call_on_rightclick(itemstack, user, pointed_thing) + if new_stack then + return new_stack + end - local node_place - if type(source_place) == "function" then - node_place = source_place(place_pos) - else - node_place = source_place - end - -- Check if pointing to a buildable node - local item = itemstack:get_name() + local undernode = get_node(pointed_thing.under) + local abovenode = get_node(pointed_thing.above) + local buildable1 = minetest.registered_nodes[undernode.name] and minetest.registered_nodes[undernode.name].buildable_to + local buildable2 = minetest.registered_nodes[abovenode.name] and minetest.registered_nodes[abovenode.name].buildable_to + if not buildable1 and not buildable2 then return itemstack end --if both nodes aren't buildable_to, skip - if extra_check and extra_check(place_pos, user) == false then - -- Fail placement of liquid - elseif minetest.registered_nodes[nn] and minetest.registered_nodes[nn].buildable_to then - -- buildable; replace the node + if buildable1 then + local result, take_bucket = get_extra_check(def.extra_check, pointed_thing.under, user) + if result then + local node_place = get_node_place(def.source_place, pointed_thing.under) local pns = user:get_player_name() - if minetest.is_protected(place_pos, pns) then - minetest.record_protection_violation(place_pos, pns) + + -- Check protection + if minetest.is_protected(pointed_thing.under, pns) then + minetest.record_protection_violation(pointed_thing.under, pns) return itemstack end - place_liquid(place_pos, node_place) + + -- Place liquid + place_liquid(pointed_thing.under, node_place) + + -- Update doc mod if mod_doc and doc.entry_exists("nodes", node_place) then doc.mark_entry_as_revealed(user:get_player_name(), "nodes", node_place) end - else - -- not buildable to; place the liquid above - -- check if the node above can be replaced - local abovenode = minetest.get_node(pointed_thing.above) - if minetest.registered_nodes[abovenode.name] and minetest.registered_nodes[abovenode.name].buildable_to then - local pn = user:get_player_name() - if minetest.is_protected(pointed_thing.above, pn) then - minetest.record_protection_violation(pointed_thing.above, pn) - return itemstack - end - place_liquid(pointed_thing.above, node_place) - if mod_doc and doc.entry_exists("nodes", node_place) then - doc.mark_entry_as_revealed(user:get_player_name(), "nodes", node_place) - end - else - -- do not remove the bucket with the liquid - return - end end + return get_bucket_drop(itemstack, user, take_bucket) + elseif buildable2 then + local result, take_bucket = get_extra_check(def.extra_check, pointed_thing.above, user) + if result then + local node_place = get_node_place(def.source_place, pointed_thing.above) + local pns = user:get_player_name() - -- Handle bucket item and inventory stuff - if not minetest.is_creative_enabled(user:get_player_name()) then - -- Add empty bucket and put it into inventory, if possible. - -- Drop empty bucket otherwise. - local new_bucket = ItemStack("mcl_buckets:bucket_empty") - if itemstack:get_count() == 1 then - return new_bucket - else - local inv = user:get_inventory() - if inv:room_for_item("main", new_bucket) then - inv:add_item("main", new_bucket) - else - minetest.add_item(user:get_pos(), new_bucket) - end - itemstack:take_item() + -- Check protection + if minetest.is_protected(pointed_thing.above, pns) then + minetest.record_protection_violation(pointed_thing.above, pns) return itemstack end - else - return - end - end, - _on_dispense = function(stack, pos, droppos, dropnode, dropdir) - local iname = stack:get_name() - local buildable = minetest.registered_nodes[dropnode.name].buildable_to - if extra_check and extra_check(droppos, nil) == false then - -- Fail placement of liquid - elseif buildable then - -- buildable; replace the node - local node_place - if type(source_place) == "function" then - node_place = source_place(droppos) - else - node_place = source_place + -- Place liquid + place_liquid(pointed_thing.above, node_place) + + -- Update doc mod + if mod_doc and doc.entry_exists("nodes", node_place) then + doc.mark_entry_as_revealed(user:get_player_name(), "nodes", node_place) end - place_liquid(droppos, node_place) - stack:set_name("mcl_buckets:bucket_empty") end - return stack - end, - }) - end + return get_bucket_drop(itemstack, user, take_bucket) + else + return itemstack + end + end, + _on_dispense = function(stack, pos, droppos, dropnode, dropdir) + local buildable = minetest.registered_nodes[dropnode.name].buildable_to or dropnode.name == "mcl_portals:portal" + if not buildable then return stack end + local result, take_bucket = get_extra_check(def.extra_check, droppos, nil) + if result then -- Fail placement of liquid if result is false + place_liquid(droppos, get_node_place(def.source_place, droppos)) + end + if take_bucket then + stack:set_name("mcl_buckets:bucket_empty") + end + return stack + end, + }) end minetest.register_craftitem("mcl_buckets:bucket_empty", { @@ -189,8 +256,7 @@ minetest.register_craftitem("mcl_buckets:bucket_empty", { _doc_items_longdesc = S("A bucket can be used to collect and release liquids."), _doc_items_usagehelp = S("Punch a liquid source to collect it. You can then use the filled bucket to place the liquid somewhere else."), _tt_help = S("Collects liquids"), - - liquids_pointable = true, + --liquids_pointable = true, inventory_image = "bucket.png", stack_max = 16, on_place = function(itemstack, user, pointed_thing) @@ -200,71 +266,70 @@ minetest.register_craftitem("mcl_buckets:bucket_empty", { end -- Call on_rightclick if the pointed node defines it + local new_stack = mcl_util.call_on_rightclick(itemstack, user, pointed_thing) + if new_stack then + return new_stack + end + local node = minetest.get_node(pointed_thing.under) local nn = node.name - if user and not user:get_player_control().sneak then - if minetest.registered_nodes[nn] and minetest.registered_nodes[nn].on_rightclick then - return minetest.registered_nodes[nn].on_rightclick(pointed_thing.under, node, user, itemstack) or itemstack - end - end - -- Can't steal liquids - if minetest.is_protected(pointed_thing.above, user:get_player_name()) then - minetest.record_protection_violation(pointed_thing.under, user:get_player_name()) - return itemstack - end - - -- Check if pointing to a liquid source - local liquiddef = mcl_buckets.liquids[nn] local new_bucket - if liquiddef ~= nil and liquiddef.itemname ~= nil and (nn == liquiddef.source_take) then - - -- Fill bucket, but not in Creative Mode - if not minetest.is_creative_enabled(user:get_player_name()) then - new_bucket = ItemStack({name = liquiddef.itemname}) + local liquid_node = bucket_raycast(user) + if liquid_node then + if minetest.is_protected(liquid_node.above, user:get_player_name()) then + minetest.record_protection_violation(liquid_node.above, user:get_player_name()) end + local liquid_name = get_node(liquid_node.above).name + if liquid_name then + local liquid_def = mcl_buckets.liquids[liquid_name] + if liquid_def then + --minetest.chat_send_all("test") + -- Fill bucket, but not in Creative Mode + -- FIXME: remove this line + --if not minetest.is_creative_enabled(user:get_player_name()) then + if not false then + new_bucket = ItemStack({name = liquid_def.bucketname}) + if liquid_def.on_take then + liquid_def.on_take(user) + end + end + add_node(liquid_node.above, {name="air"}) + sound_take(nn, liquid_node.above) - minetest.add_node(pointed_thing.under, {name="air"}) - sound_take(nn, pointed_thing.under) - - if mod_doc and doc.entry_exists("nodes", nn) then - doc.mark_entry_as_revealed(user:get_player_name(), "nodes", nn) - end - - elseif nn == "mcl_cauldrons:cauldron_3" then - -- Take water out of full cauldron - minetest.set_node(pointed_thing.under, {name="mcl_cauldrons:cauldron"}) - if not minetest.is_creative_enabled(user:get_player_name()) then - new_bucket = ItemStack("mcl_buckets:bucket_water") - end - sound_take("mcl_core:water_source", pointed_thing.under) - elseif nn == "mcl_cauldrons:cauldron_3r" then - -- Take river water out of full cauldron - minetest.set_node(pointed_thing.under, {name="mcl_cauldrons:cauldron"}) - if not minetest.is_creative_enabled(user:get_player_name()) then - new_bucket = ItemStack("mcl_buckets:bucket_river_water") - end - sound_take("mclx_core:river_water_source", pointed_thing.under) - end - - -- Add liquid bucket and put it into inventory, if possible. - -- Drop new bucket otherwise. - if new_bucket then - if itemstack:get_count() == 1 then - return new_bucket - else - local inv = user:get_inventory() - if inv:room_for_item("main", new_bucket) then - inv:add_item("main", new_bucket) + if mod_doc and doc.entry_exists("nodes", liquid_name) then + doc.mark_entry_as_revealed(user:get_player_name(), "nodes", liquid_name) + end + if new_bucket then + return give_bucket(new_bucket, itemstack, user) + end else - minetest.add_item(user:get_pos(), new_bucket) + minetest.log("error", string.format("[mcl_buckets] Node [%s] has invalid group [_mcl_bucket_pointable]!", liquid_name)) end - if not minetest.is_creative_enabled(user:get_player_name()) then - itemstack:take_item() - end - return itemstack end - end + return itemstack + else + -- FIXME: replace this ugly code by cauldrons API + if nn == "mcl_cauldrons:cauldron_3" then + -- Take water out of full cauldron + minetest.set_node(pointed_thing.under, {name="mcl_cauldrons:cauldron"}) + if not minetest.is_creative_enabled(user:get_player_name()) then + new_bucket = ItemStack("mcl_buckets:bucket_water") + end + sound_take("mcl_core:water_source", pointed_thing.under) + elseif nn == "mcl_cauldrons:cauldron_3r" then + -- Take river water out of full cauldron + minetest.set_node(pointed_thing.under, {name="mcl_cauldrons:cauldron"}) + if not minetest.is_creative_enabled(user:get_player_name()) then + new_bucket = ItemStack("mcl_buckets:bucket_river_water") + end + sound_take("mclx_core:river_water_source", pointed_thing.under) + end + if new_bucket then + return give_bucket(new_bucket, itemstack, user) + end + end + return itemstack end, _on_dispense = function(stack, pos, droppos, dropnode, dropdir) -- Fill empty bucket with liquid or drop bucket if no liquid @@ -272,9 +337,9 @@ minetest.register_craftitem("mcl_buckets:bucket_empty", { local liquiddef = mcl_buckets.liquids[dropnode.name] local new_bucket - if liquiddef ~= nil and liquiddef.itemname ~= nil and (dropnode.name == liquiddef.source_take) then + if liquiddef and liquiddef.bucketname and (dropnode.name == liquiddef.source_take) then -- Fill bucket - new_bucket = ItemStack({name = liquiddef.itemname}) + new_bucket = ItemStack({name = liquiddef.bucketname}) sound_take(dropnode.name, droppos) collect_liquid = true end @@ -292,114 +357,4 @@ minetest.register_craftitem("mcl_buckets:bucket_empty", { end, }) -if mod_mcl_core then - -- Lava bucket - mcl_buckets.register_liquid( - function(pos) - local dim = mcl_worlds.pos_to_dimension(pos) - if dim == "nether" then - return "mcl_nether:nether_lava_source" - else - return "mcl_core:lava_source" - end - end, - {"mcl_core:lava_source", "mcl_nether:nether_lava_source"}, - "mcl_buckets:bucket_lava", - "bucket_lava.png", - S("Lava Bucket"), - S("A bucket can be used to collect and release liquids. This one is filled with hot lava, safely contained inside. Use with caution."), - S("Get in a safe distance and place the bucket to empty it and create a lava source at this spot. Don't burn yourself!"), - S("Places a lava source") - ) - - -- Water bucket - mcl_buckets.register_liquid( - "mcl_core:water_source", - {"mcl_core:water_source"}, - "mcl_buckets:bucket_water", - "bucket_water.png", - S("Water Bucket"), - S("A bucket can be used to collect and release liquids. This one is filled with water."), - S("Place it to empty the bucket and create a water source."), - S("Places a water source"), - function(pos, placer) - -- Check protection - local placer_name = "" - if placer ~= nil then - placer_name = placer:get_player_name() - end - if placer and minetest.is_protected(pos, placer_name) then - minetest.record_protection_violation(pos, placer_name) - return false - end - local nn = minetest.get_node(pos).name - -- Pour water into cauldron - if minetest.get_item_group(nn, "cauldron") ~= 0 then - -- Put water into cauldron - if nn ~= "mcl_cauldrons:cauldron_3" then - minetest.set_node(pos, {name="mcl_cauldrons:cauldron_3"}) - end - sound_place("mcl_core:water_source", pos) - return false - -- Evaporate water if used in Nether (except on cauldron) - else - local dim = mcl_worlds.pos_to_dimension(pos) - if dim == "nether" then - minetest.sound_play("fire_extinguish_flame", {pos = pos, gain = 0.25, max_hear_distance = 16}, true) - return false - end - end - end, - { water_bucket = 1 } - ) -end - -if mod_mclx_core then - -- River water bucket - mcl_buckets.register_liquid( - "mclx_core:river_water_source", - {"mclx_core:river_water_source"}, - "mcl_buckets:bucket_river_water", - "bucket_river_water.png", - S("River Water Bucket"), - S("A bucket can be used to collect and release liquids. This one is filled with river water."), - S("Place it to empty the bucket and create a river water source."), - S("Places a river water source"), - function(pos, placer) - -- Check protection - local placer_name = "" - if placer ~= nil then - placer_name = placer:get_player_name() - end - if placer and minetest.is_protected(pos, placer_name) then - minetest.record_protection_violation(pos, placer_name) - return false - end - local nn = minetest.get_node(pos).name - -- Pour into cauldron - if minetest.get_item_group(nn, "cauldron") ~= 0 then - -- Put water into cauldron - if nn ~= "mcl_cauldrons:cauldron_3r" then - minetest.set_node(pos, {name="mcl_cauldrons:cauldron_3r"}) - end - sound_place("mcl_core:water_source", pos) - return false - else - -- Evaporate water if used in Nether (except on cauldron) - local dim = mcl_worlds.pos_to_dimension(pos) - if dim == "nether" then - minetest.sound_play("fire_extinguish_flame", {pos = pos, gain = 0.25, max_hear_distance = 16}, true) - return false - end - end - end, - { water_bucket = 1 } - ) -end - -minetest.register_craft({ - type = "fuel", - recipe = "mcl_buckets:bucket_lava", - burntime = 1000, - replacements = {{"mcl_buckets:bucket_lava", "mcl_buckets:bucket_empty"}}, -}) +dofile(modpath.."/register.lua") diff --git a/mods/ITEMS/mcl_buckets/locale/mcl_buckets.pl.tr b/mods/ITEMS/mcl_buckets/locale/mcl_buckets.pl.tr new file mode 100644 index 000000000..f7593b14e --- /dev/null +++ b/mods/ITEMS/mcl_buckets/locale/mcl_buckets.pl.tr @@ -0,0 +1,17 @@ +# textdomain: mcl_buckets +Empty Bucket=Puste wiadro +A bucket can be used to collect and release liquids.=Wiadro może być użyte do zbierania i wylewania płynów. +Punch a liquid source to collect it. You can then use the filled bucket to place the liquid somewhere else.=Uderz w źródło płynu aby je zebrać. Możesz następnie użyć pełnego wiadra aby postawić płyn gdzie indziej. +Lava Bucket=Wiadro lawy +A bucket can be used to collect and release liquids. This one is filled with hot lava, safely contained inside. Use with caution.= Wiadro może być użyte do zbierania i wylewania płynów. To jest wypełnione lawą, bezpiecznie przechowywaną w środku. Używać z rozwagą. +Get in a safe distance and place the bucket to empty it and create a lava source at this spot. Don't burn yourself!=Odejdź na bezpieczną odległość i umieść wiadro aby je opróżnić i utworzyć źródło lawy w danym miejscu. Nie poparz się! +Water Bucket=Wiadro wody +A bucket can be used to collect and release liquids. This one is filled with water.=Wiadro może być użyte do zbierania i wylewania płynów. To jest wypełnione wodą. +Place it to empty the bucket and create a water source.=Umieść je aby opróżnić wiadro i utworzyć źródło wody. +River Water Bucket=Wiadro wody rzecznej +A bucket can be used to collect and release liquids. This one is filled with river water.= Wiadro może być użyte do zbierania i wylewania płynów. To jest wypełnione wodą rzeczną. +Place it to empty the bucket and create a river water source.=Umieść je aby opróżnić wiadro i utworzyć źródło wody rzecznej. +Collects liquids=Zbiera płyny +Places a lava source=Umieszcza źródło lawy +Places a water source=Umieszcza źródło wody +Places a river water source=Umieszcza źródło wody rzecznej diff --git a/mods/ITEMS/mcl_buckets/mod.conf b/mods/ITEMS/mcl_buckets/mod.conf new file mode 100644 index 000000000..0d7b764b8 --- /dev/null +++ b/mods/ITEMS/mcl_buckets/mod.conf @@ -0,0 +1,6 @@ +name = mcl_buckets +author = Kahrl +description = +depends = mcl_worlds, mcl_util +optional_depends = mcl_core, mclx_core, doc + diff --git a/mods/ITEMS/mcl_buckets/register.lua b/mods/ITEMS/mcl_buckets/register.lua new file mode 100644 index 000000000..1a7c8fe14 --- /dev/null +++ b/mods/ITEMS/mcl_buckets/register.lua @@ -0,0 +1,117 @@ +local S = minetest.get_translator(minetest.get_current_modname()) +local mod_mcl_core = minetest.get_modpath("mcl_core") +local mod_mclx_core = minetest.get_modpath("mclx_core") +local has_awards = minetest.get_modpath("awards") + +local function sound_place(itemname, pos) + local def = minetest.registered_nodes[itemname] + if def and def.sounds and def.sounds.place then + minetest.sound_play(def.sounds.place, {gain=1.0, pos = pos, pitch = 1 + math.random(-10, 10)*0.005}, true) + end +end + +--[[local sound_take = function(itemname, pos) + local def = minetest.registered_nodes[itemname] + if def and def.sounds and def.sounds.dug then + minetest.sound_play(def.sounds.dug, {gain=1.0, pos = pos, pitch = 1 + math.random(-10, 10)*0.005}, true) + end +end]] + +if mod_mcl_core then + -- Lava bucket + mcl_buckets.register_liquid({ + source_place = function(pos) + local dim = mcl_worlds.pos_to_dimension(pos) + if dim == "nether" then + return "mcl_nether:nether_lava_source" + else + return "mcl_core:lava_source" + end + end, + source_take = {"mcl_core:lava_source", "mcl_nether:nether_lava_source"}, + on_take = function(user) + if has_awards and user and user:is_player() then + awards.unlock(user:get_player_name(), "mcl:hotStuff") + end + end, + bucketname = "mcl_buckets:bucket_lava", + inventory_image = "bucket_lava.png", + name = S("Lava Bucket"), + longdesc = S("A bucket can be used to collect and release liquids. This one is filled with hot lava, safely contained inside. Use with caution."), + usagehelp = S("Get in a safe distance and place the bucket to empty it and create a lava source at this spot. Don't burn yourself!"), + tt_help = S("Places a lava source") + }) + + -- Water bucket + mcl_buckets.register_liquid({ + source_place = "mcl_core:water_source", + source_take = {"mcl_core:water_source"}, + bucketname = "mcl_buckets:bucket_water", + inventory_image = "bucket_water.png", + name = S("Water Bucket"), + longdesc = S("A bucket can be used to collect and release liquids. This one is filled with water."), + usagehelp = S("Place it to empty the bucket and create a water source."), + tt_help = S("Places a water source"), + extra_check = function(pos, placer) + local nn = minetest.get_node(pos).name + -- Pour water into cauldron + if minetest.get_item_group(nn, "cauldron") ~= 0 then + -- Put water into cauldron + if nn ~= "mcl_cauldrons:cauldron_3" then + minetest.set_node(pos, {name="mcl_cauldrons:cauldron_3"}) + end + sound_place("mcl_core:water_source", pos) + return false, true + -- Evaporate water if used in Nether (except on cauldron) + else + local dim = mcl_worlds.pos_to_dimension(pos) + if dim == "nether" then + minetest.sound_play("fire_extinguish_flame", {pos = pos, gain = 0.25, max_hear_distance = 16}, true) + return false, true + end + end + end, + groups = { water_bucket = 1 }, + }) +end + +if mod_mclx_core then + -- River water bucket + mcl_buckets.register_liquid({ + source_place = "mclx_core:river_water_source", + source_take = {"mclx_core:river_water_source"}, + bucketname = "mcl_buckets:bucket_river_water", + inventory_image = "bucket_river_water.png", + name = S("River Water Bucket"), + longdesc = S("A bucket can be used to collect and release liquids. This one is filled with river water."), + usagehelp = S("Place it to empty the bucket and create a river water source."), + tt_help = S("Places a river water source"), + extra_check = function(pos, placer) + local nn = minetest.get_node(pos).name + -- Pour into cauldron + if minetest.get_item_group(nn, "cauldron") ~= 0 then + -- Put water into cauldron + if nn ~= "mcl_cauldrons:cauldron_3r" then + minetest.set_node(pos, {name="mcl_cauldrons:cauldron_3r"}) + end + sound_place("mcl_core:water_source", pos) + return false, true + else + -- Evaporate water if used in Nether (except on cauldron) + local dim = mcl_worlds.pos_to_dimension(pos) + if dim == "nether" then + minetest.sound_play("fire_extinguish_flame", {pos = pos, gain = 0.25, max_hear_distance = 16}, true) + return false, true + end + end + end, + groups = { water_bucket = 1 }, + }) +end + +minetest.register_craft({ + type = "fuel", + recipe = "mcl_buckets:bucket_lava", + burntime = 1000, + replacements = {{"mcl_buckets:bucket_lava", "mcl_buckets:bucket_empty"}}, +}) diff --git a/mods/ITEMS/mcl_cake/depends.txt b/mods/ITEMS/mcl_cake/depends.txt deleted file mode 100644 index 1ed0ada15..000000000 --- a/mods/ITEMS/mcl_cake/depends.txt +++ /dev/null @@ -1,7 +0,0 @@ -mcl_core -mcl_sounds -mcl_hunger -mcl_buckets -mcl_farming -mcl_mobitems -doc? diff --git a/mods/ITEMS/mcl_cake/init.lua b/mods/ITEMS/mcl_cake/init.lua index cc6d50633..104071064 100644 --- a/mods/ITEMS/mcl_cake/init.lua +++ b/mods/ITEMS/mcl_cake/init.lua @@ -5,7 +5,7 @@ local CAKE_HUNGER_POINTS = 2 -local S = minetest.get_translator("mcl_cake") +local S = minetest.get_translator(minetest.get_current_modname()) local cake_texture = {"cake_top.png","cake_bottom.png","cake_inner.png","cake_side.png","cake_side.png","cake_side.png"} local slice_1 = { -7/16, -8/16, -7/16, -5/16, 0/16, 7/16} @@ -20,9 +20,9 @@ local full_cake = { -7/16, -8/16, -7/16, 7/16, 0/16, 7/16} minetest.register_craft({ output = "mcl_cake:cake", recipe = { - {'mcl_mobitems:milk_bucket', 'mcl_mobitems:milk_bucket', 'mcl_mobitems:milk_bucket'}, - {'mcl_core:sugar', 'mcl_throwing:egg', 'mcl_core:sugar'}, - {'mcl_farming:wheat_item', 'mcl_farming:wheat_item', 'mcl_farming:wheat_item'}, + {"mcl_mobitems:milk_bucket", "mcl_mobitems:milk_bucket", "mcl_mobitems:milk_bucket"}, + {"mcl_core:sugar", "mcl_throwing:egg", "mcl_core:sugar"}, + {"mcl_farming:wheat_item", "mcl_farming:wheat_item", "mcl_farming:wheat_item"}, }, replacements = { {"mcl_mobitems:milk_bucket", "mcl_buckets:bucket_empty"}, @@ -37,6 +37,7 @@ minetest.register_node("mcl_cake:cake", { _doc_items_longdesc = S("Cakes can be placed and eaten to restore hunger points. A cake has 7 slices. Each slice restores 2 hunger points and 0.4 saturation points. Cakes will be destroyed when dug or when the block below them is broken."), _doc_items_usagehelp = S("Place the cake anywhere, then rightclick it to eat a single slice. You can't eat from the cake when your hunger bar is full."), tiles = {"cake_top.png","cake_bottom.png","cake_side.png","cake_side.png","cake_side.png","cake_side.png"}, + use_texture_alpha = minetest.features.use_texture_alpha_string_modes and "opaque" or false, inventory_image = "cake.png", wield_image = "cake.png", paramtype = "light", @@ -52,7 +53,7 @@ minetest.register_node("mcl_cake:cake", { }, stack_max = 1, groups = {handy=1, cake=7, food=2,no_eat_delay=1, attached_node=1, dig_by_piston=1, comparator_signal=14}, - drop = '', + drop = "", on_rightclick = function(pos, node, clicker, itemstack) -- Cake is subject to protection local name = clicker:get_player_name() @@ -103,7 +104,7 @@ local register_slice = function(level, nodebox, desc) -- Check if we were allowed to eat if newcake:get_name() ~= this or minetest.is_creative_enabled(clicker:get_player_name()) then minetest.remove_node(pos) - core.check_for_falling(pos) + minetest.check_for_falling(pos) end end end @@ -112,6 +113,7 @@ local register_slice = function(level, nodebox, desc) description = desc, _doc_items_create_entry = false, tiles = cake_texture, + use_texture_alpha = minetest.features.use_texture_alpha_string_modes and "opaque" or false, paramtype = "light", is_ground_content = false, drawtype = "nodebox", @@ -124,7 +126,7 @@ local register_slice = function(level, nodebox, desc) fixed = nodebox, }, groups = {handy=1, cake=level, food=2,no_eat_delay=1,attached_node=1,not_in_creative_inventory=1,dig_by_piston=1,comparator_signal=level*2}, - drop = '', + drop = "", on_rightclick = on_rightclick, sounds = mcl_sounds.node_sound_leaves_defaults(), diff --git a/mods/ITEMS/mcl_cake/locale/mcl_cake.pl.tr b/mods/ITEMS/mcl_cake/locale/mcl_cake.pl.tr new file mode 100644 index 000000000..f90e665e7 --- /dev/null +++ b/mods/ITEMS/mcl_cake/locale/mcl_cake.pl.tr @@ -0,0 +1,12 @@ +# textdomain: mcl_cake +Cake=Ciasto +Cakes can be placed and eaten to restore hunger points. A cake has 7 slices. Each slice restores 2 hunger points and 0.4 saturation points. Cakes will be destroyed when dug or when the block below them is broken.=Ciasto może być postawione i zjedzone by odzyskać punkty głodu. Ciasto ma 7 kawałków. Każdy kawałek przywraca dwa punkty głodu i 0.4 punktu nasycenia. Ciasta zostaną zniszczone przy próbie wykopania, lub gdy blok pod nimi zostanie zniszczony. +Place the cake anywhere, then rightclick it to eat a single slice. You can't eat from the cake when your hunger bar is full.=Postaw ciasto gdziekolwiek, następnie kliknij prawym by zjeść pojedynczy kawałek. Nie możesz jeść ciasta gdy twój pasek głodu jest pełny. +Cake (6 Slices Left)=Ciasto (pozostały 6 kawałki) +Cake (5 Slices Left)=Ciasto (pozostały 5 kawałki) +Cake (4 Slices Left)=Ciasto (pozostały 4 kawałki) +Cake (3 Slices Left)=Ciasto (pozostały 3 kawałki) +Cake (2 Slices Left)=Ciasto (pozostały 2 kawałki) +Cake (1 Slice Left)=Ciasto (pozostał 1 kawałek) +With 7 tasty slices!=Z 7 pysznymi kawałkami! +Hunger points: +@1 per slice=Punkty głodu: +@1 za kawałek diff --git a/mods/ITEMS/mcl_cake/mod.conf b/mods/ITEMS/mcl_cake/mod.conf index 2a76657f5..e7260468e 100644 --- a/mods/ITEMS/mcl_cake/mod.conf +++ b/mods/ITEMS/mcl_cake/mod.conf @@ -1 +1,4 @@ name = mcl_cake +description = Add cakes to mcl +depends = mcl_core, mcl_sounds, mcl_hunger, mcl_buckets, mcl_farming, mcl_mobitems +optional_depends = doc diff --git a/mods/ITEMS/mcl_cauldrons/depends.txt b/mods/ITEMS/mcl_cauldrons/depends.txt deleted file mode 100644 index 2c344c60c..000000000 --- a/mods/ITEMS/mcl_cauldrons/depends.txt +++ /dev/null @@ -1,4 +0,0 @@ -mcl_core -mclx_core? -mcl_sounds -doc? diff --git a/mods/ITEMS/mcl_cauldrons/init.lua b/mods/ITEMS/mcl_cauldrons/init.lua index a82a0b53a..55866f5cc 100644 --- a/mods/ITEMS/mcl_cauldrons/init.lua +++ b/mods/ITEMS/mcl_cauldrons/init.lua @@ -1,4 +1,4 @@ -local S = minetest.get_translator("mcl_cauldron") +local S = minetest.get_translator(minetest.get_current_modname()) -- Cauldron mod, adds cauldrons. @@ -47,9 +47,10 @@ minetest.register_node("mcl_cauldrons:cauldron", { description = S("Cauldron"), _tt_help = S("Stores water"), _doc_items_longdesc = S("Cauldrons are used to store water and slowly fill up under rain."), - _doc_items_usagehelp = S("Place a water pucket into the cauldron to fill it with water. Place an empty bucket on a full cauldron to retrieve the water. Place a water bottle into the cauldron to fill the cauldron to one third with water. Place a glass bottle in a cauldron with water to retrieve one third of the water."), + _doc_items_usagehelp = S("Place a water bucket into the cauldron to fill it with water. Place an empty bucket on a full cauldron to retrieve the water. Place a water bottle into the cauldron to fill the cauldron to one third with water. Place a glass bottle in a cauldron with water to retrieve one third of the water."), wield_image = "mcl_cauldrons_cauldron.png", inventory_image = "mcl_cauldrons_cauldron.png", + use_texture_alpha = minetest.features.use_texture_alpha_string_modes and "opaque" or false, drawtype = "nodebox", paramtype = "light", is_ground_content = false, @@ -79,6 +80,7 @@ local register_filled_cauldron = function(water_level, description, river_water) minetest.register_node(id, { description = description, _doc_items_create_entry = false, + use_texture_alpha = minetest.features.use_texture_alpha_string_modes and "opaque" or false, drawtype = "nodebox", paramtype = "light", is_ground_content = false, @@ -129,7 +131,7 @@ minetest.register_abm({ interval = 0.5, chance = 1, action = function(pos, node) - for _, obj in ipairs(minetest.get_objects_inside_radius(pos, 0.4)) do + for _, obj in pairs(minetest.get_objects_inside_radius(pos, 0.4)) do if mcl_burning.is_burning(obj) then mcl_burning.extinguish(obj) local new_group = minetest.get_item_group(node.name, "cauldron_filled") - 1 diff --git a/mods/ITEMS/mcl_cauldrons/locale/mcl_cauldrons.de.tr b/mods/ITEMS/mcl_cauldrons/locale/mcl_cauldrons.de.tr index 72432b04c..fe1d9aa81 100644 --- a/mods/ITEMS/mcl_cauldrons/locale/mcl_cauldrons.de.tr +++ b/mods/ITEMS/mcl_cauldrons/locale/mcl_cauldrons.de.tr @@ -1,7 +1,7 @@ # textdomain: mcl_cauldron Cauldron=Kessel -Cauldrons are used to store water and slowly fill up under rain.=Kessel werden benutzt, um Wasser zu lagern, im Regen werden sie langsam aufgefüllt. -Place a water pucket into the cauldron to fill it with water. Place an empty bucket on a full cauldron to retrieve the water. Place a water bottle into the cauldron to fill the cauldron to one third with water. Place a glass bottle in a cauldron with water to retrieve one third of the water.=Platzieren Sie einen Wassereinmer in den Kessel, um ihn mit Wasser zu füllen. Platzieren Sie einen leeren Eimer auf einen vollen Kessel, um das Wasser aufzusammeln. Platzieren Sie eine Wasserflasche in den Kessel, um ihn zu einem Drittel mit Wasser zu füllen. +Cauldrons are used to store water and slowly fill up under rain. They can also be used to wash off banners.=Kessel werden benutzt, um Wasser zu lagern, im Regen werden sie langsam aufgefüllt. Kessel können auch verwendet werden, um Banner abzuwaschen. +Place a water bucket into the cauldron to fill it with water. Place an empty bucket on a full cauldron to retrieve the water. Place a water bottle into the cauldron to fill the cauldron to one third with water. Place a glass bottle in a cauldron with water to retrieve one third of the water. Use an emblazoned banner on a cauldron with water to wash off its top layer.=Platzieren Sie einen Wassereinmer in den Kessel, um ihn mit Wasser zu füllen. Platzieren Sie einen leeren Eimer auf einen vollen Kessel, um das Wasser aufzusammeln. Platzieren Sie eine Wasserflasche in den Kessel, um ihn zu einem Drittel mit Wasser zu füllen. Benutzen Sie ein bemaltes Banner auf den Kessel, um die oberste Schicht abzuwaschen. Cauldron (1/3 Water)=Kessel (1/3 Wasser) Cauldron (2/3 Water)=Kessel (2/3 Wasser) Cauldron (3/3 Water)=Kessel (3/3 Wasser) diff --git a/mods/ITEMS/mcl_cauldrons/locale/mcl_cauldrons.es.tr b/mods/ITEMS/mcl_cauldrons/locale/mcl_cauldrons.es.tr index 5f7f9fc31..9748e61b4 100644 --- a/mods/ITEMS/mcl_cauldrons/locale/mcl_cauldrons.es.tr +++ b/mods/ITEMS/mcl_cauldrons/locale/mcl_cauldrons.es.tr @@ -1,10 +1,10 @@ # textdomain: mcl_cauldron Cauldron=Caldera Cauldrons are used to store water and slowly fill up under rain.=Los calderos se usan para almacenar agua y llenarse lentamente bajo la lluvia. -Place a water pucket into the cauldron to fill it with water. Place an empty bucket on a full cauldron to retrieve the water. Place a water bottle into the cauldron to fill the cauldron to one third with water. Place a glass bottle in a cauldron with water to retrieve one third of the water.=Coloque un cubo de agua en el caldero para llenarlo con agua. Coloque un cubo vacío en un caldero lleno para recuperar el agua. Coloque una botella de agua en el caldero para llenar el caldero hasta un tercio con agua. Coloque una botella de vidrio en un caldero con agua para recuperar un tercio del agua. +Place a water bucket into the cauldron to fill it with water. Place an empty bucket on a full cauldron to retrieve the water. Place a water bottle into the cauldron to fill the cauldron to one third with water. Place a glass bottle in a cauldron with water to retrieve one third of the water.=Coloque un cubo de agua en el caldero para llenarlo con agua. Coloque un cubo vacío en un caldero lleno para recuperar el agua. Coloque una botella de agua en el caldero para llenar el caldero hasta un tercio con agua. Coloque una botella de vidrio en un caldero con agua para recuperar un tercio del agua. Cauldron (1/3 Water)=Caldera (1/3 de agua) Cauldron (2/3 Water)=Caldera (2/3 de agua) Cauldron (3/3 Water)=Caldera (3/3 de agua) Cauldron (1/3 River Water)=Caldera (1/3 de agua de río) Cauldron (2/3 River Water)=Caldera (2/3 de agua de río) -Cauldron (3/3 River Water)=Caldera (3/3 de agua de río) \ No newline at end of file +Cauldron (3/3 River Water)=Caldera (3/3 de agua de río) diff --git a/mods/ITEMS/mcl_cauldrons/locale/mcl_cauldrons.pl.tr b/mods/ITEMS/mcl_cauldrons/locale/mcl_cauldrons.pl.tr new file mode 100644 index 000000000..58826d9ab --- /dev/null +++ b/mods/ITEMS/mcl_cauldrons/locale/mcl_cauldrons.pl.tr @@ -0,0 +1,11 @@ +# textdomain: mcl_cauldron +Cauldron=Kocioł +Cauldrons are used to store water and slowly fill up under rain. They can also be used to wash off banners.=Kotły są wykorzystywane do przechowywania wody oraz powoli wypełniają się podczas deszczu. +Place a water bucket into the cauldron to fill it with water. Place an empty bucket on a full cauldron to retrieve the water. Place a water bottle into the cauldron to fill the cauldron to one third with water. Place a glass bottle in a cauldron with water to retrieve one third of the water. Use an emblazoned banner on a cauldron with water to wash off its top layer.=Umieść wiadro wody w kotle by wypełnić go wodą. Umieść puste wiadro na pełnym kotle by odzyskać wodę. Umieść szklaną butelkę w kotle z wodą aby odzyskać jedną trzecią wody. Użyj upiększonego sztandaru na kotle z wodą aby zmyć górną warstwę. +Cauldron (1/3 Water)=Kocioł (1/3 wody) +Cauldron (2/3 Water)=Kocioł (2/3 wody) +Cauldron (3/3 Water)=Kocioł (3/3 wody) +Cauldron (1/3 River Water)=Kocioł (1/3 rzecznej wody) +Cauldron (2/3 River Water)=Kocioł (2/3 rzecznej wody) +Cauldron (3/3 River Water)=Kocioł (3/3 rzecznej wody) +Stores water=Przechowuje wodę diff --git a/mods/ITEMS/mcl_cauldrons/locale/mcl_chaudrons.fr.tr b/mods/ITEMS/mcl_cauldrons/locale/mcl_chaudrons.fr.tr index 03b0e9be8..a241c5cb0 100644 --- a/mods/ITEMS/mcl_cauldrons/locale/mcl_chaudrons.fr.tr +++ b/mods/ITEMS/mcl_cauldrons/locale/mcl_chaudrons.fr.tr @@ -1,7 +1,7 @@ # textdomain: mcl_cauldron Cauldron=Chaudrons Cauldrons are used to store water and slowly fill up under rain. They can also be used to wash off banners.=Les chaudrons sont utilisés pour stocker l'eau et se remplissent lentement sous la pluie. Ils peuvent également être utilisés pour laver les bannières. -Place a water pucket into the cauldron to fill it with water. Place an empty bucket on a full cauldron to retrieve the water. Place a water bottle into the cauldron to fill the cauldron to one third with water. Place a glass bottle in a cauldron with water to retrieve one third of the water. Use an emblazoned banner on a cauldron with water to wash off its top layer.=Placez une marmite d'eau dans le chaudron pour le remplir d'eau. Placez un seau vide sur un chaudron plein pour récupérer l'eau. Placez une bouteille d'eau dans le chaudron pour remplir le chaudron au tiers avec de l'eau. Placez une bouteille en verre dans un chaudron avec de l'eau pour récupérer un tiers de l'eau. Utilisez une bannière blasonnée sur un chaudron avec de l'eau pour laver sa couche supérieure. +Place a water bucket into the cauldron to fill it with water. Place an empty bucket on a full cauldron to retrieve the water. Place a water bottle into the cauldron to fill the cauldron to one third with water. Place a glass bottle in a cauldron with water to retrieve one third of the water. Use an emblazoned banner on a cauldron with water to wash off its top layer.=Placez une marmite d'eau dans le chaudron pour le remplir d'eau. Placez un seau vide sur un chaudron plein pour récupérer l'eau. Placez une bouteille d'eau dans le chaudron pour remplir le chaudron au tiers avec de l'eau. Placez une bouteille en verre dans un chaudron avec de l'eau pour récupérer un tiers de l'eau. Utilisez une bannière blasonnée sur un chaudron avec de l'eau pour laver sa couche supérieure. Cauldron (1/3 Water)=Chaudron (1/3 d'eau) Cauldron (2/3 Water)=Chaudron (2/3 d'eau) Cauldron (3/3 Water)=Chaudron (3/3 d'eau) diff --git a/mods/ITEMS/mcl_cauldrons/locale/mcl_chaudrons.ru.tr b/mods/ITEMS/mcl_cauldrons/locale/mcl_chaudrons.ru.tr index ff43a5775..6ecae1025 100644 --- a/mods/ITEMS/mcl_cauldrons/locale/mcl_chaudrons.ru.tr +++ b/mods/ITEMS/mcl_cauldrons/locale/mcl_chaudrons.ru.tr @@ -1,7 +1,7 @@ # textdomain: mcl_cauldron Cauldron=Котёл Cauldrons are used to store water and slowly fill up under rain. They can also be used to wash off banners.=Котлы используются для хранения воды и медленного наполнения под дождём. Они также могут использоваться для промывания флагов. -Place a water pucket into the cauldron to fill it with water. Place an empty bucket on a full cauldron to retrieve the water. Place a water bottle into the cauldron to fill the cauldron to one third with water. Place a glass bottle in a cauldron with water to retrieve one third of the water. Use an emblazoned banner on a cauldron with water to wash off its top layer.=Попытайтесь поместить ведро воды в котёл, чтобы наполнить его водой. Попытка поместить пустое ведро приведёт к освобождению котла. Поместите в котёл бутылку воды, чтобы наполнить его на треть. +Place a water bucket into the cauldron to fill it with water. Place an empty bucket on a full cauldron to retrieve the water. Place a water bottle into the cauldron to fill the cauldron to one third with water. Place a glass bottle in a cauldron with water to retrieve one third of the water. Use an emblazoned banner on a cauldron with water to wash off its top layer.=Попытайтесь поместить ведро воды в котёл, чтобы наполнить его водой. Попытка поместить пустое ведро приведёт к освобождению котла. Поместите в котёл бутылку воды, чтобы наполнить его на треть. Cauldron (1/3 Water)=Котёл (1/3 воды) Cauldron (2/3 Water)=Котёл (2/3 воды) Cauldron (3/3 Water)=Котёл (3/3 воды) diff --git a/mods/ITEMS/mcl_cauldrons/locale/template.txt b/mods/ITEMS/mcl_cauldrons/locale/template.txt index b4385631a..5e18f3283 100644 --- a/mods/ITEMS/mcl_cauldrons/locale/template.txt +++ b/mods/ITEMS/mcl_cauldrons/locale/template.txt @@ -1,7 +1,7 @@ # textdomain: mcl_cauldron Cauldron= Cauldrons are used to store water and slowly fill up under rain. They can also be used to wash off banners.= -Place a water pucket into the cauldron to fill it with water. Place an empty bucket on a full cauldron to retrieve the water. Place a water bottle into the cauldron to fill the cauldron to one third with water. Place a glass bottle in a cauldron with water to retrieve one third of the water. Use an emblazoned banner on a cauldron with water to wash off its top layer.= +Place a water bucket into the cauldron to fill it with water. Place an empty bucket on a full cauldron to retrieve the water. Place a water bottle into the cauldron to fill the cauldron to one third with water. Place a glass bottle in a cauldron with water to retrieve one third of the water. Use an emblazoned banner on a cauldron with water to wash off its top layer.= Cauldron (1/3 Water)= Cauldron (2/3 Water)= Cauldron (3/3 Water)= diff --git a/mods/ITEMS/mcl_cauldrons/mod.conf b/mods/ITEMS/mcl_cauldrons/mod.conf index 1bedf9d73..4787d60f9 100644 --- a/mods/ITEMS/mcl_cauldrons/mod.conf +++ b/mods/ITEMS/mcl_cauldrons/mod.conf @@ -1 +1,3 @@ name = mcl_cauldrons +depends = mcl_core, mcl_sounds +optional_depends = mclx_core, doc diff --git a/mods/ITEMS/mcl_chests/depends.txt b/mods/ITEMS/mcl_chests/depends.txt deleted file mode 100644 index af11d5f6c..000000000 --- a/mods/ITEMS/mcl_chests/depends.txt +++ /dev/null @@ -1,8 +0,0 @@ -mcl_init -mcl_formspec -mcl_core -mcl_sounds -mcl_end -mesecons -doc? -screwdriver? diff --git a/mods/ITEMS/mcl_chests/init.lua b/mods/ITEMS/mcl_chests/init.lua index 91164c7b3..69f6a601d 100644 --- a/mods/ITEMS/mcl_chests/init.lua +++ b/mods/ITEMS/mcl_chests/init.lua @@ -1,4 +1,4 @@ -local S = minetest.get_translator("mcl_chests") +local S = minetest.get_translator(minetest.get_current_modname()) local mod_doc = minetest.get_modpath("doc") -- Chest Entity @@ -11,10 +11,8 @@ local entity_animations = { }, chest = { speed = 25, - open = {x = 0, y = 10}, - open_partly = {x = 0, y = 7}, - close = {x = 10, y = 20}, - close_partly = {x = 13, y = 20}, + open = {x = 0, y = 7}, + close = {x = 13, y = 20}, } } @@ -34,15 +32,14 @@ minetest.register_entity("mcl_chests:chest", { self.object:set_animation(anim, anim_table.speed, 0, false) end, - open = function(self, playername, partly) + open = function(self, playername) self.players[playername] = true if not self.is_open then - self:set_animation(partly and "open_partly" or "open") + self:set_animation("open") minetest.sound_play(self.sound_prefix .. "_open", { pos = self.node_pos, }) self.is_open = true - self.opened_partly = partly end end, @@ -50,15 +47,14 @@ minetest.register_entity("mcl_chests:chest", { local playerlist = self.players playerlist[playername] = nil if self.is_open then - for _ in pairs(playerlist) do + if next(playerlist) then return end - self:set_animation(self.opened_partly and "close_partly" or "close") + self:set_animation("close") minetest.sound_play(self.sound_prefix .. "_close", { pos = self.node_pos, }) self.is_open = false - self.opened_partly = false end end, @@ -118,7 +114,7 @@ local function get_entity_pos(pos, dir, double) end local function find_entity(pos) - for _, obj in ipairs(minetest.get_objects_inside_radius(pos, 0)) do + for _, obj in pairs(minetest.get_objects_inside_radius(pos, 0)) do local luaentity = obj:get_luaentity() if luaentity and luaentity.name == "mcl_chests:chest" then return luaentity @@ -162,30 +158,30 @@ end --[[ List of open chests. Key: Player name Value: - If player is using a chest: { pos = } - Otherwise: nil ]] + If player is using a chest: { pos = } + Otherwise: nil ]] local open_chests = {} -local function back_is_blocked(pos, dir) +--[[local function back_is_blocked(pos, dir) pos = vector.add(pos, dir) local def = minetest.registered_nodes[minetest.get_node(pos).name] pos.y = pos.y + 1 local def2 = minetest.registered_nodes[minetest.get_node(pos).name] return not def or def.groups.opaque == 1 or not def2 or def2.groups.opaque == 1 -end +end]] + -- To be called if a player opened a chest -local player_chest_open = function(player, pos, node_name, textures, param2, double, sound, mesh, shulker) +local function player_chest_open(player, pos, node_name, textures, param2, double, sound, mesh, shulker) local name = player:get_player_name() open_chests[name] = {pos = pos, node_name = node_name, textures = textures, param2 = param2, double = double, sound = sound, mesh = mesh, shulker = shulker} if animate_chests then local dir = minetest.facedir_to_dir(param2) - local blocked = not shulker and (back_is_blocked(pos, dir) or double and back_is_blocked(mcl_util.get_double_container_neighbor_pos(pos, param2, node_name:sub(-4)), dir)) - find_or_create_entity(pos, node_name, textures, param2, double, sound, mesh, shulker and "shulker" or "chest", dir):open(name, blocked) + find_or_create_entity(pos, node_name, textures, param2, double, sound, mesh, shulker and "shulker" or "chest", dir):open(name) end end -- Simple protection checking functions -local protection_check_move = function(pos, from_list, from_index, to_list, to_index, count, player) +local function protection_check_move(pos, from_list, from_index, to_list, to_index, count, player) local name = player:get_player_name() if minetest.is_protected(pos, name) then minetest.record_protection_violation(pos, name) @@ -194,7 +190,7 @@ local protection_check_move = function(pos, from_list, from_index, to_list, to_i return count end end -local protection_check_put_take = function(pos, listname, index, stack, player) +local function protection_check_put_take(pos, listname, index, stack, player) local name = player:get_player_name() if minetest.is_protected(pos, name) then minetest.record_protection_violation(pos, name) @@ -207,7 +203,7 @@ end local trapped_chest_mesecons_rules = mesecon.rules.pplate -- To be called when a chest is closed (only relevant for trapped chest atm) -local chest_update_after_close = function(pos) +local function chest_update_after_close(pos) local node = minetest.get_node(pos) if node.name == "mcl_chests:trapped_chest_on_small" then @@ -234,7 +230,7 @@ local chest_update_after_close = function(pos) end -- To be called if a player closed a chest -local player_chest_close = function(player) +local function player_chest_close(player) local name = player:get_player_name() local open_chest = open_chests[name] if open_chest == nil then @@ -249,566 +245,569 @@ local player_chest_close = function(player) end -- This is a helper function to register both chests and trapped chests. Trapped chests will make use of the additional parameters -local register_chest = function(basename, desc, longdesc, usagehelp, tt_help, tiles_table, hidden, mesecons, on_rightclick_addendum, on_rightclick_addendum_left, on_rightclick_addendum_right, drop, canonical_basename) --- START OF register_chest FUNCTION BODY -if not drop then - drop = "mcl_chests:"..basename -else - drop = "mcl_chests:"..drop -end --- The basename of the "canonical" version of the node, if set (e.g.: trapped_chest_on → trapped_chest). --- Used to get a shared formspec ID and to swap the node back to the canonical version in on_construct. -if not canonical_basename then - canonical_basename = basename -end - -local double_chest_add_item = function(top_inv, bottom_inv, listname, stack) - if not stack or stack:is_empty() then - return +local function register_chest(basename, desc, longdesc, usagehelp, tt_help, tiles_table, hidden, mesecons, on_rightclick_addendum, on_rightclick_addendum_left, on_rightclick_addendum_right, drop, canonical_basename) + -- START OF register_chest FUNCTION BODY + if not drop then + drop = "mcl_chests:"..basename + else + drop = "mcl_chests:"..drop + end + -- The basename of the "canonical" version of the node, if set (e.g.: trapped_chest_on → trapped_chest). + -- Used to get a shared formspec ID and to swap the node back to the canonical version in on_construct. + if not canonical_basename then + canonical_basename = basename end - local name = stack:get_name() + local function double_chest_add_item(top_inv, bottom_inv, listname, stack) + if not stack or stack:is_empty() then + return + end - local top_off = function(inv, stack) - for c, chest_stack in ipairs(inv:get_list(listname)) do + local name = stack:get_name() + + local function top_off(inv, stack) + for c, chest_stack in ipairs(inv:get_list(listname)) do + if stack:is_empty() then + break + end + + if chest_stack:get_name() == name and chest_stack:get_free_space() > 0 then + stack = chest_stack:add_item(stack) + inv:set_stack(listname, c, chest_stack) + end + end + + return stack + end + + stack = top_off(top_inv, stack) + stack = top_off(bottom_inv, stack) + + if not stack:is_empty() then + stack = top_inv:add_item(listname, stack) + if not stack:is_empty() then + bottom_inv:add_item(listname, stack) + end + end + end + + local function drop_items_chest(pos, oldnode, oldmetadata) + local meta = minetest.get_meta(pos) + local meta2 = meta + if oldmetadata then + meta:from_table(oldmetadata) + end + local inv = meta:get_inventory() + for i=1,inv:get_size("main") do + local stack = inv:get_stack("main", i) + if not stack:is_empty() then + local p = {x=pos.x+math.random(0, 10)/10-0.5, y=pos.y, z=pos.z+math.random(0, 10)/10-0.5} + minetest.add_item(p, stack) + end + end + meta:from_table(meta2:to_table()) + end + + local function on_chest_blast(pos) + local node = minetest.get_node(pos) + drop_items_chest(pos, node) + minetest.remove_node(pos) + end + + local function limit_put_list(stack, list) + for _, other in ipairs(list) do + stack = other:add_item(stack) if stack:is_empty() then break end - - if chest_stack:get_name() == name and chest_stack:get_free_space() > 0 then - stack = chest_stack:add_item(stack) - inv:set_stack(listname, c, chest_stack) - end end - return stack end - stack = top_off(top_inv, stack) - stack = top_off(bottom_inv, stack) + local function limit_put(stack, inv1, inv2) + local leftover = ItemStack(stack) + leftover = limit_put_list(leftover, inv1:get_list("main")) + leftover = limit_put_list(leftover, inv2:get_list("main")) + return stack:get_count() - leftover:get_count() + end - if not stack:is_empty() then - stack = top_inv:add_item(listname, stack) - if not stack:is_empty() then - bottom_inv:add_item(listname, stack) + local small_name = "mcl_chests:"..basename.."_small" + local small_textures = tiles_table.small + local left_name = "mcl_chests:"..basename.."_left" + local left_textures = tiles_table.double + + minetest.register_node("mcl_chests:"..basename, { + description = desc, + _tt_help = tt_help, + _doc_items_longdesc = longdesc, + _doc_items_usagehelp = usagehelp, + _doc_items_hidden = hidden, + drawtype = "mesh", + mesh = "mcl_chests_chest.obj", + tiles = small_textures, + use_texture_alpha = minetest.features.use_texture_alpha_string_modes and "opaque" or false, + paramtype = "light", + paramtype2 = "facedir", + stack_max = 64, + sounds = mcl_sounds.node_sound_wood_defaults(), + groups = {deco_block=1}, + on_construct = function(pos, node) + local node = minetest.get_node(pos) + node.name = small_name + minetest.set_node(pos, node) + end, + after_place_node = function(pos, placer, itemstack, pointed_thing) + minetest.get_meta(pos):set_string("name", itemstack:get_meta():get_string("name")) + end, + }) + + local function close_forms(canonical_basename, pos) + local players = minetest.get_connected_players() + for p=1, #players do + if vector.distance(players[p]:get_pos(), pos) <= 30 then + minetest.close_formspec(players[p]:get_player_name(), "mcl_chests:"..canonical_basename.."_"..pos.x.."_"..pos.y.."_"..pos.z) + end end end -end -local drop_items_chest = function(pos, oldnode, oldmetadata) - local meta = minetest.get_meta(pos) - local meta2 = meta - if oldmetadata then - meta:from_table(oldmetadata) - end - local inv = meta:get_inventory() - for i=1,inv:get_size("main") do - local stack = inv:get_stack("main", i) - if not stack:is_empty() then - local p = {x=pos.x+math.random(0, 10)/10-0.5, y=pos.y, z=pos.z+math.random(0, 10)/10-0.5} - minetest.add_item(p, stack) - end - end - meta:from_table(meta2:to_table()) -end + minetest.register_node(small_name, { + description = desc, + _tt_help = tt_help, + _doc_items_longdesc = longdesc, + _doc_items_usagehelp = usagehelp, + _doc_items_hidden = hidden, + drawtype = "nodebox", + node_box = { + type = "fixed", + fixed = {-0.4375, -0.5, -0.4375, 0.4375, 0.375, 0.4375}, + }, + tiles = {"mcl_chests_blank.png"}, + use_texture_alpha = minetest.features.use_texture_alpha_string_modes and "clip" or true, + _chest_entity_textures = small_textures, + _chest_entity_sound = "default_chest", + _chest_entity_mesh = "mcl_chests_chest", + _chest_entity_animation_type = "chest", + paramtype = "light", + paramtype2 = "facedir", + stack_max = 64, + drop = drop, + groups = {handy=1,axey=1, container=2, deco_block=1, material_wood=1,flammable=-1,chest_entity=1, not_in_creative_inventory=1}, + is_ground_content = false, + sounds = mcl_sounds.node_sound_wood_defaults(), + on_construct = function(pos) + local param2 = minetest.get_node(pos).param2 + local meta = minetest.get_meta(pos) + --[[ This is a workaround for Minetest issue 5894 + . + Apparently if we don't do this, large chests initially don't work when + placed at chunk borders, and some chests randomly don't work after + placing. ]] + -- FIXME: Remove this workaround when the bug has been fixed. + -- BEGIN OF WORKAROUND -- + meta:set_string("workaround", "ignore_me") + meta:set_string("workaround", nil) -- Done to keep metadata clean + -- END OF WORKAROUND -- + local inv = meta:get_inventory() + inv:set_size("main", 9*3) + --[[ The "input" list is *another* workaround (hahahaha!) around the fact that Minetest + does not support listrings to put items into an alternative list if the first one + happens to be full. See . + This list is a hidden input-only list and immediately puts items into the appropriate chest. + It is only used for listrings and hoppers. This workaround is not that bad because it only + requires a simple “inventory allows” check for large chests.]] + -- FIXME: Refactor the listrings as soon Minetest supports alternative listrings + -- BEGIN OF LISTRING WORKAROUND + inv:set_size("input", 1) + -- END OF LISTRING WORKAROUND + if minetest.get_node(mcl_util.get_double_container_neighbor_pos(pos, param2, "right")).name == "mcl_chests:"..canonical_basename.."_small" then + minetest.swap_node(pos, {name="mcl_chests:"..canonical_basename.."_right",param2=param2}) + local p = mcl_util.get_double_container_neighbor_pos(pos, param2, "right") + minetest.swap_node(p, { name = "mcl_chests:"..canonical_basename.."_left", param2 = param2 }) + create_entity(p, "mcl_chests:"..canonical_basename.."_left", left_textures, param2, true, "default_chest", "mcl_chests_chest", "chest") + elseif minetest.get_node(mcl_util.get_double_container_neighbor_pos(pos, param2, "left")).name == "mcl_chests:"..canonical_basename.."_small" then + minetest.swap_node(pos, {name="mcl_chests:"..canonical_basename.."_left",param2=param2}) + create_entity(pos, "mcl_chests:"..canonical_basename.."_left", left_textures, param2, true, "default_chest", "mcl_chests_chest", "chest") + local p = mcl_util.get_double_container_neighbor_pos(pos, param2, "left") + minetest.swap_node(p, { name = "mcl_chests:"..canonical_basename.."_right", param2 = param2 }) + else + minetest.swap_node(pos, { name = "mcl_chests:"..canonical_basename.."_small", param2 = param2 }) + create_entity(pos, small_name, small_textures, param2, false, "default_chest", "mcl_chests_chest", "chest") + end + end, + after_place_node = function(pos, placer, itemstack, pointed_thing) + minetest.get_meta(pos):set_string("name", itemstack:get_meta():get_string("name")) + end, + after_dig_node = drop_items_chest, + on_blast = on_chest_blast, + allow_metadata_inventory_move = protection_check_move, + allow_metadata_inventory_take = protection_check_put_take, + allow_metadata_inventory_put = protection_check_put_take, + on_metadata_inventory_move = function(pos, from_list, from_index, to_list, to_index, count, player) + minetest.log("action", player:get_player_name().. + " moves stuff in chest at "..minetest.pos_to_string(pos)) + end, + on_metadata_inventory_put = function(pos, listname, index, stack, player) + minetest.log("action", player:get_player_name().. + " moves stuff to chest at "..minetest.pos_to_string(pos)) + -- BEGIN OF LISTRING WORKAROUND + if listname == "input" then + local inv = minetest.get_inventory({type="node", pos=pos}) + inv:add_item("main", stack) + end + -- END OF LISTRING WORKAROUND + end, + on_metadata_inventory_take = function(pos, listname, index, stack, player) + minetest.log("action", player:get_player_name().. + " takes stuff from chest at "..minetest.pos_to_string(pos)) + end, + _mcl_blast_resistance = 2.5, + _mcl_hardness = 2.5, -local on_chest_blast = function(pos) - local node = minetest.get_node(pos) - drop_items_chest(pos, node) - minetest.remove_node(pos) -end + on_rightclick = function(pos, node, clicker) + if minetest.registered_nodes[minetest.get_node({x = pos.x, y = pos.y + 1, z = pos.z}).name].groups.opaque == 1 then + -- won't open if there is no space from the top + return false + end + local name = minetest.get_meta(pos):get_string("name") + if name == "" then + name = S("Chest") + end -local function limit_put_list(stack, list) - for _, other in ipairs(list) do - stack = other:add_item(stack) - if stack:is_empty() then - break - end - end - return stack -end + minetest.show_formspec(clicker:get_player_name(), + "mcl_chests:"..canonical_basename.."_"..pos.x.."_"..pos.y.."_"..pos.z, + "size[9,8.75]".. + "label[0,0;"..minetest.formspec_escape(minetest.colorize("#313131", name)).."]".. + "list[nodemeta:"..pos.x..","..pos.y..","..pos.z..";main;0,0.5;9,3;]".. + mcl_formspec.get_itemslot_bg(0,0.5,9,3).. + "label[0,4.0;"..minetest.formspec_escape(minetest.colorize("#313131", S("Inventory"))).."]".. + "list[current_player;main;0,4.5;9,3;9]".. + mcl_formspec.get_itemslot_bg(0,4.5,9,3).. + "list[current_player;main;0,7.74;9,1;]".. + mcl_formspec.get_itemslot_bg(0,7.74,9,1).. + "listring[nodemeta:"..pos.x..","..pos.y..","..pos.z..";main]".. + "listring[current_player;main]") -local function limit_put(stack, inv1, inv2) - local leftover = ItemStack(stack) - leftover = limit_put_list(leftover, inv1:get_list("main")) - leftover = limit_put_list(leftover, inv2:get_list("main")) - return stack:get_count() - leftover:get_count() -end + if on_rightclick_addendum then + on_rightclick_addendum(pos, node, clicker) + end -local small_name = "mcl_chests:"..basename.."_small" -local small_textures = tiles_table.small -local left_name = "mcl_chests:"..basename.."_left" -local left_textures = tiles_table.double + player_chest_open(clicker, pos, small_name, small_textures, node.param2, false, "default_chest", "mcl_chests_chest") + end, -minetest.register_node("mcl_chests:"..basename, { - description = desc, - _tt_help = tt_help, - _doc_items_longdesc = longdesc, - _doc_items_usagehelp = usagehelp, - _doc_items_hidden = hidden, - drawtype = "mesh", - mesh = "mcl_chests_chest.obj", - tiles = small_textures, - paramtype = "light", - paramtype2 = "facedir", - stack_max = 64, - sounds = mcl_sounds.node_sound_wood_defaults(), - groups = {deco_block=1}, - on_construct = function(pos, node) - local node = minetest.get_node(pos) - node.name = small_name - minetest.set_node(pos, node) - end, - after_place_node = function(pos, placer, itemstack, pointed_thing) - minetest.get_meta(pos):set_string("name", itemstack:get_meta():get_string("name")) - end, -}) + on_destruct = function(pos) + close_forms(canonical_basename, pos) + end, + mesecons = mesecons, + on_rotate = simple_rotate, + }) -local function close_forms(canonical_basename, pos) - local players = minetest.get_connected_players() - for p=1, #players do - if vector.distance(players[p]:get_pos(), pos) <= 30 then - minetest.close_formspec(players[p]:get_player_name(), "mcl_chests:"..canonical_basename.."_"..pos.x.."_"..pos.y.."_"..pos.z) - end - end -end - -minetest.register_node(small_name, { - description = desc, - _tt_help = tt_help, - _doc_items_longdesc = longdesc, - _doc_items_usagehelp = usagehelp, - _doc_items_hidden = hidden, - drawtype = "nodebox", - node_box = { - type = "fixed", - fixed = {-0.4375, -0.5, -0.4375, 0.4375, 0.375, 0.4375}, - }, - tiles = {"mcl_chests_blank.png"}, - _chest_entity_textures = small_textures, - _chest_entity_sound = "default_chest", - _chest_entity_mesh = "mcl_chests_chest", - _chest_entity_animation_type = "chest", - paramtype = "light", - paramtype2 = "facedir", - stack_max = 64, - drop = drop, - groups = {handy=1,axey=1, container=2, deco_block=1, material_wood=1,flammable=-1,chest_entity=1, not_in_creative_inventory=1}, - is_ground_content = false, - sounds = mcl_sounds.node_sound_wood_defaults(), - on_construct = function(pos) - local param2 = minetest.get_node(pos).param2 - local meta = minetest.get_meta(pos) - --[[ This is a workaround for Minetest issue 5894 - . - Apparently if we don't do this, large chests initially don't work when - placed at chunk borders, and some chests randomly don't work after - placing. ]] - -- FIXME: Remove this workaround when the bug has been fixed. - -- BEGIN OF WORKAROUND -- - meta:set_string("workaround", "ignore_me") - meta:set_string("workaround", nil) -- Done to keep metadata clean - -- END OF WORKAROUND -- - local inv = meta:get_inventory() - inv:set_size("main", 9*3) - --[[ The "input" list is *another* workaround (hahahaha!) around the fact that Minetest - does not support listrings to put items into an alternative list if the first one - happens to be full. See . - This list is a hidden input-only list and immediately puts items into the appropriate chest. - It is only used for listrings and hoppers. This workaround is not that bad because it only - requires a simple “inventory allows” check for large chests.]] - -- FIXME: Refactor the listrings as soon Minetest supports alternative listrings - -- BEGIN OF LISTRING WORKAROUND - inv:set_size("input", 1) - -- END OF LISTRING WORKAROUND - if minetest.get_node(mcl_util.get_double_container_neighbor_pos(pos, param2, "right")).name == "mcl_chests:"..canonical_basename.."_small" then - minetest.swap_node(pos, {name="mcl_chests:"..canonical_basename.."_right",param2=param2}) - local p = mcl_util.get_double_container_neighbor_pos(pos, param2, "right") - minetest.swap_node(p, { name = "mcl_chests:"..canonical_basename.."_left", param2 = param2 }) - create_entity(p, "mcl_chests:"..canonical_basename.."_left", left_textures, param2, true, "default_chest", "mcl_chests_chest", "chest") - elseif minetest.get_node(mcl_util.get_double_container_neighbor_pos(pos, param2, "left")).name == "mcl_chests:"..canonical_basename.."_small" then - minetest.swap_node(pos, {name="mcl_chests:"..canonical_basename.."_left",param2=param2}) - create_entity(pos, "mcl_chests:"..canonical_basename.."_left", left_textures, param2, true, "default_chest", "mcl_chests_chest", "chest") + minetest.register_node(left_name, { + drawtype = "nodebox", + node_box = { + type = "fixed", + fixed = {-0.4375, -0.5, -0.4375, 0.5, 0.375, 0.4375}, + }, + tiles = {"mcl_chests_blank.png"}, + use_texture_alpha = minetest.features.use_texture_alpha_string_modes and "clip" or true, + _chest_entity_textures = left_textures, + _chest_entity_sound = "default_chest", + _chest_entity_mesh = "mcl_chests_chest", + _chest_entity_animation_type = "chest", + paramtype = "light", + paramtype2 = "facedir", + groups = {handy=1,axey=1, container=5,not_in_creative_inventory=1, material_wood=1,flammable=-1,chest_entity=1,double_chest=1}, + drop = drop, + is_ground_content = false, + sounds = mcl_sounds.node_sound_wood_defaults(), + on_construct = function(pos) + local n = minetest.get_node(pos) + local param2 = n.param2 local p = mcl_util.get_double_container_neighbor_pos(pos, param2, "left") - minetest.swap_node(p, { name = "mcl_chests:"..canonical_basename.."_right", param2 = param2 }) - else - minetest.swap_node(pos, { name = "mcl_chests:"..canonical_basename.."_small", param2 = param2 }) - create_entity(pos, small_name, small_textures, param2, false, "default_chest", "mcl_chests_chest", "chest") - end - end, - after_place_node = function(pos, placer, itemstack, pointed_thing) - minetest.get_meta(pos):set_string("name", itemstack:get_meta():get_string("name")) - end, - after_dig_node = drop_items_chest, - on_blast = on_chest_blast, - allow_metadata_inventory_move = protection_check_move, - allow_metadata_inventory_take = protection_check_put_take, - allow_metadata_inventory_put = protection_check_put_take, - on_metadata_inventory_move = function(pos, from_list, from_index, to_list, to_index, count, player) - minetest.log("action", player:get_player_name().. - " moves stuff in chest at "..minetest.pos_to_string(pos)) - end, - on_metadata_inventory_put = function(pos, listname, index, stack, player) - minetest.log("action", player:get_player_name().. - " moves stuff to chest at "..minetest.pos_to_string(pos)) - -- BEGIN OF LISTRING WORKAROUND - if listname == "input" then - local inv = minetest.get_inventory({type="node", pos=pos}) - inv:add_item("main", stack) - end - -- END OF LISTRING WORKAROUND - end, - on_metadata_inventory_take = function(pos, listname, index, stack, player) - minetest.log("action", player:get_player_name().. - " takes stuff from chest at "..minetest.pos_to_string(pos)) - end, - _mcl_blast_resistance = 2.5, - _mcl_hardness = 2.5, + if not p or minetest.get_node(p).name ~= "mcl_chests:"..canonical_basename.."_right" then + n.name = "mcl_chests:"..canonical_basename.."_small" + minetest.swap_node(pos, n) + end + create_entity(pos, left_name, left_textures, param2, true, "default_chest", "mcl_chests_chest", "chest") + end, + after_place_node = function(pos, placer, itemstack, pointed_thing) + minetest.get_meta(pos):set_string("name", itemstack:get_meta():get_string("name")) + end, + on_destruct = function(pos) + local n = minetest.get_node(pos) + if n.name == small_name then + return + end - on_rightclick = function(pos, node, clicker) - if minetest.registered_nodes[minetest.get_node({x = pos.x, y = pos.y + 1, z = pos.z}).name].groups.opaque == 1 then - -- won't open if there is no space from the top - return false - end - local name = minetest.get_meta(pos):get_string("name") - if name == "" then - name = S("Chest") - end + close_forms(canonical_basename, pos) - minetest.show_formspec(clicker:get_player_name(), - "mcl_chests:"..canonical_basename.."_"..pos.x.."_"..pos.y.."_"..pos.z, - "size[9,8.75]".. - "label[0,0;"..minetest.formspec_escape(minetest.colorize("#313131", name)).."]".. - "list[nodemeta:"..pos.x..","..pos.y..","..pos.z..";main;0,0.5;9,3;]".. - mcl_formspec.get_itemslot_bg(0,0.5,9,3).. - "label[0,4.0;"..minetest.formspec_escape(minetest.colorize("#313131", S("Inventory"))).."]".. - "list[current_player;main;0,4.5;9,3;9]".. - mcl_formspec.get_itemslot_bg(0,4.5,9,3).. - "list[current_player;main;0,7.74;9,1;]".. - mcl_formspec.get_itemslot_bg(0,7.74,9,1).. - "listring[nodemeta:"..pos.x..","..pos.y..","..pos.z..";main]".. - "listring[current_player;main]") + local param2 = n.param2 + local p = mcl_util.get_double_container_neighbor_pos(pos, param2, "left") + if not p or minetest.get_node(p).name ~= "mcl_chests:"..basename.."_right" then + return + end + close_forms(canonical_basename, p) - if on_rightclick_addendum then - on_rightclick_addendum(pos, node, clicker) - end - - player_chest_open(clicker, pos, small_name, small_textures, node.param2, false, "default_chest", "mcl_chests_chest") - end, - - on_destruct = function(pos) - close_forms(canonical_basename, pos) - end, - mesecons = mesecons, - on_rotate = simple_rotate, -}) - -minetest.register_node(left_name, { - drawtype = "nodebox", - node_box = { - type = "fixed", - fixed = {-0.4375, -0.5, -0.4375, 0.5, 0.375, 0.4375}, - }, - tiles = {"mcl_chests_blank.png"}, - _chest_entity_textures = left_textures, - _chest_entity_sound = "default_chest", - _chest_entity_mesh = "mcl_chests_chest", - _chest_entity_animation_type = "chest", - paramtype = "light", - paramtype2 = "facedir", - groups = {handy=1,axey=1, container=5,not_in_creative_inventory=1, material_wood=1,flammable=-1,chest_entity=1,double_chest=1}, - drop = drop, - is_ground_content = false, - sounds = mcl_sounds.node_sound_wood_defaults(), - on_construct = function(pos) - local n = minetest.get_node(pos) - local param2 = n.param2 - local p = mcl_util.get_double_container_neighbor_pos(pos, param2, "left") - if not p or minetest.get_node(p).name ~= "mcl_chests:"..canonical_basename.."_right" then - n.name = "mcl_chests:"..canonical_basename.."_small" - minetest.swap_node(pos, n) - end - create_entity(pos, left_name, left_textures, param2, true, "default_chest", "mcl_chests_chest", "chest") - end, - after_place_node = function(pos, placer, itemstack, pointed_thing) - minetest.get_meta(pos):set_string("name", itemstack:get_meta():get_string("name")) - end, - on_destruct = function(pos) - local n = minetest.get_node(pos) - if n.name == small_name then - return - end - - close_forms(canonical_basename, pos) - - local param2 = n.param2 - local p = mcl_util.get_double_container_neighbor_pos(pos, param2, "left") - if not p or minetest.get_node(p).name ~= "mcl_chests:"..basename.."_right" then - return - end - close_forms(canonical_basename, p) - - minetest.swap_node(p, { name = small_name, param2 = param2 }) - create_entity(p, small_name, small_textures, param2, false, "default_chest", "mcl_chests_chest", "chest") - end, - after_dig_node = drop_items_chest, - on_blast = on_chest_blast, - allow_metadata_inventory_move = protection_check_move, - allow_metadata_inventory_take = protection_check_put_take, - allow_metadata_inventory_put = function(pos, listname, index, stack, player) - local name = player:get_player_name() - if minetest.is_protected(pos, name) then - minetest.record_protection_violation(pos, name) - return 0 - -- BEGIN OF LISTRING WORKAROUND - elseif listname == "input" then - local inv = minetest.get_inventory({type="node", pos=pos}) - local other_pos = mcl_util.get_double_container_neighbor_pos(pos, minetest.get_node(pos).param2, "left") - local other_inv = minetest.get_inventory({type="node", pos=other_pos}) - return limit_put(stack, inv, other_inv) - --[[if inv:room_for_item("main", stack) then - return -1 - else - - if other_inv:room_for_item("main", stack) then + minetest.swap_node(p, { name = small_name, param2 = param2 }) + create_entity(p, small_name, small_textures, param2, false, "default_chest", "mcl_chests_chest", "chest") + end, + after_dig_node = drop_items_chest, + on_blast = on_chest_blast, + allow_metadata_inventory_move = protection_check_move, + allow_metadata_inventory_take = protection_check_put_take, + allow_metadata_inventory_put = function(pos, listname, index, stack, player) + local name = player:get_player_name() + if minetest.is_protected(pos, name) then + minetest.record_protection_violation(pos, name) + return 0 + -- BEGIN OF LISTRING WORKAROUND + elseif listname == "input" then + local inv = minetest.get_inventory({type="node", pos=pos}) + local other_pos = mcl_util.get_double_container_neighbor_pos(pos, minetest.get_node(pos).param2, "left") + local other_inv = minetest.get_inventory({type="node", pos=other_pos}) + return limit_put(stack, inv, other_inv) + --[[if inv:room_for_item("main", stack) then return -1 else - return 0 - end - end]]-- - -- END OF LISTRING WORKAROUND - else - return stack:get_count() - end - end, - on_metadata_inventory_move = function(pos, from_list, from_index, to_list, to_index, count, player) - minetest.log("action", player:get_player_name().. - " moves stuff in chest at "..minetest.pos_to_string(pos)) - end, - on_metadata_inventory_put = function(pos, listname, index, stack, player) - minetest.log("action", player:get_player_name().. - " moves stuff to chest at "..minetest.pos_to_string(pos)) - -- BEGIN OF LISTRING WORKAROUND - if listname == "input" then - local inv = minetest.get_inventory({type="node", pos=pos}) - local other_pos = mcl_util.get_double_container_neighbor_pos(pos, minetest.get_node(pos).param2, "left") - local other_inv = minetest.get_inventory({type="node", pos=other_pos}) - inv:set_stack("input", 1, nil) - - double_chest_add_item(inv, other_inv, "main", stack) - end - -- END OF LISTRING WORKAROUND - end, - on_metadata_inventory_take = function(pos, listname, index, stack, player) - minetest.log("action", player:get_player_name().. - " takes stuff from chest at "..minetest.pos_to_string(pos)) - end, - _mcl_blast_resistance = 2.5, - _mcl_hardness = 2.5, - - on_rightclick = function(pos, node, clicker) - local pos_other = mcl_util.get_double_container_neighbor_pos(pos, node.param2, "left") - if minetest.registered_nodes[minetest.get_node({x = pos.x, y = pos.y + 1, z = pos.z}).name].groups.opaque == 1 - or minetest.registered_nodes[minetest.get_node({x = pos_other.x, y = pos_other.y + 1, z = pos_other.z}).name].groups.opaque == 1 then - -- won't open if there is no space from the top - return false - end - - local name = minetest.get_meta(pos):get_string("name") - if name == "" then - name = minetest.get_meta(pos_other):get_string("name") - end - if name == "" then - name = S("Large Chest") - end - - minetest.show_formspec(clicker:get_player_name(), - "mcl_chests:"..canonical_basename.."_"..pos.x.."_"..pos.y.."_"..pos.z, - "size[9,11.5]".. - "label[0,0;"..minetest.formspec_escape(minetest.colorize("#313131", name)).."]".. - "list[nodemeta:"..pos.x..","..pos.y..","..pos.z..";main;0,0.5;9,3;]".. - mcl_formspec.get_itemslot_bg(0,0.5,9,3).. - "list[nodemeta:"..pos_other.x..","..pos_other.y..","..pos_other.z..";main;0,3.5;9,3;]".. - mcl_formspec.get_itemslot_bg(0,3.5,9,3).. - "label[0,7;"..minetest.formspec_escape(minetest.colorize("#313131", S("Inventory"))).."]".. - "list[current_player;main;0,7.5;9,3;9]".. - mcl_formspec.get_itemslot_bg(0,7.5,9,3).. - "list[current_player;main;0,10.75;9,1;]".. - mcl_formspec.get_itemslot_bg(0,10.75,9,1).. - -- BEGIN OF LISTRING WORKAROUND - "listring[current_player;main]".. - "listring[nodemeta:"..pos.x..","..pos.y..","..pos.z..";input]".. - -- END OF LISTRING WORKAROUND - "listring[current_player;main]".. - "listring[nodemeta:"..pos.x..","..pos.y..","..pos.z..";main]".. - "listring[current_player;main]".. - "listring[nodemeta:"..pos_other.x..","..pos_other.y..","..pos_other.z..";main]") - - if on_rightclick_addendum_left then - on_rightclick_addendum_left(pos, node, clicker) - end - - player_chest_open(clicker, pos, left_name, left_textures, node.param2, true, "default_chest", "mcl_chests_chest") - end, - mesecons = mesecons, - on_rotate = no_rotate, -}) - -minetest.register_node("mcl_chests:"..basename.."_right", { - drawtype = "nodebox", - paramtype = "light", - paramtype2 = "facedir", - node_box = { - type = "fixed", - fixed = {-0.5, -0.5, -0.4375, 0.4375, 0.375, 0.4375}, - }, - tiles = {"mcl_chests_blank.png"}, - groups = {handy=1,axey=1, container=6,not_in_creative_inventory=1, material_wood=1,flammable=-1,double_chest=2}, - drop = drop, - is_ground_content = false, - sounds = mcl_sounds.node_sound_wood_defaults(), - on_construct = function(pos) - local n = minetest.get_node(pos) - local param2 = n.param2 - local p = mcl_util.get_double_container_neighbor_pos(pos, param2, "right") - if not p or minetest.get_node(p).name ~= "mcl_chests:"..canonical_basename.."_left" then - n.name = "mcl_chests:"..canonical_basename.."_small" - minetest.swap_node(pos, n) - end - end, - after_place_node = function(pos, placer, itemstack, pointed_thing) - minetest.get_meta(pos):set_string("name", itemstack:get_meta():get_string("name")) - end, - on_destruct = function(pos) - local n = minetest.get_node(pos) - if n.name == small_name then - return - end - - close_forms(canonical_basename, pos) - - local param2 = n.param2 - local p = mcl_util.get_double_container_neighbor_pos(pos, param2, "right") - if not p or minetest.get_node(p).name ~= "mcl_chests:"..basename.."_left" then - return - end - close_forms(canonical_basename, p) - - minetest.swap_node(p, { name = small_name, param2 = param2 }) - create_entity(p, small_name, small_textures, param2, false, "default_chest", "mcl_chests_chest", "chest") - local meta = minetest.get_meta(pos) - end, - after_dig_node = drop_items_chest, - on_blast = on_chest_blast, - allow_metadata_inventory_move = protection_check_move, - allow_metadata_inventory_take = protection_check_put_take, - allow_metadata_inventory_put = function(pos, listname, index, stack, player) - local name = player:get_player_name() - if minetest.is_protected(pos, name) then - minetest.record_protection_violation(pos, name) - return 0 - -- BEGIN OF LISTRING WORKAROUND - elseif listname == "input" then - local other_pos = mcl_util.get_double_container_neighbor_pos(pos, minetest.get_node(pos).param2, "right") - local other_inv = minetest.get_inventory({type="node", pos=other_pos}) - local inv = minetest.get_inventory({type="node", pos=pos}) - --[[if other_inv:room_for_item("main", stack) then - return -1 + if other_inv:room_for_item("main", stack) then + return -1 + else + return 0 + end + end]]-- + -- END OF LISTRING WORKAROUND else - if inv:room_for_item("main", stack) then + return stack:get_count() + end + end, + on_metadata_inventory_move = function(pos, from_list, from_index, to_list, to_index, count, player) + minetest.log("action", player:get_player_name().. + " moves stuff in chest at "..minetest.pos_to_string(pos)) + end, + on_metadata_inventory_put = function(pos, listname, index, stack, player) + minetest.log("action", player:get_player_name().. + " moves stuff to chest at "..minetest.pos_to_string(pos)) + -- BEGIN OF LISTRING WORKAROUND + if listname == "input" then + local inv = minetest.get_inventory({type="node", pos=pos}) + local other_pos = mcl_util.get_double_container_neighbor_pos(pos, minetest.get_node(pos).param2, "left") + local other_inv = minetest.get_inventory({type="node", pos=other_pos}) + + inv:set_stack("input", 1, nil) + + double_chest_add_item(inv, other_inv, "main", stack) + end + -- END OF LISTRING WORKAROUND + end, + on_metadata_inventory_take = function(pos, listname, index, stack, player) + minetest.log("action", player:get_player_name().. + " takes stuff from chest at "..minetest.pos_to_string(pos)) + end, + _mcl_blast_resistance = 2.5, + _mcl_hardness = 2.5, + + on_rightclick = function(pos, node, clicker) + local pos_other = mcl_util.get_double_container_neighbor_pos(pos, node.param2, "left") + if minetest.registered_nodes[minetest.get_node({x = pos.x, y = pos.y + 1, z = pos.z}).name].groups.opaque == 1 + or minetest.registered_nodes[minetest.get_node({x = pos_other.x, y = pos_other.y + 1, z = pos_other.z}).name].groups.opaque == 1 then + -- won't open if there is no space from the top + return false + end + + local name = minetest.get_meta(pos):get_string("name") + if name == "" then + name = minetest.get_meta(pos_other):get_string("name") + end + if name == "" then + name = S("Large Chest") + end + + minetest.show_formspec(clicker:get_player_name(), + "mcl_chests:"..canonical_basename.."_"..pos.x.."_"..pos.y.."_"..pos.z, + "size[9,11.5]".. + "label[0,0;"..minetest.formspec_escape(minetest.colorize("#313131", name)).."]".. + "list[nodemeta:"..pos.x..","..pos.y..","..pos.z..";main;0,0.5;9,3;]".. + mcl_formspec.get_itemslot_bg(0,0.5,9,3).. + "list[nodemeta:"..pos_other.x..","..pos_other.y..","..pos_other.z..";main;0,3.5;9,3;]".. + mcl_formspec.get_itemslot_bg(0,3.5,9,3).. + "label[0,7;"..minetest.formspec_escape(minetest.colorize("#313131", S("Inventory"))).."]".. + "list[current_player;main;0,7.5;9,3;9]".. + mcl_formspec.get_itemslot_bg(0,7.5,9,3).. + "list[current_player;main;0,10.75;9,1;]".. + mcl_formspec.get_itemslot_bg(0,10.75,9,1).. + -- BEGIN OF LISTRING WORKAROUND + "listring[current_player;main]".. + "listring[nodemeta:"..pos.x..","..pos.y..","..pos.z..";input]".. + -- END OF LISTRING WORKAROUND + "listring[current_player;main]".. + "listring[nodemeta:"..pos.x..","..pos.y..","..pos.z..";main]".. + "listring[current_player;main]".. + "listring[nodemeta:"..pos_other.x..","..pos_other.y..","..pos_other.z..";main]") + + if on_rightclick_addendum_left then + on_rightclick_addendum_left(pos, node, clicker) + end + + player_chest_open(clicker, pos, left_name, left_textures, node.param2, true, "default_chest", "mcl_chests_chest") + end, + mesecons = mesecons, + on_rotate = no_rotate, + }) + + minetest.register_node("mcl_chests:"..basename.."_right", { + drawtype = "nodebox", + paramtype = "light", + paramtype2 = "facedir", + node_box = { + type = "fixed", + fixed = {-0.5, -0.5, -0.4375, 0.4375, 0.375, 0.4375}, + }, + tiles = {"mcl_chests_blank.png"}, + use_texture_alpha = minetest.features.use_texture_alpha_string_modes and "clip" or true, + groups = {handy=1,axey=1, container=6,not_in_creative_inventory=1, material_wood=1,flammable=-1,double_chest=2}, + drop = drop, + is_ground_content = false, + sounds = mcl_sounds.node_sound_wood_defaults(), + on_construct = function(pos) + local n = minetest.get_node(pos) + local param2 = n.param2 + local p = mcl_util.get_double_container_neighbor_pos(pos, param2, "right") + if not p or minetest.get_node(p).name ~= "mcl_chests:"..canonical_basename.."_left" then + n.name = "mcl_chests:"..canonical_basename.."_small" + minetest.swap_node(pos, n) + end + end, + after_place_node = function(pos, placer, itemstack, pointed_thing) + minetest.get_meta(pos):set_string("name", itemstack:get_meta():get_string("name")) + end, + on_destruct = function(pos) + local n = minetest.get_node(pos) + if n.name == small_name then + return + end + + close_forms(canonical_basename, pos) + + local param2 = n.param2 + local p = mcl_util.get_double_container_neighbor_pos(pos, param2, "right") + if not p or minetest.get_node(p).name ~= "mcl_chests:"..basename.."_left" then + return + end + close_forms(canonical_basename, p) + + minetest.swap_node(p, { name = small_name, param2 = param2 }) + create_entity(p, small_name, small_textures, param2, false, "default_chest", "mcl_chests_chest", "chest") + end, + after_dig_node = drop_items_chest, + on_blast = on_chest_blast, + allow_metadata_inventory_move = protection_check_move, + allow_metadata_inventory_take = protection_check_put_take, + allow_metadata_inventory_put = function(pos, listname, index, stack, player) + local name = player:get_player_name() + if minetest.is_protected(pos, name) then + minetest.record_protection_violation(pos, name) + return 0 + -- BEGIN OF LISTRING WORKAROUND + elseif listname == "input" then + local other_pos = mcl_util.get_double_container_neighbor_pos(pos, minetest.get_node(pos).param2, "right") + local other_inv = minetest.get_inventory({type="node", pos=other_pos}) + local inv = minetest.get_inventory({type="node", pos=pos}) + --[[if other_inv:room_for_item("main", stack) then return -1 else - return 0 - end - end--]] - return limit_put(stack, other_inv, inv) - -- END OF LISTRING WORKAROUND - else - return stack:get_count() - end - end, - on_metadata_inventory_move = function(pos, from_list, from_index, to_list, to_index, count, player) - minetest.log("action", player:get_player_name().. - " moves stuff in chest at "..minetest.pos_to_string(pos)) - end, - on_metadata_inventory_put = function(pos, listname, index, stack, player) - minetest.log("action", player:get_player_name().. - " moves stuff to chest at "..minetest.pos_to_string(pos)) - -- BEGIN OF LISTRING WORKAROUND - if listname == "input" then - local other_pos = mcl_util.get_double_container_neighbor_pos(pos, minetest.get_node(pos).param2, "right") - local other_inv = minetest.get_inventory({type="node", pos=other_pos}) - local inv = minetest.get_inventory({type="node", pos=pos}) + if inv:room_for_item("main", stack) then + return -1 + else + return 0 + end + end--]] + return limit_put(stack, other_inv, inv) + -- END OF LISTRING WORKAROUND + else + return stack:get_count() + end + end, + on_metadata_inventory_move = function(pos, from_list, from_index, to_list, to_index, count, player) + minetest.log("action", player:get_player_name().. + " moves stuff in chest at "..minetest.pos_to_string(pos)) + end, + on_metadata_inventory_put = function(pos, listname, index, stack, player) + minetest.log("action", player:get_player_name().. + " moves stuff to chest at "..minetest.pos_to_string(pos)) + -- BEGIN OF LISTRING WORKAROUND + if listname == "input" then + local other_pos = mcl_util.get_double_container_neighbor_pos(pos, minetest.get_node(pos).param2, "right") + local other_inv = minetest.get_inventory({type="node", pos=other_pos}) + local inv = minetest.get_inventory({type="node", pos=pos}) - inv:set_stack("input", 1, nil) + inv:set_stack("input", 1, nil) - double_chest_add_item(other_inv, inv, "main", stack) - end - -- END OF LISTRING WORKAROUND - end, - on_metadata_inventory_take = function(pos, listname, index, stack, player) - minetest.log("action", player:get_player_name().. - " takes stuff from chest at "..minetest.pos_to_string(pos)) - end, - _mcl_blast_resistance = 2.5, - _mcl_hardness = 2.5, + double_chest_add_item(other_inv, inv, "main", stack) + end + -- END OF LISTRING WORKAROUND + end, + on_metadata_inventory_take = function(pos, listname, index, stack, player) + minetest.log("action", player:get_player_name().. + " takes stuff from chest at "..minetest.pos_to_string(pos)) + end, + _mcl_blast_resistance = 2.5, + _mcl_hardness = 2.5, - on_rightclick = function(pos, node, clicker) - local pos_other = mcl_util.get_double_container_neighbor_pos(pos, node.param2, "right") - if minetest.registered_nodes[minetest.get_node({x = pos.x, y = pos.y + 1, z = pos.z}).name].groups.opaque == 1 - or minetest.registered_nodes[minetest.get_node({x = pos_other.x, y = pos_other.y + 1, z = pos_other.z}).name].groups.opaque == 1 then - -- won't open if there is no space from the top - return false - end + on_rightclick = function(pos, node, clicker) + local pos_other = mcl_util.get_double_container_neighbor_pos(pos, node.param2, "right") + if minetest.registered_nodes[minetest.get_node({x = pos.x, y = pos.y + 1, z = pos.z}).name].groups.opaque == 1 + or minetest.registered_nodes[minetest.get_node({x = pos_other.x, y = pos_other.y + 1, z = pos_other.z}).name].groups.opaque == 1 then + -- won't open if there is no space from the top + return false + end - local name = minetest.get_meta(pos_other):get_string("name") - if name == "" then - name = minetest.get_meta(pos):get_string("name") - end - if name == "" then - name = S("Large Chest") - end + local name = minetest.get_meta(pos_other):get_string("name") + if name == "" then + name = minetest.get_meta(pos):get_string("name") + end + if name == "" then + name = S("Large Chest") + end - minetest.show_formspec(clicker:get_player_name(), - "mcl_chests:"..canonical_basename.."_"..pos.x.."_"..pos.y.."_"..pos.z, + minetest.show_formspec(clicker:get_player_name(), + "mcl_chests:"..canonical_basename.."_"..pos.x.."_"..pos.y.."_"..pos.z, - "size[9,11.5]".. - "label[0,0;"..minetest.formspec_escape(minetest.colorize("#313131", name)).."]".. - "list[nodemeta:"..pos_other.x..","..pos_other.y..","..pos_other.z..";main;0,0.5;9,3;]".. - mcl_formspec.get_itemslot_bg(0,0.5,9,3).. - "list[nodemeta:"..pos.x..","..pos.y..","..pos.z..";main;0,3.5;9,3;]".. - mcl_formspec.get_itemslot_bg(0,3.5,9,3).. - "label[0,7;"..minetest.formspec_escape(minetest.colorize("#313131", S("Inventory"))).."]".. - "list[current_player;main;0,7.5;9,3;9]".. - mcl_formspec.get_itemslot_bg(0,7.5,9,3).. - "list[current_player;main;0,10.75;9,1;]".. - mcl_formspec.get_itemslot_bg(0,10.75,9,1).. - -- BEGIN OF LISTRING WORKAROUND - "listring[current_player;main]".. - "listring[nodemeta:"..pos.x..","..pos.y..","..pos.z..";input]".. - -- END OF LISTRING WORKAROUND - "listring[current_player;main]".. - "listring[nodemeta:"..pos_other.x..","..pos_other.y..","..pos_other.z..";main]".. - "listring[current_player;main]".. - "listring[nodemeta:"..pos.x..","..pos.y..","..pos.z..";main]") + "size[9,11.5]".. + "label[0,0;"..minetest.formspec_escape(minetest.colorize("#313131", name)).."]".. + "list[nodemeta:"..pos_other.x..","..pos_other.y..","..pos_other.z..";main;0,0.5;9,3;]".. + mcl_formspec.get_itemslot_bg(0,0.5,9,3).. + "list[nodemeta:"..pos.x..","..pos.y..","..pos.z..";main;0,3.5;9,3;]".. + mcl_formspec.get_itemslot_bg(0,3.5,9,3).. + "label[0,7;"..minetest.formspec_escape(minetest.colorize("#313131", S("Inventory"))).."]".. + "list[current_player;main;0,7.5;9,3;9]".. + mcl_formspec.get_itemslot_bg(0,7.5,9,3).. + "list[current_player;main;0,10.75;9,1;]".. + mcl_formspec.get_itemslot_bg(0,10.75,9,1).. + -- BEGIN OF LISTRING WORKAROUND + "listring[current_player;main]".. + "listring[nodemeta:"..pos.x..","..pos.y..","..pos.z..";input]".. + -- END OF LISTRING WORKAROUND + "listring[current_player;main]".. + "listring[nodemeta:"..pos_other.x..","..pos_other.y..","..pos_other.z..";main]".. + "listring[current_player;main]".. + "listring[nodemeta:"..pos.x..","..pos.y..","..pos.z..";main]") - if on_rightclick_addendum_right then - on_rightclick_addendum_right(pos, node, clicker) - end + if on_rightclick_addendum_right then + on_rightclick_addendum_right(pos, node, clicker) + end - player_chest_open(clicker, pos_other, left_name, left_textures, node.param2, true, "default_chest", "mcl_chests_chest") - end, - mesecons = mesecons, - on_rotate = no_rotate, -}) + player_chest_open(clicker, pos_other, left_name, left_textures, node.param2, true, "default_chest", "mcl_chests_chest") + end, + mesecons = mesecons, + on_rotate = no_rotate, + }) -if mod_doc then - doc.add_entry_alias("nodes", small_name, "nodes", "mcl_chests:"..basename.."_left") - doc.add_entry_alias("nodes", small_name, "nodes", "mcl_chests:"..basename.."_right") -end + if mod_doc then + doc.add_entry_alias("nodes", small_name, "nodes", "mcl_chests:"..basename.."_left") + doc.add_entry_alias("nodes", small_name, "nodes", "mcl_chests:"..basename.."_right") + end --- END OF register_chest FUNCTION BODY + -- END OF register_chest FUNCTION BODY end local chestusage = S("To access its inventory, rightclick it. When broken, the items will drop out.") @@ -899,7 +898,7 @@ register_chest("trapped_chest_on", "trapped_chest" ) -local function close_if_trapped_chest(pos, player) +--[[local function close_if_trapped_chest(pos, player) local node = minetest.get_node(pos) if node.name == "mcl_chests:trapped_chest_on_small" then @@ -929,7 +928,7 @@ local function close_if_trapped_chest(pos, player) player_chest_close(player) end -end +end]] -- Disable chest when it has been closed minetest.register_on_player_receive_fields(function(player, formname, fields) @@ -945,23 +944,23 @@ minetest.register_on_leaveplayer(function(player) end) minetest.register_craft({ - output = 'mcl_chests:chest', + output = "mcl_chests:chest", recipe = { - {'group:wood', 'group:wood', 'group:wood'}, - {'group:wood', '', 'group:wood'}, - {'group:wood', 'group:wood', 'group:wood'}, + {"group:wood", "group:wood", "group:wood"}, + {"group:wood", "", "group:wood"}, + {"group:wood", "group:wood", "group:wood"}, } }) minetest.register_craft({ - type = 'fuel', - recipe = 'mcl_chests:chest', + type = "fuel", + recipe = "mcl_chests:chest", burntime = 15 }) minetest.register_craft({ - type = 'fuel', - recipe = 'mcl_chests:trapped_chest', + type = "fuel", + recipe = "mcl_chests:trapped_chest", burntime = 15 }) @@ -973,6 +972,7 @@ minetest.register_node("mcl_chests:ender_chest", { drawtype = "mesh", mesh = "mcl_chests_chest.obj", tiles = {"mcl_chests_ender.png"}, + use_texture_alpha = minetest.features.use_texture_alpha_string_modes and "opaque" or false, paramtype = "light", paramtype2 = "facedir", stack_max = 64, @@ -1006,13 +1006,14 @@ minetest.register_node("mcl_chests:ender_chest_small", { drawtype = "nodebox", node_box = { type = "fixed", - fixed = {-0.4375, -0.5, -0.4375, 0.5, 0.375, 0.4375}, + fixed = {-0.4375, -0.5, -0.4375, 0.5, 0.375, 0.4375}, }, _chest_entity_textures = {"mcl_chests_ender.png"}, _chest_entity_sound = "mcl_chests_enderchest", _chest_entity_mesh = "mcl_chests_chest", _chest_entity_animation_type = "chest", tiles = {"mcl_chests_blank.png"}, + use_texture_alpha = minetest.features.use_texture_alpha_string_modes and "clip" or true, --[[{"mcl_chests_ender_chest_top.png", "mcl_chests_ender_chest_bottom.png", "mcl_chests_ender_chest_right.png", "mcl_chests_ender_chest_left.png", "mcl_chests_ender_chest_back.png", "mcl_chests_ender_chest_front.png"},]]-- @@ -1026,11 +1027,14 @@ minetest.register_node("mcl_chests:ender_chest_small", { sounds = mcl_sounds.node_sound_stone_defaults(), drop = "mcl_core:obsidian 8", on_construct = function(pos) - local meta = minetest.get_meta(pos) - meta:set_string("formspec", formspec_ender_chest) create_entity(pos, "mcl_chests:ender_chest_small", {"mcl_chests_ender.png"}, minetest.get_node(pos).param2, false, "mcl_chests_enderchest", "mcl_chests_chest", "chest") end, on_rightclick = function(pos, node, clicker) + if minetest.registered_nodes[minetest.get_node({x = pos.x, y = pos.y + 1, z = pos.z}).name].groups.opaque == 1 then + -- won't open if there is no space from the top + return false + end + minetest.show_formspec(clicker:get_player_name(), "mcl_chests:ender_chest_"..clicker:get_player_name(), formspec_ender_chest) player_chest_open(clicker, pos, "mcl_chests:ender_chest_small", {"mcl_chests_ender.png"}, node.param2, false, "mcl_chests_enderchest", "mcl_chests_chest") end, on_receive_fields = function(pos, formname, fields, sender) @@ -1050,11 +1054,11 @@ minetest.register_on_joinplayer(function(player) end) minetest.register_craft({ - output = 'mcl_chests:ender_chest', + output = "mcl_chests:ender_chest", recipe = { - {'mcl_core:obsidian', 'mcl_core:obsidian', 'mcl_core:obsidian'}, - {'mcl_core:obsidian', 'mcl_end:ender_eye', 'mcl_core:obsidian'}, - {'mcl_core:obsidian', 'mcl_core:obsidian', 'mcl_core:obsidian'}, + {"mcl_core:obsidian", "mcl_core:obsidian", "mcl_core:obsidian"}, + {"mcl_core:obsidian", "mcl_end:ender_eye", "mcl_core:obsidian"}, + {"mcl_core:obsidian", "mcl_core:obsidian", "mcl_core:obsidian"}, } }) @@ -1104,14 +1108,14 @@ local function formspec_shulker_box(name) end return "size[9,8.75]".. "label[0,0;"..minetest.formspec_escape(minetest.colorize("#313131", name)).."]".. - "list[current_name;main;0,0.5;9,3;]".. + "list[context;main;0,0.5;9,3;]".. mcl_formspec.get_itemslot_bg(0,0.5,9,3).. "label[0,4.0;"..minetest.formspec_escape(minetest.colorize("#313131", S("Inventory"))).."]".. "list[current_player;main;0,4.5;9,3;9]".. mcl_formspec.get_itemslot_bg(0,4.5,9,3).. "list[current_player;main;0,7.74;9,1;]".. mcl_formspec.get_itemslot_bg(0,7.74,9,1).. - "listring[current_name;main]".. + "listring[context;main]".. "listring[current_player;main]" end @@ -1129,7 +1133,7 @@ for color, desc in pairs(boxtypes) do if mod_doc then if is_canonical then longdesc = S("A shulker box is a portable container which provides 27 inventory slots for any item except shulker boxes. Shulker boxes keep their inventory when broken, so shulker boxes as well as their contents can be taken as a single item. Shulker boxes come in many different colors.") - usagehelp = S("To access the inventory of a shulker box, place and right-click it. To take a shulker box and its contents with you, just break and collect it, the items will not fall out.") + usagehelp = S("To access the inventory of a shulker box, place and right-click it. To take a shulker box and its contents with you, just break and collect it, the items will not fall out. Place the shulker box again to be able to retrieve its contents.") entry_name = S("Shulker Box") else create_entry = false @@ -1146,6 +1150,7 @@ for color, desc in pairs(boxtypes) do _doc_items_longdesc = longdesc, _doc_items_usagehelp = usagehelp, tiles = {mob_texture}, + use_texture_alpha = minetest.features.use_texture_alpha_string_modes and "opaque" or false, drawtype = "mesh", mesh = "mcl_chests_shulker.obj", --[["mcl_chests_"..color.."_shulker_box_top.png", -- top @@ -1210,6 +1215,7 @@ for color, desc in pairs(boxtypes) do _doc_items_usagehelp = usagehelp, drawtype = "nodebox", tiles = {"mcl_chests_blank.png"}, + use_texture_alpha = minetest.features.use_texture_alpha_string_modes and "clip" or true, _chest_entity_textures = {mob_texture}, _chest_entity_sound = "mcl_chests_shulker", _chest_entity_mesh = "mcl_chests_shulker", @@ -1308,23 +1314,22 @@ for color, desc in pairs(boxtypes) do minetest.register_craft({ type = "shapeless", - output = 'mcl_chests:'..color..'_shulker_box', - recipe = { 'group:shulker_box', 'mcl_dye:'..color } + output = "mcl_chests:"..color.."_shulker_box", + recipe = { "group:shulker_box", "mcl_dye:"..color } }) end minetest.register_craft({ - output = 'mcl_chests:violet_shulker_box', + output = "mcl_chests:violet_shulker_box", recipe = { - {'mcl_mobitems:shulker_shell'}, - {'mcl_chests:chest'}, - {'mcl_mobitems:shulker_shell'}, + {"mcl_mobitems:shulker_shell"}, + {"mcl_chests:chest"}, + {"mcl_mobitems:shulker_shell"}, } }) -- Save metadata of shulker box when used in crafting minetest.register_on_craft(function(itemstack, player, old_craft_grid, craft_inv) - local new = itemstack:get_name() if minetest.get_item_group(itemstack:get_name(), "shulker_box") ~= 1 then return end @@ -1403,3 +1408,13 @@ minetest.register_lbm({ meta:set_string("formspec", formspec_shulker_box) end, }) + +minetest.register_lbm({ + label = "Upgrade old ender chest formspec", + name = "mcl_chests:replace_old_ender_form", + nodenames = {"mcl_chests:ender_chest_small"}, + run_at_every_load = false, + action = function(pos, node) + minetest.get_meta(pos):set_string("formspec", "") + end, +}) diff --git a/mods/ITEMS/mcl_chests/locale/mcl_chests.pl.tr b/mods/ITEMS/mcl_chests/locale/mcl_chests.pl.tr new file mode 100644 index 000000000..b4eee74eb --- /dev/null +++ b/mods/ITEMS/mcl_chests/locale/mcl_chests.pl.tr @@ -0,0 +1,36 @@ +# textdomain: mcl_chests +Chest=Skrzynia +Chests are containers which provide 27 inventory slots. Chests can be turned into large chests with double the capacity by placing two chests next to each other.=Skrzynie to pojemniki zawierające 27 miejsc ekwipunku. Skrzynie można zmienić w wielkie skrzynie z podwojoną pojemnością kładąc dwie skrzynie jedna obok drugiej. +To access its inventory, rightclick it. When broken, the items will drop out.=Aby zarządzać jej ekwipunkiem kliknij prawym przyciskiem. Po zniszczeniu przedmioty z niej wypadną. +Trapped Chest=Skrzynia-pułapka +A trapped chest is a container which provides 27 inventory slots. When it is opened, it sends a redstone signal to its adjacent blocks as long it stays open. Trapped chests can be turned into large trapped chests with double the capacity by placing two trapped chests next to each other.=Skrzynia pułapka jest pojemnikiem zawierającym 27 miejsc ekwipunku. Gdy jest otwarta wysyła ona zasila czerwienit na sąsiadujących blokach tak długo jak jest otwarta. Skrzynie-pułapki można zmienić w wielkie skrzynie-pułapki z podwojoną pojemnością przez położenie dwóch skrzynek-pułapek jedna obok drugiej. +Ender Chest=Skrzynia kresu +Ender chests grant you access to a single personal interdimensional inventory with 27 slots. This inventory is the same no matter from which ender chest you access it from. If you put one item into one ender chest, you will find it in all other ender chests. Each player will only see their own items, but not the items of other players.=Skrzynie kresu dają dostęp do pojedynczego, osobistego, międzywymiarowego ekwipunku z 27 miejscami. Ten ekwipunek będzie zawierał to samo niezależnie od skrzyni kresu z której nim zarządzasz. Jeśli włożysz przedmiot do jednej skrzyni kresu, znajdziesz go we wszystkich innych. każdy gracz będzie widział tylko swoje przedmioty, a nie innych graczy. +Rightclick the ender chest to access your personal interdimensional inventory.=Kliknij prawym w skrzynię kresu aby mieć dostęp do twojego osobistego, międzywymiarowego ekwipunku. +White Shulker Box=Biała shulkerowa skrzynia +Light Grey Shulker Box=Jasnoszara shulkerowa skrzynia +Orange Shulker Box=Pomarańczowa shulkerowa skrzynia +Cyan Shulker Box=Błękitna shulkerowa skrzynia +Magenta Shulker Box=Karmazynowa shulkerowa skrzynia +Purple Shulker Box=Fioletowa shulkerowa skrzynia +Light Blue Shulker Box=Jasnoniebieska shulkerowa skrzynia +Blue Shulker Box=Niebieska shulkerowa skrzynia +Yellow Shulker Box=Żółta shulkerowa skrzynia +Brown Shulker Box=Brązowa shulkerowa skrzynia +Lime Shulker Box=Jasnozielona shulkerowa skrzynia +Green Shulker Box=Zielona shulkerowa skrzynia +Pink Shulker Box=Różowa shulkerowa skrzynia +Red Shulker Box=Czerwona shulkerowa skrzynia +Grey Shulker Box=Szara shulkerowa skrzynia +Black Shulker Box=Czarna shulkerowa skrzynia +A shulker box is a portable container which provides 27 inventory slots for any item except shulker boxes. Shulker boxes keep their inventory when broken, so shulker boxes as well as their contents can be taken as a single item. Shulker boxes come in many different colors.=Shulkerowe skrzynie to przenośny pojemnik udostępniający 27 miejsc ekwipunku na dowolny przedmiot z wyjątkiem shulkerowych skrzyń. Shulkerowe skrzynie nie tracą swojego ekwipunku po zniszczeniu, więc te skrzynie razem z całą zawartością mogą być przechowywane jako pojedynczy przedmiot. +To access the inventory of a shulker box, place and right-click it. To take a shulker box and its contents with you, just break and collect it, the items will not fall out.=Aby dostać się do przedmiotów w shulkerowej skrzyni postaw ją i naciśnij ją prawym. Aby wziąć shulkerową skrzynię i jej zawartość ze sobą, zniszcz ją i zbierz, przedmioty nie wypadną. +Shulker Box=Shulkerowa skrzynia +Large Chest=Duża skrzynia +Inventory=Ekwipunek +27 inventory slots=27 miejsc ekwipunku +Can be carried around with its contents=Może być przenoszona razem z zawartością +Can be combined to a large chest=Może być połączona w dużą skrzynię +27 interdimensional inventory slots=27 międzywymiarowych miejsc ekwipunku +Put items inside, retrieve them from any ender chest=Włóż do niej przedmioty, miej do nich dostęp z dowolnej skrzyni kresu +Emits a redstone signal when opened=Aktywuje pobliski czerwienit gdy otwarta diff --git a/mods/ITEMS/mcl_chests/mod.conf b/mods/ITEMS/mcl_chests/mod.conf new file mode 100644 index 000000000..0ff5129ca --- /dev/null +++ b/mods/ITEMS/mcl_chests/mod.conf @@ -0,0 +1,3 @@ +name = mcl_chests +depends = mcl_init, mcl_formspec, mcl_core, mcl_sounds, mcl_end, mesecons +optional_depends = doc, screwdriver diff --git a/mods/ITEMS/mcl_chests/textures/mcl_chests_normal.png b/mods/ITEMS/mcl_chests/textures/mcl_chests_normal.png index 5133f53ff7ea3f44e51d8c339f7efa67f967eefe..9974f60d5733ae946cab3be3f6e805b284eaa235 100644 GIT binary patch delta 642 zcmV-|0)73l1)v3xDSt5kFc}#cI1&&eBO@#yC0WyMH2)#9bMNF?oibdv9=* z9@}+c&cdI={Wv-P=Py07AD6Jq1_M5@+!kY=%St;{Ij$?9DMUK3+Ox}bHv7H@*b135}$+l?yK>7Y;8M~ zv7W$uV0^@nnqQokgW9%38R!Y7Bg?8(-a60f^=*g0^?&;At}X-Mo(mjja7O&i_UsO` zHoeF(d1*`mDr?h;K*y6g0i0H4O@kDZCk_Kkxd~o_0D`K#5lIL(Bbz2du?EIWMFXosuH7!RALa?3?xyH+VIq+?%ppuO3Xe zLi}@lvyVWD5AB!0mzVkFF?{nC9*L&~RQW`Ls#`%4>uEaw zz6XdL5H%epEiw49TrPj@0nbWD`G!@NWlgL9Q=(=JAWmE*>wt)c1o2LZ88 zl5s~6aLaFqb$@5G;f4cNFwHtn{~#b%c+eDm_9rMw9h#v2aY=x%BTgec_h;;eG@+=| zyEzX?*F2Vo&*cU8Pr9yD5@dOe*0J`d9O%Voiztkaf4f>;Rkst`RW%11Njr|tq5SrP z{kUaqC$tuAkS<8oP{*~8&Z~NLJE7HSL)kI1ip4k1i+@UGJK=W)i?UN70hAYjk}iIj zzd4xSVb^9C88$D87=XGqYimqA9x}k`(rD%<*gSn0n3$VLDH*_Dns>Zy=ur&em;ugm z;3fwE7~l&5?MrMPyP;3Od4|nPql3Uix+W<$C;}QL2R^882>2KjK*$Gmou+dWH8xLk z8)T4o4S!JkkM;lOEe0000o88{LUBO@a$EG$GdC_Ozr zPChV6Nl95oH)2aWaaKfkTS40Uv!_>Z&VK*|Q4at7!|Wg872H%1KuyPop$J0>a2MqT;@aO~UBJ>=WQ}Ab$ff0N zEPyWN=~6_<lp&)a0&vpkdk>iv`#nQ!a0WesUkuxFVW@# z^(LQ#lPs!zV4mazW|fLa*mMCtfJ*Qo>c=bdz3VC~Xn!riv=JgH^j)(b+=8K`vhp$r zDhV`+vJl(_s6^Mq*j6_Q+P1n+WivndPShi~{u#rAV|=5&6JDBY>?C6g1v)mJUq&=t})5jCj`bYG^w`+!V_PO_dJpDcQeNxBR^vc1)Kpwzzthg1Nu1x{uZy)ioM9_7ROnSuNKx3=Tvk9GFv`4X$vEC&5oC zl?NcmAj3w=1<{B_D&b@mE3ai3Rr8YZf+=T6fk$Z6e{7^<^r)!HifLO zAmAOW-oIFfGmBs+5Kug+AaJ@Sz;(hAsssqxTz`N{op4kq+;dhil5h&@C{@BO%8;IFpRf5x-$$*w~s%6v&JJ^7OI%4_*97m@k#w0>$sDQ zEq@DDhq;NHs7wrLI8Ihr2vv8Mu}_BTj3*sF5F>%H&mUwweaNxi_&#F`1>89mF(Dm( zwjk6S!!Q}~D8~-Q_ZeF(kP;H7Q71hWZt6`RSVEP+Dm&mw#uf{3FNvq2JMS=8j(Egi z4J<5Xiv?IGfpWP5h6>6iEMzeV6tcw@^f23`ckDa9jUC@{dTn@w54J+Kw#61(Y_Y}v Z#V-QG-H{0gf6V{@002ovPDHLkV1oaNq&ENn delta 1021 zcmV^AB0gjv7r-)aG~#p08KqYDnQYBeXp%PBn)}&O`kHaeJ}xk&ypme; zp*_dnN;|ca4K~?_1-9&Ox=60eWWXy3PXFT1UH%F_5r_x?4uff=KarBaTeP_9$ z;3$E;O&1*~AZztN4f_}YT;A_;0o3pUVKXmaQ)ABeA}@7&HsO9~S7}vMjJsY?WF~ zvR`z$nB<6XCtF$TCi{dyt!xN!t&IAx3U5V)VMmPYnz0SgiZR|8fpw&57E zOj}q)jAydX2)I}rH~jJj3P_YfVkrRh8olA@h-b2=<9PA*2&Y4N r3A_aU{w7`mFM;3kDR}YX#fyIcKpwkkCH7o88{LUBO@a$EG$GdC_Ozr zPChV6Nl95oH*r=(cUwt(UrdQ=PLXg@_=nP>00001bW%=J06^y0W&i*JBS}O-R7l6| zlEI4FP!xt;^Z_a@eStnf8yVFI#{)PrGLv}ycsi_7VAAYvy~#V z?kG32D-ucEm0=i@XXv^221n_!T^Hso{5jl@ljDE>(j)6}39C|P!271xWX$(iX{V~k zjshA&qsuOF zmi{caCj<=K@P8m+_0n`Twlr`g;Yt11ylo^6^~0xBJoz7-zsLJ(RJz-zlJ-oNeMLKKc|0epTCc zC|5NF4AV&xpF`#SSL4md+;%7dnpzPPXYwSR4g($^Czt}L@!edj)NoNb4{ zj5D1D%f`gtO= zHW8RS+JC6aESpKIF?oWTz&w>TkhOoTf1bPi#4wB(WfWJ7aW6WwJXrX^n*6!@QcBS& zDMA}=enj(j^4WMTrRbCtz{O@6t=b8LZ&Hd*iB9zz0}Oy7v?TYUfgB*t7o=z)3Rm&< woD>a+_6qkQMO(<5;D6wxlpgA#{>Sr~F000DMK}|sb0I`n?{9y$E000SaNLh0L01mzY z01mzZ>O!%=00007bV*G`2iyt~2@*72tl>rg000)d0vx3}B)`}_ON z$G4Ba`117T7y5`HmYffduYV(Rdor$-J-;bJ@s8W{(6RxD{r2hIZ+!p!ehWhS24s`K z*dJe?wlL25zkk+%9JlGAWjvd##49A%ry=+d`uOU_PRu8#l|8?4>THZ>j@$Imya5jn z58DlTdOge$Lo7MGBMgCg#Yarr0OEktWrM(G-EfjO08z&@fLPXOW#=(O0jG=T`~)DI zL5%T=I;H_UTiJQc6SV=aY?$8GC8S!jo=YO%$4M1Ff6Y>W9lMO(Wr;WJ$ z5&UNxke>jec0tUad;;XOvh!H}A;bpr+9ObyBZgT28RS+R^CLKA13Xbq*Xy6y2*!B> z5QUGqUTlx~7jXl)s%*HYzX1rdNkW|Y{%#}}(SRg34t)b4jXXAEwPF)_s2 z0M|0_)Ow@5tk-0YtuLks#KOxXZ7bxZ>gYXi*f$@!jEb{=C>h)R*%iV>WuV)AqW@vP+-7<)^2 zZ+~UyF@zxMxf;;Z%Fbh_HUKdS$LH7vB-7sjHg`$`$m1P6;q-|OAg`63#}IW)1Bm5` z7*Txs(w}p!>^z1THh4?}6w_aI@x*(kZU7tH*8pNXO`a*5_aqx(%+w74HtRR*GewCx z`JEfzqj<*CHlT-%_Vh7*Q+AQ-w6f>7<$wP>%tnPmyU5riW86ggsvO9eiYf=H*d$|{ z%&~cO^U5*i`_q?K*O)%<<@NQpcs2mvzC6dr)^ofsugM%6N&eXIB#ALUPP{`EQ~A8E z!1&O-Q|ld)*JO^ZPojJNI_u9EAf_q?o)!p;+m|5Ear%(1yJxCl?kg)PpL_e;rZGRKw+Lw-jr-1~Tv zb18XE=Ga`EMR>A^@9Bf|$?SPe=6@U7X0utE(zz0)b0tdWN|er(D4i=&I#;4}u0-iv ziPE_erE?`p=Sq~$l_;GnQ94(mbSkby>0F7@xe}#wMxM>8Vl(nQc6Id=*tZtL<|9;J P00000NkvXXu0mjf?&D5S diff --git a/mods/ITEMS/mcl_chests/textures/mcl_chests_trapped_double.png b/mods/ITEMS/mcl_chests/textures/mcl_chests_trapped_double.png index 95f768f97c0e7f1243b73df472b10174c7e69246..88ff45825f872490246c2b5eb81f18bb907d887b 100644 GIT binary patch delta 955 zcmV;s14R7W55)(N7=Hu<0000W_+m@|001yhOjJdG000>o88{LUBO@a$EG$GdC_Ozr zPChV6Nl95oH)2aWaaKfkTSt3&X@Ae9?6i?oICkEmixEnW zr4V{tW{i|m3C5FhE+z4P$z_X!>p2~}}A;J_jdRRQteeWdvrWib&XW0X~3A@B!*YEAzdpGJh**EWxxPA_?>zvp2p0LrG=j z<#=35piY#9;4VNVIwr=px=GMB)qN_O`N?;}F2U8$7#7N)w2}L{e9Jav|g#MR?DytsMU&Uxt3vYAS&U&oa$_FiDPVy ze@dx506_*BHdHPMhb&YHC(BrQEyJjq7mpT9Ia>rJ1bPRnxb~!gxuc~}3CA`Uh;*_k zqQ0#xdRqdMW9vVx(6Q&2~#5^fo7 zE|AtwHOf(?jFb_WxeST`mJ+I%rHs_OJzUK&C_f~ee%ldV&Pd}M*z8=tjv>SP+SQUx zRnN+-U@gP+H3ADc>1`?u!+*WbJ1-2wc(bEB!?1Mw@bfooJg`Nfim8gv*VbDVpVZH= zj(avX%EW*Mqj-gdP<3Z1`)H`nc--cFF%%g4{9Z=W`wZ)i?ou{az@1YO z5z^+T3qrjS43i-bGi-l!m$LZ+2_aDuwv!X#Cf@X(#Z(EbvV9(>Y`y^Z;%FMU^EPwk zkcSM`z=C`>Ux2k^D3>c>sGw}Z0v3TlE;O5OLBC15$G+p+*zp~w+k{8>V9RAITWqn# d7F+yZ`~s_X-5jfjq&NTo002ovPDHLkV1jaqv%LTS literal 2011 zcmZuydpy(o8~?5y#2QJogC#|j>nhVG3^}Z54pOQacE)j=%eHW0l*2iSKcDye^?9D>^}If*Zs(k!N}5Ul z06?+Mr`=^SQD&H(@-ja#n2;a~-v!#a+5te-ZOAu2IoVk;!r7Yw0LsnV1`^v>wa7pP zD%RCeVN^*~QB6)gsNY%!!KjWGsUG10)M&pb5)k1RM5daONz?-;OwCO#NXf@YGS&~+ z({`RQKA-bn-qa`UP7!J%qmKKjC8eM5mjkP6>^r1-!rXk1Tx)-er}=KP7Atd!(uJau zqEF1~hB9IQ7)4rO8Z)yc7H&K#uj~_xq07tD-F3^~)+KdyuN9^`Ztbhvs`PpJ%SN|l z`212Qj=(z<_R3CN&iOeII(Trt)3PWni{gb&$emp)8V&6V@K-fyUPy}dtOgkl+9qsK zZ*vkhw(fE0o2x!{&q43O^wg!{U@#RS9g3gwS>DvmeMe(G0xidz-##M^L^S-A=WNc9 zH-F?#q$D7LT1y=c=O`=TEwtsCLDeaV?AA>};!q_4r{NI{USyd-e8SDH4j$l|0cfRH z8zXFuzDvc7HD0_>uc2PxY&oPo-}MCQt6R@JfuRq;qhZ3~T)oW_I;b`j$jb^eadXO< zLs2O`nPe8q_~2f-7tFos51e^3?(V_fG4|tzfl9*4PVi1-}0y zumVZ!ZF`zJEAh#0H1Nv&wj-mo=`&mdrPXp$G+`J+2N|YRA#qY+9Idy?0+UZ^Ae_`J z&XlV8R-@UFNcw9lLRanxfR(0;DxOJ1b68h#VeVe#wK1X2*je-f56Jd_5W$PFTuY+F zTKFjlyg1(^%8q1gDzZU^{+t=y$At`ml}PDNWOiH0a8r@3^0+}Jf@-79$nWxVO|eOH zy-Cb=@K0PL`^0^pL>%-r861t`q@{v+|HpJ!=>RzkF4}{1l$~@@j}^Q5KXRp3t6s3b zduFY6CowJ3#)3I-uInItU6@1BGpkmm>*pGFJnJcC2PwC4txM4>V)wpJCk=}Y{Jekv z5?z4M@Mx5v&*8aK1*a%*S@NIZO@9Tg;t}Rhq&SM>khf53)IZ{)ls}b7mg>%h68Ech z^N(F!P{|AltLJ-k)uf!@V=olfcsn-f@^*Em*1p!}Bd+n9zEsxs^46);$o4ASJ$}O1 z3G7$tbCs>mgZ4kVz=~|?;P}JzfRd5&my&LrQS$ix)vDn%im_OC#WybM1m+MDP@Eui zvlK(v_d*6Aq^tKH{97A;#eMRF4zzz~#{m?+buh8!+Yy+NrxOyh(uewzSwJL%sR=7b z@sYK@HS!0J=#?1_YP#uZ0Zn76wWw1_`pMN&YH|+i!@D-`|dt>sAbN`5q+N%s68Z}WnKHj($ z0^GDKF|JPT_Ge_$GdL@>{WQ#6#2i+nWF~vT_(83fHjIfEX>N9WSdhC+8vCDYheeCS zMK@8L@9VPX(9Xg;ti=KKK!{fuK<3?pw!EXMg$KWEeSi;c^0Y;17OQ5pL3QmyEP)WV z#=@z_34M*`=jWS5H+tJ5>ztf#w`1A$6xiGg7Vq|GvYggw>fKn zfHaq`dO3SNl$_l^Nr(?)FvLd8a3}7rP8;v-8k3+A-)M`=QM%fi)L-^ztI&Axu9mHF2S0&EGEwja6mKJGqLRid#;2GuEs!DKEWep*WQB%f0 zvH>56Yj#(e2D$uf{X)T`tg!uBgz#+)O;WynkEC$#Ay9<)L z^KOjzi6omRiln*Lw-3!G^W20T0ouqfle9n(qY zGb#sNc>ff&Ubz$=g*Q(zD43-GChJGcP6Xm`i8y9Yw&GcxC#!kduv^z%B1S6aN7rOq z7nkh1LqX7`3olc4w-o&GYy>VmPAuoYzX-lgt=T69k_~F^t7Lh9h`qOzYei3C=E6}&Z?{1MiL|Kgr4X^M@ z`Db!Qt^4)o-G@CJrsl7kM&`6V8qkkcp{6$OMcy^7A9}T|V;%9A{Whvyok8sy1OH~M ohmTro(S=}T= random_timer_trigger then random_frame = (random_frame + math.random(-1, 1)) % compass_frames random_timer = 0 end - for i,player in ipairs(players) do + for i,player in pairs(minetest.get_connected_players()) do local function has_compass(player) - for _,stack in ipairs(player:get_inventory():get_list("main")) do + for _,stack in pairs(player:get_inventory():get_list("main")) do if minetest.get_item_group(stack:get_name(), "compass") ~= 0 then return true end @@ -31,29 +52,9 @@ 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 ipairs(player:get_inventory():get_list("main")) do + for j,stack in pairs(player:get_inventory():get_list("main")) do if minetest.get_item_group(stack:get_name(), "compass") ~= 0 and minetest.get_item_group(stack:get_name(), "compass")-1 ~= compass_image then local itemname = "mcl_compass:"..compass_image @@ -71,7 +72,7 @@ for frame = 0, compass_frames-1 do table.insert(images, "mcl_compass_compass_"..s..".png") end -local doc_mod = minetest.get_modpath("doc") ~= nil +local doc_mod = minetest.get_modpath("doc") local stereotype_frame = 18 for i,img in ipairs(images) do @@ -79,7 +80,9 @@ for i,img in ipairs(images) do if i == stereotype_frame then inv = 0 end - local use_doc, longdesc, usagehelp, tt + local use_doc, longdesc, tt + --Why is there no usage help? This should be fixed. + --local usagehelp use_doc = i == stereotype_frame if use_doc then tt = S("Points to the world origin") @@ -91,7 +94,7 @@ for i,img in ipairs(images) do _tt_help = tt, _doc_items_create_entry = use_doc, _doc_items_longdesc = longdesc, - _doc_items_usagehelp = usagehelp, + --_doc_items_usagehelp = usagehelp, inventory_image = img, wield_image = img, stack_max = 64, @@ -105,11 +108,11 @@ for i,img in ipairs(images) do end minetest.register_craft({ - output = 'mcl_compass:'..stereotype_frame, + output = "mcl_compass:"..stereotype_frame, recipe = { - {'', 'mcl_core:iron_ingot', ''}, - {'mcl_core:iron_ingot', 'mesecons:redstone', 'mcl_core:iron_ingot'}, - {'', 'mcl_core:iron_ingot', ''} + {"", "mcl_core:iron_ingot", ""}, + {"mcl_core:iron_ingot", "mesecons:redstone", "mcl_core:iron_ingot"}, + {"", "mcl_core:iron_ingot", ""} } }) diff --git a/mods/ITEMS/mcl_compass/locale/mcl_compass.de.tr b/mods/ITEMS/mcl_compass/locale/mcl_compass.de.tr index a78b70c01..cf4c814ce 100644 --- a/mods/ITEMS/mcl_compass/locale/mcl_compass.de.tr +++ b/mods/ITEMS/mcl_compass/locale/mcl_compass.de.tr @@ -1,4 +1,4 @@ # textdomain: mcl_compass -Compasses are tools which point to the world origin (X@=0, Z@=0) or the spawn point in the Overworld.=Kompasse sind Werkzeuge, die zum Ursprungspunkt der Welt (X@=0, Z@=0) oder den Einstiegspunkt der Welt zeigen. +Compasses are tools which point to the world origin (X@=0, Z@=0) or the spawn point in the Overworld.=Kompasse sind Werkzeuge, die zum Ursprungspunkt der Welt (X@=0, Z@=0) oder zum Einstiegspunkt der Welt zeigen. Compass=Kompass Points to the world origin=Zeigt zum Startpunkt der Welt diff --git a/mods/ITEMS/mcl_compass/locale/mcl_compass.pl.tr b/mods/ITEMS/mcl_compass/locale/mcl_compass.pl.tr new file mode 100644 index 000000000..2a9533652 --- /dev/null +++ b/mods/ITEMS/mcl_compass/locale/mcl_compass.pl.tr @@ -0,0 +1,4 @@ +# textdomain: mcl_compass +Compasses are tools which point to the world origin (X@=0, Z@=0) or the spawn point in the Overworld.=Kompasy to narzędzia które wskazują na punkt początku świata (X@=0, Z@=0) lub na miejsce odrodzenia na Powierzchni. +Compass=Kompas +Points to the world origin=Wskazuje na początek świata diff --git a/mods/ITEMS/mcl_compass/mod.conf b/mods/ITEMS/mcl_compass/mod.conf index 8c9e0a652..41266222b 100644 --- a/mods/ITEMS/mcl_compass/mod.conf +++ b/mods/ITEMS/mcl_compass/mod.conf @@ -1 +1,4 @@ name = mcl_compass +description = A compass item which points towards the world origin. +depends = mcl_core, mcl_worlds, mesecons +optional_depends = doc diff --git a/mods/ITEMS/mcl_core/crafting.lua b/mods/ITEMS/mcl_core/crafting.lua index a0ad38a77..3ff2b142c 100644 --- a/mods/ITEMS/mcl_core/crafting.lua +++ b/mods/ITEMS/mcl_core/crafting.lua @@ -4,139 +4,122 @@ -- Crafting definition -- +local function craft_planks(output, input) + minetest.register_craft({ + output = "mcl_core:"..output.."wood 4", + recipe = { + {"mcl_core:"..input}, + } + }) +end + +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({ - output = 'mcl_core:wood 4', + type = "shapeless", + output = "mcl_core:mossycobble", + recipe = { "mcl_core:cobble", "mcl_core:vine" }, +}) + +minetest.register_craft({ + type = "shapeless", + output = "mcl_core:stonebrickmossy", + recipe = { "mcl_core:stonebrick", "mcl_core:vine" }, +}) + +minetest.register_craft({ + output = "mcl_core:coarse_dirt 4", recipe = { - {'mcl_core:tree'}, + {"mcl_core:dirt", "mcl_core:gravel"}, + {"mcl_core:gravel", "mcl_core:dirt"}, + } +}) +minetest.register_craft({ + output = "mcl_core:coarse_dirt 4", + recipe = { + {"mcl_core:gravel", "mcl_core:dirt"}, + {"mcl_core:dirt", "mcl_core:gravel"}, } }) minetest.register_craft({ - output = 'mcl_core:darkwood 4', + output = "mcl_core:sandstonesmooth 4", recipe = { - {'mcl_core:darktree'}, + {"mcl_core:sandstone","mcl_core:sandstone"}, + {"mcl_core:sandstone","mcl_core:sandstone"}, } }) minetest.register_craft({ - output = 'mcl_core:junglewood 4', + output = "mcl_core:redsandstonesmooth 4", recipe = { - {'mcl_core:jungletree'}, + {"mcl_core:redsandstone","mcl_core:redsandstone"}, + {"mcl_core:redsandstone","mcl_core:redsandstone"}, } }) minetest.register_craft({ - output = 'mcl_core:acaciawood 4', + output = "mcl_core:granite_smooth 4", recipe = { - {'mcl_core:acaciatree'}, - } -}) - -minetest.register_craft({ - output = 'mcl_core:sprucewood 4', - recipe = { - {'mcl_core:sprucetree'}, - } -}) - -minetest.register_craft({ - output = 'mcl_core:birchwood 4', - recipe = { - {'mcl_core:birchtree'}, - } -}) - -minetest.register_craft({ - type = 'shapeless', - output = 'mcl_core:mossycobble', - recipe = { 'mcl_core:cobble', 'mcl_core:vine' }, -}) - -minetest.register_craft({ - type = 'shapeless', - output = 'mcl_core:stonebrickmossy', - recipe = { 'mcl_core:stonebrick', 'mcl_core:vine' }, -}) - -minetest.register_craft({ - output = 'mcl_core:coarse_dirt 4', - recipe = { - {'mcl_core:dirt', 'mcl_core:gravel'}, - {'mcl_core:gravel', 'mcl_core:dirt'}, - } -}) -minetest.register_craft({ - output = 'mcl_core:coarse_dirt 4', - recipe = { - {'mcl_core:gravel', 'mcl_core:dirt'}, - {'mcl_core:dirt', 'mcl_core:gravel'}, - } -}) - -minetest.register_craft({ - output = 'mcl_core:sandstonesmooth 4', - recipe = { - {'mcl_core:sandstone','mcl_core:sandstone'}, - {'mcl_core:sandstone','mcl_core:sandstone'}, - } -}) - -minetest.register_craft({ - output = 'mcl_core:redsandstonesmooth 4', - recipe = { - {'mcl_core:redsandstone','mcl_core:redsandstone'}, - {'mcl_core:redsandstone','mcl_core:redsandstone'}, - } -}) - -minetest.register_craft({ - output = 'mcl_core:granite_smooth 4', - recipe = { - {'mcl_core:granite', 'mcl_core:granite'}, - {'mcl_core:granite', 'mcl_core:granite'} + {"mcl_core:granite", "mcl_core:granite"}, + {"mcl_core:granite", "mcl_core:granite"} }, }) minetest.register_craft({ - output = 'mcl_core:andesite_smooth 4', + output = "mcl_core:andesite_smooth 4", recipe = { - {'mcl_core:andesite', 'mcl_core:andesite'}, - {'mcl_core:andesite', 'mcl_core:andesite'} + {"mcl_core:andesite", "mcl_core:andesite"}, + {"mcl_core:andesite", "mcl_core:andesite"} }, }) minetest.register_craft({ - output = 'mcl_core:diorite_smooth 4', + output = "mcl_core:diorite_smooth 4", recipe = { - {'mcl_core:diorite', 'mcl_core:diorite'}, - {'mcl_core:diorite', 'mcl_core:diorite'} + {"mcl_core:diorite", "mcl_core:diorite"}, + {"mcl_core:diorite", "mcl_core:diorite"} }, }) minetest.register_craft({ type = "shapeless", - output = 'mcl_core:granite', - recipe = {'mcl_core:diorite', 'mcl_nether:quartz'}, + output = "mcl_core:granite", + recipe = {"mcl_core:diorite", "mcl_nether:quartz"}, }) minetest.register_craft({ type = "shapeless", - output = 'mcl_core:andesite 2', - recipe = {'mcl_core:diorite', 'mcl_core:cobble'}, + output = "mcl_core:andesite 2", + recipe = {"mcl_core:diorite", "mcl_core:cobble"}, }) minetest.register_craft({ - output = 'mcl_core:diorite 2', + output = "mcl_core:diorite 2", recipe = { - {'mcl_core:cobble', 'mcl_nether:quartz'}, - {'mcl_nether:quartz', 'mcl_core:cobble'}, + {"mcl_core:cobble", "mcl_nether:quartz"}, + {"mcl_nether:quartz", "mcl_core:cobble"}, } }) minetest.register_craft({ - output = 'mcl_core:diorite 2', + output = "mcl_core:diorite 2", recipe = { - {'mcl_nether:quartz', 'mcl_core:cobble'}, - {'mcl_core:cobble', 'mcl_nether:quartz'}, + {"mcl_nether:quartz", "mcl_core:cobble"}, + {"mcl_core:cobble", "mcl_nether:quartz"}, } }) @@ -157,60 +140,60 @@ minetest.register_craft({ }) minetest.register_craft({ - output = 'mcl_core:stick 4', + output = "mcl_core:stick 4", recipe = { - {'group:wood'}, - {'group:wood'}, + {"group:wood"}, + {"group:wood"}, } }) minetest.register_craft({ - output = 'mcl_core:coalblock', + output = "mcl_core:coalblock", recipe = { - {'mcl_core:coal_lump', 'mcl_core:coal_lump', 'mcl_core:coal_lump'}, - {'mcl_core:coal_lump', 'mcl_core:coal_lump', 'mcl_core:coal_lump'}, - {'mcl_core:coal_lump', 'mcl_core:coal_lump', 'mcl_core:coal_lump'}, + {"mcl_core:coal_lump", "mcl_core:coal_lump", "mcl_core:coal_lump"}, + {"mcl_core:coal_lump", "mcl_core:coal_lump", "mcl_core:coal_lump"}, + {"mcl_core:coal_lump", "mcl_core:coal_lump", "mcl_core:coal_lump"}, } }) minetest.register_craft({ - output = 'mcl_core:coal_lump 9', + output = "mcl_core:coal_lump 9", recipe = { - {'mcl_core:coalblock'}, + {"mcl_core:coalblock"}, } }) minetest.register_craft({ - output = 'mcl_core:ironblock', + output = "mcl_core:ironblock", recipe = { - {'mcl_core:iron_ingot', 'mcl_core:iron_ingot', 'mcl_core:iron_ingot'}, - {'mcl_core:iron_ingot', 'mcl_core:iron_ingot', 'mcl_core:iron_ingot'}, - {'mcl_core:iron_ingot', 'mcl_core:iron_ingot', 'mcl_core:iron_ingot'}, + {"mcl_core:iron_ingot", "mcl_core:iron_ingot", "mcl_core:iron_ingot"}, + {"mcl_core:iron_ingot", "mcl_core:iron_ingot", "mcl_core:iron_ingot"}, + {"mcl_core:iron_ingot", "mcl_core:iron_ingot", "mcl_core:iron_ingot"}, } }) minetest.register_craft({ - output = 'mcl_core:iron_ingot 9', + output = "mcl_core:iron_ingot 9", recipe = { - {'mcl_core:ironblock'}, + {"mcl_core:ironblock"}, } }) minetest.register_craft({ - output = 'mcl_core:goldblock', + output = "mcl_core:goldblock", recipe = { - {'mcl_core:gold_ingot', 'mcl_core:gold_ingot', 'mcl_core:gold_ingot'}, - {'mcl_core:gold_ingot', 'mcl_core:gold_ingot', 'mcl_core:gold_ingot'}, - {'mcl_core:gold_ingot', 'mcl_core:gold_ingot', 'mcl_core:gold_ingot'}, + {"mcl_core:gold_ingot", "mcl_core:gold_ingot", "mcl_core:gold_ingot"}, + {"mcl_core:gold_ingot", "mcl_core:gold_ingot", "mcl_core:gold_ingot"}, + {"mcl_core:gold_ingot", "mcl_core:gold_ingot", "mcl_core:gold_ingot"}, } }) minetest.register_craft({ - output = 'mcl_core:gold_ingot 9', + output = "mcl_core:gold_ingot 9", recipe = { - {'mcl_core:goldblock'}, + {"mcl_core:goldblock"}, } }) @@ -244,119 +227,119 @@ minetest.register_craft({ minetest.register_craft({ type = "cooking", - output = 'mcl_core:iron_nugget', - recipe = 'mobs_mc:iron_horse_armor', + output = "mcl_core:iron_nugget", + recipe = "mobs_mc:iron_horse_armor", cooktime = 10, }) minetest.register_craft({ type = "cooking", - output = 'mcl_core:gold_nugget', - recipe = 'mobs_mc:gold_horse_armor', + output = "mcl_core:gold_nugget", + recipe = "mobs_mc:gold_horse_armor", cooktime = 10, }) minetest.register_craft({ - output = 'mcl_core:sandstone', + output = "mcl_core:sandstone", recipe = { - {'mcl_core:sand', 'mcl_core:sand'}, - {'mcl_core:sand', 'mcl_core:sand'}, + {"mcl_core:sand", "mcl_core:sand"}, + {"mcl_core:sand", "mcl_core:sand"}, } }) minetest.register_craft({ - output = 'mcl_core:redsandstone', + output = "mcl_core:redsandstone", recipe = { - {'mcl_core:redsand', 'mcl_core:redsand'}, - {'mcl_core:redsand', 'mcl_core:redsand'}, + {"mcl_core:redsand", "mcl_core:redsand"}, + {"mcl_core:redsand", "mcl_core:redsand"}, } }) minetest.register_craft({ - output = 'mcl_core:clay', + output = "mcl_core:clay", recipe = { - {'mcl_core:clay_lump', 'mcl_core:clay_lump'}, - {'mcl_core:clay_lump', 'mcl_core:clay_lump'}, + {"mcl_core:clay_lump", "mcl_core:clay_lump"}, + {"mcl_core:clay_lump", "mcl_core:clay_lump"}, } }) minetest.register_craft({ - output = 'mcl_core:brick_block', + output = "mcl_core:brick_block", recipe = { - {'mcl_core:brick', 'mcl_core:brick'}, - {'mcl_core:brick', 'mcl_core:brick'}, + {"mcl_core:brick", "mcl_core:brick"}, + {"mcl_core:brick", "mcl_core:brick"}, } }) minetest.register_craft({ - output = 'mcl_core:paper 3', + output = "mcl_core:paper 3", recipe = { - {'mcl_core:reeds', 'mcl_core:reeds', 'mcl_core:reeds'}, + {"mcl_core:reeds", "mcl_core:reeds", "mcl_core:reeds"}, } }) minetest.register_craft({ - output = 'mcl_core:ladder 3', + output = "mcl_core:ladder 3", recipe = { - {'mcl_core:stick', '', 'mcl_core:stick'}, - {'mcl_core:stick', 'mcl_core:stick', 'mcl_core:stick'}, - {'mcl_core:stick', '', 'mcl_core:stick'}, + {"mcl_core:stick", "", "mcl_core:stick"}, + {"mcl_core:stick", "mcl_core:stick", "mcl_core:stick"}, + {"mcl_core:stick", "", "mcl_core:stick"}, } }) minetest.register_craft({ - output = 'mcl_core:stonebrick 4', + output = "mcl_core:stonebrick 4", recipe = { - {'mcl_core:stone', 'mcl_core:stone'}, - {'mcl_core:stone', 'mcl_core:stone'}, + {"mcl_core:stone", "mcl_core:stone"}, + {"mcl_core:stone", "mcl_core:stone"}, } }) minetest.register_craft({ - output = 'mcl_core:lapisblock', + output = "mcl_core:lapisblock", recipe = { - {'mcl_dye:blue', 'mcl_dye:blue', 'mcl_dye:blue'}, - {'mcl_dye:blue', 'mcl_dye:blue', 'mcl_dye:blue'}, - {'mcl_dye:blue', 'mcl_dye:blue', 'mcl_dye:blue'}, + {"mcl_dye:blue", "mcl_dye:blue", "mcl_dye:blue"}, + {"mcl_dye:blue", "mcl_dye:blue", "mcl_dye:blue"}, + {"mcl_dye:blue", "mcl_dye:blue", "mcl_dye:blue"}, } }) minetest.register_craft({ - output = 'mcl_dye:blue 9', + output = "mcl_dye:blue 9", recipe = { - {'mcl_core:lapisblock'}, + {"mcl_core:lapisblock"}, } }) minetest.register_craft({ output = "mcl_core:emeraldblock", recipe = { - {'mcl_core:emerald', 'mcl_core:emerald', 'mcl_core:emerald'}, - {'mcl_core:emerald', 'mcl_core:emerald', 'mcl_core:emerald'}, - {'mcl_core:emerald', 'mcl_core:emerald', 'mcl_core:emerald'}, + {"mcl_core:emerald", "mcl_core:emerald", "mcl_core:emerald"}, + {"mcl_core:emerald", "mcl_core:emerald", "mcl_core:emerald"}, + {"mcl_core:emerald", "mcl_core:emerald", "mcl_core:emerald"}, } }) minetest.register_craft({ - output = 'mcl_core:emerald 9', + output = "mcl_core:emerald 9", recipe = { - {'mcl_core:emeraldblock'}, + {"mcl_core:emeraldblock"}, } }) minetest.register_craft({ output = "mcl_core:diamondblock", recipe = { - {'mcl_core:diamond', 'mcl_core:diamond', 'mcl_core:diamond'}, - {'mcl_core:diamond', 'mcl_core:diamond', 'mcl_core:diamond'}, - {'mcl_core:diamond', 'mcl_core:diamond', 'mcl_core:diamond'}, + {"mcl_core:diamond", "mcl_core:diamond", "mcl_core:diamond"}, + {"mcl_core:diamond", "mcl_core:diamond", "mcl_core:diamond"}, + {"mcl_core:diamond", "mcl_core:diamond", "mcl_core:diamond"}, } }) minetest.register_craft({ - output = 'mcl_core:diamond 9', + output = "mcl_core:diamond 9", recipe = { - {'mcl_core:diamondblock'}, + {"mcl_core:diamondblock"}, } }) @@ -364,7 +347,7 @@ minetest.register_craft({ output = "mcl_core:apple_gold", recipe = { {"mcl_core:gold_ingot", "mcl_core:gold_ingot", "mcl_core:gold_ingot"}, - {"mcl_core:gold_ingot", 'mcl_core:apple', "mcl_core:gold_ingot"}, + {"mcl_core:gold_ingot", "mcl_core:apple", "mcl_core:gold_ingot"}, {"mcl_core:gold_ingot", "mcl_core:gold_ingot", "mcl_core:gold_ingot"}, } }) @@ -385,17 +368,17 @@ minetest.register_craft({ }) minetest.register_craft({ - output = 'mcl_core:snowblock', + output = "mcl_core:snowblock", recipe = { - {'mcl_throwing:snowball', 'mcl_throwing:snowball'}, - {'mcl_throwing:snowball', 'mcl_throwing:snowball'}, + {"mcl_throwing:snowball", "mcl_throwing:snowball"}, + {"mcl_throwing:snowball", "mcl_throwing:snowball"}, } }) minetest.register_craft({ - output = 'mcl_core:snow 6', + output = "mcl_core:snow 6", recipe = { - {'mcl_core:snowblock', 'mcl_core:snowblock', 'mcl_core:snowblock'}, + {"mcl_core:snowblock", "mcl_core:snowblock", "mcl_core:snowblock"}, } }) diff --git a/mods/ITEMS/mcl_core/craftitems.lua b/mods/ITEMS/mcl_core/craftitems.lua index 7cffcb785..85a078766 100644 --- a/mods/ITEMS/mcl_core/craftitems.lua +++ b/mods/ITEMS/mcl_core/craftitems.lua @@ -1,6 +1,6 @@ -- mods/default/craftitems.lua -local S = minetest.get_translator("mcl_core") +local S = minetest.get_translator(minetest.get_current_modname()) -- -- Crafting items @@ -13,6 +13,7 @@ minetest.register_craftitem("mcl_core:stick", { inventory_image = "default_stick.png", stack_max = 64, groups = { craftitem=1, stick=1 }, + _mcl_toollike_wield = true, }) minetest.register_craftitem("mcl_core:paper", { @@ -27,7 +28,6 @@ minetest.register_craftitem("mcl_core:coal_lump", { description = S("Coal"), _doc_items_longdesc = S("“Coal” refers to coal lumps obtained by digging coal ore which can be found underground. Coal is your standard furnace fuel, but it can also be used to make torches, coal blocks and a few other things."), _doc_items_hidden = false, - groups = { coal=1 }, inventory_image = "default_coal_lump.png", stack_max = 64, groups = { craftitem=1, coal=1 }, @@ -37,7 +37,6 @@ minetest.register_craftitem("mcl_core:charcoal_lump", { description = S("Charcoal"), _doc_items_longdesc = S("Charcoal is an alternative furnace fuel created by cooking wood in a furnace. It has the same burning time as coal and also shares many of its crafting recipes, but it can not be used to create coal blocks."), _doc_items_hidden = false, - groups = { coal=1 }, inventory_image = "mcl_core_charcoal.png", stack_max = 64, groups = { craftitem=1, coal=1 }, @@ -94,7 +93,7 @@ minetest.register_craftitem("mcl_core:gold_ingot", { minetest.register_craftitem("mcl_core:emerald", { description = S("Emerald"), - _doc_items_longdesc = S("Emeralds are not very useful on their own, but they can exchanged for gold ingots by crafting."), + _doc_items_longdesc = S("Emeralds are used in villager trades as currency."), inventory_image = "mcl_core_emerald.png", stack_max = 64, groups = { craftitem=1 }, diff --git a/mods/ITEMS/mcl_core/depends.txt b/mods/ITEMS/mcl_core/depends.txt deleted file mode 100644 index fb9861814..000000000 --- a/mods/ITEMS/mcl_core/depends.txt +++ /dev/null @@ -1,8 +0,0 @@ -mcl_init -mcl_sounds -mcl_particles -mcl_util -mcl_worlds -doc_items -doc? -mcl_enchanting diff --git a/mods/ITEMS/mcl_core/description.txt b/mods/ITEMS/mcl_core/description.txt deleted file mode 100644 index 96229f774..000000000 --- a/mods/ITEMS/mcl_core/description.txt +++ /dev/null @@ -1 +0,0 @@ -Core items of MineClone 2: Basic biome blocks (dirt, sand, stones, etc.), derived items, glass, sugar cane, cactus, barrier, mining tools, hand, craftitems, and misc. items which don't really fit anywhere else. diff --git a/mods/ITEMS/mcl_core/functions.lua b/mods/ITEMS/mcl_core/functions.lua index 3d47336f3..2ef73af72 100644 --- a/mods/ITEMS/mcl_core/functions.lua +++ b/mods/ITEMS/mcl_core/functions.lua @@ -2,8 +2,13 @@ -- Lava vs water interactions -- +local modpath = minetest.get_modpath(minetest.get_current_modname()) + local mg_name = minetest.get_mapgen_setting("mg_name") +local math = math +local vector = vector + local OAK_TREE_ID = 1 local DARK_OAK_TREE_ID = 2 local SPRUCE_TREE_ID = 3 @@ -23,8 +28,8 @@ minetest.register_abm({ local lavatype = minetest.registered_nodes[node.name].liquidtype for w=1, #water do - local waternode = minetest.get_node(water[w]) - local watertype = minetest.registered_nodes[waternode.name].liquidtype + --local waternode = minetest.get_node(water[w]) + --local watertype = minetest.registered_nodes[waternode.name].liquidtype -- Lava on top of water: Water turns into stone if water[w].y < pos.y and water[w].x == pos.x and water[w].z == pos.z then minetest.set_node(water[w], {name="mcl_core:stone"}) @@ -53,7 +58,7 @@ minetest.register_abm({ -- -- Functions -mcl_core.grow_cactus = function(pos, node) +function mcl_core.grow_cactus(pos, node) pos.y = pos.y-1 local name = minetest.get_node(pos).name if minetest.get_item_group(name, "sand") ~= 0 then @@ -71,7 +76,7 @@ mcl_core.grow_cactus = function(pos, node) end end -mcl_core.grow_reeds = function(pos, node) +function mcl_core.grow_reeds(pos, node) pos.y = pos.y-1 local name = minetest.get_node(pos).name if minetest.get_item_group(name, "soil_sugarcane") ~= 0 then @@ -114,8 +119,8 @@ local function drop_attached_node(p) end -- Helper function for node actions for liquid flow -local liquid_flow_action = function(pos, group, action) - local check_detach = function(pos, xp, yp, zp) +local function liquid_flow_action(pos, group, action) + local function check_detach(pos, xp, yp, zp) local p = {x=pos.x+xp, y=pos.y+yp, z=pos.z+zp} local n = minetest.get_node_or_nil(p) if not n then @@ -174,11 +179,12 @@ minetest.register_abm({ liquid_flow_action(pos, "lava", function(pos) minetest.remove_node(pos) minetest.sound_play("builtin_item_lava", {pos = pos, gain = 0.25, max_hear_distance = 16}, true) - core.check_for_falling(pos) + minetest.check_for_falling(pos) end) end, }) +-- Cactus mechanisms minetest.register_abm({ label = "Cactus growth", nodenames = {"mcl_core:cactus"}, @@ -190,6 +196,35 @@ minetest.register_abm({ end, }) +minetest.register_abm({ + label = "Cactus mechanisms", + nodenames = {"mcl_core:cactus"}, + 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 + local entity = object:get_luaentity() + if entity and entity.name == "__builtin:item" then + object:remove() + end + end + local posses = { { 1, 0 }, { -1, 0 }, { 0, 1 }, { 0, -1 } } + for _, p in pairs(posses) do + if minetest.registered_nodes[minetest.get_node(vector.new(pos.x + p[1], pos.y, pos.z + p[2])).name].walkable then + local posy = pos.y + while minetest.get_node(vector.new(pos.x, posy, pos.z)).name == "mcl_core:cactus" do + local pos = vector.new(pos.x, posy, pos.z) + minetest.remove_node(pos) + minetest.add_item(vector.offset(pos, math.random(-0.5, 0.5), 0, math.random(-0.5, 0.5)), "mcl_core:cactus") + posy = posy + 1 + end + break + end + end + end, +}) + + minetest.register_abm({ label = "Sugar canes growth", nodenames = {"mcl_core:reeds"}, @@ -231,7 +266,7 @@ end -- Check if a node stops a tree from growing. Torches, plants, wood, tree, -- leaves and dirt does not affect tree growth. local function node_stops_growth(node) - if node.name == 'air' then + if node.name == "air" then return false end @@ -320,13 +355,12 @@ end -- oak tree. function mcl_core.generate_tree(pos, tree_type, options) pos.y = pos.y-1 - local nodename = minetest.get_node(pos).name + --local nodename = minetest.get_node(pos).name pos.y = pos.y+1 if not minetest.get_node_light(pos) then return end - local node local two_by_two = options and options.two_by_two local balloon = options and options.balloon @@ -374,7 +408,7 @@ end function mcl_core.generate_v6_oak_tree(pos) local trunk = "mcl_core:tree" local leaves = "mcl_core:leaves" - local node = {name = ""} + local node for dy=1,4 do pos.y = pos.y+dy if minetest.get_node(pos).name ~= "air" then @@ -393,10 +427,10 @@ function mcl_core.generate_v6_oak_tree(pos) node = {name = leaves} pos.y = pos.y+3 - local rarity = 0 + --[[local rarity = 0 if math.random(0, 10) == 3 then rarity = 1 - end + end]] for dx=-2,2 do for dz=-2,2 do for dy=0,3 do @@ -442,12 +476,12 @@ function mcl_core.generate_balloon_oak_tree(pos) local s = math.random(1, 12) if s == 1 then -- Small balloon oak - path = minetest.get_modpath("mcl_core") .. "/schematics/mcl_core_oak_balloon.mts" + path = modpath .. "/schematics/mcl_core_oak_balloon.mts" offset = { x = -2, y = -1, z = -2 } else -- Large balloon oak local t = math.random(1, 4) - path = minetest.get_modpath("mcl_core") .. "/schematics/mcl_core_oak_large_"..t..".mts" + path = modpath .. "/schematics/mcl_core_oak_large_"..t..".mts" if t == 1 or t == 3 then offset = { x = -3, y = -1, z = -3 } elseif t == 2 or t == 4 then @@ -458,16 +492,16 @@ function mcl_core.generate_balloon_oak_tree(pos) end -- Oak -function mcl_core.generate_oak_tree(pos) - local path = minetest.get_modpath("mcl_core") .. "/schematics/mcl_core_oak_classic.mts" - local offset = { x = -2, y = -1, z = -2 } +local path_oak_tree = modpath.."/schematics/mcl_core_oak_classic.mts" - minetest.place_schematic(vector.add(pos, offset), path, "random", nil, false) +function mcl_core.generate_oak_tree(pos) + local offset = { x = -2, y = -1, z = -2 } + minetest.place_schematic(vector.add(pos, offset), path_oak_tree, "random", nil, false) end -- Birch function mcl_core.generate_birch_tree(pos) - local path = minetest.get_modpath("mcl_core") .. + local path = modpath .. "/schematics/mcl_core_birch.mts" minetest.place_schematic({x = pos.x - 2, y = pos.y - 1, z = pos.z - 2}, path, "random", nil, false) end @@ -579,26 +613,26 @@ function mcl_core.generate_v6_spruce_tree(pos) vm:write_to_map() end -mcl_core.generate_spruce_tree = function(pos) +function mcl_core.generate_spruce_tree(pos) local r = math.random(1, 3) - local path = minetest.get_modpath("mcl_core") .. "/schematics/mcl_core_spruce_"..r..".mts" + local path = modpath .. "/schematics/mcl_core_spruce_"..r..".mts" minetest.place_schematic({ x = pos.x - 3, y = pos.y - 1, z = pos.z - 3 }, path, "0", nil, false) end -mcl_core.generate_huge_spruce_tree = function(pos) +function mcl_core.generate_huge_spruce_tree(pos) local r1 = math.random(1, 2) local r2 = math.random(1, 4) local path local offset = { x = -4, y = -1, z = -5 } if r1 <= 2 then -- Mega Spruce Taiga (full canopy) - path = minetest.get_modpath("mcl_core") .. "/schematics/mcl_core_spruce_huge_"..r2..".mts" + path = modpath.."/schematics/mcl_core_spruce_huge_"..r2..".mts" else -- Mega Taiga (leaves only at top) if r2 == 1 or r2 == 3 then offset = { x = -3, y = -1, z = -4} end - path = minetest.get_modpath("mcl_core") .. "/schematics/mcl_core_spruce_huge_up_"..r2..".mts" + path = modpath.."/schematics/mcl_core_spruce_huge_up_"..r2..".mts" end minetest.place_schematic(vector.add(pos, offset), path, "0", nil, false) end @@ -616,15 +650,14 @@ function mcl_core.generate_acacia_tree(pos) elseif r == 1 or r == 5 then offset = { x = -5, y = -1, z = -5 } end - local path = minetest.get_modpath("mcl_core") .. "/schematics/mcl_core_acacia_"..r..".mts" + local path = modpath.."/schematics/mcl_core_acacia_"..r..".mts" minetest.place_schematic(vector.add(pos, offset), path, "random", nil, false) end -- Generate dark oak tree with 2×2 trunk. -- With pos being the lower X and the higher Z value of the trunk function mcl_core.generate_dark_oak_tree(pos) - local path = minetest.get_modpath("mcl_core") .. - "/schematics/mcl_core_dark_oak.mts" + local path = modpath.."/schematics/mcl_core_dark_oak.mts" minetest.place_schematic({x = pos.x - 3, y = pos.y - 1, z = pos.z - 4}, path, "random", nil, false) end @@ -724,8 +757,7 @@ function mcl_core.generate_v6_jungle_tree(pos) end function mcl_core.generate_jungle_tree(pos) - local path = minetest.get_modpath("mcl_core") .. - "/schematics/mcl_core_jungle_tree.mts" + local path = modpath.."/schematics/mcl_core_jungle_tree.mts" minetest.place_schematic({x = pos.x - 2, y = pos.y - 1, z = pos.z - 2}, path, "random", nil, false) end @@ -734,8 +766,7 @@ end function mcl_core.generate_huge_jungle_tree(pos) -- 2 variants local r = math.random(1, 2) - local path = minetest.get_modpath("mcl_core") .. - "/schematics/mcl_core_jungle_tree_huge_"..r..".mts" + local path = modpath.."/schematics/mcl_core_jungle_tree_huge_"..r..".mts" minetest.place_schematic({x = pos.x - 6, y = pos.y - 1, z = pos.z - 7}, path, "random", nil, false) end @@ -771,7 +802,6 @@ minetest.register_abm({ if pos == nil then return end - local can_change = false local above = {x=pos.x, y=pos.y+1, z=pos.z} local abovenode = minetest.get_node(above) if minetest.get_item_group(abovenode.name, "liquid") ~= 0 or minetest.get_item_group(abovenode.name, "opaque") == 1 then @@ -897,7 +927,7 @@ minetest.register_lbm({ -------------------------- local treelight = 9 -local sapling_grow_action = function(tree_id, soil_needed, one_by_one, two_by_two, sapling) +local function sapling_grow_action(tree_id, soil_needed, one_by_one, two_by_two, sapling) return function(pos) local meta = minetest.get_meta(pos) if meta:get("grown") then return end @@ -939,7 +969,7 @@ local sapling_grow_action = function(tree_id, soil_needed, one_by_one, two_by_tw -- This sapling grows in a special way when there are 4 saplings in a 2×2 pattern if two_by_two then -- Check 8 surrounding saplings and try to find a 2×2 pattern - local is_sapling = function(pos, sapling) + local function is_sapling(pos, sapling) return minetest.get_node(pos).name == sapling end local p2 = {x=pos.x+1, y=pos.y, z=pos.z} @@ -1005,7 +1035,7 @@ local sapling_grow_action = function(tree_id, soil_needed, one_by_one, two_by_tw if one_by_one and check_tree_growth(pos, tree_id) then -- Single sapling minetest.set_node(pos, {name="air"}) - local r = math.random(1, 12) + --local r = math.random(1, 12) mcl_core.generate_tree(pos, tree_id) return end @@ -1026,7 +1056,7 @@ local grow_birch = sapling_grow_action(BIRCH_TREE_ID, 1, true, false) -- pos: Position -- node: Node table of the node at this position, from minetest.get_node -- Returns true on success and false on failure -mcl_core.grow_sapling = function(pos, node) +function mcl_core.grow_sapling(pos, node) local grow if node.name == "mcl_core:sapling" then grow = grow_oak @@ -1226,12 +1256,12 @@ minetest.register_abm({ if not mcl_core.check_vines_supported(pos, node) then minetest.remove_node(pos) vinedecay_particles(pos, node) - core.check_for_falling(pos) + minetest.check_for_falling(pos) return end -- Add vines below pos (if empty) - local spread_down = function(origin, target, dir, node) + local function spread_down(origin, target, dir, node) if math.random(1, 2) == 1 then if minetest.get_node(target).name == "air" then minetest.add_node(target, {name = "mcl_core:vine", param2 = node.param2}) @@ -1240,7 +1270,7 @@ minetest.register_abm({ end -- Add vines above pos if it is backed up - local spread_up = function(origin, target, dir, node) + local function spread_up(origin, target, dir, node) local vines_in_area = minetest.find_nodes_in_area({x=origin.x-4, y=origin.y-1, z=origin.z-4}, {x=origin.x+4, y=origin.y+1, z=origin.z+4}, "mcl_core:vine") -- Less then 4 vines blocks around the ticked vines block (remember the ticked block is counted by above function as well) if #vines_in_area < 5 then @@ -1259,7 +1289,7 @@ minetest.register_abm({ end end - local spread_horizontal = function(origin, target, dir, node) + local function spread_horizontal(origin, target, dir, node) local vines_in_area = minetest.find_nodes_in_area({x=origin.x-4, y=origin.y-1, z=origin.z-4}, {x=origin.x+4, y=origin.y+1, z=origin.z+4}, "mcl_core:vine") -- Less then 4 vines blocks around the ticked vines block (remember the ticked block is counted by above function as well) if #vines_in_area < 5 then @@ -1296,7 +1326,7 @@ minetest.register_abm({ }) -- Returns true of the node supports vines -mcl_core.supports_vines = function(nodename) +function mcl_core.supports_vines(nodename) local def = minetest.registered_nodes[nodename] -- Rules: 1) walkable 2) full cube return def.walkable and @@ -1321,9 +1351,8 @@ mcl_core.leafdecay_enable_cache = true mcl_core.leafdecay_trunk_find_allow_accumulator = 0 minetest.register_globalstep(function(dtime) - local finds_per_second = 5000 - mcl_core.leafdecay_trunk_find_allow_accumulator = - math.floor(dtime * finds_per_second) + --local finds_per_second = 5000 + mcl_core.leafdecay_trunk_find_allow_accumulator = math.floor(dtime * 5000) end) minetest.register_abm({ @@ -1378,7 +1407,7 @@ minetest.register_abm({ if not do_preserve then -- Drop stuff other than the node itself local itemstacks = minetest.get_node_drops(n0.name) - for _, itemname in ipairs(itemstacks) do + for _, itemname in pairs(itemstacks) do local p_drop = { x = p0.x - 0.5 + math.random(), y = p0.y - 0.5 + math.random(), @@ -1389,7 +1418,7 @@ minetest.register_abm({ -- Remove node minetest.remove_node(p0) leafdecay_particles(p0, n0) - core.check_for_falling(p0) + minetest.check_for_falling(p0) -- Kill depending vines immediately to skip the vines decay delay local surround = { @@ -1402,11 +1431,11 @@ minetest.register_abm({ for s=1, #surround do local spos = vector.add(p0, surround[s]) local maybe_vine = minetest.get_node(spos) - local surround_inverse = vector.multiply(surround[s], -1) + --local surround_inverse = vector.multiply(surround[s], -1) if maybe_vine.name == "mcl_core:vine" and (not mcl_core.check_vines_supported(spos, maybe_vine)) then minetest.remove_node(spos) vinedecay_particles(spos, maybe_vine) - core.check_for_falling(spos) + minetest.check_for_falling(spos) end end end @@ -1430,7 +1459,7 @@ minetest.register_abm({ minetest.remove_node(p0) vinedecay_particles(p0, node) -- Just in case a falling node happens to float above vines - core.check_for_falling(p0) + minetest.check_for_falling(p0) end end }) @@ -1516,7 +1545,7 @@ end -- -- The snowable nodes also MUST have _mcl_snowed defined to contain the name -- of the snowed node. -mcl_core.register_snowed_node = function(itemstring_snowed, itemstring_clear, tiles, sounds, clear_colorization, desc) +function mcl_core.register_snowed_node(itemstring_snowed, itemstring_clear, tiles, sounds, clear_colorization, desc) local def = table.copy(minetest.registered_nodes[itemstring_clear]) local create_doc_alias if def.description then @@ -1579,7 +1608,7 @@ end -- Reverts a snowed dirtlike node at pos to its original snow-less form. -- This function assumes there is no snow cover node above. This function -- MUST NOT be called if there is a snow cover node above pos. -mcl_core.clear_snow_dirt = function(pos, node) +function mcl_core.clear_snow_dirt(pos, node) local def = minetest.registered_nodes[node.name] if def._mcl_snowless then minetest.swap_node(pos, {name = def._mcl_snowless, param2=node.param2}) @@ -1591,7 +1620,7 @@ end -- on_construct -- Makes constructed snowable node snowed if placed below a snow cover node. -mcl_core.on_snowable_construct = function(pos) +function mcl_core.on_snowable_construct(pos) -- Myself local node = minetest.get_node(pos) @@ -1619,7 +1648,7 @@ end -- on_construct -- Makes snowable node below snowed. -mcl_core.on_snow_construct = function(pos) +function mcl_core.on_snow_construct(pos) local npos = {x=pos.x, y=pos.y-1, z=pos.z} local node = minetest.get_node(npos) local def = minetest.registered_nodes[node.name] @@ -1629,7 +1658,7 @@ mcl_core.on_snow_construct = function(pos) end -- after_destruct -- Clears snowed dirtlike node below. -mcl_core.after_snow_destruct = function(pos) +function mcl_core.after_snow_destruct(pos) local nn = minetest.get_node(pos).name -- No-op if snow was replaced with snow if minetest.get_item_group(nn, "snow_cover") == 1 then diff --git a/mods/ITEMS/mcl_core/init.lua b/mods/ITEMS/mcl_core/init.lua index 520f158bd..c345d057b 100644 --- a/mods/ITEMS/mcl_core/init.lua +++ b/mods/ITEMS/mcl_core/init.lua @@ -3,8 +3,21 @@ mcl_core = {} -- Repair percentage for toolrepair mcl_core.repair = 0.05 +mcl_autogroup.register_diggroup("handy") +mcl_autogroup.register_diggroup("pickaxey", { + levels = { "wood", "gold", "stone", "iron", "diamond" } +}) +mcl_autogroup.register_diggroup("axey") +mcl_autogroup.register_diggroup("shovely") +mcl_autogroup.register_diggroup("shearsy") +mcl_autogroup.register_diggroup("shearsy_wool") +mcl_autogroup.register_diggroup("shearsy_cobweb") +mcl_autogroup.register_diggroup("swordy") +mcl_autogroup.register_diggroup("swordy_cobweb") +mcl_autogroup.register_diggroup("hoey") + -- Load files -local modpath = minetest.get_modpath("mcl_core") +local modpath = minetest.get_modpath(minetest.get_current_modname()) dofile(modpath.."/functions.lua") dofile(modpath.."/nodes_base.lua") -- Simple solid cubic nodes with simple definitions dofile(modpath.."/nodes_liquid.lua") -- Liquids diff --git a/mods/ITEMS/mcl_core/locale/mcl_core.de.tr b/mods/ITEMS/mcl_core/locale/mcl_core.de.tr index 57ef530a0..b064cebbe 100644 --- a/mods/ITEMS/mcl_core/locale/mcl_core.de.tr +++ b/mods/ITEMS/mcl_core/locale/mcl_core.de.tr @@ -95,7 +95,7 @@ Dirt acts as a soil for a few plants. When in light, this block may grow a grass Emerald=Smaragd Emerald Ore=Smaragderz Emerald ore is the ore of emeralds. It is very rare and can be found alone, not in clusters.=Smaragderz ist das Erz von Smaragden. Es ist sehr selten und kann nur einzeln gefunden werden, nicht in Ansammlungen. -Emeralds are not very useful on their own, but they can exchanged for gold ingots by crafting.=Smaragde sind nicht besonders nützlich, aber man kann sie in der Fertigung durch Goldbarren eintauschen. +Emeralds are used in villager trades as currency.= Flint=Feuerstein Flint is a raw material.=Feuerstein ist ein Rohstoff. Flowing Lava=Fließende Lava @@ -202,20 +202,45 @@ Stained glass is a decorative and mostly transparent block which comes in variou Stick=Stock Sticks are a very versatile crafting material; used in countless crafting recipes.=Stöcke sind ein vielseitiges Material, sie werden in zahllosen Fertigungsrezepten gebraucht. Stone=Stein +Stripped Acacia Log=Entrindeter Akazienstamm +Stripped Acacia Wood=Entrindetes Akazienholz +Stripped Birch Log=Entrindeter Birkenstamm +Stripped Birch Wood=Entrindetes Birkenholz +Stripped Dark Oak Log=Entrindeter Schwarzeichenstamm +Stripped Dark Oak Wood=Entrindetes Schwarzeichenholz +Stripped Jungle Log=Entrindeter Dschungelbaumstamm +Stripped Jungle Wood=Entrindetes Dschungelholz +Stripped Oak Log=Entrindeter Eichenstamm +Stripped Oak Wood=Entrindetes Eichenholz +Stripped Spruce Log=Entrindeter Fichtenstamm +Stripped Spruce Wood=Entrindetes Fichtenholz Stone Bricks=Steinziegel Sugar=Zucker Sugar Canes=Zuckerrohr Sugar canes are a plant which has some uses in crafting. Sugar canes will slowly grow up to 3 blocks when they are next to water and are placed on a grass block, dirt, sand, red sand, podzol or coarse dirt. When a sugar cane is broken, all sugar canes connected above will break as well.=Zuckerrohr ist eine Pflanze, die in der Herstellung gebraucht wird. Zuckerrohr wird in der Nähe von Wasser bis zu 3 zusätzliche Blöcke wachsen lassen, wenn sie sich neben Wasser befinden und auf einem Grasblock, auf Erde, Sand, roten Sand, Podsol oder grobe Erde platziert wurden. Wird ein Zuckerrohr abgebrochen, werden alle verbundenen Zuckerrohrblöcke ebenfalls abbrechen. Sugar canes can only be placed top of other sugar canes and on top of blocks on which they would grow.=Zuckerrohr kann nur auf Zuckerrohr platziert werden und auf Blöcken, auf denen Zuckerrohr wachsen würde. Sugar comes from sugar canes and is used to make sweet foods.=Zucker kommt von Zuckerrohr und wird benutzt, um süße Lebensmittel zu machen. +The stripped trunk of an acacia tree.=Der entrindete Stamm einer Akazie. +The stripped trunk of a birch tree.=Der entrindete Stamm einer Birke. +The stripped trunk of a dark oak tree.=Der entrindete Stamm einer Schwarzeiche. +The stripped trunk of a jungle tree.=Der entrindete Stamm eines Dschungelbaums. +The stripped trunk of an oak tree.=Der entrindete Stamm einer Eiche. +The stripped trunk of a spruce tree.=Der entrindete Stamm einer Fichte. The trunk of a birch tree.=Der Baumstamm einer Birke. The trunk of a dark oak tree.=Der Baumstamm einer Schwarzeiche. The trunk of a jungle tree.=Der Baumstamm eines Dschungelbaums. The trunk of a spruce tree.=Der Baumstamm einer Fichte. The trunk of an acacia.=Der Baumstamm einer Akazie. The trunk of an oak tree.=Der Baumstamm einer Eiche. -This block consists of a couple of loose stones and can't support itself.=Diser Block besteht aus ein paar losen Steinchen und kann sich nicht selbst tragen. +The stripped wood of an acacia tree.=Das entrindete Holz einer Akazie. +The stripped wood of a birch tree.=Das entrindete Holz einer Birke. +The stripped wood of a dark oak tree.=Das entrindete Holz einer Schwarzeiche. +The stripped wood of a jungle tree.=Das entrindete Holz eines Dschungelbaums. +The stripped wood of an oak tree.=Das entrindete Holz einer Eiche. +The stripped wood of a spruce tree.=Das entrindete Holz einer Fichte. +This block consists of a couple of loose stones and can't support itself.=Dieser Block besteht aus ein paar losen Steinchen und kann sich nicht selbst tragen. This is a decorative block surrounded by the bark of a tree trunk.=Dies ist ein dekorativer Block, der von der Rinde eines Baumstamms umgeben ist. +This is a decorative block.=Dies ist ein dekorativer Block. This is a full block of snow. Snow of this thickness is usually found in areas of extreme cold.=Ein ganzer Block aus Schnee. Schnee von dieser Dicke wird üblicherweise in Gebieten extremer Kälte gefunden. This is a piece of cactus commonly found in dry areas, especially deserts. Over time, cacti will grow up to 3 blocks high on sand or red sand. A cactus hurts living beings touching it with a damage of 1 HP every half second. When a cactus block is broken, all cactus blocks connected above it will break as well.=Dies ist ein Teil eines Kaktus, der für gewöhnlich in trockenen Gebieten wächst, vorallem Wüsten. Im Laufe der Zeit werden Kakteen auf bis zu 3 Blöcke hoch auf Sand oder rotem Sand wachsen. Ein Kaktus verletzt Lebewesen, die ihn berühren, er richtet jede halbe Sekunden 1 Schaden an. Wenn ein Kaktusblock bricht, werden alle Kaktusblöcke darüber auch abbrechen. This stone contains pure gold, a rare metal.=Dieser Stein enthält pures Gold, ein seltenes Metall. @@ -255,3 +280,4 @@ Slows down movement=Verlangsamt die Fortbewegung 2×2 saplings @= large tree=2×2 Setzlinge @= großer Baum Grows on sand or dirt next to water=Wächst auf Sand oder Erde neben Wasser Stackable=Stapelbar +Needs soil and water to grow=Braucht Nährboden und Wasser zum wachsen diff --git a/mods/ITEMS/mcl_core/locale/mcl_core.es.tr b/mods/ITEMS/mcl_core/locale/mcl_core.es.tr index 1e1029c0f..1937babd3 100644 --- a/mods/ITEMS/mcl_core/locale/mcl_core.es.tr +++ b/mods/ITEMS/mcl_core/locale/mcl_core.es.tr @@ -95,7 +95,7 @@ Dirt acts as a soil for a few plants. When in light, this block may grow a grass Emerald=Esmeralda Emerald Ore=Mena de esmeralda Emerald ore is the ore of emeralds. It is very rare and can be found alone, not in clusters.=El mineral esmeralda es el mineral de las esmeraldas. Es muy raro y se puede encontrar solo, no en grupos. -Emeralds are not very useful on their own, but they can exchanged for gold ingots by crafting.=Las esmeraldas no son muy útiles por sí mismas, pero pueden cambiarse por lingotes de oro haciendo artesanías. +Emeralds are used in villager trades as currency.= Flint=Pedernal Flint is a raw material.=El pedernal es una materia prima. Flowing Lava=Lava que fluye diff --git a/mods/ITEMS/mcl_core/locale/mcl_core.fr.tr b/mods/ITEMS/mcl_core/locale/mcl_core.fr.tr index 4d97fe223..64aadd6db 100644 --- a/mods/ITEMS/mcl_core/locale/mcl_core.fr.tr +++ b/mods/ITEMS/mcl_core/locale/mcl_core.fr.tr @@ -84,7 +84,7 @@ Dark oak leaves are grown from dark oak trees.=Les feuilles de chêne noir sont Dark oak saplings can grow into dark oaks, but only in groups. A lonely dark oak sapling won't grow. A group of four dark oak saplings grows into a dark oak after some time when they are placed on soil (such as dirt) in a 2×2 square and exposed to light.=Les pousses de chêne noir peuvent devenir des chênes noirs, mais seulement en groupes. Une pousse de chêne noir solitaire ne poussera pas. Un groupe de quatre pousses de chêne noir se transforme en chêne noir après un certain temps lorsqu'ils sont placés sur le sol (comme la terre) dans un carré 2×2 et exposés à la lumière. Dead Bush=Arbuste mort Dead bushes are unremarkable plants often found in dry areas. They can be harvested for sticks.=Les buissons morts sont des plantes inhabituelles que l'on trouve souvent dans les zones sèches. Ils peuvent être récoltés avec des bâtons. -Diamond=Diamamnt +Diamond=Diamant Diamond Ore=Minerai de Diamant Diamond ore is rare and can be found in clusters near the bottom of the world.=Le minerai de diamant est rare et peut être trouvé en filons près du fond du monde. Diamonds are precious minerals and useful to create the highest tier of armor and tools.=Les diamants sont des minéraux précieux et utiles pour créer le plus haut niveau d'armure et d'outils. @@ -95,7 +95,7 @@ Dirt acts as a soil for a few plants. When in light, this block may grow a grass Emerald=Emeraude Emerald Ore=Minerai d'Emeraude Emerald ore is the ore of emeralds. It is very rare and can be found alone, not in clusters.=Le minerai d'émeraude produit des émeraudes. Il est très rare et peut être trouvé seul, pas en filons. -Emeralds are not very useful on their own, but they can exchanged for gold ingots by crafting.=Les émeraudes ne sont pas très utiles seules, mais elles peuvent être échangées contre des lingots d'or. +Emeralds are used in villager trades as currency.=Les émeraudes sont utilisées pour faire des échanges avec les villageois. Flint=Silex Flint is a raw material.=Le silex est une matière première. Flowing Lava=Lave qui coule @@ -109,7 +109,7 @@ Gold Ore=Minerai d'Or Gold nuggets are very small pieces of molten gold; the main purpose is to create gold ingots.=Les pépites d'or sont de très petites pièces d'or en fusion; le but principal est de créer des lingots d'or. Golden Apple=Pomme Dorée Golden apples are precious food items which can be eaten.=Les pommes dorrées sont des aliments précieux qui peuvent être consommés. -Granite=Granite +Granite=Granit Grass Block=Bloc d'Herbe Grass Path=Chemin d'Herbe Grass paths are a decorative variant of grass blocks. Their top has a different color and they are a bit lower than grass blocks, making them useful to build footpaths. Grass paths can be created with a shovel. A grass path turns into dirt when it is below a solid block.=Les chemins d'herbe sont une variante décorative des blocs d'herbe. Leur sommet a une couleur différente et ils sont un peu plus bas que les blocs d'herbe, ce qui les rend utiles pour construire des sentiers. Les chemins d'herbe peuvent être créés avec une pelle. Un chemin d'herbe se transforme en terre quand il est en dessous d'un bloc solide. @@ -165,7 +165,7 @@ Podzol=Podzol Podzol is a type of dirt found in taiga forests. Only a few plants are able to survive on it.=Le podzol est un type de terre trouvé dans les forêts de la taïga. Seules quelques plantes peuvent y survivre. Polished Andesite=Andrésite Polie Polished Diorite=Diorite Polie -Polished Granite=Granite Polie +Polished Granite=Granit Poli Polished Stone=Roche Polie Polished andesite is a decorative building block made from andesite.=L'andésite polie est un bloc de construction décoratif en andésite. Polished diorite is a decorative building block made from diorite.=La diorite polie est un bloc de construction décoratif en diorite. diff --git a/mods/ITEMS/mcl_core/locale/mcl_core.pl.tr b/mods/ITEMS/mcl_core/locale/mcl_core.pl.tr new file mode 100644 index 000000000..68dfbd3d0 --- /dev/null +++ b/mods/ITEMS/mcl_core/locale/mcl_core.pl.tr @@ -0,0 +1,277 @@ +# textdomain: mcl_core +@1 could not survive in lava.=@1 nie przeżyła w lawie. +@1 died in lava.=@1 umarła w lawie. +@1 melted in lava.=@1 stopiła się w lawie. +@1 took a bath in a hot lava tub.=@1 wzięła gorącą kąpiel w wannie z lawą. +A block of diamond is mostly a shiny decorative block but also useful as a compact storage of diamonds.=Blok diamentu jest głównie ładnym blokiem dekoracyjnym, ale jest użyteczny również do kompaktowego przechowywania diamentów. +A block of emerald is mostly a shiny decorative block but also useful as a compact storage of emeralds.=Blok szmaragdu jest głównie ładnym blokiem dekoracyjnym, ale jest użyteczny również do kompaktowego przechowywania szmaragdów. +A block of gold is mostly a shiny decorative block but also useful as a compact storage of gold ingots.=Blok złota jest głównie ładnym blokiem dekoracyjnym, ale jest użyteczny również do kompaktowego przechowywania sztabek złota. +A block of iron is mostly a decorative block but also useful as a compact storage of iron ingots.=Blok żelaza jest głównie ładnym blokiem dekoracyjnym, ale jest użyteczny również do kompaktowego przechowywania sztabek żelaza. +A cactus can only be placed on top of another cactus or any sand.=Kaktus może być postawiony tylko na innym kaktusie lub piasku. +A decorative and mostly transparent block.=Dekoracyjny i głównie przeźroczysty blok. +A grass block is dirt with a grass cover. Grass blocks are resourceful blocks which allow the growth of all sorts of plants. They can be turned into farmland with a hoe and turned into grass paths with a shovel. In light, the grass slowly spreads onto dirt nearby. Under an opaque block or a liquid, a grass block may turn back to dirt.=Blok trawy to blok ziemi z pokryciem z trawy. Bloki trawy są użytecznymi blokami pozwalającymi na wyrośnięcie różnych rodzajów roślin. Mogą zostać zamienione w pole uprawne motyką, lub w ścieżkę z trawy łopatą. Oświetlona trawa rozprzestrzenia się na pobliskie bloki. Pod nieprzezroczystym blokiem lub płynem blok trawy może zamienić się z powrotem w blok ziemi. +A lapis lazuli block is mostly a decorative block but also useful as a compact storage of lapis lazuli.=Blok lazurytu jest głównie ładnym blokiem dekoracyjnym, ale jest użyteczny również do kompaktowego przechowywania lazurytu. +A lava source sets fire to a couple of air blocks above when they're next to a flammable block.=Źródło lawy podpala bloki powietrza nad nią gdy są obok łatwopalnego bloku. +A piece of ladder which allows you to climb vertically. Ladders can only be placed on the side of solid blocks and not on glass, leaves, ice, slabs, glowstone, nor sea lanterns.=Kawałek drabiny, który pozwala ci wspinać się pionowo. Drabina może być postawiona na boku stałego bloku, lecz nie na szkle, liściach, lodzie, półbloku, jasnogłazie ani na latarni morskiej. +Acacia Bark=Akacjowa kora +Acacia Leaves=Akacjowe liście +Acacia Sapling=Akacjowa sadzonka +Acacia Wood=Akacjowe drewno +Acacia Wood Planks=Akacjowe deski +Acacia leaves are grown from acacia trees.=Akacjowe liście rosną na akacjach. +Andesite=Andezyt +Andesite is an igneous rock.=Andezyt jest skałą pochodzenia wulkanicznego. +Apple=Jabłko +Apples are food items which can be eaten.=Jabłka to przedmioty które można zjeść. +Barrier=Bariera +Barriers are invisble walkable blocks. They are used to create boundaries of adventure maps and the like. Monsters and animals won't appear on barriers, and fences do not connect to barriers. Other blocks can be built on barriers like on any other block.=Bariery to niewidzialne bloki po których można chodzić. Są użyteczne do tworzenia ograniczeń na mapach przygodowych i im podobnych. Potwory i zwierzęta nie pojawiają się na barierach, a płoty się z nimi nie łączą. Inne bloki mogą być na nich budowane podobnie jak na innych blokach. +Bedrock=Skała macierzysta +Bedrock is a very hard type of rock. It can not be broken, destroyed, collected or moved by normal means, unless in Creative Mode.=Skała macierzysta jest rodzajem bardzo twardej skały. Nie może być ona zniszczona, zebrana lub przesunięta normalnymi metodami, jeśli nie jesteś w trybie kreatywnym. +Birch Bark=Brzozowa kora +Birch Leaves=Brzozowe liście +Birch Sapling=Brzozowa sadzonka +Birch Wood=Brzozowe drewno +Birch Wood Planks=Brzozowe deski +Birch leaves are grown from birch trees.=Brzozowe liście rosną na brzozach. +Black Stained Glass=Czarne szkło +Block of Coal=Blok węgla +Block of Diamond=Blok diamentu +Block of Emerald=Blok szmaragdu +Block of Gold=Blok złota +Block of Iron=Blok żelaza +Blocks of coal are useful as a compact storage of coal and very useful as a furnace fuel. A block of coal is as efficient as 10 coal.=Bloki węgla są użyteczne do kompaktowego przechowywania diamentów i bardzo użyteczne jako paliwo do pieca. +Blue Stained Glass=Niebieskie szkło +Bone Block=Blok kości +Bone blocks are decorative blocks and a compact storage of bone meal.=Bloki kości są blokami dekoracyjnymi i są użyteczne do kompaktowego przechowywania mączki kostnej. +Bowl=Miska +Bowls are mainly used to hold tasty soups.=Miski są użyteczne do przechowywania smacznych zup. +Brick=Cegła +Brick Block=Blok cegły +Brick blocks are a good building material for building solid houses and can take quite a punch.=Bloki cegły są dobrymi materiałami na budowanie solidnych domów i trzeba się namęczyć by je zniszczyć. +Bricks are used to craft brick blocks.=Cegły są wykorzystywane do wytwarzania bloków cegieł. +Brown Stained Glass=Brązowe szkło +Cactus=Kaktus +Charcoal=Węgiel drzewny +Charcoal is an alternative furnace fuel created by cooking wood in a furnace. It has the same burning time as coal and also shares many of its crafting recipes, but it can not be used to create coal blocks.=Węgiel drzewny jest alternatywnym paliwem do pieca uzyskiwanym przez wypalanie drewna w piecu. Pali się tak samo długo jak węgiel oraz może być użyty jako zamiennik w wielu recepturach, jednak nie można z niego robić bloków węgla. +Chiseled Stone Bricks=Rzeźbione kamienne cegły +Chiseled Red Sandstone=Rzeźbiony czerwony piaskowiec +Chiseled Sandstone=Rzeźbiony piaskowiec +Chiseled red sandstone is a decorative building block.=Rzeźbiony czerwony piaskowiec jest dekoracyjnym blokiem budowlanym. +Chiseled sandstone is a decorative building block.=Rzeźbiony piaskowiec jest dekoracyjnym blokiem budowlanym. +Clay=Blok gliny +Clay Ball=Glina +Clay balls are a raw material, mainly used to create bricks in the furnace.=Glina jest surowym materiałem głównie wykorzystywanym do wypalania cegieł w piecu. +Clay is a versatile kind of earth commonly found at beaches underwater.=Bloki gliny są użytecznymi blokami ziemi często występującymi na plażach pod wodą. +Coal=Węgiel +Coal Ore=Ruda węgla +Coarse Dirt=Twarda ziemia +Coarse dirt acts as a soil for some plants and is similar to dirt, but it will never grow a cover.=Twarda ziemia jest podłożem dla niektórych roślin i jest podobna do ziemi, jednak nie rośnie na niej trawa. +Cobblestone=Brukowiec +Cobweb=Pajęczyna +Cobwebs can be walked through, but significantly slow you down.=Przez pajęczyny można przechodzić, jednak bardzo cię spowolnią. +Cracked Stone Bricks=Popękane kamienne cegły. +Cut Red Sandstone=Przycięty czerwony piaskowiec +Cut Sandstone=Przycięty piaskowiec +Cut red sandstone is a decorative building block.=Przycięty czerwony piaskowiec jest dekoracyjnym blokiem budowlanym. +Cut sandstone is a decorative building block.=Przycięty piaskowiec jest dekoracyjnym blokiem budowlanym. +Cyan Stained Glass=Błękitne szkło +Dark Oak Bark=Ciemno-dębowa kora +Dark Oak Leaves=Ciemno-dębowe liście +Dark Oak Sapling=Ciemno-dębowa sadzonka +Dark Oak Wood=Ciemno-dębowe drewno +Dark Oak Wood Planks=Ciemno-dębowe deski +Dark oak leaves are grown from dark oak trees.=Ciemno-dębowe liście rosną na ciemnych dębach. +Dark oak saplings can grow into dark oaks, but only in groups. A lonely dark oak sapling won't grow. A group of four dark oak saplings grows into a dark oak after some time when they are placed on soil (such as dirt) in a 2×2 square and exposed to light.=Ciemno-dębowe sadzonki mogą wyrosnąć w ciemny dąb, ale tylko w grupach. Samotna ciemno-dębowa sadzonka nie wyrośnie. Grupa czterech ciemno-dębowych sadzonek wyrośnie w ciemny dąb po jakimś czasie, gdy będą postawiona na glebie (np. ziemi) w kwadracie 2×2, która jest oświetlona. +Dead Bush=Uschnięty krzew +Dead bushes are unremarkable plants often found in dry areas. They can be harvested for sticks.=Uschnięte krzewy to niewyróżniające się rośliny często występujące w suchych obszarach. Mogą z nich być zebrane patyki. +Diamond=Diament +Diamond Ore=Ruda diamentu +Diamond ore is rare and can be found in clusters near the bottom of the world.=Ruda diamentu jest rzadko występującym blokiem, który można znaleźć w grupach przy dnie świata. +Diamonds are precious minerals and useful to create the highest tier of armor and tools.=Diamenty to cenne minerały wykorzystywane do wytwarzania najwyższej jakości zbroi i narzędzi. +Diorite=Dioryt. +Diorite is an igneous rock.=Dioryt jest skałą pochodzenia wulkanicznego. +Dirt=Ziemia +Dirt acts as a soil for a few plants. When in light, this block may grow a grass or mycelium cover if such blocks are nearby.=ziemia jest podłożem dla niektórych roślin. Gdy jest oświetlona może na niej wyrosnąć trawa bądź grzybnia, jeśli takie bloki są w pobliżu. +Emerald=Szmaragd +Emerald Ore=Ruda szmaragdu +Emerald ore is the ore of emeralds. It is very rare and can be found alone, not in clusters.=Ruda szmaragdu jest bardzo rzadka i występuje samotnie, nie w grupach. +Emeralds are used in villager trades as currency.= +Flint=Krzemień +Flint is a raw material.=Krzemień jest surowym materiałem. +Flowing Lava=Płynąca lawa +Flowing Water=Płynąca woda +Frosted Ice=Oszroniony lód +Frosted ice is a short-lived solid block. It melts into a water source within a few seconds.=Oszroniony lód jest blokiem o krótkim życiu. Topi się w źródło wody w kilka sekund. +Glass=Szkło +Gold Ingot=Sztabka złota +Gold Nugget=Bryłka złota +Gold Ore=Ruda złota +Gold nuggets are very small pieces of molten gold; the main purpose is to create gold ingots.=Bryłki złota są bardzo małymi kawałkami stopionego złota. Ich głównym zastosowaniem jest tworzenie sztabek złota. +Golden Apple=Złote jabłko +Golden apples are precious food items which can be eaten.=Złote jabłka są cennym jedzeniem, które można zjeść. +Granite=Granit +Grass Block=Blok trawy +Grass Path=Ścieżka trawy +Grass paths are a decorative variant of grass blocks. Their top has a different color and they are a bit lower than grass blocks, making them useful to build footpaths. Grass paths can be created with a shovel. A grass path turns into dirt when it is below a solid block.=Ścieżki trawy są dekoracyjną wersją bloków trawy. Ich góra ma inny kolor i są nieco niższe niż bloki trawy, przez co są użyteczne do wyznaczania ścieżek. Ścieżki trawy mogą zostać stworzone łopatą. Ścieżka trawy zamienia się w ziemię gdy jest pod stałym blokiem. +Gravel=Żwir +Green Stained Glass=Zielone szkło +Grey Stained Glass=Szare szkło +Ice=Lód +Ice is a solid block usually found in cold areas. It melts near block light sources at a light level of 12 or higher. When it melts or is broken while resting on top of another block, it will turn into a water source.=Lód jest stałym blokiem zwykle występującym w zimnych rejonach. Topi się w okolice źródeł światła przy poziomie oświetlenia 12 lub wyższym. Gdy się stopi bądź jest zniszczony na innym bloku zamienia się w źródło wody. +In the End dimension, starting a fire on this block will create an eternal fire.=W wymiarze Kresu rozpalenie ognia na tym bloku stworzy wieczny ogień. +Iron Ingot=Sztabka żelaza +Iron Nugget=Bryłka żelaza +Iron Ore=Ruda żelaza +Iron nuggets are very small pieces of molten iron; the main purpose is to create iron ingots.=Bryłki żelaza są bardzo małymi kawałkami stopionego żelaza. Ich głównym zastosowaniem jest tworzenie sztabek żelaza. +Jungle Bark=Tropikalna kora +Jungle Leaves=Tropikalne liście +Jungle Sapling=Tropikalna sadzonka +Jungle Wood=Tropikalne drewno +Jungle Wood Planks=Tropikalne deski +Jungle leaves are grown from jungle trees.=Tropikalne liście rosną na tropikalnych drzewach. +Ladder=Drabina +Lapis Lazuli Block=Blok lazurytu +Lapis Lazuli Ore=Ruda lazurytu +Lapis lazuli ore is the ore of lapis lazuli. It can be rarely found in clusters near the bottom of the world.=Ruda lazurytu jest rzadko występującym blokiem, który można znaleźć w grupach przy dnie świata. +Lava Source=Źródło lawy +Lava is hot and rather dangerous. Don't touch it, it will hurt you a lot and it is hard to get out.=Lawa jest gorąca i bardzo niebezpieczna. Nie dotykaj jej, jeśli nie chcesz ucierpieć. Trudno się z niej wydostać. +Light Blue Stained Glass=Jasnoniebieskie szkło +Light Grey Stained Glass=Jasnoszare szkło +Lime Stained Glass=Jasnozielone szkło +Lit Redstone Ore=Świecąca ruda czerwienitu +Magenta Stained Glass=Karmazynowe szkło +Molten gold. It is used to craft armor, tools, and whatnot.=Stopione złoto. Wykorzystywane do wytwarzania zbroi, narzędzi i innych. +Molten iron. It is used to craft armor, tools, and whatnot.=Stopione żelazo. Wykorzystywane do wytwarzania zbroi, narzędzi i innych. +Mossy Cobblestone=Zamszony bruk +Mossy Stone Bricks=Zamszone kamienne cegły +Mycelium=Grzybnia +Mycelium is a type of dirt and the ideal soil for mushrooms. Unlike other dirt-type blocks, it can not be turned into farmland with a hoe. In light, mycelium slowly spreads over nearby dirt. Under an opaque block or a liquid, it eventually turns back into dirt.=Grzybnia jest rodzajem ziemi i idealnym podłożem dla grzybów. W przeciwieństwie do innych bloków ziemi nie może ona zostać zamieniona w pole uprawne motyką. Oświetlona grzybnia powoli rozprzestrzenia się na pobliską ziemię. Pod nieprzezroczystym blokiem bądź płynem po pewnym czasie zamieni się z powrotem w ziemię. +Oak Bark=Dębowa kora +Oak Leaves=Dębowe liście +Oak Sapling=Dębowe sadzonki +Oak Wood=Dębowe drewno +Oak Wood Planks=Dębowe deski +Oak leaves are grown from oak trees.=Dębowe liście rosną na dębach. +Obsidian=Obsydian +Obsidian is an extremely hard mineral with an enourmous blast-resistance. Obsidian is formed when water meets lava.=Obsydian jest bardzo twardym minerałem o ogromnej odporności na wybuchy. Obsydian powstaje gdy woda styka się z lawą. +One of the most common blocks in the world, almost the entire underground consists of stone. It sometimes contains ores. Stone may be created when water meets lava.=Jeden z najpowszechniejszych bloków na świecie, prawie całe podziemia składają się z kamienia. Czasami zawiera rudy. Kamień może być utworzony czy woda styka się z lawą. +Orange Stained Glass=Pomarańczowe szkło +Packed Ice=Zbity lód +Packed ice is a compressed form of ice. It is opaque and solid.=Zbity lód jest skompresowaną formą lodu. Jest nieprzezroczysty i stały. +Paper=Papier +Paper is used to craft books and maps.=Papier jest wykorzystywany do wytwarzania książek i map. +Pink Stained Glass=Różowe szkło +Podzol=Bielica +Podzol is a type of dirt found in taiga forests. Only a few plants are able to survive on it.=Bielica jest typem ziemi w tajgach. Tylko niektóre rośliny są w stanie na niej przeżyć. +Polished Andesite=Wypolerowany andezyt +Polished Diorite=Wypolerowany dioryt +Polished Granite=Wypolerowany granit +Polished Stone=Wypolerowany kamień +Polished andesite is a decorative building block made from andesite.=Wypolerowany andezyt jest dekoracyjnym blokiem budowlanym tworzonym z andezytu. +Polished diorite is a decorative building block made from diorite.=Wypolerowany dioryt jest dekoracyjnym blokiem budowlanym tworzonym z diorytu. +Polished granite is a decorative building block made from granite.=Wypolerowany granit jest dekoracyjnym blokiem budowlanym tworzonym z granitu. +Purple Stained Glass=Fioletowe szkło +Realm Barrier=Bariera wymiarów +Red Sand=Czerwony piasek +Red Sandstone=Czerwony piaskowiec +Red Stained Glass=Czerwone szkło +Red sand is found in large quantities in mesa biomes.=Czerwony piasek występuje w dużych ilościach w Badlandach. +Red sandstone is compressed red sand and is a rather soft kind of stone.=Czerwony piaskowiec jest skompresowanym czerwonym piaskiem i jest miękkim rodzajem kamienia. +Redstone Ore=Ruda czerwienitu +Redstone ore is commonly found near the bottom of the world. It glows when it is punched or walked upon.=Ruda czerwienitu występuje często w okolicy dna świata. Świeci gdy się ją uderzy bądź gdy się po niej chodzi. +Sand=Piasek +Sand is found in large quantities at beaches and deserts.=Piasek występuje w dużych ilościach na plażach i pustyniach. +Sandstone=Piaskowiec +Sandstone is compressed sand and is a rather soft kind of stone.=Piaskowiec jest skompresowanym piaskiem i jest miękkim rodzajem kamienia. +Slime Block=Blok szlamu +Slime blocks are very bouncy and prevent fall damage.=Bloki szlamu są bardzo sprężyste i pomagają uniknąć obrażeń od upadku. +Smooth Red Sandstone=Gładki czerwony piaskowiec +Smooth Sandstone=Gładki piaskowiec +Smooth red sandstone is a decorative building block.=Gładki czerwony piaskowiec jest dekoracyjnym blokiem budowlanym. +Smooth sandstone is compressed sand and is a rather soft kind of stone.=Gładki piaskowiec skompresowanym piaskiem i jest miękkim rodzajem kamienia. +Snow=Śnieg +Some coal contained in stone, it is very common and can be found inside stone in medium to large clusters at nearly every height.=Trochę węgla zawartego w kamieniu. Jest bardzo częste i można to znaleźć w kamieniu w średnich i dużych grupach na niemal każdej wysokości. +Some iron contained in stone, it is prety common and can be found below sea level.=Trochę żelaza zawartego w kamieniu. Jest bardzo częste i można to znaleźć w kamieniu poniżej poziomu morza. +Spruce Bark=Świerkowa kora +Spruce Leaves=Świerkowe liście +Spruce Sapling=Świerkowa sadzonka +Spruce Wood=Świerkowe drewno +Spruce Wood Planks=Świerkowe deski +Spruce leaves are grown from spruce trees.=Świerkowe liście rosną na świerkach. +Stained glass is a decorative and mostly transparent block which comes in various different colors.=Kolorowe szkło jest dekoracyjnym, przejrzystym blokiem. Istnieją różnokolorowe warianty tego bloku. +Stick=Patyk +Sticks are a very versatile crafting material; used in countless crafting recipes.=Patyk jest wszechstronnym materiałem do wytwarzania, wykorzystywanym w niezliczonej liczbie receptur. +Stone=Kamień +Stripped Acacia Log=Okorowany pień akacji +Stripped Acacia Wood=Okorowane drewno akacji +Stripped Birch Log=Okorowany pień brzozy +Stripped Birch Wood=Okorowane drewno brzozy +Stripped Dark Oak Log=Okorowany pień ciemnego dębu +Stripped Dark Oak Wood=Okorowane drewno ciemnego dębu +Stripped Jungle Log=Okorowany pień tropikalnego drzewa +Stripped Jungle Wood=Okorowane drewno tropikalnego drzewa +Stripped Oak Log=Okorowany pień dębu +Stripped Oak Wood=Okorowane drewno dębu +Stripped Spruce Log=Okorowany pień świerku +Stripped Spruce Wood=Okorowane drewno świerku +Stone Bricks=Kamienne cegły +Sugar=Cukier +Sugar Canes=Trzcina cukrowa +Sugar canes are a plant which has some uses in crafting. Sugar canes will slowly grow up to 3 blocks when they are next to water and are placed on a grass block, dirt, sand, red sand, podzol or coarse dirt. When a sugar cane is broken, all sugar canes connected above will break as well.=Trzciny cukrowe są rośliny użyteczne w wytwarzaniu. Będą one powoli rosły na wysokość 3 bloków, gdy są postawione obok wody i są postawione na bloku trawy, ziemi, piasku, czerwonego piasku, bielicy lub twardej ziemi. Gdy trzcina cukrowa jest zniszczona wszystkie połączone trzciny nad nią również się zniszczą. +Sugar canes can only be placed top of other sugar canes and on top of blocks on which they would grow.=Trzciny cukrowe mogą być posadzone tylko na innych trzcinach cukrowych i na blokach na których by wyrosły. +Sugar comes from sugar canes and is used to make sweet foods.=Cukier wytwarza się z trzciny cukrowej i wykorzystuje się go do robienia słodkich potraw. +The stripped trunk of an acacia tree.=Okorowany pień drzewa akacji. +The stripped trunk of an birch tree.=Okorowany pień drzewa brozy. +The stripped trunk of an dark oak tree.=Okorowany pień drzewa ciemnego dębu. +The stripped trunk of an jungle tree.=Okorowany pień drzewa tropikalnego. +The stripped trunk of an oak tree.=Okorowany pień drzewa dębu. +The stripped trunk of an spruce tree.=Okorowany pień drzewa świerkowego. +The trunk of a birch tree.=Pień brzozy. +The trunk of a dark oak tree.=Pień ciemnego dębu. +The trunk of a jungle tree.=Pień tropikalnego drzewa. +The trunk of a spruce tree.=Pień świerka. +The trunk of an acacia.=Pień akacji. +The trunk of an oak tree.=Pień dębu. +This block consists of a couple of loose stones and can't support itself.=Ten blok składa się z kilku luźnych kamieni i nie może się utrzymać. +This is a decorative block surrounded by the bark of a tree trunk.=Jest to dekoracyjny blok otoczony przez korę pnia. +This is a decorative block.=Jest to blok dekoracyjny. +This is a full block of snow. Snow of this thickness is usually found in areas of extreme cold.=To jest pełny blok śniegu. Śnieg tej grubości występuje zwykle w ekstremalnie niskich obszarach. +This is a piece of cactus commonly found in dry areas, especially deserts. Over time, cacti will grow up to 3 blocks high on sand or red sand. A cactus hurts living beings touching it with a damage of 1 HP every half second. When a cactus block is broken, all cactus blocks connected above it will break as well.=To jest kawałek kaktusa często występujący w suchych obszarach, zwłaszcza pustyniach. Po pewnym czasie kaktusy rosną na wysokość 3 bloków na piasku lub czerwonym piasku. Kaktus rani żywe istoty dotykające go zadając 1 HP obrażeń na pół sekundy. Gdy blok kaktusa jest zniszczony wszystkie bloki kaktusa nad nim również zostaną zniszczone. +This stone contains pure gold, a rare metal.=Ten kamień zawiera czyste złoto, rzadki metal. +Top Snow=Pokrywa śniegu +Top snow is a layer of snow. It melts near light sources other than the sun with a light level of 12 or higher.=Pokrywa śniegu jest warstwą śniegu. Topi się przy źródłach światła innych niż słońce o poziomie oświetlenia 12 lub wyższym. +Vines=Pnącza +Vines are climbable blocks which can be placed on the sides of solid full-cube blocks. Vines slowly grow and spread.=Pnącza są blokami po których można się wspinać i które można postawić na bokach stałych pełnych bloków. +Void=Otchłań +Water=Woda +Water Source=Źródło wody +Water is abundant in oceans and also appears in a few springs in the ground. You can swim easily in water, but you need to catch your breath from time to time.=Wody jest dużo w oceanach i pojawia się też w strumykach na ziemi. Możesz łatwo pływać w wodzie, ale nie zapominaj od czasu do czasu złapać oddechu. +When placed on soil (such as dirt) and exposed to light, a birch sapling will grow into a birch after some time.=Z położonej na glebie (np. ziemi) i oświetlonej brzozowej sadzonki po pewnym czasie wyrośnie brzoza. +When placed on soil (such as dirt) and exposed to light, a jungle sapling will grow into a jungle tree after some time. When there are 4 jungle saplings in a 2×2 square, they will grow to a huge jungle tree.=Z położonej na glebie (np. ziemi) i oświetlonej tropikalnej sadzonki po pewnym czasie wyrośnie drzewo tropikalne. Jeśli 4 tropikalne sadzonki są posadzone w kwadracie 2×2 wyrośnie z nich duże drzewo tropikalne. +When placed on soil (such as dirt) and exposed to light, a spruce sapling will grow into a spruce after some time. When there are 4 spruce saplings in a 2×2 square, they will grow to a huge spruce.=Z położonej na glebie (np. ziemi) i oświetlonej świerkowej sadzonki po pewnym czasie wyrośnie świerk. Jeśli 4 tropikalne sadzonki są posadzone w kwadracie 2×2 wyrośnie z nich duży świerk. +When placed on soil (such as dirt) and exposed to light, an acacia sapling will grow into an acacia after some time.=Z położonej na glebie (np. ziemi) i oświetlonej akacjowej sadzonki po pewnym czasie wyrośnie akacja. +When placed on soil (such as dirt) and exposed to light, an oak sapling will grow into an oak after some time.=Z położonej na glebie (np. ziemi) i oświetlonej dębowej sadzonki po pewnym czasie wyrośnie dąb. +When you hold a barrier in hand, you reveal all placed barriers in a short distance around you.=Gdy w ręce trzymasz barierę będziesz w stanie dostrzec wszystkie bariery w niewielkiej odległości. +White Stained Glass=Białe szkło +Yellow Stained Glass=Żółte szkło +“Coal” refers to coal lumps obtained by digging coal ore which can be found underground. Coal is your standard furnace fuel, but it can also be used to make torches, coal blocks and a few other things.="Węgiel" odnosi się tutaj do kawałków węgla zdobytych przez wykopanie rudy węgla występującej pod ziemią. Węgiel jest standardowym paliwem do pieca, ale może być również wykorzystany do tworzenia pochodni, bloków węgla i kilku innych rzeczy. +Water interacts with lava in various ways:=Woda wchodzi w interakcję z lawą na kilka sposobów: +• When water is directly above or horizontally next to a lava source, the lava turns into obsidian.=• Gdy woda jest bezpośrednio nad lub poziomo obok źródła lawy, lawa zamienia się w obsydian. +• When flowing water touches flowing lava either from above or horizontally, the lava turns into cobblestone.=• Gdy płynąca woda zetknie się z lewą, z góry lub z boku, lawa zamienia się w brukowiec. +• When water is directly below lava, the water turns into stone.=Gdy woda jest bezpośrednio pod lawą, woda zamienia się w kamień. +Lava interacts with water various ways:=Lawa wchodzi w interakcję z wodą na różne sposoby: +• When a lava source is directly below or horizontally next to water, the lava turns into obsidian.=• Gdy źródło lawy jest bezpośrednio pod lub poziomo obok wody, lawa zamienia się w obsydian. +• When lava is directly above water, the water turns into stone.=• Gdy lawa jest bezpośrednio nad wodą, woda zamienia się w kamień. +Stained Glass=Kolorowe szkło +Granite is an igneous rock.=Granit jest skałą pochodzenia wulkanicznego. +Top snow can be stacked and has one of 8 different height levels. At levels 2-8, top snow is collidable. Top snow drops 2-9 snowballs, depending on its height.=Pokrywa śniegu może być układana w stos i ma 8 poziomów wysokości. Na poziomach 2-8 pokrywa jest przeszkodą. Z pokrywy śniegu wypada 2-9 kulek w zależności od jej wysokości. +This block can only be placed on full solid blocks and on another top snow (which increases its height).=Ten blok może być postawiony wyłącznie na pełnych stałych blokach i na innej pokrywie śniegu (co zwiększy jej wysokość). +Needs soil and water to grow=Potrzebuje gleby i wody by rosnąć +Needs soil and light to grow=Potrzebuje gleby i światła by rosnąć +Grows on sand=Rośnie na piasku +Contact damage: @1 per half second=Obrażenia dotykowe: @1 na pół sekundy +Slows down movement=Spowalnia poruszanie +2×2 saplings required=Wymagane . +2×2 saplings @= large tree=Sadzonki 2×2 @= duże drzewo. +Grows on sand or dirt next to water=Rośnie na piasku bądź ziemi obok wody. +Stackable=Możliwe grupowanie diff --git a/mods/ITEMS/mcl_core/locale/mcl_core.ru.tr b/mods/ITEMS/mcl_core/locale/mcl_core.ru.tr index f93db7c2c..2d5b5462c 100644 --- a/mods/ITEMS/mcl_core/locale/mcl_core.ru.tr +++ b/mods/ITEMS/mcl_core/locale/mcl_core.ru.tr @@ -95,7 +95,7 @@ Dirt acts as a soil for a few plants. When in light, this block may grow a grass Emerald=Изумруд Emerald Ore=Изумрудная руда Emerald ore is the ore of emeralds. It is very rare and can be found alone, not in clusters.=Изумрудная руда встречается очень редко и всегда по одному блоку. -Emeralds are not very useful on their own, but they can exchanged for gold ingots by crafting.=Изумруды не очень полезны сами по себе, но их можно обменять на золотые слитки. +Emeralds are used in villager trades as currency.= Flint=Кремень Flint is a raw material.=Кремень это необработанный материал. Flowing Lava=Текущая лава diff --git a/mods/ITEMS/mcl_core/locale/template.txt b/mods/ITEMS/mcl_core/locale/template.txt index f988435a3..19d156711 100644 --- a/mods/ITEMS/mcl_core/locale/template.txt +++ b/mods/ITEMS/mcl_core/locale/template.txt @@ -95,7 +95,7 @@ Dirt acts as a soil for a few plants. When in light, this block may grow a grass Emerald= Emerald Ore= Emerald ore is the ore of emeralds. It is very rare and can be found alone, not in clusters.= -Emeralds are not very useful on their own, but they can exchanged for gold ingots by crafting.= +Emeralds are used in villager trades as currency.= Flint= Flint is a raw material.= Flowing Lava= @@ -202,20 +202,45 @@ Stained glass is a decorative and mostly transparent block which comes in variou Stick= Sticks are a very versatile crafting material; used in countless crafting recipes.= Stone= +Stripped Acacia Log= +Stripped Acacia Wood= +Stripped Birch Log= +Stripped Birch Wood= +Stripped Dark Oak Log= +Stripped Dark Oak Wood= +Stripped Jungle Log= +Stripped Jungle Wood= +Stripped Oak Log= +Stripped Oak Wood= +Stripped Spruce Log= +Stripped Spruce Wood= Stone Bricks= Sugar= Sugar Canes= Sugar canes are a plant which has some uses in crafting. Sugar canes will slowly grow up to 3 blocks when they are next to water and are placed on a grass block, dirt, sand, red sand, podzol or coarse dirt. When a sugar cane is broken, all sugar canes connected above will break as well.= Sugar canes can only be placed top of other sugar canes and on top of blocks on which they would grow.= Sugar comes from sugar canes and is used to make sweet foods.= +The stripped trunk of an acacia tree.= +The stripped trunk of a birch tree.= +The stripped trunk of a dark oak tree.= +The stripped trunk of a jungle tree.= +The stripped trunk of an oak tree.= +The stripped trunk of a spruce tree.= The trunk of a birch tree.= The trunk of a dark oak tree.= The trunk of a jungle tree.= The trunk of a spruce tree.= The trunk of an acacia.= The trunk of an oak tree.= +The stripped wood of an acacia tree.= +The stripped wood of a birch tree.= +The stripped wood of a dark oak tree.= +The stripped wood of a jungle tree.= +The stripped wood of an oak tree.= +The stripped wood of a spruce tree.= This block consists of a couple of loose stones and can't support itself.= This is a decorative block surrounded by the bark of a tree trunk.= +This is a decorative block.= This is a full block of snow. Snow of this thickness is usually found in areas of extreme cold.= This is a piece of cactus commonly found in dry areas, especially deserts. Over time, cacti will grow up to 3 blocks high on sand or red sand. A cactus hurts living beings touching it with a damage of 1 HP every half second. When a cactus block is broken, all cactus blocks connected above it will break as well.= This stone contains pure gold, a rare metal.= diff --git a/mods/ITEMS/mcl_core/mod.conf b/mods/ITEMS/mcl_core/mod.conf index 575c46655..45018df75 100644 --- a/mods/ITEMS/mcl_core/mod.conf +++ b/mods/ITEMS/mcl_core/mod.conf @@ -1 +1,4 @@ name = mcl_core +description = Core items of MineClone 2: Basic biome blocks (dirt, sand, stones, etc.), derived items, glass, sugar cane, cactus, barrier, mining tools, hand, craftitems, and misc. items which don't really fit anywhere else. +depends = mcl_autogroup, mcl_init, mcl_sounds, mcl_particles, mcl_util, mcl_worlds, doc_items, mcl_enchanting, mcl_colors +optional_depends = doc diff --git a/mods/ITEMS/mcl_core/nodes_base.lua b/mods/ITEMS/mcl_core/nodes_base.lua index 78e2f1495..abc650bb0 100644 --- a/mods/ITEMS/mcl_core/nodes_base.lua +++ b/mods/ITEMS/mcl_core/nodes_base.lua @@ -1,20 +1,22 @@ -local S = minetest.get_translator("mcl_core") +local S = minetest.get_translator(minetest.get_current_modname()) -- Simple solid cubic nodes, most of them are the ground materials and simple building blocks local translucent_ice = minetest.settings:get_bool("mcl_translucent_ice", false) -local ice_drawtype +local ice_drawtype, ice_texture_alpha if translucent_ice then ice_drawtype = "glasslike" + ice_texture_alpha = minetest.features.use_texture_alpha_string_modes and "blend" or true else ice_drawtype = "normal" + ice_texture_alpha = minetest.features.use_texture_alpha_string_modes and "opaque" or false end mcl_core.fortune_drop_ore = { discrete_uniform_distribution = true, min_count = 2, max_count = 1, - get_chance = function (fortune_level) return 1 - 2 / (fortune_level + 2) end, + get_chance = function(fortune_level) return 1 - 2 / (fortune_level + 2) end, multiply = true, } @@ -26,11 +28,16 @@ minetest.register_node("mcl_core:stone", { is_ground_content = true, stack_max = 64, groups = {pickaxey=1, stone=1, building_block=1, material_stone=1}, - drop = 'mcl_core:cobble', + drop = "mcl_core:cobble", sounds = mcl_sounds.node_sound_stone_defaults(), _mcl_blast_resistance = 6, _mcl_hardness = 1.5, _mcl_silk_touch_drop = true, + after_dig_node = function(pos, oldnode, oldmetadata, digger) + if awards and awards.unlock and digger and digger:is_player() then + awards.unlock(digger:get_player_name(), "mcl:stoneAge") + end + end, }) minetest.register_node("mcl_core:stone_with_coal", { @@ -41,7 +48,7 @@ minetest.register_node("mcl_core:stone_with_coal", { is_ground_content = true, stack_max = 64, groups = {pickaxey=1, building_block=1, material_stone=1, xp=1}, - drop = 'mcl_core:coal_lump', + drop = "mcl_core:coal_lump", sounds = mcl_sounds.node_sound_stone_defaults(), _mcl_blast_resistance = 3, _mcl_hardness = 3, @@ -56,7 +63,7 @@ minetest.register_node("mcl_core:stone_with_iron", { is_ground_content = true, stack_max = 64, groups = {pickaxey=3, building_block=1, material_stone=1}, - drop = 'mcl_core:stone_with_iron', + drop = "mcl_core:stone_with_iron", sounds = mcl_sounds.node_sound_stone_defaults(), _mcl_blast_resistance = 3, _mcl_hardness = 3, @@ -79,7 +86,7 @@ minetest.register_node("mcl_core:stone_with_gold", { }) local redstone_timer = 68.28 -local redstone_ore_activate = function(pos) +local function redstone_ore_activate(pos) minetest.swap_node(pos, {name="mcl_core:stone_with_redstone_lit"}) local t = minetest.get_node_timer(pos) t:start(redstone_timer) @@ -117,7 +124,7 @@ minetest.register_node("mcl_core:stone_with_redstone", { } }) -local redstone_ore_reactivate = function(pos) +local function redstone_ore_reactivate(pos) local t = minetest.get_node_timer(pos) t:start(redstone_timer) end @@ -172,11 +179,11 @@ minetest.register_node("mcl_core:stone_with_lapis", { drop = { max_items = 1, items = { - {items = {'mcl_dye:blue 8'},rarity = 5}, - {items = {'mcl_dye:blue 7'},rarity = 5}, - {items = {'mcl_dye:blue 6'},rarity = 5}, - {items = {'mcl_dye:blue 5'},rarity = 5}, - {items = {'mcl_dye:blue 4'}}, + {items = {"mcl_dye:blue 8"},rarity = 5}, + {items = {"mcl_dye:blue 7"},rarity = 5}, + {items = {"mcl_dye:blue 6"},rarity = 5}, + {items = {"mcl_dye:blue 5"},rarity = 5}, + {items = {"mcl_dye:blue 4"}}, } }, sounds = mcl_sounds.node_sound_stone_defaults(), @@ -362,7 +369,7 @@ minetest.register_node("mcl_core:dirt_with_grass", { is_ground_content = true, stack_max = 64, groups = {handy=1,shovely=1,dirt=2,grass_block=1, grass_block_no_snow=1, soil=1, soil_sapling=2, soil_sugarcane=1, cultivatable=2, spreading_dirt_type=1, enderman_takable=1, building_block=1}, - drop = 'mcl_core:dirt', + drop = "mcl_core:dirt", sounds = mcl_sounds.node_sound_dirt_defaults({ footstep = {name="default_grass_footstep", gain=0.1}, }), @@ -389,6 +396,7 @@ minetest.register_node("mcl_core:grass_path", { _doc_items_longdesc = S("Grass paths are a decorative variant of grass blocks. Their top has a different color and they are a bit lower than grass blocks, making them useful to build footpaths. Grass paths can be created with a shovel. A grass path turns into dirt when it is below a solid block."), drop = "mcl_core:dirt", is_ground_content = true, + use_texture_alpha = minetest.features.use_texture_alpha_string_modes and "opaque" or false, drawtype = "nodebox", paramtype = "light", node_box = { @@ -414,7 +422,7 @@ minetest.register_node("mcl_core:mycelium", { is_ground_content = true, stack_max = 64, groups = {handy=1,shovely=1, dirt=2,spreading_dirt_type=1, enderman_takable=1, building_block=1}, - drop = 'mcl_core:dirt', + drop = "mcl_core:dirt", sounds = mcl_sounds.node_sound_dirt_defaults({ footstep = {name="default_grass_footstep", gain=0.1}, }), @@ -434,7 +442,7 @@ minetest.register_node("mcl_core:podzol", { is_ground_content = true, stack_max = 64, groups = {handy=1,shovely=3, dirt=2,soil=1, soil_sapling=2, soil_sugarcane=1, enderman_takable=1, building_block=1}, - drop = 'mcl_core:dirt', + drop = "mcl_core:dirt", sounds = mcl_sounds.node_sound_dirt_defaults(), on_construct = mcl_core.on_snowable_construct, _mcl_snowed = "mcl_core:podzol_snow", @@ -479,8 +487,8 @@ minetest.register_node("mcl_core:gravel", { drop = { max_items = 1, items = { - {items = {'mcl_core:flint'},rarity = 10}, - {items = {'mcl_core:gravel'}} + {items = {"mcl_core:flint"},rarity = 10}, + {items = {"mcl_core:gravel"}} } }, sounds = mcl_sounds.node_sound_dirt_defaults({ @@ -493,15 +501,15 @@ minetest.register_node("mcl_core:gravel", { [1] = { max_items = 1, items = { - {items = {'mcl_core:flint'},rarity = 7}, - {items = {'mcl_core:gravel'}} + {items = {"mcl_core:flint"},rarity = 7}, + {items = {"mcl_core:gravel"}} } }, [2] = { max_items = 1, items = { - {items = {'mcl_core:flint'},rarity = 4}, - {items = {'mcl_core:gravel'}} + {items = {"mcl_core:flint"},rarity = 4}, + {items = {"mcl_core:gravel"}} } }, [3] = "mcl_core:flint", @@ -644,7 +652,7 @@ minetest.register_node("mcl_core:clay", { is_ground_content = true, stack_max = 64, groups = {handy=1,shovely=1, enderman_takable=1, building_block=1}, - drop = 'mcl_core:clay_lump 4', + drop = "mcl_core:clay_lump 4", sounds = mcl_sounds.node_sound_dirt_defaults(), _mcl_blast_resistance = 0.6, _mcl_hardness = 0.6, @@ -675,7 +683,7 @@ minetest.register_node("mcl_core:bedrock", { sounds = mcl_sounds.node_sound_stone_defaults(), is_ground_content = false, on_blast = function() end, - drop = '', + drop = "", _mcl_blast_resistance = 3600000, _mcl_hardness = -1, @@ -805,12 +813,17 @@ minetest.register_node("mcl_core:obsidian", { description = S("Obsidian"), _doc_items_longdesc = S("Obsidian is an extremely hard mineral with an enourmous blast-resistance. Obsidian is formed when water meets lava."), tiles = {"default_obsidian.png"}, - is_ground_content = true, + is_ground_content = false, sounds = mcl_sounds.node_sound_stone_defaults(), stack_max = 64, groups = {pickaxey=5, building_block=1, material_stone=1}, _mcl_blast_resistance = 1200, _mcl_hardness = 50, + after_dig_node = function(pos, oldnode, oldmetadata, digger) + if awards and awards.unlock and digger and digger:is_player() then + awards.unlock(digger:get_player_name(), "mcl:obsidian") + end + end, }) minetest.register_node("mcl_core:ice", { @@ -820,7 +833,7 @@ minetest.register_node("mcl_core:ice", { tiles = {"default_ice.png"}, is_ground_content = true, paramtype = "light", - use_texture_alpha = translucent_ice, + use_texture_alpha = ice_texture_alpha, stack_max = 64, groups = {handy=1,pickaxey=1, slippery=3, building_block=1, ice=1}, drop = "", @@ -851,7 +864,7 @@ minetest.register_node("mcl_core:packed_ice", { -- Frosted Ice (4 nodes) for i=0,3 do local ice = {} - ice.increase_age = function(pos, ice_near, first_melt) + function ice.increase_age(pos, ice_near, first_melt) -- Increase age of frosted age or turn to water source if too old local nn = minetest.get_node(pos).name local age = tonumber(string.sub(nn, -1)) @@ -886,7 +899,7 @@ for i=0,3 do tiles = {"mcl_core_frosted_ice_"..i..".png"}, is_ground_content = false, paramtype = "light", - use_texture_alpha = translucent_ice, + use_texture_alpha = ice_texture_alpha, stack_max = 64, groups = {handy=1, frosted_ice=1, slippery=3, not_in_creative_inventory=1, ice=1}, drop = "", @@ -942,7 +955,7 @@ for i=1,8 do fixed = { -0.5, -0.5, -0.5, 0.5, -0.5 + (2*i)/16, 0.5 }, } end - local on_place = function(itemstack, placer, pointed_thing) + local function on_place(itemstack, placer, pointed_thing) -- Placement is only allowed on top of solid blocks if pointed_thing.type ~= "node" then -- no interaction possible with entities @@ -977,9 +990,8 @@ for i=1,8 do local itemcount = itemstack:get_count() local fakestack = ItemStack(itemstring.." "..itemcount) fakestack:set_name("mcl_core:snow_"..math.min(8, (i+g))) - local success - itemstack, success = minetest.item_place(fakestack, placer, pointed_thing) - minetest.sound_play(mcl_sounds.node_sound_snow_defaults().place, {pos = below}, true) + itemstack = minetest.item_place(fakestack, placer, pointed_thing) + minetest.sound_play(mcl_sounds.node_sound_snow_defaults().place, {pos = pointed_thing.under}, true) itemstack:set_name(itemstring) return itemstack end @@ -1029,7 +1041,7 @@ for i=1,8 do drop = "mcl_throwing:snowball "..(i+1), _mcl_blast_resistance = 0.1, _mcl_hardness = 0.1, - _mcl_silk_touch_drop = {"mcl_core:snow " .. (i+1)}, + _mcl_silk_touch_drop = {"mcl_core:snow " .. i}, }) end diff --git a/mods/ITEMS/mcl_core/nodes_cactuscane.lua b/mods/ITEMS/mcl_core/nodes_cactuscane.lua index 9c0077ea2..839102534 100644 --- a/mods/ITEMS/mcl_core/nodes_cactuscane.lua +++ b/mods/ITEMS/mcl_core/nodes_cactuscane.lua @@ -1,13 +1,14 @@ -- Cactus and Sugar Cane -local S = minetest.get_translator("mcl_core") +local S = minetest.get_translator(minetest.get_current_modname()) minetest.register_node("mcl_core:cactus", { description = S("Cactus"), - _tt_help = S("Grows on sand").."\n"..minetest.colorize("#FFFF00", S("Contact damage: @1 per half second", 1)), + _tt_help = S("Grows on sand").."\n"..minetest.colorize(mcl_colors.YELLOW, S("Contact damage: @1 per half second", 1)), _doc_items_longdesc = S("This is a piece of cactus commonly found in dry areas, especially deserts. Over time, cacti will grow up to 3 blocks high on sand or red sand. A cactus hurts living beings touching it with a damage of 1 HP every half second. When a cactus block is broken, all cactus blocks connected above it will break as well."), _doc_items_usagehelp = S("A cactus can only be placed on top of another cactus or any sand."), drawtype = "nodebox", + use_texture_alpha = minetest.features.use_texture_alpha_string_modes and "clip" or true, tiles = {"mcl_core_cactus_top.png", "mcl_core_cactus_bottom.png", "mcl_core_cactus_side.png"}, is_ground_content = true, stack_max = 64, diff --git a/mods/ITEMS/mcl_core/nodes_climb.lua b/mods/ITEMS/mcl_core/nodes_climb.lua index d9ecd76d3..9505bb19a 100644 --- a/mods/ITEMS/mcl_core/nodes_climb.lua +++ b/mods/ITEMS/mcl_core/nodes_climb.lua @@ -1,7 +1,7 @@ -- Climbable nodes -local S = minetest.get_translator("mcl_core") +local S = minetest.get_translator(minetest.get_current_modname()) -local rotate_climbable = function(pos, node, user, mode) +local function rotate_climbable(pos, node, user, mode) if mode == screwdriver.ROTATE_FACE then local r = screwdriver.rotate.wallmounted(pos, node, mode) node.param2 = r @@ -120,7 +120,6 @@ minetest.register_node("mcl_core:vine", { local node = minetest.get_node(under) local def = minetest.registered_nodes[node.name] if not def then return itemstack end - local groups = def.groups -- Check special rightclick action of pointed node if def and def.on_rightclick then diff --git a/mods/ITEMS/mcl_core/nodes_glass.lua b/mods/ITEMS/mcl_core/nodes_glass.lua index 83d2c1065..6e7ab350b 100644 --- a/mods/ITEMS/mcl_core/nodes_glass.lua +++ b/mods/ITEMS/mcl_core/nodes_glass.lua @@ -1,5 +1,5 @@ -- Glass nodes -local S = minetest.get_translator("mcl_core") +local S = minetest.get_translator(minetest.get_current_modname()) local mod_doc = minetest.get_modpath("doc") minetest.register_node("mcl_core:glass", { @@ -20,7 +20,7 @@ minetest.register_node("mcl_core:glass", { }) ------------------------ --- Create Color Glass -- +-- Create Color Glass -- ------------------------ local canonical_color = "yellow" function mcl_core.add_stained_glass(desc, recipeitem, colorgroup, color) @@ -44,7 +44,7 @@ function mcl_core.add_stained_glass(desc, recipeitem, colorgroup, color) tiles = {"mcl_core_glass_"..color..".png"}, paramtype = "light", sunlight_propagates = true, - use_texture_alpha = true, + use_texture_alpha = minetest.features.use_texture_alpha_string_modes and "blend" or true, stack_max = 64, -- TODO: Add color to groups groups = {handy=1, glass=1, building_block=1, material_glass=1}, @@ -54,13 +54,13 @@ function mcl_core.add_stained_glass(desc, recipeitem, colorgroup, color) _mcl_hardness = 0.3, _mcl_silk_touch_drop = true, }) - + minetest.register_craft({ - output = 'mcl_core:glass_'..color..' 8', + output = "mcl_core:glass_"..color.." 8", recipe = { - {'mcl_core:glass','mcl_core:glass','mcl_core:glass'}, - {'mcl_core:glass',recipeitem,'mcl_core:glass'}, - {'mcl_core:glass','mcl_core:glass','mcl_core:glass'}, + {"mcl_core:glass","mcl_core:glass","mcl_core:glass"}, + {"mcl_core:glass",recipeitem,"mcl_core:glass"}, + {"mcl_core:glass","mcl_core:glass","mcl_core:glass"}, } }) diff --git a/mods/ITEMS/mcl_core/nodes_liquid.lua b/mods/ITEMS/mcl_core/nodes_liquid.lua index 4769975b9..0e0f71a11 100644 --- a/mods/ITEMS/mcl_core/nodes_liquid.lua +++ b/mods/ITEMS/mcl_core/nodes_liquid.lua @@ -1,19 +1,19 @@ -- Liquids: Water and lava -local S = minetest.get_translator("mcl_core") -local N = function(s) return s end +local S = minetest.get_translator(minetest.get_current_modname()) -local WATER_ALPHA = 179 +local vector = vector +local math = math + +--local WATER_ALPHA = 179 local WATER_VISC = 1 local LAVA_VISC = 7 local LIGHT_LAVA = minetest.LIGHT_MAX +local USE_TEXTURE_ALPHA = true -local lava_death_messages = { - N("@1 melted in lava."), - N("@1 took a bath in a hot lava tub."), - N("@1 died in lava."), - N("@1 could not survive in lava."), -} +if minetest.features.use_texture_alpha_string_modes then + USE_TEXTURE_ALPHA = "blend" +end minetest.register_node("mcl_core:water_flowing", { description = S("Flowing Water"), @@ -35,7 +35,7 @@ minetest.register_node("mcl_core:water_flowing", { }, sounds = mcl_sounds.node_sound_water_defaults(), is_ground_content = false, - alpha = WATER_ALPHA, + use_texture_alpha = USE_TEXTURE_ALPHA, paramtype = "light", paramtype2 = "flowingliquid", walkable = false, @@ -80,7 +80,7 @@ S("• When water is directly below lava, the water turns into stone."), }, sounds = mcl_sounds.node_sound_water_defaults(), is_ground_content = false, - alpha = WATER_ALPHA, + use_texture_alpha = USE_TEXTURE_ALPHA, paramtype = "light", walkable = false, pointable = false, @@ -140,7 +140,6 @@ minetest.register_node("mcl_core:lava_flowing", { liquid_renewable = false, liquid_range = 3, damage_per_second = 4*2, - _mcl_node_death_message = lava_death_messages, post_effect_color = {a=245, r=208, g=73, b=10}, groups = { lava=3, liquid=2, destroys_items=1, not_in_creative_inventory=1, dig_by_piston=1, set_on_fire=15}, _mcl_blast_resistance = 100, @@ -195,22 +194,21 @@ S("• When lava is directly above water, the water turns into stone."), liquid_renewable = false, liquid_range = 3, damage_per_second = 4*2, - _mcl_node_death_message = lava_death_messages, post_effect_color = {a=245, r=208, g=73, b=10}, stack_max = 64, - groups = { lava=3, lava_source=1, liquid=2, destroys_items=1, not_in_creative_inventory=1, dig_by_piston=1, set_on_fire=15}, + groups = { lava=3, lava_source=1, liquid=2, destroys_items=1, not_in_creative_inventory=1, dig_by_piston=1, set_on_fire=15, fire_damage=1}, _mcl_blast_resistance = 100, -- Hardness intentionally set to infinite instead of 100 (Minecraft value) to avoid problems in creative mode _mcl_hardness = -1, }) -local emit_lava_particle = function(pos) +local function emit_lava_particle(pos) local node = minetest.get_node(pos) if minetest.get_item_group(node.name, "lava_source") == 0 then return end local ppos = vector.add(pos, { x = math.random(-7, 7)/16, y = 0.45, z = math.random(-7, 7)/16}) - local spos = vector.add(ppos, { x = 0, y = -0.2, z = 0 }) + --local spos = vector.add(ppos, { x = 0, y = -0.2, z = 0 }) local vel = { x = math.random(-3, 3)/10, y = math.random(4, 7), z = math.random(-3, 3)/10 } local acc = { x = 0, y = -9.81, z = 0 } -- Lava droplet diff --git a/mods/ITEMS/mcl_core/nodes_misc.lua b/mods/ITEMS/mcl_core/nodes_misc.lua index bbfe75668..67669a861 100644 --- a/mods/ITEMS/mcl_core/nodes_misc.lua +++ b/mods/ITEMS/mcl_core/nodes_misc.lua @@ -1,11 +1,13 @@ -- Other nodes -local S = minetest.get_translator("mcl_core") +local S = minetest.get_translator(minetest.get_current_modname()) + +local mod_screwdriver = minetest.get_modpath("screwdriver") -local mod_screwdriver = minetest.get_modpath("screwdriver") ~= nil local on_rotate if mod_screwdriver then on_rotate = screwdriver.rotate_3way end + local alldirs = {{x=0,y=0,z=1}, {x=1,y=0,z=0}, {x=0,y=0,z=-1}, {x=-1,y=0,z=0}, {x=0,y=-1,z=0}, {x=0,y=1,z=0}} minetest.register_node("mcl_core:bone_block", { @@ -31,7 +33,7 @@ minetest.register_node("mcl_core:slimeblock", { node_box = { type = "fixed", fixed = { - {-0.25, -0.25, -0.25, 0.25, 0.25, 0.25}, + {-0.25, -0.25, -0.25, 0.25, 0.25, 0.25}, {-0.5, -0.5, -0.5, 0.5, 0.5, 0.5}, } }, @@ -39,8 +41,7 @@ minetest.register_node("mcl_core:slimeblock", { type = "regular", }, tiles = {"mcl_core_slime.png"}, - paramtype = "light", - use_texture_alpha = true, + use_texture_alpha = minetest.features.use_texture_alpha_string_modes and "blend" or true, stack_max = 64, -- According to Minecraft Wiki, bouncing off a slime block from a height off 255 blocks should result in a bounce height of 50 blocks -- bouncy=44 makes the player bounce up to 49.6. This value was chosen by experiment. @@ -53,7 +54,7 @@ minetest.register_node("mcl_core:slimeblock", { }, _mcl_blast_resistance = 0, _mcl_hardness = 0, - mvps_sticky = function (pos, node, piston_pos) + mvps_sticky = function(pos, node, piston_pos) local connected = {} for n, v in ipairs(alldirs) do local neighbor_pos = vector.add(pos, v) @@ -108,7 +109,7 @@ minetest.register_node("mcl_core:cobweb", { liquid_renewable = false, liquid_range = 0, walkable = false, - groups = {swordy_cobweb=1,shearsy=1, fake_liquid=1, disable_jump=1, deco_block=1, dig_by_piston=1, dig_by_water=1,destroy_by_lava_flow=1,}, + groups = {swordy_cobweb=1, shearsy_cobweb=1, fake_liquid=1, disable_jump=1, deco_block=1, dig_by_piston=1, dig_by_water=1,destroy_by_lava_flow=1,}, drop = "mcl_mobitems:string", _mcl_shears_drop = true, sounds = mcl_sounds.node_sound_leaves_defaults(), @@ -173,7 +174,7 @@ minetest.register_node("mcl_core:barrier", { drop = "", _mcl_blast_resistance = 36000008, _mcl_hardness = -1, - after_place_node = function (pos, placer, itemstack, pointed_thing) + after_place_node = function(pos, placer, itemstack, pointed_thing) if placer == nil then return end @@ -213,7 +214,7 @@ minetest.register_node("mcl_core:barrier", { -- Same as barrier, but non-pointable. This node is only to be used internally to separate realms. -- It must NOT be used for anything else. -- This node only exists because Minetest does not have support for “dimensions” yet and needs to --- be removed when support for this is implemented. +-- be removed when support for this is implemented. minetest.register_node("mcl_core:realm_barrier", { description = S("Realm Barrier"), _doc_items_create_entry = false, @@ -236,7 +237,7 @@ minetest.register_node("mcl_core:realm_barrier", { -- Prevent placement to protect player from screwing up the world, because the node is not pointable and hard to get rid of. node_placement_prediction = "", on_place = function(pos, placer, itemstack, pointed_thing) - minetest.chat_send_player(placer:get_player_name(), minetest.colorize("#FF0000", "You can't just place a realm barrier by hand!")) + minetest.chat_send_player(placer:get_player_name(), minetest.colorize(mcl_colors.RED, "You can't just place a realm barrier by hand!")) return end, }) @@ -266,7 +267,7 @@ minetest.register_node("mcl_core:void", { -- Prevent placement to protect player from screwing up the world, because the node is not pointable and hard to get rid of. node_placement_prediction = "", on_place = function(pos, placer, itemstack, pointed_thing) - minetest.chat_send_player(placer:get_player_name(), minetest.colorize("#FF0000", "You can't just place the void by hand!")) + minetest.chat_send_player(placer:get_player_name(), minetest.colorize(mcl_colors.RED, "You can't just place the void by hand!")) return end, drop = "", diff --git a/mods/ITEMS/mcl_core/nodes_trees.lua b/mods/ITEMS/mcl_core/nodes_trees.lua index 3a8aef8d0..a5ef7aa97 100644 --- a/mods/ITEMS/mcl_core/nodes_trees.lua +++ b/mods/ITEMS/mcl_core/nodes_trees.lua @@ -1,14 +1,15 @@ --- Tree nodes: Wood, Wooden Planks, Sapling, Leaves -local S = minetest.get_translator("mcl_core") +-- Tree nodes: Wood, Wooden Planks, Sapling, Leaves, Stripped Wood +local S = minetest.get_translator(minetest.get_current_modname()) + +local mod_screwdriver = minetest.get_modpath("screwdriver") -local mod_screwdriver = minetest.get_modpath("screwdriver") ~= nil local on_rotate if mod_screwdriver then on_rotate = screwdriver.rotate_3way end -- Register tree trunk (wood) and bark -local register_tree_trunk = function(subname, description_trunk, description_bark, longdesc, tile_inner, tile_bark) +local function register_tree_trunk(subname, description_trunk, description_bark, longdesc, tile_inner, tile_bark, stripped_variant) minetest.register_node("mcl_core:"..subname, { description = description_trunk, _doc_items_longdesc = longdesc, @@ -22,6 +23,7 @@ local register_tree_trunk = function(subname, description_trunk, description_bar on_rotate = on_rotate, _mcl_blast_resistance = 2, _mcl_hardness = 2, + _mcl_stripped_variant = stripped_variant, }) minetest.register_node("mcl_core:"..subname.."_bark", { @@ -37,6 +39,48 @@ local register_tree_trunk = function(subname, description_trunk, description_bar on_rotate = on_rotate, _mcl_blast_resistance = 2, _mcl_hardness = 2, + _mcl_stripped_variant = stripped_variant.."_bark", + }) + + minetest.register_craft({ + output = "mcl_core:"..subname.."_bark 3", + recipe = { + { "mcl_core:"..subname, "mcl_core:"..subname }, + { "mcl_core:"..subname, "mcl_core:"..subname }, + } + }) +end + +-- Register stripped trunk and stripped wood +local function register_stripped_trunk(subname, description_stripped_trunk, description_stripped_bark, longdesc, longdesc_wood, tile_stripped_inner, tile_stripped_bark) + minetest.register_node("mcl_core:"..subname, { + description = description_stripped_trunk, + _doc_items_longdesc = longdesc, + _doc_items_hidden = false, + tiles = {tile_stripped_inner, tile_stripped_inner, tile_stripped_bark}, + paramtype2 = "facedir", + on_place = mcl_util.rotate_axis, + stack_max = 64, + groups = {handy=1, axey=1, tree=1, flammable=2, building_block=1, material_wood=1, fire_encouragement=5, fire_flammability=5}, + sounds = mcl_sounds.node_sound_wood_defaults(), + on_rotate = on_rotate, + _mcl_blast_resistance = 2, + _mcl_hardness = 2, + }) + + minetest.register_node("mcl_core:"..subname.."_bark", { + description = description_stripped_bark, + _doc_items_longdesc = longdesc_wood, + tiles = {tile_stripped_bark}, + paramtype2 = "facedir", + on_place = mcl_util.rotate_axis, + stack_max = 64, + groups = {handy=1, axey=1, bark=1, flammable=2, building_block=1, material_wood=1, fire_encouragement=5, fire_flammability=5}, + sounds = mcl_sounds.node_sound_wood_defaults(), + is_ground_content = false, + on_rotate = on_rotate, + _mcl_blast_resistance = 2, + _mcl_hardness = 2, }) minetest.register_craft({ @@ -48,7 +92,7 @@ local register_tree_trunk = function(subname, description_trunk, description_bar }) end -local register_wooden_planks = function(subname, description, tiles) +local function register_wooden_planks(subname, description, tiles) minetest.register_node("mcl_core:"..subname, { description = description, _doc_items_longdesc = doc.sub.items.temp.build, @@ -63,14 +107,13 @@ local register_wooden_planks = function(subname, description, tiles) }) end -local register_leaves = function(subname, description, longdesc, tiles, sapling, drop_apples, sapling_chances, leafdecay_distance) - local drop +local function register_leaves(subname, description, longdesc, tiles, sapling, drop_apples, sapling_chances, leafdecay_distance) if leafdecay_distance == nil then leafdecay_distance = 4 end local apple_chances = {200, 180, 160, 120, 40} local stick_chances = {50, 45, 30, 35, 10} - + local function get_drops(fortune_level) local drop = { max_items = 1, @@ -108,7 +151,19 @@ local register_leaves = function(subname, description, longdesc, tiles, sapling, tiles = tiles, paramtype = "light", stack_max = 64, - groups = {handy=1,shearsy=1,swordy=1, leafdecay=leafdecay_distance, flammable=2, leaves=1, deco_block=1, dig_by_piston=1, fire_encouragement=30, fire_flammability=60}, + groups = { + handy=1, + hoey=1, + shearsy=1, + swordy=1, + leafdecay=leafdecay_distance, + flammable=2, + leaves=1, + deco_block=1, + dig_by_piston=1, + fire_encouragement=30, + fire_flammability=60 + }, drop = get_drops(0), _mcl_shears_drop = true, sounds = mcl_sounds.node_sound_leaves_defaults(), @@ -119,7 +174,7 @@ local register_leaves = function(subname, description, longdesc, tiles, sapling, }) end -local register_sapling = function(subname, description, longdesc, tt_help, texture, selbox) +local function register_sapling(subname, description, longdesc, tt_help, texture, selbox) minetest.register_node("mcl_core:"..subname, { description = description, _tt_help = tt_help, @@ -161,13 +216,19 @@ end --------------------- -register_tree_trunk("tree", S("Oak Wood"), S("Oak Bark"), S("The trunk of an oak tree."), "default_tree_top.png", "default_tree.png") -register_tree_trunk("darktree", S("Dark Oak Wood"), S("Dark Oak Bark"), S("The trunk of a dark oak tree."), "mcl_core_log_big_oak_top.png", "mcl_core_log_big_oak.png") -register_tree_trunk("acaciatree", S("Acacia Wood"), S("Acacia Bark"), S("The trunk of an acacia."), "default_acacia_tree_top.png", "default_acacia_tree.png") -register_tree_trunk("sprucetree", S("Spruce Wood"), S("Spruce Bark"), S("The trunk of a spruce tree."), "mcl_core_log_spruce_top.png", "mcl_core_log_spruce.png") -register_tree_trunk("birchtree", S("Birch Wood"), S("Birch Bark"), S("The trunk of a birch tree."), "mcl_core_log_birch_top.png", "mcl_core_log_birch.png") -register_tree_trunk("jungletree", S("Jungle Wood"), S("Jungle Bark"), S("The trunk of a jungle tree."), "default_jungletree_top.png", "default_jungletree.png") +register_tree_trunk("tree", S("Oak Wood"), S("Oak Bark"), S("The trunk of an oak tree."), "default_tree_top.png", "default_tree.png", "mcl_core:stripped_oak") +register_tree_trunk("darktree", S("Dark Oak Wood"), S("Dark Oak Bark"), S("The trunk of a dark oak tree."), "mcl_core_log_big_oak_top.png", "mcl_core_log_big_oak.png", "mcl_core:stripped_dark_oak") +register_tree_trunk("acaciatree", S("Acacia Wood"), S("Acacia Bark"), S("The trunk of an acacia."), "default_acacia_tree_top.png", "default_acacia_tree.png", "mcl_core:stripped_acacia") +register_tree_trunk("sprucetree", S("Spruce Wood"), S("Spruce Bark"), S("The trunk of a spruce tree."), "mcl_core_log_spruce_top.png", "mcl_core_log_spruce.png", "mcl_core:stripped_spruce") +register_tree_trunk("birchtree", S("Birch Wood"), S("Birch Bark"), S("The trunk of a birch tree."), "mcl_core_log_birch_top.png", "mcl_core_log_birch.png", "mcl_core:stripped_birch") +register_tree_trunk("jungletree", S("Jungle Wood"), S("Jungle Bark"), S("The trunk of a jungle tree."), "default_jungletree_top.png", "default_jungletree.png", "mcl_core:stripped_jungle") +register_stripped_trunk("stripped_oak", S("Stripped Oak Log"), S("Stripped Oak Wood"), S("The stripped trunk of an oak tree."), S("The stripped wood of an oak tree."), "mcl_core_stripped_oak_top.png", "mcl_core_stripped_oak_side.png") +register_stripped_trunk("stripped_acacia", S("Stripped Acacia Log"), S("Stripped Acacia Wood"), S("The stripped trunk of an acacia tree."), S("The stripped wood of an acacia tree."), "mcl_core_stripped_acacia_top.png", "mcl_core_stripped_acacia_side.png") +register_stripped_trunk("stripped_dark_oak", S("Stripped Dark Oak Log"), S("Stripped Dark Oak Wood"), S("The stripped trunk of a dark oak tree."), S("The stripped wood of a dark oak tree."), "mcl_core_stripped_dark_oak_top.png", "mcl_core_stripped_dark_oak_side.png") +register_stripped_trunk("stripped_birch", S("Stripped Birch Log"), S("Stripped Birch Wood"), S("The stripped trunk of a birch tree."), S("The stripped wood of a birch tree."), "mcl_core_stripped_birch_top.png", "mcl_core_stripped_birch_side.png") +register_stripped_trunk("stripped_spruce", S("Stripped Spruce Log"), S("Stripped Spruce Wood"), S("The stripped trunk of a spruce tree."), S("The stripped wood of a spruce tree."), "mcl_core_stripped_spruce_top.png", "mcl_core_stripped_spruce_side.png") +register_stripped_trunk("stripped_jungle", S("Stripped Jungle Log"), S("Stripped Jungle Wood"), S("The stripped trunk of a jungle tree."), S("The stripped wood of a jungle tree."),"mcl_core_stripped_jungle_top.png", "mcl_core_stripped_jungle_side.png") register_wooden_planks("wood", S("Oak Wood Planks"), {"default_wood.png"}) register_wooden_planks("darkwood", S("Dark Oak Wood Planks"), {"mcl_core_planks_big_oak.png"}) register_wooden_planks("junglewood", S("Jungle Wood Planks"), {"default_junglewood.png"}) @@ -214,4 +275,4 @@ register_leaves("birchleaves", S("Birch Leaves"), S("Birch leaves are grown from -- Node aliases minetest.register_alias("default:acacia_tree", "mcl_core:acaciatree") -minetest.register_alias("default:acacia_leaves", "mcl_core:acacialeaves") +minetest.register_alias("default:acacia_leaves", "mcl_core:acacialeaves") \ No newline at end of file diff --git a/mods/ITEMS/mcl_core/textures/default_diamond.png b/mods/ITEMS/mcl_core/textures/default_diamond.png index 9016a8194e2ff11dffa8545d6c886809ba06ad15..69db99dd1a93e0f135e04d8fdc0bd8a584d21cda 100644 GIT binary patch delta 139 zcmV;60CfNM0;d6xB!6y6L_t(|0b>ZBevl%}@c;jRa`A{Wp#0o#5GLM$_;ok_gRoEM z+W&-IfN9%*5WfBH&wrpIut7u{08+f-(SKykAj80Hq78t#0ErFu3ejG0t(^z69j+PX tGJ*!c{0=n)?sQmy66FOD9zjVN0O(-SDv0{BumAu607*qoLF0TNGZx^prw85kH`QX@Rme0>?TfNTy1#`a7G79fieh^2s-fq{7e zBLg##W(0{XV1mmEEMP{kK?+Sm3qJv=2c9mDAr^vLgB|&r3-;;KHcTeg%ytR${5DFt+|}I2 zXu`E(x8K|((+|4Oy#H_r+AcpS(!Pe_NT!T$yvWV4yC#y;B}0BNH~;9G=sIPo;SmFl zD7^x{Y3onl;%pUa^o~m{W81oA%IX!ryL+!Bus=^J_jA^J>9_Y^t#<3ao8kYPt?tR6 Z;1^Ws_&p=! diff --git a/mods/ITEMS/mcl_core/textures/default_water_flowing_animated.png b/mods/ITEMS/mcl_core/textures/default_water_flowing_animated.png index 1ad7aeb315471b029dc2ab8b225c71e66aa74615..7c2ffaba1281e2219b4186b435d830fb9bc2caf2 100644 GIT binary patch literal 888 zcmeAS@N?(olHy`uVBq!ia0vp^0t^f+3@pq*mXynpTR@5>-O<;Pfnj4m_n$;oAYUQb zBgmJ5p-PQ`p`nF=;TKS-;RORjsR0ASs{{rHs~HRo;stYd1=;{5fit0~g1_mZ4PZ!6KjC*HqIA%R|5MjCS>cq#K-`xpoYn%CX z({)d&`B;d_Bol;ss3QvH4BkDm&NWqJi0M$&%yqsI)^`S9WnIM ze7`~PsBHQZL*@+}>bK=Mv*uOrP@4NF~>3MQ1*UftDnm{r-UW|Xb^7Z delta 549 zcmeytc9Ug-3ZwMIMEUxjnk!`t42(ZLT^vIy7|&cc%z9%W()zG?acBH$$;RxM zx03g!gM##jHwyO-Hs}1YOgQBDp~b7T{^wSEoy!p!1&g019e8BH)They(v(TOqDzyp z*l*suycsh$T6Nw$an<8Mrgd+@_W3s+JiK9S_b~X#tV`?$sxC*^#9FNL>QAULKM)L` zw1oG$mpoc4)p__^W3?n$*cxli6Ao8MZBYNyI&G!F`<92UiQcT-jgATRvX3i0 z8rS;XV5@(?(YjFh*rE+fn|2;x`#guSF)*Q8_#5MX`3*}9$__<{Y}3e5IiDY+CBZt4 zb(?wO`~xKi762tGTzj4eO2mnp)rT8!>2SYU&3XI4Yew$Yjl9yQF1H0JY3Spl^@PEsMmP2wrS>pn1uJfH+cUzN*@0_r;u6BBq;G7=iwzA>_vH) zxIvD7T=9>8_d)rzC5QIF+@`Rhys`K3Nv7!88+hx=4YYaY8i=*(it5y}n9X?3!_mVO z9lham>I9Kvei3?H(JW?Do}24|op4*)V5VK;Q=ssNhc;hjxpUSfh|J*5$v=?ti)EVh zhKn}25k6eAwIx`eF@cl@G|oKG_UTXdalRA=AYl6$egCm`&!7JPAMO98|F!>j{QnR6 h|Bve-0zi%=h{sepPtQq9T=NP@i>Irf%Q~loCIG_?_QC)F diff --git a/mods/ITEMS/mcl_core/textures/mcl_core_emerald.png b/mods/ITEMS/mcl_core/textures/mcl_core_emerald.png index 7c196ad0e37af2c0be9d100ca6085fdf2bf82fc9..9b3fd263b44ede114859f1a8ecc1985b18c40f76 100644 GIT binary patch delta 132 zcmeBVp2|2uqLzi3fq~)e-A6${N+`f5#1%-_+|E>;rsT52P9jfCFp~GNSidKA8jzhtgpa-Jx$TOm{{dZV|Hr7tJ*HYMwi zcaL`R{K;IcVt@R_Yu-x{{3VXi|%A>7WJ8ZtoQ(P@dB;dh!1H>=Aq4dPBce$ zSU+&I6s&ajzOzD0bRy?OgLhBm>AqK*8YY L>gTe~DWM4f-iU|h 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 new file mode 100644 index 0000000000000000000000000000000000000000..2b57a0863e404e0ee1177fd4562bffecc5a3e527 GIT binary patch literal 2171 zcmV->2!!{EP) zaB^>EX>4U6ba`-PAZ2)IW&i+q+O1b@vLh!9{Ld+J1SAk2$6=VEYHzT|PXiKu&wkme zq~a-iFatvBZb`O#e*YToFT9wjxG1@#nv%yW)>ye=Q2c)FJNdXi^^3Q`w|RFSFs1_T zVSi1Ju5Xx^*M=N*{`x-ea#uS=4Vh&%80N{0fvziRDDa*q{qCynYw=4s`W~IvW4ZRD z_wO+Sj9XwYu;V9C@c1nAlrY~E8t$?_3l>qxXGTK$89R4|Z{VHL8+N|weE1H9^GO$^ zH;i*J1)v$!Sm)${JxI;EZ8yOSm%Lf^l9~ z#Z?eu2V*zbyl{0#l^AFbigZ(>LC?B(>Togg!x?wx4i4sA37ISRFe!-hqQN=TaJx{z zQwM7S(|mlPb#7hfbt*XdCagp=%uZ&cn(-6K03csgYvBg01?g>I70yp_(VY{ zkej8o1FQ|ND5)FMl#8{X)*=|<3lWi4tFo+{>Yn?_^){5e`3x} z>i!Sr+@wyK`{eBh*6y}CN>~KVES#A7Fi_YYgweQQTO4Q$&-&scP>VtWeES;3;!9i4 zlK46&1fAlRy(&6aaiMwP~1 zXB$u+ySj$d-DgH-S?ep>eXDWG3;QQ*Bvd!uw6pWR=@prdsd}6aAyP` z(_SPEI=s{&N^0QRz9t}a?*mJ}M4e!9NxevVWMbASSj!gY9zfSw{V>ofI9sPfkioBw zg%0k7p~7uMdD(7E*OY-ei`;rREx3(YFv2P;`(#)Ljl)0tJc!4jj5}K9*lzdcGnt85 zkj+Hb0p)#6^(TDu%DWUE4c0LC8op@~bdV1EQJ50!y9wA;r3IBEtC&EIj(jpxUey<+ zsvwdy9km(0+dL{XaO)t!7T9>h2CMb#Sk+ZT=pF^0hi1*JA$yp76w4_yTM8SE-PD~X z6!56L)S*%&-2V1)YbNu!r(y6XgQhF#2|YVDCe(z65>23 z*!?l*Hxx5YC9Mmd&SQ;#X-tZ zS2qe?1z|hqmUjk;RX*ZV$1E)0u20|ME{aTON2hX}RJ*GBM(Hu&RA~4udmnT49Lige zQ1uTeWi3+HFuXp(uJTw3RN10yH@CqDms=`$>J5))6Fr-bVxOd(8m=WcY1wfr<+QH4Jcwi<+=$I3O{&q;rE8{mDNp{hdyeL`eO7BqCqI?q)BTe-4Vqri=M@wmi~IPoVD;M? zIJAB#O5VER{ErFG+}~s^+mqQMMvVXf00v@9M??Vs0RI60puMM)00009a7bBm001r{ z001r{0eGc9b^rhX2XskIMF-^t2o?o6%GVSZ00064Nkl}nj9g=3cn*^{2`i2M`P?ZV&_wPS-jDcD4{x*nfLc#HIaDJYsH8P6ht#OQw zHRtQkH?QxLKhGPxqqwdc1Bzn&e2|q`bF3MeMIVk35y?C!0L`7sq5;fInj7miaW_oj z`n>4lKr4uAk#00O>k3M6u3+?r%@w>oI+6gmzF+w0^!EdqkZI3=WK<*tcyr8!_2x7; zkdXEwBB(5oFksyaC=iT~0YGJ8ZdeIcB-$sC32(;zI+^Fq^}IkutVKL0eRLuc6I3J? zD-b(=KN?kHU4hJqnV30w2b4H|4qm@s^v8jjVR9^@$SMF<1XYC}h64JdW6iMUATh56 z68F7my#ZiFa?h1CzLU;-(oE#$U~~y{qcVwW0cC&CCbTM`k}B|{^XATaEo!HwjgCyj zxsVxSILbymFU-KQl4CT?M9dAbYQMC(vDU7X6z=<_?{i{;xdMw!KA&@ITR|15i`VaO z71(?KmKRCY@6$u6riAsFEZjR=(U+)j@Yw|rC xKaTBPF52VZIw$LSaXbc6Q4~THfp;TU@;}m>L&kpLdwu`_002ovPDHLkV1jdt1=|1s literal 0 HcmV?d00001 diff --git a/mods/ITEMS/mcl_core/textures/mcl_core_stripped_acacia_top.png b/mods/ITEMS/mcl_core/textures/mcl_core_stripped_acacia_top.png new file mode 100644 index 0000000000000000000000000000000000000000..bd10499c811843193bf35170c6ebb4bd8cd290dd GIT binary patch literal 2025 zcmV zaB^>EX>4U6ba`-PAZ2)IW&i+q+O1b<(&Q!#{m&_K1SAm4aaioC+#tu#0|eclyJxB< zm3Fm_Wzh1TkZg1P^Y?B3!jH+a@e)(WAz1u;_L&O?$*$kJlJ)bfH+Bzx$jy1c5IJ1k zx(%1kFObV?LG&uGKjkJi)ss}w)~pKMu*?|fyrha8FFEPG$-1uiw{Y}-H=d8Bu1C*% z9|1-e=yPoNa^x(|X;^XNPp;r9^PDh=TwG(Ez4PC(GiUe!?~ESU*`jjy6AEL4P6!W- zR8I08yNS?)wQc#w1G;Ur@4t8K?w;=ZTG16BfK)IV)DC5iFcENiHw+|I2X{-Sd9Gl9M7Wc=!HshPK|%;Ij2cyPOLyxAXo_o3ILMmPUk}F*C zN>{$hja<9k?Qglm9q)AKyByY()t{`^ExLO z8LerEpmr(rj;c!dv4+6OPk~*6=21rGYSi5U3`Xf?dh6Skz|$Bw%BnE=W6JEw(q~Ml z#%+y;TG_H?4XQM7t5>H{6m${A0=YX?`b6rQXZx{iO~!v~&a89Ip2WAPxAX`ogc%3I zdO@}4hN#c1QQvHktZ`6TP~a8EFE6oWu5GU_9TXn=%})b5Ew#3NZ)NGv<@iHu&_-ii znL)XmIh3Q!w(8bX>-@qBj;RbqIQ6w)Y}vRRr<_`0GpvE}x}U$8eUZJFWOTY`&N;ix z85n!9e3-YfZwF;N7}P;jliC%iLr65T5OW+BoXAyG+ji2hTN2peWyt44wk~tVInta$ zEBT#ky)6+^rzvw*;!?w{8rm>sg#@8q8>Sbs_&B3`KZLAc^C-Nl44{(h(hy!4yzOLC z4^JwD)<-?UOQO#~6B(~Sst+~0^quDKZXe<}ZGRRZL~k``p1NDh;4ex~FDy zQUSZQ?%kT-IDCur;C~|CJFH>S*?xZ^?+g(kFK7#&IaXXt$=G)WHt$A=e zIr-5m4B|f1ibjdIMO77a4`4y<>f*COQdsnt@j0MAYfHh4hpNJ7ftFt+|1L0zWWkP? z`4g=<0p$(F?o}19smHOp9ZQ!|_h@>ijIU7bZ1v$h`Jk&v+X-{uY@F`!1tY(0XeLO~ zuFbpcVf4%hzvwkcYApt@PD1XZwbx&_f6eS~`;ir+)6RpMO8U}6NjsXQzB8Nl+fP6Hd}wxjn45nA_2JIY2>7#~00006VoOIv0RI600RN!9r;`8x z010qNS#tmYE+YT{E+YYWr9XB6000McNliru~QHb3pV>&RM=_Bwayccg-28IqbO^HK%m&FgqsuMW>R?=S1IV<_{`I8p} zEkYC-z%xNa0Eo0=7zX_LDl!IurgIph4L7O1Na)(0XkqZ)BO=(;a>xs!#hB>Nm721` z;0FNKH|x;(kQa1qkBM}6oMuV512B;WKxw7uJ2wWam}tEUkEe5OW3-Ja4`rAFz~fQE z8?+K$zU3@8mfgc$ptb+{j1nRFuw#3lUC=eth}y<}ORR}D&u`ls{u;eD`HL`buQG)u5|w`}h-Y-$k^y!V$BfS|Zq#bF;N8?_Sl z-}5k~h@g}jM|Wk7J#XZ%$Da&U9r(Jk#+5b4r+wH;05^EdHPxg;`PT1tIZ0TIW;vko%2Ce?>%kP(f2(~-Li}qW5K~w zoEuz!C26>~03h7@@0bT^8P ztis*sD#C+okPl~!z}=yX%wlB{9+(-mCS$wt>*r5Af~q1SFd8tlMPLRr%$1zy3Bbw) zz+5LEj}NvH&>%AawtXYQ&vKyV}!X>JT#^~;+!$xJ&U01AYVkRPjs!MT%qgBmZi|R&Z zR2gP4k3SfYRTzeKBZ;bfrf}g!7j8llS#AICMi7)yDC7&=}`Rwr!BrR5x+8 x?PVP7+Xi|O0VclO--xkM>qHXP&6?M)`~`88C+khq9Z3KH002ovPDHLkV1j_E3-bT~ literal 0 HcmV?d00001 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 new file mode 100644 index 0000000000000000000000000000000000000000..69d2e0bfdffc760bed2d9936723cbe5d8803207b GIT binary patch literal 681 zcmV;a0#^NrP) zKI-R>@1nIrDTSvr+S3?M^S@Wu4FH$AK@i$jFrKFg{2Tm%=?kY5+sB*CUFBPsb7vDa znWNZO7_C$qRCo3db-A0Z>|@)vI_oj@Ul0xHQt`{teTK z#nT?=^BJ31c4f)XAF^7eOeYqF!WiQ*omke(l>5g|9LpWm>BQl1KzkmSy2iihJc`1u zvxu*;h5`JiTJU9~kEAEpZexpFOc!%m7#~Q*2@p z0bMs8U88{p5nl3wBb$!)Tb#p1P`6 zVH8G;!swl6Ev9W+M1;Dj5fSntzk=rt=kC-Yt3}F(`;W}h8BNoo1vnfl1_PfYPS8p- z3_^xM$Y|Vk(@HT4BUX!)IEtwbCDVyT0MoWD`{RkGZ7KH$?k1M%P?8rpNt}@71-CZg zSng;v#fBw>h%bQ~N{7pilO@jS}ob3b~%-ykBma@{lX#==W+K-!i+SU4n=LjB=M P00000NkvXXu0mjfM+!1R literal 0 HcmV?d00001 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 new file mode 100644 index 0000000000000000000000000000000000000000..32a8bfebd2cd0b3954d8c6a0c35e28a25673e9bd GIT binary patch literal 2007 zcmV;|2PpW7P) zaB^>EX>4U6ba`-PAZ2)IW&i+q+O1bxvg{@d{AU$e0uqSFaxgYk*+G_{220G?_vBV3 zm2sUhBZFSuG(PV7>(Al-z=wTGE=n$`rsVO7HCApI6n}s2JNdZ2^@q2?!|wJ2hAH44 z?w{$>`3-jYEXYyq$J6d|S3gA^nP+tvW@N@d=M{An__mY&c2(E4_*IVnjn3<_9QUL5 z@0ihyQ{XSK<10|`_%1U_n12)+?y|lsCQ(Qj$58Rjq5j-Ew}-Fh?a`}uzNtMtTj6}t z3F*}%wUhkZyVao=Y8LtNVDug0*WQh@jB(x7wV2SUhF-uN4=aOq~C6rjCq>@W1wY17LK*FS^nq4im z*47ZT!F9vxh8e9Le1sz&a-<_4<)}yNpihrodg{5CUVA(F3@5h#na=Faa@Mn5bb(4& zyyQw(zRFdvHo&zJMjSHI$fJxp+D1)LeWFG$#YB1+)E@;Y$Ow527 zM*`w`A^<}3#LO3pktcE!GhZ2-LKvu#OmI$`hylTP5zC;B-3Phf;^rj&E8O^>kaH8d z{{uNUp;P33#q9^w&bCgJumGC7aQ4)P0b#p5;&W*|o~5QWgp9R$pNGZ~g`xziVcrQn z3A`pjjn8Gl-WGCe2#npAA&>Y?b8SI6bJU&GDXs7z)}N8t*x|i7w5TKDWu`LB^;x(Fw9yN=i5V}aIb?& z%TwRQk9P;8xx3y<8mwd;^s2QnAGfJ{t5(xSj)%o+PV)xU@6@QKUHSQ}7u~VkvejmT z;`C99;px$vAGr3K(z}!FKiN734DGU6a#;t4dMcu`lT~ui6S(<)WIajmE*Yt)+?)iD zPa~(b)OW+ybwz;8R-g|`0ZnPXO=6;ObtjKI>*Jf>#7rEHr-j7&WQ;VZ$ zQ8wJl?w;7H)h!q;$6)xy&2G2T)+CXU?g?83Y=UjCoxi#ElJ1lobkkDtnq@yW1I9DT z&dsNgo+&x-?y$i0+8m}KAb=rAe&=+lOIdr$t!;T2<+ns+BdQb=reO(Z6DG-@&37}~ zd)u+m$auc`2ws+QwRM{Y47k4F+5vQ$vm+$e9S^`LwKoSVtVP4pQ7y)@Mt2yFVRM8tRqql zl3+-FqG@R#5ekOQrgeP6w*HsV!9J=;9f1=56%FUHbwmzLpc{a`T*hld$%#2g&E#9b ziTri`-Mtkf;MU&51jeM+H+cyzma``9y_aI~cNd7riptl4fV8Jjqd=T6(&noM@U?|qiy{D4^000SaNLh0L04^f{04^f|c%?sf00007bV*G`2jv9` z6)_!v1L~Uq00G-cL_t(I%T1HXb=@!wMK3^*`mzhkHU*^rN)lTlF=RpIpX`A*0`lwU zkLrE!`EjD6^wEh3A`>%1fXqZhm}~KQo?Q3M?>}E$_ZOB~wAMfbZH@2iLRHB~tQp_; z%`ihvsVpK3K^S8o0@|%1A^>78(7ORbJyina(*gpcA81if1r(zhBCwW&2=2l0)V194<){jgK^3?!G!sgMtj#J2 z=j%l`BQk-VfvN&KJb*1!P#y(qO(GKyXU-caj?r1}d|%faWVvsf1-XM2+cp29bd_;V;khDq^!P4y^zH002ovPDHLkV1ff@Cm~v{cabNrkHfe z>G2t}`Mf5$f-xCIRpPoXp0!HgJGib#J01|Vnz)XOs%4XBoF1P6aM*vq;jqVH@moT#kmQDxMbt;Oq(q zjTWvO;CUf8w>Na+h>P=cs;XjX5=4aQ!(yvwf@)cZ3Xquk#m^rW>B1u?f8JD9Wd7kZi#l#I2!c#%kvzk z$7kIAy#-*sDe*kFwqVlLeqF7tXh#udmEnj`Rux522P-0+ot$qU`t$Ues>)*06?vZF zI1aylU(=3T9QJwyzDKrR6GttUi9uD#)+vq%2zaXCID!Z~7Q3}m5|fgcbT5B0oncj} dc{N!r{09N8D$|RsG+h7y002ovPDHLkV1nVIG|vD4 literal 0 HcmV?d00001 diff --git a/mods/ITEMS/mcl_core/textures/mcl_core_stripped_jungle_side.png b/mods/ITEMS/mcl_core/textures/mcl_core_stripped_jungle_side.png new file mode 100644 index 0000000000000000000000000000000000000000..c656696558567389d95946817c7f4eeaa03f6d21 GIT binary patch literal 650 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 IM6N<$f@A3O?EnA( literal 0 HcmV?d00001 diff --git a/mods/ITEMS/mcl_core/textures/mcl_core_stripped_oak_top.png b/mods/ITEMS/mcl_core/textures/mcl_core_stripped_oak_top.png new file mode 100644 index 0000000000000000000000000000000000000000..e060862e7a66b485affc10e0f6d74f20bdc2b298 GIT binary patch literal 729 zcmV;~0w(>5P) zK~y-)Rg+&+(@+q_e|wXr3GGnpGy>BRWspJCXL)k;gZNGSdc64OQ9ux>B9%V@N=log zZF1L#v{m+H@9fN;yL--A`SAX&A^_kxE&_;@1qICX4WO!6Ys;*Ps>Kx%0?)xQf~r#W zeLSy9HqJpOtUYS*^C}^zdW^>zX_BF;jPim>A-G}$#|VDlv)OI}5H@N=@sQ)o1kZIa z6uf@cB8rD}qLe%@u>F|a7PyXa0PZ#K?44q95X~_r0N|oGV5wOL;K#)f#~6$#2EY$| z_Pc!mcJ@wr+^VzHUPMIrb)6w197hRJJOp5Usm5ZX0V0?gVO#A*c2BOE^zDxjE3j>TX zCBQ7aio^PHo#lshF5{HjyNs{DZ)w*3Qf6bwi-Jy+a?tGo;LgxauVRkQZt<%DR+WAn zQ&_kgBz*pHg@~|wa)mJlwK?%%^bg?Uw=))em-XcbIF6xN_xXI3Q?)s@1)ry3ox^UA zm#Zy0Q976O)4_SU!uInOUaqz{?@t&_a+1-6cdyz2JZaVDT+GIf;vxIpKB`k0J5h=; z!uCeUpWcY$%Y?I=J1P~gWPIw6*}7q)hVNBSz*SYo;|vJ6=nZ)DVuiw5j0lI*9}l`c zI#GIWihg{HT3Z5SX~x%+9$W3k+$;b=u)vqY3tn$7&ujmKSZhlX^TJYODM#m}CuXr0 z21GY8ohY4~3Lr}}a;qqcYprFhf-y3cW;6$gZsL0xps*IE=M2JMna@6R%Q>@N00000 LNkvXXu0mjf^cP7D literal 0 HcmV?d00001 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 new file mode 100644 index 0000000000000000000000000000000000000000..55cb4cec3fdd8d2c466b30ddbf75a2aa6748b050 GIT binary patch literal 2054 zcmV+h2>JJkP) zaB^>EX>4U6ba`-PAZ2)IW&i+q+O1Y?lI$i7{Ld+J1OyTv$HCaH$_;Y-G$7#_@5`%7 zD&yTTBd{d8Tf*-8>(AT$flnYG97`^#rsVPA$~80$ieH~~C(rX+e|Q^w+1;K9Fh$(s z`k5|W-(Z*Lfy`<@zU?k|^;6W5c~*yUL=G6}x}uI^Sa#CiuIh7*KenU)cMo$~jy3iE z%^6^v0)H{Ma7Bt9-(^IJaw_V5MX9=)*hP3`d;3g?q9 zNH2`kPV#H)CPFXPEb`X`-9G!z&nI^GS?>EiaVA4|A0{srSa zuZpW+iye%eVDrG$9aRcI`zEH78r^iwd#8>RIb0#*9zq8P!&YJrHS{YEFW&AJKc68rEx%_D3t28K|>HrWSwjddbV8ADe zLWz71Ark?|0)84YhseVL21q2F%E z>EcVSbmgmD^=db?cE_7dZ7{}jU4B@DIcIZ0qn*g$ z42%UPFrEhk5Of%v`9jQLFgG~!HJ~UYfHjgq&PjtYFvu4LxoLCvF!x*DobbQmE&LO6 zZcz7sFy{t!%G^)he!<$==7|y~L8A%>ras*oo0_7|v7|Luz|=G~hnib18cOXl|F@*h%652gizQf!y1sk)Iyd#K_PS3Nz-W^4M3L@yA|<3z&JOF&<`kinh@w% zlU(`>fe~N=<`BUkU{=6lpznNen%El6%XhUTE)xeg_S2?MVT3-{h(9*c78Iz9b0z3E zF^UM)bh&B5X0kHsPebX}LAeanvK*wa6HO~zXLe-BG?}BZ=S4>=enUfPLlRYKezO<% z*6y{TAf>;s;S~p)I1KleHQ;0GNX(5fdc85qob^$Os>h&Y;M88*MnS5EaPF%{lM7o{ zJL&d@0AAPKmf&m4Udv^4NL^jTIMC-hYgVmPx-HTBl~r9zaFd154JC`c@0W3BY*IX} zuKmtRG4j3LMwucww8@rEC`)K2zFCC9ig3Y;m(gw#GLG?}DbA+)QxT;5u5{{dCrWOB z^Rr|RL&PM7-^y#XGWJq;%esnN`6-rxs+Gng|G2YimX%yqXIh;;y349k2fUk?Dr&rQ zJYZQZZm_zl-vL!NYUB0pV!QHcYVR6>YjvBFRHv%Ifgu)bm+fX;rPlo}Tk9B!)v<$i zwldPwD6Da7i+U`kL)4=#UJ`TDbbmKA)Ym>Ik`1(xHQG=I-P`CQr+cxr!P{Mxt;%tN z?Zd}v$Ql3@JC6L*W)EFe!d8Ih;44*Q(ttL!aQ1Umxz`VFc8z(9SvQhDk2z%FzLSo- z9ha>+DJ-!iTh~HNS{AGnBsj8+UruFA_Zh!~g&Q z24YJ`L;(K){{a7>y{D4^000SaNLh0L04^f{04^f|c%?sf00007bV*G`2jv9`6(<<% z@vFlC00G)bL_t(I%QcfrZX7WTL|>6q_c%t9!(^Q^U&Tz3Z8Sc0Q4bQc>R`FVen=#yQGwcW_+ySUA zK3^9!2=ST|H*tgrbIimM&b1bw*QByANkAjO%qhTKR24{MH??M&ie}2i;qWq>a1_GZDvd#%&Q261YKj^PGz?m@Db-&4Z@c+eL2)s~VGl zy7j|aMOW`kNUTbR`Ig6ie`arphZ`%4DuAN3?aO=XoC^V07ONVUm|0Zc!&VimimYO# za1Uk`nMF0sE+o4fU}i)2cA|Sv?yrm6`Y@+=rZ+&ExoXSF1qQ2Pg^cS}?}M$A>50u4e4J0V6`wcFZJ@6uxYC7-xlUOk7O@zb+<(kg=)@j0o*8 z^2?$Epv)Y>SypvP$Q<4Z&KiseWX`gza^#ujt{cvDlX5dHh)MbB3hLYwlLCUX#sZ)~ zQe~Pu1fe;01aG-(4i_yZndj-$F^q|%kb8$QMyPU6W)0i6<91mStYLHL$c&-NJa3jY zuNM`Ee!yG9^|T<*EQ;dBm@YI0;qluMfJtyX?2dSM23}7~L?CzWnLZTW;j9r3{lNY- z0?-_LM4;^=ni6AD5V-%gp)NcEY}$@~Ohi=-z(aFDRSDj3Rb>3}+YLo#F#^F`Qc^N! zXxg5;racQ;o|hQ~UN382ROc)R@ab#A`gVnNmi6t5c^R0Of!td}V2FwPrllVvCPn3O ze*$1uWHiSPo|pXGU(P0gvVL>T&9q=q)CL&PEQ)b`BFz_#t!wjIB}S}>-BD*W?#i?xP2c>dd+cu^HR?AnVH zZj2Fc4WAx&)MduJ4BS5*E~!hZ3`2zA0od$MY}=kwe|F6Q^kXFVj^p$2d(F$htE-X^ z_YKP`XVZ4Ag)X literal 0 HcmV?d00001 diff --git a/mods/ITEMS/mcl_crafting_table/API.md b/mods/ITEMS/mcl_crafting_table/API.md new file mode 100644 index 000000000..45aa0c9ce --- /dev/null +++ b/mods/ITEMS/mcl_crafting_table/API.md @@ -0,0 +1,6 @@ +# mcl_crafting_table +Add a node which allow players to craft more complex things. + +## mcl_crafting_table.show_crafting_form(player) +Show the crafting form to a player. +Used in the node registration, but can be used by external mods. \ No newline at end of file diff --git a/mods/ITEMS/mcl_crafting_table/depends.txt b/mods/ITEMS/mcl_crafting_table/depends.txt deleted file mode 100644 index 97aafc582..000000000 --- a/mods/ITEMS/mcl_crafting_table/depends.txt +++ /dev/null @@ -1,3 +0,0 @@ -mcl_init -mcl_formspec -mcl_sounds diff --git a/mods/ITEMS/mcl_crafting_table/description.txt b/mods/ITEMS/mcl_crafting_table/description.txt deleted file mode 100644 index 5f2a79786..000000000 --- a/mods/ITEMS/mcl_crafting_table/description.txt +++ /dev/null @@ -1 +0,0 @@ -Adds a crafting table. diff --git a/mods/ITEMS/mcl_crafting_table/init.lua b/mods/ITEMS/mcl_crafting_table/init.lua index 09c4838cd..eae503eeb 100644 --- a/mods/ITEMS/mcl_crafting_table/init.lua +++ b/mods/ITEMS/mcl_crafting_table/init.lua @@ -1,4 +1,35 @@ -local S = minetest.get_translator("mcl_crafting_table") +local S = minetest.get_translator(minetest.get_current_modname()) +local formspec_escape = minetest.formspec_escape +local show_formspec = minetest.show_formspec +local C = minetest.colorize +local text_color = "#313131" +local itemslot_bg = mcl_formspec.get_itemslot_bg + +mcl_crafting_table = {} + +function mcl_crafting_table.show_crafting_form(player) + player:get_inventory():set_width("craft", 3) + player:get_inventory():set_size("craft", 9) + + show_formspec(player:get_player_name(), "main", + "size[9,8.75]".. + "image[4.7,1.5;1.5,1;gui_crafting_arrow.png]".. + "label[0,4;"..formspec_escape(C(text_color, S("Inventory"))).."]".. + "list[current_player;main;0,4.5;9,3;9]".. + itemslot_bg(0,4.5,9,3).. + "list[current_player;main;0,7.74;9,1;]".. + itemslot_bg(0,7.74,9,1).. + "label[1.75,0;"..formspec_escape(C(text_color, S("Crafting"))).."]".. + "list[current_player;craft;1.75,0.5;3,3;]".. + itemslot_bg(1.75,0.5,3,3).. + "list[current_player;craftpreview;6.1,1.5;1,1;]".. + itemslot_bg(6.1,1.5,1,1).. + "image_button[0.75,1.5;1,1;craftguide_book.png;__mcl_craftguide;]".. + "tooltip[__mcl_craftguide;"..formspec_escape(S("Recipe book")).."]".. + "listring[current_player;main]".. + "listring[current_player;craft]" + ) +end minetest.register_node("mcl_crafting_table:crafting_table", { description = S("Crafting Table"), @@ -12,27 +43,9 @@ minetest.register_node("mcl_crafting_table:crafting_table", { paramtype2 = "facedir", groups = {handy=1,axey=1, deco_block=1, material_wood=1,flammable=-1}, on_rightclick = function(pos, node, player, itemstack) - player:get_inventory():set_width("craft", 3) - player:get_inventory():set_size("craft", 9) - - local form = "size[9,8.75]".. - "image[4.7,1.5;1.5,1;gui_crafting_arrow.png]".. - "label[0,4;"..minetest.formspec_escape(minetest.colorize("#313131", S("Inventory"))).."]".. - "list[current_player;main;0,4.5;9,3;9]".. - mcl_formspec.get_itemslot_bg(0,4.5,9,3).. - "list[current_player;main;0,7.74;9,1;]".. - mcl_formspec.get_itemslot_bg(0,7.74,9,1).. - "label[1.75,0;"..minetest.formspec_escape(minetest.colorize("#313131", S("Crafting"))).."]".. - "list[current_player;craft;1.75,0.5;3,3;]".. - mcl_formspec.get_itemslot_bg(1.75,0.5,3,3).. - "list[current_player;craftpreview;6.1,1.5;1,1;]".. - mcl_formspec.get_itemslot_bg(6.1,1.5,1,1).. - "image_button[0.75,1.5;1,1;craftguide_book.png;__mcl_craftguide;]".. - "tooltip[__mcl_craftguide;"..minetest.formspec_escape(S("Recipe book")).."]".. - "listring[current_player;main]".. - "listring[current_player;craft]" - - minetest.show_formspec(player:get_player_name(), "main", form) + if not player:get_player_control().sneak then + mcl_crafting_table.show_crafting_form(player) + end end, sounds = mcl_sounds.node_sound_wood_defaults(), _mcl_blast_resistance = 2.5, diff --git a/mods/ITEMS/mcl_crafting_table/locale/mcl_crafting_table.pl.tr b/mods/ITEMS/mcl_crafting_table/locale/mcl_crafting_table.pl.tr new file mode 100644 index 000000000..aed33bf6c --- /dev/null +++ b/mods/ITEMS/mcl_crafting_table/locale/mcl_crafting_table.pl.tr @@ -0,0 +1,8 @@ +# textdomain: mcl_crafting_table +Crafting Table=Stół rzemieślniczy +A crafting table is a block which grants you access to a 3×3 crafting grid which allows you to perform advanced crafts.=Stół rzemieślniczy jest blokiem, który daje dostęp do siatki wytwarzania rozmiaru 3×3, co daje dostęp do zaawansowanego wytwarzania. +Rightclick the crafting table to access the 3×3 crafting grid.=Kliknij prawym przyciskiem na stół rzemieślniczy aby zyskać dostęp do siatki wytwarzania rozmiaru 3×3. +Recipe book=Księga receptur +Crafting=Wytwarzanie +Inventory=Ekwipunek +3×3 crafting grid=Siatka wytwarzania 3×3 diff --git a/mods/ITEMS/mcl_crafting_table/mod.conf b/mods/ITEMS/mcl_crafting_table/mod.conf index db5ab14a1..149d1c982 100644 --- a/mods/ITEMS/mcl_crafting_table/mod.conf +++ b/mods/ITEMS/mcl_crafting_table/mod.conf @@ -1 +1,3 @@ name = mcl_crafting_table +description = Adds a crafting table. +depends = mcl_init, mcl_formspec, mcl_sounds, mcl_colors diff --git a/mods/ITEMS/mcl_doors/api_doors.lua b/mods/ITEMS/mcl_doors/api_doors.lua index 07a5623f3..7d00c4c69 100644 --- a/mods/ITEMS/mcl_doors/api_doors.lua +++ b/mods/ITEMS/mcl_doors/api_doors.lua @@ -1,10 +1,11 @@ -local S = minetest.get_translator("mcl_doors") +local S = minetest.get_translator(minetest.get_current_modname()) +local minetest_get_meta = minetest.get_meta -- This helper function calls on_place_node callbacks. local function on_place_node(place_to, newnode, placer, oldnode, itemstack, pointed_thing) -- Run script hook - for _, callback in ipairs(minetest.registered_on_placenodes) do + for _, callback in pairs(minetest.registered_on_placenodes) do -- Deep-copy pos, node and pointed_thing because callback can modify them local place_to_copy = {x = place_to.x, y = place_to.y, z = place_to.z} local newnode_copy = @@ -164,14 +165,14 @@ function mcl_doors:register_door(name, def) end if def.only_placer_can_open then - local meta = minetest.get_meta(pt) + local meta = minetest_get_meta(pt) meta:set_string("doors_owner", "") - meta = minetest.get_meta(pt2) + meta = minetest_get_meta(pt2) meta:set_string("doors_owner", "") end - local meta1 = minetest.get_meta(pt) - local meta2 = minetest.get_meta(pt2) + local meta1 = minetest_get_meta(pt) + local meta2 = minetest_get_meta(pt2) -- save mirror state for the correct door if left_node.name:sub(1, #name) == name then meta1:set_int("is_mirrored", 1) @@ -198,9 +199,9 @@ function mcl_doors:register_door(name, def) local tb = def.tiles_bottom local function on_open_close(pos, dir, check_name, replace, replace_dir) - local meta1 = minetest.get_meta(pos) + local meta1 = minetest_get_meta(pos) pos.y = pos.y+dir - local meta2 = minetest.get_meta(pos) + local meta2 = minetest_get_meta(pos) -- if name of other door is not the same as check_name -> return if not minetest.get_node(pos).name == check_name then @@ -254,7 +255,7 @@ function mcl_doors:register_door(name, def) if not def.only_placer_can_open then return true end - local meta = minetest.get_meta(pos) + local meta = minetest_get_meta(pos) local pn = player:get_player_name() return meta:get_string("doors_owner") == pn end @@ -271,6 +272,7 @@ function mcl_doors:register_door(name, def) minetest.register_node(name.."_b_1", { tiles = {"blank.png", tt[2].."^[transformFXR90", tb[2], tb[2].."^[transformFX", tb[1], tb[1].."^[transformFX"}, + use_texture_alpha = minetest.features.use_texture_alpha_string_modes and "clip" or true, paramtype = "light", paramtype2 = "facedir", sunlight_propagates = true, @@ -291,10 +293,15 @@ function mcl_doors:register_door(name, def) sounds = def.sounds, after_destruct = function(bottom, oldnode) - minetest.add_item(bottom, name) - local top = { x = bottom.x, y = bottom.y + 1, z = bottom.z } - if minetest.get_node(bottom).name ~= name.."_b_2" and minetest.get_node(top).name == name.."_t_1" then - minetest.remove_node(top) + local meta_bottom = minetest_get_meta(bottom) + if meta_bottom:get_int("rotation") == 1 then + meta_bottom:set_int("rotation", 0) + else + minetest.add_item(bottom, name) + local top = { x = bottom.x, y = bottom.y + 1, z = bottom.z } + if minetest.get_node(bottom).name ~= name.."_b_2" and minetest.get_node(top).name == name.."_t_1" then + minetest.remove_node(top) + end end end, @@ -304,13 +311,19 @@ function mcl_doors:register_door(name, def) action_on = on_mesecons_signal_open, }}, - on_rotate = function(pos, node, user, mode, param2) + on_rotate = function(bottom, node, user, mode, param2) if mode == screwdriver.ROTATE_FACE then - minetest.remove_node(pos) - node.param2 = screwdriver.rotate.facedir(pos, node, mode) - minetest.set_node(pos, node) + local meta_bottom = minetest_get_meta(bottom) + meta_bottom:set_int("rotation", 1) + node.param2 = screwdriver.rotate.facedir(bottom, node, mode) + minetest.swap_node(bottom, node) + + local top = {x=bottom.x,y=bottom.y+1,z=bottom.z} + local meta_top = minetest_get_meta(top) + meta_top:set_int("rotation", 1) node.name = name .."_t_1" - minetest.set_node({x=pos.x,y=pos.y+1,z=pos.z}, node) + minetest.swap_node(top, node) + return true end return false @@ -331,6 +344,7 @@ function mcl_doors:register_door(name, def) minetest.register_node(name.."_t_1", { tiles = {tt[2].."^[transformR90", "blank.png", tt[2], tt[2].."^[transformFX", tt[1], tt[1].."^[transformFX"}, + use_texture_alpha = minetest.features.use_texture_alpha_string_modes and "clip" or true, paramtype = "light", paramtype2 = "facedir", sunlight_propagates = true, @@ -351,9 +365,14 @@ function mcl_doors:register_door(name, def) sounds = def.sounds, after_destruct = function(top, oldnode) - local bottom = { x = top.x, y = top.y - 1, z = top.z } - if minetest.get_node(top).name ~= name.."_t_2" and minetest.get_node(bottom).name == name.."_b_1" and oldnode.name == name.."_t_1" then - minetest.dig_node(bottom) + local meta_top = minetest_get_meta(top) + if meta_top:get_int("rotation") == 1 then + meta_top:set_int("rotation", 0) + else + local bottom = { x = top.x, y = top.y - 1, z = top.z } + if minetest.get_node(top).name ~= name.."_t_2" and minetest.get_node(bottom).name == name.."_b_1" and oldnode.name == name.."_t_1" then + minetest.dig_node(bottom) + end end end, @@ -364,13 +383,19 @@ function mcl_doors:register_door(name, def) rules = mesecon.rules.flat, }}, - on_rotate = function(pos, node, user, mode, param2) + on_rotate = function(top, node, user, mode, param2) if mode == screwdriver.ROTATE_FACE then - minetest.remove_node(pos) - node.param2 = screwdriver.rotate.facedir(pos, node, mode) - minetest.set_node(pos, node) + local meta_top = minetest_get_meta(top) + meta_top:set_int("rotation", 1) + node.param2 = screwdriver.rotate.facedir(top, node, mode) + minetest.swap_node(top, node) + + local bottom = {x=top.x,y=top.y-1,z=top.z} + local meta_bottom = minetest_get_meta(bottom) + meta_bottom:set_int("rotation", 1) node.name = name .."_b_1" - minetest.set_node({x=pos.x,y=pos.y-1,z=pos.z}, node) + minetest.swap_node(bottom, node) + return true end return false @@ -391,6 +416,7 @@ function mcl_doors:register_door(name, def) minetest.register_node(name.."_b_2", { tiles = {"blank.png", tt[2].."^[transformFXR90", tb[2].."^[transformI", tb[2].."^[transformFX", tb[1].."^[transformFX", tb[1]}, + use_texture_alpha = minetest.features.use_texture_alpha_string_modes and "clip" or true, paramtype = "light", paramtype2 = "facedir", sunlight_propagates = true, @@ -411,10 +437,15 @@ function mcl_doors:register_door(name, def) sounds = def.sounds, after_destruct = function(bottom, oldnode) - minetest.add_item(bottom, name) - local top = { x = bottom.x, y = bottom.y + 1, z = bottom.z } - if minetest.get_node(bottom).name ~= name.."_b_1" and minetest.get_node(top).name == name.."_t_2" then - minetest.remove_node(top) + local meta_bottom = minetest_get_meta(bottom) + if meta_bottom:get_int("rotation") == 1 then + meta_bottom:set_int("rotation", 0) + else + local top = { x = bottom.x, y = bottom.y + 1, z = bottom.z } + minetest.add_item(bottom, name) + if minetest.get_node(bottom).name ~= name.."_b_1" and minetest.get_node(top).name == name.."_t_2" then + minetest.remove_node(top) + end end end, @@ -424,13 +455,19 @@ function mcl_doors:register_door(name, def) action_off = on_mesecons_signal_close, }}, - on_rotate = function(pos, node, user, mode, param2) + on_rotate = function(bottom, node, user, mode, param2) if mode == screwdriver.ROTATE_FACE then - minetest.remove_node(pos) - node.param2 = screwdriver.rotate.facedir(pos, node, mode) - minetest.set_node(pos, node) + local meta_bottom = minetest_get_meta(bottom) + meta_bottom:set_int("rotation", 1) + node.param2 = screwdriver.rotate.facedir(bottom, node, mode) + minetest.swap_node(bottom, node) + + local top = {x=bottom.x,y=bottom.y+1,z=bottom.z} + local meta_top = minetest_get_meta(top) + meta_top:set_int("rotation", 1) node.name = name .."_t_2" - minetest.set_node({x=pos.x,y=pos.y+1,z=pos.z}, node) + minetest.swap_node(top, node) + return true end return false @@ -451,6 +488,7 @@ function mcl_doors:register_door(name, def) minetest.register_node(name.."_t_2", { tiles = {tt[2].."^[transformR90", "blank.png", tt[2].."^[transformI", tt[2].."^[transformFX", tt[1].."^[transformFX", tt[1]}, + use_texture_alpha = minetest.features.use_texture_alpha_string_modes and "clip" or true, paramtype = "light", paramtype2 = "facedir", sunlight_propagates = true, @@ -471,9 +509,14 @@ function mcl_doors:register_door(name, def) sounds = def.sounds, after_destruct = function(top, oldnode) - local bottom = { x = top.x, y = top.y - 1, z = top.z } - if minetest.get_node(top).name ~= name.."_t_1" and minetest.get_node(bottom).name == name.."_b_2" and oldnode.name == name.."_t_2" then - minetest.dig_node(bottom) + local meta_top = minetest_get_meta(top) + if meta_top:get_int("rotation") == 1 then + meta_top:set_int("rotation", 0) + else + local bottom = { x = top.x, y = top.y - 1, z = top.z } + if minetest.get_node(top).name ~= name.."_t_1" and minetest.get_node(bottom).name == name.."_b_2" and oldnode.name == name.."_t_2" then + minetest.dig_node(bottom) + end end end, @@ -484,13 +527,19 @@ function mcl_doors:register_door(name, def) rules = mesecon.rules.flat, }}, - on_rotate = function(pos, node, user, mode, param2) + on_rotate = function(top, node, user, mode, param2) if mode == screwdriver.ROTATE_FACE then - minetest.remove_node(pos) - node.param2 = screwdriver.rotate.facedir(pos, node, mode) - minetest.set_node(pos, node) + local meta_top = minetest_get_meta(top) + meta_top:set_int("rotation", 1) + node.param2 = screwdriver.rotate.facedir(top, node, mode) + minetest.swap_node(top, node) + + local bottom = {x=top.x,y=top.y-1,z=top.z} + local meta_bottom = minetest_get_meta(bottom) + meta_bottom:set_int("rotation", 1) node.name = name .."_b_2" - minetest.set_node({x=pos.x,y=pos.y-1,z=pos.z}, node) + minetest.swap_node(bottom, node) + return true end return false diff --git a/mods/ITEMS/mcl_doors/api_trapdoors.lua b/mods/ITEMS/mcl_doors/api_trapdoors.lua index a7ca6cb15..3d2a8e891 100644 --- a/mods/ITEMS/mcl_doors/api_trapdoors.lua +++ b/mods/ITEMS/mcl_doors/api_trapdoors.lua @@ -1,4 +1,4 @@ -local S = minetest.get_translator("mcl_doors") +local S = minetest.get_translator(minetest.get_current_modname()) -- Wrapper around mintest.pointed_thing_to_face_pos. local function get_fpos(placer, pointed_thing) @@ -98,13 +98,11 @@ function mcl_doors:register_trapdoor(name, def) if not usagehelp and not def.only_redstone_can_open then usagehelp = S("To open or close this trapdoor, rightclick it or send a redstone signal to it.") end - if not tt_help then - if def.only_redstone_can_open then - tt_help = S("Openable by redstone power") - else - tt_help = S("Openable by players and redstone power") - end - end + if def.only_redstone_can_open then + tt_help = S("Openable by redstone power") + else + tt_help = S("Openable by players and redstone power") + end -- Closed trapdoor @@ -130,6 +128,7 @@ function mcl_doors:register_trapdoor(name, def) _doc_items_usagehelp = usagehelp, drawtype = "nodebox", tiles = tiles_closed, + use_texture_alpha = minetest.features.use_texture_alpha_string_modes and "clip" or true, inventory_image = def.inventory_image, wield_image = def.wield_image, is_ground_content = false, @@ -163,7 +162,7 @@ function mcl_doors:register_trapdoor(name, def) local fpos = get_fpos(placer, pointed_thing) - local origname = itemstack:get_name() + --local origname = itemstack:get_name() if p0.y - 1 == p1.y or (fpos > 0 and fpos < 0.5) or (fpos < -0.5 and fpos > -0.999999999) then param2 = param2 + 20 @@ -197,6 +196,7 @@ function mcl_doors:register_trapdoor(name, def) minetest.register_node(name.."_open", { drawtype = "nodebox", tiles = tiles_open, + use_texture_alpha = minetest.features.use_texture_alpha_string_modes and "clip" or true, is_ground_content = false, paramtype = "light", paramtype2 = "facedir", diff --git a/mods/ITEMS/mcl_doors/depends.txt b/mods/ITEMS/mcl_doors/depends.txt deleted file mode 100644 index e2ae3cf4b..000000000 --- a/mods/ITEMS/mcl_doors/depends.txt +++ /dev/null @@ -1,5 +0,0 @@ -mcl_core -mcl_sounds -doc? -screwdriver? -mesecons diff --git a/mods/ITEMS/mcl_doors/locale/mcl_doors.de.tr b/mods/ITEMS/mcl_doors/locale/mcl_doors.de.tr index 03be49a68..be88513cb 100644 --- a/mods/ITEMS/mcl_doors/locale/mcl_doors.de.tr +++ b/mods/ITEMS/mcl_doors/locale/mcl_doors.de.tr @@ -16,9 +16,9 @@ Birch Trapdoor=Birkenfalltür Spruce Trapdoor=Fichtenfalltür Dark Oak Trapdoor=Schwarzeichenfalltür Jungle Trapdoor=Dschungelfalltür -Wooden trapdoors are horizontal barriers which can be opened and closed by hand or a redstone signal. They occupy the upper or lower part of a block, depending on how they have been placed. When open, they can be climbed like a ladder.=Holzfalltüren sind horizontale Barrieren, die von Hand oder mit einem Redstone-Signal geöffnet oder geschlossen werden können. Sie belegen den oberen oder unteren Teil eines Blocks, je nach dem, wie sie platziert wurden. Wenn geöffnet, können sie wie eine Leiter erklommen werden. +Wooden trapdoors are horizontal barriers which can be opened and closed by hand or a redstone signal. They occupy the upper or lower part of a block, depending on how they have been placed. When open, they can be climbed like a ladder.=Holzfalltüren sind horizontale Barrieren, die von Hand oder mit einem Redstone-Signal geöffnet oder geschlossen werden können. Sie belegen den oberen oder unteren Teil eines Blocks, je nachdem, wie sie platziert wurden. Wenn geöffnet, können sie wie eine Leiter erklommen werden. To open or close the trapdoor, rightclick it or send a redstone signal to it.=Um die Falltür zu öffnen oder zu schließen, rechtsklicken Sie sie oder schicken Sie ein Redstone-Signal zu ihr. Iron Trapdoor=Eisenfalltür -Iron trapdoors are horizontal barriers which can only be opened and closed by redstone signals, but not by hand. They occupy the upper or lower part of a block, depending on how they have been placed. When open, they can be climbed like a ladder.=Eisenfalltüren sind horizontale Barrieren, die nur mit einem Redstone-Signal geöffnet oder geschlossen werden können, nicht von Hand. Sie belegen den oberen oder unteren Teil eines Blocks, je nach dem, wie sie platziert wurden. Wenn geöffnet, können sie wie eine Leiter erklommen werden. +Iron trapdoors are horizontal barriers which can only be opened and closed by redstone signals, but not by hand. They occupy the upper or lower part of a block, depending on how they have been placed. When open, they can be climbed like a ladder.=Eisenfalltüren sind horizontale Barrieren, die nur mit einem Redstone-Signal geöffnet oder geschlossen werden können, nicht von Hand. Sie belegen den oberen oder unteren Teil eines Blocks, je nachdem, wie sie platziert wurden. Wenn geöffnet, können sie wie eine Leiter erklommen werden. Openable by players and redstone power=Zu öffnen von Spielern und Redstoneenergie Openable by redstone power=Zu öffnen von Redstoneenergie diff --git a/mods/ITEMS/mcl_doors/locale/mcl_doors.pl.tr b/mods/ITEMS/mcl_doors/locale/mcl_doors.pl.tr new file mode 100644 index 000000000..e26c5861a --- /dev/null +++ b/mods/ITEMS/mcl_doors/locale/mcl_doors.pl.tr @@ -0,0 +1,24 @@ +# textdomain: mcl_doors +Wooden doors are 2-block high barriers which can be opened or closed by hand and by a redstone signal.=Drewniane drzwi są blokami o wysokości 2, które mogą być otworzone i zamknięte ręcznie bądź przez zasilenie czerwienitem. +To open or close a wooden door, rightclick it or supply its lower half with a redstone signal.=Aby otworzyć lub zamknąć drewniane drzwi, kliknij je prawym przyciskiem bądź zasil ich dolną połowę czerwienitem. +Oak Door=Dębowe drzwi +Acacia Door=Akacjowe drzwi +Birch Door=Brzozowe drzwi +Dark Oak Door=Ciemno-dębowe drzwi +Jungle Door=Tropikalne drzwi +Spruce Door=Świerkowe drzwi +Iron Door=Żelazne drzwi +Iron doors are 2-block high barriers which can only be opened or closed by a redstone signal, but not by hand.=Żelazne drzwi są blokami o wysokości dwa, które mogą być otwarte lub zamknięte przez zasilanie czerwienitem, ale nie ręcznie. +To open or close an iron door, supply its lower half with a redstone signal.=Aby otworzyć lub zamknąć żelazne drzwi zasil ich dolną część czerwienitem. +Oak Trapdoor=Dębowa klapa +Acacia Trapdoor=Akacjowa klapa +Birch Trapdoor=Brzozowa klapa +Spruce Trapdoor=Świerkowa klapa +Dark Oak Trapdoor=Ciemno-dębowa klapa +Jungle Trapdoor=Tropikalna klapa +Wooden trapdoors are horizontal barriers which can be opened and closed by hand or a redstone signal. They occupy the upper or lower part of a block, depending on how they have been placed. When open, they can be climbed like a ladder.=Drewniane klapy są poziomymi barierami, które mogą być otwarte i zamknięte ręcznie bądź przez zasilenie czerwienitem. Zajmują główną lub dolną część bloku w zależności od tego jak zostaną postawione. Gdy są otwarte można się po nich wspinać jak po drabinie. +To open or close the trapdoor, rightclick it or send a redstone signal to it.=Aby otworzyć lub zamknąć drewniane klapy, kliknij je prawym przyciskiem bądź zasil ich dolną połowę czerwienitem. +Iron Trapdoor=Żelazna klapa +Iron trapdoors are horizontal barriers which can only be opened and closed by redstone signals, but not by hand. They occupy the upper or lower part of a block, depending on how they have been placed. When open, they can be climbed like a ladder.=Żelazne klapy są poziomymi barierami, które mogą być otwarte i zamknięte tylko przez zasilenie czerwienitem, ale nie ręcznie. Zajmują główną lub dolną część bloku w zależności od tego jak zostaną postawione. Gdy są otwarte można się po nich wspinać jak po drabinie. +Openable by players and redstone power=Mogą być otworzone przez graczy i zasilanie czerwienitem +Openable by redstone power=Mogą być otworzone przez zasilanie czerwienitem diff --git a/mods/ITEMS/mcl_doors/mod.conf b/mods/ITEMS/mcl_doors/mod.conf index d504e8497..ed2b094a8 100644 --- a/mods/ITEMS/mcl_doors/mod.conf +++ b/mods/ITEMS/mcl_doors/mod.conf @@ -1 +1,3 @@ name = mcl_doors +depends = mcl_core, mcl_sounds, mesecons +optional_depends = doc, screwdriver diff --git a/mods/ITEMS/mcl_doors/register.lua b/mods/ITEMS/mcl_doors/register.lua index 2ffd4b245..c998f6538 100644 --- a/mods/ITEMS/mcl_doors/register.lua +++ b/mods/ITEMS/mcl_doors/register.lua @@ -1,4 +1,4 @@ -local S = minetest.get_translator("mcl_doors") +local S = minetest.get_translator(minetest.get_current_modname()) --[[ Doors ]] @@ -260,9 +260,9 @@ mcl_doors:register_trapdoor("mcl_doors:iron_trapdoor", { }) minetest.register_craft({ - output = 'mcl_doors:iron_trapdoor', + output = "mcl_doors:iron_trapdoor", recipe = { - {'mcl_core:iron_ingot', 'mcl_core:iron_ingot'}, - {'mcl_core:iron_ingot', 'mcl_core:iron_ingot'}, + {"mcl_core:iron_ingot", "mcl_core:iron_ingot"}, + {"mcl_core:iron_ingot", "mcl_core:iron_ingot"}, } }) diff --git a/mods/ITEMS/mcl_dye/depends.txt b/mods/ITEMS/mcl_dye/depends.txt deleted file mode 100644 index 83185405e..000000000 --- a/mods/ITEMS/mcl_dye/depends.txt +++ /dev/null @@ -1,4 +0,0 @@ -mcl_core -mcl_flowers -mcl_mobitems -mcl_cocoas diff --git a/mods/ITEMS/mcl_dye/init.lua b/mods/ITEMS/mcl_dye/init.lua index e84e75d91..b9b5d92ac 100644 --- a/mods/ITEMS/mcl_dye/init.lua +++ b/mods/ITEMS/mcl_dye/init.lua @@ -7,13 +7,16 @@ -- Note: As this uses basecolor_*, you'd need 9 of these. -- minetest.register_craft({ -- type = "shapeless", --- output = ':item_yellow', --- recipe = {':item_no_color', 'group:basecolor_yellow'}, +-- output = ":item_yellow", +-- recipe = {":item_no_color", "group:basecolor_yellow"}, -- }) mcl_dye = {} -local S = minetest.get_translator("mcl_dye") +local S = minetest.get_translator(minetest.get_current_modname()) + +local math = math +local string = string -- Other mods can use these for looping through available colors mcl_dye.basecolors = {"white", "grey", "black", "red", "yellow", "green", "cyan", "blue", "magenta"} @@ -94,7 +97,7 @@ for d=1, #dyelocal.dyes do end -- Takes an unicolor group name (e.g. “unicolor_white”) and returns a corresponding dye name (if it exists), nil otherwise. -mcl_dye.unicolor_to_dye = function(unicolor_group) +function mcl_dye.unicolor_to_dye(unicolor_group) local color = dyelocal.unicolor_to_dye_id[unicolor_group] if color then return "mcl_dye:" .. color @@ -125,8 +128,26 @@ for _, row in ipairs(dyelocal.dyes) do end -- Bone Meal +local function bone_meal_particle(pos) + minetest.add_particlespawner({ + amount = 10, + time = 0.1, + minpos = { x = pos.x - 0.5, y = pos.y - 0.5, z = pos.z - 0.5 }, + maxpos = { x = pos.x + 0.5, y = pos.y + 0.5, z = pos.z + 0.5 }, + minvel = { x = 0, y = 0, z = 0}, + maxvel = { x = 0, y = 0, z = 0}, + minacc = { x = 0, y = 0, z = 0}, + maxacc = { x = 0, y = 0, z = 0}, + minexptime = 1, + maxexptime = 4, + minsize = 0.7, + maxsize = 2.4, + texture = "mcl_particles_bonemeal.png^[colorize:#00EE00:125", -- TODO: real MC color + glow = 5, + }) +end -mcl_dye.apply_bone_meal = function(pointed_thing) +function mcl_dye.apply_bone_meal(pointed_thing) -- Bone meal currently spawns all flowers found in the plains. local flowers_table_plains = { "mcl_flowers:dandelion", @@ -163,11 +184,13 @@ mcl_dye.apply_bone_meal = function(pointed_thing) local n = minetest.get_node(pos) if n.name == "" then return false end if minetest.get_item_group(n.name, "sapling") >= 1 then + bone_meal_particle(pos) -- Saplings: 45% chance to advance growth stage if math.random(1,100) <= 45 then return mcl_core.grow_sapling(pos, n) end elseif minetest.get_item_group(n.name, "mushroom") == 1 then + bone_meal_particle(pos) -- Try to grow huge mushroom -- Must be on a dirt-type block @@ -190,7 +213,7 @@ mcl_dye.apply_bone_meal = function(pointed_thing) return false end -- 40% chance - if math.random(1,100) <= 40 then + if math.random(1, 100) <= 40 then -- Check space requirements for i=1,3 do local cpos = vector.add(pos, {x=0, y=i, z=0}) @@ -216,32 +239,40 @@ mcl_dye.apply_bone_meal = function(pointed_thing) end return false -- Wheat, Potato, Carrot, Pumpkin Stem, Melon Stem: Advance by 2-5 stages - elseif string.find(n.name, "mcl_farming:wheat_") ~= nil then + elseif string.find(n.name, "mcl_farming:wheat_") then + bone_meal_particle(pos) local stages = math.random(2, 5) return mcl_farming:grow_plant("plant_wheat", pos, n, stages, true) - elseif string.find(n.name, "mcl_farming:potato_") ~= nil then + elseif string.find(n.name, "mcl_farming:potato_") then + bone_meal_particle(pos) local stages = math.random(2, 5) return mcl_farming:grow_plant("plant_potato", pos, n, stages, true) - elseif string.find(n.name, "mcl_farming:carrot_") ~= nil then + elseif string.find(n.name, "mcl_farming:carrot_") then + bone_meal_particle(pos) local stages = math.random(2, 5) return mcl_farming:grow_plant("plant_carrot", pos, n, stages, true) - elseif string.find(n.name, "mcl_farming:pumpkin_") ~= nil then + elseif string.find(n.name, "mcl_farming:pumpkin_") then + bone_meal_particle(pos) local stages = math.random(2, 5) return mcl_farming:grow_plant("plant_pumpkin_stem", pos, n, stages, true) - elseif string.find(n.name, "mcl_farming:melontige_") ~= nil then + elseif string.find(n.name, "mcl_farming:melontige_") then + bone_meal_particle(pos) local stages = math.random(2, 5) return mcl_farming:grow_plant("plant_melon_stem", pos, n, stages, true) - - elseif string.find(n.name, "mcl_farming:beetroot_") ~= nil then + elseif string.find(n.name, "mcl_farming:beetroot_") then + bone_meal_particle(pos) -- Beetroot: 75% chance to advance to next stage - if math.random(1,100) <= 75 then + if math.random(1, 100) <= 75 then return mcl_farming:grow_plant("plant_beetroot", pos, n, 1, true) end elseif n.name == "mcl_cocoas:cocoa_1" or n.name == "mcl_cocoas:cocoa_2" then + bone_meal_particle(pos) -- Cocoa: Advance by 1 stage mcl_cocoas.grow(pos) return true elseif minetest.get_item_group(n.name, "grass_block") == 1 then + local grass_block_pos = {x = pos.x, y = pos.y + 1, z = pos.z} + bone_meal_particle(grass_block_pos) -- Grass Block: Generate tall grass and random flowers all over the place for i = -2, 2 do for j = -2, 2 do @@ -283,19 +314,24 @@ mcl_dye.apply_bone_meal = function(pointed_thing) -- Double flowers: Drop corresponding item elseif n.name == "mcl_flowers:rose_bush" or n.name == "mcl_flowers:rose_bush_top" then + bone_meal_particle(pos) minetest.add_item(pos, "mcl_flowers:rose_bush") return true elseif n.name == "mcl_flowers:peony" or n.name == "mcl_flowers:peony_top" then + bone_meal_particle(pos) minetest.add_item(pos, "mcl_flowers:peony") return true elseif n.name == "mcl_flowers:lilac" or n.name == "mcl_flowers:lilac_top" then + bone_meal_particle(pos) minetest.add_item(pos, "mcl_flowers:lilac") return true elseif n.name == "mcl_flowers:sunflower" or n.name == "mcl_flowers:sunflower_top" then + bone_meal_particle(pos) minetest.add_item(pos, "mcl_flowers:sunflower") return true elseif n.name == "mcl_flowers:tallgrass" then + bone_meal_particle(pos) -- Tall Grass: Grow into double tallgrass local toppos = { x=pos.x, y=pos.y+1, z=pos.z } local topnode = minetest.get_node(toppos) @@ -306,6 +342,7 @@ mcl_dye.apply_bone_meal = function(pointed_thing) end elseif n.name == "mcl_flowers:fern" then + bone_meal_particle(pos) -- Fern: Grow into large fern local toppos = { x=pos.x, y=pos.y+1, z=pos.z } local topnode = minetest.get_node(toppos) @@ -327,7 +364,7 @@ minetest.register_craftitem("mcl_dye:white", { _doc_items_usagehelp = S("Rightclick a sheep to turn its wool white. Rightclick a plant to speed up its growth. Note that not all plants can be fertilized like this. When you rightclick a grass block, tall grass and flowers will grow all over the place."), stack_max = 64, groups = dyelocal.dyes[1][4], - on_place = function(itemstack, user, pointed_thing) + on_place = function(itemstack, user, pointed_thing) -- Use pointed node's on_rightclick function first, if present local node = minetest.get_node(pointed_thing.under) if user and not user:get_player_control().sneak then @@ -356,6 +393,7 @@ minetest.register_craftitem("mcl_dye:white", { end return stack end, + _dispense_into_walkable = true }) minetest.register_craftitem("mcl_dye:brown", { diff --git a/mods/ITEMS/mcl_dye/locale/mcl_dye.pl.tr b/mods/ITEMS/mcl_dye/locale/mcl_dye.pl.tr new file mode 100644 index 000000000..d16edb5b0 --- /dev/null +++ b/mods/ITEMS/mcl_dye/locale/mcl_dye.pl.tr @@ -0,0 +1,27 @@ +# textdomain: mcl_dye +Bone Meal=Mączka kostna +Light Grey Dye=Jasnoszara farba +Grey Dye=Szara farba +Ink Sac=Torbiel z atramentem +Purple Dye=Fioletowa farba +Lapis Lazuli=Lazuryt +Light Blue Dye=Jasnoniebieska farba +Cyan Dye=Błękitna farba +Cactus Green=Kaktusowa zieleń +Lime Dye=Jasnozielona farba +Dandelion Yellow=Mleczowy żółty +Cocoa Beans=Ziarna kakaowe +Orange Dye=Pomarańczowa farba +Rose Red=Różany czerwony +Magenta Dye=Karmazynowa farba +Pink Dye=Różowa farba +This item is a dye which is used for dyeing and crafting.=Ten przedmiot to farba wykorzystywana to farbowania i wytwarzania. +Rightclick on a sheep to dye its wool. Other things are dyed by crafting.=Kliknij prawym na owcę aby zafarbować jej wełnę. Inne rzeczy mogą być zafarbowane przy wytwarzaniu. +Bone Meal=Mączka kostna +Bone meal is a white dye and also useful as a fertilizer to speed up the growth of many plants.=Mączka kostna to biała farba i przydatny nawóz, który przyspiesza rośnięcie wielu roślin. +Rightclick a sheep to turn its wool white. Rightclick a plant to speed up its growth. Note that not all plants can be fertilized like this. When you rightclick a grass block, tall grass and flowers will grow all over the place.=Kliknij prawym na owcę, aby wybielić jej wełnę. Kliknij prawym na roślinę aby przyspieszyć jej wzrost. Zważ, że nie na wszystkie rośliny to tak działa. Gdy klikniesz prawym na blok trawy, wysoka trawa wyrośnie wokół. +Cocoa beans are a brown dye and can be used to plant cocoas.=Ziarna kakaowe mogą być wykorzystane do sadzenia kakao. +Rightclick a sheep to turn its wool brown. Rightclick on the side of a jungle tree trunk (Jungle Wood) to plant a young cocoa.=Naciśnij prawym aby zafarbować wełnę owcy na brązowo. Naciśnij prawym na boku tropikalnego pnia (Tropikalne drewno) aby zasadzić młode kakao. +Cocoa Beans=Ziarna kakaowe +Grows at the side of jungle trees=Rośnie na boku tropikalnych drzew +Speeds up plant growth=Przyspiesza wzrost roślin diff --git a/mods/ITEMS/mcl_dye/mod.conf b/mods/ITEMS/mcl_dye/mod.conf index 356b16434..fe93278fc 100644 --- a/mods/ITEMS/mcl_dye/mod.conf +++ b/mods/ITEMS/mcl_dye/mod.conf @@ -1 +1,2 @@ name = mcl_dye +depends = mcl_core, mcl_flowers, mcl_mobitems, mcl_cocoas diff --git a/mods/ITEMS/mcl_enchanting/enchantments.lua b/mods/ITEMS/mcl_enchanting/enchantments.lua index f7e29b06a..ecc9fe113 100644 --- a/mods/ITEMS/mcl_enchanting/enchantments.lua +++ b/mods/ITEMS/mcl_enchanting/enchantments.lua @@ -1,4 +1,4 @@ -local S = minetest.get_translator("mcl_enchanting") +local S = minetest.get_translator(minetest.get_current_modname()) -- Taken from https://minecraft.gamepedia.com/Enchanting @@ -10,25 +10,6 @@ local function increase_damage(damage_group, factor) end end --- requires engine change ---[[mcl_enchanting.enchantments.aqua_affinity = { - name = S("Aqua Affinity"), - max_level = 1, - primary = {armor_head = true}, - secondary = {}, - disallow = {non_combat_armor = true}, - incompatible = {}, - weight = 2, - description = S("Increases underwater mining speed."), - curse = false, - on_enchant = function() end, - requires_tool = false, - treasure = false, - power_range_table = {{1, 41}}, - inv_combat_tab = true, - inv_tool_tab = false, -}]]-- - -- implemented via on_enchant and additions in mobs_mc; Slowness IV part unimplemented mcl_enchanting.enchantments.bane_of_arthropods = { name = S("Bane of Arthropods"), @@ -48,25 +29,6 @@ mcl_enchanting.enchantments.bane_of_arthropods = { inv_tool_tab = false, } --- implemented in mcl_armor -mcl_enchanting.enchantments.blast_protection = { - name = S("Blast Protection"), - max_level = 4, - primary = {armor_head = true, armor_torso = true, armor_legs = true, armor_feet = true}, - secondary = {}, - disallow = {non_combat_armor = true}, - incompatible = {fire_protection = true, protection = true, projectile_protection = true}, - weight = 2, - description = S("Reduces explosion damage and knockback."), - curse = false, - on_enchant = function() end, - requires_tool = false, - treasure = false, - power_range_table = {{5, 13}, {13, 21}, {21, 29}, {29, 37}}, - inv_combat_tab = true, - inv_tool_tab = false, -} - -- requires missing MineClone2 feature --[[mcl_enchanting.enchantments.channeling = { name = S("Channeling"), @@ -86,25 +48,6 @@ mcl_enchanting.enchantments.blast_protection = { inv_tool_tab = false, }]]-- --- implemented in mcl_armor -mcl_enchanting.enchantments.curse_of_binding = { - name = S("Curse of Binding"), - max_level = 1, - primary = {}, - secondary = {armor_head = true, armor_torso = true, armor_legs = true, armor_feet = true}, - disallow = {}, - incompatible = {}, - weight = 1, - description = S("Item cannot be removed from armor slots except due to death, breaking or in Creative Mode."), - curse = true, - on_enchant = function() end, - requires_tool = false, - treasure = true, - power_range_table = {{25, 50}}, - inv_combat_tab = true, - inv_tool_tab = false, -} - -- implemented in mcl_death_drop mcl_enchanting.enchantments.curse_of_vanishing = { name = S("Curse of Vanishing"), @@ -124,8 +67,8 @@ mcl_enchanting.enchantments.curse_of_vanishing = { inv_tool_tab = true, } --- unimplemented ---[[mcl_enchanting.enchantments.depth_strider = { +-- implemented in mcl_playerplus +mcl_enchanting.enchantments.depth_strider = { name = S("Depth Strider"), max_level = 3, primary = {}, @@ -141,7 +84,7 @@ mcl_enchanting.enchantments.curse_of_vanishing = { power_range_table = {{10, 25}, {20, 35}, {30, 45}}, inv_combat_tab = true, inv_tool_tab = false, -}]]-- +} -- implemented via on_enchant mcl_enchanting.enchantments.efficiency = { @@ -155,15 +98,7 @@ mcl_enchanting.enchantments.efficiency = { description = S("Increases mining speed."), curse = false, on_enchant = function(itemstack, level) - local tool_capabilities = itemstack:get_tool_capabilities() - local groupcaps = {} - for group, capability in pairs(tool_capabilities.groupcaps) do - local groupname = group .. "_efficiency_" .. level - capability.times = mcl_autogroup.digtimes[groupname] - groupcaps[groupname] = capability - end - tool_capabilities.groupcaps = groupcaps - itemstack:get_meta():set_tool_capabilities(tool_capabilities) + mcl_enchanting.update_groupcaps(itemstack) end, requires_tool = false, treasure = false, @@ -172,24 +107,6 @@ mcl_enchanting.enchantments.efficiency = { inv_tool_tab = true, } --- implemented in mcl_armor -mcl_enchanting.enchantments.feather_falling = { - name = S("Feather Falling"), - max_level = 4, - primary = {armor_feet = true}, - secondary = {}, - disallow = {non_combat_armor = true}, - incompatible = {}, - weight = 5, - description = S("Reduces fall damage."),curse = false, - on_enchant = function() end, - requires_tool = false, - treasure = false, - power_range_table = {{5, 11}, {11, 17}, {17, 23}, {23, 29}}, - inv_combat_tab = true, - inv_tool_tab = false, -} - -- implemented in mcl_mobs and via register_on_punchplayer callback mcl_enchanting.enchantments.fire_aspect = { name = S("Fire Aspect"), @@ -215,31 +132,12 @@ minetest.register_on_punchplayer(function(player, hitter, time_from_last_punch, if wielditem then local fire_aspect_level = mcl_enchanting.get_enchantment(wielditem, "fire_aspect") if fire_aspect_level > 0 then - mcl_burning.set_on_fire(player, fire_aspect_level * 4 - 1, 1, hitter:get_player_name()) + mcl_burning.set_on_fire(player, fire_aspect_level * 4) end end end end) --- implemented in mcl_armor -mcl_enchanting.enchantments.fire_protection = { - name = S("Fire Protection"), - max_level = 4, - primary = {armor_head = true, armor_torso = true, armor_legs = true, armor_feet = true}, - secondary = {}, - disallow = {non_combat_armor = true}, - incompatible = {blast_protection = true, protection = true, projectile_protection = true}, - weight = 5, - description = S("Reduces fire damage."), - curse = false, - on_enchant = function() end, - requires_tool = false, - treasure = false, - power_range_table = {{10, 18}, {18, 26}, {26, 34}, {34, 42}}, - inv_combat_tab = true, - inv_tool_tab = false, -} - mcl_enchanting.enchantments.flame = { name = S("Flame"), max_level = 1, @@ -482,7 +380,7 @@ mcl_enchanting.enchantments.mending = { } -- requires missing MineClone2 feature -mcl_enchanting.enchantments.multishot = { +--[[mcl_enchanting.enchantments.multishot = { name = S("Multishot"), max_level = 1, primary = {crossbow = true}, @@ -498,7 +396,7 @@ mcl_enchanting.enchantments.multishot = { power_range_table = {{20, 50}}, inv_combat_tab = true, inv_tool_tab = false, -} +}]]-- -- requires missing MineClone2 feature --[[mcl_enchanting.enchantments.piercing = { @@ -538,44 +436,6 @@ mcl_enchanting.enchantments.power = { inv_tool_tab = false, } --- implemented in mcl_armor -mcl_enchanting.enchantments.projectile_protection = { - name = S("Projectile Protection"), - max_level = 4, - primary = {armor_head = true, armor_torso = true, armor_legs = true, armor_feet = true}, - secondary = {}, - disallow = {non_combat_armor = true}, - incompatible = {blast_protection = true, fire_protection = true, protection = true}, - weight = 5, - description = S("Reduces projectile damage."), - curse = false, - on_enchant = function() end, - requires_tool = false, - treasure = false, - power_range_table = {{1, 16}, {11, 26}, {21, 36}, {31, 46}, {41, 56}}, - inv_combat_tab = true, - inv_tool_tab = false, -} - --- implemented in mcl_armor -mcl_enchanting.enchantments.protection = { - name = S("Protection"), - max_level = 4, - primary = {armor_head = true, armor_torso = true, armor_legs = true, armor_feet = true}, - secondary = {}, - disallow = {non_combat_armor = true}, - incompatible = {blast_protection = true, fire_protection = true, projectile_protection = true}, - weight = 10, - description = S("Reduces most types of damage by 4% for each level."), - curse = false, - on_enchant = function() end, - requires_tool = false, - treasure = false, - power_range_table = {{1, 12}, {12, 23}, {23, 34}, {34, 45}}, - inv_combat_tab = true, - inv_tool_tab = false, -} - -- implemented via minetest.calculate_knockback (together with the Knockback enchantment) and mcl_bows mcl_enchanting.enchantments.punch = { name = S("Punch"), @@ -747,25 +607,6 @@ mcl_enchanting.enchantments.soul_speed = { inv_tool_tab = false, }]]-- --- implemented in mcl_armor -mcl_enchanting.enchantments.thorns = { - name = S("Thorns"), - max_level = 3, - primary = {armor_head = true}, - secondary = {armor_torso = true, armor_legs = true, armor_feet = true}, - disallow = {non_combat_armor = true}, - incompatible = {}, - weight = 1, - description = S("Reflects some of the damage taken when hit, at the cost of reducing durability with each proc."), - curse = false, - on_enchant = function() end, - requires_tool = false, - treasure = false, - power_range_table = {{10, 61}, {30, 71}, {50, 81}}, - inv_combat_tab = true, - inv_tool_tab = false, -} - -- for tools & weapons implemented via on_enchant; for bows implemented in mcl_bows; for armor implemented in mcl_armor and mcl_tt; for fishing rods implemented in mcl_fishing mcl_enchanting.enchantments.unbreaking = { name = S("Unbreaking"), @@ -778,12 +619,17 @@ mcl_enchanting.enchantments.unbreaking = { description = S("Increases item durability."), curse = false, on_enchant = function(itemstack, level) - local tool_capabilities = itemstack:get_tool_capabilities() - for group, capability in pairs(tool_capabilities.groupcaps) do - capability.uses = capability.uses * (1 + level) + local name = itemstack:get_name() + if not minetest.registered_tools[name].tool_capabilities then + return end + + local tool_capabilities = itemstack:get_tool_capabilities() tool_capabilities.punch_attack_uses = tool_capabilities.punch_attack_uses * (1 + level) itemstack:get_meta():set_tool_capabilities(tool_capabilities) + + -- Unbreaking for groupcaps is handled in this function. + mcl_enchanting.update_groupcaps(itemstack) end, requires_tool = true, treasure = false, diff --git a/mods/ITEMS/mcl_enchanting/engine.lua b/mods/ITEMS/mcl_enchanting/engine.lua index 5bb5884ce..6050aeed2 100644 --- a/mods/ITEMS/mcl_enchanting/engine.lua +++ b/mods/ITEMS/mcl_enchanting/engine.lua @@ -1,4 +1,4 @@ -local S = minetest.get_translator("mcl_enchanting") +local S = minetest.get_translator(minetest.get_current_modname()) local F = minetest.formspec_escape function mcl_enchanting.is_book(itemname) @@ -6,17 +6,28 @@ function mcl_enchanting.is_book(itemname) end function mcl_enchanting.get_enchantments(itemstack) + if not itemstack then + return {} + end return minetest.deserialize(itemstack:get_meta():get_string("mcl_enchanting:enchantments")) or {} end -function mcl_enchanting.set_enchantments(itemstack, enchantments) - itemstack:get_meta():set_string("mcl_enchanting:enchantments", minetest.serialize(enchantments)) +function mcl_enchanting.unload_enchantments(itemstack) local itemdef = itemstack:get_definition() + if itemdef.tool_capabilities then + itemstack:get_meta():set_tool_capabilities(nil) + end + local meta = itemstack:get_meta() + if meta:get_string("name") == "" then + meta:set_string("description", "") + meta:set_string("groupcaps_hash", "") + end +end + +function mcl_enchanting.load_enchantments(itemstack, enchantments) if not mcl_enchanting.is_book(itemstack:get_name()) then - if itemdef.tool_capabilities then - itemstack:get_meta():set_tool_capabilities(itemdef.tool_capabilities) - end - for enchantment, level in pairs(enchantments) do + mcl_enchanting.unload_enchantments(itemstack) + for enchantment, level in pairs(enchantments or mcl_enchanting.get_enchantments(itemstack)) do local enchantment_def = mcl_enchanting.enchantments[enchantment] if enchantment_def.on_enchant then enchantment_def.on_enchant(itemstack, level) @@ -26,6 +37,11 @@ function mcl_enchanting.set_enchantments(itemstack, enchantments) tt.reload_itemstack_description(itemstack) end +function mcl_enchanting.set_enchantments(itemstack, enchantments) + itemstack:get_meta():set_string("mcl_enchanting:enchantments", minetest.serialize(enchantments)) + mcl_enchanting.load_enchantments(itemstack) +end + function mcl_enchanting.get_enchantment(itemstack, enchantment) return mcl_enchanting.get_enchantments(itemstack)[enchantment] or 0 end @@ -40,7 +56,7 @@ function mcl_enchanting.get_enchantment_description(enchantment, level) end function mcl_enchanting.get_colorized_enchantment_description(enchantment, level) - return minetest.colorize(mcl_enchanting.enchantments[enchantment].curse and "#FC5454" or "#A8A8A8", mcl_enchanting.get_enchantment_description(enchantment, level)) + return minetest.colorize(mcl_enchanting.enchantments[enchantment].curse and mcl_colors.RED or mcl_colors.GRAY, mcl_enchanting.get_enchantment_description(enchantment, level)) end function mcl_enchanting.get_enchanted_itemstring(itemname) @@ -147,7 +163,7 @@ function mcl_enchanting.combine(itemstack, combine_with) local itemname = itemstack:get_name() local combine_name = combine_with:get_name() local enchanted_itemname = mcl_enchanting.get_enchanted_itemstring(itemname) - if enchanted_itemname ~= mcl_enchanting.get_enchanted_itemstring(combine_name) and not mcl_enchanting.is_book(combine_name) then + if not enchanted_itemname or enchanted_itemname ~= mcl_enchanting.get_enchanted_itemstring(combine_name) and not mcl_enchanting.is_book(combine_name) then return false end local enchantments = mcl_enchanting.get_enchantments(itemstack) @@ -207,6 +223,38 @@ function mcl_enchanting.enchantments_snippet(_, _, itemstack) end end +-- Returns the after_use callback function to use when registering an enchanted +-- item. The after_use callback is used to update the tool_capabilities of +-- efficiency enchanted tools with outdated digging times. +-- +-- It does this by calling apply_efficiency to reapply the efficiency +-- enchantment. That function is written to use hash values to only update the +-- tool if neccessary. +-- +-- This is neccessary for digging times of tools to be in sync when MineClone2 +-- or mods add new hardness values. +local function get_after_use_callback(itemdef) + if itemdef.after_use then + -- If the tool already has an after_use, make sure to call that + -- one too. + return function(itemstack, user, node, digparams) + itemdef.after_use(itemstack, user, node, digparams) + mcl_enchanting.update_groupcaps(itemstack) + end + end + + -- If the tool does not have after_use, add wear to the tool as if no + -- after_use was registered. + return function(itemstack, user, node, digparams) + if not minetest.is_creative_enabled(user) then + itemstack:add_wear(digparams.wear) + end + + --local enchantments = mcl_enchanting.get_enchantments(itemstack) + mcl_enchanting.update_groupcaps(itemstack) + end +end + function mcl_enchanting.initialize() local register_tool_list = {} local register_item_list = {} @@ -222,8 +270,16 @@ function mcl_enchanting.initialize() new_def.groups.not_in_creative_inventory = 1 new_def.groups.not_in_craft_guide = 1 new_def.groups.enchanted = 1 - new_def.texture = itemdef.texture or itemname:gsub("%:", "_") + + if new_def._mcl_armor_texture and not type(new_def._mcl_armor_texture) == "function" then + new_def._mcl_armor_texture = new_def._mcl_armor_texture .. mcl_enchanting.overlay + end + if new_def._mcl_armor_preview and not type(new_def._mcl_armor_preview) == "function" then + new_def._mcl_armor_preview = new_def._mcl_armor_preview .. mcl_enchanting.overlay + end + new_def._mcl_enchanting_enchanted_tool = new_name + new_def.after_use = get_after_use_callback(itemdef) local register_list = register_item_list if itemdef.type == "tool" then register_list = register_tool_list @@ -242,7 +298,7 @@ end function mcl_enchanting.get_possible_enchantments(itemstack, enchantment_level, treasure) local possible_enchantments, weights, accum_weight = {}, {}, 0 for enchantment, enchantment_def in pairs(mcl_enchanting.enchantments) do - local supported, _, _, primary = mcl_enchanting.can_enchant(itemstack, enchantment, 1) + local _, _, _, primary = mcl_enchanting.can_enchant(itemstack, enchantment, 1) if primary or treasure then table.insert(possible_enchantments, enchantment) accum_weight = accum_weight + enchantment_def.weight @@ -325,7 +381,7 @@ function mcl_enchanting.get_randomly_enchanted_book(enchantment_level, treasure, return mcl_enchanting.enchant_randomly(ItemStack("mcl_books:book"), enchantment_level, treasure, no_reduced_bonus_chance, true) end -function mcl_enchanting.get_uniform_randomly_enchanted_book(except) +function mcl_enchanting.get_uniform_randomly_enchanted_book(except, pr) except = except or except local stack = ItemStack("mcl_enchanting:book_enchanted") local list = {} @@ -334,10 +390,19 @@ function mcl_enchanting.get_uniform_randomly_enchanted_book(except) table.insert(list, enchantment) end end - local index = math.random(#list) + local index, level + if pr then + index = pr:next(1,#list) + else + index = math.random(#list) + end local enchantment = list[index] local enchantment_def = mcl_enchanting.enchantments[enchantment] - local level = math.random(enchantment_def.max_level) + if pr then + level = pr:next(1, enchantment_def.max_level) + else + level = math.random(enchantment_def.max_level) + end mcl_enchanting.enchant(stack, enchantment, level) return stack end @@ -447,7 +512,7 @@ function mcl_enchanting.show_enchanting_formspec(player) local hover_ending = (can_enchant and "_hovered" or "_off") formspec = formspec .. "container[3.2," .. y .. "]" - .. (slot and "tooltip[button_" .. i .. ";" .. C("#818181") .. F(slot.description) .. " " .. C("#FFFFFF") .. " . . . ?\n\n" .. (enough_levels and C(enough_lapis and "#818181" or "#FC5454") .. F(S("@1 Lapis Lazuli", i)) .. "\n" .. C("#818181") .. F(S("@1 Enchantment Levels", i)) or C("#FC5454") .. F(S("Level requirement: @1", slot.level_requirement))) .. "]" or "") + .. (slot and "tooltip[button_" .. i .. ";" .. C("#818181") .. ((slot.description and F(slot.description)) or "") .. " " .. C("#FFFFFF") .. " . . . ?\n\n" .. (enough_levels and C(enough_lapis and "#818181" or "#FC5454") .. F(S("@1 Lapis Lazuli", i)) .. "\n" .. C("#818181") .. F(S("@1 Enchantment Levels", i)) or C("#FC5454") .. F(S("Level requirement: @1", slot.level_requirement))) .. "]" or "") .. "style[button_" .. i .. ";bgimg=mcl_enchanting_button" .. ending .. ".png;bgimg_hovered=mcl_enchanting_button" .. hover_ending .. ".png;bgimg_pressed=mcl_enchanting_button" .. hover_ending .. ".png]" .. "button[0,0;7.5,1.3;button_" .. i .. ";]" .. (slot and "image[0,0;1.3,1.3;mcl_enchanting_number_" .. i .. ending .. ".png]" or "") @@ -528,7 +593,12 @@ function mcl_enchanting.allow_inventory_action(player, action, inventory, invent local listname = inventory_info.to_list local stack = inventory:get_stack(inventory_info.from_list, inventory_info.from_index) if stack:get_name() == "mcl_dye:blue" and listname ~= "enchanting_item" then - return math.min(inventory:get_stack("enchanting_lapis", 1):get_free_space(), stack:get_count()) + local count = stack:get_count() + local old_stack = inventory:get_stack("enchanting_lapis", 1) + if old_stack:get_name() ~= "" then + count = math.min(count, old_stack:get_free_space()) + end + return count elseif inventory:get_stack("enchanting_item", 1):get_count() == 0 and listname ~= "enchanting_lapis" then return 1 else diff --git a/mods/ITEMS/mcl_enchanting/groupcaps.lua b/mods/ITEMS/mcl_enchanting/groupcaps.lua new file mode 100644 index 000000000..a445b73f2 --- /dev/null +++ b/mods/ITEMS/mcl_enchanting/groupcaps.lua @@ -0,0 +1,75 @@ +local groupcaps_cache = {} + +-- Compute a hash value. +function compute_hash(value) + -- minetest.get_password_hash is quite fast, even if it uses a + -- cryptographic hashing function (SHA-1). It is written in C++ and it + -- is probably hard to write a faster hashing function in Lua. + return string.sub(minetest.get_password_hash("ryvnf", minetest.serialize(value)), 1, 8) +end + +-- Get the groupcaps and hash for an enchanted tool. If this function is called +-- repeatedly with the same values it will return data from a cache. +-- +-- Parameters: +-- toolname - Name of the tool +-- level - The efficiency level of the tool +-- +-- Returns a table with the following two fields: +-- values - The groupcaps table +-- hash - The hash of the groupcaps table +local function get_efficiency_groupcaps(toolname, level) + local toolcache = groupcaps_cache[toolname] + local level = level + + if not toolcache then + toolcache = {} + groupcaps_cache[toolname] = toolcache + end + + local levelcache = toolcache[level] + if not levelcache then + levelcache = {} + levelcache.values = mcl_autogroup.get_groupcaps(toolname, level) + levelcache.hash = compute_hash(levelcache.values) + toolcache[level] = levelcache + end + + return levelcache +end + +-- Update groupcaps of an enchanted tool. This function will be called +-- repeatedly to make sure the digging times stored in groupcaps stays in sync +-- when the digging times of nodes can change. +-- +-- To make it more efficient it will first check a hash value to determine if +-- the tool needs to be updated. +function mcl_enchanting.update_groupcaps(itemstack) + local name = itemstack:get_name() + if not minetest.registered_tools[name].tool_capabilities then + return + end + + local efficiency = mcl_enchanting.get_enchantment(itemstack, "efficiency") + local unbreaking = mcl_enchanting.get_enchantment(itemstack, "unbreaking") + if unbreaking == 0 and efficiency == 0 then + return + end + + local groupcaps = get_efficiency_groupcaps(name, efficiency) + local hash = itemstack:get_meta():get_string("groupcaps_hash") + + if not hash or hash ~= groupcaps.hash then + local tool_capabilities = itemstack:get_tool_capabilities() + tool_capabilities.groupcaps = table.copy(groupcaps.values) + + -- Increase the number of uses depending on the unbreaking level + -- of the tool. + for group, capability in pairs(tool_capabilities.groupcaps) do + capability.uses = capability.uses * (1 + unbreaking) + end + + itemstack:get_meta():set_tool_capabilities(tool_capabilities) + itemstack:get_meta():set_string("groupcaps_hash", groupcaps.hash) + end +end diff --git a/mods/ITEMS/mcl_enchanting/init.lua b/mods/ITEMS/mcl_enchanting/init.lua index be1b18723..5aec1ced6 100644 --- a/mods/ITEMS/mcl_enchanting/init.lua +++ b/mods/ITEMS/mcl_enchanting/init.lua @@ -1,5 +1,9 @@ -local modpath = minetest.get_modpath("mcl_enchanting") -local S = minetest.get_translator("mcl_enchanting") +local modname = minetest.get_current_modname() +local modpath = minetest.get_modpath(modname) +local S = minetest.get_translator(modname) + +local math = math +local vector = vector mcl_enchanting = { book_offset = vector.new(0, 0.75, 0), @@ -59,6 +63,7 @@ mcl_enchanting = { } dofile(modpath .. "/engine.lua") +dofile(modpath .. "/groupcaps.lua") dofile(modpath .. "/enchantments.lua") minetest.register_chatcommand("enchant", { @@ -121,7 +126,7 @@ minetest.register_chatcommand("forceenchant", { return false, S("Player '@1' cannot be found.", target_name) end local itemstack = target:get_wielded_item() - local can_enchant, errorstring, extra_info = mcl_enchanting.can_enchant(itemstack, enchantment, level) + local _, errorstring = mcl_enchanting.can_enchant(itemstack, enchantment, level) if errorstring == "enchantment invalid" then return false, S("There is no such enchantment '@1'.", enchantment) elseif errorstring == "item missing" then @@ -147,7 +152,7 @@ minetest.register_craftitem("mcl_enchanting:book_enchanted", { minetest.register_alias("mcl_books:book_enchanted", "mcl_enchanting:book_enchanted") -local spawn_book_entity = function(pos, respawn) +local function spawn_book_entity(pos, respawn) if respawn then -- Check if we already have a book local objs = minetest.get_objects_inside_radius(pos, 1) @@ -191,7 +196,7 @@ minetest.register_entity("mcl_enchanting:book", { local old_player_near = self._player_near local player_near = false local player - for _, obj in ipairs(minetest.get_objects_inside_radius(vector.subtract(self.object:get_pos(), mcl_enchanting.book_offset), 2.5)) do + for _, obj in pairs(minetest.get_objects_inside_radius(vector.subtract(self.object:get_pos(), mcl_enchanting.book_offset), 2.5)) do if obj:is_player() then player_near = true player = obj @@ -231,6 +236,7 @@ minetest.register_node("mcl_enchanting:table", { _doc_items_hidden = false, drawtype = "nodebox", tiles = {"mcl_enchanting_table_top.png", "mcl_enchanting_table_bottom.png", "mcl_enchanting_table_side.png", "mcl_enchanting_table_side.png", "mcl_enchanting_table_side.png", "mcl_enchanting_table_side.png"}, + use_texture_alpha = minetest.features.use_texture_alpha_string_modes and "opaque" or false, node_box = { type = "fixed", fixed = {-0.5, -0.5, -0.5, 0.5, 0.25, 0.5}, @@ -240,9 +246,9 @@ minetest.register_node("mcl_enchanting:table", { on_rotate = rotate, on_rightclick = function(pos, node, clicker, itemstack, pointed_thing) local player_meta = clicker:get_meta() - local table_meta = minetest.get_meta(pos) - local num_bookshelves = table_meta:get_int("mcl_enchanting:num_bookshelves") - local table_name = table_meta:get_string("name") + --local table_meta = minetest.get_meta(pos) + --local num_bookshelves = table_meta:get_int("mcl_enchanting:num_bookshelves") + local table_name = minetest.get_meta(pos):get_string("name") if table_name == "" then table_name = S("Enchant") end @@ -307,7 +313,7 @@ minetest.register_abm({ nodenames = "mcl_enchanting:table", action = function(pos) local playernames = {} - for _, obj in ipairs(minetest.get_objects_inside_radius(pos, 15)) do + for _, obj in pairs(minetest.get_objects_inside_radius(pos, 15)) do if obj:is_player() then table.insert(playernames, obj:get_player_name()) end @@ -359,4 +365,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_enchanting/locale/mcl_enchanting.de.tr b/mods/ITEMS/mcl_enchanting/locale/mcl_enchanting.de.tr index 68077578c..ecc08b5dc 100644 --- a/mods/ITEMS/mcl_enchanting/locale/mcl_enchanting.de.tr +++ b/mods/ITEMS/mcl_enchanting/locale/mcl_enchanting.de.tr @@ -17,8 +17,8 @@ Efficiency=Effizienz Increases mining speed.=Erhöht Grabegeschwindigkeit. Feather Falling=Federfall Reduces fall damage.=Reduziert Fallschaden. -Fire Aspect=Feieraspekt -Sets target on fire.=Zündes das Ziel an. +Fire Aspect=Feueraspekt +Sets target on fire.=Zündet das Ziel an. Fire Protection=Feuerschutz Reduces fire damage.=Reduziert Feuerschaden Flame=Flamme @@ -31,7 +31,7 @@ Impaling=Aufspießen Trident deals additional damage to ocean mobs.=Dreizack richtet Zusatzschaden an Ozeanmobs an. Infinity=Unendlichkeit Shooting consumes no regular arrows.=Schüsse verbrauchen keine regulären Pfeile. -Knockback=Rückschlag. +Knockback=Rückschlag Increases knockback.=Verstärkt Rückschlag. Looting=Plünderer Increases mob loot.=Erhöht Abwürfe von Mobs. @@ -43,7 +43,7 @@ Lure=Köder Decreases time until rod catches something.=Reduziert die Zeit, bis die Angel etwas fängt. Mending=Ausbessern Repair the item while gaining XP orbs.=Gegenstand reparieren, während man Erfahrungskugeln erhält. -Multishot=Mehrschuss +Multishot=Mehrfachschuss Shoot 3 arrows at the cost of one.=3 Pfeile zum Preis von 1 schießen. Piercing=Durchbohren Arrows passes through multiple objects.=Pfeile durchdringen mehrere Objekte. @@ -74,7 +74,7 @@ Increases sweeping attack damage.=Erhöht Schwungangriffsschaden. Thorns=Dornen Reflects some of the damage taken when hit, at the cost of reducing durability with each proc.=Reflektiert etwas des Schadens beim Erleiden eines Treffers, auf Kosten der Haltbarkeit. Unbreaking=Haltbarkeit -Increases item durability.=Erhöht Haldbarkeit des Gegenstands. +Increases item durability.=Erhöht Haltbarkeit des Gegenstands. Inventory=Inventar @1 Lapis Lazuli=@1 Lapislazuli @1 Enchantment Levels=@1 Verzauberungsstufen diff --git a/mods/ITEMS/mcl_enchanting/locale/mcl_enchanting.fr.tr b/mods/ITEMS/mcl_enchanting/locale/mcl_enchanting.fr.tr index 582f0e59b..985499964 100644 --- a/mods/ITEMS/mcl_enchanting/locale/mcl_enchanting.fr.tr +++ b/mods/ITEMS/mcl_enchanting/locale/mcl_enchanting.fr.tr @@ -1,18 +1,18 @@ # textdomain: mcl_enchanting Aqua Affinity=Affinité aquatique -Increases underwater mining speed.=Augmente la vitesse de minage sous-marine. +Increases underwater mining speed.=Augmente la vitesse de minage sous-marine. Bane of Arthropods=Fléau des arthropodes -Increases damage and applies Slowness IV to arthropod mobs (spiders, cave spiders, silverfish and endermites).=Augmente les dégâts et applique la lenteur IV aux mobs arthropodes (araignées, araignées des cavernes, lépismes argentés et endermites). +Increases damage and applies Slowness IV to arthropod mobs (spiders, cave spiders, silverfish and endermites).=Augmente les dégâts et applique la lenteur IV aux mobs arthropodes (araignées, araignées des cavernes, lépismes argentés et endermites). Blast Protection=Protection contre les explosions -Reduces explosion damage and knockback.=Réduit les dégâts d'explosion et de recul. +Reduces explosion damage and knockback.=Réduit les dégâts d'explosion et de recul. Channeling=Canalisation -Channels a bolt of lightning toward a target. Works only during thunderstorms and if target is unobstructed with opaque blocks.=Canalise un éclair vers une cible. Fonctionne uniquement pendant les orages et si la cible n'est pas obstruée par des blocs opaques. -Curse of Binding=Malédiction du lien éterne +Channels a bolt of lightning toward a target. Works only during thunderstorms and if target is unobstructed with opaque blocks.=Canalise un éclair vers une cible. Fonctionne uniquement pendant les orages et si la cible n'est pas obstruée par des blocs opaques. +Curse of Binding=Malédiction du lien éternel Item cannot be removed from armor slots except due to death, breaking or in Creative Mode.=L'objet ne peut pas être retiré des emplacements d'armure sauf en cas de mort, de rupture ou en mode créatif. Curse of Vanishing=Malédiction de disparition Item destroyed on death.=Objet détruit à la mort. Depth Strider=Agilité aquatique -Increases underwater movement speed.=Augmente la vitesse de déplacement sous l'eau. +Increases underwater movement speed.=Augmente la vitesse de déplacement sous l'eau. Efficiency=Efficacité Increases mining speed.=Augmente la vitesse de minage. Feather Falling=Chute amortie @@ -22,21 +22,21 @@ Sets target on fire.=Définit la cible en feu. Fire Protection=Protection contre le feu Reduces fire damage.=Reduit les dégats de feu. Flame=Flamme -Arrows set target on fire.=Les flèches mettent le feu à la cible. +Arrows set target on fire.=Les flèches mettent le feu à la cible. Fortune=Fortune Increases certain block drops.=Multiplie les items droppés Frost Walker=Semelles givrantes -Turns water beneath the player into frosted ice and prevents the damage from magma blocks.=Transforme l'eau sous le joueur en glace givrée et empêche les dommages causés par les blocs de magma. +Turns water beneath the player into frosted ice and prevents the damage from magma blocks.=Transforme l'eau sous le joueur en glace givrée et empêche les dommages causés par les blocs de magma. Impaling=Empalement -Trident deals additional damage to ocean mobs.=Trident inflige des dégâts supplémentaires aux mobs océaniques. +Trident deals additional damage to ocean mobs.=Trident inflige des dégâts supplémentaires aux mobs océaniques. Infinity=Infinité -Shooting consumes no regular arrows.=Le tir ne consomme pas de flèches standard. +Shooting consumes no regular arrows.=Le tir ne consomme pas de flèches standard. Knockback=Recul Increases knockback.=Augmente le recul. Looting=Butin -Increases mob loot.=Augmente le butin des mobs. +Increases mob loot.=Augmente le butin des mobs. Loyalty=Loyauté -Trident returns after being thrown. Higher levels reduce return time.=Trident revient après avoir été jeté. Des niveaux plus élevés réduisent le temps de retour. +Trident returns after being thrown. Higher levels reduce return time.=Trident revient après avoir été jeté. Des niveaux plus élevés réduisent le temps de retour. Luck of the Sea=Chance de la mer Increases rate of good loot (enchanting books, etc.)=Augmente le taux de bon butin (livres enchanteurs, etc.) Lure=Appât @@ -44,17 +44,17 @@ Decreases time until rod catches something.=Diminue le temps jusqu'à ce qu'un p Mending=Raccommodage Repair the item while gaining XP orbs.=Réparez l'objet tout en gagnant des points d'XP. Multishot=Tir multiple -Shoot 3 arrows at the cost of one.=Tirez sur 3 flèches au prix d'une. +Shoot 3 arrows at the cost of one.=Tirez sur 3 flèches au prix d'une. Piercing=Perforation -Arrows passes through multiple objects.=Les flèches traversent plusieurs objets. +Arrows passes through multiple objects.=Les flèches traversent plusieurs objets. Power=Puissance -Increases arrow damage.=Augmente les dégâts des flèches. +Increases arrow damage.=Augmente les dégâts des flèches. Projectile Protection=Protection contre les projectiles -Reduces projectile damage.=Réduit les dommages causés par les projectiles. +Reduces projectile damage.=Réduit les dommages causés par les projectiles. Protection=Protection -Reduces most types of damage by 4% for each level.=éduit la plupart des types de dégâts de 4% pour chaque niveau. +Reduces most types of damage by 4% for each level.=éduit la plupart des types de dégâts de 4% pour chaque niveau. Punch=Frappe -Increases arrow knockback.=Augmente le recul de la flèche. +Increases arrow knockback.=Augmente le recul de la flèche. Quick Charge=Charge rapide Decreases crossbow charging time.=Diminue le temps de chargement de l'arbalète. Respiration=Apnée @@ -66,18 +66,18 @@ Increases damage.=Augmente les dégâts. Silk Touch=Toucher de soie Mined blocks drop themselves.=Les blocs minés tombent d'eux-mêmes. Smite=Châtiment -Increases damage to undead mobs.=Augmente les dégâts infligés aux monstres morts-vivants. +Increases damage to undead mobs.=Augmente les dégâts infligés aux monstres morts-vivants. Soul Speed=Agilité des âmes -Increases walking speed on soul sand.=Augmente la vitesse de marche sur le sable de l'âme. +Increases walking speed on soul sand.=Augmente la vitesse de marche sur le sable de l'âme. Sweeping Edge=Affilage -Increases sweeping attack damage.=Augmente les dégâts de l'épée +Increases sweeping attack damage.=Augmente les dégâts de l'épée Thorns=Épines Reflects some of the damage taken when hit, at the cost of reducing durability with each proc.=Reflète une partie des dégâts subis lors de la frappe, au prix d'une réduction de la durabilité à chaque déclenchement. Unbreaking=Solidité Increases item durability.=Augmente la durabilité des objets. Inventory=Inventaire -@1 × Lapis Lazuli=@1 × Lapis Lazuli -Enchantment levels: @1=Niveaux d'enchantement: @1 +@1 Lapis Lazuli=@1 Lapis Lazuli +@1 Enchantment Levels=@1 Niveaux d'enchantement Level requirement: @1=Niveau requis: @1 Enchant an item=Enchanter un objet []= [] @@ -85,16 +85,16 @@ Usage: /enchant []=Usage: /enchant []=Usage: /forceenchant [] The target item is not enchantable.=L'objet cible n'est pas enchantable. '@1' is not a valid number.='@1' n'est pas un nombre valide. -Enchanted Book=Livre enchanté +Enchanted Book=Livre enchanté Enchanting Table=Table d'enchantement Enchant=Enchantement diff --git a/mods/ITEMS/mcl_enchanting/locale/mcl_enchanting.pl.tr b/mods/ITEMS/mcl_enchanting/locale/mcl_enchanting.pl.tr new file mode 100644 index 000000000..179702d79 --- /dev/null +++ b/mods/ITEMS/mcl_enchanting/locale/mcl_enchanting.pl.tr @@ -0,0 +1,100 @@ +# textdomain: mcl_enchanting +Aqua Affinity=Powinowactwo wodne +Increases underwater mining speed.=Przyspiesza wydobywanie pod wodą. +Bane of Arthropods=Zmora stawonogów +Increases damage and applies Slowness IV to arthropod mobs (spiders, cave spiders, silverfish and endermites).=Zwiększa obrażenia i aplikuje Spowolnienie IV stawonogom (pająkom, pająkom jaskiniowym, rybikom cukrowym i endermitom) +Blast Protection=Ochrona od wybuchów +Reduces explosion damage and knockback.=Zmniejsza obrażenia od wybuchów i odrzut. +Channeling=Przekierowanie +Channels a bolt of lightning toward a target. Works only during thunderstorms and if target is unobstructed with opaque blocks.=Przekierowuje błyskawicę w stronę celu. Działa tylko podczas burz jeśli cel nie jest zasłonięty przez nieprzezroczyste bloki. +Curse of Binding=Klątwa wiązania +Item cannot be removed from armor slots except due to death, breaking or in Creative Mode.=Przedmiotu nie można zdjąć z miejsc na zbroję inaczej niż przez śmierć, zepsucie bądź w trybie kreatywnym. +Curse of Vanishing=Klątwa znikania +Item destroyed on death.=Przedmiot niszczony przy śmierci +Depth Strider=Głębinowy wędrowiec +Increases underwater movement speed.=Zwiększa prędkość poruszania pod wodą. +Efficiency=Wydajność +Increases mining speed.=Zwiększa prędkość wydobywania zasobów. +Feather Falling=Powolne opadanie +Reduces fall damage.=Zmniejsza obrażenia od upadku. +Fire Aspect=Zaklęty ogień +Sets target on fire.=Podpala cel. +Fire Protection=Ochrona przed ogniem +Reduces fire damage.=Zmniejsza obrażenia od ognia +Flame=Płomień +Arrows set target on fire.=Strzały podpalają cel. +Fortune=Fortuna +Increases certain block drops.=Zwiększa prawdopodobieństwo wypadnięcia przedmiotów z niektórych bloków. +Frost Walker=Mroźny piechur +Turns water beneath the player into frosted ice and prevents the damage from magma blocks.=Zamienia wodę pod graczem w oszroniony lód i pozwala uniknąć obrażeń od bloków magmy. +Impaling=Przebicie +Trident deals additional damage to ocean mobs.=Trójząb zadaje dodatkowe obrażenia podwodnym stworzeniom. +Infinity=Nieskończoność +Shooting consumes no regular arrows.=Strzelanie nie zużywa zwykłych strzał. +Knockback=Odrzut +Increases knockback.=Zwiększa odrzut. +Looting=Grabież +Increases mob loot.=Zwiększa liczbę przedmiotów wypadających z mobów. +Loyalty=Lojalność +Trident returns after being thrown. Higher levels reduce return time.=Trydent wraca do gracza po rzuceniu. Większy poziom zmniejsza czas powrotu. +Luck of the Sea=Morska fortuna +Increases rate of good loot (enchanting books, etc.)=Zwiększa szansę na wypadnięcie dobrych przedmiotów (zaklętych książek itp.) +Lure=Przynęta +Decreases time until rod catches something.=Zmniejsza czas po którym coś złapie się na wędkę +Mending=Naprawa +Repair the item while gaining XP orbs.=Naprawia przedmiot podczas podnoszenia kul doświadczenia. +Multishot=Wielostrzał +Shoot 3 arrows at the cost of one.=Wystrzel 3 strzały kosztem jednej. +Piercing=Przeszycie +Arrows passes through multiple objects.=Strzała przelatuje przez wiele obiektów. +Power=Moc +Increases arrow damage.=Zwiększa obrażenia od strzał. +Projectile Protection=Ochrona przed pociskami +Reduces projectile damage.=Zmniejsza obrażenia od pocisków. +Protection=Obrona +Reduces most types of damage by 4% for each level.=Zmniejsza obrażenia większości typów o 4% za każdy poziom. +Punch=Uderzenie +Increases arrow knockback.=Zwiększa odrzut strzał. +Quick Charge=Szybkie ładowanie +Decreases crossbow charging time.=Zmniejsza czas ładowania kuszy. +Respiration=Oddychanie +Extends underwater breathing time.=Zwiększa czas na który można wstrzymać oddech pod wodą. +Riptide=Torpeda +Trident launches player with itself when thrown. Works only in water or rain.=Trydent porywa gracza ze sobą podczas rzucania. Działa tylko w wodzie lub w deszczu. +Sharpness=Ostrość +Increases damage.=Zwiększa obrażenia. +Silk Touch=Jedwabny dotyk +Mined blocks drop themselves.=Z wydobywanych bloków wypadają one same. +Smite=Pogromca nieumarłych +Increases damage to undead mobs.=Zwiększa obrażenia zadawane nieumarłym mobom. +Soul Speed=Prędkość dusz +Increases walking speed on soul sand.=Zwiększa szybkość chodzenia po piasku dusz. +Sweeping Edge=Szerokie ostrze +Increases sweeping attack damage.=Zwiększa obrażenia przy ataku z zamachu. +Thorns=Ciernie +Reflects some of the damage taken when hit, at the cost of reducing durability with each proc.=Odbija część zadanych obrażeń kosztem utraty wytrzymałości zbroi. +Unbreaking=Niezniszczalność +Increases item durability.=Zwiększa wytrzymałość przedmiotu. +Inventory=Ekwipunek +@1 Lapis Lazuli=@1 Lazurytów +@1 Enchantment Levels=@1 poziomów zaklęcia +Level requirement: @1=Wymagany poziom: @1 +Enchant an item=Zaczaruj przedmiot + []= [] +Usage: /enchant []=Użycie: /enchant [] +Player '@1' cannot be found.=Gracz '@1' nie został znaleziony. +There is no such enchantment '@1'.=Nie ma takiego zaklęcia '@1'. +The target doesn't hold an item.=Cel nie trzyma żadnego przedmiotu. +The selected enchantment can't be added to the target item.=Wybrane zaklęcie nie może zostać zaaplikowane do docelowego przedmiotu. +'@1' is not a valid number='@1' nie jest poprawną liczbą. +The number you have entered (@1) is too big, it must be at most @2.=Liczba którą wpisałaś (@1) jest zbyt duża, nie może być większa niż @2. +The number you have entered (@1) is too small, it must be at least @2.=Liczba którą wpisałaś (@1) jest zbyt mała, nie może być mniejsza niż @2. +@1 can't be combined with @2.=@1 nie może być połączone z @2. +Enchanting succeded.=Zaklinanie powiodło się. +Forcefully enchant an item=Bezwzględnie zaczaruj przedmiot. +Usage: /forceenchant []=Użycie: /forceenchant [] +The target item is not enchantable.=Docelowego przedmiotu nie można zaczarować. +'@1' is not a valid number.='@1' nie jest poprawną liczbą. +Enchanted Book=Zaklęta książka +Enchanting Table=Stół do zaklinania +Enchant=Zaczaruj diff --git a/mods/ITEMS/mcl_enchanting/locale/mcl_enchanting.ru.tr b/mods/ITEMS/mcl_enchanting/locale/mcl_enchanting.ru.tr new file mode 100644 index 000000000..6cd1e1db6 --- /dev/null +++ b/mods/ITEMS/mcl_enchanting/locale/mcl_enchanting.ru.tr @@ -0,0 +1,100 @@ +# textdomain: mcl_enchanting +Aqua Affinity=Родство с водой +Increases underwater mining speed.=Увеличивает скорость добычи под водой. +Bane of Arthropods=Бич членистоногих +Increases damage and applies Slowness IV to arthropod mobs (spiders, cave spiders, silverfish and endermites).=Увеличивает урон и применяет Замедление IV к насекомым и членистоногим (паукам, пещерным паукам, чешуйницам и чешуйницам края). +Blast Protection=Взрывоустойчивость +Reduces explosion damage and knockback.=Уменьшает урон и отдачу от взрывов. +Channeling=Громовержец +Channels a bolt of lightning toward a target. Works only during thunderstorms and if target is unobstructed with opaque blocks.=Бьёт молнией в цель. Работает только во время грозы, когда цель не защищена плотными блоками. +Curse of Binding=Проклятие несъёмности +Item cannot be removed from armor slots except due to death, breaking or in Creative Mode.=Предмет не может быть изъят из слота доспехов, кроме как в результате смерти, разрушения или в креативном режиме. +Curse of Vanishing=Проклятье утраты +Item destroyed on death.=Предмет уничтожается при смерти. +Depth Strider=Покоритель глубин +Increases underwater movement speed.=Увеличивает скорость передвижения под водой. +Efficiency=Эффективность +Increases mining speed.=Увеличивает скорость добычи. +Feather Falling=Невесомость +Reduces fall damage.=Снижает урон от падения. +Fire Aspect=Заговор огня +Sets target on fire.=Поджигает цель. +Fire Protection=Защита от огня +Reduces fire damage.=Уменьшает урон от огня. +Flame=Пламя +Arrows set target on fire.=Стрелы поджигают цель. +Fortune=Удача +Increases certain block drops.=Увеличивает выпадение ресурсов из блоков. +Frost Walker=Ледоход +Turns water beneath the player into frosted ice and prevents the damage from magma blocks.=Превращает воду под игроком в замороженный лёд и предотвращает урон от магмовых блоков. +Impaling=Пронзатель +Trident deals additional damage to ocean mobs.=Трезубец наносит дополнительный урон океаническим мобам. +Infinity=Бесконечность +Shooting consumes no regular arrows.=При стрельбе не расходуются стрелы. +Knockback=Отскок +Increases knockback.=Увеличивает отдачу. +Looting=Добыча +Increases mob loot.=Увеличивает добычу от мобов. +Loyalty=Верность +Trident returns after being thrown. Higher levels reduce return time.=Возвращает трезубец после броска. Более высокие уровни сокращают время возврата. +Luck of the Sea=Везучий рыбак +Increases rate of good loot (enchanting books, etc.)=Увеличивает шанс поймать сокровище (зачарованные книги и т.п.) +Lure=Приманка +Decreases time until rod catches something.=Уменьшает время ожидания клёва. +Mending=Починка +Repair the item while gaining XP orbs.=Предмет чинится при сборе жемчужин опыта. +Multishot=Залп +Shoot 3 arrows at the cost of one.=Выстреливают три стрелы по стоимости одной. +Piercing=Бронебойность +Arrows passes through multiple objects.=Стрела пробивает насквозь несколько объектов. +Power=Сила +Increases arrow damage.=Увеличивает урон от стрел. +Projectile Protection=Защита от снарядов +Reduces projectile damage.=Уменьшает урон от снарядов. +Protection=Защита +Reduces most types of damage by 4% for each level.=Уменьшает большинство повреждений на 4% за каждый уровень. +Punch=Отбрасывание +Increases arrow knockback.=Увеличивает отбрасывание от стрелы. +Quick Charge=Быстрая перезарядка +Decreases crossbow charging time.=Уменьшает время заряда снаряда. +Respiration=Подводное дыхание +Extends underwater breathing time.=Увеличивает время дыхания под водой. +Riptide=Тягун +Trident launches player with itself when thrown. Works only in water or rain.=Трезубец тянет игрока за собой. Работает только в воде или под дождём. +Sharpness=Острота +Increases damage.=Увеличенный урон. +Silk Touch=Шёлковое касание +Mined blocks drop themselves.=Добываемый блок выпадает сам, даже если из него должно выпадать что-то другое. +Smite=Небесная кара +Increases damage to undead mobs.=Дополнительный урон мертвякам (зомби и т.п.). +Soul Speed=Скорость души +Increases walking speed on soul sand.=Увеличивает скорость ходьбы по песку душ. +Sweeping Edge=Разящий клинок +Increases sweeping attack damage.=Увеличивает урон по мобам, стоящих рядом с целью. +Thorns=Шипы +Reflects some of the damage taken when hit, at the cost of reducing durability with each proc.=Отражают некоторый урон, получаемый от ударов, за счёт снижения прочности с каждым разом. +Unbreaking=Нерушимость +Increases item durability.=Увеличивает прочность предмета. +Inventory=Инвентарь +@1 Lapis Lazuli=@1 Ляпис-лазурь +@1 Enchantment Levels=@1 Уровень зачаровывания +Level requirement: @1=Требуемый уровень: @1 +Enchant an item=Зачаровать предмет + []=<игрок> <зачарование> [<уровень>] +Usage: /enchant []=Использование: /enchant <игрок> <зачарование> [<уровень>] +Player '@1' cannot be found.=Не удалось найти игрока '@1'. +There is no such enchantment '@1'.=Нет такого зачаровывания: '@1'. +The target doesn't hold an item.=Цель не держит предмета. +The selected enchantment can't be added to the target item.=Выбранное зачарование не может быть добавлено к целевому предмету. +'@1' is not a valid number='@1' не является допустимым числом +The number you have entered (@1) is too big, it must be at most @2.=Число, которое вы задали (@1), слишком велико, оно может быть максимум @2. +The number you have entered (@1) is too small, it must be at least @2.=Число, которое вы задали (@1), слишком мало, оно может быть минимум @2. +@1 can't be combined with @2.=@1 нельзя сочетать с @2. +Enchanting succeded.=Зачарование выполнено. +Forcefully enchant an item=Принудительно зачаровать предмет +Usage: /forceenchant []=Использование: /forceenchant <игрок> <зачарование> [<уровень>] +The target item is not enchantable.=Указана незачаровываемая цель. +'@1' is not a valid number.='@1' не является допустимым числом. +Enchanted Book=Зачарованная книга +Enchanting Table=Стол зачаровывания +Enchant=Зачарование diff --git a/mods/ITEMS/mcl_enchanting/locale/template.txt b/mods/ITEMS/mcl_enchanting/locale/template.txt index f186ef37b..08fa82097 100644 --- a/mods/ITEMS/mcl_enchanting/locale/template.txt +++ b/mods/ITEMS/mcl_enchanting/locale/template.txt @@ -76,8 +76,8 @@ Reflects some of the damage taken when hit, at the cost of reducing durability w Unbreaking= Increases item durability.= Inventory= -@1 × Lapis Lazuli= -Enchantment levels: @1= +@1 Lapis Lazuli= +@1 Enchantment Levels= Level requirement: @1= Enchant an item= []= diff --git a/mods/ITEMS/mcl_enchanting/mod.conf b/mods/ITEMS/mcl_enchanting/mod.conf index ac4dad644..4d4741fb8 100644 --- a/mods/ITEMS/mcl_enchanting/mod.conf +++ b/mods/ITEMS/mcl_enchanting/mod.conf @@ -1,5 +1,5 @@ name = mcl_enchanting description = Enchanting for MineClone2 -depends = tt, walkover, mcl_sounds +depends = tt, walkover, mcl_sounds, mcl_colors optional_depends = screwdriver author = Fleckenstein diff --git a/mods/ITEMS/mcl_end/building.lua b/mods/ITEMS/mcl_end/building.lua index 3dcf0671e..3c8f7f66c 100644 --- a/mods/ITEMS/mcl_end/building.lua +++ b/mods/ITEMS/mcl_end/building.lua @@ -1,7 +1,8 @@ -- Building blocks and decorative nodes -local S = minetest.get_translator("mcl_end") +local S = minetest.get_translator(minetest.get_current_modname()) + +local mod_screwdriver = minetest.get_modpath("screwdriver") -local mod_screwdriver = minetest.get_modpath("screwdriver") ~= nil local on_rotate if mod_screwdriver then on_rotate = screwdriver.rotate_3way @@ -169,7 +170,16 @@ minetest.register_node("mcl_end:dragon_egg", { sounds = mcl_sounds.node_sound_stone_defaults(), _mcl_blast_resistance = 9, _mcl_hardness = 3, - -- TODO: Make dragon egg teleport on punching + on_punch = function(pos, node) + local max_dist = vector.new(15, 7, 15) + local positions = minetest.find_nodes_in_area(vector.subtract(pos, max_dist), vector.add(pos, max_dist), "air", false) + if #positions > 0 then + local tpos = positions[math.random(#positions)] + minetest.remove_node(pos) + minetest.set_node(tpos, node) + minetest.check_for_falling(tpos) + end + end, }) diff --git a/mods/ITEMS/mcl_end/chorus_plant.lua b/mods/ITEMS/mcl_end/chorus_plant.lua index 1363debf7..4dc54db18 100644 --- a/mods/ITEMS/mcl_end/chorus_plant.lua +++ b/mods/ITEMS/mcl_end/chorus_plant.lua @@ -1,7 +1,10 @@ -- Chorus plants -- This includes chorus flowers, chorus plant stem nodes and chorus fruit -local S = minetest.get_translator("mcl_end") +local S = minetest.get_translator(minetest.get_current_modname()) + +local math = math +local table = table --- Plant parts --- @@ -29,10 +32,10 @@ local no_detach = {} -- This detaches all chorus plants that are/were attached -- at start_pos. -mcl_end.detach_chorus_plant = function(start_pos, digger) +function mcl_end.detach_chorus_plant(start_pos, digger) -- This node should not call a detach function, do NOTHING local hash = minetest.hash_node_position(start_pos) - if no_detach[hash] ~= nil then + if no_detach[hash] then return end @@ -106,11 +109,11 @@ mcl_end.detach_chorus_plant = function(start_pos, digger) no_detach = {} end -mcl_end.check_detach_chorus_plant = function(pos, oldnode, oldmetadata, digger) +function mcl_end.check_detach_chorus_plant(pos, oldnode, oldmetadata, digger) mcl_end.detach_chorus_plant(pos, digger) end -mcl_end.check_blast_chorus_plant = function(pos) +function mcl_end.check_blast_chorus_plant(pos) minetest.remove_node(pos) mcl_end.detach_chorus_plant(pos) end @@ -139,7 +142,7 @@ minetest.register_node("mcl_end:chorus_flower", { node_placement_prediction = "", on_place = function(itemstack, placer, pointed_thing) local node_under = minetest.get_node(pointed_thing.under) - local node_above = minetest.get_node(pointed_thing.above) + --local node_above = minetest.get_node(pointed_thing.above) if placer and not placer:get_player_control().sneak then -- Use pointed node's on_rightclick function first, if present if minetest.registered_nodes[node_under.name] and minetest.registered_nodes[node_under.name].on_rightclick then @@ -309,7 +312,7 @@ minetest.register_node("mcl_end:chorus_plant", { }) -- Grow a complete chorus plant at pos -mcl_end.grow_chorus_plant = function(pos, node) +function mcl_end.grow_chorus_plant(pos, node, pr) local flowers = { pos } -- Plant initial flower (if it isn't there already) if not node then @@ -321,7 +324,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 +343,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) +function mcl_end.grow_chorus_plant_step(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 +399,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 +407,12 @@ 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 @@ -419,7 +421,7 @@ mcl_end.grow_chorus_plant_step = function(pos, node) end end - for _, f in ipairs(new_flowers) do + for _, f in pairs(new_flowers) do if age >= MAX_FLOWER_AGE then local nn = minetest.get_node(f).name if nn ~= "mcl_end:chorus_flower" and nn ~= "mcl_end:chorus_flower_dead" then @@ -451,13 +453,15 @@ mcl_end.grow_chorus_plant_step = function(pos, node) end --- ABM --- +local seed = minetest.get_mapgen_setting("seed") +local pr = PseudoRandom(seed) minetest.register_abm({ label = "Chorus plant growth", nodenames = { "mcl_end:chorus_flower" }, 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, }) @@ -470,7 +474,7 @@ minetest.register_abm({ -- * Maximum attempts: 16 -- -- Returns true on success. -local random_teleport = function(player) +local function random_teleport(player) local pos = player:get_pos() -- 16 attempts to find a suitable position for a=1, 16 do diff --git a/mods/ITEMS/mcl_end/depends.txt b/mods/ITEMS/mcl_end/depends.txt deleted file mode 100644 index 2adb4b59d..000000000 --- a/mods/ITEMS/mcl_end/depends.txt +++ /dev/null @@ -1,5 +0,0 @@ -mcl_sounds -mcl_util -doc_items -mcl_worlds -mcl_structures diff --git a/mods/ITEMS/mcl_end/end_crystal.lua b/mods/ITEMS/mcl_end/end_crystal.lua index c07ff7930..b7c80c55a 100644 --- a/mods/ITEMS/mcl_end/end_crystal.lua +++ b/mods/ITEMS/mcl_end/end_crystal.lua @@ -1,4 +1,6 @@ -local S = minetest.get_translator("mcl_end") +local S = minetest.get_translator(minetest.get_current_modname()) + +local vector = vector local explosion_strength = 6 @@ -27,8 +29,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 @@ -37,7 +47,7 @@ local function set_crystal_animation(self) end local function spawn_crystal(pos) - local crystal = minetest.add_entity(pos, "mcl_end:crystal") + minetest.add_entity(pos, "mcl_end:crystal") if not vector.equals(pos, vector.floor(pos)) then return end if mcl_worlds.pos_to_dimension(pos) ~= "end" then return end local portal_center @@ -58,8 +68,9 @@ local function spawn_crystal(pos) for _, crystal in pairs(crystals) do crystal_explode(crystal) end - local dragon = minetest.add_entity(vector.add(portal_center, {x = 0, y = 10, z = 0}), "mobs_mc:enderdragon") - dragon:get_luaentity()._egg_spawn_pos = minetest.pos_to_string(vector.add(portal_center, {x = 0, y = 4, z = 0})) + local portal_pos = vector.add(portal_center, vector.new(-3, -1, -3)) + mcl_structures.call_struct(portal_pos, "end_exit_portal") + minetest.add_entity(vector.add(portal_pos, vector.new(3, 11, 3)), "mobs_mc:enderdragon"):get_luaentity()._portal_pos = portal_pos end minetest.register_entity("mcl_end:crystal", { @@ -70,14 +81,62 @@ minetest.register_entity("mcl_end:crystal", { collisionbox = {-1, 0.5, -1, 1, 2.5, 1}, mesh = "mcl_end_crystal.b3d", textures = {"mcl_end_crystal.png"}, - collide_with_objects = true, + collide_with_objects = false, }, on_punch = crystal_explode, on_activate = set_crystal_animation, _exploded = false, _hittable_by_projectile = true }) - + +minetest.register_entity("mcl_end:crystal_beam", { + initial_properties = { + physical = false, + visual = "cube", + visual_size = {x = 1, y = 1, z = 1}, + textures = { + "mcl_end_crystal_beam.png^[transformR90", + "mcl_end_crystal_beam.png^[transformR90", + "mcl_end_crystal_beam.png", + "mcl_end_crystal_beam.png", + "blank.png", + "blank.png", + }, + static_save = false, + }, + spin = 0, + init = function(self, dragon, crystal) + self.dragon, self.crystal = dragon, crystal + crystal:get_luaentity().beam = self.object + dragon:get_luaentity().beam = self.object + end, + on_deactivate = function(self) + if self.crystal and self.crystal:get_luaentity() then + self.crystal:get_luaentity().beam = nil + end + if self.dragon and self.dragon:get_luaentity() then + self.dragon:get_luaentity().beam = nil + end + end, + on_step = function(self, dtime) + if self.dragon and self.dragon:get_luaentity() and self.crystal and self.crystal:get_luaentity() then + self.spin = self.spin + dtime * math.pi * 2 / 4 + local dragon_pos, crystal_pos = self.dragon:get_pos(), self.crystal:get_pos() + + dragon_pos.y = dragon_pos.y + 4 + crystal_pos.y = crystal_pos.y + 2 + + self.object:set_pos(vector.divide(vector.add(dragon_pos, crystal_pos), 2)) + local rot = vector.dir_to_rotation(vector.direction(dragon_pos, crystal_pos)) + rot.z = self.spin + self.object:set_rotation(rot) + self.object:set_properties({visual_size = {x = 0.5, y = 0.5, z = vector.distance(dragon_pos, crystal_pos)}}) + else + self.object:remove() + end + end, +}) + minetest.register_craftitem("mcl_end:crystal", { inventory_image = "mcl_end_crystal_item.png", description = S("End Crystal"), @@ -85,10 +144,16 @@ minetest.register_craftitem("mcl_end:crystal", { on_place = function(itemstack, placer, pointed_thing) if pointed_thing.type == "node" then local pos = minetest.get_pointed_thing_position(pointed_thing) - local node = minetest.get_node(pos).name + local node = minetest.get_node(pos) + local node_name = node.name + if placer and not placer:get_player_control().sneak then + if minetest.registered_nodes[node_name] and minetest.registered_nodes[node_name].on_rightclick then + return minetest.registered_nodes[node_name].on_rightclick(pointed_thing.under, node, placer, itemstack) or itemstack + end + end if find_crystal(pos) then return itemstack end - if node == "mcl_core:obsidian" or node == "mcl_core:bedrock" then - if not minetest.is_creative_enabled(placer:get_player_name()) then + if node_name == "mcl_core:obsidian" or node_name == "mcl_core:bedrock" then + if not minetest.is_creative_enabled(placer:get_player_name()) then itemstack:take_item() end spawn_crystal(pos) @@ -110,5 +175,5 @@ minetest.register_craft({ {"mcl_core:glass", "mcl_mobitems:ghast_tear", "mcl_core:glass"}, } }) - + minetest.register_alias("mcl_end_crystal:end_crystal", "mcl_end:crystal") diff --git a/mods/ITEMS/mcl_end/eye_of_ender.lua b/mods/ITEMS/mcl_end/eye_of_ender.lua index 16f1c906b..ea3d70aba 100644 --- a/mods/ITEMS/mcl_end/eye_of_ender.lua +++ b/mods/ITEMS/mcl_end/eye_of_ender.lua @@ -1,5 +1,5 @@ -- Eye of Ender -local S = minetest.get_translator("mcl_end") +local S = minetest.get_translator(minetest.get_current_modname()) minetest.register_entity("mcl_end:ender_eye", { physical = false, @@ -29,7 +29,7 @@ minetest.register_entity("mcl_end:ender_eye", { if self._age >= 3 then -- End of life local r = math.random(1,5) - if r == 1 or minetest.is_creative_enabled("") then + if r == 1 then -- 20% chance to get destroyed completely. -- 100% if in Creative Mode self.object:remove() diff --git a/mods/ITEMS/mcl_end/locale/mcl_end.pl.tr b/mods/ITEMS/mcl_end/locale/mcl_end.pl.tr new file mode 100644 index 000000000..e6526b265 --- /dev/null +++ b/mods/ITEMS/mcl_end/locale/mcl_end.pl.tr @@ -0,0 +1,33 @@ +# textdomain: mcl_end +End Stone=Kamień Kresu +End Stone Bricks=Ceglany kamień Kresu +Purpur Block=Blok purpury +Purpur Pillar=Filar purpury +End Rod=Różdżka Kresu +End rods are decorative light sources.=Różdżki Kresu są dekoracyjnymi źródłami światła. +Dragon Egg=Jajo smoka +A dragon egg is a decorative item which can be placed.=Jajo smoka jest przedmiotem dekoracyjnym, który można postawić. +Chorus Flower=Kwiat refrenusu +A chorus flower is the living part of a chorus plant. It can grow into a tall chorus plant, step by step. When it grows, it may die on old age eventually. It also dies when it is unable to grow.=Kwiat refrenusu jest żywą częścią rośliny refrenusu. Może wyrosnąć w wysoką roślinę refrenusu blok po bloku. Gdy rośnie może po pewnym czasie umrzeć ze starości. Umiera również gdy nie jest w stanie rosnąć. +Place it and wait for it to grow. It can only be placed on top of end stone, on top of a chorus plant stem, or at the side of exactly one chorus plant stem.=Postaw go i poczekaj aż urośnie. Może być postawiony tylko na kamieniu Kresu, na łodydze rośliny refrenusu lub na boku dokładnie jednej łodygi rośliny refrenusu. +Dead Chorus Flower=Martwy kwiat refrenusu +This is a part of a chorus plant. It doesn't grow. Chorus flowers die of old age or when they are unable to grow. A dead chorus flower can be harvested to obtain a fresh chorus flower which is able to grow again.=Jest to część rośliny refrenusu, która nie rośnie. Kwiaty refrenusu umierają ze starości lub gdy nie mogą rosnąć. Martwy kwiat refrenusu może zostać zebrany by otrzymać świeży kwiat refrenusu, który znów może urosnąć. +Chorus Plant Stem=Łodyga rośliny refrenusu +A chorus plant stem is the part of a chorus plant which holds the whole plant together. It needs end stone as its soil. Stems are grown from chorus flowers.=Łodyga rośliny refrenusu to część rośliny która utrzymuje całą roślinę razem. Potrzebuje kamienia Kresu jako podłoża. Łodygi wyrastają z kwiatów refrenusu. +Chorus Fruit=Owoc refrenusu +A chorus fruit is an edible fruit from the chorus plant which is home to the End. Eating it teleports you to the top of a random solid block nearby, provided you won't end up inside a liquid, solid or harmful blocks. Teleportation might fail if there are very few or no places to teleport to.=Owoc refrenusu jest jadalną częścią rośliny refrenusu, której naturalnym środowiskiem jest Kres. Zjedzenie go teleportuje cię na górę któregoś losowego stałego bloku w pobliżu, jeśli nie wylądowałbyś w płynie, stałym bloku lub szkodliwym bloku. Teleportacja może się nie udać jeśli nie ma, lub jest mało bloków które spełniają te warunki. +Popped Chorus Fruit=Prażony owoc refrenusu +Eye of Ender=Oko Kresu +This item is used to locate End portal shrines in the Overworld and to activate End portals.=Ten przedmiot jest wykorzystywany do znajdowaniu kapliczek portalu Kresu na Powierzchni oraz do aktywacji portali Kresu. +Use the attack key to release the eye of ender. It will rise and fly in the horizontal direction of the closest end portal shrine. If you're very close, the eye of ender will take the direct path to the End portal shrine instead. After a few seconds, it stops. It may drop as an item, but there's a 20% chance it shatters.=Użyj przycisku ataku aby wypuścić oko Kresu. Podniesie się ono i poleci w poziomym kierunku najbliższej kapliczki portalu. Jeśli jesteś bardzo blisko, oko Kresu podąży bezpośrednią ścieżką do kapliczki portalu Kresu. Po kilku sekundach się zatrzymuje. Może wypaść jako przedmiot, jednak jest 20% szans, że się rozbije. +To activate an End portal, eyes of ender need to be placed into each block of an intact End portal frame.=Aby aktywować portal Kresu, w każdym bloku ramy portalu Kresu musi znajdować się oko Kresu. +NOTE: The End dimension is currently incomplete and might change in future versions.=UWAGA: Wymiar Kresu jest aktualnie nieukończony i może się zmienić w przyszłych wersjach. +The stem attaches itself to end stone and other chorus blocks.=Łodyga przytwierdza się do kamienia Kresu i innych refrenusowych bloków. +Grows on end stone=Rośnie na kamieniu Kresu +Randomly teleports you when eaten=Losowo teleportuje przy zjedzeniu +Guides the way to the mysterious End dimension=Prowadzi do tajemniczego wymiaru Kresu +End Crystal=Kryształ Kresu +End Crystals are explosive devices. They can be placed on Obsidian or Bedrock. Ignite them by a punch or a hit with an arrow. End Crystals can also be used the spawn the Ender Dragon by placing one at each side of the End Exit Portal.=Kryształy kresu to wybuchowe narzędzia. Mogą być postawione na obsydianie bądź skale macierzystej. Zapal je uderzeniem bądź strzałą. Kryształy kresu mogą być również wykorzystane do przywołania smoka Kresu, jeśli ułoży się po jednym na każdym boku Portalu wyjścia z Kresu. +Explosion radius: @1=Promień wybuchu: @1 +Ignited by a punch or a hit with an arrow=Zapalane przez uderzenie lub strzałę +Place the End Crystal on Obsidian or Bedrock, then punch it or hit it with an arrow to cause an huge and probably deadly explosion. To Spawn the Ender Dragon, place one at each side of the End Exit Portal.=Postaw kryształ na obsydianie lub skale macierzystej, a następnie uderz bądź strzel w niego strzałą, aby wywołać dużą, prawdopodobnie śmiertelną, eksplozję. Aby przywołać smoka Kresu postaw po jednej na każdym boku Portalu wyjścia z Kresu. diff --git a/mods/ITEMS/mcl_end/mod.conf b/mods/ITEMS/mcl_end/mod.conf new file mode 100644 index 000000000..021417e86 --- /dev/null +++ b/mods/ITEMS/mcl_end/mod.conf @@ -0,0 +1,2 @@ +name = mcl_end +depends = screwdriver, mcl_sounds, mcl_util, doc_items, mcl_worlds, mcl_structures \ No newline at end of file diff --git a/mods/ITEMS/mcl_end/textures/mcl_end_crystal_beam.png b/mods/ITEMS/mcl_end/textures/mcl_end_crystal_beam.png new file mode 100644 index 0000000000000000000000000000000000000000..1259a5d0ec80af0c59843b46c21fda8853fa9601 GIT binary patch literal 2065 zcmV+s2=4cZP)EK|00004XF*Lt006O% z3;baP00009a7bBm000id000id0mpBsWB>pMvq?ljRCr#cTL*F+ISkzY|5M2dmX#&T znmfV+7@-lyzN)K|ha?C#8qK(;ZQD-h|M&Oz|3Blhhld9$`}OM=Rqz$lhRC2cFliX- zK=(7(-FGr(4BX$}r(RrLU2&PIgD@~gzrMa;L-qy@p~E70a1@8sK-aSj_wDUX>Ygg# z_Hk0>>+5Tc1^xZ__=uS{4CCqc_SP7f3?blUK74$95U&@<_y0P8#RKVG#r^c{+qcv! zuGbPt;X%gE&dypMOx>s9jXijMeTBmr8^}Ui=7JwDFai}x8|9Glw=j$@&Q&=X3l(;- zw#9SgvLe{_{rmSa7s$ZkJ2Le2^n^VaQdlrCfK9Vdcj7U~SjfZRa`|@%k5b=Jgwpt~ zF7EE`JP!hM=|eRScA!pV-G{MF=R*mGqR`S;hkG&vQ^(8Pq29P>4f-h7+)&R*{0#vH zrR#_yl~GVroQP^@u(aUw^E30r0}C(US3{w8pDnP6ICNB zyS%*2w7`Jqf$Tyl<Cqp=>5bsjFN^1`~Kw;gkQ5gl#1H_3@GF7|}%=6OL4S~v^pP$oC z!~j?amKmv+x}6sl4q=T%l>s~H`}z4f(Lf7s*Lz!@RcPbCmUtBp#IU09NK|?JWPQ3; z4$ADvLTjb{TZl*t(rTEk-2ASsGA1hI=FE1v&w4?wqfHp;yeIaD29_mdNS$_q)}LF0RUuB3_Do|(<^s0m1S&A0vVhT6FWnx0plv~$|`;^mAAp>D$N<4>tp_FjJhyt zqp*W2olS%6^c%_*Up{mIiXL>r>9o-dTmF%4F73|I$WXVF`tL4oUgOVSq zyWLiZfj=ERz3~xCr>#XC;6)hDBo`_S;4x6e|4>FA=!@Ec8kw-8B~F*tW)emQI(AYA zyey;zMsg)chFm1beI0r-z~klur-$VdATUuK2~UzLo!az?-C-W2kwKT&27?_7pWf_& z|8C|+LK_Z#pP<|nuN;KaXZ=c4MrKdb;?;?T#H6@f{H-wkPl0MF$P}V z7}zeIGs%+(O$?y$O1p^xQ^x~4#vs#5W};D?AQDl^k~uqx_fup}B<;^IS=BOx@|=z1P&BVpYWh{#?y4>!D1 zbR?>b94C@LZwnwcufk;Pd?b=Z!RVd~uP#f^*2S=26M3$9B88rdWe(MyOz)-Gq)c4G z((E0h2g%e%4;cZF!2mjtMA0z&X*dM0dpfKmqa zWh|%<7+U(+S2r#VArB7W@;4KU5g0MB=XaIHp|eHzP7h4ERwKRKud=P2xvEp$Ls6j0 z!vnYw(kcoDZA7AuX(1whQN9F+GcbGDoD$6(fn@GwDztx(l2!>vrV%oP#EVL`qb3fG z7^9ev3sn5@}VPAtC!_|S@)Ry3 0 end @@ -99,7 +99,7 @@ minetest.register_abm({ -- No decay near unloaded areas since these might include water. if not check_surroundings(pos, "ignore") then if wet <= 0 then - local n_def = minetest.registered_nodes[node.name] or nil + --local n_def = minetest.registered_nodes[node.name] or nil local nn = minetest.get_node_or_nil({x=pos.x,y=pos.y+1,z=pos.z}) if not nn or not nn.name then return diff --git a/mods/ITEMS/mcl_farming/textures/mcl_farming_pumpkin_face.png b/mods/ITEMS/mcl_farming/textures/mcl_farming_pumpkin_face.png index a2fd0fbf9b4e115697162aef807e8723f5b6354a..095b90cc6725a2e25c84b0b7f05232890683696b 100644 GIT binary patch delta 274 zcmeyuvYtt&Gr-TCmrII^fq{Y7)59eQNIL+r0t+*c4A`8!9Y|>f_=LDJ7&1)MRIlH= z%QqD$#8?vK7tG-B>_!@pv)R+dF~s8Z+kQj7CIgYS>KR!wcjCNbW4ttv1aeq-bHC#$ zV%C3DSaPL8rq)lTznuBslhfv3{Quc0rYQxdE@jf*@nRiY?dnF|83*0te>Uo-u-{Zm zkNhNDc316N+(%(W?oxw4EJrrB-1sOQD-_hd{G9!&Epwc{&z6|i3@ATP!kwf>3Z%O}i?%oUjRquPEckZvhV7#?SGwI|c&wWAr WteWkaGd2R<&*16m=d#Wzp$PzAiflaq delta 602 zcmV-g0;T=00`vqaiBL{Q4GJ0x0000DNk~Le0001h0000$1Oos703i5cOaK4?Cs0gO zMUgBge{H{_(EtDd0d!JMQvg8b*k%9#0sBcrK~#7F?UONcn=lxL^B07&G#h-#Lp@1= zJS2+&<*)b3Alq8z)Q{P6O8o<7gQMuC)OBf5i@p7&+0t6vgrlf(_rzYL~i1NnShD zT5x^e0E3@DB1Pf8WdID>3kvc5tH+QN1UHYc zWA=iK-8=??i@^PhU*MLNRKmedxy`B-wco;ZLFzVlkzcT^h~FRxlIz@0Tqj5=go*tYkmsKFjLwsG z`fvOpP{1@smpJ0-kdlu%y~IHQF5{Yu75zu1DGWylWT@SgHQta8e)ki$-_DVL`iA>G`0&>p5?9 zHykmdOrmpS5u};nKEU{lqvt^FO1C1ICE8G2mk;807*qoM6N<$f{siQnE(I) diff --git a/mods/ITEMS/mcl_farming/textures/mcl_farming_pumpkin_hud.png b/mods/ITEMS/mcl_farming/textures/mcl_farming_pumpkin_hud.png new file mode 100644 index 0000000000000000000000000000000000000000..48f47253b9d6cdda13c6303fbbc0dcf36af5144c GIT binary patch literal 20377 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 IM6N<$g8i#Sx&QzG literal 0 HcmV?d00001 diff --git a/mods/ITEMS/mcl_farming/wheat.lua b/mods/ITEMS/mcl_farming/wheat.lua index 9a8a9f65e..da1b84b2d 100644 --- a/mods/ITEMS/mcl_farming/wheat.lua +++ b/mods/ITEMS/mcl_farming/wheat.lua @@ -1,11 +1,14 @@ -local S = minetest.get_translator("mcl_farming") +local S = minetest.get_translator(minetest.get_current_modname()) minetest.register_craftitem("mcl_farming:wheat_seeds", { -- Original Minecraft name: “Seeds” description = S("Wheat Seeds"), _tt_help = S("Grows on farmland"), _doc_items_longdesc = S("Grows into a wheat plant. Chickens like wheat seeds."), - _doc_items_usagehelp = S("Place the wheat seeds on farmland (which can be created with a hoe) to plant a wheat plant. They grow in sunlight and grow faster on hydrated farmland. Rightclick an animal to feed it wheat seeds."), + _doc_items_usagehelp = S([[ + Place the wheat seeds on farmland (which can be created with a hoe) to plant a wheat plant. + They grow in sunlight and grow faster on hydrated farmland. Rightclick an animal to feed it wheat seeds. + ]]), groups = { craftitem=1 }, inventory_image = "mcl_farming_wheat_seeds.png", on_place = function(itemstack, placer, pointed_thing) @@ -28,7 +31,10 @@ for i=1,7 do if i == 1 then create = true name = S("Premature Wheat Plant") - longdesc = S("Premature wheat plants grow on farmland under sunlight in 8 stages. On hydrated farmland, they grow faster. They can be harvested at any time but will only yield a profit when mature.") + longdesc = S([[ + Premature wheat plants grow on farmland under sunlight in 8 stages. + On hydrated farmland, they grow faster. They can be harvested at any time but will only yield a profit when mature. + ]]) else create = false end @@ -54,7 +60,8 @@ for i=1,7 do {-0.5, -0.5, -0.5, 0.5, sel_heights[i], 0.5} }, }, - groups = {dig_immediate=3, not_in_creative_inventory=1, plant=1,attached_node=1, dig_by_water=1,destroy_by_lava_flow=1, dig_by_piston=1}, + groups = {dig_immediate=3, not_in_creative_inventory=1, plant=1,attached_node=1, + dig_by_water=1,destroy_by_lava_flow=1, dig_by_piston=1}, sounds = mcl_sounds.node_sound_leaves_defaults(), _mcl_blast_resistance = 0, }) @@ -62,7 +69,10 @@ end minetest.register_node("mcl_farming:wheat", { description = S("Mature Wheat Plant"), - _doc_items_longdesc = S("Mature wheat plants are ready to be harvested for wheat and wheat seeds. They won't grow any further."), + _doc_items_longdesc = S([[ + Mature wheat plants are ready to be harvested for wheat and wheat seeds. + They won't grow any further. + ]]), sunlight_propagates = true, paramtype = "light", paramtype2 = "meshoptions", @@ -75,13 +85,14 @@ minetest.register_node("mcl_farming:wheat", { drop = { max_items = 4, items = { - { items = {'mcl_farming:wheat_seeds'} }, - { items = {'mcl_farming:wheat_seeds'}, rarity = 2}, - { items = {'mcl_farming:wheat_seeds'}, rarity = 5}, - { items = {'mcl_farming:wheat_item'} } + { items = {"mcl_farming:wheat_seeds"} }, + { items = {"mcl_farming:wheat_seeds"}, rarity = 2}, + { items = {"mcl_farming:wheat_seeds"}, rarity = 5}, + { items = {"mcl_farming:wheat_item"} } } }, - groups = {dig_immediate=3, not_in_creative_inventory=1, plant=1,attached_node=1, dig_by_water=1,destroy_by_lava_flow=1, dig_by_piston=1}, + groups = {dig_immediate=3, not_in_creative_inventory=1, plant=1, attached_node=1, + dig_by_water=1,destroy_by_lava_flow=1, dig_by_piston=1}, sounds = mcl_sounds.node_sound_leaves_defaults(), _mcl_blast_resistance = 0, }) @@ -99,14 +110,14 @@ minetest.register_craftitem("mcl_farming:wheat_item", { minetest.register_craft({ output = "mcl_farming:bread", recipe = { - {'mcl_farming:wheat_item', 'mcl_farming:wheat_item', 'mcl_farming:wheat_item'}, + {"mcl_farming:wheat_item", "mcl_farming:wheat_item", "mcl_farming:wheat_item"}, } }) minetest.register_craft({ output = "mcl_farming:cookie 8", recipe = { - {'mcl_farming:wheat_item', 'mcl_dye:brown', 'mcl_farming:wheat_item'}, + {"mcl_farming:wheat_item", "mcl_dye:brown", "mcl_farming:wheat_item"}, } }) @@ -131,7 +142,7 @@ minetest.register_craftitem("mcl_farming:bread", { on_secondary_use = minetest.item_eat(5), }) -local mod_screwdriver = minetest.get_modpath("screwdriver") ~= nil +local mod_screwdriver = minetest.get_modpath("screwdriver") local on_rotate if mod_screwdriver then on_rotate = screwdriver.rotate_3way @@ -144,9 +155,9 @@ minetest.register_node("mcl_farming:hay_block", { is_ground_content = false, stack_max = 64, paramtype2 = "facedir", - is_ground_content = false, on_place = mcl_util.rotate_axis, - groups = {handy=1, flammable=2, fire_encouragement=60, fire_flammability=20, building_block=1, fall_damage_add_percent=-80}, + groups = {handy=1, hoey=1, flammable=2, fire_encouragement=60, + fire_flammability=20, building_block=1, fall_damage_add_percent=-80}, sounds = mcl_sounds.node_sound_leaves_defaults(), on_rotate = on_rotate, _mcl_blast_resistance = 0.5, @@ -154,18 +165,18 @@ minetest.register_node("mcl_farming:hay_block", { }) minetest.register_craft({ - output = 'mcl_farming:hay_block', + output = "mcl_farming:hay_block", recipe = { - {'mcl_farming:wheat_item', 'mcl_farming:wheat_item', 'mcl_farming:wheat_item'}, - {'mcl_farming:wheat_item', 'mcl_farming:wheat_item', 'mcl_farming:wheat_item'}, - {'mcl_farming:wheat_item', 'mcl_farming:wheat_item', 'mcl_farming:wheat_item'}, + {"mcl_farming:wheat_item", "mcl_farming:wheat_item", "mcl_farming:wheat_item"}, + {"mcl_farming:wheat_item", "mcl_farming:wheat_item", "mcl_farming:wheat_item"}, + {"mcl_farming:wheat_item", "mcl_farming:wheat_item", "mcl_farming:wheat_item"}, } }) minetest.register_craft({ - output = 'mcl_farming:wheat_item 9', + output = "mcl_farming:wheat_item 9", recipe = { - {'mcl_farming:hay_block'}, + {"mcl_farming:hay_block"}, } }) diff --git a/mods/ITEMS/mcl_fences/depends.txt b/mods/ITEMS/mcl_fences/depends.txt deleted file mode 100644 index 217875c56..000000000 --- a/mods/ITEMS/mcl_fences/depends.txt +++ /dev/null @@ -1,4 +0,0 @@ -mcl_core -mcl_sounds -doc? -screwdriver? diff --git a/mods/ITEMS/mcl_fences/init.lua b/mods/ITEMS/mcl_fences/init.lua index 650854f88..243cc2219 100644 --- a/mods/ITEMS/mcl_fences/init.lua +++ b/mods/ITEMS/mcl_fences/init.lua @@ -1,4 +1,4 @@ -local S = minetest.get_translator("mcl_fences") +local S = minetest.get_translator(minetest.get_current_modname()) -- Node box local p = {-2/16, -0.5, -2/16, 2/16, 0.5, 2/16} @@ -20,7 +20,7 @@ local cz2 = {-2/16, -0.5, 2/16, 2/16, 1.01, 0.5} --unten(quer) z mcl_fences = {} -mcl_fences.register_fence = function(id, fence_name, texture, groups, hardness, blast_resistance, connects_to, sounds) +function mcl_fences.register_fence(id, fence_name, texture, groups, hardness, blast_resistance, connects_to, sounds) local cgroups = table.copy(groups) if cgroups == nil then cgroups = {} end cgroups.fence = 1 @@ -72,11 +72,11 @@ mcl_fences.register_fence = function(id, fence_name, texture, groups, hardness, return fence_id end -mcl_fences.register_fence_gate = function(id, fence_gate_name, texture, groups, hardness, blast_resistance, sounds, sound_open, sound_close, sound_gain_open, sound_gain_close) +function mcl_fences.register_fence_gate(id, fence_gate_name, texture, groups, hardness, blast_resistance, sounds, sound_open, sound_close, sound_gain_open, sound_gain_close) local meta2 local state2 = 0 - local function update_gate(pos, node) + local function update_gate(pos, node) minetest.set_node(pos, node) end @@ -237,7 +237,7 @@ mcl_fences.register_fence_gate = function(id, fence_gate_name, texture, groups, return gate_id, open_gate_id end -mcl_fences.register_fence_and_fence_gate = function(id, fence_name, fence_gate_name, texture_fence, groups, hardness, blast_resistance, connects_to, sounds, sound_open, sound_close, sound_gain_open, sound_gain_close, texture_fence_gate) +function mcl_fences.register_fence_and_fence_gate(id, fence_name, fence_gate_name, texture_fence, groups, hardness, blast_resistance, connects_to, sounds, sound_open, sound_close, sound_gain_open, sound_gain_close, texture_fence_gate) if texture_fence_gate == nil then texture_fence_gate = texture_fence end @@ -272,17 +272,17 @@ for w=1, #woods do mcl_fences.register_fence_and_fence_gate(id, wood[2], wood[3], wood[4], wood_groups, 2, 15, wood_connect, wood_sounds) minetest.register_craft({ - output = 'mcl_fences:'..id..' 3', + output = "mcl_fences:"..id.." 3", recipe = { - {wood[6], 'mcl_core:stick', wood[6]}, - {wood[6], 'mcl_core:stick', wood[6]}, + {wood[6], "mcl_core:stick", wood[6]}, + {wood[6], "mcl_core:stick", wood[6]}, } }) minetest.register_craft({ - output = 'mcl_fences:'..id_gate, + output = "mcl_fences:"..id_gate, recipe = { - {'mcl_core:stick', wood[6], 'mcl_core:stick'}, - {'mcl_core:stick', wood[6], 'mcl_core:stick'}, + {"mcl_core:stick", wood[6], "mcl_core:stick"}, + {"mcl_core:stick", wood[6], "mcl_core:stick"}, } }) end @@ -292,7 +292,7 @@ end mcl_fences.register_fence("nether_brick_fence", S("Nether Brick Fence"), "mcl_fences_fence_nether_brick.png", {pickaxey=1, deco_block=1, fence_nether_brick=1}, 2, 30, {"group:fence_nether_brick"}, mcl_sounds.node_sound_stone_defaults()) minetest.register_craft({ - output = 'mcl_fences:nether_brick_fence 6', + output = "mcl_fences:nether_brick_fence 6", recipe = { {"mcl_nether:nether_brick", "mcl_nether:netherbrick", "mcl_nether:nether_brick"}, {"mcl_nether:nether_brick", "mcl_nether:netherbrick", "mcl_nether:nether_brick"}, diff --git a/mods/ITEMS/mcl_fences/locale/mcl_fences.de.tr b/mods/ITEMS/mcl_fences/locale/mcl_fences.de.tr index 5a76fc59e..e4f2a5fa6 100644 --- a/mods/ITEMS/mcl_fences/locale/mcl_fences.de.tr +++ b/mods/ITEMS/mcl_fences/locale/mcl_fences.de.tr @@ -1,6 +1,6 @@ # textdomain: mcl_fences Fences are structures which block the way. Fences will connect to each other and solid blocks. They cannot be jumped over with a simple jump.=Zäune sind Gebäude, die den Weg blockieren. Sie verbinden sich gegenseitig und anderen festen Blöcken. Man kann sie nicht mit normalen Sprüngen überspringen. -Fence gates can be opened or closed and can't be jumped over. Fences will connect nicely to fence gates.=Zauntore können geöffnet und geschlossen werden und können nicht übersprungen werden. Zäune werden sich gut mit Zauntoren verbinden. +Fence gates can be opened or closed and can't be jumped over. Fences will connect nicely to fence gates.=Zauntore können geöffnet und geschlossen werden und können nicht übersprungen werden. Zäune lassen sich gut mit Zauntoren verbinden. Right-click the fence gate to open or close it.=Rechtsklicken Sie auf ein Zauntor, um es zu öffnen oder zu schließen. Oak Fence=Eichenzaun Oak Fence Gate=Eichenzauntor diff --git a/mods/ITEMS/mcl_fences/locale/mcl_fences.pl.tr b/mods/ITEMS/mcl_fences/locale/mcl_fences.pl.tr new file mode 100644 index 000000000..794986b58 --- /dev/null +++ b/mods/ITEMS/mcl_fences/locale/mcl_fences.pl.tr @@ -0,0 +1,19 @@ +# textdomain: mcl_fences +Fences are structures which block the way. Fences will connect to each other and solid blocks. They cannot be jumped over with a simple jump.=Płoty są strukturami blokującymi przejścia. Nie połączą się one z innymi blokami. Nie można też nad nimi przeskoczyć pojedynczym skokiem. +Fence gates can be opened or closed and can't be jumped over. Fences will connect nicely to fence gates.=Furtki mogą być otwierane i zamykane, ale nie można ich przeskoczyć. Łączą się one ładnie z płotem. +Right-click the fence gate to open or close it.=Naciśnij prawy przycisk myszy by otworzyć lub zamknąć furtkę. +Oak Fence=Dębowy płot +Oak Fence Gate=Dębowa furtka +Spruce Fence=Świerkowy płot +Spruce Fence Gate=Świerkowa furtka +Birch Fence=Brzozowy płot +Birch Fence Gate=Brzozowa furtka +Jungle Fence=Tropikalny płot +Jungle Fence Gate=Tropikalna furtka +Dark Oak Fence=Ciemno-dębowy płot +Dark Oak Fence Gate=Ciemno-dębowa furtka +Acacia Fence=Akacjowy płot +Acacia Fence Gate=Akacjowa furtka +Nether Brick Fence=Płot z Netherowych cegieł +Openable by players and redstone power=Może być otworzony przez graczy i energię czerwienitu + diff --git a/mods/ITEMS/mcl_fences/mod.conf b/mods/ITEMS/mcl_fences/mod.conf index b5eafa90f..8b20dd169 100644 --- a/mods/ITEMS/mcl_fences/mod.conf +++ b/mods/ITEMS/mcl_fences/mod.conf @@ -1 +1,3 @@ name = mcl_fences +depends = mcl_core, mcl_sounds +optional_depends = doc, screwdriver diff --git a/mods/ITEMS/mcl_fire/depends.txt b/mods/ITEMS/mcl_fire/depends.txt deleted file mode 100644 index 97699f211..000000000 --- a/mods/ITEMS/mcl_fire/depends.txt +++ /dev/null @@ -1,5 +0,0 @@ -mcl_core -mcl_worlds -mcl_sounds -mcl_particles -mcl_portals? diff --git a/mods/ITEMS/mcl_fire/fire_charge.lua b/mods/ITEMS/mcl_fire/fire_charge.lua index dcf4ddb00..4d18e44ed 100644 --- a/mods/ITEMS/mcl_fire/fire_charge.lua +++ b/mods/ITEMS/mcl_fire/fire_charge.lua @@ -1,9 +1,12 @@ -local S = minetest.get_translator("mcl_fire") +local S = minetest.get_translator(minetest.get_current_modname()) + +local get_node = minetest.get_node +local add_entity = minetest.add_entity -- Fire Charge minetest.register_craftitem("mcl_fire:fire_charge", { description = S("Fire Charge"), - _tt_help = S("Dispenser projectile").."\n"..S("Starts fires and ignites blocks"), + _tt_help = S("Dispenser projectile").."\n"..S("Starts fires and ignites blocks"), _doc_items_longdesc = S("Fire charges are primarily projectiles which can be launched from dispensers, they will fly in a straight line and burst into a fire on impact. Alternatively, they can be used to ignite fires directly."), _doc_items_usagehelp = S("Put the fire charge into a dispenser and supply it with redstone power to launch it. To ignite a fire directly, simply place the fire charge on the ground, which uses it up."), inventory_image = "mcl_fire_fire_charge.png", @@ -11,11 +14,9 @@ minetest.register_craftitem("mcl_fire:fire_charge", { stack_max = 64, on_place = function(itemstack, user, pointed_thing) -- Use pointed node's on_rightclick function first, if present - local node = minetest.get_node(pointed_thing.under) - if user and not user:get_player_control().sneak then - if minetest.registered_nodes[node.name] and minetest.registered_nodes[node.name].on_rightclick then - return minetest.registered_nodes[node.name].on_rightclick(pointed_thing.under, node, user, itemstack) or itemstack - end + local new_stack = mcl_util.call_on_rightclick(itemstack, user, pointed_thing) + if new_stack then + return new_stack end -- Check protection @@ -26,6 +27,7 @@ minetest.register_craftitem("mcl_fire:fire_charge", { end -- Ignite/light fire + local node = get_node(pointed_thing.under) if pointed_thing.type == "node" then local nodedef = minetest.registered_nodes[node.name] if nodedef and nodedef._on_ignite then @@ -45,7 +47,7 @@ minetest.register_craftitem("mcl_fire:fire_charge", { _on_dispense = function(stack, pos, droppos, dropnode, dropdir) -- Throw fire charge local shootpos = vector.add(pos, vector.multiply(dropdir, 0.51)) - local fireball = minetest.add_entity(shootpos, "mobs_mc:blaze_fireball") + local fireball = add_entity(shootpos, "mobs_mc:blaze_fireball") local ent = fireball:get_luaentity() ent._shot_from_dispenser = true local v = ent.velocity or 1 @@ -56,7 +58,7 @@ minetest.register_craftitem("mcl_fire:fire_charge", { }) minetest.register_craft({ - type = 'shapeless', - output = 'mcl_fire:fire_charge 3', - recipe = { 'mcl_mobitems:blaze_powder', 'group:coal', 'mcl_mobitems:gunpowder' }, + type = "shapeless", + output = "mcl_fire:fire_charge 3", + recipe = { "mcl_mobitems:blaze_powder", "group:coal", "mcl_mobitems:gunpowder" }, }) diff --git a/mods/ITEMS/mcl_fire/flint_and_steel.lua b/mods/ITEMS/mcl_fire/flint_and_steel.lua index 54c2f1fac..39a4ce882 100644 --- a/mods/ITEMS/mcl_fire/flint_and_steel.lua +++ b/mods/ITEMS/mcl_fire/flint_and_steel.lua @@ -1,9 +1,11 @@ -local S = minetest.get_translator("mcl_fire") +local S = minetest.get_translator(minetest.get_current_modname()) +local get_node = minetest.get_node +local add_node = minetest.add_node -- Flint and Steel minetest.register_tool("mcl_fire:flint_and_steel", { description = S("Flint and Steel"), - _tt_help = S("Starts fires and ignites blocks"), + _tt_help = S("Starts fires and ignites blocks"), _doc_items_longdesc = S("Flint and steel is a tool to start fires and ignite blocks."), _doc_items_usagehelp = S("Rightclick the surface of a block to attempt to light a fire in front of it or ignite the block. A few blocks have an unique reaction when ignited."), inventory_image = "mcl_fire_flint_and_steel.png", @@ -12,11 +14,9 @@ minetest.register_tool("mcl_fire:flint_and_steel", { groups = { tool = 1, }, on_place = function(itemstack, user, pointed_thing) -- Use pointed node's on_rightclick function first, if present - local node = minetest.get_node(pointed_thing.under) - if user and not user:get_player_control().sneak then - if minetest.registered_nodes[node.name] and minetest.registered_nodes[node.name].on_rightclick then - return minetest.registered_nodes[node.name].on_rightclick(pointed_thing.under, node, user, itemstack) or itemstack - end + local new_stack = mcl_util.call_on_rightclick(itemstack, user, pointed_thing) + if new_stack then + return new_stack end -- Check protection local protname = user:get_player_name() @@ -33,7 +33,7 @@ minetest.register_tool("mcl_fire:flint_and_steel", { ) local used = false if pointed_thing.type == "node" then - local nodedef = minetest.registered_nodes[minetest.get_node(pointed_thing.under).name] + local nodedef = minetest.registered_nodes[get_node(pointed_thing.under).name] if nodedef and nodedef._on_ignite then local overwrite = nodedef._on_ignite(user, pointed_thing) if not overwrite then @@ -56,7 +56,7 @@ minetest.register_tool("mcl_fire:flint_and_steel", { _on_dispense = function(stack, pos, droppos, dropnode, dropdir) -- Ignite air if dropnode.name == "air" then - minetest.add_node(droppos, {name="mcl_fire:fire"}) + add_node(droppos, {name="mcl_fire:fire"}) if not minetest.is_creative_enabled("") then stack:add_wear(65535/65) -- 65 uses end @@ -74,7 +74,7 @@ minetest.register_tool("mcl_fire:flint_and_steel", { }) minetest.register_craft({ - type = 'shapeless', - output = 'mcl_fire:flint_and_steel', - recipe = { 'mcl_core:iron_ingot', 'mcl_core:flint'}, + type = "shapeless", + output = "mcl_fire:flint_and_steel", + recipe = { "mcl_core:iron_ingot", "mcl_core:flint"}, }) diff --git a/mods/ITEMS/mcl_fire/init.lua b/mods/ITEMS/mcl_fire/init.lua index 50303e3b2..9f1337a5d 100644 --- a/mods/ITEMS/mcl_fire/init.lua +++ b/mods/ITEMS/mcl_fire/init.lua @@ -2,8 +2,27 @@ mcl_fire = {} -local S = minetest.get_translator("mcl_fire") -local N = function(s) return s end +local modname = minetest.get_current_modname() +local modpath = minetest.get_modpath(modname) +local S = minetest.get_translator(modname) + +local has_mcl_portals = minetest.get_modpath("mcl_portals") + +local set_node = minetest.set_node +local get_node = minetest.get_node +local add_node = minetest.add_node +local remove_node = minetest.remove_node +local swap_node = minetest.swap_node +local get_node_or_nil = minetest.get_node_or_nil + +local find_nodes_in_area = minetest.find_nodes_in_area +local find_node_near = minetest.find_node_near +local get_item_group = minetest.get_item_group + +local get_connected_players = minetest.get_connected_players + +local vector = vector +local math = math -- inverse pyramid pattern above lava source, floor 1 of 2: local lava_fire= @@ -28,27 +47,16 @@ local alldirs= { x = 0, y = 0, z = 1} } -local spawn_smoke = function(pos) - mcl_particles.add_node_particlespawner(pos, { - amount = 0.1, - time = 0, - minpos = vector.add(pos, { x = -0.45, y = -0.45, z = -0.45 }), - maxpos = vector.add(pos, { x = 0.45, y = 0.45, z = 0.45 }), - minvel = { x = 0, y = 0.5, z = 0 }, - maxvel = { x = 0, y = 0.6, z = 0 }, - minexptime = 2.0, - maxexptime = 2.0, - minsize = 3.0, - maxsize = 4.0, - texture = "mcl_particles_smoke_anim.png^[colorize:#000000:127", - animation = { - type = "vertical_frames", - aspect_w = 8, - aspect_h = 8, - length = 2.1, - }, - }, "high") -end +local smoke_pdef = { + amount = 0.009, + maxexptime = 4.0, + minvel = { x = -0.1, y = 0.3, z = -0.1 }, + maxvel = { x = 0.1, y = 1.6, z = 0.1 }, + minsize = 4.0, + maxsize = 4.5, + minrelpos = { x = -0.45, y = -0.45, z = -0.45 }, + maxrelpos = { x = 0.45, y = 0.45, z = 0.45 }, +} -- -- Items @@ -78,19 +86,12 @@ else eternal_fire_help = S("Eternal fire is a damaging block. Eternal fire can be extinguished by punches and nearby water blocks. Other than (normal) fire, eternal fire does not get extinguished on its own and also continues to burn under rain. Punching eternal fire is safe, but it hurts if you stand inside.") end -local fire_death_messages = { - N("@1 has been cooked crisp."), - N("@1 felt the burn."), - N("@1 died in the flames."), - N("@1 died in a fire."), -} - -local fire_timer = function(pos) +local function fire_timer(pos) minetest.get_node_timer(pos):start(math.random(3, 7)) end -local spawn_fire = function(pos, age) - minetest.set_node(pos, {name="mcl_fire:fire", param2 = age}) +local function spawn_fire(pos, age) + set_node(pos, {name="mcl_fire:fire", param2 = age}) minetest.check_single_for_falling({x=pos.x, y=pos.y+1, z=pos.z}) end @@ -116,32 +117,31 @@ minetest.register_node("mcl_fire:fire", { buildable_to = true, sunlight_propagates = true, damage_per_second = 1, - _mcl_node_death_message = fire_death_messages, groups = {fire = 1, dig_immediate = 3, not_in_creative_inventory = 1, dig_by_piston=1, destroys_items=1, set_on_fire=8}, floodable = true, on_flood = function(pos, oldnode, newnode) - if minetest.get_item_group(newnode.name, "water") ~= 0 then + if get_item_group(newnode.name, "water") ~= 0 then minetest.sound_play("fire_extinguish_flame", {pos = pos, gain = 0.25, max_hear_distance = 16}, true) end end, on_timer = function(pos) - local node = minetest.get_node(pos) + local node = get_node(pos) -- Age is a number from 0 to 15 and is increased every timer step. -- "old" fire is more likely to be extinguished local age = node.param2 - local flammables = minetest.find_nodes_in_area({x=pos.x-1, y=pos.y-1, z=pos.z-1}, {x=pos.x+1, y=pos.y+4, z=pos.z+1}, {"group:flammable"}) - local below = minetest.get_node({x=pos.x, y=pos.z-1, z=pos.z}) - local below_is_flammable = minetest.get_item_group(below.name, "flammable") > 0 + local flammables = find_nodes_in_area({x=pos.x-1, y=pos.y-1, z=pos.z-1}, {x=pos.x+1, y=pos.y+4, z=pos.z+1}, {"group:flammable"}) + local below = get_node({x=pos.x, y=pos.z-1, z=pos.z}) + local below_is_flammable = get_item_group(below.name, "flammable") > 0 -- Extinguish fire if (not fire_enabled) and (math.random(1,3) == 1) then - minetest.remove_node(pos) + remove_node(pos) return end if age == 15 and not below_is_flammable then - minetest.remove_node(pos) + remove_node(pos) return elseif age > 3 and #flammables == 0 and not below_is_flammable and math.random(1,4) == 1 then - minetest.remove_node(pos) + remove_node(pos) return end local age_add = 1 @@ -149,14 +149,14 @@ minetest.register_node("mcl_fire:fire", { if (not fire_enabled) then if age + age_add <= 15 then node.param2 = age + age_add - minetest.set_node(pos, node) + set_node(pos, node) end -- Restart timer fire_timer(pos) return end -- Spawn fire to nearby flammable nodes - local is_next_to_flammable = minetest.find_node_near(pos, 2, {"group:flammable"}) ~= nil + local is_next_to_flammable = find_node_near(pos, 2, {"group:flammable"}) ~= nil if is_next_to_flammable and math.random(1,2) == 1 then -- The fire we spawn copies the age of this fire. -- This prevents fire from spreading infinitely far as the fire fire dies off @@ -166,10 +166,10 @@ minetest.register_node("mcl_fire:fire", { local burntype = math.random(1,2) if burntype == 1 then -- Spawn fire in air - local nodes = minetest.find_nodes_in_area({x=pos.x-1, y=pos.y-1, z=pos.z-1}, {x=pos.x+1, y=pos.y+4, z=pos.z+1}, {"air"}) + local nodes = find_nodes_in_area({x=pos.x-1, y=pos.y-1, z=pos.z-1}, {x=pos.x+1, y=pos.y+4, z=pos.z+1}, {"air"}) while #nodes > 0 do local r = math.random(1, #nodes) - if minetest.find_node_near(nodes[r], 1, {"group:flammable"}) then + if find_node_near(nodes[r], 1, {"group:flammable"}) then spawn_fire(nodes[r], age_next) break else @@ -178,12 +178,12 @@ minetest.register_node("mcl_fire:fire", { end else -- Burn flammable block - local nodes = minetest.find_nodes_in_area({x=pos.x-1, y=pos.y-1, z=pos.z-1}, {x=pos.x+1, y=pos.y+4, z=pos.z+1}, {"group:flammable"}) + local nodes = find_nodes_in_area({x=pos.x-1, y=pos.y-1, z=pos.z-1}, {x=pos.x+1, y=pos.y+4, z=pos.z+1}, {"group:flammable"}) if #nodes > 0 then local r = math.random(1, #nodes) - local nn = minetest.get_node(nodes[r]).name + local nn = get_node(nodes[r]).name local ndef = minetest.registered_nodes[nn] - local fgroup = minetest.get_item_group(nn, "flammable") + local fgroup = get_item_group(nn, "flammable") if ndef and ndef._on_burn then ndef._on_burn(nodes[r]) elseif fgroup ~= -1 then @@ -195,7 +195,7 @@ minetest.register_node("mcl_fire:fire", { -- Regular age increase if age + age_add <= 15 then node.param2 = age + age_add - minetest.set_node(pos, node) + set_node(pos, node) end -- Restart timer fire_timer(pos) @@ -205,19 +205,19 @@ minetest.register_node("mcl_fire:fire", { -- Turn into eternal fire on special blocks, light Nether portal (if possible), start burning timer on_construct = function(pos) local bpos = {x=pos.x, y=pos.y-1, z=pos.z} - local under = minetest.get_node(bpos).name + local under = get_node(bpos).name local dim = mcl_worlds.pos_to_dimension(bpos) if under == "mcl_nether:magma" or under == "mcl_nether:netherrack" or (under == "mcl_core:bedrock" and dim == "end") then - minetest.swap_node(pos, {name = "mcl_fire:eternal_fire"}) + swap_node(pos, {name = "mcl_fire:eternal_fire"}) end - if minetest.get_modpath("mcl_portals") then + if has_mcl_portals then mcl_portals.light_nether_portal(pos) end fire_timer(pos) - spawn_smoke(pos) + mcl_particles.spawn_smoke(pos, "fire", smoke_pdef) end, on_destruct = function(pos) mcl_particles.delete_node_particlespawners(pos) @@ -247,21 +247,20 @@ minetest.register_node("mcl_fire:eternal_fire", { buildable_to = true, sunlight_propagates = true, damage_per_second = 1, - _mcl_node_death_message = fire_death_messages, groups = {fire = 1, dig_immediate = 3, not_in_creative_inventory = 1, dig_by_piston = 1, destroys_items = 1, set_on_fire=8}, floodable = true, on_flood = function(pos, oldnode, newnode) - if minetest.get_item_group(newnode.name, "water") ~= 0 then + if get_item_group(newnode.name, "water") ~= 0 then minetest.sound_play("fire_extinguish_flame", {pos = pos, gain = 0.25, max_hear_distance = 16}, true) end end, on_timer = function(pos) if fire_enabled then - local airs = minetest.find_nodes_in_area({x=pos.x-1, y=pos.y-1, z=pos.z-1}, {x=pos.x+1, y=pos.y+4, z=pos.z+1}, {"air"}) + local airs = find_nodes_in_area({x=pos.x-1, y=pos.y-1, z=pos.z-1}, {x=pos.x+1, y=pos.y+4, z=pos.z+1}, {"air"}) while #airs > 0 do local r = math.random(1, #airs) - if minetest.find_node_near(airs[r], 1, {"group:flammable"}) then - local node = minetest.get_node(airs[r]) + if find_node_near(airs[r], 1, {"group:flammable"}) then + local node = get_node(airs[r]) local age = node.param2 local age_next = math.min(15, age + math.random(0, 1)) spawn_fire(airs[r], age_next) @@ -278,10 +277,10 @@ minetest.register_node("mcl_fire:eternal_fire", { on_construct = function(pos) fire_timer(pos) - if minetest.get_modpath("mcl_portals") then + if has_mcl_portals then --Calling directly minetest.get_modpath consumes 4x more compute time mcl_portals.light_nether_portal(pos) end - spawn_smoke(pos) + mcl_particles.spawn_smoke(pos, "fire", smoke_pdef) end, on_destruct = function(pos) mcl_particles.delete_node_particlespawners(pos) @@ -313,7 +312,7 @@ if flame_sound then local ppos = player:get_pos() local areamin = vector.subtract(ppos, radius) local areamax = vector.add(ppos, radius) - local fpos, num = minetest.find_nodes_in_area( + local fpos, num = find_nodes_in_area( areamin, areamax, {"mcl_fire:fire", "mcl_fire:eternal_fire"} @@ -384,7 +383,7 @@ if flame_sound then end timer = 0 - local players = minetest.get_connected_players() + local players = get_connected_players() for n = 1, #players do mcl_fire.update_player_sound(players[n]) end @@ -416,7 +415,7 @@ minetest.register_abm({ chance = 1, catch_up = false, action = function(pos, node, active_object_count, active_object_count_wider) - minetest.remove_node(pos) + remove_node(pos) minetest.sound_play("fire_extinguish_flame", {pos = pos, max_hear_distance = 16, gain = 0.15}, true) end, @@ -429,8 +428,8 @@ local function has_flammable(pos) local npos, node for n, v in ipairs(alldirs) do npos = vector.add(pos, v) - node = minetest.get_node_or_nil(npos) - if node and node.name and minetest.get_item_group(node.name, "flammable") ~= 0 then + node = get_node_or_nil(npos) + if node and node.name and get_item_group(node.name, "flammable") ~= 0 then return npos end end @@ -447,7 +446,7 @@ if not fire_enabled then interval = 10, chance = 10, catch_up = false, - action = minetest.remove_node, + action = remove_node, }) else -- Fire enabled @@ -465,12 +464,12 @@ else -- Fire enabled i = math.random(1,9) dir = lava_fire[i] target = {x=pos.x+dir.x, y=pos.y+dir.y, z=pos.z+dir.z} - node = minetest.get_node(target) + node = get_node(target) if not node or node.name ~= "air" then i = ((i + math.random(0,7)) % 9) + 1 dir = lava_fire[i] target = {x=pos.x+dir.x, y=pos.y+dir.y, z=pos.z+dir.z} - node = minetest.get_node(target) + node = get_node(target) if not node or node.name ~= "air" then return end @@ -480,7 +479,7 @@ else -- Fire enabled local dir2, target2, node2 dir2 = lava_fire[i2] target2 = {x=target.x+dir2.x, y=target.y+dir2.y, z=target.z+dir2.z} - node2 = minetest.get_node(target2) + node2 = get_node(target2) if node2 and node2.name == "air" then f = has_flammable(target2) if f then @@ -514,16 +513,16 @@ end -- * pointed_thing: Pointed thing to ignite -- * player: Player who sets fire or nil if nobody -- * allow_on_fire: If false, can't ignite fire on fire (default: true) -mcl_fire.set_fire = function(pointed_thing, player, allow_on_fire) +function mcl_fire.set_fire(pointed_thing, player, allow_on_fire) local pname if player == nil then pname = "" else pname = player:get_player_name() end - local n = minetest.get_node(pointed_thing.above) - local nu = minetest.get_node(pointed_thing.under) - if allow_on_fire == false and minetest.get_item_group(nu.name, "fire") ~= 0 then + local n = get_node(pointed_thing.above) + local nu = get_node(pointed_thing.under) + if allow_on_fire == false and get_item_group(nu.name, "fire") ~= 0 then return end if minetest.is_protected(pointed_thing.above, pname) then @@ -531,7 +530,7 @@ mcl_fire.set_fire = function(pointed_thing, player, allow_on_fire) return end if n.name == "air" then - minetest.add_node(pointed_thing.above, {name="mcl_fire:fire"}) + add_node(pointed_thing.above, {name="mcl_fire:fire"}) end end @@ -541,7 +540,7 @@ minetest.register_lbm({ nodenames = {"group:fire"}, run_at_every_load = true, action = function(pos, node) - spawn_smoke(pos) + mcl_particles.spawn_smoke(pos, "fire", smoke_pdef) end, }) @@ -549,5 +548,5 @@ minetest.register_alias("mcl_fire:basic_flame", "mcl_fire:fire") minetest.register_alias("fire:basic_flame", "mcl_fire:fire") minetest.register_alias("fire:permanent_flame", "mcl_fire:eternal_fire") -dofile(minetest.get_modpath(minetest.get_current_modname()).."/flint_and_steel.lua") -dofile(minetest.get_modpath(minetest.get_current_modname()).."/fire_charge.lua") +dofile(modpath.."/flint_and_steel.lua") +dofile(modpath.."/fire_charge.lua") diff --git a/mods/ITEMS/mcl_fire/locale/mcl_fire.pl.tr b/mods/ITEMS/mcl_fire/locale/mcl_fire.pl.tr new file mode 100644 index 000000000..ba55cc31e --- /dev/null +++ b/mods/ITEMS/mcl_fire/locale/mcl_fire.pl.tr @@ -0,0 +1,19 @@ +# textdomain: mcl_fire +Fire Charge=Ładunek ognia +Fire charges are primarily projectiles which can be launched from dispensers, they will fly in a straight line and burst into a fire on impact. Alternatively, they can be used to ignite fires directly.=Ładunki ognia są pociskami, którymi można strzelać z dozowników. Lecą one w linii prostej a po zderzeniu zamieniają się w ogień. +Put the fire charge into a dispenser and supply it with redstone power to launch it. To ignite a fire directly, simply place the fire charge on the ground, which uses it up.=Włóż ładunek ognia do dozownika i dostarcz energię z czerwienitu aby wystrzelić. Aby bezpośrednio zapalić ładunek postaw go na ziemi co go wykorzystuje. +Flint and Steel=Krzesiwo +Flint and steel is a tool to start fires and ignite blocks.=Krzesiwo jest narzędziem do rozpalania ognia i podpalania bloków. +Rightclick the surface of a block to attempt to light a fire in front of it or ignite the block. A few blocks have an unique reaction when ignited.=Kliknij prawym przyciskiem na powierzchni bloku, ab spróbować rozpalić na nim ogień lub go podpalić. Niektóre bloki reagują na podpalenie w specjalny sposób. +Fire is a damaging and destructive but short-lived kind of block. It will destroy and spread towards near flammable blocks, but fire will disappear when there is nothing to burn left. It will be extinguished by nearby water and rain. Fire can be destroyed safely by punching it, but it is hurtful if you stand directly in it. If a fire is started above netherrack or a magma block, it will immediately turn into an eternal fire.=Ogień jest raniącym i niszczącym, ale krótko żyjącym blokiem. Zniszczy on i będzie się rozprzestrzeniał na inne łatwopalne bloki, ale zniknie on gdy nie zostanie nic więcej do spalenia. Zostanie zgaszony przez pobliską wodę lub deszcz. Jeśli ogień jest zapalony na skale Netheru lub bloku magmy, natychmiast zamieni się on w wieczny ogień. +Fire is a damaging but non-destructive short-lived kind of block. It will disappear when there is no flammable block around. Fire does not destroy blocks, at least not in this world. It will be extinguished by nearby water and rain. Fire can be destroyed safely by punching it, but it is hurtful if you stand directly in it. If a fire is started above netherrack or a magma block, it will immediately turn into an eternal fire.=Ogień jest raniącym, ale nie niszczącym i krótko żyjącym blokiem. Zniknie gdy w pobliżu nie będzie łatwopalnych bloków. Ogień nie niszczy bloków, przynajmniej nie w tym świecie. Może być zgaszony przez pobliską wodę i deszcz. Może być bezpiecznie zniszczony przez uderzenie go, ale jest raniący gdy stanie się wewnątrz. Jeśli ogień jest zapalony nad skałą Netheru lub bloku magmy, natychmiast zamieni się w wieczny ogień. +Eternal fire is a damaging block that might create more fire. It will create fire around it when flammable blocks are nearby. Eternal fire can be extinguished by punches and nearby water blocks. Other than (normal) fire, eternal fire does not get extinguished on its own and also continues to burn under rain. Punching eternal fire is safe, but it hurts if you stand inside.=Wieczny ogień jest niszczącym blokiem, który może tworzyć więcej ognia. Będzie on tworzył ogień wokół gdy w pobliżu są łatwopalne bloki. Wieczny ogień można ugasić uderzeniem i blokami wody. W przeciwieństwie do (zwykłego) ognia, wieczny ogień nie gasi się sam z siebie i będzie nadal płonął w deszczu. Uderzanie wiecznego ognia jest bezpieczne, ale jest raniący gdy stoi się wewnątrz. +Eternal fire is a damaging block. Eternal fire can be extinguished by punches and nearby water blocks. Other than (normal) fire, eternal fire does not get extinguished on its own and also continues to burn under rain. Punching eternal fire is safe, but it hurts if you stand inside.=Wieczny ogień jest raniącym blokiem. Może on być zgaszony przez uderzenie i bloki wody. W przeciwieństwie do (zwykłego) ognia, wieczny ogień nie zgaśnie sam z siebie i będzie nadal płonął w deszczu. Uderzanie wiecznego ognia jest bezpieczne, ale jest raniący gdy stoi się wewnątrz. +@1 has been cooked crisp.=@1 została usmażona na chrupko. +@1 felt the burn.=@1 poczuła oparzenie. +@1 died in the flames.=@1 zginęła w płomieniach. +@1 died in a fire.=@1 zginęła w ogniu. +Fire=Ogień +Eternal Fire=Wieczny ogień +Dispenser projectile=Pocisk do dozownika +Starts fires and ignites blocks=Rozpala ogień i podpala bloki diff --git a/mods/ITEMS/mcl_fire/mod.conf b/mods/ITEMS/mcl_fire/mod.conf index 23de4da69..4a1d52ee2 100644 --- a/mods/ITEMS/mcl_fire/mod.conf +++ b/mods/ITEMS/mcl_fire/mod.conf @@ -1 +1,3 @@ name = mcl_fire +depends = mcl_core, mcl_worlds, mcl_sounds, mcl_particles, mcl_util +optional_depends = mcl_portals \ No newline at end of file diff --git a/mods/ITEMS/mcl_fireworks/README.txt b/mods/ITEMS/mcl_fireworks/README.txt new file mode 100644 index 000000000..4cf71fc9b --- /dev/null +++ b/mods/ITEMS/mcl_fireworks/README.txt @@ -0,0 +1,7 @@ +Firework mod for Mineclone 2 + +by NO11 and and some parts by j45 + +Sound credits: + +* mcl_firework_rocket.ogg (tnt_ignite.ogg): Own derivate work of sound by Ned Bouhalassa (CC0) created in 2005, source: diff --git a/mods/ITEMS/mcl_fireworks/crafting.lua b/mods/ITEMS/mcl_fireworks/crafting.lua new file mode 100644 index 000000000..a9e156aa6 --- /dev/null +++ b/mods/ITEMS/mcl_fireworks/crafting.lua @@ -0,0 +1,17 @@ +minetest.register_craft({ + type = "shapeless", + output = "mcl_fireworks:rocket_1 3", + recipe = {"mcl_core:paper", "mcl_mobitems:gunpowder"}, +}) + +minetest.register_craft({ + type = "shapeless", + output = "mcl_fireworks:rocket_2 3", + recipe = {"mcl_core:paper", "mcl_mobitems:gunpowder", "mcl_mobitems:gunpowder"}, +}) + +minetest.register_craft({ + type = "shapeless", + output = "mcl_fireworks:rocket_3 3", + recipe = {"mcl_core:paper", "mcl_mobitems:gunpowder", "mcl_mobitems:gunpowder", "mcl_mobitems:gunpowder"}, +}) \ No newline at end of file diff --git a/mods/ITEMS/mcl_fireworks/init.lua b/mods/ITEMS/mcl_fireworks/init.lua new file mode 100644 index 000000000..cd1922580 --- /dev/null +++ b/mods/ITEMS/mcl_fireworks/init.lua @@ -0,0 +1,4 @@ +local path = minetest.get_modpath("mcl_fireworks") + +dofile(path .. "/register.lua") +dofile(path .. "/crafting.lua") \ No newline at end of file diff --git a/mods/ITEMS/mcl_fireworks/locale/mcl_fireworks.de.tr b/mods/ITEMS/mcl_fireworks/locale/mcl_fireworks.de.tr new file mode 100644 index 000000000..9f9098103 --- /dev/null +++ b/mods/ITEMS/mcl_fireworks/locale/mcl_fireworks.de.tr @@ -0,0 +1,3 @@ +# textdomain: mcl_fireworks +Firework Rocket=Feuerwerksrakete +Flight Duration:=Flugdauer: \ No newline at end of file diff --git a/mods/ITEMS/mcl_fireworks/locale/mcl_fireworks.es.tr b/mods/ITEMS/mcl_fireworks/locale/mcl_fireworks.es.tr new file mode 100644 index 000000000..e66eb06a5 --- /dev/null +++ b/mods/ITEMS/mcl_fireworks/locale/mcl_fireworks.es.tr @@ -0,0 +1,3 @@ +# textdomain: mcl_fireworks +Firework Rocket= +Flight Duration:= \ No newline at end of file diff --git a/mods/ITEMS/mcl_fireworks/locale/mcl_fireworks.fr.tr b/mods/ITEMS/mcl_fireworks/locale/mcl_fireworks.fr.tr new file mode 100644 index 000000000..b02faa428 --- /dev/null +++ b/mods/ITEMS/mcl_fireworks/locale/mcl_fireworks.fr.tr @@ -0,0 +1,3 @@ +# textdomain: mcl_fireworks +Firework Rocket=Fusée +Flight Duration:=Durée de vol : \ No newline at end of file diff --git a/mods/ITEMS/mcl_fireworks/locale/mcl_fireworks.pl.tr b/mods/ITEMS/mcl_fireworks/locale/mcl_fireworks.pl.tr new file mode 100644 index 000000000..d7d6db185 --- /dev/null +++ b/mods/ITEMS/mcl_fireworks/locale/mcl_fireworks.pl.tr @@ -0,0 +1,4 @@ +# textdomain: mcl_fireworks +Firework Rocket=Fajerwerkowa rakieta +Flight Duration:=Czas lotu: + diff --git a/mods/ITEMS/mcl_fireworks/locale/mcl_fireworks.ru.tr b/mods/ITEMS/mcl_fireworks/locale/mcl_fireworks.ru.tr new file mode 100644 index 000000000..e66eb06a5 --- /dev/null +++ b/mods/ITEMS/mcl_fireworks/locale/mcl_fireworks.ru.tr @@ -0,0 +1,3 @@ +# textdomain: mcl_fireworks +Firework Rocket= +Flight Duration:= \ No newline at end of file diff --git a/mods/ITEMS/mcl_fireworks/locale/template.txt b/mods/ITEMS/mcl_fireworks/locale/template.txt new file mode 100644 index 000000000..e66eb06a5 --- /dev/null +++ b/mods/ITEMS/mcl_fireworks/locale/template.txt @@ -0,0 +1,3 @@ +# textdomain: mcl_fireworks +Firework Rocket= +Flight Duration:= \ No newline at end of file diff --git a/mods/ITEMS/mcl_fireworks/mod.conf b/mods/ITEMS/mcl_fireworks/mod.conf new file mode 100644 index 000000000..cf9e34e91 --- /dev/null +++ b/mods/ITEMS/mcl_fireworks/mod.conf @@ -0,0 +1,2 @@ +name = mcl_fireworks +description = Adds fun fireworks to the game which players can use. \ No newline at end of file diff --git a/mods/ITEMS/mcl_fireworks/register.lua b/mods/ITEMS/mcl_fireworks/register.lua new file mode 100644 index 000000000..23066b663 --- /dev/null +++ b/mods/ITEMS/mcl_fireworks/register.lua @@ -0,0 +1,28 @@ +local S = minetest.get_translator(minetest.get_current_modname()) + +local tt_help = S("Flight Duration:") +local description = S("Firework Rocket") + +local function register_rocket(n, duration, force) + minetest.register_craftitem("mcl_fireworks:rocket_" .. n, { + description = description, + _tt_help = tt_help .. " " .. duration, + inventory_image = "mcl_fireworks_rocket.png", + stack_max = 64, + on_use = function(itemstack, user, pointed_thing) + local elytra = mcl_playerplus.elytra[user] + if elytra.active and elytra.rocketing <= 0 then + elytra.rocketing = duration + if not minetest.is_creative_enabled(user:get_player_name()) then + itemstack:take_item() + end + minetest.sound_play("mcl_fireworks_rocket", {pos = user:get_pos()}) + end + return itemstack + end, + }) +end + +register_rocket(1, 2.2, 10) +register_rocket(2, 4.5, 20) +register_rocket(3, 6, 30) diff --git a/mods/ITEMS/mcl_fireworks/sounds/mcl_fireworks_rocket.ogg b/mods/ITEMS/mcl_fireworks/sounds/mcl_fireworks_rocket.ogg new file mode 100644 index 0000000000000000000000000000000000000000..aa232f0dec9d83331f0c928c87da48346822da67 GIT binary patch literal 92125 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 literal 0 HcmV?d00001 diff --git a/mods/ITEMS/mcl_fireworks/textures/mcl_fireworks_rocket.png b/mods/ITEMS/mcl_fireworks/textures/mcl_fireworks_rocket.png new file mode 100644 index 0000000000000000000000000000000000000000..682a8c40d5ce509c2528acb2673cc233a6af3a6f GIT binary patch literal 356 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCij$3p^r=85sBugD~Uq{1qucLB$f+h!W?b)Wnj^{5*w_%-mE4BLhQYD+5C- zLqi1vGb>X=D`PX;(B?p(;xnEujv*HQ$zNhDS{d249e?f+slt%LyrFSz+OGc#ebzK^ zdL^?y-!u2XtmQ9PJu+z#^h#!!aCXw7MLg%@_or3-_{)CyZU219U-Eko1oU5KRq#Dw zqStVpTV2kU?Xtq{lT7*VWPk8~s$V#V<($ER*GvK&@i$mg6WJ?xE2i9LStk7J^Fb3c zhYPIQk54bqF=B{4#E|ZkrGK8`_OA~wx!W#3*K0m{E@p4@qInZ13hw7lnC07BvQTLS x!<7DlT?{P${vZEhbs|hc;WmQ{Us?hKLuh@_-G3AM%Ygo3@O1TaS?83{1OOqxglhl* literal 0 HcmV?d00001 diff --git a/mods/ITEMS/mcl_fishing/depends.txt b/mods/ITEMS/mcl_fishing/depends.txt deleted file mode 100644 index bbc3c6ad8..000000000 --- a/mods/ITEMS/mcl_fishing/depends.txt +++ /dev/null @@ -1,5 +0,0 @@ -mcl_core -mcl_sounds -mcl_loot -mcl_mobs -mcl_enchanting diff --git a/mods/ITEMS/mcl_fishing/description.txt b/mods/ITEMS/mcl_fishing/description.txt deleted file mode 100644 index 1befeab16..000000000 --- a/mods/ITEMS/mcl_fishing/description.txt +++ /dev/null @@ -1 +0,0 @@ -Adds fish and fishing poles to go fishing. diff --git a/mods/ITEMS/mcl_fishing/init.lua b/mods/ITEMS/mcl_fishing/init.lua index df76efcbd..e0c78832f 100644 --- a/mods/ITEMS/mcl_fishing/init.lua +++ b/mods/ITEMS/mcl_fishing/init.lua @@ -1,11 +1,6 @@ --Fishing Rod, Bobber, and Flying Bobber mechanics and Bobber artwork by Rootyjr. -local S = minetest.get_translator("mcl_fishing") -local mod_throwing = minetest.get_modpath("mcl_throwing") - -local entity_mapping = { - ["mcl_fishing:bobber"] = "mcl_fishing:bobber_entity", -} +local S = minetest.get_translator(minetest.get_current_modname()) local bobber_ENTITY={ physical = false, @@ -42,8 +37,7 @@ local fish = function(itemstack, player, pointed_thing) local num = 0 local ent = nil local noent = true - - + local durability = 65 local unbreaking = mcl_enchanting.get_enchantment(itemstack, "unbreaking") if unbreaking > 0 then @@ -61,7 +55,6 @@ local fish = function(itemstack, player, pointed_thing) local itemname local items local itemcount = 1 - local itemwear = 0 local pr = PseudoRandom(os.time() * math.random(1, 100)) local r = pr:next(1, 100) local fish_values = {85, 84.8, 84.7, 84.5} @@ -173,7 +166,7 @@ local fish = function(itemstack, player, pointed_thing) if noent == true then local playerpos = player:get_pos() local dir = player:get_look_dir() - local obj = mcl_throwing.throw("mcl_throwing:flying_bobber", {x=playerpos.x, y=playerpos.y+1.5, z=playerpos.z}, dir, 15, player:get_player_name()) + mcl_throwing.throw("mcl_fishing:flying_bobber", {x=playerpos.x, y=playerpos.y+1.5, z=playerpos.z}, dir, 15, player:get_player_name()) end end @@ -197,7 +190,7 @@ local bobber_on_step = function(self, dtime) end local wield = player:get_wielded_item() --Check if player is nearby - if self.player ~= nil and player ~= nil then + if self.player and player then --Destroy bobber if item not wielded. if ((not wield) or (minetest.get_item_group(wield:get_name(), "fishing_rod") <= 0)) then self.object:remove() @@ -295,13 +288,54 @@ bobber_ENTITY.on_step = bobber_on_step minetest.register_entity("mcl_fishing:bobber_entity", bobber_ENTITY) +local flying_bobber_ENTITY={ + physical = false, + timer=0, + textures = {"mcl_fishing_bobber.png"}, --FIXME: Replace with correct texture. + visual_size = {x=0.5, y=0.5}, + collisionbox = {0,0,0,0,0,0}, + pointable = false, + + get_staticdata = mcl_throwing.get_staticdata, + on_activate = mcl_throwing.on_activate, + + _lastpos={}, + _thrower = nil, + objtype="fishing", +} + +-- Movement function of flying bobber +local function flying_bobber_on_step(self, dtime) + self.timer=self.timer+dtime + local pos = self.object:get_pos() + local node = minetest.get_node(pos) + local def = minetest.registered_nodes[node.name] + --local player = minetest.get_player_by_name(self._thrower) + + -- Destroy when hitting a solid node + if self._lastpos.x~=nil then + if (def and (def.walkable or def.liquidtype == "flowing" or def.liquidtype == "source")) or not def then + local ent = minetest.add_entity(self._lastpos, "mcl_fishing:bobber_entity"):get_luaentity() + ent.player = self._thrower + ent.child = true + self.object:remove() + return + end + end + self._lastpos={x=pos.x, y=pos.y, z=pos.z} -- Set lastpos-->Node will be added at last pos outside the node +end + +flying_bobber_ENTITY.on_step = flying_bobber_on_step + +minetest.register_entity("mcl_fishing:flying_bobber_entity", flying_bobber_ENTITY) + +mcl_throwing.register_throwable_object("mcl_fishing:flying_bobber", "mcl_fishing:flying_bobber_entity", 5) + -- If player leaves area, remove bobber. minetest.register_on_leaveplayer(function(player) local objs = minetest.get_objects_inside_radius(player:get_pos(), 250) - local num = 0 local ent = nil local noent = true - for n = 1, #objs do ent = objs[n]:get_luaentity() if ent then @@ -348,22 +382,23 @@ minetest.register_tool("mcl_fishing:fishing_rod", { on_secondary_use = fish, sound = { breaks = "default_tool_breaks" }, _mcl_uses = 65, + _mcl_toollike_wield = true, }) minetest.register_craft({ output = "mcl_fishing:fishing_rod", recipe = { - {'','','mcl_core:stick'}, - {'','mcl_core:stick','mcl_mobitems:string'}, - {'mcl_core:stick','','mcl_mobitems:string'}, + {"","","mcl_core:stick"}, + {"","mcl_core:stick","mcl_mobitems:string"}, + {"mcl_core:stick","","mcl_mobitems:string"}, } }) minetest.register_craft({ output = "mcl_fishing:fishing_rod", recipe = { - {'mcl_core:stick', '', ''}, - {'mcl_mobitems:string', 'mcl_core:stick', ''}, - {'mcl_mobitems:string','','mcl_core:stick'}, + {"mcl_core:stick", "", ""}, + {"mcl_mobitems:string", "mcl_core:stick", ""}, + {"mcl_mobitems:string","","mcl_core:stick"}, } }) minetest.register_craft({ @@ -448,7 +483,7 @@ minetest.register_craftitem("mcl_fishing:clownfish_raw", { minetest.register_craftitem("mcl_fishing:pufferfish_raw", { description = S("Pufferfish"), - _tt_help = minetest.colorize("#FFFF00", S("Very poisonous")), + _tt_help = minetest.colorize(mcl_colors.YELLOW, S("Very poisonous")), _doc_items_longdesc = S("Pufferfish are a common species of fish and can be obtained by fishing. They can technically be eaten, but they are very bad for humans. Eating a pufferfish only restores 1 hunger point and will poison you very badly (which drains your health non-fatally) and causes serious food poisoning (which increases your hunger)."), inventory_image = "mcl_fishing_pufferfish_raw.png", on_place = minetest.item_eat(1), diff --git a/mods/ITEMS/mcl_fishing/locale/mcl_fishing.de.tr b/mods/ITEMS/mcl_fishing/locale/mcl_fishing.de.tr index 10f908593..b80c186c1 100644 --- a/mods/ITEMS/mcl_fishing/locale/mcl_fishing.de.tr +++ b/mods/ITEMS/mcl_fishing/locale/mcl_fishing.de.tr @@ -7,12 +7,12 @@ Raw fish is obtained by fishing and is a food item which can be eaten safely. Co Cooked Fish=Gekochter Fisch Mmh, fish! This is a healthy food item.=Mhh, Fisch! Ein gesundes Lebensmittel. Raw Salmon=Roher Lachs -Raw salmon is obtained by fishing and is a food item which can be eaten safely. Cooking it improves its nutritional value.=Lohen Lachs erhält man beim Angeln. Er ist ein Lebensmittel, der sicher verzehrt werden kann. +Raw salmon is obtained by fishing and is a food item which can be eaten safely. Cooking it improves its nutritional value.=Rohen Lachs erhält man beim Angeln. Er ist ein Lebensmittel, das sicher verzehrt werden kann. Cooked Salmon=Gekochter Lachs This is a healthy food item which can be eaten.=Ein gesundes essbares Lebensmittel. Clownfish=Clownfisch -Clownfish may be obtained by fishing (and luck) and is a food item which can be eaten safely.=Einen Clownfisch kann man beim Angeln mit etwas Glück fangen. Er ist ein Lebensmittel, der sicher verzehrt werden kann. +Clownfish may be obtained by fishing (and luck) and is a food item which can be eaten safely.=Einen Clownfisch kann man beim Angeln mit etwas Glück fangen. Er ist ein Lebensmittel, das sicher verzehrt werden kann. Pufferfish=Kugelfisch -Pufferfish are a common species of fish and can be obtained by fishing. They can technically be eaten, but they are very bad for humans. Eating a pufferfish only restores 1 hunger point and will poison you very badly (which drains your health non-fatally) and causes serious food poisoning (which increases your hunger).=Kugelfische sind eine verbreitete Fischart, die geangelt werden können. Sie können theoretisch gegessen werden, aber sie sind sehr schlecht für Menschen. Es gibt nur 1 Hungerpunkt und es wird Sie schwer vergiften (was Ihre Gesundheit verringert, aber nicht bis zum Tod) und Ihr Hungerpegel wird aufgrund der schweren Lebensmittelvergiftung stark ansteigen. +Pufferfish are a common species of fish and can be obtained by fishing. They can technically be eaten, but they are very bad for humans. Eating a pufferfish only restores 1 hunger point and will poison you very badly (which drains your health non-fatally) and causes serious food poisoning (which increases your hunger).=Kugelfische sind eine verbreitete Fischart, die geangelt werden kann. Sie können theoretisch gegessen werden, aber sie sind sehr schlecht für Menschen. Es gibt nur 1 Hungerpunkt und es wird Sie schwer vergiften (was Ihre Gesundheit verringert, aber nicht bis zum Tod) und Ihr Hungerpegel wird aufgrund der schweren Lebensmittelvergiftung stark ansteigen. Catches fish in water=Fängt Fische im Wasser Very poisonous=Sehr giftig diff --git a/mods/ITEMS/mcl_fishing/locale/mcl_fishing.pl.tr b/mods/ITEMS/mcl_fishing/locale/mcl_fishing.pl.tr new file mode 100644 index 000000000..cc35096cd --- /dev/null +++ b/mods/ITEMS/mcl_fishing/locale/mcl_fishing.pl.tr @@ -0,0 +1,18 @@ +# textdomain: mcl_fishing +Fishing Rod=Wędka +Fishing rods can be used to catch fish.=Wędki są wykorzystywane do łowienia ryb. +Rightclick to launch the bobber. When it sinks right-click again to reel in an item. Who knows what you're going to catch?=Kliknij prawym przyciskiem aby wyrzucić spławik. Gdy zejdzie pod wodę, kliknij prawym aby go wciągnąć razem z przedmiotem. Kto wie co uda ci się złapać? +Raw Fish=Surowa ryba +Raw fish is obtained by fishing and is a food item which can be eaten safely. Cooking it improves its nutritional value.=Surowa ryba jest możliwa do zdobycia poprzez łowienie i można go bezpiecznie zjeść. Upieczenie jej znacząco zwiększa wartości odżywcze. +Cooked Fish=Upieczona ryba +Mmh, fish! This is a healthy food item.=Mm, ryba! Jest to zdrowy i pożywny posiłek. +Raw Salmon=Surowy łosoś +Raw salmon is obtained by fishing and is a food item which can be eaten safely. Cooking it improves its nutritional value.=Surowy łosoś można zdobyć poprzez łowienie i można go bezpiecznie zjeść. Upieczenie jej znacząco zwiększa wartości odżywcze. +Cooked Salmon=Upieczony łosoś +This is a healthy food item which can be eaten.=Jest to zdrowy i pożywny posiłek. +Clownfish=Błazenek +Clownfish may be obtained by fishing (and luck) and is a food item which can be eaten safely.=Błazenek +Pufferfish=Rozdymka +Pufferfish are a common species of fish and can be obtained by fishing. They can technically be eaten, but they are very bad for humans. Eating a pufferfish only restores 1 hunger point and will poison you very badly (which drains your health non-fatally) and causes serious food poisoning (which increases your hunger).=Rozdymki są powszechnym gatunkiem ryby, który można zdobyć poprzez łowienie. Technicznie rzecz biorąc można je zjeść, jednak są bardzo niezdrowe dla ludzi. Zjedzenie rozdymki przywraca tylko 1 punkt głodu, ale powoduje zatrucie (co zabiera twoje zdrowie, ale nie zabija) oraz zatrucie pokarmowe (co zwiększa twój głód). +Catches fish in water=Łowi ryby z wody +Very poisonous=Bardzo trujące diff --git a/mods/ITEMS/mcl_fishing/mod.conf b/mods/ITEMS/mcl_fishing/mod.conf index 3a02c5cfc..c4e5f5f2e 100644 --- a/mods/ITEMS/mcl_fishing/mod.conf +++ b/mods/ITEMS/mcl_fishing/mod.conf @@ -1 +1,3 @@ name = mcl_fishing +description = Adds fish and fishing poles to go fishing. +depends = mcl_core, mcl_sounds, mcl_loot, mcl_mobs, mcl_enchanting, mcl_throwing, mcl_colors diff --git a/mods/ITEMS/mcl_flowerpots/depends.txt b/mods/ITEMS/mcl_flowerpots/depends.txt deleted file mode 100644 index bc1609be2..000000000 --- a/mods/ITEMS/mcl_flowerpots/depends.txt +++ /dev/null @@ -1,5 +0,0 @@ -mcl_core -mcl_sounds -mcl_farming -mcl_flowers -doc? diff --git a/mods/ITEMS/mcl_flowerpots/init.lua b/mods/ITEMS/mcl_flowerpots/init.lua index 3e22346f7..578553b31 100644 --- a/mods/ITEMS/mcl_flowerpots/init.lua +++ b/mods/ITEMS/mcl_flowerpots/init.lua @@ -1,31 +1,8 @@ -local S = minetest.get_translator("mcl_flowerpots") +local S = minetest.get_translator(minetest.get_current_modname()) +local has_doc = minetest.get_modpath("doc") -local flowers = { - {"dandelion", "mcl_flowers:dandelion", S("Dandelion Flower Pot")}, - {"poppy", "mcl_flowers:poppy", S("Poppy Flower Pot")}, - {"blue_orchid", "mcl_flowers:blue_orchid", S("Blue Orchid Flower Pot")}, - {"allium", "mcl_flowers:allium", S("Allium Flower Pot")}, - {"azure_bluet", "mcl_flowers:azure_bluet", S("Azure Bluet Flower Pot")}, - {"tulip_red", "mcl_flowers:tulip_red", S("Red Tulip Flower Pot")}, - {"tulip_pink", "mcl_flowers:tulip_pink", S("Pink Tulip Flower Pot")}, - {"tulip_white", "mcl_flowers:tulip_white", S("White Tulip Flower Pot")}, - {"tulip_orange", "mcl_flowers:tulip_orange", S("Orange Tulip Flower Pot")}, - {"oxeye_daisy", "mcl_flowers:oxeye_daisy", S("Oxeye Daisy Flower Pot")}, - {"mushroom_brown", "mcl_mushrooms:mushroom_brown", S("Brown Mushroom Flower Pot")}, - {"mushroom_red", "mcl_mushrooms:mushroom_red", S("Red Mushroom Flower Pot")}, - {"sapling", "mcl_core:sapling", S("Oak Sapling Flower Pot")}, - {"acaciasapling", "mcl_core:acaciasapling", S("Acacia Sapling Flower Pot")}, - {"junglesapling", "mcl_core:junglesapling", S("Jungle Sapling Flower Pot")}, - {"darksapling", "mcl_core:darksapling", S("Dark Oak Sapling Flower Pot")}, - {"sprucesapling", "mcl_core:sprucesapling", S("Spruce Sapling Flower Pot")}, - {"birchsapling", "mcl_core:birchsapling", S("Birch Sapling Flower Pot")}, - {"deadbush", "mcl_core:deadbush", S("Dead Bush Flower Pot")}, - {"fern", "mcl_flowers:fern", S("Fern Flower Pot"), {"mcl_flowers_fern_inv.png"}}, -} - -local cubes = { - {"cactus", "mcl_core:cactus", S("Cactus Flower Pot")}, -} +mcl_flowerpots = {} +mcl_flowerpots.registered_pots = {} minetest.register_node("mcl_flowerpots:flower_pot", { description = S("Flower Pot"), @@ -37,6 +14,7 @@ minetest.register_node("mcl_flowerpots:flower_pot", { tiles = { "mcl_flowerpots_flowerpot.png", }, + use_texture_alpha = minetest.features.use_texture_alpha_string_modes and "clip" or true, visual_scale = 0.5, wield_image = "mcl_flowerpots_flowerpot_inventory.png", wield_scale = {x=1.0, y=1.0, z=1.0}, @@ -61,142 +39,178 @@ minetest.register_node("mcl_flowerpots:flower_pot", { return end local item = clicker:get_wielded_item():get_name() - for _, row in ipairs(flowers) do - local flower = row[1] - local flower_node = row[2] - if item == flower_node then - minetest.swap_node(pos, {name="mcl_flowerpots:flower_pot_"..flower}) - if not minetest.is_creative_enabled(clicker:get_player_name()) then - itemstack:take_item() - end - end - end - for _, row in ipairs(cubes) do - local flower = row[1] - local flower_node = row[2] - if item == flower_node then - minetest.swap_node(pos, {name="mcl_flowerpots:flower_pot_"..flower}) - if not minetest.is_creative_enabled(clicker:get_player_name()) then - itemstack:take_item() - end + if mcl_flowerpots.registered_pots[item] then + minetest.swap_node(pos, {name="mcl_flowerpots:flower_pot_"..mcl_flowerpots.registered_pots[item]}) + if not minetest.is_creative_enabled(clicker:get_player_name()) then + itemstack:take_item() end end end, }) minetest.register_craft({ - output = 'mcl_flowerpots:flower_pot', + output = "mcl_flowerpots:flower_pot", recipe = { - {'mcl_core:brick', '', 'mcl_core:brick'}, - {'', 'mcl_core:brick', ''}, - {'', '', ''}, + {"mcl_core:brick", "", "mcl_core:brick"}, + {"", "mcl_core:brick", ""}, + {"", "", ""}, } }) -for _, row in ipairs(flowers) do -local flower = row[1] -local flower_node = row[2] -local desc = row[3] -local texture -if row[4] then - texture = row[4] -else - texture = minetest.registered_nodes[flower_node]["tiles"] -end -minetest.register_node("mcl_flowerpots:flower_pot_"..flower, { - description = desc, - _doc_items_create_entry = false, - drawtype = "mesh", - mesh = "flowerpot.obj", - tiles = { - "[combine:32x32:0,0=mcl_flowerpots_flowerpot.png:0,0="..texture[1], - }, - visual_scale = 0.5, - wield_scale = {x=1.0, y=1.0, z=1.0}, - paramtype = "light", - sunlight_propagates = true, - selection_box = { - type = "fixed", - fixed = {-0.2, -0.5, -0.2, 0.2, -0.1, 0.2} - }, - collision_box = { - type = "fixed", - fixed = {-0.2, -0.5, -0.2, 0.2, -0.1, 0.2} - }, - is_ground_content = false, - groups = {dig_immediate=3, attached_node=1, dig_by_piston=1, not_in_creative_inventory=1, flower_pot=2}, - sounds = mcl_sounds.node_sound_stone_defaults(), - on_rightclick = function(pos, item, clicker) - local name = clicker:get_player_name() - if minetest.is_protected(pos, name) then - minetest.record_protection_violation(pos, name) - return - end - minetest.add_item({x=pos.x, y=pos.y+0.5, z=pos.z}, flower_node) - minetest.set_node(pos, {name="mcl_flowerpots:flower_pot"}) - end, - drop = { - items = { - { items = { "mcl_flowerpots:flower_pot", flower_node } } - } - }, -}) --- Add entry alias for the Help -if minetest.get_modpath("doc") then - doc.add_entry_alias("nodes", "mcl_flowerpots:flower_pot", "nodes", "mcl_flowerpots:flower_pot_"..flower) -end +function mcl_flowerpots.register_potted_flower(name, def) + mcl_flowerpots.registered_pots[name] = def.name + minetest.register_node(":mcl_flowerpots:flower_pot_"..def.name, { + description = def.desc.." "..S("Flower Pot"), + _doc_items_create_entry = false, + drawtype = "mesh", + mesh = "flowerpot.obj", + tiles = { + "[combine:32x32:0,0=mcl_flowerpots_flowerpot.png:0,0="..def.image, + }, + use_texture_alpha = minetest.features.use_texture_alpha_string_modes and "clip" or true, + visual_scale = 0.5, + wield_scale = {x=1.0, y=1.0, z=1.0}, + paramtype = "light", + sunlight_propagates = true, + selection_box = { + type = "fixed", + fixed = {-0.2, -0.5, -0.2, 0.2, -0.1, 0.2} + }, + collision_box = { + type = "fixed", + fixed = {-0.2, -0.5, -0.2, 0.2, -0.1, 0.2} + }, + is_ground_content = false, + groups = {dig_immediate=3, attached_node=1, dig_by_piston=1, not_in_creative_inventory=1, flower_pot=2}, + sounds = mcl_sounds.node_sound_stone_defaults(), + on_rightclick = function(pos, item, clicker) + local player_name = clicker:get_player_name() + if minetest.is_protected(pos, player_name) then + minetest.record_protection_violation(pos, player_name) + return + end + minetest.add_item({x=pos.x, y=pos.y+0.5, z=pos.z}, name) + minetest.set_node(pos, {name="mcl_flowerpots:flower_pot"}) + end, + drop = { + items = { + { items = { "mcl_flowerpots:flower_pot", name } } + } + }, + }) + -- Add entry alias for the Help + if has_doc then + doc.add_entry_alias("nodes", "mcl_flowerpots:flower_pot", "nodes", "mcl_flowerpots:flower_pot_"..name) + end end -for _, row in ipairs(cubes) do -local flower = row[1] -local flower_node = row[2] -local desc = row[3] -minetest.register_node("mcl_flowerpots:flower_pot_"..flower, { - description = desc, - _doc_items_create_entry = false, - drawtype = "mesh", - mesh = "flowerpot_with_long_cube.obj", - tiles = { - "mcl_flowerpots_"..flower..".png", - }, - visual_scale = 0.5, - wield_scale = {x=1.0, y=1.0, z=1.0}, - paramtype = "light", - sunlight_propagates = true, - selection_box = { - type = "fixed", - fixed = {-0.2, -0.5, -0.2, 0.2, -0.1, 0.2} - }, - collision_box = { - type = "fixed", - fixed = {-0.2, -0.5, -0.2, 0.2, -0.1, 0.2} - }, - is_ground_content = false, - groups = {dig_immediate=3, attached_node=1, dig_by_piston=1, not_in_creative_inventory=1, flower_pot=2}, - sounds = mcl_sounds.node_sound_stone_defaults(), - on_rightclick = function(pos, item, clicker) - local name = "" - if clicker:is_player() then - name = clicker:get_player_name() - end - if minetest.is_protected(pos, name) then - minetest.record_protection_violation(pos, name) - return - end - minetest.add_item({x=pos.x, y=pos.y+0.5, z=pos.z}, flower_node) - minetest.set_node(pos, {name="mcl_flowerpots:flower_pot"}) - end, - drop = { - items = { - { items = { "mcl_flowerpots:flower_pot", flower_node } } - } - }, - +function mcl_flowerpots.register_potted_cube(name, def) + mcl_flowerpots.registered_pots[name] = def.name + minetest.register_node(":mcl_flowerpots:flower_pot_"..def.name, { + description = def.desc.." "..S("Flower Pot"), + _doc_items_create_entry = false, + drawtype = "mesh", + mesh = "flowerpot_with_long_cube.obj", + tiles = { + def.image, + }, + use_texture_alpha = minetest.features.use_texture_alpha_string_modes and "clip" or true, + visual_scale = 0.5, + wield_scale = {x=1.0, y=1.0, z=1.0}, + paramtype = "light", + sunlight_propagates = true, + selection_box = { + type = "fixed", + fixed = {-0.2, -0.5, -0.2, 0.2, -0.1, 0.2} + }, + collision_box = { + type = "fixed", + fixed = {-0.2, -0.5, -0.2, 0.2, -0.1, 0.2} + }, + is_ground_content = false, + groups = {dig_immediate=3, attached_node=1, dig_by_piston=1, not_in_creative_inventory=1, flower_pot=2}, + sounds = mcl_sounds.node_sound_stone_defaults(), + on_rightclick = function(pos, item, clicker) + local player_name = "" + if clicker:is_player() then + player_name = clicker:get_player_name() + end + if minetest.is_protected(pos, player_name) then + minetest.record_protection_violation(pos, player_name) + return + end + minetest.add_item({x=pos.x, y=pos.y+0.5, z=pos.z}, name) + minetest.set_node(pos, {name="mcl_flowerpots:flower_pot"}) + end, + drop = { + items = { + { items = { "mcl_flowerpots:flower_pot", name } } + } + }, + }) + -- Add entry alias for the Help + if has_doc then + doc.add_entry_alias("nodes", "mcl_flowerpots:flower_pot", "nodes", "mcl_flowerpots:flower_pot_"..def.name) + end +end +--forced because hard dependency to mcl_core +mcl_flowerpots.register_potted_cube("mcl_core:cactus", { + name = "cactus", + desc = S("Cactus"), + image = "mcl_flowerpots_cactus.png", }) --- Add entry alias for the Help -if minetest.get_modpath("doc") then - doc.add_entry_alias("nodes", "mcl_flowerpots:flower_pot", "nodes", "mcl_flowerpots:flower_pot_"..flower) -end -end +mcl_flowerpots.register_potted_flower("mcl_mushrooms:mushroom_brown", { + name = "mushroom_brown", + desc = S("Brown Mushroom"), + image = "farming_mushroom_brown.png", +}) + +mcl_flowerpots.register_potted_flower("mcl_mushrooms:mushroom_red", { + name = "mushroom_red", + desc = S("Red Mushroom"), + image = "farming_mushroom_red.png", +}) + +mcl_flowerpots.register_potted_flower("mcl_core:sapling", { + name = "sapling", + desc = S("Oak Sapling"), + image = "default_sapling.png", +}) + +mcl_flowerpots.register_potted_flower("mcl_core:acaciasapling", { + name = "acaciasapling", + desc = S("Acacia Sapling"), + image = "default_acacia_sapling.png", +}) + +mcl_flowerpots.register_potted_flower("mcl_core:junglesapling", { + name = "junglesapling", + desc = S("Jungle Sapling"), + image = "default_junglesapling.png", +}) + +mcl_flowerpots.register_potted_flower("mcl_core:darksapling", { + name = "darksapling", + desc = S("Dark Oak Sapling"), + image = "mcl_core_sapling_big_oak.png", +}) + +mcl_flowerpots.register_potted_flower("mcl_core:sprucesapling", { + name = "sprucesapling", + desc = S("Spruce Sapling"), + image = "mcl_core_sapling_spruce.png", +}) + +mcl_flowerpots.register_potted_flower("mcl_core:birchsapling", { + name = "birchsapling", + desc = S("Birch Sapling"), + image = "mcl_core_sapling_birch.png", +}) + +mcl_flowerpots.register_potted_flower("mcl_core:deadbush", { + name = "deadbush", + desc = S("Dead Bush"), + image = "default_dry_shrub.png", +}) diff --git a/mods/ITEMS/mcl_flowerpots/locale/mcl_flowerpots.de.tr b/mods/ITEMS/mcl_flowerpots/locale/mcl_flowerpots.de.tr index 3031e38d8..a110d5ffc 100644 --- a/mods/ITEMS/mcl_flowerpots/locale/mcl_flowerpots.de.tr +++ b/mods/ITEMS/mcl_flowerpots/locale/mcl_flowerpots.de.tr @@ -1,6 +1,6 @@ # textdomain: mcl_flowerpots Dandelion Flower Pot=Blumentopf mit Löwenzahn -Poppy Floer Pot=Blumentopf mit Mohn +Poppy Flower Pot=Blumentopf mit Mohn Blue Orchid Flower Pot=Blumentopf mit blauer Orchidee Allium Flower Pot=Blumentopf mit Sternlauch Azure Bluet Flower Pot=Blumentopf mit Porzellansternchen diff --git a/mods/ITEMS/mcl_flowerpots/locale/mcl_flowerpots.es.tr b/mods/ITEMS/mcl_flowerpots/locale/mcl_flowerpots.es.tr index b303194b5..fd12b1b4f 100644 --- a/mods/ITEMS/mcl_flowerpots/locale/mcl_flowerpots.es.tr +++ b/mods/ITEMS/mcl_flowerpots/locale/mcl_flowerpots.es.tr @@ -1,6 +1,6 @@ # textdomain: mcl_flowerpots Dandelion Flower Pot=Maceta con diente de león -Poppy Floer Pot=Maceta con amapola +Poppy Flower Pot=Maceta con amapola Blue Orchid Flower Pot=Maceta con orquídeas azules Allium Flower Pot=Maceta con puerro Azure Bluet Flower Pot=Maceta con flor azul celeste @@ -22,4 +22,4 @@ Fern Flower Pot=Maceta con helecho Cactus Flower Pot=Maceta con cactus Flower Pot=Maceta Flower pots are decorative blocks in which flowers and other small plants can be placed.=Las macetas son bloques decorativos en los que se pueden colocar flores y otras plantas pequeñas. -Just place a plant on the flower pot. Flower pots can hold small flowers (not higher than 1 block), saplings, ferns, dead bushes, mushrooms and cacti. Rightclick a potted plant to retrieve the plant.=Simplemente coloque una planta en la maceta. Las macetas pueden contener flores pequeñas (no más de 1 bloque), árboles jóvenes, helechos, arbustos muertos, hongos y cactus. Haga clic derecho en una planta en maceta para recuperar la planta. \ No newline at end of file +Just place a plant on the flower pot. Flower pots can hold small flowers (not higher than 1 block), saplings, ferns, dead bushes, mushrooms and cacti. Rightclick a potted plant to retrieve the plant.=Simplemente coloque una planta en la maceta. Las macetas pueden contener flores pequeñas (no más de 1 bloque), árboles jóvenes, helechos, arbustos muertos, hongos y cactus. Haga clic derecho en una planta en maceta para recuperar la planta. diff --git a/mods/ITEMS/mcl_flowerpots/locale/mcl_flowerpots.pl.tr b/mods/ITEMS/mcl_flowerpots/locale/mcl_flowerpots.pl.tr new file mode 100644 index 000000000..4bc5e282a --- /dev/null +++ b/mods/ITEMS/mcl_flowerpots/locale/mcl_flowerpots.pl.tr @@ -0,0 +1,27 @@ +# textdomain: mcl_flowerpots +Dandelion Flower Pot=Doniczka z mleczem +Poppy Flower Pot=Doniczka z makiem +Blue Orchid Flower Pot=Doniczka z niebieską orchideą +Allium Flower Pot=Doniczka z czosnkiem +Azure Bluet Flower Pot=Doniczka z houstonią błękitną +Red Tulip Flower Pot=Doniczka z czerwonym tulipanem +Pink Tulip Flower Pot=Doniczka z różowym tulipanem +White Tulip Flower Pot=Doniczka z białym tulipanem +Orange Tulip Flower Pot=Doniczka z pomarańczowym tulipanem +Oxeye Daisy Flower Pot=Doniczka ze stokrotką +Brown Mushroom Flower Pot=Doniczka z brązowym grzybem +Red Mushroom Flower Pot=Doniczka z czerwonym grzybem +Oak Sapling Flower Pot=Doniczka z sadzonką dębu +Acacia Sapling Flower Pot=Doniczka z sadzonką akacji +Jungle Sapling Flower Pot=Doniczka z tropikalną sadzonką +Dark Oak Sapling Flower Pot=Doniczka z sadzonką ciemnego dębu +Spruce Sapling Flower Pot=Doniczka z sadzonką świerku +Birch Sapling Flower Pot=Doniczka z sadzonką brzozy +Dead Bush Flower Pot=Doniczka z martwym buszem +Fern Flower Pot=Doniczka z paprocią +Cactus Flower Pot=Doniczka z kaktusem +Flower Pot=Doniczka +Flower pots are decorative blocks in which flowers and other small plants can be placed.=Doniczki są dekoracyjnymi blokami w których mogą zostać postawione kwiaty i inne małe rośliny. +Just place a plant on the flower pot. Flower pots can hold small flowers (not higher than 1 block), saplings, ferns, dead bushes, mushrooms and cacti. Rightclick a potted plant to retrieve the plant.=Po prostu umieść roślinę w doniczce. Mogę one przechowywać małe kwiaty (nie większe niż 1 blok), sadzonki, paprocie, martwe busze, grzyby i kaktusy. Kliknij prawym przyciskiem w doniczkę aby odzyskać roślinę. +Can hold a small flower or plant=Może przechowywać mały kwiat lub roślinę + diff --git a/mods/ITEMS/mcl_flowerpots/mod.conf b/mods/ITEMS/mcl_flowerpots/mod.conf new file mode 100644 index 000000000..e6a71c4da --- /dev/null +++ b/mods/ITEMS/mcl_flowerpots/mod.conf @@ -0,0 +1,3 @@ +name=mcl_flowerpots +depends=mcl_core, mcl_sounds, mcl_farming +optional_depends=doc \ No newline at end of file diff --git a/mods/ITEMS/mcl_flowers/API.md b/mods/ITEMS/mcl_flowers/API.md new file mode 100644 index 000000000..f3dc87725 --- /dev/null +++ b/mods/ITEMS/mcl_flowers/API.md @@ -0,0 +1,9 @@ +# API +Flower mod for mcl2 +# Functions +## mcl_flowers.register_simple_flower(name, desc, image, simple_selection_box) +Register a simple flower: +* name: legacity name eg: "my_super_flower" +* desc: description eg: "My Super Flower" +* image: texture +* simple_selection_box: nodebox of the flower \ No newline at end of file diff --git a/mods/ITEMS/mcl_flowers/depends.txt b/mods/ITEMS/mcl_flowers/depends.txt deleted file mode 100644 index a7a7b9cd1..000000000 --- a/mods/ITEMS/mcl_flowers/depends.txt +++ /dev/null @@ -1,5 +0,0 @@ -mcl_core -mcl_util -mcl_sounds -screwdriver? -doc? diff --git a/mods/ITEMS/mcl_flowers/init.lua b/mods/ITEMS/mcl_flowers/init.lua index d60cb1e3b..14e0df5cb 100644 --- a/mods/ITEMS/mcl_flowers/init.lua +++ b/mods/ITEMS/mcl_flowers/init.lua @@ -1,7 +1,12 @@ -local S = minetest.get_translator("mcl_flowers") +local modname = minetest.get_current_modname() +local modpath = minetest.get_modpath(modname) +local S = minetest.get_translator(modname) -local mod_screwdriver = minetest.get_modpath("screwdriver") ~= nil +local mod_screwdriver = minetest.get_modpath("screwdriver") +local has_mcl_flowerpots = minetest.get_modpath("mcl_flowerpots") +mcl_flowers = {} +mcl_flowers.registered_simple_flowers = {} -- Simple flower template local smallflowerlongdesc = S("This is a small flower. Small flowers are mainly used for dye production and can also be potted.") local plant_usage_help = S("It can only be placed on a block on which it would also survive.") @@ -51,51 +56,57 @@ local on_place_flower = mcl_util.generate_on_place_plant_function(function(pos, return ok, colorize end) -local function add_simple_flower(name, desc, image, simple_selection_box) - minetest.register_node("mcl_flowers:"..name, { - description = desc, +function mcl_flowers.register_simple_flower(name, def) + local newname = "mcl_flowers:"..name + if not def._mcl_silk_touch_drop then def._mcl_silk_touch_drop = nil end + if not def.drop then def.drop = newname end + mcl_flowers.registered_simple_flowers[newname] = { + name=name, + desc=def.desc, + image=def.image, + simple_selection_box=def.simple_selection_box, + } + minetest.register_node(newname, { + description = def.desc, _doc_items_longdesc = smallflowerlongdesc, _doc_items_usagehelp = plant_usage_help, drawtype = "plantlike", waving = 1, - tiles = { image..".png" }, - inventory_image = image..".png", - wield_image = image..".png", + tiles = { def.image }, + inventory_image = def.image, + wield_image = def.image, sunlight_propagates = true, paramtype = "light", walkable = false, stack_max = 64, + drop = def.drop, groups = {dig_immediate=3,flammable=2,fire_encouragement=60,fire_flammability=100,plant=1,flower=1,place_flowerlike=1,non_mycelium_plant=1,attached_node=1,dig_by_water=1,destroy_by_lava_flow=1,dig_by_piston=1,enderman_takable=1,deco_block=1}, sounds = mcl_sounds.node_sound_leaves_defaults(), node_placement_prediction = "", on_place = on_place_flower, selection_box = { type = "fixed", - fixed = simple_selection_box, + fixed = def.selection_box, }, + _mcl_silk_touch_drop = def._mcl_silk_touch_drop, }) + if def.potted and has_mcl_flowerpots then + mcl_flowerpots.register_potted_flower(newname, { + name = name, + desc = def.desc, + image = def.image, + }) + end end -add_simple_flower("poppy", S("Poppy"), "mcl_flowers_poppy", { -5/16, -0.5, -5/16, 5/16, 5/16, 5/16 }) -add_simple_flower("dandelion", S("Dandelion"), "flowers_dandelion_yellow", { -4/16, -0.5, -4/16, 4/16, 3/16, 4/16 }) -add_simple_flower("oxeye_daisy", S("Oxeye Daisy"), "mcl_flowers_oxeye_daisy", { -4/16, -0.5, -4/16, 4/16, 4/16, 4/16 }) -add_simple_flower("tulip_orange", S("Orange Tulip"), "flowers_tulip", { -3/16, -0.5, -3/16, 3/16, 5/16, 3/16 }) -add_simple_flower("tulip_pink", S("Pink Tulip"), "mcl_flowers_tulip_pink", { -3/16, -0.5, -3/16, 3/16, 5/16, 3/16 }) -add_simple_flower("tulip_red", S("Red Tulip"), "mcl_flowers_tulip_red", { -3/16, -0.5, -3/16, 3/16, 6/16, 3/16 }) -add_simple_flower("tulip_white", S("White Tulip"), "mcl_flowers_tulip_white", { -3/16, -0.5, -3/16, 3/16, 4/16, 3/16 }) -add_simple_flower("allium", S("Allium"), "mcl_flowers_allium", { -3/16, -0.5, -3/16, 3/16, 6/16, 3/16 }) -add_simple_flower("azure_bluet", S("Azure Bluet"), "mcl_flowers_azure_bluet", { -5/16, -0.5, -5/16, 5/16, 3/16, 5/16 }) -add_simple_flower("blue_orchid", S("Blue Orchid"), "mcl_flowers_blue_orchid", { -5/16, -0.5, -5/16, 5/16, 7/16, 5/16 }) - - local wheat_seed_drop = { max_items = 1, items = { { - items = {'mcl_farming:wheat_seeds'}, + items = {"mcl_farming:wheat_seeds"}, rarity = 8, }, - } + }, } local fortune_wheat_seed_drop = { @@ -159,16 +170,24 @@ def_fern.selection_box = { minetest.register_node("mcl_flowers:fern", def_fern) +if has_mcl_flowerpots then + mcl_flowerpots.register_potted_flower("mcl_flowers:fern", { + name = "fern", + desc = S("Fern"), + image = "mcl_flowers_fern_inv.png", + }) +end + local function add_large_plant(name, desc, longdesc, bottom_img, top_img, inv_img, selbox_radius, selbox_top_height, drop, shears_drop, is_flower, grass_color, fortune_drop) if not inv_img then inv_img = top_img end - local usagehelp, noncreative, create_entry, paramtype2, palette + local create_entry, paramtype2, palette if is_flower == nil then is_flower = true end - local bottom_groups = {flammable=2,fire_encouragement=60,fire_flammability=100, non_mycelium_plant=1,attached_node=1, dig_by_water=1,destroy_by_lava_flow=1,dig_by_piston=1, plant=1,double_plant=1,deco_block=1,not_in_creative_inventory=noncreative} + local bottom_groups = {flammable=2, fire_encouragement=60, fire_flammability=100, non_mycelium_plant=1, attached_node=1, dig_by_water=1, destroy_by_lava_flow=1, dig_by_piston=1, plant=1, double_plant=1, deco_block=1} if is_flower then bottom_groups.flower = 1 bottom_groups.place_flowerlike = 1 @@ -183,7 +202,7 @@ local function add_large_plant(name, desc, longdesc, bottom_img, top_img, inv_im palette = "mcl_core_palette_grass.png" end if longdesc == nil then - noncreative = 1 + bottom_groups.not_in_creative_inventory = 1 create_entry = false end -- Drop itself by default @@ -385,6 +404,7 @@ minetest.register_node("mcl_flowers:waterlily", { paramtype = "light", paramtype2 = "facedir", tiles = {"flowers_waterlily.png", "flowers_waterlily.png^[transformFY"}, + use_texture_alpha = minetest.features.use_texture_alpha_string_modes and "clip" or true, inventory_image = "flowers_waterlily.png", wield_image = "flowers_waterlily.png", liquids_pointable = true, @@ -440,7 +460,6 @@ minetest.register_node("mcl_flowers:waterlily", { end end end - return itemstack end, on_rotate = on_rotate, @@ -451,31 +470,29 @@ minetest.register_alias("mcl_core:tallgrass", "mcl_flowers:tallgrass") -- mcimport support: re-adds missing double_plant tops in mcimported worlds. local mg_name = minetest.get_mapgen_setting("mg_name") -local mod_mcimport = minetest.get_modpath("mcimport") ~= nil +local mod_mcimport = minetest.get_modpath("mcimport") + local fix_doubleplants = minetest.settings:get_bool("fix_doubleplants", true) +if mod_mcimport and mg_name == "singlenode" and fix_doubleplants == true then + local flowernames = { "peony", "rose_bush", "lilac", "sunflower", "double_fern", "double_grass" } - if mod_mcimport and mg_name == "singlenode" and fix_doubleplants == true then - local flowernames = { "peony", "rose_bush", "lilac", "sunflower", "double_fern", "double_grass" } - for c=1, 6 do - local flowername = flowernames[c] - end - - minetest.register_lbm({ - label = "Add double plant tops.", - name = "mcl_flowers:double_plant_topper", - run_at_every_load = true, - nodenames = { "mcl_flowers:peony", "mcl_flowers:rose_bush", "mcl_flowers:lilac", "mcl_flowers:sunflower", "mcl_flowers:double_fern", "mcl_flowers:double_grass" }, - action = function(pos, node) - for c=1, 6 do - local flowername = flowernames[c] - local bottom = pos - local top = { x = bottom.x, y = bottom.y + 1, z = bottom.z } - if node.name == "mcl_flowers:"..flowername then - minetest.set_node(top, {name = "mcl_flowers:"..flowername.."_top"}) - end + minetest.register_lbm({ + label = "Add double plant tops.", + name = "mcl_flowers:double_plant_topper", + run_at_every_load = true, + nodenames = { "mcl_flowers:peony", "mcl_flowers:rose_bush", "mcl_flowers:lilac", "mcl_flowers:sunflower", "mcl_flowers:double_fern", "mcl_flowers:double_grass" }, + action = function(pos, node) + for c = 1, 6 do + local flowername = flowernames[c] + local bottom = pos + local top = { x = bottom.x, y = bottom.y + 1, z = bottom.z } + if node.name == "mcl_flowers:"..flowername then + minetest.set_node(top, {name = "mcl_flowers:"..flowername.."_top"}) end - end, - }) - end + end + end, + }) +end +dofile(modpath.."/register.lua") diff --git a/mods/ITEMS/mcl_flowers/locale/mcl_flowers.de.tr b/mods/ITEMS/mcl_flowers/locale/mcl_flowers.de.tr index 7c4a83b88..0e1262e3c 100644 --- a/mods/ITEMS/mcl_flowers/locale/mcl_flowers.de.tr +++ b/mods/ITEMS/mcl_flowers/locale/mcl_flowers.de.tr @@ -12,9 +12,9 @@ Allium=Sternlauch Azure Bluet=Porzellansternchen Blue Orchid=Blaue Orchidee Tall Grass=Hohes Gras -Tall grass is a small plant which often occurs on the surface of grasslands. It can be harvested for wheat seeds. By using bone meal, tall grass can be turned into double tallgrass which is two blocks high.=Hohes Gras ist eine kleine Pflanze, die oft auf Wiesenflächen wächst. Es kann für Weizensamen abgeerntet werden. Mit Knochenmehl wird sich hohes Gras zu doppelhohem Gras verwandeln. +Tall grass is a small plant which often occurs on the surface of grasslands. It can be harvested for wheat seeds. By using bone meal, tall grass can be turned into double tallgrass which is two blocks high.=Hohes Gras ist eine kleine Pflanze, die oft auf Wiesenflächen wächst. Es kann für Weizensamen abgeerntet werden. Mit Knochenmehl lässt sich hohes Gras zu doppelhohem Gras verwandeln. Fern=Farn -Ferns are small plants which occur naturally in jungles and taigas. They can be harvested for wheat seeds. By using bone meal, a fern can be turned into a large fern which is two blocks high.=Farne sind kleine Pflanzen, die oft in Dschungeln und Taigas vorkommen. Sie können für Weizensamen abgeerntet werden. Mit Knochenmehl wird sich ein Farn zu einem großen Farn, der zwei Blöcke hoch ist, verwandeln. +Ferns are small plants which occur naturally in jungles and taigas. They can be harvested for wheat seeds. By using bone meal, a fern can be turned into a large fern which is two blocks high.=Farne sind kleine Pflanzen, die oft in Dschungeln und Taigas vorkommen. Sie können für Weizensamen abgeerntet werden. Mit Knochenmehl lässt sich ein Farn zu einem großen Farn, der zwei Blöcke hoch ist, verwandeln. (Top Part)=(Oberseite) Peony=Pfingstrose A peony is a large plant which occupies two blocks. It is mainly used in dye production.=Eine Pfingstrose ist eine große Pflanze, die zwei Blöcke hoch ist. Sie wird hauptsächlich für die Farbenproduktion gebraucht. diff --git a/mods/ITEMS/mcl_flowers/locale/mcl_flowers.pl.tr b/mods/ITEMS/mcl_flowers/locale/mcl_flowers.pl.tr new file mode 100644 index 000000000..828eea96a --- /dev/null +++ b/mods/ITEMS/mcl_flowers/locale/mcl_flowers.pl.tr @@ -0,0 +1,32 @@ +# textdomain: mcl_flowers +This is a small flower. Small flowers are mainly used for dye production and can also be potted.=To jest mały kwiat. Małe kwiaty są głównie wykorzystywane do tworzenia farb oraz do ustawiania w doniczkach. +It can only be placed on a block on which it would also survive.=Może być postawiony tylko na blokach na których jest w stanie przeżyć. +Poppy=Mak +Dandelion=Mniszek lekarski +Oxeye Daisy=Stokrotka +Orange Tulip=Pomarańczowy tulipan +Pink Tulip=Różowy tulipan +Red Tulip=Czerwony tulipan +White Tulip=Biały tulipan +Allium=Czosnek +Azure Bluet=Houstonia błękitna +Blue Orchid=Niebieska orchidea +Tall Grass=Wysoka trawa +Tall grass is a small plant which often occurs on the surface of grasslands. It can be harvested for wheat seeds. By using bone meal, tall grass can be turned into double tallgrass which is two blocks high.=Wysoka trawa jest małą rośliną często występująca na trawiastych biomach. Mogą z nich wypaść nasiona. Używając mączki kostnej można ją zamienić w podwójnie wysoką trawę, która ma dwa bloki wysokości. +Fern=Paproć +Ferns are small plants which occur naturally in jungles and taigas. They can be harvested for wheat seeds. By using bone meal, a fern can be turned into a large fern which is two blocks high.=Paprocie to małe rośliny występujące naturalnie w tropikach i tajgach. Mogą z nich wypaść nasiona. Używając mączki kostnej można je zamienić w duże paprocie, które mają dwa bloki wysokości. +(Top Part)=(Górna część) +Peony=Piwonia +A peony is a large plant which occupies two blocks. It is mainly used in dye production.=Piwonia jest dużą rośliną zajmującą dwa bloki. Jest głównie używana jako źródło farby. +Rose Bush=Krzew róży. +A rose bush is a large plant which occupies two blocks. It is safe to touch it. Rose bushes are mainly used in dye production.=Krzew róży jest dużą rośliną zajmującą dwa bloki. Można go dotykać. Jest głównie używana jako źródło farby. +Lilac=Bez +A lilac is a large plant which occupies two blocks. It is mainly used in dye production.=Bez jest dużą rośliną zajmującą dwa bloki. Jest głównie używana jako źródło farby. +Sunflower=Słonecznik +A sunflower is a large plant which occupies two blocks. It is mainly used in dye production.=Słonecznik jest dużą rośliną zajmującą dwa bloki. Jest głównie używana jako źródło farby. +Double tallgrass a variant of tall grass and occupies two blocks. It can be harvested for wheat seeds.=Podwójna wysoka trawa jest dużą rośliną zajmującą dwa bloki. Mogą z niej wypaść nasiona zboża. +Large fern is a variant of fern and occupies two blocks. It can be harvested for wheat seeds.=Duża paproć jest dużą rośliną zajmującą dwa bloki. Mogą z niej wypaść nasiona zboża. +Double Tallgrass=Podwójnie wysoka trawa +Large Fern=Duża paproć +Lily Pad=Lilia wodna +A lily pad is a flat plant block which can be walked on. They can be placed on water sources, ice and frosted ice.=Lilia wodna jest płaską rośliną po której można chodzić. Można je stawiać na źródłach wody, lodzie i oszronionym lodzie. diff --git a/mods/ITEMS/mcl_flowers/mod.conf b/mods/ITEMS/mcl_flowers/mod.conf new file mode 100644 index 000000000..b309ac22e --- /dev/null +++ b/mods/ITEMS/mcl_flowers/mod.conf @@ -0,0 +1,3 @@ +name=mcl_flowers +depends=mcl_core, mcl_util, mcl_sounds +optional_depends=screwdriver, doc, mcl_flowerpots \ No newline at end of file diff --git a/mods/ITEMS/mcl_flowers/register.lua b/mods/ITEMS/mcl_flowers/register.lua new file mode 100644 index 000000000..b45f3e1ee --- /dev/null +++ b/mods/ITEMS/mcl_flowers/register.lua @@ -0,0 +1,62 @@ +local S = minetest.get_translator(minetest.get_current_modname()) + +mcl_flowers.register_simple_flower("poppy", { + desc = S("Poppy"), + image = "mcl_flowers_poppy.png", + selection_box = { -5/16, -0.5, -5/16, 5/16, 5/16, 5/16 }, + potted = true, +}) +mcl_flowers.register_simple_flower("dandelion", { + desc = S("Dandelion"), + image = "flowers_dandelion_yellow.png", + selection_box = { -4/16, -0.5, -4/16, 4/16, 3/16, 4/16 }, + potted = true, +}) +mcl_flowers.register_simple_flower("oxeye_daisy", { + desc = S("Oxeye Daisy"), + image = "mcl_flowers_oxeye_daisy.png", + selection_box = { -4/16, -0.5, -4/16, 4/16, 4/16, 4/16 }, + potted = true, +}) +mcl_flowers.register_simple_flower("tulip_orange", { + desc = S("Orange Tulip"), + image = "flowers_tulip.png", + selection_box = { -3/16, -0.5, -3/16, 3/16, 5/16, 3/16 }, + potted = true, +}) +mcl_flowers.register_simple_flower("tulip_pink", { + desc = S("Pink Tulip"), + image = "mcl_flowers_tulip_pink.png", + selection_box = { -3/16, -0.5, -3/16, 3/16, 5/16, 3/16 }, + potted = true, +}) +mcl_flowers.register_simple_flower("tulip_red", { + desc = S("Red Tulip"), + image = "mcl_flowers_tulip_red.png", + selection_box = { -3/16, -0.5, -3/16, 3/16, 6/16, 3/16 }, + potted = true, +}) +mcl_flowers.register_simple_flower("tulip_white", { + desc = S("White Tulip"), + image = "mcl_flowers_tulip_white.png", + selection_box = { -3/16, -0.5, -3/16, 3/16, 4/16, 3/16 }, + potted = true, +}) +mcl_flowers.register_simple_flower("allium", { + desc = S("Allium"), + image = "mcl_flowers_allium.png", + selection_box = { -3/16, -0.5, -3/16, 3/16, 6/16, 3/16 }, + potted = true, +}) +mcl_flowers.register_simple_flower("azure_bluet", { + desc = S("Azure Bluet"), + image = "mcl_flowers_azure_bluet.png", + selection_box = { -5/16, -0.5, -5/16, 5/16, 3/16, 5/16 }, + potted = true, +}) +mcl_flowers.register_simple_flower("blue_orchid", { + desc = S("Blue Orchid"), + image = "mcl_flowers_blue_orchid.png", + selection_box = { -5/16, -0.5, -5/16, 5/16, 7/16, 5/16 }, + potted = true, +}) \ No newline at end of file diff --git a/mods/ITEMS/mcl_furnaces/depends.txt b/mods/ITEMS/mcl_furnaces/depends.txt deleted file mode 100644 index ca05945f1..000000000 --- a/mods/ITEMS/mcl_furnaces/depends.txt +++ /dev/null @@ -1,9 +0,0 @@ -mcl_init -mcl_formspec -mcl_core -mcl_sounds -mcl_craftguide -mcl_achievements -mcl_particles -doc? -screwdriver? diff --git a/mods/ITEMS/mcl_furnaces/init.lua b/mods/ITEMS/mcl_furnaces/init.lua index d3877d90b..ca43b275a 100644 --- a/mods/ITEMS/mcl_furnaces/init.lua +++ b/mods/ITEMS/mcl_furnaces/init.lua @@ -1,5 +1,5 @@ -local S = minetest.get_translator("mcl_furnaces") +local S = minetest.get_translator(minetest.get_current_modname()) local LIGHT_ACTIVE_FURNACE = 13 @@ -15,11 +15,11 @@ local function active_formspec(fuel_percent, item_percent) "list[current_player;main;0,7.74;9,1;]".. mcl_formspec.get_itemslot_bg(0,7.74,9,1).. "label[2.75,0;"..minetest.formspec_escape(minetest.colorize("#313131", S("Furnace"))).."]".. - "list[current_name;src;2.75,0.5;1,1;]".. + "list[context;src;2.75,0.5;1,1;]".. mcl_formspec.get_itemslot_bg(2.75,0.5,1,1).. - "list[current_name;fuel;2.75,2.5;1,1;]".. + "list[context;fuel;2.75,2.5;1,1;]".. mcl_formspec.get_itemslot_bg(2.75,2.5,1,1).. - "list[current_name;dst;5.75,1.5;1,1;]".. + "list[context;dst;5.75,1.5;1,1;]".. mcl_formspec.get_itemslot_bg(5.75,1.5,1,1).. "image[2.75,1.5;1,1;default_furnace_fire_bg.png^[lowpart:".. (100-fuel_percent)..":default_furnace_fire_fg.png]".. @@ -29,11 +29,11 @@ local function active_formspec(fuel_percent, item_percent) -- TODO: Add it back when the Minetest bug is fixed. --"image_button[8,0;1,1;craftguide_book.png;craftguide;]".. --"tooltip[craftguide;"..minetest.formspec_escape(S("Recipe book")).."]".. - "listring[current_name;dst]".. + "listring[context;dst]".. "listring[current_player;main]".. - "listring[current_name;src]".. + "listring[context;src]".. "listring[current_player;main]".. - "listring[current_name;fuel]".. + "listring[context;fuel]".. "listring[current_player;main]" end @@ -44,11 +44,11 @@ local inactive_formspec = "size[9,8.75]".. "list[current_player;main;0,7.74;9,1;]".. mcl_formspec.get_itemslot_bg(0,7.74,9,1).. "label[2.75,0;"..minetest.formspec_escape(minetest.colorize("#313131", S("Furnace"))).."]".. - "list[current_name;src;2.75,0.5;1,1;]".. + "list[context;src;2.75,0.5;1,1;]".. mcl_formspec.get_itemslot_bg(2.75,0.5,1,1).. - "list[current_name;fuel;2.75,2.5;1,1;]".. + "list[context;fuel;2.75,2.5;1,1;]".. mcl_formspec.get_itemslot_bg(2.75,2.5,1,1).. - "list[current_name;dst;5.75,1.5;1,1;]".. + "list[context;dst;5.75,1.5;1,1;]".. mcl_formspec.get_itemslot_bg(5.75,1.5,1,1).. "image[2.75,1.5;1,1;default_furnace_fire_bg.png]".. "image[4.1,1.5;1.5,1;gui_furnace_arrow_bg.png^[transformR270]".. @@ -56,11 +56,11 @@ local inactive_formspec = "size[9,8.75]".. -- TODO: Add it back when the Minetest bug is fixed. --"image_button[8,0;1,1;craftguide_book.png;craftguide;]".. --"tooltip[craftguide;"..minetest.formspec_escape(S("Recipe book")).."]".. - "listring[current_name;dst]".. + "listring[context;dst]".. "listring[current_player;main]".. - "listring[current_name;src]".. + "listring[context;src]".. "listring[current_player;main]".. - "listring[current_name;fuel]".. + "listring[context;fuel]".. "listring[current_player;main]" local receive_fields = function(pos, formname, fields, sender) @@ -161,6 +161,12 @@ local function on_metadata_inventory_take(pos, listname, index, stack, player) end end +local function on_metadata_inventory_move(pos, from_list, from_index, to_list, to_index, count, player) + if from_list == "dst" then + give_xp(pos, player) + end +end + local function spawn_flames(pos, param2) local minrelpos, maxrelpos local dir = minetest.facedir_to_dir(param2) @@ -211,14 +217,14 @@ end local function furnace_reset_delta_time(pos) local meta = minetest.get_meta(pos) - local time_speed = tonumber(minetest.settings:get('time_speed') or 72) + local time_speed = tonumber(minetest.settings:get("time_speed") or 72) if (time_speed < 0.1) then return end local time_multiplier = 86400 / time_speed local current_game_time = .0 + ((minetest.get_day_count() + minetest.get_timeofday()) * time_multiplier) - -- TODO: Change meta:get/set_string() to get/set_float() for 'last_gametime'. + -- TODO: Change meta:get/set_string() to get/set_float() for "last_gametime". -- In Windows *_float() works OK but under Linux it returns rounded unusable values like 449540.000000000 local last_game_time = meta:get_string("last_gametime") if last_game_time then @@ -233,7 +239,7 @@ end local function furnace_get_delta_time(pos, elapsed) local meta = minetest.get_meta(pos) - local time_speed = tonumber(minetest.settings:get('time_speed') or 72) + local time_speed = tonumber(minetest.settings:get("time_speed") or 72) local current_game_time if (time_speed < 0.1) then return meta, elapsed @@ -378,7 +384,6 @@ local function furnace_node_timer(pos, elapsed) -- Update formspec and node -- local formspec = inactive_formspec - local item_state local item_percent = 0 if cookable then item_percent = math.floor(src_time / cooked.time * 100) @@ -408,7 +413,7 @@ local function furnace_node_timer(pos, elapsed) meta:set_float("fuel_time", fuel_time) meta:set_float("src_time", src_time) if srclist then - meta:set_string("src_item", srclist[1]:get_name()) + meta:set_string("src_item", src_item) else meta:set_string("src_item", "") end @@ -435,7 +440,12 @@ minetest.register_node("mcl_furnaces:furnace", { _tt_help = S("Uses fuel to smelt or cook items"), _doc_items_longdesc = S("Furnaces cook or smelt several items, using a furnace fuel, into something else."), _doc_items_usagehelp = - S("Use the furnace to open the furnace menu. Place a furnace fuel in the lower slot and the source material in the upper slot. The furnace will slowly use its fuel to smelt the item. The result will be placed into the output slot at the right side.").."\n".. + S([[ + Use the furnace to open the furnace menu. + Place a furnace fuel in the lower slot and the source material in the upper slot. + The furnace will slowly use its fuel to smelt the item. + The result will be placed into the output slot at the right side. + ]]).."\n".. S("Use the recipe book to see what you can smelt, what you can use as fuel and how long it will burn."), _doc_items_hidden = false, tiles = { @@ -468,19 +478,21 @@ minetest.register_node("mcl_furnaces:furnace", { local meta = minetest.get_meta(pos) meta:set_string("formspec", inactive_formspec) local inv = meta:get_inventory() - inv:set_size('src', 1) - inv:set_size('fuel', 1) - inv:set_size('dst', 1) + inv:set_size("src", 1) + inv:set_size("fuel", 1) + inv:set_size("dst", 1) end, on_destruct = function(pos) mcl_particles.delete_node_particlespawners(pos) give_xp(pos) end, - on_metadata_inventory_move = function(pos) + on_metadata_inventory_move = function(pos, from_list, from_index, to_list, to_index, count, player) -- Reset accumulated game time when player works with furnace: furnace_reset_delta_time(pos) minetest.get_node_timer(pos):start(1.0) + + on_metadata_inventory_move(pos, from_list, from_index, to_list, to_index, count, player) end, on_metadata_inventory_put = function(pos) -- Reset accumulated game time when player works with furnace: @@ -494,9 +506,7 @@ minetest.register_node("mcl_furnaces:furnace", { -- start timer function, it will helpful if player clears dst slot minetest.get_node_timer(pos):start(1.0) - if listname == "dst" then - give_xp(pos, player) - end + on_metadata_inventory_take(pos, listname, index, stack, player) end, allow_metadata_inventory_put = allow_metadata_inventory_put, @@ -552,6 +562,7 @@ minetest.register_node("mcl_furnaces:furnace_active", { allow_metadata_inventory_put = allow_metadata_inventory_put, allow_metadata_inventory_move = allow_metadata_inventory_move, allow_metadata_inventory_take = allow_metadata_inventory_take, + on_metadata_inventory_move = on_metadata_inventory_move, on_metadata_inventory_take = on_metadata_inventory_take, on_receive_fields = receive_fields, _mcl_blast_resistance = 3.5, diff --git a/mods/ITEMS/mcl_furnaces/locale/mcl_furnaces.pl.tr b/mods/ITEMS/mcl_furnaces/locale/mcl_furnaces.pl.tr new file mode 100644 index 000000000..a957155ad --- /dev/null +++ b/mods/ITEMS/mcl_furnaces/locale/mcl_furnaces.pl.tr @@ -0,0 +1,9 @@ +# textdomain: mcl_furnaces +Furnace=Piec +Furnaces cook or smelt several items, using a furnace fuel, into something else.=Piece mogą gotować lub przetapiać niektóre przedmioty, przy użyciu paliwa, w inne przedmioty. +Use the furnace to open the furnace menu. Place a furnace fuel in the lower slot and the source material in the upper slot. The furnace will slowly use its fuel to smelt the item. The result will be placed into the output slot at the right side.=Kliknij w piec aby otworzyć jego menu. Połóż paliwo w dolnym miejscu a materiał źródłowy w górnym. Piec będzie powoli zużywał paliwo aby przetopić przedmiot. Rezultat pojawi się w miejscu po prawej. +Use the recipe book to see what you can smelt, what you can use as fuel and how long it will burn.=Użyj książki receptur aby dowiedzieć się co możesz przetopić, co możesz użyć jako paliwa i na jak długo wystarczy. +Burning Furnace=Palący się piec +Recipe book=Książka receptur +Inventory=Ekwipunek +Uses fuel to smelt or cook items=Zużywa paliwo aby ugotować lub stopić przedmioty diff --git a/mods/ITEMS/mcl_furnaces/mod.conf b/mods/ITEMS/mcl_furnaces/mod.conf index 32f1ed8e8..fe0b9c208 100644 --- a/mods/ITEMS/mcl_furnaces/mod.conf +++ b/mods/ITEMS/mcl_furnaces/mod.conf @@ -1 +1,3 @@ name = mcl_furnaces +depends = mcl_init, mcl_formspec, mcl_core, mcl_sounds, mcl_craftguide, mcl_achievements, mcl_particles +optional_depends = doc, screwdriver diff --git a/mods/ITEMS/mcl_heads/depends.txt b/mods/ITEMS/mcl_heads/depends.txt deleted file mode 100644 index 01846722d..000000000 --- a/mods/ITEMS/mcl_heads/depends.txt +++ /dev/null @@ -1,4 +0,0 @@ -mcl_sounds -mcl_armor? -screwdriver? -doc? diff --git a/mods/ITEMS/mcl_heads/description.txt b/mods/ITEMS/mcl_heads/description.txt deleted file mode 100644 index b169ba796..000000000 --- a/mods/ITEMS/mcl_heads/description.txt +++ /dev/null @@ -1 +0,0 @@ -Small decorative head blocks. diff --git a/mods/ITEMS/mcl_heads/init.lua b/mods/ITEMS/mcl_heads/init.lua index a8e9f2cb5..78356de71 100644 --- a/mods/ITEMS/mcl_heads/init.lua +++ b/mods/ITEMS/mcl_heads/init.lua @@ -1,11 +1,11 @@ -local S = minetest.get_translator("mcl_heads") +local S = minetest.get_translator(minetest.get_current_modname()) local mod_doc = minetest.get_modpath("doc") local mod_screwdriver = minetest.get_modpath("screwdriver") local equip_armor if minetest.get_modpath("mcl_armor") then - equip_armor = armor.on_armor_use + equip_armor = mcl_armor.equip_on_use end -- Heads system @@ -42,7 +42,7 @@ local function addhead(name, texture, desc, longdesc, rangemob, rangefactor) { -0.25, -0.5, -0.25, 0.25, 0.0, 0.25, }, }, }, - groups = {handy=1, armor_head=1,non_combat_armor=1, head=1, deco_block=1, dig_by_piston=1 }, + groups = {handy = 1, armor = 1, armor_head = 1, non_combat_armor = 1, non_combat_armor_head = 1, head = 1, deco_block = 1, dig_by_piston = 1}, -- The head textures are based off the textures of an actual mob. tiles = { -- Note: bottom texture is overlaid over top texture to get rid of possible transparency. @@ -54,6 +54,7 @@ local function addhead(name, texture, desc, longdesc, rangemob, rangefactor) "[combine:16x16:-20,0="..texture, -- back "[combine:16x16:-4,0="..texture, -- front }, + use_texture_alpha = minetest.features.use_texture_alpha_string_modes and "opaque" or false, paramtype = "light", stack_max = 64, paramtype2 = "facedir", @@ -90,7 +91,7 @@ local function addhead(name, texture, desc, longdesc, rangemob, rangefactor) local itemstring = itemstack:get_name() local fakestack = ItemStack(itemstack) - local idef = fakestack:get_definition() + --local idef = fakestack:get_definition() local retval if wdir == 0 or wdir == 1 then return minetest.item_place(itemstack, placer, pointed_thing) @@ -100,9 +101,7 @@ local function addhead(name, texture, desc, longdesc, rangemob, rangefactor) if not retval then return itemstack end - - local success - itemstack, success = minetest.item_place(fakestack, placer, pointed_thing, wdir) + itemstack = minetest.item_place(fakestack, placer, pointed_thing, wdir) itemstack:set_name(itemstring) return itemstack end, @@ -112,6 +111,9 @@ 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, }) @@ -136,6 +138,7 @@ local function addhead(name, texture, desc, longdesc, rangemob, rangefactor) { name = "([combine:16x16:-4,0="..texture..")^[transformR180", align_style = "node" }, -- top { name = "([combine:16x16:-4,8="..texture..")^([combine:16x16:-12,8="..texture..")", align_style = "node" }, -- bottom }, + use_texture_alpha = minetest.features.use_texture_alpha_string_modes and "opaque" or false, paramtype = "light", stack_max = 64, paramtype2 = "wallmounted", diff --git a/mods/ITEMS/mcl_heads/locale/mcl_heads.pl.tr b/mods/ITEMS/mcl_heads/locale/mcl_heads.pl.tr new file mode 100644 index 000000000..4ed4bbbee --- /dev/null +++ b/mods/ITEMS/mcl_heads/locale/mcl_heads.pl.tr @@ -0,0 +1,11 @@ +# textdomain: mcl_heads +Zombie Head=Głowa zombie +A zombie head is a small decorative block which resembles the head of a zombie. It can also be worn as a helmet, which reduces the detection range of zombies by 50%.=Głowa zombie jest małym blokiem dekoracyjnym i przypomina głowę zombie. Może być noszona jako hełm co zmniejsza obszar wykrycia przez zombie o 50%. +Creeper Head=Głowa creepera +A creeper head is a small decorative block which resembles the head of a creeper. It can also be worn as a helmet, which reduces the detection range of creepers by 50%.=Głowa creepera jest małym blokiem dekoracyjnym i przypomina głowę creepera. Może być noszona jako hełm co zmniejsza obszar wykrycia przez creepera o 50%. +Human Head=Głowa człowieka +A human head is a small decorative block which resembles the head of a human (i.e. a player character). It can also be worn as a helmet for fun, but does not offer any protection.=Głowa człowieka jest małym blokiem dekoracyjnym i przypomina głowę człowieka. Może być noszona jako hełm dla zabawy, ale nie zapewnia żadnej dodatkowej ochrony. +Skeleton Skull=Głowa szkieleta +A skeleton skull is a small decorative block which resembles the skull of a skeleton. It can also be worn as a helmet, which reduces the detection range of skeletons by 50%.=Głowa szkieleta jest małym blokiem dekoracyjnym i przypomina głowę szkieleta. Może być noszona jako hełm co zmniejsza obszar wykrycia przez szkielety o 50%. +Wither Skeleton Skull=Głowa witherowego szkieleta +A wither skeleton skull is a small decorative block which resembles the skull of a wither skeleton. It can also be worn as a helmet for fun, but does not offer any protection.=Głowa witherowego szkieleta jest małym blokiem dekoracyjnym i przypomina głowę witherowego szkieleta. Może być noszona jako hełm dla zabawy, ale nie zapewnia żadnej dodatkowej ochrony. diff --git a/mods/ITEMS/mcl_heads/mod.conf b/mods/ITEMS/mcl_heads/mod.conf index 0dab90077..e2fe34f63 100644 --- a/mods/ITEMS/mcl_heads/mod.conf +++ b/mods/ITEMS/mcl_heads/mod.conf @@ -1 +1,4 @@ name = mcl_heads +description = Small decorative head blocks. +depends = mcl_sounds +optional_depends = mcl_armor, screwdriver, doc diff --git a/mods/ITEMS/mcl_heads/textures/mcl_heads_steve.png b/mods/ITEMS/mcl_heads/textures/mcl_heads_steve.png index b85fb3d31d4f0f6cdae2f2aaa8cab7be65ea8979..361795a52b7b2e15923bea8f1a5b76bc2f60e9cd 100644 GIT binary patch delta 960 zcmV;x13&z?0?G%F7=H)`0001@oqmJ>000JJOGiWi{{a60|De66lK=n!32;bRa{vGf z6951U69E94oEQKA00(qQO+^Rg0ucfV5)$eTrvLy0S4l)cRA}Dqmp^P9WfZ`Fc5TYp zzO(P_q$ee(Bv`GK4T&X1N{|3Wl{zyrbU~F`F@&K*h19KLVShmCK&6Nkh|1QIA^}p` zApHl7KI`jc#>VnEu8(2V zLg(xm-pdg$BQ^+iK9>=Y-#%%EWyK#O)NL)s(<^koPMqsI4JA;+nA<@ zUC*YcCozm#Cn;u9VGkimBKB5*s*Yfq-e5$4rshMVi<2s;w1Dpgyr-&66jcOK>M0vI zHV;b%KYtoVC{rpMVUM62_0YlptsHyT>+9wIm%%Bm5H4)-@_89gaq2`CF`onA!A6yPn}2`u{io-!txnYJH$x3f+XKByA{oPS z1AMQ$k|>IZ?*&+Hz_ETCAOELyrPXS)Fh7TFy2Ro!zPr0d^J$ac|29~?zkz0z*syJ` zf3wWe?Ym5$(h%ox$Mw~cW8H4=$9 zL4WWJK{!sSZ1AkP)Bhas^~Dd`DM<=zcI7XF&wp6ygl9a4ET@sg42_1vxtX^B_-gf6 z6h*{#Tujqrr`1V-3-fbfU*K$c_;$wupWVC@{y&(u7mk;M1&0d!JMQvg8b*k%9#0LMv0K~#7Fe9Ey-!!QuW@xH?OAYpY) z)Y)fFumX|UeJXpZ=$HdYE+b-So`C0VcE|ZopY;89YZ+s(Uw_)wB4*R8)&Vn9R2{d$ z7`H%3@%wEPNX)qoZdoLsFS!a#5PP2I%j${U(HXRsj>&r`wg8!-)R#2iZC+Ryjt=f6E2CNfO60MHL~u;%2N9)Ji6p!pg153hTF ulXXCB3J^a=fFX7Qh}V^+phws!7zF?rxiF2XR5nBa0000u%96}jcIp}dq6W&tvJn+-3^zqCx->0n^pK*D00|mEJ%9M%_R$W66?9MN82nm)zx&gk`e_YFE3<6-8BPEX`%V$Lxol z`R4zhnf0-SJd%`}2S*0DmAQlaDTRZ4|I{-b-~Z-Y7kunu>Dx*{3I~aZVMbC-QmF)M zcU#YVK_?aqS$}%bxafGVT+rAH($kHS5DK=f#Uh&_RaCu(6b@QvluA{GhT<$Q7p!wW&Z!TyPUt&0GC(Soz^K+J7B?8Y zRH>pHbpT#D{YB50e{lZysCtdH`%PkZn~uGsM;}H}@-0#f3swygiHKCnHBzZWi$iki zgN4AY%zqu$)<3>fsdDJy6hbJ7T&?kJDn!3Sv}i%r7d$ zA|bMwRWeF}gCheLZ@4qZu1JIC2LhZw_YyBZH%T_L%KV~2`cR74fXtik&G6dAcZkMi zqH&qmF22K?@68Y!kVzj(F~6vg&8+hBbCaAu_kWT_mS)(yQ|PWE!E9!gQl)BH>qhA3p(c6XP@_OnM=E%Z)o%WnUjw<&2%Wst&UC-!>y`N)A{XRKI(X5Z$0^B z^ZH=GbMLX0Iy2!l>pVxrsp$Y)p8wOwo@gfgEtPzu$%!+^5fc)h++0SChB$flmw&!( zlb~JfwLr0`F`6FS_&4D3;ccyR*bl(M(u!k!G(CtA_9KabwmrMfR+8}h5W;>8y+Ok7 zYw^}P_v}AB^w~B;TZtJ#cBg*YGCZ0>Oh~};r_&3_vWOi5s-`<2u$35k1H^!3yxkFo z-ausySr$9Opp)bqO%gP$v0#e;F@L)Ks?vAnHHZFSu-6J}hZBL^_yLkvZ?`+Z#sQnb#N7Yk^?&-d{2?NV zVaJWQ=dvt147cx_#+c)}VQ~L=niEZlVo`G#@1<`y-q0HudIKTsCpUh8x_@CV`q$Yfm%vP>iXEVx;2%#|_){Jz;cejJjbU zT+4SP+HT0WYYvD?8#itro407c{iqbCta{^hFxU&%^5g`8K0Ed6_do-0eF8HyniL z8RCt)r_tSpe;WkMl;@5J_f5MYU}xPHwtFpxUzt^4B1LZe0J+Nx7Ju>C_3s}awTvGO z_F4v+XPJgtVw=0UWH8vvQlb9Yr9pS8>=KFlE89UtENeMeKF@NUiz+6UgJU4T&eeRZAMj?6iwxdokF>Z2%8-nhB;d>u`=-V~~ zw&UT=oHQ{p#_a4IQ!jj(w=cZ^Kc}gmy!s73xw*{#!$Xc|xu9|M>CdC()%9KgYkcD$ z{~{U}*?)M5C%*OL&JgI-;d$+KTC<0GawG+_bG&`weMjxTSutxpjz#tFBb8Lnw5>Bxz5SA1hhtkKo|o{CqrHza7!R0bO)K|Mw(0@g0grc20&Fq zWC*ZH;kRicz(GLKx%)tm< zp#ef#XA9%C5Bi4C9|Ky`Hl{GZnl5uJ&<50Vz{q)woFJ42Q0)^pt{X7B%0mFd8$dUJ zkRWPxl|Hm?fD!=elSiOL+UTMtVljcxR1HS&mXm>NWX_!$X8 zZme^0XFoUN(dxZ723H)HG6BJtu=9V%hAstru4Bgl0000 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,6 +220,13 @@ minetest.register_node("mcl_itemframes:item_frame",{ end local put_itemstack = ItemStack(itemstack) put_itemstack:set_count(1) + 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 @@ -237,12 +276,12 @@ minetest.register_node("mcl_itemframes:item_frame",{ on_rotate = function(pos, node, user, mode, param2) if mode == screwdriver.ROTATE_FACE then -- Rotate face - local meta = minetest.get_meta(pos) + --local meta = minetest.get_meta(pos) local node = minetest.get_node(pos) local objs = nil if node.name == "mcl_itemframes:item_frame" then - objs = minetest.get_objects_inside_radius(pos, .5) + objs = minetest.get_objects_inside_radius(pos, 0.5) end if objs then for _, obj in ipairs(objs) do @@ -260,11 +299,11 @@ minetest.register_node("mcl_itemframes:item_frame",{ }) minetest.register_craft({ - output = 'mcl_itemframes:item_frame', + output = "mcl_itemframes:item_frame", recipe = { - {'mcl_core:stick', 'mcl_core:stick', 'mcl_core:stick'}, - {'mcl_core:stick', 'mcl_mobitems:leather', 'mcl_core:stick'}, - {'mcl_core:stick', 'mcl_core:stick', 'mcl_core:stick'}, + {"mcl_core:stick", "mcl_core:stick", "mcl_core:stick"}, + {"mcl_core:stick", "mcl_mobitems:leather", "mcl_core:stick"}, + {"mcl_core:stick", "mcl_core:stick", "mcl_core:stick"}, } }) diff --git a/mods/ITEMS/mcl_itemframes/locale/mcl_itemframes.pl.tr b/mods/ITEMS/mcl_itemframes/locale/mcl_itemframes.pl.tr new file mode 100644 index 000000000..8de889471 --- /dev/null +++ b/mods/ITEMS/mcl_itemframes/locale/mcl_itemframes.pl.tr @@ -0,0 +1,5 @@ +# textdomain: mcl_itemframes +Item Frame=Ramka na przedmiot +Item frames are decorative blocks in which items can be placed.=Ramki na przedmiot to dekoracyjne bloki w których można umieszczać przedmioty. +Just place any item on the item frame. Use the item frame again to retrieve the item.=Umieść dowolny przedmiot w ramce. Użyj ramki ponownie aby odzyskać przedmiot. +Can hold an item=Może przetrzymywać przedmiot diff --git a/mods/ITEMS/mcl_itemframes/mod.conf b/mods/ITEMS/mcl_itemframes/mod.conf new file mode 100644 index 000000000..ff09c3bcc --- /dev/null +++ b/mods/ITEMS/mcl_itemframes/mod.conf @@ -0,0 +1,3 @@ +name = mcl_itemframes +depends = mcl_core, mcl_sounds, mcl_compass, mcl_maps +optional_depends = screwdriver diff --git a/mods/ITEMS/mcl_jukebox/API.md b/mods/ITEMS/mcl_jukebox/API.md new file mode 100644 index 000000000..85900ede0 --- /dev/null +++ b/mods/ITEMS/mcl_jukebox/API.md @@ -0,0 +1,18 @@ +# mcl_jukebox + +## mcl_jukebox.register_record(title, author, identifier, image, sound) + +* title: title of the track +* author: author of the track +* identifier: short string used in the item registration +* image: the texture of the track +* sound: sound file of the track + +## mcl_jukebox.registered_records + +Table indexed by item name containing: +* title: title of the track +* author: author of the track +* identifier: short string used in the item registration +* image: the texture of the track +* sound: sound file of the track \ No newline at end of file diff --git a/mods/ITEMS/mcl_jukebox/depends.txt b/mods/ITEMS/mcl_jukebox/depends.txt deleted file mode 100644 index 97bf51069..000000000 --- a/mods/ITEMS/mcl_jukebox/depends.txt +++ /dev/null @@ -1,2 +0,0 @@ -mcl_core -mcl_sounds diff --git a/mods/ITEMS/mcl_jukebox/description.txt b/mods/ITEMS/mcl_jukebox/description.txt deleted file mode 100644 index 143812e1d..000000000 --- a/mods/ITEMS/mcl_jukebox/description.txt +++ /dev/null @@ -1 +0,0 @@ -Jukebox and music discs are used to play background music on a per-player basis. diff --git a/mods/ITEMS/mcl_jukebox/init.lua b/mods/ITEMS/mcl_jukebox/init.lua index db9f25312..6c51a6c94 100644 --- a/mods/ITEMS/mcl_jukebox/init.lua +++ b/mods/ITEMS/mcl_jukebox/init.lua @@ -1,4 +1,10 @@ -local S = minetest.get_translator("mcl_jukebox") +local S = minetest.get_translator(minetest.get_current_modname()) +local C = minetest.colorize + +local math = math + +mcl_jukebox = {} +mcl_jukebox.registered_records = {} -- Player name-indexed table containing the currently heard track local active_tracks = {} @@ -10,47 +16,30 @@ local active_huds = {} -- Used to make sure that minetest.after only applies to the latest HUD change event local hud_sequence_numbers = {} --- List of music -local recorddata = { - -- { title, author, identifier } - { "The Evil Sister (Jordach's Mix)", "SoundHelix", "13" } , - { "The Energetic Rat (Jordach's Mix)", "SoundHelix", "wait" }, - { "Eastern Feeling", "Jordach", "blocks"}, - { "Minetest", "Jordach", "far" }, - { "Credit Roll (Jordach's HD Mix)", "Junichi Masuda", "chirp" }, - { "Winter Feeling", "Tom Peter", "strad" }, - { "Synthgroove (Jordach's Mix)", "HeroOfTheWinds", "mellohi" }, - { "The Clueless Frog (Jordach's Mix)", "SoundHelix", "mall" }, -} -local records = #recorddata - -for r=1, records do - local doc = false - local entryname, longdesc, usagehelp - if r == 1 then - doc = true - entryname = S("Music Disc") - longdesc = S("A music disc holds a single music track which can be used in a jukebox to play music.") - usagehelp = S("Place a music disc into an empty jukebox to play the music. Use the jukebox again to retrieve the music disc. The music can only be heard by you, not by other players.") - end - minetest.register_craftitem("mcl_jukebox:record_"..r, { +function mcl_jukebox.register_record(title, author, identifier, image, sound) + mcl_jukebox.registered_records["mcl_jukebox:record_"..identifier] = {title, author, identifier, image, sound} + local entryname = S("Music Disc") + local longdesc = S("A music disc holds a single music track which can be used in a jukebox to play music.") + local usagehelp = S("Place a music disc into an empty jukebox to play the music. Use the jukebox again to retrieve the music disc. The music can only be heard by you, not by other players.") + minetest.register_craftitem(":mcl_jukebox:record_"..identifier, { description = - core.colorize("#55FFFF", S("Music Disc")) .. "\n" .. - core.colorize("#989898", S("@1—@2", recorddata[r][2], recorddata[r][1])), - _doc_items_create_entry = doc, + C(mcl_colors.AQUA, S("Music Disc")) .. "\n" .. + C(mcl_colors.GRAY, S("@1—@2", author, title)), + _doc_items_create_entry = true, _doc_items_entry_name = entryname, _doc_items_longdesc = longdesc, _doc_items_usagehelp = usagehelp, - inventory_image = "mcl_jukebox_record_"..recorddata[r][3]..".png", + --inventory_image = "mcl_jukebox_record_"..recorddata[r][3]..".png", + inventory_image = image, stack_max = 1, - groups = { music_record = r }, + groups = { music_record = 1 }, }) end -local function now_playing(player, track_id) +local function now_playing(player, name) local playername = player:get_player_name() local hud = active_huds[playername] - local text = S("Now playing: @1—@2", recorddata[track_id][2], recorddata[track_id][1]) + local text = S("Now playing: @1—@2", mcl_jukebox.registered_records[name][2], mcl_jukebox.registered_records[name][1]) if not hud_sequence_numbers[playername] then hud_sequence_numbers[playername] = 1 @@ -59,7 +48,7 @@ local function now_playing(player, track_id) end local id - if hud ~= nil then + if hud then id = hud player:hud_change(id, "text", text) else @@ -81,12 +70,11 @@ local function now_playing(player, track_id) if not player or not player:is_player() or not active_huds[playername] or not hud_sequence_numbers[playername] or seq ~= hud_sequence_numbers[playername] then return end - if id ~= nil and id == active_huds[playername] then + if id and id == active_huds[playername] then player:hud_remove(active_huds[playername]) active_huds[playername] = nil end end, {playername, id, hud_sequence_numbers[playername]}) - end minetest.register_on_leaveplayer(function(player) @@ -97,27 +85,29 @@ end) -- Jukebox crafting minetest.register_craft({ - output = 'mcl_jukebox:jukebox', + output = "mcl_jukebox:jukebox", recipe = { - {'group:wood', 'group:wood', 'group:wood'}, - {'group:wood', 'mcl_core:diamond', 'group:wood'}, - {'group:wood', 'group:wood', 'group:wood'}, + {"group:wood", "group:wood", "group:wood"}, + {"group:wood", "mcl_core:diamond", "group:wood"}, + {"group:wood", "group:wood", "group:wood"}, } }) -local play_record = function(pos, itemstack, player) - local record_id = minetest.get_item_group(itemstack:get_name(), "music_record") - if record_id ~= 0 then +local function play_record(pos, itemstack, player) + local item_name = itemstack:get_name() + -- ensure the jukebox uses the new record names for old records + local name = minetest.registered_aliases[item_name] or item_name + if mcl_jukebox.registered_records[name] then local cname = player:get_player_name() - if active_tracks[cname] ~= nil then + if active_tracks[cname] then minetest.sound_stop(active_tracks[cname]) active_tracks[cname] = nil end - active_tracks[cname] = minetest.sound_play("mcl_jukebox_track_"..record_id, { + active_tracks[cname] = minetest.sound_play(mcl_jukebox.registered_records[name][5], { to_player = cname, gain = 1, }) - now_playing(player, record_id) + now_playing(player, name) return true end return false @@ -149,7 +139,7 @@ minetest.register_node("mcl_jukebox:jukebox", { local inv = meta:get_inventory() if not inv:is_empty("main") then -- Jukebox contains a disc: Stop music and remove disc - if active_tracks[cname] ~= nil then + if active_tracks[cname] then minetest.sound_stop(active_tracks[cname]) end local lx = pos.x @@ -160,11 +150,11 @@ minetest.register_node("mcl_jukebox:jukebox", { -- Rotate record to match with “slot” texture dropped_item:set_yaw(math.pi/2) inv:set_stack("main", 1, "") - if active_tracks[cname] ~= nil then + if active_tracks[cname] then minetest.sound_stop(active_tracks[cname]) active_tracks[cname] = nil end - if active_huds[cname] ~= nil then + if active_huds[cname] then clicker:hud_remove(active_huds[cname]) active_huds[cname] = nil end @@ -219,11 +209,11 @@ minetest.register_node("mcl_jukebox:jukebox", { local dropped_item = minetest.add_item(p, stack) -- Rotate record to match with “slot” texture dropped_item:set_yaw(math.pi/2) - if active_tracks[name] ~= nil then + if active_tracks[name] then minetest.sound_stop(active_tracks[name]) active_tracks[name] = nil end - if active_huds[name] ~= nil then + if active_huds[name] then digger:hud_remove(active_huds[name]) active_huds[name] = nil end @@ -239,3 +229,22 @@ minetest.register_craft({ recipe = "mcl_jukebox:jukebox", burntime = 15, }) + +mcl_jukebox.register_record("The Evil Sister (Jordach's Mix)", "SoundHelix", "13", "mcl_jukebox_record_13.png", "mcl_jukebox_track_1") +mcl_jukebox.register_record("The Energetic Rat (Jordach's Mix)", "SoundHelix", "wait", "mcl_jukebox_record_wait.png", "mcl_jukebox_track_2") +mcl_jukebox.register_record("Eastern Feeling", "Jordach", "blocks", "mcl_jukebox_record_blocks.png", "mcl_jukebox_track_3") +mcl_jukebox.register_record("Minetest", "Jordach", "far", "mcl_jukebox_record_far.png", "mcl_jukebox_track_4") +mcl_jukebox.register_record("Credit Roll (Jordach's HD Mix)", "Junichi Masuda", "chirp", "mcl_jukebox_record_chirp.png", "mcl_jukebox_track_5") +mcl_jukebox.register_record("Winter Feeling", "Tom Peter", "strad", "mcl_jukebox_record_strad.png", "mcl_jukebox_track_6") +mcl_jukebox.register_record("Synthgroove (Jordach's Mix)", "HeroOfTheWinds", "mellohi", "mcl_jukebox_record_mellohi.png", "mcl_jukebox_track_7") +mcl_jukebox.register_record("The Clueless Frog (Jordach's Mix)", "SoundHelix", "mall", "mcl_jukebox_record_mall.png", "mcl_jukebox_track_8") + +--add backward compatibility +minetest.register_alias("mcl_jukebox:record_1", "mcl_jukebox:record_13") +minetest.register_alias("mcl_jukebox:record_2", "mcl_jukebox:record_wait") +minetest.register_alias("mcl_jukebox:record_3", "mcl_jukebox:record_blocks") +minetest.register_alias("mcl_jukebox:record_4", "mcl_jukebox:record_far") +minetest.register_alias("mcl_jukebox:record_5", "mcl_jukebox:record_chirp") +minetest.register_alias("mcl_jukebox:record_6", "mcl_jukebox:record_strad") +minetest.register_alias("mcl_jukebox:record_7", "mcl_jukebox:record_mellohi") +minetest.register_alias("mcl_jukebox:record_8", "mcl_jukebox:record_mall") \ No newline at end of file diff --git a/mods/ITEMS/mcl_jukebox/locale/mcl_jukebox.pl.tr b/mods/ITEMS/mcl_jukebox/locale/mcl_jukebox.pl.tr new file mode 100644 index 000000000..a0c2eccd5 --- /dev/null +++ b/mods/ITEMS/mcl_jukebox/locale/mcl_jukebox.pl.tr @@ -0,0 +1,11 @@ +# textdomain: mcl_jukebox +Music Disc=Płyta z muzyką +A music disc holds a single music track which can be used in a jukebox to play music.=Płyta z muzyką zawiera ścieżkę muzyczną, którą można użyć na szafie grającej aby włączyć muzykę. +Place a music disc into an empty jukebox to play the music. Use the jukebox again to retrieve the music disc. The music can only be heard by you, not by other players.=Włóż płyty z muzyką do pustej szafy grającej aby włączyć muzykę. Kliknij użycie na szafie grającej ponownie, aby odzyskać płytę. Muzyka jest słyszalna tylko przez ciebie, nie przez innych graczy. +Music Disc=Płyta z muzyką +@1—@2=@1-@2 +Jukebox=Szafa grająca +Jukeboxes play music when they're supplied with a music disc.=Szafa grająca gra muzykę, gdy ma w sobie płytę z muzyką. +Place a music disc into an empty jukebox to insert the music disc and play music. If the jukebox already has a music disc, you will retrieve this music disc first. The music can only be heard by you, not by other players.=Włóż płytę z muzyką do szafy grającej aby muzyka zaczęła grać. Jeśli w szafie grającej jest już płyta odzyskasz najpierw tę muzykę. Muzyka będzie słyszalna tylko przez ciebie, nie przez innych graczy. +Now playing: @1—@2=Aktualna muzyka: @1—@2 +Uses music discs to play music=Używa płyt z muzyką by odtwarzać muzykę diff --git a/mods/ITEMS/mcl_jukebox/mod.conf b/mods/ITEMS/mcl_jukebox/mod.conf index ec39a7be9..9046ff7d3 100644 --- a/mods/ITEMS/mcl_jukebox/mod.conf +++ b/mods/ITEMS/mcl_jukebox/mod.conf @@ -1 +1,3 @@ name = mcl_jukebox +description = Jukebox and music discs are used to play background music on a per-player basis. +depends = mcl_core, mcl_sounds, mcl_colors diff --git a/mods/ITEMS/mcl_maps/colors.json b/mods/ITEMS/mcl_maps/colors.json new file mode 100644 index 000000000..0aa23f0fc --- /dev/null +++ b/mods/ITEMS/mcl_maps/colors.json @@ -0,0 +1 @@ +{"player.png": [123, 74, 62], "player_back.png": [114, 68, 56], "mcl_skins_player_dummy.png": [125, 125, 125], "mcl_skins_player_1.png": [103, 100, 86], "mcl_skins_button.png": [121, 95, 85], "mcl_skins_character_1.png": [93, 90, 77], "mcl_hunger_bar_saturation.png": [255, 255, 0], "hbhunger_bar_health_poison.png": [148, 120, 24], "mcl_hunger_bar_exhaustion.png": [255, 255, 255], "mcl_hunger_icon_exhaustion.png": [213, 213, 213], "mcl_hunger_bgicon_exhaustion.png": [25, 25, 26], "mcl_hunger_icon_foodpoison.png": [109, 106, 40], "mcl_hunger_bgicon_saturation.png": [24, 24, 26], "hbhunger_bar.png": [200, 103, 0], "hbhunger_bgicon.png": [24, 24, 26], "hbhunger_icon_health_poison.png": [69, 98, 45], "mcl_hunger_bar_foodpoison.png": [116, 132, 88], "hbhunger_icon.png": [175, 132, 97], "mcl_hunger_icon_saturation.png": [157, 140, 64], "mcl_playerplus_end_sky.png": [14, 14, 14], "mobs_mc_llama_decor_purple.png": [98, 50, 98], "mobs_mc_spawn_icon_illusioner.png": [98, 111, 155], "mobs_mc_llama_gray.png": [195, 188, 175], "mobs_mc_spawn_icon_zombie.png": [64, 136, 112], "mobs_mc_llama_decor_blue.png": [50, 50, 249], "mobs_mc_spawn_icon_skeleton.png": [146, 146, 146], "mobs_mc_shulker_blue.png": [89, 100, 126], "mobs_mc_shulker_black.png": [78, 75, 76], "mobs_mc_wolf_collar.png": [186, 186, 186], "mobs_mc_spawn_icon_bat.png": [130, 63, 13], "mobs_mc_parrot_green.png": [47, 208, 62], "mobs_mc_llama_decor_magenta.png": [249, 50, 249], "mobs_mc_rabbit_black.png": [73, 64, 61], "mobs_mc_vindicator.png": [56, 56, 57], "mobs_mc_polarbear.png": [233, 220, 208], "mobs_mc_magmacube.png": [83, 40, 27], "mobs_mc_chicken.png": [198, 182, 176], "mobs_mc_ghast_firing.png": [198, 198, 198], "mobs_mc_spawn_icon_zombie_pigman.png": [202, 160, 135], "mobs_mc_husk.png": [98, 95, 76], "mobs_mc_villager_librarian.png": [176, 171, 163], "mobs_mc_villager_priest.png": [100, 64, 74], "mobs_mc_villager_smith.png": [76, 76, 63], "mobs_mc_horse_armor_gold.png": [143, 110, 59], "mobs_mc_spawn_icon_dragon.png": [98, 47, 89], "mobs_mc_spawn_icon_donkey.png": [152, 132, 100], "mobs_mc_squid.png": [37, 52, 68], "mobs_mc_villager_farmer.png": [81, 80, 67], "mobs_mc_spawn_icon_horse_skeleton.png": [245, 204, 202], "mobs_mc_horse_markings_blackdots.png": [24, 22, 22], "mobs_mc_zombie_farmer.png": [119, 99, 85], "mobs_mc_spawn_icon_vex.png": [145, 185, 185], "mobs_mc_parrot_blue.png": [43, 58, 148], "mobs_mc_spider_eyes.png": [174, 48, 48], "mobs_mc_zombie.png": [78, 110, 105], "mobs_mc_llama_decor_light_blue.png": [104, 168, 194], "mobs_mc_zombie_priest.png": [120, 104, 110], "mobs_mc_llama_decor_black.png": [50, 50, 50], "mobs_mc_horse_white.png": [190, 173, 154], "mobs_mc_spawn_icon_vindicator.png": [102, 103, 104], "mobs_mc_silverfish.png": [179, 164, 144], "mobs_mc_llama_decor_gray.png": [98, 98, 98], "mobs_mc_spawn_icon_guardian.png": [119, 156, 148], "mobs_mc_creeper.png": [98, 107, 71], "mobs_mc_shulker_purple.png": [135, 87, 99], "mobs_mc_spawn_icon_rabbit.png": [156, 126, 84], "mobs_mc_horse_armor_iron.png": [134, 123, 118], "mobs_mc_sheep.png": [182, 161, 149], "mobs_mc_parrot_grey.png": [33, 178, 173], "mobs_mc_wolf_icon_sit.png": [8, 88, 116], "mobs_mc_gold_horse_armor.png": [140, 106, 67], "mobs_mc_spawn_icon_witch.png": [98, 85, 68], "mobs_mc_shulker_green.png": [89, 122, 84], "mobs_mc_bat.png": [87, 63, 54], "mobs_mc_horse_chestnut.png": [126, 78, 58], "mobs_mc_shulker_yellow.png": [175, 128, 69], "mobs_mc_spawn_icon_creeper.png": [115, 125, 53], "mobs_mc_slime.png": [63, 133, 78], "mobs_mc_evoker.png": [44, 48, 43], "mobs_mc_horse_skeleton.png": [163, 156, 141], "mobs_mc_spawn_icon_blaze.png": [142, 76, 49], "mobs_mc_shulker_light_blue.png": [114, 140, 158], "mobs_mc_shulker_gray.png": [106, 104, 109], "mobs_mc_horse_darkbrown.png": [69, 47, 34], "mobs_mc_stray_overlay.png": [63, 59, 65], "mobs_mc_arrow_particle.png": [218, 171, 136], "mobs_mc_spawn_icon_cat.png": [120, 66, 10], "mobs_mc_stray.png": [155, 157, 161], "mobs_mc_trading_formspec_bg.png": [157, 157, 157], "mobs_mc_llama_chest.png": [70, 53, 36], "mobs_mc_spawn_icon_villager.png": [134, 124, 81], "mobs_mc_pig.png": [228, 175, 165], "mobs_mc_spawn_icon_mooshroom.png": [160, 56, 55], "mobs_mc_wolf_angry.png": [187, 179, 176], "mobs_mc_cat_black.png": [206, 181, 154], "mobs_mc_vex_charging.png": [142, 153, 153], "mobs_mc_llama.png": [207, 189, 155], "mobs_mc_mushroom_brown.png": [122, 81, 58], "mobs_mc_spawn_icon_shulker.png": [170, 117, 130], "mobs_mc_wither_half_health.png": [7, 58, 91], "mobs_mc_spawn_icon_guardian_elder.png": [174, 140, 113], "mobs_mc_enderman_eyes.png": [184, 211, 242], "mobs_mc_horse_creamy.png": [146, 111, 75], "mobs_mc_spawn_icon_zombie_villager.png": [95, 110, 68], "mobs_mc_vex.png": [128, 162, 162], "mobs_mc_iron_golem.png": [47, 44, 44], "mobs_mc_cat_ocelot.png": [163, 111, 52], "mobs_mc_llama_decor_green.png": [50, 98, 50], "mobs_mc_cow.png": [94, 68, 55], "mobs_mc_llama_decor_brown.png": [101, 75, 60], "mobs_mc_villager_butcher.png": [82, 83, 71], "mobs_mc_parrot_yellow_blue.png": [98, 187, 205], "mobs_mc_zombie_pigman.png": [164, 129, 117], "mobs_mc_spawn_icon_wolf.png": [231, 218, 207], "mobs_mc_zombie_villager.png": [112, 108, 90], "mobs_mc_sheep_fur.png": [203, 186, 174], "mobs_mc_spawn_icon_horse_zombie.png": [129, 143, 66], "mobs_mc_blaze.png": [84, 63, 50], "mcl_totems_totem.png": [185, 139, 52], "mobs_mc_rabbit_salt.png": [122, 99, 87], "mobs_mc_rabbit_white_splotched.png": [146, 139, 135], "mobs_mc_horse_brown.png": [115, 84, 61], "mobs_mc_ghast.png": [199, 199, 199], "mobs_mc_horse_markings_white.png": [165, 149, 132], "mobs_mc_horse_markings_whitefield.png": [193, 178, 162], "mobs_mc_spawn_icon_endermite.png": [138, 67, 74], "mobs_mc_shulker_magenta.png": [143, 97, 130], "mobs_mc_snowman.png": [211, 217, 221], "mobs_mc_zombie_smith.png": [71, 59, 54], "mobs_mc_spawn_icon_squid.png": [55, 58, 103], "mobs_mc_dragon_fireball.png": [89, 66, 79], "mobs_mc_horse_armor_diamond.png": [78, 110, 129], "mobs_mc_diamond_horse_armor.png": [67, 95, 112], "mobs_mc_rabbit_toast.png": [130, 123, 119], "mobs_mc_llama_white.png": [207, 199, 184], "mobs_mc_llama_creamy.png": [208, 190, 155], "mobs_mc_pig_saddle.png": [82, 63, 45], "mobs_mc_spawn_icon_cave_spider.png": [23, 43, 57], "mobs_mc_shulker_silver.png": [140, 138, 143], "mobs_mc_trading_formspec_disabled.png": [193, 26, 26], "mobs_mc_spider.png": [41, 38, 37], "mobs_mc_wither.png": [33, 33, 33], "mobs_mc_llama_decor_white.png": [249, 249, 249], "mobs_mc_witch.png": [80, 74, 67], "mobs_mc_wolf_icon_roam.png": [6, 124, 36], "mobs_mc_illusionist.png": [56, 68, 114], "mobs_mc_endermite.png": [55, 20, 65], "mobs_mc_spawn_icon_witherskeleton.png": [71, 71, 71], "mobs_mc_llama_decor_light_gray.png": [185, 185, 185], "mobs_mc_llama_decor_cyan.png": [18, 249, 249], "mobs_mc_skeleton.png": [124, 124, 124], "mobs_mc_spawn_icon_llama.png": [230, 221, 178], "mobs_mc_spawn_icon_chicken.png": [170, 160, 156], "mobs_mc_shulker_pink.png": [173, 127, 160], "mobs_mc_spawn_icon_spider.png": [53, 43, 43], "mobs_mc_shulker_red.png": [146, 77, 71], "mobs_mc_shulker_white.png": [184, 181, 186], "mobs_mc_spawn_icon_magmacube.png": [52, 33, 23], "mobs_mc_spawn_icon_ghast.png": [212, 212, 212], "mobs_mc_rabbit_brown.png": [112, 86, 73], "mobs_mc_spawn_icon_pig.png": [242, 200, 188], "mobs_mc_spawn_icon_horse.png": [44, 36, 25], "mobs_mc_cat_siamese.png": [161, 144, 133], "mobs_mc_mushroom_red.png": [176, 51, 49], "mobs_mc_shulker_brown.png": [94, 81, 70], "mobs_mc_guardian.png": [78, 116, 130], "mobs_mc_creeper_charge.png": [121, 219, 255], "mobs_mc_villager.png": [88, 91, 55], "mobs_mc_llama_decor_lime.png": [50, 249, 50], "mobs_mc_llama_brown.png": [136, 97, 52], "mobs_mc_parrot_red_blue.png": [171, 70, 37], "mobs_mc_spawn_icon_husk.png": [174, 174, 128], "mobs_mc_rabbit_gold.png": [151, 130, 96], "mobs_mc_spawn_icon_evoker.png": [92, 103, 86], "mobs_mc_iron_horse_armor.png": [133, 119, 114], "mobs_mc_llama_decor_red.png": [249, 50, 50], "mobs_mc_enderman.png": [3, 10, 10], "mobs_mc_mooshroom_brown.png": [93, 50, 28], "mobs_mc_llama_decor_pink.png": [249, 161, 175], "mobs_mc_enderman_block.png": [46, 42, 38], "mobs_mc_mooshroom.png": [90, 42, 41], "mobs_mc_cat_red.png": [221, 163, 120], "mobs_mc_spit.png": [221, 218, 246], "mobs_mc_shulkerbullet.png": [216, 190, 153], "mobs_mc_horse_markings_whitedots.png": [230, 220, 207], "mobs_mc_mule.png": [108, 75, 51], "mobs_mc_spawn_icon_iron_golem.png": [122, 72, 41], "mobs_mc_zombie_butcher.png": [107, 98, 87], "mobs_mc_llama_decor_yellow.png": [249, 249, 50], "mobs_mc_wolf_tame.png": [179, 159, 154], "mobs_mc_horse_gray.png": [78, 68, 62], "mobs_mc_shulker_lime.png": [106, 132, 88], "mobs_mc_rabbit_caerbannog.png": [186, 179, 174], "mobs_mc_zombie_librarian.png": [106, 104, 104], "mobs_mc_spawn_icon_silverfish.png": [199, 168, 128], "mobs_mc_spawn_icon_stray.png": [118, 116, 118], "mobs_mc_spawn_icon_polarbear.png": [237, 235, 212], "mobs_mc_guardian_elder.png": [141, 141, 125], "mobs_mc_spawn_icon_slime.png": [76, 130, 33], "mobs_mc_cave_spider.png": [14, 28, 38], "mobs_mc_spawn_icon_cow.png": [162, 118, 72], "mobs_mc_wolf.png": [182, 165, 159], "mobs_mc_wither_skeleton.png": [50, 50, 50], "mobs_mc_endergolem.png": [135, 87, 99], "mobs_mc_spawn_icon_mule.png": [115, 82, 47], "mobs_mc_llama_decor_orange.png": [249, 131, 50], "mobs_chicken_egg.png": [199, 157, 106], "mobs_mc_rabbit_white.png": [161, 153, 149], "mobs_mc_horse_black.png": [49, 42, 39], "mobs_mc_dragon.png": [79, 54, 67], "mobs_mc_spawn_icon_parrot.png": [202, 100, 54], "mobs_mc_spawn_icon_snowman.png": [216, 173, 147], "mobs_mc_donkey.png": [91, 78, 68], "mobs_mc_shulker_cyan.png": [89, 114, 128], "mobs_mc_spawn_icon_sheep.png": [209, 185, 175], "mobs_mc_TEMP_wither_projectile.png": [69, 69, 69], "mobs_mc_spawn_icon_enderman.png": [63, 82, 87], "mobs_mc_shulker_orange.png": [156, 90, 67], "mobs_mc_empty.png": [255, 255, 255], "mobs_mc_spawn_icon_wither.png": [102, 102, 102], "mcl_boats_spruce_boat.png": [72, 61, 51], "mcl_boats_jungle_boat.png": [102, 73, 58], "mcl_boats_texture_birch_boat.png": [131, 105, 83], "mcl_boats_texture_oak_boat.png": [103, 82, 65], "mcl_boats_birch_boat.png": [120, 95, 78], "mcl_boats_texture_jungle_boat.png": [109, 78, 60], "mcl_boats_oak_boat.png": [93, 76, 62], "mcl_boats_texture_acacia_boat.png": [136, 90, 64], "mcl_boats_texture_dark_oak_boat.png": [89, 76, 64], "mcl_boats_texture_spruce_boat.png": [74, 61, 50], "mcl_boats_acacia_boat.png": [124, 82, 59], "mcl_boats_dark_oak_boat.png": [89, 76, 64], "mobs_nametag.png": [138, 114, 89], "mobs_blood.png": [27, 27, 29], "mcl_minecarts_rail_golden_curved_powered.png": [89, 71, 57], "mcl_minecarts_rail_golden_crossing.png": [83, 70, 55], "mcl_minecarts_rail_detector_curved_powered.png": [81, 68, 64], "mcl_minecarts_rail_golden_t_junction_powered.png": [82, 69, 59], "mcl_minecarts_rail_golden_t_junction.png": [80, 70, 59], "mcl_minecarts_rail_detector.png": [85, 74, 67], "mcl_minecarts_rail_detector_crossing.png": [77, 69, 65], "default_rail_t_junction.png": [79, 68, 61], "mcl_minecarts_rail_activator_crossing_powered.png": [72, 55, 51], "mcl_minecarts_minecart_hopper.png": [45, 45, 45], "mcl_minecarts_minecart_furnace.png": [66, 65, 64], "mcl_minecarts_minecart_command_block.png": [64, 62, 61], "mcl_minecarts_rail_golden.png": [92, 77, 60], "mcl_minecarts_rail_activator_t_junction_powered.png": [76, 61, 55], "default_rail_curved.png": [76, 67, 60], "mcl_minecarts_rail_activator_t_junction.png": [72, 62, 56], "mcl_minecarts_rail_golden_crossing_powered.png": [86, 70, 54], "mcl_minecarts_rail_detector_crossing_powered.png": [78, 68, 64], "mcl_minecarts_rail_detector_curved.png": [77, 70, 66], "default_rail_crossing.png": [79, 68, 59], "mcl_minecarts_rail_detector_t_junction.png": [74, 66, 61], "mcl_minecarts_minecart.png": [72, 60, 51], "mcl_minecarts_rail_golden_curved.png": [85, 73, 58], "mcl_minecarts_rail_activator.png": [78, 64, 56], "mcl_minecarts_rail_activator_powered.png": [86, 62, 54], "mcl_minecarts_rail_detector_t_junction_powered.png": [76, 66, 61], "mcl_minecarts_minecart_normal.png": [47, 45, 43], "mcl_minecarts_minecart_tnt.png": [75, 52, 52], "mcl_minecarts_rail_detector_powered.png": [87, 74, 67], "mcl_minecarts_rail_golden_powered.png": [94, 77, 60], "mcl_minecarts_rail_activator_crossing.png": [65, 56, 52], "default_rail.png": [83, 70, 61], "mcl_minecarts_rail_activator_curved_powered.png": [75, 55, 52], "mcl_minecarts_rail_activator_curved.png": [66, 56, 53], "mcl_minecarts_minecart_chest.png": [51, 48, 46], "mobs_mc_gameconfig_enderman_cactus_background.png": [44, 71, 27], "mcl_paintings_paintings.png": [104, 99, 89], "mcl_paintings_painting.png": [139, 133, 119], "mcl_particles_lava.png": [250, 150, 64], "mcl_particles_instant_effect.png": [160, 160, 160], "mcl_particles_note.png": [41, 40, 39], "mcl_particles_bubble.png": [147, 174, 195], "mcl_particles_sponge1.png": [241, 238, 226], "mcl_particles_smoke_anim.png": [172, 172, 172], "mcl_particles_crit.png": [165, 165, 165], "mcl_particles_mob_death.png": [198, 198, 198], "mcl_particles_droplet_bottle.png": [203, 203, 203], "mcl_particles_sponge4.png": [241, 238, 226], "mcl_particles_effect.png": [184, 184, 184], "mcl_particles_teleport.png": [86, 22, 128], "mcl_particles_sponge5.png": [241, 238, 226], "mcl_particles_flame.png": [244, 149, 63], "mcl_particles_sponge3.png": [241, 238, 226], "mcl_particles_sponge2.png": [241, 238, 226], "mcl_particles_smoke.png": [174, 174, 174], "lightning_lightning_2.png": [255, 255, 255], "lightning_lightning_3.png": [217, 217, 217], "lightning_lightning_1.png": [223, 223, 223], "weather_pack_rain_raindrop_2.png": [33, 79, 142], "weather_pack_rain_raindrop_3.png": [59, 88, 128], "mcl_particles_nether_dust3.png": [143, 105, 102], "weather_pack_rain_raindrop_1.png": [97, 137, 179], "mcl_particles_nether_dust1.png": [143, 105, 102], "weather_pack_snow_snowflake1.png": [255, 255, 255], "mcl_particles_nether_dust2.png": [143, 105, 102], "weather_pack_snow_snowflake2.png": [255, 255, 255], "mcl_moon_moon_phases.png": [80, 106, 141], "hbarmor_bgicon.png": [27, 27, 29], "hbarmor_bar.png": [175, 172, 165], "hbarmor_icon.png": [135, 131, 126], "mcl_base_textures_background9.png": [179, 179, 179], "object_crosshair.png": [255, 255, 255], "bubble.png": [69, 138, 194], "crosshair.png": [255, 255, 255], "heart.png": [137, 47, 40], "mcl_base_textures_background.png": [179, 179, 179], "crack_anylength.png": [93, 93, 93], "mcl_base_textures_button9_pressed.png": [162, 162, 162], "mcl_base_textures_button9.png": [162, 162, 162], "smoke_puff.png": [255, 255, 255], "mineclone2_logo.png": [75, 74, 69], "mineclone2_icon.png": [58, 74, 44], "awards_template.png": [134, 134, 134], "awards_bg_mining.png": [73, 68, 51], "awards_progress_gray.png": [157, 157, 157], "awards_ui_icon.png": [190, 34, 34], "awards_unknown.png": [134, 134, 134], "awards_progress_green.png": [0, 155, 74], "awards_bg_default.png": [38, 38, 38], "hudbars_bar_breath.png": [159, 161, 255], "hudbars_icon_health.png": [137, 47, 40], "hudbars_bar_health.png": [168, 55, 47], "hudbars_bgicon_breath.png": [0, 0, 0], "hudbars_bgicon_health.png": [27, 27, 29], "hudbars_icon_breath.png": [69, 138, 194], "hudbars_bar_background.png": [71, 71, 71], "mcl_achievements_button.png": [158, 152, 67], "mcl_inventory_hotbar.png": [81, 81, 85], "crafting_inventory_creative_survival.png": [195, 195, 195], "crafting_creative_bg_dark.png": [157, 157, 157], "mcl_inventory_empty_armor_slot_shield.png": [25, 32, 34], "crafting_formspec_bg.png": [9, 9, 9], "mcl_inventory_empty_armor_slot_helmet.png": [25, 32, 34], "mcl_inventory_hotbar_selected.png": [113, 85, 40], "crafting_creative_inactive_down.png": [151, 151, 151], "crafting_creative_active_down.png": [196, 196, 196], "crafting_creative_prev.png": [254, 254, 254], "crafting_creative_marker.png": [0, 0, 0], "mcl_inventory_button9_pressed.png": [162, 162, 162], "crafting_creative_active.png": [202, 202, 202], "mcl_inventory_button9.png": [162, 162, 162], "mcl_inventory_empty_armor_slot_chestplate.png": [0, 0, 0], "mcl_inventory_empty_armor_slot_boots.png": [0, 0, 0], "crafting_creative_bg.png": [207, 207, 207], "crafting_creative_inactive.png": [157, 157, 157], "crafting_creative_next.png": [254, 254, 254], "mcl_inventory_empty_armor_slot_leggings.png": [25, 32, 34], "crafting_inventory_creative.png": [206, 206, 206], "crafting_creative_trash.png": [144, 113, 113], "mcl_formspec_itemslot.png": [157, 157, 157], "mcl_experience_bottle.png": [136, 174, 169], "experience_bar_background.png": [49, 46, 45], "experience_orb.png": [93, 174, 0], "experience_bar.png": [74, 102, 70], "mcl_bossbars_empty.png": [255, 255, 255], "mcl_bossbars.png": [76, 68, 75], "mcl_itemframes_item_frame.png": [123, 90, 63], "mcl_itemframes_itemframe_background.png": [136, 104, 75], "mcl_banners_stripe_middle.png": [255, 255, 255], "mcl_banners_skull.png": [255, 255, 255], "mcl_banners_bricks.png": [255, 255, 255], "mcl_banners_square_bottom_left.png": [255, 255, 255], "mcl_banners_gradient.png": [254, 254, 254], "mcl_banners_cross.png": [255, 255, 255], "mcl_banners_gradient_up.png": [254, 254, 254], "mcl_banners_item_overlay.png": [240, 240, 240], "mcl_banners_stripe_downright.png": [255, 255, 255], "mcl_banners_stripe_downleft.png": [255, 255, 255], "mcl_banners_fallback_wood.png": [102, 88, 74], "mcl_banners_base_inverted.png": [255, 255, 255], "mcl_banners_triangles_top.png": [255, 255, 255], "mcl_banners_banner_base.png": [215, 206, 193], "mcl_banners_curly_border.png": [254, 254, 254], "mcl_banners_thing.png": [253, 253, 253], "mcl_banners_small_stripes.png": [255, 255, 255], "mcl_banners_triangle_bottom.png": [254, 254, 254], "mcl_banners_stripe_right.png": [255, 255, 255], "mcl_banners_straight_cross.png": [255, 255, 255], "mcl_banners_triangle_top.png": [255, 255, 255], "mcl_banners_border.png": [255, 255, 255], "mcl_banners_diagonal_left.png": [255, 255, 255], "mcl_banners_diagonal_right.png": [255, 255, 255], "mcl_banners_base.png": [255, 255, 255], "mcl_banners_half_vertical.png": [255, 255, 255], "mcl_banners_circle.png": [254, 254, 254], "mcl_banners_triangles_bottom.png": [255, 255, 255], "mcl_banners_item_base.png": [103, 89, 75], "mcl_banners_stripe_left.png": [255, 255, 255], "mcl_banners_rhombus.png": [255, 255, 255], "mcl_banners_creeper.png": [255, 255, 255], "mcl_banners_flower.png": [254, 254, 254], "mcl_banners_stripe_bottom.png": [255, 255, 255], "mcl_banners_half_horizontal.png": [255, 255, 255], "mcl_banners_half_horizontal_bottom.png": [255, 255, 255], "mcl_banners_square_top_left.png": [255, 255, 255], "mcl_banners_square_top_right.png": [255, 255, 255], "mcl_banners_stripe_center.png": [255, 255, 255], "mcl_banners_diagonal_up_left.png": [255, 255, 255], "mcl_banners_stripe_top.png": [255, 255, 255], "mcl_banners_diagonal_up_right.png": [255, 255, 255], "mcl_banners_square_bottom_right.png": [255, 255, 255], "mcl_banners_half_vertical_right.png": [255, 255, 255], "mcl_doors_trapdoor_dark_oak.png": [81, 68, 56], "mcl_doors_trapdoor_acacia_side.png": [154, 102, 71], "doors_trapdoor_steel_side.png": [149, 140, 140], "mcl_doors_door_jungle_side_upper.png": [109, 75, 57], "mcl_doors_door_dark_oak_side_lower.png": [103, 90, 75], "mcl_doors_door_iron_lower.png": [157, 152, 151], "mcl_doors_door_acacia_upper.png": [152, 100, 69], "mcl_doors_door_jungle_side_lower.png": [107, 72, 55], "mcl_doors_door_wood_lower.png": [89, 70, 55], "doors_trapdoor_steel.png": [149, 140, 140], "mcl_doors_door_iron_side_upper.png": [155, 149, 148], "mcl_doors_door_acacia_side_upper.png": [133, 80, 53], "mcl_doors_door_jungle.png": [116, 83, 62], "mcl_doors_door_iron_side_lower.png": [157, 152, 151], "mcl_doors_door_birch_upper.png": [179, 158, 139], "mcl_doors_trapdoor_spruce_side.png": [73, 59, 47], "mcl_doors_door_iron_upper.png": [155, 149, 148], "mcl_doors_door_spruce_side_lower.png": [92, 79, 68], "mcl_doors_trapdoor_spruce.png": [71, 57, 46], "mcl_doors_trapdoor_birch_side.png": [147, 116, 89], "doors_trapdoor_side.png": [113, 86, 67], "mcl_doors_door_acacia_lower.png": [153, 101, 70], "mcl_doors_door_dark_oak_side_upper.png": [102, 89, 75], "mcl_doors_door_acacia_side_lower.png": [131, 78, 51], "mcl_doors_door_wood_upper.png": [92, 72, 57], "mcl_doors_trapdoor_birch.png": [173, 151, 132], "mcl_doors_door_dark_oak_upper.png": [83, 71, 59], "mcl_doors_door_acacia.png": [148, 98, 67], "mcl_doors_door_spruce.png": [67, 56, 47], "mcl_doors_door_spruce_lower.png": [71, 58, 48], "mcl_doors_door_birch_side_upper.png": [153, 121, 94], "mcl_doors_trapdoor_dark_oak_side.png": [85, 72, 60], "mcl_doors_door_wood_side_upper.png": [84, 65, 51], "mcl_doors_door_birch.png": [172, 147, 124], "mcl_doors_door_birch_lower.png": [165, 140, 119], "mcl_doors_trapdoor_jungle.png": [103, 70, 52], "doors_item_steel.png": [148, 144, 143], "doors_trapdoor.png": [98, 75, 59], "mcl_doors_door_jungle_lower.png": [116, 82, 61], "doors_item_wood.png": [88, 67, 53], "mcl_doors_door_jungle_upper.png": [113, 79, 59], "mcl_doors_door_spruce_upper.png": [71, 58, 47], "mcl_doors_door_dark_oak_lower.png": [84, 71, 59], "mcl_doors_door_dark_oak.png": [82, 69, 57], "mcl_doors_door_wood_side_lower.png": [132, 102, 81], "mcl_doors_trapdoor_jungle_side.png": [121, 87, 62], "mcl_doors_door_spruce_side_upper.png": [92, 79, 68], "mcl_doors_door_birch_side_lower.png": [152, 119, 92], "mcl_doors_trapdoor_acacia.png": [148, 96, 66], "mcl_fishing_clownfish_raw.png": [205, 127, 81], "mcl_fishing_fish_raw.png": [70, 112, 154], "mcl_fishing_salmon_raw.png": [112, 105, 102], "mcl_fishing_fish_cooked.png": [93, 84, 94], "mcl_fishing_bobber.png": [171, 117, 119], "mcl_fishing_pufferfish_raw.png": [219, 165, 77], "mcl_fishing_fishing_rod.png": [134, 116, 103], "mcl_fishing_salmon_cooked.png": [97, 91, 89], "mcl_stairs_diorite_smooth_slab.png": [156, 153, 151], "mcl_stairs_iron_block_slab.png": [166, 159, 159], "mcl_stairs_andesite_smooth_slab.png": [106, 113, 108], "mcl_stairs_gold_block_slab.png": [191, 146, 56], "mcl_stairs_granite_smooth_slab.png": [150, 121, 109], "mcl_stairs_lapis_block_slab.png": [49, 89, 158], "mcl_fireworks_rocket.png": [155, 84, 71], "mcl_bows_arrow_inv.png": [144, 129, 121], "mcl_bows_arrow_overlay.png": [193, 191, 186], "mcl_bows_bow_1.png": [112, 95, 79], "mcl_bows_bow_0.png": [111, 94, 79], "mcl_bows_bow_2.png": [115, 98, 82], "mcl_bows_bow.png": [114, 95, 78], "mcl_bows_arrow.png": [133, 116, 108], "mcl_bows_arrow_front.png": [178, 175, 168], "mcl_bows_arrow_back.png": [218, 216, 213], "mcl_ocean_dead_bubble_coral.png": [118, 108, 126], "mcl_ocean_tube_coral.png": [57, 88, 209], "mcl_ocean_sea_pickle_2_anim.png": [95, 122, 51], "mcl_ocean_dead_horn_coral_fan.png": [150, 143, 123], "mcl_ocean_dead_bubble_coral_block.png": [114, 105, 122], "mcl_ocean_sea_pickle_3_off.png": [68, 99, 36], "mcl_ocean_dead_horn_coral_block.png": [152, 146, 125], "mcl_ocean_bubble_coral_block.png": [143, 76, 195], "mcl_ocean_horn_coral.png": [233, 195, 69], "mcl_ocean_dead_tube_coral_block.png": [99, 104, 127], "mcl_ocean_sea_pickle_item.png": [93, 120, 50], "mcl_ocean_kelp_item.png": [42, 105, 55], "mcl_ocean_dried_kelp_side.png": [71, 80, 67], "mcl_ocean_dead_tube_coral.png": [99, 105, 128], "mcl_ocean_fire_coral_block.png": [198, 74, 62], "mcl_ocean_bubble_coral.png": [149, 77, 200], "mcl_ocean_prismarine_bricks.png": [104, 112, 115], "mcl_ocean_brain_coral.png": [206, 87, 153], "mcl_ocean_dried_kelp_top.png": [56, 71, 57], "mcl_ocean_brain_coral_block.png": [200, 85, 148], "mcl_ocean_prismarine_dark.png": [77, 89, 97], "mcl_ocean_dead_fire_coral_block.png": [127, 102, 100], "mcl_ocean_prismarine_shard.png": [122, 144, 135], "mcl_ocean_sea_pickle_2_off.png": [70, 100, 36], "mcl_ocean_sea_pickle_4_anim.png": [85, 113, 46], "mcl_ocean_dead_brain_coral.png": [134, 117, 127], "mcl_ocean_tube_coral_fan.png": [59, 85, 203], "mcl_ocean_sea_pickle_4_off.png": [68, 98, 36], "mcl_ocean_sea_pickle_1_anim.png": [106, 132, 57], "mcl_ocean_fire_coral.png": [208, 78, 65], "mcl_ocean_sea_pickle_3_anim.png": [89, 116, 48], "mcl_ocean_dead_fire_coral_fan.png": [140, 113, 110], "mcl_ocean_prismarine_crystals.png": [182, 193, 190], "mcl_ocean_prismarine_anim.png": [104, 123, 122], "mcl_ocean_horn_coral_fan.png": [230, 189, 68], "mcl_ocean_dead_tube_coral_fan.png": [98, 103, 125], "mcl_ocean_sea_pickle_1_off.png": [72, 103, 37], "mcl_ocean_dead_horn_coral.png": [154, 148, 127], "mcl_ocean_dead_fire_coral.png": [133, 107, 105], "mcl_ocean_bubble_coral_fan.png": [141, 75, 192], "mcl_ocean_horn_coral_block.png": [232, 193, 69], "mcl_ocean_brain_coral_fan.png": [206, 87, 154], "mcl_ocean_sea_lantern.png": [133, 144, 145], "mcl_ocean_seagrass.png": [48, 125, 60], "mcl_ocean_dead_brain_coral_fan.png": [134, 117, 127], "mcl_ocean_dried_kelp.png": [36, 57, 40], "mcl_ocean_dead_bubble_coral_fan.png": [113, 104, 120], "mcl_ocean_dried_kelp_bottom.png": [56, 71, 57], "mcl_ocean_kelp_plant.png": [42, 105, 55], "mcl_ocean_tube_coral_block.png": [58, 88, 207], "mcl_ocean_dead_brain_coral_block.png": [130, 114, 123], "mcl_ocean_fire_coral_fan.png": [205, 77, 64], "mcl_portals_endframe_bottom.png": [109, 99, 87], "mcl_portals_particle3.png": [146, 0, 201], "mcl_portals_particle2.png": [146, 0, 201], "mcl_portals_endframe_top.png": [95, 85, 74], "mcl_portals_particle4.png": [146, 0, 201], "mcl_portals_endframe_eye.png": [135, 36, 18], "mcl_portals_end_portal.png": [14, 14, 14], "mcl_particles_nether_portal.png": [206, 0, 206], "mcl_portals_particle5.png": [189, 11, 213], "mcl_portals_endframe_side.png": [110, 99, 86], "mcl_portals_particle1.png": [173, 28, 229], "mcl_portals_portal.png": [74, 24, 172], "mcl_particles_nether_portal_t.png": [159, 0, 223], "cake_side.png": [201, 170, 155], "cake_inner.png": [185, 129, 99], "cake_bottom.png": [160, 86, 51], "cake_top.png": [241, 228, 226], "cake.png": [216, 187, 176], "mcl_cocoas_cocoa_top_stage_2.png": [138, 68, 52], "mcl_cocoas_cocoa_stage_1.png": [172, 121, 69], "mcl_cocoas_cocoa_stage_2.png": [132, 65, 50], "mcl_cocoas_cocoa_stage_0.png": [65, 77, 39], "mcl_fences_fence_red_nether_brick.png": [68, 17, 0], "mcl_fences_fence_gate_red_nether_brick.png": [64, 15, 0], "mcl_fences_fence_gate_nether_brick.png": [50, 25, 26], "mcl_mobitems_spider_eye.png": [154, 69, 60], "mcl_mobitems_leather.png": [105, 75, 45], "mcl_mobitems_feather.png": [206, 185, 183], "mcl_mobitems_string.png": [202, 186, 166], "mcl_mobitems_rabbit_foot.png": [124, 107, 97], "mcl_mobitems_saddle.png": [93, 72, 50], "mcl_mobitems_bone.png": [182, 162, 139], "mcl_mobitems_shulker_shell.png": [118, 68, 83], "mcl_mobitems_blaze_rod.png": [143, 64, 28], "mcl_mobitems_beef_raw.png": [147, 63, 54], "mcl_mobitems_rabbit_stew.png": [127, 98, 79], "mcl_mobitems_rotten_flesh.png": [110, 68, 45], "mcl_mobitems_chicken_raw.png": [217, 178, 149], "mcl_mobitems_ghast_tear.png": [148, 160, 166], "mcl_mobitems_porkchop_raw.png": [160, 72, 69], "mcl_mobitems_rabbit_hide.png": [108, 85, 73], "mcl_mobitems_slimeball.png": [75, 134, 82], "mcl_mobitems_magma_cream.png": [102, 54, 34], "default_gunpowder.png": [48, 41, 36], "mcl_mobitems_chicken_cooked.png": [187, 145, 106], "mcl_mobitems_beef_cooked.png": [112, 70, 49], "mcl_mobitems_rabbit_cooked.png": [188, 155, 131], "mcl_mobitems_blaze_powder.png": [86, 50, 34], "mcl_mobitems_rabbit_raw.png": [217, 177, 157], "mcl_mobitems_carrot_on_a_stick.png": [133, 113, 93], "mcl_mobitems_mutton_cooked.png": [144, 104, 77], "mcl_mobitems_nether_star.png": [234, 189, 123], "mcl_mobitems_porkchop_cooked.png": [116, 72, 48], "mcl_mobitems_mutton_raw.png": [175, 77, 77], "mcl_mobitems_bucket_milk.png": [180, 175, 166], "mcl_farming_wheat_stage_0.png": [53, 101, 46], "farming_carrot.png": [147, 106, 63], "farming_potato_poison.png": [121, 93, 55], "farming_cookie.png": [144, 100, 61], "mcl_farming_melon_seeds.png": [100, 72, 61], "mcl_farming_potatoes_stage_1.png": [69, 113, 61], "mcl_farming_melon_stem_disconnected.png": [96, 96, 96], "farming_carrot_4.png": [93, 105, 58], "mcl_farming_wheat_stage_5.png": [101, 142, 66], "farming_tool_woodhoe.png": [120, 101, 86], "mcl_farming_potatoes_stage_0.png": [73, 119, 65], "farming_carrot_1.png": [75, 112, 61], "farming_carrot_3.png": [70, 107, 57], "farming_melon.png": [153, 84, 62], "mcl_farming_pumpkin_seeds.png": [132, 120, 87], "farming_wheat_harvested.png": [178, 134, 80], "farming_pumpkin_side.png": [186, 100, 42], "mcl_farming_pumpkin_face.png": [181, 94, 40], "mcl_farming_wheat_stage_4.png": [86, 129, 65], "mcl_farming_farmland_wet.png": [69, 55, 46], "mcl_farming_beetroot_0.png": [56, 122, 75], "mcl_farming_pumpkin_stem_connected.png": [94, 94, 94], "mcl_farming_farmland_dry.png": [101, 80, 68], "farming_tool_diamondhoe.png": [101, 104, 104], "mcl_farming_beetroot_1.png": [54, 118, 72], "mcl_farming_beetroot_2.png": [54, 119, 73], "mcl_farming_wheat_stage_7.png": [165, 116, 75], "mcl_farming_beetroot.png": [113, 69, 66], "mcl_farming_wheat_stage_6.png": [145, 145, 69], "mcl_farming_wheat_stage_3.png": [64, 113, 52], "mcl_farming_pumpkin_stem_disconnected.png": [96, 96, 96], "mcl_farming_hayblock_top.png": [154, 116, 81], "farming_pumpkin_face_light.png": [189, 100, 45], "farming_potato_baked.png": [118, 84, 45], "farming_melon_side.png": [68, 95, 37], "farming_potato.png": [107, 74, 39], "mcl_farming_wheat_stage_1.png": [49, 97, 45], "farming_pumpkin_top.png": [172, 87, 40], "farming_bread.png": [177, 133, 94], "mcl_farming_beetroot_soup.png": [120, 70, 63], "farming_melon_top.png": [58, 80, 33], "mcl_farming_potatoes_stage_3.png": [82, 106, 57], "farming_tool_stonehoe.png": [133, 122, 111], "mcl_farming_beetroot_seeds.png": [107, 104, 88], "farming_tool_goldhoe.png": [162, 131, 70], "farming_carrot_gold.png": [140, 122, 48], "farming_carrot_2.png": [72, 108, 58], "farming_pumpkin_face.png": [161, 79, 37], "mcl_farming_melon_stem_connected.png": [94, 94, 94], "mcl_farming_pumpkin_pie.png": [172, 98, 45], "mcl_farming_pumpkin_face_preview.png": [166, 81, 38], "mcl_farming_wheat_stage_2.png": [49, 97, 45], "farming_tool_steelhoe.png": [123, 112, 102], "mcl_farming_potatoes_stage_2.png": [72, 116, 62], "mcl_farming_beetroot_3.png": [73, 105, 71], "mcl_farming_wheat_seeds.png": [102, 87, 55], "mcl_farming_hayblock_side.png": [135, 99, 71], "mcl_end_purpur_block.png": [161, 111, 175], "mcl_end_chorus_flower_dead.png": [82, 79, 118], "mcl_end_end_stone.png": [221, 214, 130], "mcl_end_endframe_side.png": [110, 99, 86], "mcl_end_purpur_pillar.png": [157, 108, 171], "mcl_end_chorus_fruit.png": [87, 89, 121], "mcl_end_endframe_eye.png": [135, 36, 18], "mcl_end_chorus_fruit_popped.png": [70, 67, 110], "mcl_end_end_rod_top.png": [123, 75, 97], "mcl_end_endframe_top.png": [95, 85, 74], "mcl_end_purpur_pillar_top.png": [159, 110, 173], "mcl_end_chorus_flower.png": [92, 92, 125], "mcl_end_crystal_item.png": [170, 140, 162], "mcl_end_end_bricks.png": [194, 187, 123], "mcl_end_dragon_egg.png": [55, 34, 32], "mcl_end_ender_eye.png": [130, 33, 17], "mcl_end_chorus_plant.png": [78, 73, 115], "mcl_end_end_rod_bottom.png": [122, 74, 96], "mcl_end_crystal_beam.png": [251, 251, 251], "mcl_end_end_rod_side.png": [242, 202, 177], "mcl_clock_clock_18.png": [152, 123, 81], "mcl_clock_clock_03.png": [160, 129, 88], "mcl_clock_clock_49.png": [155, 122, 79], "mcl_clock_clock_34.png": [140, 115, 76], "mcl_clock_clock_01.png": [161, 129, 88], "mcl_clock_clock_32.png": [141, 116, 77], "mcl_clock_clock_27.png": [142, 117, 78], "mcl_clock_clock_42.png": [147, 119, 79], "mcl_clock_clock_25.png": [145, 119, 78], "mcl_clock_clock_56.png": [160, 126, 81], "mcl_clock_clock_22.png": [146, 119, 79], "mcl_clock_clock_31.png": [141, 116, 76], "mcl_clock_clock_57.png": [161, 127, 83], "mcl_clock_clock_58.png": [157, 127, 86], "mcl_clock_clock_39.png": [146, 119, 79], "mcl_clock_clock_59.png": [160, 128, 86], "mcl_clock_clock_16.png": [157, 125, 80], "mcl_clock_clock_38.png": [141, 117, 78], "mcl_clock_clock_53.png": [158, 124, 80], "mcl_clock_clock_43.png": [149, 121, 80], "mcl_clock_clock_09.png": [161, 127, 81], "mcl_clock_clock_33.png": [141, 116, 76], "mcl_clock_clock_07.png": [162, 128, 83], "mcl_clock_clock_23.png": [148, 121, 80], "mcl_clock_clock_51.png": [156, 123, 80], "mcl_clock_clock_10.png": [158, 127, 85], "mcl_clock_clock_55.png": [160, 126, 81], "mcl_clock_clock_46.png": [152, 122, 81], "mcl_clock_clock_26.png": [142, 117, 79], "mcl_clock_clock_06.png": [157, 127, 86], "mcl_clock_clock_00.png": [162, 129, 87], "mcl_clock_clock_28.png": [141, 116, 77], "mcl_clock_clock_44.png": [150, 120, 79], "mcl_clock_clock_08.png": [160, 127, 81], "mcl_clock_clock_19.png": [152, 122, 80], "mcl_clock_clock_12.png": [159, 127, 83], "mcl_clock_clock_45.png": [153, 123, 81], "mcl_clock_clock_24.png": [147, 120, 80], "mcl_clock_clock_15.png": [157, 125, 81], "mcl_clock_clock_20.png": [150, 121, 79], "mcl_clock_clock_61.png": [160, 129, 88], "mcl_clock_clock_02.png": [159, 129, 89], "mcl_clock_clock_40.png": [147, 120, 79], "mcl_clock_clock_37.png": [143, 118, 79], "mcl_clock_clock_48.png": [155, 123, 79], "mcl_clock_clock_13.png": [159, 126, 82], "mcl_clock_clock_17.png": [156, 125, 81], "mcl_clock_clock_52.png": [156, 123, 80], "mcl_clock_clock_54.png": [156, 125, 84], "mcl_clock_clock_04.png": [159, 128, 87], "mcl_clock_clock_47.png": [154, 122, 80], "mcl_clock_clock_62.png": [159, 129, 89], "mcl_clock_clock_41.png": [147, 120, 79], "mcl_clock_clock_35.png": [140, 115, 76], "mcl_clock_clock_60.png": [159, 128, 87], "mcl_clock_clock_50.png": [155, 123, 80], "mcl_clock_clock_29.png": [142, 117, 78], "mcl_clock_clock_21.png": [150, 122, 81], "mcl_clock_clock_30.png": [140, 115, 76], "mcl_clock_clock_14.png": [157, 125, 81], "mcl_clock_clock_05.png": [160, 128, 85], "mcl_clock_clock_36.png": [141, 116, 77], "mcl_clock_clock_63.png": [161, 129, 88], "mcl_clock_clock_11.png": [160, 127, 82], "mcl_compass_compass_02.png": [116, 107, 104], "mcl_compass_compass_06.png": [117, 107, 104], "mcl_compass_compass_04.png": [117, 106, 104], "mcl_compass_compass_19.png": [116, 106, 103], "mcl_compass_compass_16.png": [114, 106, 104], "mcl_compass_compass_26.png": [117, 107, 104], "mcl_compass_compass_25.png": [117, 107, 105], "mcl_compass_compass_24.png": [117, 107, 105], "mcl_compass_compass_17.png": [115, 106, 104], "mcl_compass_compass_23.png": [117, 107, 105], "mcl_compass_compass_01.png": [115, 107, 104], "mcl_compass_compass_28.png": [116, 107, 104], "mcl_compass_compass_05.png": [117, 106, 104], "mcl_compass_compass_09.png": [117, 107, 104], "mcl_compass_compass_10.png": [117, 107, 105], "mcl_compass_compass_14.png": [116, 107, 105], "mcl_compass_compass_18.png": [117, 107, 104], "mcl_compass_compass_13.png": [117, 106, 104], "mcl_compass_compass_08.png": [117, 107, 104], "mcl_compass_compass_21.png": [117, 107, 104], "mcl_compass_compass_27.png": [117, 106, 104], "mcl_compass_compass_30.png": [116, 107, 104], "mcl_compass_compass_15.png": [115, 106, 104], "mcl_compass_compass_29.png": [115, 106, 104], "mcl_compass_compass_03.png": [116, 106, 104], "mcl_compass_compass_07.png": [117, 107, 104], "mcl_compass_compass_22.png": [117, 107, 105], "mcl_compass_compass_12.png": [117, 106, 104], "mcl_compass_compass_00.png": [114, 107, 104], "mcl_compass_compass_20.png": [116, 106, 104], "mcl_compass_compass_31.png": [115, 107, 104], "mcl_compass_compass_11.png": [117, 106, 104], "mcl_jukebox_record_wait.png": [39, 42, 55], "mcl_jukebox_record_cat.png": [40, 45, 51], "mcl_jukebox_record_mellohi.png": [46, 44, 59], "mcl_jukebox_record_13.png": [51, 47, 51], "mcl_jukebox_record_ward.png": [39, 43, 51], "mcl_jukebox_record_chirp.png": [49, 40, 50], "mcl_jukebox_record_blocks.png": [47, 37, 49], "mcl_jukebox_record_11.png": [41, 40, 52], "mcl_jukebox_record_mall.png": [42, 41, 62], "mcl_jukebox_top.png": [72, 56, 44], "mcl_jukebox_record_strad.png": [45, 45, 57], "mcl_jukebox_record_far.png": [47, 48, 52], "mcl_jukebox_side.png": [94, 74, 57], "mcl_jukebox_record_stal.png": [39, 38, 49], "mcl_fences_fence_acacia.png": [152, 99, 68], "mcl_fences_fence_gate_mask.png": [255, 126, 126], "mcl_fences_fence_gate_spruce.png": [85, 69, 56], "mcl_fences_fence_big_oak.png": [83, 71, 59], "mcl_fences_fence_spruce.png": [84, 67, 54], "mcl_fences_fence_gate_birch.png": [153, 121, 94], "mcl_fences_fence_gate_acacia.png": [155, 102, 70], "mcl_fences_fence_gate_big_oak.png": [85, 73, 61], "mcl_fences_fence_oak.png": [108, 83, 64], "mcl_fences_fence_gate_oak.png": [111, 85, 66], "mcl_fences_fence_jungle.png": [115, 80, 60], "mcl_fences_fence_nether_brick.png": [49, 24, 24], "mcl_fences_fence_birch.png": [151, 119, 93], "mcl_fences_fence_gate_jungle.png": [117, 82, 61], "mcl_fences_fence_mask.png": [255, 126, 126], "mcl_core_leaves_birch.png": [28, 57, 28], "default_mossycobble.png": [100, 105, 94], "default_flint.png": [70, 67, 64], "mcl_core_bowl.png": [78, 61, 47], "mcl_core_bone_block_top.png": [220, 201, 170], "default_acacia_tree.png": [105, 91, 74], "default_steel_block.png": [159, 151, 151], "mcl_core_stonebrick_mossy.png": [81, 101, 76], "default_diamond_block.png": [92, 160, 200], "default_leaves.png": [39, 79, 38], "mcl_core_web.png": [202, 189, 167], "mcl_core_reeds.png": [57, 100, 52], "default_gold_ingot.png": [179, 133, 47], "mcl_core_grass_path_side.png": [113, 89, 62], "mcl_core_red_sand.png": [224, 137, 111], "default_apple.png": [137, 57, 44], "mcl_core_log_birch_top.png": [155, 130, 112], "default_coal_block.png": [51, 49, 51], "mcl_core_andesite_smooth.png": [107, 113, 109], "mcl_core_apple_golden.png": [176, 138, 51], "mcl_core_diorite.png": [153, 149, 146], "mcl_core_granite_smooth.png": [150, 121, 110], "mcl_core_bedrock.png": [91, 77, 66], "mcl_core_planks_spruce.png": [81, 65, 54], "mcl_core_sapling_big_oak.png": [69, 92, 80], "mcl_core_emerald_ore.png": [115, 122, 103], "mcl_core_sandstone_smooth.png": [202, 155, 121], "mcl_core_glass_light_blue.png": [101, 153, 215], "default_brick.png": [139, 87, 75], "mcl_core_redstone_ore.png": [128, 91, 88], "mcl_core_cactus_top.png": [77, 99, 49], "mcl_core_frosted_ice_1.png": [147, 198, 227], "mcl_core_sapling_spruce.png": [55, 72, 53], "mcl_core_stripped_acacia_top.png": [149, 92, 58], "mcl_core_log_spruce_top.png": [97, 71, 57], "mcl_core_glass_lime.png": [126, 203, 24], "mcl_core_lapis_ore.png": [111, 113, 125], "default_junglesapling.png": [64, 88, 39], "default_clay_brick.png": [127, 57, 48], "default_gold_block.png": [192, 147, 59], "default_water_source_animated.png": [37, 98, 129], "mcl_core_glass_yellow.png": [228, 228, 50], "default_acacia_sapling.png": [109, 92, 59], "mcl_core_stripped_acacia_side.png": [155, 96, 61], "mcl_core_sandstone_carved.png": [199, 152, 119], "mcl_core_glass_blue.png": [50, 75, 178], "mcl_core_red_sandstone_normal.png": [198, 120, 104], "mcl_core_glass_gray.png": [75, 75, 75], "mcl_core_leaves_spruce.png": [38, 74, 47], "mcl_core_glass_pink.png": [241, 126, 164], "mcl_core_lapis_block.png": [50, 92, 162], "mcl_core_glass_purple.png": [126, 62, 178], "mcl_core_iron_nugget.png": [156, 151, 145], "default_papyrus.png": [82, 114, 57], "default_dry_grass.png": [100, 94, 54], "mcl_core_stripped_dark_oak_top.png": [91, 78, 68], "mcl_core_glass_silver.png": [153, 153, 153], "mcl_core_andesite.png": [104, 110, 107], "mcl_core_frosted_ice_3.png": [165, 209, 233], "mcl_core_sugar.png": [215, 215, 215], "default_acacia_wood.png": [152, 100, 69], "mcl_core_glass_black.png": [24, 24, 24], "mcl_core_iron_ore.png": [134, 123, 117], "mcl_core_stripped_birch_side.png": [163, 130, 104], "default_clay.png": [124, 124, 124], "mcl_core_stripped_jungle_side.png": [140, 98, 76], "mcl_core_glass_red.png": [153, 50, 50], "mcl_core_grass_block_top.png": [141, 130, 113], "mcl_core_planks_birch.png": [145, 113, 89], "mcl_core_glass_white.png": [254, 254, 254], "mcl_core_stripped_oak_side.png": [119, 94, 71], "mcl_core_glass_cyan.png": [75, 126, 153], "mcl_core_cactus_side.png": [88, 110, 56], "default_ladder.png": [83, 64, 50], "default_dry_grass_side.png": [91, 93, 52], "mcl_core_stripped_jungle_top.png": [143, 101, 78], "mcl_core_ice_packed.png": [165, 211, 231], "mcl_core_frosted_ice_2.png": [153, 202, 229], "default_dry_shrub.png": [118, 88, 69], "mcl_core_red_sandstone_carved.png": [202, 122, 104], "default_tree.png": [95, 75, 57], "default_clay_lump.png": [111, 111, 111], "mcl_core_red_sandstone_top.png": [212, 126, 108], "mcl_core_dirt_podzol_side.png": [101, 79, 63], "mcl_core_red_sandstone_smooth.png": [207, 124, 106], "default_jungletree_top.png": [125, 87, 67], "mcl_core_coal_ore.png": [109, 101, 99], "default_jungleleaves.png": [29, 84, 30], "mcl_core_vine.png": [21, 61, 21], "default_snow.png": [221, 229, 234], "mcl_core_leaves_big_oak.png": [21, 69, 28], "mcl_core_void.png": [59, 59, 59], "default_tree_top.png": [135, 104, 74], "mcl_core_gold_ore.png": [132, 119, 103], "default_steel_ingot.png": [142, 137, 131], "default_sapling.png": [62, 90, 45], "mcl_core_log_birch.png": [194, 184, 174], "mcl_core_stripped_spruce_top.png": [111, 81, 64], "default_water_flowing_animated.png": [38, 101, 129], "mcl_core_emerald_block.png": [44, 138, 39], "default_jungletree.png": [86, 58, 45], "mcl_core_grass_side_snowed.png": [162, 154, 150], "default_stone_brick.png": [97, 89, 86], "default_lava_flowing_animated.png": [177, 42, 16], "mcl_core_stripped_spruce_side.png": [104, 78, 63], "default_coal_lump.png": [41, 39, 41], "default_sand.png": [220, 170, 127], "mcl_core_glass_green.png": [101, 126, 50], "mcl_core_glass_orange.png": [215, 126, 50], "default_acacia_tree_top.png": [130, 84, 55], "mcl_core_stripped_oak_top.png": [139, 108, 78], "mcl_core_grass_block_side_overlay.png": [153, 142, 123], "default_lava_source_animated.png": [180, 45, 17], "mcl_core_cactus_bottom.png": [169, 168, 116], "mcl_core_sandstone_bottom.png": [202, 155, 121], "default_paper.png": [213, 184, 154], "mcl_core_diamond_ore.png": [122, 124, 126], "default_ice.png": [145, 197, 226], "mcl_core_dirt_podzol_top.png": [85, 63, 42], "mcl_core_slime.png": [93, 157, 86], "mcl_core_gold_nugget.png": [213, 169, 74], "default_stick.png": [88, 70, 57], "mcl_core_emerald.png": [59, 160, 52], "default_diamond.png": [109, 179, 217], "mcl_core_mycelium_top.png": [108, 89, 117], "mcl_core_bone_block_side.png": [226, 207, 174], "mcl_core_diorite_smooth.png": [157, 154, 152], "default_obsidian.png": [13, 9, 25], "mcl_core_planks_big_oak.png": [87, 74, 62], "mcl_core_log_spruce.png": [66, 51, 44], "mcl_core_glass_magenta.png": [178, 75, 215], "mcl_core_granite.png": [153, 121, 110], "mcl_core_log_big_oak_top.png": [83, 70, 62], "default_cobble.png": [113, 106, 104], "mcl_core_red_sandstone_bottom.png": [207, 124, 106], "mcl_core_barrier.png": [138, 46, 38], "mcl_core_stripped_dark_oak_side.png": [86, 73, 63], "mcl_core_mycelium_side.png": [107, 84, 87], "mcl_core_stonebrick_cracked.png": [94, 87, 83], "mcl_core_charcoal.png": [40, 35, 32], "mcl_core_glass_brown.png": [101, 75, 50], "mcl_core_stonebrick_carved.png": [97, 90, 85], "default_wood.png": [113, 87, 67], "default_dirt.png": [108, 83, 70], "mcl_core_log_big_oak.png": [74, 62, 55], "default_junglewood.png": [113, 78, 59], "mcl_core_frosted_ice_0.png": [140, 193, 224], "mcl_core_sandstone_normal.png": [195, 149, 117], "default_gravel.png": [112, 105, 99], "mcl_core_sandstone_top.png": [201, 154, 121], "default_glass.png": [213, 223, 235], "default_stone.png": [130, 122, 118], "mcl_core_sapling_birch.png": [78, 110, 74], "mcl_core_coarse_dirt.png": [117, 92, 76], "default_acacia_leaves.png": [110, 89, 45], "mcl_core_stripped_birch_top.png": [157, 126, 102], "mcl_core_grass_path_top.png": [125, 101, 50], "mcl_throwing_ender_pearl.png": [78, 19, 26], "mcl_throwing_egg.png": [199, 157, 106], "mcl_throwing_snowball.png": [191, 200, 203], "mcl_flowers_tulip_red.png": [82, 57, 43], "mcl_flowers_double_plant_rose_top.png": [81, 69, 45], "mcl_flowers_double_plant_sunflower_front.png": [203, 157, 61], "mcl_flowers_tulip_white.png": [106, 122, 95], "mcl_flowers_double_plant_grass_top.png": [156, 145, 125], "mcl_flowers_azure_bluet.png": [97, 114, 98], "mcl_flowers_oxeye_daisy.png": [130, 139, 110], "mcl_flowers_poppy.png": [96, 59, 43], "mcl_flowers_double_plant_paeonia_top.png": [90, 84, 81], "mcl_flowers_double_plant_rose_bottom.png": [78, 63, 41], "mcl_flowers_tallgrass.png": [151, 141, 122], "mcl_flowers_double_plant_sunflower_bottom.png": [45, 76, 40], "mcl_flowers_fern.png": [143, 132, 115], "flowers_tulip.png": [106, 84, 51], "mcl_flowers_double_plant_syringa_bottom.png": [63, 77, 60], "mcl_flowers_double_plant_fern_bottom.png": [140, 130, 113], "flowers_dandelion_yellow.png": [111, 111, 55], "mcl_flowers_double_plant_paeonia_bottom.png": [82, 83, 73], "mcl_flowers_double_plant_sunflower_back.png": [174, 146, 57], "mcl_flowers_allium.png": [120, 116, 144], "flowers_waterlily.png": [28, 81, 29], "mcl_flowers_tulip_pink.png": [100, 99, 90], "mcl_flowers_double_plant_sunflower_top.png": [48, 81, 44], "mcl_flowers_double_plant_syringa_top.png": [95, 90, 98], "mcl_flowers_double_plant_grass_bottom.png": [151, 140, 121], "mcl_flowers_double_plant_grass_inv.png": [48, 95, 43], "mcl_flowers_fern_inv.png": [43, 86, 39], "mcl_flowers_double_plant_fern_top.png": [148, 138, 119], "mcl_flowers_tallgrass_inv.png": [47, 92, 41], "mcl_flowers_double_plant_fern_inv.png": [45, 89, 40], "mcl_flowers_blue_orchid.png": [46, 91, 86], "mcl_armor_leggings_iron.png": [132, 128, 123], "mcl_armor_inv_leggings_iron.png": [130, 125, 120], "mcl_armor_chestplate_chain_preview.png": [124, 98, 90], "mcl_armor_inv_helmet_gold.png": [178, 134, 51], "mcl_armor_leggings_chain.png": [64, 66, 69], "mcl_armor_helmet_chain_preview.png": [154, 150, 143], "mcl_armor_chestplate_diamond_preview.png": [102, 140, 160], "mcl_armor_inv_boots_iron.png": [134, 129, 124], "mcl_armor_boots_gold_preview.png": [178, 133, 42], "mcl_armor_leggings_diamond_preview.png": [80, 118, 138], "mcl_armor_inv_chestplate_chain.png": [128, 105, 96], "mcl_armor_helmet_diamond_preview.png": [101, 134, 152], "mcl_armor_boots_leather_preview.png": [129, 119, 101], "mcl_armor_inv_chestplate_gold.png": [171, 128, 55], "mcl_armor_inv_helmet_diamond.png": [109, 130, 142], "mcl_armor_leggings_leather_preview.png": [141, 134, 114], "mcl_armor_boots_leather.png": [122, 111, 93], "mcl_armor_inv_chestplate_diamond.png": [106, 146, 168], "mcl_armor_helmet_diamond.png": [70, 85, 93], "mcl_armor_chestplate_iron_preview.png": [143, 134, 123], "mcl_armor_inv_chestplate_leather.png": [143, 136, 118], "mcl_armor_boots_diamond.png": [87, 132, 157], "mcl_armor_leggings_diamond.png": [78, 102, 115], "mcl_armor_leggings_gold_preview.png": [185, 156, 108], "mcl_armor_chestplate_gold.png": [157, 117, 55], "mcl_armor_inv_helmet_chain.png": [140, 137, 132], "mcl_armor_boots_chain_preview.png": [78, 78, 79], "mcl_armor_inv_leggings_chain.png": [81, 81, 82], "mcl_armor_inv_helmet_iron.png": [143, 138, 133], "mcl_armor_helmet_leather.png": [130, 121, 102], "mcl_armor_chestplate_diamond.png": [110, 157, 183], "mcl_armor_leggings_leather.png": [119, 108, 91], "mcl_armor_leggings_iron_preview.png": [127, 122, 117], "mcl_armor_inv_boots_gold.png": [187, 142, 46], "mcl_armor_chestplate_leather.png": [139, 132, 112], "mcl_armor_boots_iron.png": [118, 113, 109], "mcl_armor_elytra.png": [75, 121, 147], "mcl_armor_helmet_chain.png": [127, 124, 121], "mcl_armor_helmet_gold_preview.png": [181, 138, 54], "mcl_armor_boots_iron_preview.png": [118, 113, 108], "mcl_armor_helmet_iron.png": [153, 149, 144], "mcl_armor_inv_boots_leather.png": [130, 121, 103], "mcl_armor_leggings_chain_preview.png": [54, 56, 61], "mcl_armor_helmet_iron_preview.png": [143, 138, 132], "mcl_armor_helmet_leather_preview.png": [119, 109, 91], "mcl_armor_chestplate_leather_preview.png": [144, 138, 118], "mcl_armor_leggings_gold.png": [182, 158, 126], "mcl_armor_inv_leggings_gold.png": [175, 145, 97], "mcl_armor_chestplate_iron.png": [130, 120, 112], "mcl_armor_inv_elytra.png": [76, 122, 148], "mcl_armor_boots_chain.png": [88, 88, 88], "mcl_armor_helmet_gold.png": [178, 136, 56], "mcl_armor_inv_boots_diamond.png": [75, 121, 147], "mcl_armor_inv_chestplate_iron.png": [135, 125, 115], "mcl_armor_inv_leggings_diamond.png": [75, 93, 103], "mcl_armor_inv_leggings_leather.png": [126, 116, 98], "mcl_armor_inv_helmet_leather.png": [140, 132, 114], "mcl_armor_inv_boots_chain.png": [69, 69, 72], "mcl_armor_chestplate_gold_preview.png": [169, 127, 56], "mcl_armor_chestplate_chain.png": [119, 98, 93], "mcl_armor_boots_gold.png": [160, 118, 42], "mcl_armor_boots_diamond_preview.png": [89, 141, 169], "mcl_walls_cobble_wall_top.png": [120, 114, 112], "mcl_walls_cobble_mossy_wall_top.png": [53, 97, 61], "mcl_walls_cobble_wall_side.png": [109, 103, 101], "mcl_walls_cobble_mossy_wall_side.png": [86, 98, 83], "mcl_hoppers_item.png": [44, 44, 44], "mcl_hoppers_hopper_top.png": [43, 43, 43], "mcl_hoppers_hopper_outside.png": [44, 43, 43], "mcl_hoppers_hopper_inside.png": [50, 50, 50], "mcl_stairs_stone_slab_top.png": [127, 118, 114], "mcl_stairs_stone_slab_side.png": [127, 117, 113], "mcl_stairs_turntexture.png": [255, 0, 255], "mcl_brewing_bottle_bg.png": [204, 204, 204], "mcl_brewing_bubble_sprite.png": [167, 167, 167], "mcl_brewing_side.png": [175, 156, 160], "mcl_brewing_inventory.png": [168, 168, 168], "mcl_brewing_bubbles_active.png": [186, 186, 186], "mcl_brewing_fuel_bg.png": [200, 200, 200], "mcl_brewing_potion_bg.png": [204, 204, 204], "mcl_brewing_bubbles.png": [154, 154, 154], "mcl_brewing_top.png": [139, 130, 126], "mcl_brewing_base.png": [130, 122, 118], "mcl_brewing_burner.png": [183, 183, 183], "mcl_brewing_burner_active.png": [212, 161, 132], "xpanes_top_glass_cyan.png": [76, 127, 153], "xpanes_top_glass_brown.png": [102, 76, 51], "xpanes_top_glass_magenta.png": [178, 75, 215], "xpanes_top_glass_light_blue.png": [102, 153, 216], "xpanes_top_glass_blue.png": [51, 76, 178], "xpanes_top_glass_gray.png": [76, 76, 76], "xpanes_top_glass_silver.png": [153, 153, 153], "xpanes_top_iron.png": [155, 146, 146], "xpanes_top_glass_black.png": [25, 25, 25], "xpanes_top_glass_white.png": [255, 255, 255], "xpanes_top_glass_lime.png": [127, 204, 25], "xpanes_top_glass_orange.png": [216, 127, 51], "xpanes_top_glass_purple.png": [127, 63, 178], "xpanes_top_glass_red.png": [153, 51, 51], "xpanes_top_glass_natural.png": [222, 222, 239], "xpanes_top_glass_green.png": [102, 127, 51], "xpanes_top_glass_pink.png": [241, 126, 164], "xpanes_pane_iron.png": [160, 152, 152], "xpanes_top_glass_yellow.png": [229, 229, 51], "hardened_clay_stained_pink.png": [164, 79, 76], "mcl_colorblocks_glazed_terracotta_yellow.png": [232, 199, 99], "mcl_colorblocks_glazed_terracotta_orange.png": [170, 146, 81], "mcl_colorblocks_concrete_powder_lime.png": [125, 186, 42], "mcl_colorblocks_concrete_brown.png": [98, 60, 32], "mcl_colorblocks_concrete_magenta.png": [171, 49, 162], "mcl_colorblocks_glazed_terracotta_magenta.png": [210, 108, 215], "mcl_colorblocks_concrete_silver.png": [128, 129, 118], "mcl_colorblocks_glazed_terracotta_grey.png": [90, 90, 90], "mcl_colorblocks_concrete_powder_blue.png": [72, 75, 169], "mcl_colorblocks_concrete_yellow.png": [241, 177, 21], "mcl_colorblocks_concrete_red.png": [146, 34, 34], "mcl_colorblocks_glazed_terracotta_lime.png": [152, 211, 72], "mcl_colorblocks_concrete_black.png": [8, 10, 15], "mcl_colorblocks_glazed_terracotta_silver.png": [134, 151, 151], "hardened_clay_stained_white.png": [213, 197, 184], "mcl_colorblocks_glazed_terracotta_green.png": [111, 135, 50], "mcl_colorblocks_glazed_terracotta_blue.png": [34, 65, 117], "mcl_colorblocks_concrete_powder_red.png": [172, 57, 52], "mcl_colorblocks_concrete_powder_cyan.png": [38, 150, 159], "hardened_clay_stained_purple.png": [81, 71, 123], "hardened_clay_stained_brown.png": [96, 69, 61], "hardened_clay_stained_grey.png": [110, 92, 85], "mcl_colorblocks_concrete_lime.png": [96, 171, 25], "hardened_clay_stained_blue.png": [68, 91, 143], "mcl_colorblocks_concrete_powder_white.png": [224, 225, 225], "hardened_clay_stained_yellow.png": [177, 128, 51], "hardened_clay_stained_light_blue.png": [91, 128, 171], "hardened_clay.png": [143, 104, 87], "mcl_colorblocks_concrete_cyan.png": [21, 123, 140], "mcl_colorblocks_glazed_terracotta_brown.png": [108, 88, 64], "mcl_colorblocks_concrete_grey.png": [56, 59, 64], "mcl_colorblocks_concrete_powder_magenta.png": [196, 94, 189], "mcl_colorblocks_concrete_powder_black.png": [22, 26, 30], "mcl_colorblocks_concrete_pink.png": [213, 103, 144], "mcl_colorblocks_concrete_powder_orange.png": [227, 141, 38], "mcl_colorblocks_glazed_terracotta_cyan.png": [90, 131, 136], "mcl_colorblocks_glazed_terracotta_red.png": [184, 67, 53], "mcl_colorblocks_concrete_green.png": [75, 94, 37], "mcl_colorblocks_concrete_blue.png": [46, 48, 147], "mcl_colorblocks_glazed_terracotta_light_blue.png": [99, 162, 204], "hardened_clay_stained_orange.png": [156, 95, 69], "mcl_colorblocks_concrete_powder_silver.png": [160, 160, 155], "mcl_colorblocks_concrete_powder_pink.png": [224, 148, 176], "hardened_clay_stained_silver.png": [149, 129, 117], "hardened_clay_stained_red.png": [159, 81, 66], "hardened_clay_stained_magenta.png": [150, 80, 85], "mcl_colorblocks_glazed_terracotta_black.png": [38, 22, 22], "mcl_colorblocks_concrete_white.png": [208, 214, 215], "hardened_clay_stained_green.png": [74, 101, 63], "hardened_clay_stained_lime.png": [105, 134, 73], "mcl_colorblocks_concrete_powder_green.png": [104, 127, 45], "mcl_colorblocks_concrete_light_blue.png": [37, 140, 200], "mcl_colorblocks_concrete_powder_brown.png": [128, 86, 54], "mcl_colorblocks_concrete_purple.png": [103, 32, 159], "hardened_clay_stained_cyan.png": [71, 107, 123], "mcl_colorblocks_concrete_powder_purple.png": [138, 58, 180], "mcl_colorblocks_concrete_powder_yellow.png": [230, 198, 54], "mcl_colorblocks_concrete_powder_light_blue.png": [75, 181, 212], "mcl_colorblocks_glazed_terracotta_pink.png": [251, 138, 170], "mcl_colorblocks_glazed_terracotta_purple.png": [112, 49, 152], "mcl_colorblocks_concrete_orange.png": [226, 101, 1], "mcl_colorblocks_concrete_powder_grey.png": [91, 98, 103], "hardened_clay_stained_black.png": [69, 52, 46], "mcl_colorblocks_glazed_terracotta_white.png": [188, 211, 202], "fire_basic_flame_animated.png": [206, 98, 34], "mcl_burning_hud_flame_animated.png": [206, 98, 34], "mcl_fire_fire_charge.png": [95, 58, 41], "mcl_burning_entity_flame_animated.png": [206, 98, 34], "mcl_fire_flint_and_steel.png": [96, 95, 93], "fire_basic_flame.png": [207, 100, 36], "dye_red.png": [113, 74, 47], "dye_yellow.png": [123, 91, 49], "dye_violet.png": [107, 76, 57], "dye_dark_green.png": [99, 81, 47], "mcl_dye_blue.png": [58, 101, 173], "dye_cyan.png": [104, 89, 60], "mcl_dye_lime.png": [107, 91, 53], "dye_pink.png": [120, 81, 61], "mcl_dye_light_blue.png": [103, 88, 70], "dye_dark_grey.png": [108, 81, 52], "mcl_dye_white.png": [205, 193, 166], "dye_grey.png": [113, 86, 58], "dye_magenta.png": [111, 79, 59], "dye_orange.png": [122, 85, 48], "mcl_dye_brown.png": [104, 75, 56], "mcl_dye_black.png": [56, 56, 64], "default_river_water_flowing_animated.png": [38, 123, 130], "default_river_water_source_animated.png": [37, 120, 130], "3d_armor_stand_item.png": [134, 114, 98], "mob_spawner.png": [40, 40, 40], "mcl_nether_quartz_chiseled_side.png": [194, 186, 183], "mcl_nether_quartz_pillar_top.png": [195, 188, 185], "mcl_nether_nether_wart.png": [190, 79, 75], "mcl_nether_nether_wart_stage_1.png": [86, 54, 51], "mcl_nether_quartz_ore.png": [133, 64, 53], "mcl_nether_soul_sand.png": [90, 70, 51], "mcl_nether_nether_wart_block.png": [175, 76, 73], "mcl_nether_nether_wart_stage_0.png": [53, 41, 38], "mcl_nether_quartz_block_bottom.png": [198, 191, 187], "mcl_nether_quartz_block_top.png": [198, 190, 187], "mcl_nether_quartz.png": [152, 149, 147], "mcl_nether_quartz_pillar_side.png": [195, 188, 184], "mcl_nether_netherbrick.png": [58, 24, 20], "mcl_nether_glowstone.png": [202, 154, 96], "mcl_nether_netherrack.png": [130, 50, 39], "mcl_nether_red_nether_brick.png": [69, 17, 5], "mcl_nether_quartz_chiseled_top.png": [197, 189, 186], "mcl_nether_glowstone_dust.png": [209, 137, 67], "mcl_nether_nether_wart_stage_2.png": [106, 57, 53], "mcl_nether_quartz_block_side.png": [198, 190, 187], "mcl_nether_nether_brick.png": [49, 23, 24], "mcl_nether_magma.png": [85, 33, 27], "mcl_cauldrons_cauldron_inner.png": [24, 24, 24], "mcl_cauldrons_cauldron_top.png": [54, 54, 54], "mcl_cauldrons_cauldron_bottom.png": [50, 37, 38], "mcl_cauldrons_cauldron.png": [47, 47, 47], "mcl_cauldrons_cauldron_side.png": [43, 43, 43], "mcl_beds_bed_side_bottom_magenta.png": [127, 48, 89], "mcl_beds_bed_blue.png": [73, 78, 105], "mcl_beds_bed_side_top_r_black.png": [99, 86, 75], "mcl_beds_bed_side_bottom_r_magenta.png": [132, 46, 94], "mcl_beds_bed_side_top_brown.png": [98, 76, 59], "mcl_beds_bed_lime.png": [96, 135, 66], "mcl_beds_bed_side_top_green.png": [98, 76, 59], "mcl_beds_bed_light_blue.png": [100, 107, 142], "mcl_beds_bed_pink.png": [184, 105, 115], "mcl_beds_bed_side_bottom_black.png": [66, 56, 47], "mcl_beds_bed_top_bottom_green.png": [57, 110, 29], "mcl_beds_bed_side_top_blue.png": [98, 76, 59], "mcl_beds_bed_top_top_pink.png": [217, 138, 147], "mcl_beds_bed_side_bottom_light_blue.png": [90, 94, 129], "mcl_beds_bed_side_bottom_blue.png": [63, 65, 90], "mcl_beds_bed_top_top_red.png": [173, 90, 83], "mcl_beds_bed_side_top_grey.png": [98, 76, 59], "mcl_beds_bed_top_top_white.png": [198, 190, 183], "mcl_beds_bed_top_top_black.png": [107, 100, 92], "mcl_beds_bed_top_bottom_brown.png": [101, 69, 38], "mcl_beds_bed_top_bottom_pink.png": [232, 105, 135], "mcl_beds_bed_side_bottom_r_pink.png": [183, 95, 106], "mcl_beds_bed_side_bottom_r_green.png": [73, 97, 42], "mcl_beds_bed_side_bottom_r_grey.png": [86, 77, 69], "mcl_beds_bed_side_top_r_white.png": [158, 145, 134], "mcl_beds_bed_side_bottom_orange.png": [143, 84, 28], "mcl_beds_bed_side_bottom_purple.png": [105, 36, 112], "mcl_beds_bed_side_bottom_r_light_blue.png": [90, 97, 136], "mcl_beds_bed_side_top_r_magenta.png": [140, 81, 103], "mcl_beds_bed_side_bottom_r_yellow.png": [150, 131, 25], "mcl_beds_bed_side_top_r_pink.png": [176, 111, 113], "mcl_beds_bed_top_top_blue.png": [105, 112, 137], "mcl_beds_bed_side_bottom_green.png": [74, 94, 43], "mcl_beds_bed_side_bottom_r_blue.png": [61, 66, 95], "mcl_beds_bed_top_top_grey.png": [129, 121, 113], "mcl_beds_bed_black.png": [76, 68, 61], "mcl_beds_bed_top_top_silver.png": [159, 151, 143], "mcl_beds_bed_white.png": [173, 165, 158], "mcl_beds_bed_top_top_cyan.png": [105, 144, 135], "mcl_beds_bed_top_bottom_orange.png": [184, 91, 0], "mcl_beds_bed_side_top_silver.png": [98, 76, 59], "mcl_beds_bed_top_top_brown.png": [143, 118, 93], "mcl_beds_bed_side_top_r_light_blue.png": [115, 111, 132], "mcl_beds_bed_side_bottom_r_lime.png": [86, 129, 53], "mcl_beds_bed_red.png": [139, 58, 51], "mcl_beds_bed_top_bottom_lime.png": [79, 163, 47], "mcl_beds_bed_side_top_r_brown.png": [121, 97, 75], "mcl_beds_bed_side_bottom_r_silver.png": [119, 109, 102], "mcl_beds_bed_yellow.png": [154, 138, 41], "mcl_beds_bed_side_top_yellow.png": [98, 76, 59], "mcl_beds_bed_top_bottom_black.png": [37, 37, 37], "mcl_beds_bed_brown.png": [110, 85, 61], "mcl_beds_bed_side_top_orange.png": [98, 76, 59], "mcl_beds_bed_side_top_red.png": [98, 76, 59], "mcl_beds_bed_top_top_purple.png": [148, 79, 161], "mcl_beds_bed_side_bottom_pink.png": [177, 93, 102], "mcl_beds_bed_side_top_r_grey.png": [112, 99, 88], "mcl_beds_bed_side_top_r_blue.png": [97, 91, 104], "mcl_beds_bed_side_top_purple.png": [98, 76, 59], "mcl_beds_bed_side_top_cyan.png": [98, 76, 59], "mcl_beds_bed_top_bottom_blue.png": [32, 60, 119], "mcl_beds_bed_side_bottom_yellow.png": [143, 125, 28], "mcl_beds_bed_side_top_black.png": [98, 76, 59], "mcl_beds_bed_top_top_orange.png": [188, 130, 72], "mcl_beds_bed_top_bottom_silver.png": [129, 129, 129], "mcl_beds_bed_top_top_green.png": [117, 140, 88], "mcl_beds_bed_cyan.png": [73, 111, 103], "mcl_beds_bed_top_bottom_red.png": [157, 20, 20], "mcl_beds_bed_top_bottom_purple.png": [111, 0, 163], "mcl_beds_bed_side_top_r_silver.png": [133, 120, 109], "mcl_beds_bed_side_bottom_grey.png": [86, 76, 67], "mcl_beds_bed_grey.png": [96, 88, 81], "mcl_beds_bed_side_top_r_yellow.png": [151, 132, 62], "mcl_beds_bed_side_top_r_green.png": [103, 111, 72], "mcl_beds_bed_side_bottom_brown.png": [100, 73, 48], "mcl_beds_bed_magenta.png": [138, 60, 104], "mcl_beds_bed_side_bottom_r_red.png": [134, 44, 37], "mcl_beds_bed_side_bottom_r_brown.png": [101, 73, 47], "mcl_beds_bed_side_top_lime.png": [98, 76, 59], "mcl_beds_bed_side_top_light_blue.png": [98, 76, 59], "mcl_beds_bed_side_bottom_red.png": [129, 47, 38], "mcl_beds_bed_bottom_top.png": [48, 38, 29], "mcl_beds_bed_top_bottom_grey.png": [76, 76, 76], "mcl_beds_bed_side_bottom_r_orange.png": [150, 86, 25], "mcl_beds_bed_side_bottom_r_black.png": [64, 54, 47], "mcl_beds_bed_top_bottom_cyan.png": [32, 119, 114], "mcl_beds_bed_side_bottom_silver.png": [116, 106, 97], "mcl_beds_bed_side_top_magenta.png": [98, 76, 59], "mcl_beds_bed_top_bottom_white.png": [201, 201, 201], "mcl_beds_bed_side_top_r_orange.png": [151, 105, 62], "mcl_beds_bed_top_bottom_magenta.png": [154, 23, 118], "mcl_beds_bed_side_top_r_lime.png": [110, 131, 80], "mcl_beds_bed_top_top_magenta.png": [172, 92, 137], "mcl_beds_bed_bottom_bottom.png": [48, 38, 29], "mcl_beds_bed_side_top_r_purple.png": [125, 73, 119], "mcl_beds_bed_side_top_r_cyan.png": [97, 113, 103], "mcl_beds_bed_side_top_white.png": [98, 76, 59], "mcl_beds_bed_side_bottom_r_cyan.png": [61, 101, 93], "mcl_beds_bed_side_bottom_cyan.png": [63, 97, 89], "mcl_beds_bed_side_bottom_white.png": [161, 151, 142], "mcl_beds_bed_top_bottom_yellow.png": [184, 169, 0], "mcl_beds_bed_top_bottom_light_blue.png": [82, 113, 182], "mcl_beds_bed_top_top_lime.png": [130, 169, 98], "mcl_beds_bed_silver.png": [109, 100, 93], "mcl_beds_bed_purple.png": [115, 47, 128], "mcl_beds_bed_side_top_r_red.png": [141, 80, 69], "mcl_beds_bed_top_top_light_blue.png": [132, 141, 174], "mcl_beds_bed_side_bottom_r_purple.png": [107, 32, 120], "mcl_beds_bed_side_bottom_r_white.png": [161, 151, 144], "mcl_beds_bed_orange.png": [154, 96, 41], "mcl_beds_bed_top_bottom_gray.png": [57, 57, 57], "mcl_beds_bed_side_bottom_lime.png": [85, 122, 53], "mcl_beds_bed_green.png": [85, 107, 56], "mcl_beds_bed_top_top_yellow.png": [188, 172, 72], "mcl_beds_bed_side_top_pink.png": [98, 76, 59], "mcl_sponges_sponge_wet_river_water.png": [157, 141, 104], "mcl_sponges_sponge.png": [210, 177, 118], "mcl_sponges_sponge_wet.png": [156, 134, 92], "farming_mushroom_red.png": [169, 59, 58], "mcl_mushrooms_mushroom_block_inside.png": [218, 175, 136], "mcl_mushrooms_mushroom_block_skin_brown.png": [131, 86, 68], "mcl_mushrooms_mushroom_block_skin_stem.png": [204, 183, 149], "mcl_mushrooms_mushroom_block_skin_red.png": [137, 39, 25], "farming_mushroom_brown.png": [121, 81, 59], "farming_mushroom_stew.png": [134, 97, 67], "default_tool_goldsword.png": [194, 154, 70], "default_tool_steelsword.png": [134, 130, 125], "default_tool_woodsword.png": [100, 82, 68], "default_tool_goldshovel.png": [167, 133, 64], "default_tool_steelpick.png": [137, 128, 119], "default_tool_woodshovel.png": [108, 90, 76], "default_tool_goldpick.png": [172, 139, 73], "default_tool_woodaxe.png": [110, 92, 77], "default_tool_diamondsword.png": [105, 133, 149], "default_tool_steelshovel.png": [125, 115, 107], "default_tool_stonesword.png": [133, 125, 118], "default_tool_woodpick.png": [110, 91, 76], "default_tool_shears.png": [139, 132, 124], "default_tool_goldaxe.png": [160, 128, 66], "default_tool_stoneshovel.png": [126, 116, 107], "default_tool_diamondaxe.png": [103, 110, 113], "default_tool_diamondshovel.png": [106, 125, 134], "default_tool_steelaxe.png": [129, 119, 110], "default_tool_stoneaxe.png": [126, 115, 104], "default_tool_diamondpick.png": [92, 105, 111], "default_tool_stonepick.png": [126, 114, 104], "mcl_chests_ender_chest_right.png": [73, 67, 64], "mcl_chests_chest_trapped_right.png": [98, 78, 62], "default_chest_front.png": [85, 70, 58], "mcl_chests_blue_shulker_box_top.png": [67, 85, 119], "mcl_chests_chest_left.png": [99, 78, 63], "mcl_chests_dark_green_shulker_box_top.png": [67, 111, 70], "mcl_chests_chest_back.png": [92, 75, 61], "mcl_chests_ender_chest_bottom.png": [61, 55, 55], "mcl_chests_ender.png": [70, 62, 58], "mcl_chests_brown_shulker_box_top.png": [73, 63, 55], "mcl_chests_chest_trapped_back.png": [92, 75, 61], "mcl_chests_chest_trapped_side_big.png": [96, 77, 62], "mcl_chests_magenta_shulker_box_top.png": [128, 81, 124], "mcl_chests_ender_chest_back.png": [72, 66, 64], "mcl_chests_chest_trapped_bottom.png": [118, 91, 70], "mcl_chests_chest_trapped_front.png": [86, 68, 57], "default_chest_side_big.png": [96, 77, 62], "mcl_chests_green_shulker_box_top.png": [88, 122, 75], "mcl_chests_pink_shulker_box_top.png": [163, 116, 158], "mcl_chests_trapped.png": [95, 76, 61], "mcl_chests_blank.png": [255, 255, 255], "mcl_chests_normal_double.png": [98, 78, 62], "mcl_chests_chest_trapped_top.png": [88, 73, 61], "mcl_chests_normal.png": [95, 76, 61], "default_chest_front_big.png": [93, 75, 61], "mcl_chests_ender_chest_front.png": [76, 69, 65], "mcl_chests_white_shulker_box_top.png": [176, 178, 187], "mcl_chests_cyan_shulker_box_top.png": [67, 101, 121], "mcl_chests_chest_trapped_top_big.png": [100, 80, 65], "default_chest_top_big.png": [100, 80, 65], "mcl_chests_grey_shulker_box_top.png": [126, 129, 138], "mcl_chests_red_shulker_box_top.png": [132, 58, 57], "mcl_chests_trapped_double.png": [98, 78, 62], "mcl_chests_violet_shulker_box_top.png": [120, 71, 88], "mcl_chests_chest_trapped_front_big.png": [94, 75, 61], "mcl_chests_lightblue_shulker_box_top.png": [96, 130, 155], "mcl_chests_dark_grey_shulker_box_top.png": [87, 90, 99], "mcl_chests_black_shulker_box_top.png": [56, 57, 62], "mcl_chests_chest_right.png": [98, 78, 62], "mcl_chests_yellow_shulker_box_top.png": [165, 116, 53], "mcl_chests_chest_bottom.png": [118, 91, 70], "default_chest_top.png": [88, 73, 61], "mcl_chests_ender_chest_top.png": [70, 64, 61], "mcl_chests_ender_chest_left.png": [73, 67, 64], "mcl_chests_chest_trapped_left.png": [99, 78, 63], "mcl_chests_orange_shulker_box_top.png": [143, 74, 51], "screwdriver.png": [132, 119, 108], "_un.png": [0, 0, 0], "_at.png": [0, 0, 0], "_s_.png": [0, 0, 0], "_sz.png": [0, 0, 0], "_q.png": [0, 0, 0], "_1.png": [0, 0, 0], "_h_.png": [0, 0, 0], "_o_tilde.png": [0, 0, 0], "_q_.png": [0, 0, 0], "_ae.png": [0, 0, 0], "_e_circumflex_.png": [0, 0, 0], "_ex.png": [0, 0, 0], "_e_.png": [0, 0, 0], "_qo.png": [0, 0, 0], "_z_.png": [0, 0, 0], "_ps.png": [0, 0, 0], "_pound.png": [0, 0, 0], "_div.png": [0, 0, 0], "_l_.png": [0, 0, 0], "_pilcrow.png": [0, 0, 0], "_3_sup.png": [0, 0, 0], "_e_acute.png": [0, 0, 0], "_9.png": [0, 0, 0], "_e_grave_.png": [0, 0, 0], "_u_acute.png": [0, 0, 0], "_a_sup.png": [0, 0, 0], "_sr.png": [0, 0, 0], "_v.png": [0, 0, 0], "_ue_.png": [0, 0, 0], "_t_.png": [0, 0, 0], "_cl.png": [0, 0, 0], "_n_tilde_.png": [0, 0, 0], "_p_.png": [0, 0, 0], "_c.png": [0, 0, 0], "_a.png": [0, 0, 0], "_a_circumflex_.png": [0, 0, 0], "_8.png": [0, 0, 0], "_s.png": [0, 0, 0], "_o_.png": [0, 0, 0], "_1_4.png": [0, 0, 0], "_e_grave.png": [0, 0, 0], "_o_dash.png": [0, 0, 0], "_5.png": [0, 0, 0], "_d_dash_.png": [0, 0, 0], "_i_grave.png": [0, 0, 0], "_vb.png": [0, 0, 0], "_sp.png": [255, 255, 255], "_a_acute_.png": [0, 0, 0], "_as.png": [0, 0, 0], "_y_acute.png": [0, 0, 0], "_3_4.png": [0, 0, 0], "_6.png": [0, 0, 0], "_7.png": [0, 0, 0], "_tl.png": [0, 0, 0], "_t.png": [0, 0, 0], "_y.png": [0, 0, 0], "_ca.png": [0, 0, 0], "_e.png": [0, 0, 0], "_hs.png": [0, 0, 0], "_copyright.png": [0, 0, 0], "_l.png": [0, 0, 0], "_h.png": [0, 0, 0], "_u_circumflex_.png": [0, 0, 0], "_i_acute_.png": [0, 0, 0], "_ha.png": [0, 0, 0], "_y_diaresis.png": [0, 0, 0], "_gt.png": [0, 0, 0], "_b.png": [0, 0, 0], "_degree.png": [0, 0, 0], "_a_tilde_.png": [0, 0, 0], "_u_.png": [0, 0, 0], "_o_sup.png": [0, 0, 0], "_m_.png": [0, 0, 0], "_c_.png": [0, 0, 0], "_cr.png": [0, 0, 0], "_3.png": [0, 0, 0], "_currency.png": [0, 0, 0], "_f.png": [0, 0, 0], "_cedille.png": [0, 0, 0], "_u_grave_.png": [0, 0, 0], "_dt.png": [0, 0, 0], "_am.png": [0, 0, 0], "_c_cedille_.png": [0, 0, 0], "_u_acute_.png": [0, 0, 0], "_bl.png": [0, 0, 0], "_registered.png": [0, 0, 0], "_i_acute.png": [0, 0, 0], "_lt.png": [0, 0, 0], "_e_acute_.png": [0, 0, 0], "_paragraph.png": [0, 0, 0], "_i_grave_.png": [0, 0, 0], "_o.png": [0, 0, 0], "_1_sup.png": [0, 0, 0], "mcl_signs_sign.png": [114, 89, 69], "_yen.png": [0, 0, 0], "_b_.png": [0, 0, 0], "_macron.png": [0, 0, 0], "_qu_inv.png": [0, 0, 0], "_o_dash_.png": [0, 0, 0], "_guill_right.png": [0, 0, 0], "_p.png": [0, 0, 0], "_thorn_.png": [0, 0, 0], "_2_sup.png": [0, 0, 0], "_pr.png": [0, 0, 0], "default_sign.png": [145, 115, 88], "_times_dot.png": [0, 0, 0], "_acute.png": [0, 0, 0], "_g_.png": [0, 0, 0], "_o_acute_.png": [0, 0, 0], "_a_tilde.png": [0, 0, 0], "_j.png": [0, 0, 0], "_k.png": [0, 0, 0], "_co.png": [0, 0, 0], "_dv.png": [0, 0, 0], "_o_circumflex.png": [0, 0, 0], "_a_ring.png": [0, 0, 0], "_br.png": [0, 0, 0], "_d.png": [0, 0, 0], "_ap.png": [0, 0, 0], "_sl.png": [0, 0, 0], "_mn.png": [0, 0, 0], "_m.png": [0, 0, 0], "_ae_lig.png": [0, 0, 0], "_thorn.png": [0, 0, 0], "_2.png": [0, 0, 0], "_gr.png": [0, 0, 0], "_i.png": [0, 0, 0], "_y_acute_.png": [0, 0, 0], "_diaresis.png": [0, 0, 0], "_oe.png": [0, 0, 0], "_mu.png": [0, 0, 0], "_guill_left.png": [0, 0, 0], "_times_cross.png": [0, 0, 0], "_ae_.png": [0, 0, 0], "_w.png": [0, 0, 0], "_u.png": [0, 0, 0], "_broken_bar.png": [0, 0, 0], "_4.png": [0, 0, 0], "_plus_minus.png": [0, 0, 0], "_1_2.png": [0, 0, 0], "_u_circumflex.png": [0, 0, 0], "_w_.png": [0, 0, 0], "_x_.png": [0, 0, 0], "_e_circumflex.png": [0, 0, 0], "_g.png": [0, 0, 0], "_o_tilde_.png": [0, 0, 0], "_ae_lig_.png": [0, 0, 0], "_v_.png": [0, 0, 0], "_dl.png": [0, 0, 0], "_a_grave.png": [0, 0, 0], "_re.png": [0, 0, 0], "_a_acute.png": [0, 0, 0], "_qu.png": [0, 0, 0], "_oe_.png": [0, 0, 0], "_n_tilde.png": [0, 0, 0], "_eq.png": [0, 0, 0], "_d_.png": [0, 0, 0], "_sm.png": [0, 0, 0], "_y_.png": [0, 0, 0], "_not.png": [0, 0, 0], "_n.png": [0, 0, 0], "_j_.png": [0, 0, 0], "_k_.png": [0, 0, 0], "_0.png": [0, 0, 0], "_o_grave_.png": [0, 0, 0], "_r_.png": [0, 0, 0], "_r.png": [0, 0, 0], "_u_grave.png": [0, 0, 0], "_ee_.png": [0, 0, 0], "_c_cedille.png": [0, 0, 0], "_ex_inv.png": [0, 0, 0], "_cm.png": [0, 0, 0], "_o_grave.png": [0, 0, 0], "_x.png": [0, 0, 0], "_i_.png": [0, 0, 0], "_n_.png": [0, 0, 0], "_rc.png": [0, 0, 0], "_a_.png": [0, 0, 0], "_a_grave_.png": [0, 0, 0], "_ee.png": [0, 0, 0], "_o_acute.png": [0, 0, 0], "_a_ring_.png": [0, 0, 0], "_i_circumflex_.png": [0, 0, 0], "_cent.png": [0, 0, 0], "_d_dash.png": [0, 0, 0], "_f_.png": [0, 0, 0], "_o_circumflex_.png": [0, 0, 0], "_ue.png": [0, 0, 0], "_a_circumflex.png": [0, 0, 0], "_i_circumflex.png": [0, 0, 0], "_z.png": [0, 0, 0], "gui_furnace_arrow_fg.png": [239, 239, 239], "default_furnace_front.png": [105, 95, 91], "default_furnace_fire_bg.png": [139, 139, 139], "default_furnace_top.png": [148, 138, 133], "default_furnace_fire_fg.png": [179, 115, 70], "default_furnace_side.png": [117, 107, 102], "gui_furnace_arrow_bg.png": [139, 139, 139], "default_furnace_front_active.png": [119, 95, 85], "default_furnace_bottom.png": [148, 138, 133], "default_torch_on_floor.png": [115, 82, 59], "default_torch_on_floor_animated.png": [116, 84, 61], "default_tnt_bottom.png": [161, 54, 58], "mcl_tnt_blink.png": [255, 255, 255], "default_tnt_top.png": [125, 54, 57], "default_tnt_side.png": [178, 105, 98], "mcl_heads_skeleton.png": [125, 125, 125], "mcl_heads_skeleton_node.png": [124, 124, 124], "mcl_heads_creeper_node.png": [98, 107, 71], "mcl_heads_zombie.png": [66, 104, 69], "mcl_heads_creeper.png": [92, 110, 68], "mcl_heads_steve_node.png": [115, 70, 58], "mcl_heads_skeleton_preview.png": [128, 127, 127], "mcl_heads_steve_preview.png": [117, 83, 66], "mcl_heads_zombie_node.png": [78, 110, 105], "mcl_heads_steve.png": [108, 76, 59], "mcl_heads_wither_skeleton_node.png": [50, 50, 50], "mcl_heads_zombie_preview.png": [66, 103, 68], "mcl_heads_creeper_preview.png": [88, 110, 65], "mcl_heads_wither_skeleton.png": [50, 50, 50], "mcl_heads_wither_skeleton_preview.png": [50, 50, 50], "mcl_flowerpots_cactus.png": [109, 83, 52], "mcl_flowerpots_flowerpot_inventory.png": [121, 54, 45], "mcl_flowerpots_flowerpot.png": [120, 55, 47], "bucket_lava.png": [166, 127, 113], "bucket_river_water.png": [139, 152, 155], "bucket_water.png": [139, 147, 155], "bucket.png": [147, 143, 139], "mcl_anvils_anvil_top_damaged_1.png": [48, 48, 48], "mcl_anvils_anvil_top_damaged_2.png": [46, 46, 46], "mcl_anvils_anvil_top_damaged_0.png": [50, 50, 50], "mcl_anvils_anvil_side.png": [45, 45, 45], "mcl_anvils_inventory.png": [157, 157, 157], "mcl_anvils_anvil_base.png": [40, 40, 40], "mcl_maps_map_filled.png": [213, 176, 148], "mcl_maps_map_empty.png": [217, 187, 157], "mcl_maps_map_filled_markings.png": [183, 183, 183], "mcl_dispensers_dispenser_front_vertical.png": [115, 104, 99], "mcl_dispensers_dispenser_front_horizontal.png": [105, 96, 92], "jeija_wall_lever.png": [95, 80, 69], "mesecons_delayer_front_locked_off.png": [97, 85, 77], "mesecons_delayer_locked_on.png": [114, 100, 95], "mesecons_delayer_sides_locked_off.png": [95, 80, 73], "mesecons_delayer_sides_on.png": [106, 71, 63], "mesecons_delayer_item.png": [100, 87, 82], "mesecons_delayer_end_locked_off.png": [97, 85, 77], "mesecons_delayer_end_locked_on.png": [101, 85, 78], "mesecons_delayer_ends_off.png": [99, 86, 80], "mesecons_delayer_front_locked_on.png": [101, 85, 77], "mesecons_delayer_ends_on.png": [105, 87, 81], "mesecons_delayer_sides_locked_on.png": [104, 81, 74], "mesecons_delayer_locked_off.png": [110, 99, 95], "mesecons_delayer_sides_off.png": [90, 69, 61], "mesecons_delayer_off.png": [112, 100, 96], "mesecons_delayer_on.png": [116, 101, 97], "redstone_redstone_dust_line0.png": [168, 168, 168], "redstone_redstone_dust.png": [81, 0, 0], "redstone_redstone_dust_dot.png": [168, 168, 168], "redstone_redstone_dust_line1.png": [173, 173, 173], "jeija_commandblock_off.png": [110, 99, 96], "jeija_commandblock_on.png": [110, 99, 96], "redstone_redstone_block.png": [128, 8, 9], "jeija_torches_on.png": [102, 68, 56], "jeija_torches_off.png": [90, 66, 54], "mesecons_button_wield_mask.png": [255, 126, 126], "mcl_droppers_dropper_front_vertical.png": [118, 108, 103], "mcl_droppers_dropper_front_horizontal.png": [110, 101, 96], "mesecons_noteblock.png": [104, 81, 63], "jeija_solar_panel_inverted.png": [100, 107, 117], "jeija_solar_panel.png": [124, 113, 101], "jeija_solar_panel_side.png": [60, 47, 36], "mcl_observers_observer_top.png": [139, 128, 123], "mcl_observers_observer_front.png": [95, 80, 84], "mcl_observers_observer_back_lit.png": [75, 67, 65], "mcl_observers_observer_back.png": [72, 67, 64], "mcl_observers_observer_side.png": [111, 103, 99], "mesecons_piston_pusher_front_sticky.png": [97, 81, 63], "mesecons_piston_pusher_top.png": [106, 83, 65], "mesecons_piston_back.png": [110, 101, 98], "mesecons_piston_on_front.png": [111, 101, 98], "mesecons_piston_pusher_back.png": [106, 83, 65], "mesecons_piston_bottom.png": [120, 107, 100], "mesecons_piston_pusher_right.png": [106, 83, 65], "mesecons_piston_pusher_bottom.png": [106, 83, 65], "mesecons_piston_pusher_front.png": [106, 83, 65], "mesecons_piston_pusher_left.png": [106, 83, 65], "jeija_lightstone_gray_on.png": [97, 56, 37], "jeija_lightstone_gray_off.png": [64, 49, 43], "mcl_comparators_sides_on.png": [105, 87, 81], "mcl_comparators_comp.png": [61, 20, 20], "mcl_comparators_on.png": [116, 102, 98], "mcl_comparators_sides_comp.png": [99, 88, 83], "mcl_comparators_off.png": [113, 102, 98], "mcl_comparators_ends_comp.png": [99, 88, 83], "mcl_comparators_ends_sub.png": [105, 88, 83], "mcl_comparators_ends_off.png": [96, 80, 74], "mcl_comparators_ends_on.png": [105, 81, 75], "mcl_comparators_sub.png": [112, 25, 25], "mcl_comparators_item.png": [98, 83, 79], "mcl_comparators_sides_off.png": [99, 86, 80], "mcl_comparators_sides_sub.png": [105, 88, 83], "default_book.png": [103, 67, 44], "default_bookshelf.png": [84, 67, 54], "mcl_books_book_written.png": [110, 74, 44], "mcl_books_book_bg.png": [203, 180, 151], "mcl_books_button9_pressed.png": [145, 112, 86], "mcl_books_button9.png": [145, 112, 86], "mcl_books_book_writable.png": [151, 122, 108], "mcl_books_bookshelf_top.png": [109, 84, 65], "wool_dark_grey.png": [96, 87, 87], "wool_grey.png": [143, 134, 134], "wool_magenta.png": [140, 85, 125], "wool_black.png": [45, 42, 42], "wool_orange.png": [188, 106, 45], "wool_blue.png": [43, 73, 125], "wool_yellow.png": [201, 163, 69], "wool_pink.png": [171, 91, 108], "wool_dark_green.png": [53, 91, 51], "wool_brown.png": [86, 57, 43], "wool_red.png": [132, 42, 45], "mcl_wool_light_blue.png": [91, 130, 180], "wool_cyan.png": [30, 94, 113], "mcl_wool_lime.png": [107, 151, 76], "wool_white.png": [212, 199, 182], "wool_violet.png": [77, 57, 102], "mcl_potions_melon_speckled.png": [170, 97, 62], "mcl_potions_effect_swift.png": [106, 96, 85], "mcl_potions_spider_eye_fermented.png": [143, 97, 62], "mcl_potions_splash_bottle.png": [168, 156, 183], "mcl_potions_effect_water_breathing.png": [59, 69, 100], "mcl_potions_effect_leaping.png": [100, 91, 86], "mcl_potions_effect_weak.png": [127, 126, 126], "mcl_potions_dragon_breath.png": [171, 137, 163], "mcl_potions_effect_food_poisoning.png": [112, 123, 89], "hudbars_icon_regenerate.png": [195, 77, 114], "mcl_potions_effect_fire_proof.png": [112, 68, 68], "mcl_potions_splash_overlay.png": [202, 202, 202], "mcl_potions_effect_invisible.png": [96, 103, 95], "hbhunger_icon_regen_poison.png": [147, 111, 115], "mcl_potions_effect_slow.png": [78, 81, 85], "mcl_potions_lingering_bottle.png": [181, 159, 192], "mcl_potions_potion_overlay.png": [201, 201, 201], "mcl_potions_effect_regenerating.png": [133, 90, 83], "mcl_potions_arrow_inv.png": [171, 165, 160], "mcl_potions_effect_night_vision.png": [86, 99, 74], "mcl_potions_potion_bottle.png": [156, 172, 203], "mcl_potions_effect_poisoned.png": [78, 110, 80], "mcl_potions_effect_strong.png": [100, 82, 97], "crafting_workbench_front.png": [120, 93, 72], "gui_crafting_arrow.png": [139, 139, 139], "crafting_workbench_side.png": [120, 93, 72], "crafting_workbench_top.png": [152, 121, 93], "mcl_enchanting_glyph_11.png": [209, 209, 231], "mcl_enchanting_glyph_14.png": [209, 209, 231], "mcl_enchanting_glyph_6.png": [209, 209, 231], "mcl_enchanting_glyph_8.png": [209, 209, 231], "mcl_enchanting_glyph_9.png": [209, 209, 231], "mcl_enchanting_glyph_3.png": [209, 209, 231], "mcl_enchanting_number_1_off.png": [255, 255, 255], "mcl_enchanting_number_3_off.png": [255, 255, 255], "mcl_enchanting_number_3.png": [151, 47, 40], "mcl_enchanting_book_open.png": [153, 123, 99], "mcl_enchanting_button_off.png": [255, 255, 255], "mcl_enchanting_glyph_2.png": [209, 209, 231], "mcl_enchanting_glyph_1.png": [209, 209, 231], "mcl_enchanting_button.png": [255, 255, 255], "mcl_enchanting_table_side.png": [66, 58, 55], "mcl_enchanting_book_closed.png": [112, 78, 55], "mcl_enchanting_table_bottom.png": [58, 51, 52], "mcl_enchanting_glyph_15.png": [209, 209, 231], "mcl_enchanting_number_2_off.png": [255, 255, 255], "mcl_enchanting_glyph_5.png": [209, 209, 231], "mcl_enchanting_number_1.png": [149, 45, 39], "mcl_enchanting_glyph_7.png": [209, 209, 231], "mcl_enchanting_table_top.png": [88, 86, 84], "mcl_enchanting_number_2.png": [149, 46, 39], "mcl_enchanting_glyph_16.png": [209, 209, 231], "mcl_enchanting_button_hovered.png": [255, 255, 255], "mcl_enchanting_book_enchanted.png": [122, 69, 46], "mcl_enchanting_glyph_4.png": [209, 209, 231], "mcl_enchanting_glyph_10.png": [209, 209, 231], "mcl_enchanting_glyph_13.png": [209, 209, 231], "mcl_enchanting_glyph_17.png": [209, 209, 231], "mcl_enchanting_glyph_18.png": [209, 209, 231], "mcl_enchanting_lapis_background.png": [255, 255, 255], "mcl_enchanting_button_background.png": [229, 202, 171], "mcl_enchanting_glyph_12.png": [209, 209, 231], "doc_basics_gameplay_mtg_2.png": [151, 168, 207], "doc_basics_liquids_renewable_1.png": [139, 146, 159], "doc_basics_players_sam.png": [95, 133, 106], "doc_basics_players_flat.png": [127, 155, 130], "doc_basics_craft_shapeless_2.png": [52, 52, 48], "doc_basics_build.png": [84, 84, 55], "doc_basics_pointing.png": [66, 104, 32], "doc_basics_nodes.png": [108, 104, 94], "doc_basics_craft_groups_2.png": [65, 58, 52], "doc_basics_craft_groups_1.png": [57, 57, 58], "doc_basics_inventory.png": [47, 47, 45], "doc_basics_minimap_radar.png": [73, 164, 128], "doc_basics_sneak.png": [70, 69, 69], "doc_basics_camera_behind.png": [108, 144, 135], "doc_basics_craft_repair.png": [47, 46, 45], "doc_basics_hotbar_relations.png": [85, 84, 69], "doc_basics_gameplay_lott.png": [119, 122, 112], "doc_basics_tools_mining.png": [64, 62, 59], "doc_basics_players_lott.png": [180, 193, 224], "doc_basics_gameplay_outback.png": [146, 114, 109], "doc_basics_gameplay_pixture.png": [94, 120, 57], "doc_basics_craft_grid.png": [46, 46, 46], "doc_basics_craft_groups_3.png": [61, 58, 55], "doc_basics_camera_front.png": [99, 133, 110], "doc_basics_minimap_map.png": [149, 169, 183], "doc_basics_gameplay_mtg_1.png": [136, 117, 86], "doc_basics_gameplay_xtraores_xtension.png": [95, 15, 86], "doc_basics_light_torch.png": [25, 43, 14], "doc_basics_minimap_round.png": [160, 175, 189], "doc_basics_light_test.png": [133, 113, 69], "doc_basics_liquids_nonrenewable.png": [64, 87, 87], "doc_basics_gameplay_hades.png": [81, 70, 62], "doc_basics_gameplay_moontest.png": [75, 74, 79], "doc_basics_liquids_range.png": [146, 166, 179], "doc_basics_inventory_detail.png": [43, 41, 39], "doc_basics_camera_ego.png": [111, 147, 139], "doc_basics_tools.png": [46, 45, 42], "doc_basics_liquids_renewable_2.png": [136, 148, 166], "doc_basics_items_dropped.png": [195, 185, 147], "doc_basics_liquids_types.png": [146, 164, 171], "doc_basics_gameplay_carbone_ng.png": [121, 118, 89], "doc_basics_craft_shaped.png": [55, 52, 50], "doc_basics_hotbar.png": [141, 175, 226], "doc_basics_craft_shapeless_1.png": [52, 52, 48], "doc_button_icon_lores.png": [19, 143, 183], "doc_awards_icon_generic.png": [14, 125, 162], "inventory_plus_doc_inventory_plus.png": [19, 143, 183], "doc_button_icon_hires.png": [30, 149, 188], "doc_identifier_identifier.png": [172, 151, 139], "doc_identifier_identifier_liquid.png": [125, 147, 190], "craftguide_clear_icon.png": [254, 254, 254], "craftguide_book.png": [84, 117, 39], "mcl_craftguide_fuel.png": [187, 121, 75], "craftguide_prev_icon.png": [255, 255, 255], "craftguide_zoomout_icon.png": [255, 255, 255], "craftguide_search_icon.png": [254, 254, 254], "craftguide_arrow.png": [139, 139, 139], "craftguide_zoomin_icon.png": [255, 255, 255], "craftguide_shapeless.png": [130, 130, 130], "craftguide_next_icon.png": [255, 255, 255]} \ No newline at end of file diff --git a/mods/ITEMS/mcl_maps/init.lua b/mods/ITEMS/mcl_maps/init.lua index 893e70073..d2ff951ad 100644 --- a/mods/ITEMS/mcl_maps/init.lua +++ b/mods/ITEMS/mcl_maps/init.lua @@ -1,87 +1,251 @@ -local S = minetest.get_translator("mcl_maps") +mcl_maps = {} --- 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") - 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) +local modname = minetest.get_current_modname() +local modpath = minetest.get_modpath(modname) +local S = minetest.get_translator(modname) + +local math = math +local vector = vector +local table = table +local pairs = pairs + +local pos_to_string = minetest.pos_to_string +local string_to_pos = minetest.string_to_pos +local get_item_group = minetest.get_item_group +local dynamic_add_media = minetest.dynamic_add_media +local get_connected_players = minetest.get_connected_players + +local storage = minetest.get_mod_storage() +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 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", pos_to_string(minp)) + meta:set_string("mcl_maps:maxp", pos_to_string(maxp)) + tt.reload_itemstack_description(itemstack) + + creating_maps[id] = true + 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, 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] + 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 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(map_textures_path .. "mcl_maps_map_texture_" .. id .. ".tga") + creating_maps[id] = nil + end) + return itemstack +end + +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 + 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() + 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 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, - on_secondary_use = make_filled_map, + on_place = fill_map, + on_secondary_use = fill_map, stack_max = 64, }) -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", { +local filled_def = { 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."), - groups = { tool = 1 }, + _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."), inventory_image = "mcl_maps_map_filled.png^(mcl_maps_map_filled_markings.png^[colorize:#000000)", - stack_max = 1, + stack_max = 64, + groups = {not_in_creative_inventory = 1, filled_map = 1, tool = 1}, +} - on_use = use_minimap, - on_secondary_use = use_minimap, -}) +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 +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) + 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) + stack = ItemStack(stack) + if 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 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 + 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" }, @@ -89,20 +253,104 @@ minetest.register_craft({ } }) +minetest.register_craft({ + type = "shapeless", + output = "mcl_maps:filled_map 2", + recipe = {"group:filled_map", "mcl_maps:empty_map"}, +}) + +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 get_item_group(stack:get_name(), "filled_map") > 0 then + itemstack:get_meta():from_table(stack:get_meta():to_table()) + return itemstack + end + end + end +end + +minetest.register_on_craft(on_craft) +minetest.register_craft_predict(on_craft) + +local maps = {} +local huds = {} + minetest.register_on_joinplayer(function(player) - update_minimap(player) + local map_def = { + hud_elem_type = "image", + text = "blank.png", + 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) -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) + +minetest.register_globalstep(function(dtime) + for _, player in pairs(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() + + 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 - updatetimer = updatetimer - dtime + + if texture ~= maps[player] then + 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 = string_to_pos(meta:get_string("mcl_maps:minp")) + local maxp = 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(hud.map, "text", "blank.png") + player:hud_change(hud.marker, "text", "blank.png") + maps[player] = nil end - end) -end + end +end) diff --git a/mods/ITEMS/mcl_maps/locale/mcl_maps.de.tr b/mods/ITEMS/mcl_maps/locale/mcl_maps.de.tr index 6d1836b48..d7762e512 100644 --- a/mods/ITEMS/mcl_maps/locale/mcl_maps.de.tr +++ b/mods/ITEMS/mcl_maps/locale/mcl_maps.de.tr @@ -1,10 +1,8 @@ # textdomain: mcl_maps Empty Map=Leere Karte Empty maps are not useful as maps, but they can be stacked and turned to maps which can be used.=Leere Karten sind als Karten nicht nützlich, aber sie können gestapelt werden und zu benutzbaren Karten umgewandelt werden. -Rightclick to start using the map (which can't be stacked anymore).=Rechtsklick, um zu beginnen, die Karte zu benutzen. Sie kann dann nicht mehr gestapelt werden. +Rightclick to create a filled map (which can't be stacked anymore).=Rechtsklick, um die Karte zu füllen. Sie kann dann nicht mehr gestapelt werden. Map=Karte -Maps show your surroundings as you explore the world.=Karten zeigen Ihre Umgebung, während Sie die Welt erkunden. -Hold the map in any of the hotbar slots. This allows you to access the minimap by pressing the minimap key (see controls settings).=Halten Sie die Karte in einen beliebigen Platz in der Schnellleiste. Damit können Sie jetzt die Übersichtskarte aktivieren, indem Sie die Taste zum Umschalten der Karte drücken (siehe Tastenbelegung). -In Creative Mode, you don't need this item; the minimap is always available.=Im Kreativmodus brauchen Sie diesen Gegenstand nicht; die Übersichtskarte ist immer verfügbar. -Enables minimap=Aktiviert Übersichtskarte -Use the minimap key to show the map.=Taste „Karte an/aus“ benutzen, um die Karte zu betrachten. +Shows a map image.=Zeigt ein Kartenbild. +When created, the map saves the nearby area as an image that can be viewed any time by holding the map.=Beim Erstellen speichert die Karte die Gegend in der Nähe als ein Bild, dass jederzeit durch halten der Karte angesehen werden kann. +Hold the map in your hand. This will display a map on your screen.=Halten Sie die Karte in Ihrer Hand. Eine Karte wird auf Ihrem Bildschirm angezeigt werden. diff --git a/mods/ITEMS/mcl_maps/locale/mcl_maps.es.tr b/mods/ITEMS/mcl_maps/locale/mcl_maps.es.tr index 513eab136..cec96b17b 100644 --- a/mods/ITEMS/mcl_maps/locale/mcl_maps.es.tr +++ b/mods/ITEMS/mcl_maps/locale/mcl_maps.es.tr @@ -3,6 +3,3 @@ Empty Map=Mapa vacio Empty maps are not useful as maps, but they can be stacked and turned to maps which can be used.=Los mapas vacíos no son útiles como mapas, pero se pueden apilar y convertir en mapas que se pueden usar. Rightclick to start using the map (which can't be stacked anymore).=Haga clic derecho para comenzar a usar el mapa (que ya no se puede apilar). Map=Mapa -Maps show your surroundings as you explore the world.=Los mapas muestran tu entorno mientras exploras el mundo. -Hold the map in any of the hotbar slots. This allows you to access the minimap by pressing the minimap key (see controls settings).=Mantenga el mapa en cualquiera de las ranuras de la barra de acceso directo. Esto le permite acceder al minimapa presionando la tecla del minimapa (consulte la configuración de los controles). -In Creative Mode, you don't need this item; the minimap is always available.=En el modo creativo, no necesita este elemento; El minimapa siempre está disponible. diff --git a/mods/ITEMS/mcl_maps/locale/mcl_maps.fr.tr b/mods/ITEMS/mcl_maps/locale/mcl_maps.fr.tr index 6feb253ae..1808e839d 100644 --- a/mods/ITEMS/mcl_maps/locale/mcl_maps.fr.tr +++ b/mods/ITEMS/mcl_maps/locale/mcl_maps.fr.tr @@ -1,10 +1,8 @@ # textdomain: mcl_maps 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). +Rightclick to create a filled map (which can't be stacked anymore).=Clic droit pour créer une carte remplie (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. +Shows a map image.=Affiche une carte. +When created, the map saves the nearby area as an image that can be viewed any time by holding the map.=Lors de sa création, la carte sauvegarde le terrain proche sous forme d'image qui peut être consultée n'importe quand en tenant la carte dans la main. +Hold the map in your hand. This will display a map on your screen.=Tenez la carte dans votre main. Cela affichera la carte à l'écran. diff --git a/mods/ITEMS/mcl_maps/locale/mcl_maps.pl.tr b/mods/ITEMS/mcl_maps/locale/mcl_maps.pl.tr new file mode 100644 index 000000000..de6ff84d6 --- /dev/null +++ b/mods/ITEMS/mcl_maps/locale/mcl_maps.pl.tr @@ -0,0 +1,8 @@ +# textdomain: mcl_maps +Empty Map=Pusta mapa +Empty maps are not useful as maps, but they can be stacked and turned to maps which can be used.=Puste mapy nie są tak użyteczne jak mapy ale mogą być grupowane i zamienione w mapy które już są pożyteczne. +Rightclick to create a filled map (which can't be stacked anymore).=Kliknij prawy przycisk aby stworzyć wypełnioną mapę (nie będzie już jej można grupować). +Map=Mapa +Shows a map image.=Pokazuje obraz mapy. +When created, the map saves the nearby area as an image that can be viewed any time by holding the map.=Gdy są utworzone mapy zapisują obszar okolicy jako obrazek, który może być oglądany przez trzymanie mapy w rękach. +Hold the map in your hand. This will display a map on your screen.=Weź mapę do ręki. To pokaże mapę na twoim ekranie. diff --git a/mods/ITEMS/mcl_maps/locale/mcl_maps.ru.tr b/mods/ITEMS/mcl_maps/locale/mcl_maps.ru.tr index 70243a166..6c34007a9 100644 --- a/mods/ITEMS/mcl_maps/locale/mcl_maps.ru.tr +++ b/mods/ITEMS/mcl_maps/locale/mcl_maps.ru.tr @@ -3,8 +3,3 @@ Empty Map=Пустая карта Empty maps are not useful as maps, but they can be stacked and turned to maps which can be used.=Пустые карты не могут использоваться в качестве карт, но могут складываться в стопки, а также могут быть превращены в полноценные карты. Rightclick to start using the map (which can't be stacked anymore).=Кликните правой, чтобы начать использовать карту (её больше нельзя будет уложить в стопку). Map=Карта -Maps show your surroundings as you explore the world.=Карты показывают ваше окружение, когда вы изучаете мир. -Hold the map in any of the hotbar slots. This allows you to access the minimap by pressing the minimap key (see controls settings).=Поместите карту в один из отсеков панели быстрого доступа. Это позволит вам вызывать миникарту нажатием клавиши [Миникарта] (см. настройки управления). -In Creative Mode, you don't need this item; the minimap is always available.=Этот предмет не нужен в творческом режиме; там миникарта всегда доступна и так. -Enables minimap=Включает миникарту -Use the minimap key to show the map.=Используйте клавишу [Миникарта] для отображения карты. diff --git a/mods/ITEMS/mcl_maps/locale/template.txt b/mods/ITEMS/mcl_maps/locale/template.txt index 061ed45e0..27298d2ec 100644 --- a/mods/ITEMS/mcl_maps/locale/template.txt +++ b/mods/ITEMS/mcl_maps/locale/template.txt @@ -1,10 +1,8 @@ # textdomain: mcl_maps Empty Map= Empty maps are not useful as maps, but they can be stacked and turned to maps which can be used.= -Rightclick to start using the map (which can't be stacked anymore).= +Rightclick to create a filled map (which can't be stacked anymore).= Map= -Maps show your surroundings as you explore the world.= -Hold the map in any of the hotbar slots. This allows you to access the minimap by pressing the minimap key (see controls settings).= -In Creative Mode, you don't need this item; the minimap is always available.= -Enables minimap= -Use the minimap key to show the map.= +Shows a map image.= +When created, the map saves the nearby area as an image that can be viewed any time by holding the map.= +Hold the map in your hand. This will display a map on your screen.= diff --git a/mods/ITEMS/mcl_maps/mod.conf b/mods/ITEMS/mcl_maps/mod.conf index 44c4becf0..e1f068963 100644 --- a/mods/ITEMS/mcl_maps/mod.conf +++ b/mods/ITEMS/mcl_maps/mod.conf @@ -1 +1,2 @@ name = mcl_maps +depends = mcl_core, mcl_flowers, tga_encoder, tt, mcl_colors, mcl_skins, mcl_util diff --git a/mods/ITEMS/mcl_maps/palettes.json b/mods/ITEMS/mcl_maps/palettes.json new file mode 100644 index 000000000..958882a16 --- /dev/null +++ b/mods/ITEMS/mcl_maps/palettes.json @@ -0,0 +1 @@ +{"mcl_core_palette_grass.png": [[109, 196, 117], [159, 193, 114], [118, 177, 120], [118, 177, 120], [107, 186, 107], [118, 177, 120], [92, 182, 119], [92, 182, 119], [92, 182, 119], [92, 182, 119], [118, 177, 120], [109, 196, 117], [35, 175, 105], [94, 190, 107], [94, 190, 107], [94, 190, 107], [94, 190, 107], [159, 193, 114], [76, 176, 84], [164, 150, 110], [164, 150, 110], [164, 150, 110], [164, 150, 110], [159, 193, 114], [93, 181, 76], [93, 181, 76], [93, 181, 76], [93, 181, 76], [76, 118, 60], [94, 190, 107], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117]]} \ No newline at end of file diff --git a/mods/ITEMS/mcl_maps/textures/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/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 diff --git a/mods/ITEMS/mcl_mobitems/depends.txt b/mods/ITEMS/mcl_mobitems/depends.txt deleted file mode 100644 index 73d023f65..000000000 --- a/mods/ITEMS/mcl_mobitems/depends.txt +++ /dev/null @@ -1,2 +0,0 @@ -mcl_core -mcl_hunger diff --git a/mods/ITEMS/mcl_mobitems/init.lua b/mods/ITEMS/mcl_mobitems/init.lua index 4e7eabc9e..a7b04d3d4 100644 --- a/mods/ITEMS/mcl_mobitems/init.lua +++ b/mods/ITEMS/mcl_mobitems/init.lua @@ -1,8 +1,8 @@ -local S = minetest.get_translator("mcl_mobitems") +local S = minetest.get_translator(minetest.get_current_modname()) minetest.register_craftitem("mcl_mobitems:rotten_flesh", { description = S("Rotten Flesh"), - _tt_help = minetest.colorize("#FFFF00", S("80% chance of food poisoning")), + _tt_help = minetest.colorize(mcl_colors.YELLOW, S("80% chance of food poisoning")), _doc_items_longdesc = S("Yuck! This piece of flesh clearly has seen better days. If you're really desperate, you can eat it to restore a few hunger points, but there's a 80% chance it causes food poisoning, which increases your hunger for a while."), inventory_image = "mcl_mobitems_rotten_flesh.png", wield_image = "mcl_mobitems_rotten_flesh.png", @@ -63,7 +63,7 @@ minetest.register_craftitem("mcl_mobitems:cooked_beef", { minetest.register_craftitem("mcl_mobitems:chicken", { description = S("Raw Chicken"), - _tt_help = minetest.colorize("#FFFF00", S("30% chance of food poisoning")), + _tt_help = minetest.colorize(mcl_colors.YELLOW, S("30% chance of food poisoning")), _doc_items_longdesc = S("Raw chicken is a food item which is not safe to consume. You can eat it to restore a few hunger points, but there's a 30% chance to suffer from food poisoning, which increases your hunger rate for a while. Cooking raw chicken will make it safe to eat and increases its nutritional value."), inventory_image = "mcl_mobitems_chicken_raw.png", wield_image = "mcl_mobitems_chicken_raw.png", @@ -135,7 +135,7 @@ minetest.register_craftitem("mcl_mobitems:cooked_rabbit", { }) -- Reset food poisoning and status effects -local drink_milk = function(itemstack, player, pointed_thing) +local function drink_milk(itemstack, player, pointed_thing) local bucket = minetest.do_item_eat(0, "mcl_buckets:bucket_empty", itemstack, player, pointed_thing) -- Check if we were allowed to drink this (eat delay check) if mcl_hunger.active and (bucket:get_name() ~= "mcl_mobitems:milk_bucket" or minetest.is_creative_enabled(player:get_player_name())) then @@ -147,7 +147,7 @@ end minetest.register_craftitem("mcl_mobitems:milk_bucket", { description = S("Milk"), - _tt_help = minetest.colorize("#00FF00", S("Removes all status effects")), + _tt_help = minetest.colorize(mcl_colors.GREEN, S("Removes all status effects")), _doc_items_longdesc = S("Milk is very refreshing and can be obtained by using a bucket on a cow. Drinking it will remove all status effects, but restores no hunger points."), _doc_items_usagehelp = S("Use the placement key to drink the milk."), inventory_image = "mcl_mobitems_bucket_milk.png", @@ -160,7 +160,7 @@ minetest.register_craftitem("mcl_mobitems:milk_bucket", { minetest.register_craftitem("mcl_mobitems:spider_eye", { description = S("Spider Eye"), - _tt_help = minetest.colorize("#FFFF00", S("Poisonous")), + _tt_help = minetest.colorize(mcl_colors.YELLOW, S("Poisonous")), _doc_items_longdesc = S("Spider eyes are used mainly in crafting. If you're really desperate, you can eat a spider eye, but it will poison you briefly."), inventory_image = "mcl_mobitems_spider_eye.png", wield_image = "mcl_mobitems_spider_eye.png", @@ -178,6 +178,7 @@ minetest.register_craftitem("mcl_mobitems:bone", { inventory_image = "mcl_mobitems_bone.png", stack_max = 64, groups = { craftitem=1 }, + _mcl_toollike_wield = true, }) minetest.register_craftitem("mcl_mobitems:string",{ @@ -323,9 +324,9 @@ minetest.register_tool("mcl_mobitems:carrot_on_a_stick", { wield_image = "mcl_mobitems_carrot_on_a_stick.png", inventory_image = "mcl_mobitems_carrot_on_a_stick.png", groups = { transport = 1 }, + _mcl_toollike_wield = true, }) - ----------- -- Crafting ----------- @@ -425,7 +426,7 @@ minetest.register_craft({ }) minetest.register_craft({ - output = 'mcl_mobitems:slimeball 9', + output = "mcl_mobitems:slimeball 9", recipe = {{"mcl_core:slimeblock"}}, }) diff --git a/mods/ITEMS/mcl_mobitems/locale/mcl_mobitems.de.tr b/mods/ITEMS/mcl_mobitems/locale/mcl_mobitems.de.tr index d47b811f0..2fd938f2f 100644 --- a/mods/ITEMS/mcl_mobitems/locale/mcl_mobitems.de.tr +++ b/mods/ITEMS/mcl_mobitems/locale/mcl_mobitems.de.tr @@ -61,7 +61,7 @@ This item is mainly used for crafting.=Dieser Gegenstand wird hauptsächlich in Magma Cream=Magmacreme Magma cream is a crafting component.=Magmacreme ist eine Fertigungskomponente. Ghast Tear=Ghast-Träne -Place this item in an item frame as decoration.=Platzieren Sie diesen Gegenstand in einem Rahmel als Deko. +Place this item in an item frame as decoration.=Platzieren Sie diesen Gegenstand in einem Rahmen als Deko. Nether Star=Nether-Stern A nether star is dropped when the Wither dies. Place it in an item frame to show the world how hardcore you are! Or just as decoration.=Ein Netherstern wird abgeworfen, wenn der Wither stirbt. Platzieren Sie ihn in einen Rahmen, um der Welt zu zeigen, wie großartig Sie sind! diff --git a/mods/ITEMS/mcl_mobitems/locale/mcl_mobitems.fr.tr b/mods/ITEMS/mcl_mobitems/locale/mcl_mobitems.fr.tr index eee31278b..d31632345 100644 --- a/mods/ITEMS/mcl_mobitems/locale/mcl_mobitems.fr.tr +++ b/mods/ITEMS/mcl_mobitems/locale/mcl_mobitems.fr.tr @@ -27,7 +27,7 @@ Raw Porkchop=Porc Cru A raw porkchop is the flesh from a pig and can be eaten safely. Cooking it will greatly increase its nutritional value.=Un porc cru est la chair d'un porc et peut être mangée en toute sécurité. La cuisson augmentera considérablement sa valeur nutritive. -Cooked Porkchop=Parc Cuit +Cooked Porkchop=Porc Cuit Cooked porkchop is the cooked flesh of a pig and is used as food.=Le porc cuit est la chair cuite d'un porc et est utilisé comme aliment. Raw Rabbit=Lapin Cru diff --git a/mods/ITEMS/mcl_mobitems/locale/mcl_mobitems.pl.tr b/mods/ITEMS/mcl_mobitems/locale/mcl_mobitems.pl.tr new file mode 100644 index 000000000..dd78a692f --- /dev/null +++ b/mods/ITEMS/mcl_mobitems/locale/mcl_mobitems.pl.tr @@ -0,0 +1,96 @@ +# textdomain: mcl_mobitems +Rotten Flesh=Zgniłe mięso +80% chance of food poisoning=80% szans na zatrucie pokarmowe + +Yuck! This piece of flesh clearly has seen better days. If you're really desperate, you can eat it to restore a few hunger points, but there's a 80% chance it causes food poisoning, which increases your hunger for a while.=Fuj! Ten kawał mięsa zdecydowanie widział lepsze dni. Jeśli jesteś bardzo zdesperowana, możesz je zjeść by odzyskać kilka punktów głodu, ale jest 80 % szans, że spowoduje to zatrucie pokarmowe, które zwiększa chwilowo twój głód. + +Raw Mutton=Surowa baranina + +Raw mutton is the flesh from a sheep and can be eaten safely. Cooking it will greatly increase its nutritional value.=Surowa baranina to mięso z owcy, które może być bezpiecznie zjedzone. Upieczenie go znacząco zwiększy jego wartości odżywcze. + +Cooked Mutton=Pieczona baranina +Cooked mutton is the cooked flesh from a sheep and is used as food.=Upieczona baranina jest upieczonym mięsem z owcy i używana jako jedzenie. +Raw Beef=Surowa wołowina + +Raw beef is the flesh from cows and can be eaten safely. Cooking it will greatly increase its nutritional value.=Surowa wołowina jest mięsem z krowy i może być bezpiecznie zjedzone. Upieczenie go znacząco zwiększy jego wartości odżywcze. + + +Steak=Befsztyk +Steak is cooked beef from cows and can be eaten.=Befsztyk jest upieczoną wołowiną z krowy i może być zjedzony. +Raw Chicken=Surowy drób +30% chance of food poisoning=30% szans na zatrucie pokarmowe + +Raw chicken is a food item which is not safe to consume. You can eat it to restore a few hunger points, but there's a 30% chance to suffer from food poisoning, which increases your hunger rate for a while. Cooking raw chicken will make it safe to eat and increases its nutritional value.=Surowy drób nie jest bezpieczny do jedzenia. Można go zjeść, co przywróci kilka punktów głodu, jednak jest 30% szans, że spowoduje to zatrucie pokarmowe, które chwilowo zwiększa głód. Upieczenie surowego drobiu sprawi, że będzie on bezpieczny do jedzenia i zwiększy jego wartości odżywcze. + +Cooked Chicken=Pieczony kurczak +A cooked chicken is a healthy food item which can be eaten.=Pieczony kurczak jest zdrowym jedzeniem, które można bezpiecznie zjeść. +Raw Porkchop=Surowy schab + +A raw porkchop is the flesh from a pig and can be eaten safely. Cooking it will greatly increase its nutritional value.=Surowy schab jest mięsem ze świni i może zostać bezpiecznie zjedzony. Upieczenie go znacząco zwiększy jego wartości odżywcze. + +Cooked Porkchop=Pieczony schab +Cooked porkchop is the cooked flesh of a pig and is used as food.=Pieczony schab to upieczone mięso świni i jest używane jako jedzenie. +Raw Rabbit=Surowy mięso królicze + +Raw rabbit is a food item from a dead rabbit. It can be eaten safely. Cooking it will increase its nutritional value.=Surowy mięso królicze jest mięsem z martwego królika. Może zostać bezpiecznie zjedzone. Upieczenie go znacząco zwiększy jego wartości odżywcze. + +Cooked Rabbit=Pieczony królik +This is a food item which can be eaten.=Ten przedmiot można bezpiecznie zjeść. +Milk=Mleko +Removes all status effects=Usuwa wszystkie statusy efektów. + +Milk is very refreshing and can be obtained by using a bucket on a cow. Drinking it will remove all status effects, but restores no hunger points.=Mleko jest bardzo odświeżające i może zostać uzyskane przez użycie wiadra na krowie. Wypicie go usunie wszystkie statusy efektów, ale nie przywróci punktów głodu. + +Use the placement key to drink the milk.=Kliknij przycisk umieszczania aby wypić mleko. +Spider Eye=Oko pająka +Poisonous=Trujące + +Spider eyes are used mainly in crafting. If you're really desperate, you can eat a spider eye, but it will poison you briefly.=Oczy pająka są użyteczne przy wytwarzaniu. Jeśli jesteś zdesperowana możesz je zjeść, ale otruje cię ono chwilowo. + +Bone=Kość + +Bones can be used to tame wolves so they will protect you. They are also useful as a crafting ingredient.=Kości mogą być użyte do oswajania wilków, aby cię broniły. Są również użyteczne jako materiały do wytwarzania. + +Wield the bone near wolves to attract them. Use the “Place” key on the wolf to give it a bone and tame it. You can then give commands to the tamed wolf by using the “Place” key on it.=Trzymaj kość w pobliżu wilków aby je zwabić. Użyj przycisku "Umieść" na wilku aby dać mu kość i go oswoić. Możesz wtedy wydawać polecenia oswojonemu wilkowi klikając przycisk "Umieść" na nim. + +String=Nić +Strings are used in crafting.=Nić jest użyteczna w wytwarzaniu. +Blaze Rod=Płomienna różdżka +This is a crafting component dropped from dead blazes.=Jest to materiał do wytwarzania wypadający z martwych płomyków. +Blaze Powder=Płomienny proszek +This item is mainly used for crafting.=Ten przedmiot jest użyteczny w wytwarzaniu. +Magma Cream=Magmowy krem +Magma cream is a crafting component.=Magmowy krem to materiał do wytwarzania. +Ghast Tear=Łza Ghasta +Place this item in an item frame as decoration.=Umieść ten item w ramce jako dekorację. +Nether Star=Gwiazda Netheru + +A nether star is dropped when the Wither dies. Place it in an item frame to show the world how hardcore you are! Or just as decoration.=Gwiazda Netheru wypada gdy Wither umiera. Umieść ją w ramce by pokazać światu jak bardzo hardkorowa jesteś. + +Leather=Skóra +Leather is a versatile crafting component.=Skóra jest wszechstronnym materiałem do wytwarzania. +Feather=Pióro +Feathers are used in crafting and are dropped from chickens.=Pióra są używane w wytwarzaniu i wypadają z kurczaków. +Rabbit Hide=Królicza skóra +Rabbit hide is used to create leather.=Królicza skóra jest wykorzystywana do tworzenia skóry. +Rabbit's Foot=Królicza łapka +Must be your lucky day! Place this item in an item frame for decoration.=To musi być twój szczęśliwy dzień! Umieść ten przedmiot w ramce jako dekorację. +Saddle=Siodło +Can be placed on animals to ride them=Może być umieszczone na zwierzętach aby na nich jeździć. +Saddles can be put on some animals in order to mount them.=Siodła mogą być umieszczone na zwierzętach aby ich dosiąść. + +Use the placement key with the saddle in your hand to try to put on the saddle. Saddles fit on horses, mules, donkeys and pigs. Horses, mules and donkeys need to be tamed first, otherwise they'll reject the saddle. Saddled animals can be mounted by using the placement key on them again.=Użyj przycisku umieszczania z siodłem w ręku, aby założyć siodło. Siodła pasują na konie, muły, osły i świnie. Konie, muły i osły muszą być najpierw oswojone, w przeciwnym razie nie dadzą się osiodłać. Osiodłane zwierzęta można dosiąść klikając je prawym przyciskiem myszy. + +Rabbit Stew=Potrawka z królika +Rabbit stew is a very nutricious food item.=Potrawka z królika jest bardzo odżywczym posiłkiem. +Shulker Shell=Skorupa shulkera +Shulker shells are used in crafting. They are dropped from dead shulkers.=Skorupy shulkera są użyteczne w wytwarzaniu. Wypadają z martwych shulkerów. +Slimeball=Kula szlamu +Slimeballs are used in crafting. They are dropped from slimes.=Kule szlamu są użyteczne w wytwarzaniu. Wypadają z szlamów. +Gunpowder=Proch +Carrot on a Stick=Marchewka na patyku +Lets you ride a saddled pig=Pozwala prowadzić osiodłaną świnię +A carrot on a stick can be used on saddled pigs to ride them.=Marchewka na patyku może być użyta na osiodłanej świni by ją prowadzić. + +Place it on a saddled pig to mount it. You can now ride the pig like a horse. Pigs will also walk towards you when you just wield the carrot on a stick.=Użyj jej na osiodłanej skrzyni aby ją założyć. Możesz teraz jeździć na świni jak na koniu. Świnie będą także do ciebie podchodzić jeśli po prostu trzymasz marchewkę na patyku. + diff --git a/mods/ITEMS/mcl_mobitems/mod.conf b/mods/ITEMS/mcl_mobitems/mod.conf index bd534323a..e9604036e 100644 --- a/mods/ITEMS/mcl_mobitems/mod.conf +++ b/mods/ITEMS/mcl_mobitems/mod.conf @@ -1 +1,2 @@ name = mcl_mobitems +depends = mcl_core, mcl_hunger, mcl_colors diff --git a/mods/ITEMS/mcl_mobspawners/depends.txt b/mods/ITEMS/mcl_mobspawners/depends.txt deleted file mode 100644 index dc1a03b82..000000000 --- a/mods/ITEMS/mcl_mobspawners/depends.txt +++ /dev/null @@ -1,2 +0,0 @@ -mcl_sounds -mcl_mobs diff --git a/mods/ITEMS/mcl_mobspawners/init.lua b/mods/ITEMS/mcl_mobspawners/init.lua index 39abd7227..6c5d7f6e4 100644 --- a/mods/ITEMS/mcl_mobspawners/init.lua +++ b/mods/ITEMS/mcl_mobspawners/init.lua @@ -1,11 +1,14 @@ -local S = minetest.get_translator("mcl_mobspawners") +local S = minetest.get_translator(minetest.get_current_modname()) + +local math = math +local table = table mcl_mobspawners = {} local default_mob = "mobs_mc:pig" -- Mob spawner -local spawner_default = default_mob.." 0 15 4 15" +--local spawner_default = default_mob.." 0 15 4 15" local function get_mob_textures(mob) local list = minetest.registered_entities[mob].texture_list @@ -17,9 +20,9 @@ local function get_mob_textures(mob) end local function find_doll(pos) - for _,obj in ipairs(minetest.get_objects_inside_radius(pos, 0.5)) do + for _,obj in pairs(minetest.get_objects_inside_radius(pos, 0.5)) do if not obj:is_player() then - if obj ~= nil and obj:get_luaentity().name == "mcl_mobspawners:doll" then + if obj and obj:get_luaentity().name == "mcl_mobspawners:doll" then return obj end end @@ -54,6 +57,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 @@ -132,7 +136,7 @@ end -- Spawn mobs around pos -- NOTE: The node is timer-based, rather than ABM-based. -local spawn_mobs = function(pos, elapsed) +local function spawn_mobs(pos, elapsed) -- get meta local meta = minetest.get_meta(pos) @@ -159,7 +163,7 @@ local spawn_mobs = function(pos, elapsed) -- check objects inside 8×8 area around spawner local objs = minetest.get_objects_inside_radius(pos, 8) local count = 0 - local ent = nil + local ent local timer = minetest.get_node_timer(pos) @@ -313,6 +317,7 @@ minetest.register_node("mcl_mobspawners:spawner", { if obj then obj:remove() end + mcl_experience.throw_experience(pos, math.random(15, 43)) end, on_punch = function(pos) diff --git a/mods/ITEMS/mcl_mobspawners/locale/mcl_mobspawners.pl.tr b/mods/ITEMS/mcl_mobspawners/locale/mcl_mobspawners.pl.tr new file mode 100644 index 000000000..5b4a8d896 --- /dev/null +++ b/mods/ITEMS/mcl_mobspawners/locale/mcl_mobspawners.pl.tr @@ -0,0 +1,5 @@ +# textdomain: mcl_mobspawners +Mob Spawner=Spawner mobów +A mob spawner regularily causes mobs to appear around it while a player is nearby. Some mob spawners are disabled while in light.=Spawner mobów sprawia, że wokół niego regularnie pojawiają się moby, gdy w pobliżu jest gracz. Niektóre spawnery są wyłączone w świetle. +If you have a spawn egg, you can use it to change the mob to spawn. Just place the item on the mob spawner. Player-set mob spawners always spawn mobs regardless of the light level.=Jeśli masz jajo spawnowania, możesz go użyć by zmienić moba, który będzie przywoływany. Aby to zrobić umieść przedmiot na spawnerze. +Makes mobs appear=Tworzy moby diff --git a/mods/ITEMS/mcl_mobspawners/mod.conf b/mods/ITEMS/mcl_mobspawners/mod.conf index 36112bf36..1759e3408 100644 --- a/mods/ITEMS/mcl_mobspawners/mod.conf +++ b/mods/ITEMS/mcl_mobspawners/mod.conf @@ -1 +1,2 @@ name = mcl_mobspawners +depends = mcl_sounds, mcl_mobs diff --git a/mods/ITEMS/mcl_monster_eggs/depends.txt b/mods/ITEMS/mcl_monster_eggs/depends.txt deleted file mode 100644 index d867036e5..000000000 --- a/mods/ITEMS/mcl_monster_eggs/depends.txt +++ /dev/null @@ -1,2 +0,0 @@ -mcl_sounds -mobs_mc diff --git a/mods/ITEMS/mcl_monster_eggs/description.txt b/mods/ITEMS/mcl_monster_eggs/description.txt deleted file mode 100644 index ae7cab253..000000000 --- a/mods/ITEMS/mcl_monster_eggs/description.txt +++ /dev/null @@ -1 +0,0 @@ -Adds infested blocks: Blocks which which disguise themselves as stone blocks and spawn a silverfish when broken. diff --git a/mods/ITEMS/mcl_monster_eggs/init.lua b/mods/ITEMS/mcl_monster_eggs/init.lua index 55875159e..59ab72876 100644 --- a/mods/ITEMS/mcl_monster_eggs/init.lua +++ b/mods/ITEMS/mcl_monster_eggs/init.lua @@ -1,16 +1,16 @@ -- Monster eggs! -- Blocks which spawn silverfish when destroyed. -local S = minetest.get_translator("mcl_monster_eggs") +local S = minetest.get_translator(minetest.get_current_modname()) -local spawn_silverfish = function(pos, oldnode, oldmetadata, digger) +local function spawn_silverfish(pos, oldnode, oldmetadata, digger) if not minetest.is_creative_enabled("") then minetest.add_entity(pos, "mobs_mc:silverfish") end end -- Template function for registering monster egg blocks -local register_block = function(subname, description, tiles, is_ground_content) +local function register_block(subname, description, tiles, is_ground_content) if is_ground_content == nil then is_ground_content = false end @@ -19,12 +19,14 @@ local register_block = function(subname, description, tiles, is_ground_content) tiles = tiles, is_ground_content = is_ground_content, groups = {dig_immediate = 3, spawns_silverfish = 1, deco_block = 1}, - drop = '', - is_ground_content = false, + drop = "", sounds = mcl_sounds.node_sound_stone_defaults(), after_dig_node = spawn_silverfish, _tt_help = S("Hides a silverfish"), - _doc_items_longdesc = S("An infested block is a block from which a silverfish will pop out when it is broken. It looks identical to its normal counterpart."), + _doc_items_longdesc = S([[ + An infested block is a block from which a silverfish will pop out when it is broken. + It looks identical to its normal counterpart. + ]]), _mcl_hardness = 0, _mcl_blast_resistance = 0.5, }) diff --git a/mods/ITEMS/mcl_monster_eggs/locale/mcl_monster_eggs.pl.tr b/mods/ITEMS/mcl_monster_eggs/locale/mcl_monster_eggs.pl.tr new file mode 100644 index 000000000..2d55f713f --- /dev/null +++ b/mods/ITEMS/mcl_monster_eggs/locale/mcl_monster_eggs.pl.tr @@ -0,0 +1,9 @@ +# textdomain: mcl_monster_eggs +An infested block is a block from which a silverfish will pop out when it is broken. It looks identical to its normal counterpart.=Zarobaczony blok to blok z którego po rozbiciu wypadną rybiki cukrowe. Wygląda identycznie co niezarobaczona wersja. +Infested Stone=Zarobaczony kamień +Infested Cobblestone=Zarobaczony brukowiec +Infested Stone Bricks=Zarobaczone kamienne cegły +Infested Cracked Stone Bricks=Zarobaczone popękane kamienne cegły +Infested Mossy Stone Bricks=Zarobaczone zamszone kamienne cegły +Infested Chiseled Stone Bricks=Zarobaczone wygładzone kamienne cegły +Hides a silverfish=Chowa w sobie rybika cukrowego diff --git a/mods/ITEMS/mcl_monster_eggs/mod.conf b/mods/ITEMS/mcl_monster_eggs/mod.conf new file mode 100644 index 000000000..b29601864 --- /dev/null +++ b/mods/ITEMS/mcl_monster_eggs/mod.conf @@ -0,0 +1,3 @@ +name = mcl_monster_eggs +description = Adds infested blocks: Blocks which which disguise themselves as stone blocks and spawn a silverfish when broken. +depends = mcl_sounds, mobs_mc diff --git a/mods/ITEMS/mcl_mushrooms/depends.txt b/mods/ITEMS/mcl_mushrooms/depends.txt deleted file mode 100644 index 7ddb9b8f8..000000000 --- a/mods/ITEMS/mcl_mushrooms/depends.txt +++ /dev/null @@ -1,3 +0,0 @@ -mcl_sounds -mcl_util -doc? diff --git a/mods/ITEMS/mcl_mushrooms/huge.lua b/mods/ITEMS/mcl_mushrooms/huge.lua index 12b00db8c..617f12810 100644 --- a/mods/ITEMS/mcl_mushrooms/huge.lua +++ b/mods/ITEMS/mcl_mushrooms/huge.lua @@ -1,4 +1,6 @@ -local S = minetest.get_translator("mcl_mushrooms") +local S = minetest.get_translator(minetest.get_current_modname()) + +local vector = vector local template = { groups = {handy=1,axey=1, building_block = 1, material_wood = 1, flammable = -1 }, @@ -12,16 +14,16 @@ local template = { local red = table.copy(template) red.drop = { items = { - { items = {'mcl_mushrooms:mushroom_red 1'}, rarity = 2 }, - { items = {'mcl_mushrooms:mushroom_red 1'}, rarity = 2 }, + { items = {"mcl_mushrooms:mushroom_red"}, rarity = 2 }, + { items = {"mcl_mushrooms:mushroom_red"}, rarity = 2 }, } } local brown= table.copy(template) brown.drop = { items = { - { items = {'mcl_mushrooms:mushroom_brown 1'}, rarity = 2 }, - { items = {'mcl_mushrooms:mushroom_brown 1'}, rarity = 2 }, + { items = {"mcl_mushrooms:mushroom_brown"}, rarity = 2 }, + { items = {"mcl_mushrooms:mushroom_brown"}, rarity = 2 }, } } @@ -40,7 +42,7 @@ local function to_binary(num) return binary end -local register_mushroom = function(color, species_id, template, d_cap, d_stem, d_stem_all, longdesc_cap, longdesc_stem) +local function register_mushroom(color, species_id, template, d_cap, d_stem, d_stem_all, longdesc_cap, longdesc_stem) -- Stem texture on all sides local stem_full = table.copy(template) @@ -73,7 +75,7 @@ local register_mushroom = function(color, species_id, template, d_cap, d_stem, d block._doc_items_usagehelp = S("By placing huge mushroom blocks of the same species next to each other, the sides that touch each other will turn into pores permanently.") block.tiles = { "mcl_mushrooms_mushroom_block_skin_"..color..".png" } - block.on_construct = function(pos) + function block.on_construct(pos) local sides = { { { x= 0, y= 1, z= 0 }, 2 }, { { x= 0, y=-1, z= 0 }, 1 }, @@ -85,7 +87,7 @@ local register_mushroom = function(color, species_id, template, d_cap, d_stem, d -- Replace the side of a mushroom node. Returns the new node. -- Or nil, if unchanged. - local replace_side = function(pos, node, side) + local function replace_side(pos, node, side) local bin = string.sub(node.name, -6) if string.sub(bin, side, side) == "1" then local new_bin diff --git a/mods/ITEMS/mcl_mushrooms/locale/mcl_mushrooms.pl.tr b/mods/ITEMS/mcl_mushrooms/locale/mcl_mushrooms.pl.tr new file mode 100644 index 000000000..3a05b5fb0 --- /dev/null +++ b/mods/ITEMS/mcl_mushrooms/locale/mcl_mushrooms.pl.tr @@ -0,0 +1,24 @@ +# textdomain: mcl_mushrooms +This decorative block is like a huge mushroom stem, but with the stem texture on all sides.=Ten dekoracyjny blok jest jak łodyga grzyba, ale z teksturą łodygi na każdej stronie. +Huge red mushroom blocks are the cap parts of huge red mushrooms. It consists of a red skin and can have pores on each of its sides.=Duże czerwone bloki grzybów to część kapelusza dużych czerwonych grzybów. Składają się z czerwonej skóry i mogą mieć pory na ścianach. +The stem part of a huge red mushroom.=Część łodygi dużego czerwonego grzyba. +Huge Red Mushroom Block=Blok dużego czerwonego grzyba +Huge Red Mushroom Stem=Łodyga dużego czerwonego grzyba +Huge Red Mushroom All-Faces Stem=Łodyga dużego czerwonego grzyba (wszystkie ściany) +Huge brown mushroom blocks are the cap parts of huge brown mushrooms. It consists of a brown skin and can have pores on each of its sides.=Duże brązowe bloki grzybów to część kapelusza dużych brązowych grzybów. Składają się z czerwonej skóry i mogą mieć pory na ścianach. +The stem part of a huge brown mushroom.=Część łodygi dużego brązowego grzyba. +Huge Brown Mushroom Block=Blok dużego brązowego grzyba +Huge Brown Mushroom Stem=Łodyga dużego brązowego grzyba +Huge Brown Mushroom All-Faces Stem=Łodyga dużego brązowego grzyba (wszystkie ściany) +Brown mushrooms are fungi which grow and spread in darkness, but are sensitive to light. They are inedible as such, but they can be used to craft food items.=Brązowe grzyby to grzyby rosnące i rozprzestrzeniające się w ciemności i czułe na światło. Same są niejadalne, jednak można je wykorzystać do stworzenia jedzenia. +Red mushrooms are fungi which grow and spread in darkness, but are sensitive to light. They are inedible as such, but they can be used to craft food items.=Czerwone grzyby to grzyby rosnące i rozprzestrzeniające się w ciemności i czułe na światło. Same są niejadalne, jednak można je wykorzystać do stworzenia jedzenia. +A single mushroom of this species will slowly spread over time towards a random solid opaque block with a light level of 12 or lower in a 3×3×3 cube around the mushroom. It stops spreading when there are 5 or more mushrooms of the same species within an area of 9×3×9 blocks around the mushroom.=Pojedynczy grzyb tego gatunku będzie powoli rozrastał się na losowe, nieprzezroczyste, stałe bloki z poziomem oświetlenia 12 lub niższym w sześcianie 3×3×3 wokół grzyba. +Mushrooms will eventually uproot at a light level of 12 or higher. On mycelium or podzol, they survive and spread at any light level.=Grzyby po jakimś czasie obumrą w oświetlenie o poziomie 12 i wyższym. Na grzybni i bielicy przeżyją i będą się rozprzestrzeniać przy każdym poziomie oświetlenia. +This mushroom can be placed on mycelium and podzol at any light level. It can also be placed on blocks which are both solid and opaque, as long as the light level at daytime is not higher than 12.=Ten grzyb może być postawiony na grzybni oraz bielicy przy dowolnym poziomie oświetlenia. Można go również postawić na dowolnym stałym, nieprzezroczystym bloku tylko jeśli poziom oświetlenia jest nie większy niż 12. +Brown Mushroom=Brązowy grzyb +Red Mushroom=Czerwony grzyb +Mushroom Stew=Zupa grzybowa +Mushroom stew is a healthy soup which can be consumed to restore some hunger points.=Zupa grzybowa jest zdrową zupą, którą można zjeść by odzyskać punkty głodu. +By placing huge mushroom blocks of the same species next to each other, the sides that touch each other will turn into pores permanently.=Kładą bloki dużych grzybów tego samego gatunku obok siebie, ich dotykające się boki zamienią się na stałe w pory. +Grows on podzol, mycelium and other blocks=Rośnie na bielicy, grzybni i innych blokach. +Spreads in darkness=Rozprzestrzenia się w ciemności diff --git a/mods/ITEMS/mcl_mushrooms/mod.conf b/mods/ITEMS/mcl_mushrooms/mod.conf index 64bbd8ca4..20f7bef16 100644 --- a/mods/ITEMS/mcl_mushrooms/mod.conf +++ b/mods/ITEMS/mcl_mushrooms/mod.conf @@ -1 +1,3 @@ name = mcl_mushrooms +depends = mcl_sounds, mcl_util +optional_depends = doc diff --git a/mods/ITEMS/mcl_mushrooms/small.lua b/mods/ITEMS/mcl_mushrooms/small.lua index 8105386f4..c6d7edcdc 100644 --- a/mods/ITEMS/mcl_mushrooms/small.lua +++ b/mods/ITEMS/mcl_mushrooms/small.lua @@ -1,10 +1,9 @@ -local S = minetest.get_translator("mcl_mushrooms") +local S = minetest.get_translator(minetest.get_current_modname()) local on_place = mcl_util.generate_on_place_plant_function(function(place_pos, place_node) local soil_node = minetest.get_node_or_nil({x=place_pos.x, y=place_pos.y-1, z=place_pos.z}) if not soil_node then return false end local snn = soil_node.name -- soil node name - local sd = minetest.registered_nodes[snn] -- soil definition -- Placement rules: -- * Always allowed on podzol or mycelimu @@ -88,7 +87,7 @@ minetest.register_craftitem("mcl_mushrooms:mushroom_stew", { minetest.register_craft({ type = "shapeless", output = "mcl_mushrooms:mushroom_stew", - recipe = {'mcl_core:bowl', 'mcl_mushrooms:mushroom_brown', 'mcl_mushrooms:mushroom_red'} + recipe = {"mcl_core:bowl", "mcl_mushrooms:mushroom_brown", "mcl_mushrooms:mushroom_red"} }) --[[ Mushroom spread and death diff --git a/mods/ITEMS/mcl_nether/depends.txt b/mods/ITEMS/mcl_nether/depends.txt deleted file mode 100644 index 96f253aa0..000000000 --- a/mods/ITEMS/mcl_nether/depends.txt +++ /dev/null @@ -1,8 +0,0 @@ -mcl_core -mcl_sounds -mcl_util -walkover -mcl_death_messages? -doc_items -doc? -screwdriver? diff --git a/mods/ITEMS/mcl_nether/init.lua b/mods/ITEMS/mcl_nether/init.lua index 026428db2..c5afe66ae 100644 --- a/mods/ITEMS/mcl_nether/init.lua +++ b/mods/ITEMS/mcl_nether/init.lua @@ -1,7 +1,6 @@ -local S = minetest.get_translator("mcl_nether") +local S = minetest.get_translator(minetest.get_current_modname()) -local mod_death_messages = minetest.get_modpath("mcl_death_messages") -local mod_screwdriver = minetest.get_modpath("screwdriver") ~= nil +local mod_screwdriver = minetest.get_modpath("screwdriver") local on_rotate if mod_screwdriver then on_rotate = screwdriver.rotate_3way @@ -17,9 +16,9 @@ minetest.register_node("mcl_nether:glowstone", { drop = { max_items = 1, items = { - {items = {'mcl_nether:glowstone_dust 4'},rarity = 3}, - {items = {'mcl_nether:glowstone_dust 3'},rarity = 3}, - {items = {'mcl_nether:glowstone_dust 2'}}, + {items = {"mcl_nether:glowstone_dust 4"}, rarity = 3}, + {items = {"mcl_nether:glowstone_dust 3"}, rarity = 3}, + {items = {"mcl_nether:glowstone_dust 2"}}, } }, paramtype = "light", @@ -44,7 +43,7 @@ minetest.register_node("mcl_nether:quartz_ore", { tiles = {"mcl_nether_quartz_ore.png"}, is_ground_content = true, groups = {pickaxey=1, building_block=1, material_stone=1, xp=3}, - drop = 'mcl_nether:quartz', + drop = "mcl_nether:quartz", sounds = mcl_sounds.node_sound_stone_defaults(), _mcl_blast_resistance = 3, _mcl_hardness = 3, @@ -54,13 +53,14 @@ minetest.register_node("mcl_nether:quartz_ore", { -- For eternal fire on top of netherrack and magma blocks -- (this code does not require a dependency on mcl_fire) -local eternal_after_destruct = function(pos, oldnode) +local function eternal_after_destruct(pos, oldnode) pos.y = pos.y + 1 if minetest.get_node(pos).name == "mcl_fire:eternal_fire" then minetest.remove_node(pos) end end -local eternal_on_ignite = function(player, pointed_thing) + +local function eternal_on_ignite(player, pointed_thing) local pos = pointed_thing.under local flame_pos = {x = pos.x, y = pos.y + 1, z = pos.z} local fn = minetest.get_node(flame_pos) @@ -95,7 +95,7 @@ minetest.register_node("mcl_nether:netherrack", { minetest.register_node("mcl_nether:magma", { description = S("Magma Block"), - _tt_help = minetest.colorize("#FFFF00", S("Burns your feet")), + _tt_help = minetest.colorize(mcl_colors.YELLOW, S("Burns your feet")), _doc_items_longdesc = S("Magma blocks are hot solid blocks which hurt anyone standing on it, unless they have fire resistance. Starting a fire on this block will create an eternal fire."), stack_max = 64, tiles = {{name="mcl_nether_magma.png", animation={type="vertical_frames", aspect_w=32, aspect_h=32, length=1.5}}}, @@ -106,15 +106,12 @@ minetest.register_node("mcl_nether:magma", { sounds = mcl_sounds.node_sound_stone_defaults(), -- From walkover mod on_walk_over = function(loc, nodeiamon, player) - if minetest.global_exists("mcl_potions") and mcl_potions.player_has_effect(player, "fire_proof") then + if player and player:get_player_control().sneak or minetest.global_exists("mcl_potions") and mcl_potions.player_has_effect(player, "fire_proof") then return end -- Hurt players standing on top of this block if player:get_hp() > 0 then - if mod_death_messages then - mcl_death_messages.player_damage(player, S("@1 stood too long on a magma block.", player:get_player_name())) - end - player:set_hp(player:get_hp() - 1, { type = "punch", from = "mod" }) + mcl_util.deal_damage(player, 1, {type = "hot_floor"}) end end, _mcl_blast_resistance = 0.5, @@ -176,7 +173,7 @@ minetest.register_node("mcl_nether:nether_wart_block", { stack_max = 64, tiles = {"mcl_nether_nether_wart_block.png"}, is_ground_content = false, - groups = {handy=1, building_block=1}, + groups = {handy=1, hoey=1, building_block=1}, sounds = mcl_sounds.node_sound_leaves_defaults( { footstep={name="default_dirt_footstep", gain=0.7}, @@ -269,34 +266,34 @@ minetest.register_craft({ }) minetest.register_craft({ - output = 'mcl_nether:quartz_block', + output = "mcl_nether:quartz_block", recipe = { - {'mcl_nether:quartz', 'mcl_nether:quartz'}, - {'mcl_nether:quartz', 'mcl_nether:quartz'}, + {"mcl_nether:quartz", "mcl_nether:quartz"}, + {"mcl_nether:quartz", "mcl_nether:quartz"}, } }) minetest.register_craft({ - output = 'mcl_nether:quartz_pillar 2', + output = "mcl_nether:quartz_pillar 2", recipe = { - {'mcl_nether:quartz_block'}, - {'mcl_nether:quartz_block'}, + {"mcl_nether:quartz_block"}, + {"mcl_nether:quartz_block"}, } }) minetest.register_craft({ output = "mcl_nether:glowstone", recipe = { - {'mcl_nether:glowstone_dust', 'mcl_nether:glowstone_dust'}, - {'mcl_nether:glowstone_dust', 'mcl_nether:glowstone_dust'}, + {"mcl_nether:glowstone_dust", "mcl_nether:glowstone_dust"}, + {"mcl_nether:glowstone_dust", "mcl_nether:glowstone_dust"}, } }) minetest.register_craft({ output = "mcl_nether:magma", recipe = { - {'mcl_mobitems:magma_cream', 'mcl_mobitems:magma_cream'}, - {'mcl_mobitems:magma_cream', 'mcl_mobitems:magma_cream'}, + {"mcl_mobitems:magma_cream", "mcl_mobitems:magma_cream"}, + {"mcl_mobitems:magma_cream", "mcl_mobitems:magma_cream"}, } }) @@ -310,32 +307,32 @@ minetest.register_craft({ minetest.register_craft({ output = "mcl_nether:nether_brick", recipe = { - {'mcl_nether:netherbrick', 'mcl_nether:netherbrick'}, - {'mcl_nether:netherbrick', 'mcl_nether:netherbrick'}, + {"mcl_nether:netherbrick", "mcl_nether:netherbrick"}, + {"mcl_nether:netherbrick", "mcl_nether:netherbrick"}, } }) minetest.register_craft({ output = "mcl_nether:red_nether_brick", recipe = { - {'mcl_nether:nether_wart_item', 'mcl_nether:netherbrick'}, - {'mcl_nether:netherbrick', 'mcl_nether:nether_wart_item'}, + {"mcl_nether:nether_wart_item", "mcl_nether:netherbrick"}, + {"mcl_nether:netherbrick", "mcl_nether:nether_wart_item"}, } }) minetest.register_craft({ output = "mcl_nether:red_nether_brick", recipe = { - {'mcl_nether:netherbrick', 'mcl_nether:nether_wart_item'}, - {'mcl_nether:nether_wart_item', 'mcl_nether:netherbrick'}, + {"mcl_nether:netherbrick", "mcl_nether:nether_wart_item"}, + {"mcl_nether:nether_wart_item", "mcl_nether:netherbrick"}, } }) minetest.register_craft({ output = "mcl_nether:nether_wart_block", recipe = { - {'mcl_nether:nether_wart_item', 'mcl_nether:nether_wart_item', 'mcl_nether:nether_wart_item'}, - {'mcl_nether:nether_wart_item', 'mcl_nether:nether_wart_item', 'mcl_nether:nether_wart_item'}, - {'mcl_nether:nether_wart_item', 'mcl_nether:nether_wart_item', 'mcl_nether:nether_wart_item'}, + {"mcl_nether:nether_wart_item", "mcl_nether:nether_wart_item", "mcl_nether:nether_wart_item"}, + {"mcl_nether:nether_wart_item", "mcl_nether:nether_wart_item", "mcl_nether:nether_wart_item"}, + {"mcl_nether:nether_wart_item", "mcl_nether:nether_wart_item", "mcl_nether:nether_wart_item"}, } }) diff --git a/mods/ITEMS/mcl_nether/lava.lua b/mods/ITEMS/mcl_nether/lava.lua index da85b8e3c..035a50322 100644 --- a/mods/ITEMS/mcl_nether/lava.lua +++ b/mods/ITEMS/mcl_nether/lava.lua @@ -1,12 +1,6 @@ -- Lava in the Nether -local S = minetest.get_translator("mcl_nether") -local N = function(s) return s end - -local msg = { - N("@1 has become one with the lava."), - N("@1 has been consumed by the lava."), -} +local S = minetest.get_translator(minetest.get_current_modname()) -- TODO: Increase flow speed. This could be done by reducing viscosity, -- but this would also allow players to swim faster in lava. @@ -20,7 +14,6 @@ lava_src_def._doc_items_usagehelp = nil lava_src_def.liquid_range = 7 lava_src_def.liquid_alternative_source = "mcl_nether:nether_lava_source" lava_src_def.liquid_alternative_flowing = "mcl_nether:nether_lava_flowing" -lava_src_def._mcl_node_death_message = msg, minetest.register_node("mcl_nether:nether_lava_source", lava_src_def) local lava_flow_def = table.copy(minetest.registered_nodes["mcl_core:lava_flowing"]) @@ -29,7 +22,6 @@ lava_flow_def._doc_items_create_entry = false lava_flow_def.liquid_range = 7 lava_flow_def.liquid_alternative_flowing = "mcl_nether:nether_lava_flowing" lava_flow_def.liquid_alternative_source = "mcl_nether:nether_lava_source" -lava_flow_def._mcl_node_death_message = msg, minetest.register_node("mcl_nether:nether_lava_flowing", lava_flow_def) -- Add entry aliases for the Help diff --git a/mods/ITEMS/mcl_nether/locale/mcl_nether.de.tr b/mods/ITEMS/mcl_nether/locale/mcl_nether.de.tr index bfa62488c..f81f381e2 100644 --- a/mods/ITEMS/mcl_nether/locale/mcl_nether.de.tr +++ b/mods/ITEMS/mcl_nether/locale/mcl_nether.de.tr @@ -38,5 +38,3 @@ Place this item on soul sand to plant it and watch it grow.=Platzieren Sie den G Burns your feet=Verbrennt Ihre Füße Grows on soul sand=Wächst auf Seelensand Reduces walking speed=Reduziert das Schritttempo -@1 has become one with the lava.=@1 wurde eins mit der Lava. -@1 has been consumed by the lava.=@1 wurde von der Lava verzehrt. diff --git a/mods/ITEMS/mcl_nether/locale/mcl_nether.fr.tr b/mods/ITEMS/mcl_nether/locale/mcl_nether.fr.tr index 78b8a453e..3e3583355 100644 --- a/mods/ITEMS/mcl_nether/locale/mcl_nether.fr.tr +++ b/mods/ITEMS/mcl_nether/locale/mcl_nether.fr.tr @@ -10,10 +10,10 @@ Magma blocks are hot solid blocks which hurt anyone standing on it, unless they @1 stood too long on a magma block.=@1 s'est tenu trop longtemps sur un bloc de magma. Soul Sand=Sable des âmes Soul sand is a block from the Nether. One can only slowly walk on soul sand. The slowing effect is amplified when the soul sand is on top of ice, packed ice or a slime block.=Le sable de l'âme est un bloc du Nether. On ne peut que marcher lentement sur le sable de l'âme. L'effet de ralentissement est amplifié lorsque le sable de l'âme est au-dessus de la glace, de la glace tassée ou d'un bloc de slime. -Nether Brick Block=Brique du Nether -Red Nether Brick Block=Brique Rouge du Nether +Nether Brick Block=Bloc de Briques du Nether +Red Nether Brick Block=Bloc de Briques Rouges du Nether Nether Wart Block=Bloc de Verrues du Nether -A nether wart block is a purely decorative block made from nether wart.=Un bloc de verrue du Nether est un bloc purement décoratif fabriqué à partir de verrue du Nether. +A nether wart block is a purely decorative block made from nether wart.=Un bloc de verrues du Nether est un bloc purement décoratif fabriqué à partir de verrue du Nether. Block of Quartz=Bloc de Quartz Chiseled Quartz Block=Bloc de Quartz sculpté Pillar Quartz Block=Bloc de Quartz rayé @@ -22,8 +22,8 @@ Glowstone Dust=Poudre Lumineuse Glowstone dust is the dust which comes out of broken glowstones. It is mainly used in crafting.=La poudre lumineuse est la poussière qui sort des pierres incandescentes brisées. Il est principalement utilisé dans l'artisanat. Nether Quartz=Quartz du Nether Nether quartz is a versatile crafting ingredient.=Le quartz du Nether est un ingrédient artisanal polyvalent. -Nether Brick=Bric du Nether -Nether bricks are the main crafting ingredient for crafting nether brick blocks and nether fences.=Les briques du Nether sont le principal ingrédient de fabrication pour la fabrication de blocs de briques et de clôtures du Nether. +Nether Brick=Brique du Nether +Nether bricks are the main crafting ingredient for crafting nether brick blocks and nether fences.=Les briques du Nether sont le principal ingrédient pour la fabrication de blocs de briques et de clôtures du Nether. Nether Lava Source=Source de Lave du Nether Flowing Nether Lava=Lave du Nether en Mouvement Premature Nether Wart (Stage 1)=Verrue du Néant prématurée (étape 1) @@ -37,6 +37,4 @@ Nether warts are plants home to the Nether. They can be planted on soul sand and Place this item on soul sand to plant it and watch it grow.=Placez cet article sur du sable d'âme pour le planter et regardez-le grandir. Burns your feet=Vous brûle les pieds Grows on soul sand=Pousse sur le sable de l'âme -Reduces walking speed=Réduit la vitesse de marche -@1 has become one with the lava.=@1 est devenu un avec la lave. -@1 has been consumed by the lava.=@1 a été consumé par la lave. \ No newline at end of file +Reduces walking speed=Réduit la vitesse de marche \ No newline at end of file diff --git a/mods/ITEMS/mcl_nether/locale/mcl_nether.pl.tr b/mods/ITEMS/mcl_nether/locale/mcl_nether.pl.tr new file mode 100644 index 000000000..11edbe3d4 --- /dev/null +++ b/mods/ITEMS/mcl_nether/locale/mcl_nether.pl.tr @@ -0,0 +1,40 @@ +# textdomain: mcl_nether +Glowstone=Jasnogłaz +Glowstone is a naturally-glowing block which is home to the Nether.=Jasnogłaz jest naturalnie świecącym blokiem, występującym w Netherze. +Nether Quartz Ore=Ruda Netherowego kwarcu +Nether quartz ore is an ore containing nether quartz. It is commonly found around netherrack in the Nether.=Ruda Netherowego kwarcu jest rudą zawierającą Netherowy kwarc. Występuje często nieopodal skał Netheru. +Netherrack=Skała Netheru +Netherrack is a stone-like block home to the Nether. Starting a fire on this block will create an eternal fire.=Skała Netheru jest blokiem podobnym do kamienia występującym w Netherze. +Magma Block=Blok magmy +Magma blocks are hot solid blocks which hurt anyone standing on it, unless they have fire resistance. Starting a fire on this block will create an eternal fire.=Bloki magmy są gorącymi stałymi blokami, które ranią każdego kto na nich stanie, chyba, że mają odporność na ogień. Rozpalenie ognia na tym bloku stworzy wieczny ogień. +@1 stood too long on a magma block.=@1 zbyt długo stała na bloku magmy. +Soul Sand=Piasek dusz +Soul sand is a block from the Nether. One can only slowly walk on soul sand. The slowing effect is amplified when the soul sand is on top of ice, packed ice or a slime block.=Piasek dusz jest blokiem z Netheru. Można na nim tylko chodzić powoli. Efekt spowolnienia jest mocniejszy gdy piasek dusz jest położony na lodzie, zbitym lodzi lub bloku szlamu. +Nether Brick Block=Blok Netherowych cegieł +Red Nether Brick Block=Blok czerwonych Netherowych cegieł +Nether Wart Block=Blok Netherowej brodawki +A nether wart block is a purely decorative block made from nether wart.=Blok Netherowej brodawki jest dekoracyjnym blokiem utworzonym z Netherowej brodawki. +Block of Quartz=Blok kwarcu +Chiseled Quartz Block=Rzeźbiony blok kwarcu +Pillar Quartz Block=Filarowy blok kwarcu +Smooth Quartz=Gładki kwarc +Glowstone Dust=Pył jasnogłazu +Glowstone dust is the dust which comes out of broken glowstones. It is mainly used in crafting.=Pył jasnogłazu to pył wyrzucany przez rozbite jasnogłazy. Jest głównie wykorzystywany w wytwarzaniu. +Nether Quartz=Netherowy kwarc +Nether quartz is a versatile crafting ingredient.=Netherowy kwarc jest wszechstronnym przedmiotem użytecznym w wytwarzaniu. +Nether Brick=Netherowa cegła +Nether bricks are the main crafting ingredient for crafting nether brick blocks and nether fences.=Netherowe cegły są głównym składnikiem do wytwarzania bloków Netherowej cegły oraz Netherowych ogrodzeń. +Nether Lava Source=Netherowe źródło lawy +Flowing Nether Lava=Płynąca Netherowa lawa +Premature Nether Wart (Stage 1)=Niedojrzała Netherowa brodawka (Etap 1) +A premature nether wart has just recently been planted on soul sand. Nether wart slowly grows on soul sand in 4 stages (the second and third stages look identical). Although nether wart is home to the Nether, it grows in any dimension.=Niedojrzała Netherowa brodawka to brodawka, która niedawno została zasadzona na piasku dusz. Netherowa brodawka rośnie na piasku dusz w 4 etapach (drugi i trzeci wyglądają identycznie). Pomimo tego, że brodawki te naturalnie występują tylko w Netherze, mogą one rosnąć w każdym wymiarze. +Premature Nether Wart (Stage 2)=Niedojrzała Netherowa brodawka (Etap 2) +Premature Nether Wart (Stage 3)=Niedojrzała Netherowa brodawka (Etap 3) +Mature Nether Wart=Dojrzała Netherowa brodawka +The mature nether wart is a plant from the Nether and reached its full size and won't grow any further. It is ready to be harvested for its items.=Dojrzała Netherowa brodawka jest rośliną z Netheru, która osiągnęła swój maksymalny rozmiar i nie urośnie więcej. Jest gotowa do zebrania dla swojego zrzutu. +Nether Wart=Netherowa brodawka +Nether warts are plants home to the Nether. They can be planted on soul sand and grow in 4 stages.=Netherowe brodawki to rośliny występujące w Netherze. Mogą być posadzone na piasku dusz i wyrosną w 4 fazach. +Place this item on soul sand to plant it and watch it grow.=Postaw ten przedmiot na piasku dusz aby zasadzić go i patrz jak rośnie. +Burns your feet=Pali w stopy +Grows on soul sand=Rośnie na piasku dusz +Reduces walking speed=Zmniejsza prędkość poruszania diff --git a/mods/ITEMS/mcl_nether/locale/mcl_nether.ru.tr b/mods/ITEMS/mcl_nether/locale/mcl_nether.ru.tr index 2cfdd370b..f546d16ca 100644 --- a/mods/ITEMS/mcl_nether/locale/mcl_nether.ru.tr +++ b/mods/ITEMS/mcl_nether/locale/mcl_nether.ru.tr @@ -38,5 +38,3 @@ Place this item on soul sand to plant it and watch it grow.=Поместите Burns your feet=Обжигает ваши ноги Grows on soul sand=Растёт на песке душ Reduces walking speed=Уменьшает скорость ходьбы -@1 has become one with the lava.=@1 породнился(лась) с лавой. -@1 has been consumed by the lava.=@1 был(а) поглощен(а) лавой. diff --git a/mods/ITEMS/mcl_nether/locale/template.txt b/mods/ITEMS/mcl_nether/locale/template.txt index 7b5052166..0e69ad520 100644 --- a/mods/ITEMS/mcl_nether/locale/template.txt +++ b/mods/ITEMS/mcl_nether/locale/template.txt @@ -37,6 +37,4 @@ Nether warts are plants home to the Nether. They can be planted on soul sand and Place this item on soul sand to plant it and watch it grow.= Burns your feet= Grows on soul sand= -Reduces walking speed= -@1 has become one with the lava.= -@1 has been consumed by the lava.= +Reduces walking speed= \ No newline at end of file diff --git a/mods/ITEMS/mcl_nether/mod.conf b/mods/ITEMS/mcl_nether/mod.conf index 2b6c641af..f5ffa61ac 100644 --- a/mods/ITEMS/mcl_nether/mod.conf +++ b/mods/ITEMS/mcl_nether/mod.conf @@ -1 +1,3 @@ name = mcl_nether +depends = mcl_core, mcl_sounds, mcl_util, walkover, doc_items, mcl_colors +optional_depends = doc, screwdriver diff --git a/mods/ITEMS/mcl_nether/nether_wart.lua b/mods/ITEMS/mcl_nether/nether_wart.lua index 681abe094..41b23f662 100644 --- a/mods/ITEMS/mcl_nether/nether_wart.lua +++ b/mods/ITEMS/mcl_nether/nether_wart.lua @@ -1,4 +1,6 @@ -local S = minetest.get_translator("mcl_nether") +local S = minetest.get_translator(minetest.get_current_modname()) + +local table = table minetest.register_node("mcl_nether:nether_wart_0", { description = S("Premature Nether Wart (Stage 1)"), @@ -127,7 +129,7 @@ minetest.register_craftitem("mcl_nether:nether_wart_item", { -- Check for correct soil type local chk = minetest.get_item_group(minetest.get_node(soilpos).name, "soil_nether_wart") - if chk ~= 0 and chk ~= nil then + if chk and chk ~= 0 then -- Check if node above soil node allows placement if minetest.registered_items[minetest.get_node(placepos).name].buildable_to then -- Place nether wart diff --git a/mods/ITEMS/mcl_ocean/corals.lua b/mods/ITEMS/mcl_ocean/corals.lua index f3de5968e..338929a19 100644 --- a/mods/ITEMS/mcl_ocean/corals.lua +++ b/mods/ITEMS/mcl_ocean/corals.lua @@ -1,5 +1,5 @@ -local S = minetest.get_translator("mcl_ocean") -local mod_doc = minetest.get_modpath("doc") ~= nil +local S = minetest.get_translator(minetest.get_current_modname()) +local mod_doc = minetest.get_modpath("doc") local corals = { { "tube", S("Tube Coral Block"), S("Dead Tube Coral Block"), S("Tube Coral"), S("Dead Tube Coral"), S("Tube Coral Fan"), S("Dead Tube Coral Fan") }, @@ -265,7 +265,6 @@ minetest.register_abm({ if minetest.get_node({x=pos.x, y=pos.y+1, z=pos.z}).name ~= "mcl_core:water_source" then -- Find dead form (it's the same as the node's drop) local def = minetest.registered_nodes[node.name] - local dead if def then node.name = def.drop else diff --git a/mods/ITEMS/mcl_ocean/depends.txt b/mods/ITEMS/mcl_ocean/depends.txt deleted file mode 100644 index 66908e83d..000000000 --- a/mods/ITEMS/mcl_ocean/depends.txt +++ /dev/null @@ -1,6 +0,0 @@ -mcl_core -mcl_sounds -mcl_dye -doc? -doc_items? -screwdriver? diff --git a/mods/ITEMS/mcl_ocean/description.txt b/mods/ITEMS/mcl_ocean/description.txt deleted file mode 100644 index bff01f614..000000000 --- a/mods/ITEMS/mcl_ocean/description.txt +++ /dev/null @@ -1 +0,0 @@ -Ocean-related blocks and items (for the ocean temple). diff --git a/mods/ITEMS/mcl_ocean/init.lua b/mods/ITEMS/mcl_ocean/init.lua index 2a103b8d0..f723a1f3f 100644 --- a/mods/ITEMS/mcl_ocean/init.lua +++ b/mods/ITEMS/mcl_ocean/init.lua @@ -1,3 +1,5 @@ +mcl_ocean = {} + -- Prismarine (includes sea lantern) dofile(minetest.get_modpath(minetest.get_current_modname()).."/prismarine.lua") diff --git a/mods/ITEMS/mcl_ocean/kelp.lua b/mods/ITEMS/mcl_ocean/kelp.lua index 2e0dfe1a5..422f475ac 100644 --- a/mods/ITEMS/mcl_ocean/kelp.lua +++ b/mods/ITEMS/mcl_ocean/kelp.lua @@ -1,71 +1,495 @@ -local S = minetest.get_translator("mcl_ocean") -local mod_doc = minetest.get_modpath("doc") ~= nil +-- TODO: whenever it becomes possible to fully implement kelp without the +-- plantlike_rooted limitation, please update accordingly. +-- +-- TODO: whenever it becomes possible to make kelp grow infinitely without +-- resorting to making intermediate kelp stem node, please update accordingly. +-- +-- TODO: In MC, you can't actually destroy kelp by bucket'ing water in the middle. +-- However, because of the plantlike_rooted hack, we'll just allow it for now. --- List of supported surfaces for seagrass and kelp -local surfaces = { - { "dirt", "mcl_core:dirt" }, - { "sand", "mcl_core:sand", 1 }, - { "redsand", "mcl_core:redsand", 1 }, - { "gravel", "mcl_core:gravel", 1 }, -} +local S = minetest.get_translator(minetest.get_current_modname()) +local mod_doc = minetest.get_modpath("doc") -local function get_kelp_top(pos, node) - local size = math.ceil(node.param2 / 16) - local pos_water = table.copy(pos) - pos_water.y = pos_water.y + size - return pos_water, minetest.get_node(pos_water) +-------------------------------------------------------------------------------- +-- local-ify runtime functions +-------------------------------------------------------------------------------- +-- objects +local mt_registered_items = minetest.registered_items +local mt_registered_nodes = minetest.registered_nodes + +-- functions +local mt_log = minetest.log +local mt_add_item = minetest.add_item +local mt_get_item_group = minetest.get_item_group +local mt_get_node = minetest.get_node +local mt_get_node_level = minetest.get_node_level +local mt_get_node_max_level = minetest.get_node_max_level +local mt_get_node_or_nil = minetest.get_node_or_nil +local mt_get_node_timer = minetest.get_node_timer +local mt_get_meta = minetest.get_meta +local mt_hash_node_position = minetest.hash_node_position +local mt_set_node = minetest.set_node +local mt_swap_node = minetest.swap_node +local mt_pos_to_string = minetest.pos_to_string +local mt_is_protected = minetest.is_protected +local mt_record_protection_violation = minetest.record_protection_violation + +local mt_is_creative_enabled = minetest.is_creative_enabled +local mt_sound_play = minetest.sound_play + +local math = math +--local string = string +local table = table + +-- DEBUG: functions +-- local log = minetest.log +-- local chatlog = minetest.chat_send_all + +-------------------------------------------------------------------------------- +-- Kelp API +-------------------------------------------------------------------------------- + +local kelp = {} +mcl_ocean.kelp = kelp + +-- Kelp minimum and maximum age. Once reached the maximum, kelp no longer grows. +kelp.MIN_AGE = 0 +kelp.MAX_AGE = 25 + +-- Tick interval (in seconds) for updating kelp. +kelp.TICK = 0.2 + +-- Tick interval (in seconds) to store kelp meta. +kelp.META_TICK = 2 + +-- Max age queue length +kelp.MAX_AGE_QUEUE = 20 + +-- The average amount of growth for kelp in a day is 2.16 (https://youtu.be/5Bp4lAjAk3I) +-- Normally, a day lasts 20 minutes, meaning kelp.next_grow() is executed +-- 1200 / TICK times. Per tick probability = (216/100) / (1200/TICK) +-- NOTE: currently, we can't exactly use the same type of randomness MC does, because +-- it has multiple complicated sets of PRNGs. +-- NOTE: Small loss of precision, should be 10 to preserve it. +-- kelp.ROLL_GROWTH_PRECISION = 10 +-- kelp.ROLL_GROWTH_NUMERATOR = 216 * kelp.TICK * kelp.ROLL_GROWTH_PRECISION +-- kelp.ROLL_GROWTH_DENOMINATOR = 100 * 1200 * kelp.ROLL_GROWTH_PRECISION +kelp.ROLL_GROWTH_PRECISION = 1 +kelp.ROLL_GROWTH_NUMERATOR = 216 * kelp.TICK +kelp.ROLL_GROWTH_DENOMINATOR = 100 * 1200 + +-- Sounds used to dig and place kelp. +kelp.leaf_sounds = mcl_sounds.node_sound_leaves_defaults() + +-- Pool storing nodetimers +kelp.timers_pool = {} + +-- Pool storing age, indexed by pos_hash. +kelp.age_pool = {} + +-- Queue(List) of hashed positions to save their ages. +-- Invalid ones may still persist in this queue. +kelp.age_queue = {} +-- Stores only valid positions of each hashed postiions. +kelp.age_queue_pos = {} + + +-- is age in the growable range? +function kelp.is_age_growable(age) + return age >= 0 and age < kelp.MAX_AGE end -local function get_submerged(node_water) - local def_water = minetest.registered_nodes[node_water.name] - -- Submerged in water? - if minetest.get_item_group(node_water.name, "water") then - if def_water.liquidtype == "source" then - return "source" - elseif def_water.liquidtype == "flowing" then - return "flowing" - end + +-- Is this water? +-- Returns the liquidtype, if indeed water. +function kelp.is_submerged(node) + if mt_get_item_group(node.name, "water") ~= 0 then + -- Expected only "source" and "flowing" from water liquids + return mt_registered_nodes[node.name].liquidtype end return false end -local function grow_param2_step(param2, snap_into_grid) - local old_param2 = param2 - param2 = param2 + 16 - if param2 > 240 then - param2 = 240 + +-- Is the water downward flowing? +-- (kelp can grow/be placed inside downward flowing water) +function kelp.is_downward_flowing(pos, node, pos_above, node_above, __is_above__) + -- Function params: (pos[, node]) or (node, pos_above) or (node, node_above) + local node = node or mt_get_node(pos) + + local result = (math.floor(node.param2 / 8) % 2) == 1 + if not (result or __is_above__) then + -- If not, also check node above. + -- (this is needed due a weird quirk in the definition of "downwards flowing" + -- liquids in Minetest) + local pos_above = pos_above or {x=pos.x,y=pos.y+1,z=pos.z} + local node_above = node_above or mt_get_node(pos_above) + result = kelp.is_submerged(node_above) + or kelp.is_downward_flowing(nil, node_above, nil, nil, true) end - if snap_into_grid and (param2 % 16 ~= 0) then - param2 = param2 - (param2 % 16) - end - return param2, param2 ~= old_param2 + return result end -local function kelp_check_place(pos_above, node_above, def_above) - if minetest.get_item_group(node_above.name, "water") == 0 then + +-- Will node fall at that position? +-- This only checks if a node would fall, meaning that node need not be at pos. +function kelp.is_falling(pos, node, is_falling, pos_bottom, node_bottom, def_bottom) + -- Optional params: is_falling, pos_bottom, node_bottom, def_bottom + + -- NOTE: Modified from check_single_for_falling in builtin. + -- Please update accordingly. + local nodename = node.name + + if is_falling == false or + is_falling == nil and mt_get_item_group(nodename, "falling_node") == 0 then return false end - local can_place = false - if (def_above.liquidtype == "source") then - can_place = true - elseif (def_above.liquidtype == "flowing") then - -- Check if bit 3 (downwards flowing) is set - can_place = (math.floor(node_above.param2 / 8) % 2) == 1 - if not can_place then - -- If not, also check node above (this is needed due a weird quirk in the definition of - -- "downwards flowing" liquids in Minetest) - local node_above_above = minetest.get_node({x=pos_above.x,y=pos_above.y+1,z=pos_above.z}) - local naa_def = minetest.registered_nodes[node_above_above.name] - can_place = naa_def.liquidtype == "source" - if not can_place then - can_place = (naa_def.liquidtype == "flowing") and ((math.floor(node_above_above.param2 / 8) % 2) == 1) - end - end + + local pos_bottom = pos_bottom or {x = pos.x, y = pos.y - 1, z = pos.z} + -- get_node_or_nil: Only fall if node below is loaded + local node_bottom = node_bottom or mt_get_node_or_nil(pos_bottom) + local nodename_bottom = node_bottom.name + local def_bottom = def_bottom or node_bottom and mt_registered_nodes[nodename_bottom] + if not def_bottom then + return false end - return can_place + + local same = nodename == nodename_bottom + -- Let leveled nodes fall if it can merge with the bottom node + if same and def_bottom.paramtype2 == "leveled" and + mt_get_node_level(pos_bottom) < + mt_get_node_max_level(pos_bottom) then + return true + end + + -- Otherwise only if the bottom node is considered "fall through" + if not same and + (not def_bottom.walkable or def_bottom.buildable_to) and + (mt_get_item_group(nodename, "float") == 0 or + def_bottom.liquidtype == "none") then + return true + end + + return false end -local function kelp_on_place(itemstack, placer, pointed_thing) + +-- Roll whether to grow kelp or not. +function kelp.roll_growth(numerator, denominator) + -- Optional params: numerator, denominator + return math.random(denominator or kelp.ROLL_GROWTH_DENOMINATOR) <= (numerator or kelp.ROLL_GROWTH_NUMERATOR) +end + + +-- Roll initial age for kelp. +function kelp.roll_init_age(min, max) + -- Optional params + return math.random(min or kelp.MIN_AGE, (max or kelp.MAX_AGE)-1) +end + + +-- Converts param2 to kelp height. +-- For the special case where the max param2 is reached, interpret that as the +-- 16th kelp stem. +function kelp.get_height(param2) + return math.floor(param2 / 16) + math.floor(param2 % 16 / 8) +end + + +-- Obtain pos and node of the tip of kelp. +function kelp.get_tip(pos, height) + -- Optional params: height + local height = height or kelp.get_height(mt_get_node(pos).param2) + local pos_tip = {x=pos.x, y=pos.y+height+1, z=pos.z} + return pos_tip, mt_get_node(pos_tip), height +end + + +-- Obtain position of the first kelp unsubmerged. +function kelp.find_unsubmerged(pos, node, height) + -- Optional params: node, height + local node = node or mt_get_node(pos) + local height = height or ((node.param2 >= 0 and node.param2 < 16) and 1) or kelp.get_height(node.param2) + + local walk_pos = {x=pos.x, z=pos.z} + local y = pos.y + for i=1,height do + walk_pos.y = y + i + local walk_node = mt_get_node(walk_pos) + if not kelp.is_submerged(walk_node) then + return walk_pos, walk_node, height, i + end + end + return nil, nil, height, height +end + + +-- Obtain next param2. +function kelp.next_param2(param2) + -- param2 max value is 255, so adding to 256 causes overflow. + return math.min(param2+16 - param2 % 16, 255); +end + + +-- Stores age from kelp.age_queue* into their respective meta +function kelp.store_meta() + local count = 0 + for _ in pairs(kelp.age_queue_pos) do + count = count + 1 + end + -- chatlog(string.format("Storing age metadata: %d in queue", #kelp.age_queue)) + -- chatlog(string.format("Storing age metadata: %d valid in queue", count)) + for i=1,#kelp.age_queue do + local pos_hash = kelp.age_queue[i] + local pos = kelp.age_queue_pos[pos_hash] + -- queued hashes may no longer point to a valid pos, e.g. kelp is destroyed. + if pos then + mt_get_meta(pos):set_int("mcl_ocean:kelp_age", kelp.age_pool[pos_hash]) + end + end + kelp.age_queue = {} + kelp.age_queue_pos = {} +end + + +-- Store and queue a kelp's age to be saved into meta later. +function kelp.store_age(age, pos, pos_hash) + -- Watched params: pos + -- Optional params: pos_hash + local pos_hash = pos_hash or mt_hash_node_position(pos) + + kelp.age_pool[pos_hash] = age + if not kelp.age_queue_pos[pos_hash] then + table.insert(kelp.age_queue, pos_hash) + kelp.age_queue_pos[pos_hash] = pos + return true, pos_hash + end + + return false, pos_hash +end + + +-- Initialise a kelp's age. +function kelp.init_age(pos, age, pos_hash, meta) + -- Watched params: pos + -- Optional params: age, pos_hash, meta + local pos_hash = pos_hash or mt_hash_node_position(pos) + local meta = meta or mt_get_meta(pos) + + local age = age + if age then + kelp.store_age(age, pos, pos_hash) + elseif not meta:contains("mcl_ocean:kelp_age") then + age = kelp.roll_init_age() + kelp.store_age(age, pos, pos_hash) + else + age = meta:get_int("mcl_ocean:kelp_age") + if not kelp.age_pool[pos_hash] then + kelp.age_pool[pos_hash] = age + end + end + + return age, pos_hash, meta +end + + +-- Initialise kelp nodetimer. +function kelp.init_timer(pos, pos_hash) + -- Optional params: pos_hash + local pos_hash = pos_hash or mt_hash_node_position(pos) + + local timer = kelp.timers_pool[pos_hash] + if not timer then + timer = mt_get_node_timer(pos) + kelp.timers_pool[pos_hash] = timer + end + if not timer:is_started() then + timer:start(kelp.TICK) + end + + return pos_hash +end + + +-- Apply next kelp height. The surface is swapped. so on_construct is skipped. +function kelp.next_height(pos, node, pos_tip, node_tip, submerged, downward_flowing) + -- Modified params: node + -- Optional params: node, set_node, pos_tip, node_tip, submerged, downward_flowing + local node = node or mt_get_node(pos) + local pos_tip = pos_tip + local node_tip = node_tip or (pos_tip and mt_get_node(pos_tip)) + if not pos_tip then + pos_tip,node_tip = kelp.get_tip(pos) + end + local downward_flowing = downward_flowing or + (submerged or kelp.is_submerged(node_tip) + and kelp.is_downward_flowing(pos_tip, node_tip)) + + -- Liquid source: Grow normally. + node.param2 = kelp.next_param2(node.param2) + mt_swap_node(pos, node) + + -- Flowing liquid: Grow 1 step, but also turn the tip node into a liquid source. + if downward_flowing then + local alt_liq = mt_registered_nodes[node_tip.name].liquid_alternative_source + if alt_liq then + mt_set_node(pos_tip, {name=alt_liq}) + end + end + + return node, pos_tip, node_tip, submerged, downward_flowing +end + + +-- Grow next kelp. +function kelp.next_grow(age, pos, node, pos_hash, pos_tip, node_tip, submerged, downward_flowing) + -- Watched params: pos + -- Modified params: node + -- Optional params: node, pos_hash, pos_tip, node_tip, submerged, downward_flowing + local node = node or mt_get_node(pos) + local pos_hash = pos_hash or mt_hash_node_position(pos) + local pos_tip = pos_tip + local node_tip = node_tip or (pos_tip and mt_get_node(pos_tip)) + if not pos_tip then + pos_tip,node_tip = kelp.get_tip(pos) + end + + -- New kelp must also be submerged in water. + local downward_flowing = downward_flowing or kelp.is_downward_flowing(pos_tip, node_tip) + if not (submerged or kelp.is_submerged(node_tip)) then + return + end + + kelp.next_height(pos, node, pos_tip, node_tip, submerged, downward_flowing) + + return kelp.store_age(age, pos, pos_hash), node, pos_hash, pos_tip, node_tip, submerged, downward_flowing +end + + +-- Drops the items for detached kelps. +function kelp.detach_drop(pos, height) + -- Optional params: height + local height = height or kelp.get_height(mt_get_node(pos).param2) + local y = pos.y + local walk_pos = {x=pos.x, z=pos.z} + for i=1,height do + walk_pos.y = y+i + mt_add_item(walk_pos, "mcl_ocean:kelp") + end + return true +end + + +-- Detach the kelp at dig_pos, and drop their items. +-- Synonymous to digging the kelp. +-- NOTE: this is intended for whenever kelp truly becomes segmented plants +-- instead of rooted to the floor. Don't try to remove dig_pos. +function kelp.detach_dig(dig_pos, pos, drop, node, height) + -- Optional params: drop, node, height + + local node = node or mt_get_node(pos) + local height = height or kelp.get_height(node.param2) + -- pos.y points to the surface, offset needed to point to the first kelp. + local new_height = dig_pos.y - (pos.y+1) + + -- Digs the entire kelp. + if new_height <= 0 then + if drop then + kelp.detach_drop(dig_pos, height) + end + mt_set_node(pos, { + name=mt_registered_nodes[node.name].node_dig_prediction, + param=node.param, + param2=0 }) + + -- Digs the kelp beginning at a height. + else + if drop then + kelp.detach_drop(dig_pos, height - new_height) + end + mt_swap_node(pos, {name=node.name, param=node.param, param2=16*new_height}) + end +end + + +-------------------------------------------------------------------------------- +-- Kelp callback functions +-------------------------------------------------------------------------------- + +function kelp.surface_on_dig(pos, node, digger) + kelp.detach_dig(pos, pos, true, node) +end + + +function kelp.surface_after_dig_node(pos, node) + return mt_set_node(pos, {name=minetest.registered_nodes[node.name].node_dig_prediction}) +end + + +function kelp.surface_on_timer(pos) + local node = mt_get_node(pos) + local pos_hash + + -- Update detahed kelps + local dig_pos,_, height = kelp.find_unsubmerged(pos, node) + if dig_pos then + pos_hash = mt_hash_node_position(pos) + mt_sound_play(mt_registered_nodes[node.name].sounds.dug, { gain = 0.5, pos = dig_pos }, true) + kelp.detach_dig(dig_pos, pos, true, node, height) + kelp.store_age(kelp.roll_init_age(), pos, pos_hash) + end + + -- Grow kelp on chance + if kelp.roll_growth() then + pos_hash = pos_hash or mt_hash_node_position(pos) + local age = kelp.age_pool[pos_hash] + if kelp.is_age_growable(age) then + kelp.next_grow(age+1, pos, node, pos_hash) + end + end + + return true +end + +function kelp.surface_on_construct(pos) + local pos_hash = mt_hash_node_position(pos) + kelp.init_age(pos, nil, pos_hash) + kelp.init_timer(pos, pos_hash) +end + + +function kelp.surface_on_destruct(pos) + local node = mt_get_node(pos) + local pos_hash = mt_hash_node_position(pos) + + -- on_falling callback. Activated by pistons for falling nodes too. + if kelp.is_falling(pos, node) then + kelp.detach_drop(pos, kelp.get_height(node.param2)) + end + + -- Removes position from queue + kelp.age_queue_pos[pos_hash] = nil +end + + + +function kelp.surface_on_mvps_move(pos, node, oldpos, nodemeta) + -- Pistons moving falling nodes will have already activated on_falling callback. + kelp.detach_dig(pos, pos, mt_get_item_group(node.name, "falling_node") ~= 1, node) +end + + +-- NOTE: Old ABM implementation. +-- local function surface_unsubmerged_abm(pos, node) +-- local dig_pos = find_unsubmerged(pos, node) +-- if dig_pos then +-- detach_dig(dig_pos, pos, node, true) +-- end +-- return true +-- end + + +function kelp.kelp_on_place(itemstack, placer, pointed_thing) if pointed_thing.type ~= "node" or not placer then return itemstack end @@ -73,183 +497,258 @@ local function kelp_on_place(itemstack, placer, pointed_thing) local player_name = placer:get_player_name() local pos_under = pointed_thing.under local pos_above = pointed_thing.above - local node_under = minetest.get_node(pos_under) - local node_above = minetest.get_node(pos_above) - local def_under = minetest.registered_nodes[node_under.name] - local def_above = minetest.registered_nodes[node_above.name] + local node_under = mt_get_node(pos_under) + local nu_name = node_under.name + local def_under = mt_registered_nodes[nu_name] + -- Allow rightclick to override place. if def_under and def_under.on_rightclick and not placer:get_player_control().sneak then return def_under.on_rightclick(pos_under, node_under, placer, itemstack, pointed_thing) or itemstack end - if minetest.is_protected(pos_under, player_name) or - minetest.is_protected(pos_above, player_name) then - minetest.log("action", player_name + -- Protection + if mt_is_protected(pos_under, player_name) or + mt_is_protected(pos_above, player_name) then + mt_log("action", player_name .. " tried to place " .. itemstack:get_name() .. " at protected position " - .. minetest.pos_to_string(pos_under)) - minetest.record_protection_violation(pos_under, player_name) + .. mt_pos_to_string(pos_under)) + mt_record_protection_violation(pos_under, player_name) return itemstack end - local grow_kelp = false - -- Select a kelp node when placed on surface node - if node_under.name == "mcl_core:dirt" then - node_under.name = "mcl_ocean:kelp_dirt" - elseif node_under.name == "mcl_core:sand" then - node_under.name = "mcl_ocean:kelp_sand" - elseif node_under.name == "mcl_core:redsand" then - node_under.name = "mcl_ocean:kelp_redsand" - elseif node_under.name == "mcl_core:gravel" then - node_under.name = "mcl_ocean:kelp_gravel" - elseif minetest.get_item_group(node_under.name, "kelp") == 1 then - -- Place kelp on kelp = grow kelp by 1 node length - node_under.param2, grow_kelp = grow_param2_step(node_under.param2) - if not grow_kelp then - return itemstack - end - else + + local pos_tip, node_tip, def_tip, new_surface, height + -- Kelp must also be placed on the top/tip side of the surface/kelp + if pos_under.y >= pos_above.y then return itemstack end - local submerged = false - if grow_kelp then - -- Kelp placed on kelp ... - -- Kelp can be placed on top of another kelp to make it grow - if pos_under.y >= pos_above.y or pos_under.x ~= pos_above.x or pos_under.z ~= pos_above.z then - -- Placed on side or below node, abort - return itemstack - end - -- New kelp top must also be submerged in water - local top_pos, top_node = get_kelp_top(pos_under, node_under) - local top_def = minetest.registered_nodes[top_node.name] - submerged = kelp_check_place(top_pos, top_node, top_def) - if not submerged then - -- Not submerged in water, abort - return itemstack - end + + -- When placed on kelp. + if mt_get_item_group(nu_name, "kelp") == 1 then + height = kelp.get_height(node_under.param2) + pos_tip,node_tip = kelp.get_tip(pos_under, height) + def_tip = mt_registered_nodes[node_tip.name] + + -- When placed on surface. else - -- New kelp placed ... - if pos_under.y >= pos_above.y then - -- Placed on side or below node, abort + new_surface = false + for _,surface in pairs(kelp.surfaces) do + if nu_name == surface.nodename then + node_under.name = "mcl_ocean:kelp_" ..surface.name + node_under.param2 = 0 + new_surface = true + break + end + end + -- Surface must support kelp + if not new_surface then return itemstack end - -- Kelp can be placed inside a water source or water flowing downwards on top of a surface node - local can_place = kelp_check_place(pos_above, node_above, def_above) - if not can_place then - return itemstack - end - node_under.param2 = minetest.registered_items[node_under.name].place_param2 or 16 + + pos_tip = pos_above + node_tip = mt_get_node(pos_above) + def_tip = mt_registered_nodes[node_tip.name] + height = 0 end - -- Place or grow kelp - local def_node = minetest.registered_items[node_under.name] + + -- Next kelp must also be submerged in water. + local downward_flowing = kelp.is_downward_flowing(pos_tip, node_tip) + local submerged = kelp.is_submerged(node_tip) + if not submerged then + return itemstack + end + + -- Play sound, place surface/kelp and take away an item + local def_node = mt_registered_items[nu_name] if def_node.sounds then - minetest.sound_play(def_node.sounds.place, { gain = 0.5, pos = pos_under }, true) + mt_sound_play(def_node.sounds.place, { gain = 0.5, pos = pos_under }, true) end - minetest.set_node(pos_under, node_under) - if not minetest.is_creative_enabled(player_name) then + -- TODO: get rid of rooted plantlike hack + if height < 16 then + kelp.next_height(pos_under, node_under, pos_tip, node_tip, def_tip, submerged, downward_flowing) + else + mt_add_item(pos_tip, "mcl_ocean:kelp") + end + if not mt_is_creative_enabled(player_name) then itemstack:take_item() end + -- Initialize age and timer when it's planted on a new surface. + local pos_hash = mt_hash_node_position(pos_under) + if new_surface then + kelp.init_age(pos_under, nil, pos_hash) + kelp.init_timer(pos_under, pos_hash) + else + kelp.store_age(kelp.roll_init_age(), pos_under, pos_hash) + end + return itemstack end -local get_kelp_height = function(param2) - return math.floor(param2 / 16) + +function kelp.lbm_register_nodetimer(pos, node) + local pos_hash = mt_hash_node_position(pos) + kelp.init_age(pos, nil, pos_hash) + kelp.init_timer(pos, pos_hash) end + +local gstep_time = 0 +function kelp.globalstep(dtime) + if #kelp.age_queue > kelp.MAX_AGE_QUEUE then + kelp.store_meta() + end + + gstep_time = gstep_time + dtime + if gstep_time < kelp.META_TICK then + return + end + gstep_time = 0 + + if #kelp.age_queue > 0 then + kelp.store_meta() + end +end + + +function kelp.on_shutdown() + if #kelp.age_queue > 0 then + kelp.store_meta() + end +end + +-------------------------------------------------------------------------------- +-- Kelp registration API +-------------------------------------------------------------------------------- + +-- List of supported surfaces for seagrass and kelp. +kelp.surfaces = { + { name="dirt", nodename="mcl_core:dirt", }, + { name="sand", nodename="mcl_core:sand", }, + { name="redsand", nodename="mcl_core:redsand", }, + { name="gravel", nodename="mcl_core:gravel", }, +} +kelp.registered_surfaces = {} + +-- Commented properties are the ones obtained using register_kelp_surface. +-- If you define your own properties, it overrides the default ones. +kelp.surface_deftemplate = { + drawtype = "plantlike_rooted", + paramtype = "light", + paramtype2 = "leveled", + place_param2 = 16, + --tiles = def.tiles, + special_tiles = { + { + image = "mcl_ocean_kelp_plant.png", + animation = {type="vertical_frames", aspect_w=16, aspect_h=16, length=2.0}, + tileable_vertical = true, + } + }, + --inventory_image = "("..def.tiles[1]..")^mcl_ocean_kelp_item.png", + wield_image = "mcl_ocean_kelp_item.png", + selection_box = { + type = "fixed", + fixed = { + { -0.5, -0.5, -0.5, 0.5, 0.5, 0.5 }, + { -0.5, 0.5, -0.5, 0.5, 1.5, 0.5 }, + }, + }, + -- groups.falling_node = is_falling, + groups = { dig_immediate = 3, deco_block = 1, plant = 1, kelp = 1, }, + --sounds = sounds, + --node_dig_prediction = nodename, + on_construct = kelp.surface_on_construct, + on_destruct = kelp.surface_on_destruct, + on_dig = kelp.surface_on_dig, + after_dig_node = kelp.surface_after_dig_node, + on_timer = kelp.surface_on_timer, + mesecon = { on_mvps_move = kelp.surface_on_mvps_move, }, + drop = "", -- drops are handled in on_dig + --_mcl_falling_node_alternative = is_falling and nodename or nil, + _mcl_hardness = 0, + _mcl_blast_resistance = 0, +} + +-- Commented properties are the ones obtained using register_kelp_surface. +kelp.surface_docs = { + -- entry_id_orig = nodename, + _doc_items_entry_name = S("Kelp"), + _doc_items_longdesc = S("Kelp grows inside water on top of dirt, sand or gravel."), + --_doc_items_create_entry = doc_create, + _doc_items_image = "mcl_ocean_kelp_item.png", +} + +-- Creates new surfaces. +-- NOTE: surface_deftemplate will be modified in-place. +function kelp.register_kelp_surface(surface, surface_deftemplate, surface_docs) + local name = surface.name + local nodename = surface.nodename + local def = mt_registered_nodes[nodename] + local def_tiles = def.tiles + + local surfacename = "mcl_ocean:kelp_"..name + local surface_deftemplate = surface_deftemplate or kelp.surface_deftemplate -- Optional param + + local doc_create = surface.doc_create or false + local surface_docs = surface_docs or kelp.surface_docs -- Optional param + + if doc_create then + surface_deftemplate._doc_items_entry_name = surface_docs._doc_items_entry_name + surface_deftemplate._doc_items_longdesc = surface_docs._doc_items_longdesc + surface_deftemplate._doc_items_create_entry = true + surface_deftemplate._doc_items_image = surface_docs._doc_items_image + -- Sets the first surface as the docs' entry ID + if not surface_docs.entry_id_orig then + surface_docs.entry_id_orig = nodename + end + elseif mod_doc then + doc.add_entry_alias("nodes", surface_docs.entry_id_orig, "nodes", surfacename) + end + + local sounds = table.copy(def.sounds) + sounds.dig = kelp.leaf_sounds.dig + sounds.dug = kelp.leaf_sounds.dug + sounds.place = kelp.leaf_sounds.place + + surface_deftemplate.tiles = surface_deftemplate.tiles or def_tiles + surface_deftemplate.inventory_image = surface_deftemplate.inventory_image or "("..def_tiles[1]..")^mcl_ocean_kelp_item.png" + surface_deftemplate.sounds = surface_deftemplate.sound or sounds + local falling_node = mt_get_item_group(nodename, "falling_node") + surface_deftemplate.node_dig_prediction = surface_deftemplate.node_dig_prediction or nodename + surface_deftemplate.groups.falling_node = surface_deftemplate.groups.falling_node or falling_node + surface_deftemplate._mcl_falling_node_alternative = surface_deftemplate._mcl_falling_node_alternative or (falling_node and nodename or nil) + + minetest.register_node(surfacename, surface_deftemplate) +end + +-- Kelp surfaces nodes --------------------------------------------------------- + +-- Dirt must be registered first, for the docs +kelp.register_kelp_surface(kelp.surfaces[1], table.copy(kelp.surface_deftemplate), kelp.surface_docs) +for i=2, #kelp.surfaces do + kelp.register_kelp_surface(kelp.surfaces[i], table.copy(kelp.surface_deftemplate), kelp.surface_docs) +end + +-- Kelp item ------------------------------------------------------------------- + minetest.register_craftitem("mcl_ocean:kelp", { description = S("Kelp"), _tt_help = S("Grows in water on dirt, sand, gravel"), _doc_items_create_entry = false, inventory_image = "mcl_ocean_kelp_item.png", wield_image = "mcl_ocean_kelp_item.png", - on_place = kelp_on_place, + on_place = kelp.kelp_on_place, groups = { deco_block = 1 }, }) --- Kelp nodes: kelp on a surface node - -for s=1, #surfaces do - local def = minetest.registered_nodes[surfaces[s][2]] - local alt - if surfaces[s][3] == 1 then - alt = surfaces[s][2] - end - local sounds = table.copy(def.sounds) - local leaf_sounds = mcl_sounds.node_sound_leaves_defaults() - sounds.dig = leaf_sounds.dig - sounds.dug = leaf_sounds.dug - sounds.place = leaf_sounds.place - local tt_help, doc_longdesc, doc_img, desc - if surfaces[s][1] == "dirt" then - doc_longdesc = S("Kelp grows inside water on top of dirt, sand or gravel.") - desc = S("Kelp") - doc_create = true - doc_img = "mcl_ocean_kelp_item.png" - else - doc_create = false - end - minetest.register_node("mcl_ocean:kelp_"..surfaces[s][1], { - _doc_items_entry_name = desc, - _doc_items_longdesc = doc_longdesc, - _doc_items_create_entry = doc_create, - _doc_items_image = doc_img, - drawtype = "plantlike_rooted", - paramtype = "light", - paramtype2 = "leveled", - place_param2 = 16, - tiles = def.tiles, - special_tiles = { - { - image = "mcl_ocean_kelp_plant.png", - animation = {type="vertical_frames", aspect_w=16, aspect_h=16, length=2.0}, - tileable_vertical = true, - } - }, - inventory_image = "("..def.tiles[1]..")^mcl_ocean_kelp_item.png", - wield_image = "mcl_ocean_kelp_item.png", - selection_box = { - type = "fixed", - fixed = { - { -0.5, -0.5, -0.5, 0.5, 0.5, 0.5 }, - { -0.5, 0.5, -0.5, 0.5, 1.5, 0.5 }, - }, - }, - groups = { dig_immediate = 3, deco_block = 1, plant = 1, kelp = 1, falling_node = surfaces[s][3] }, - sounds = sounds, - node_dig_prediction = surfaces[s][2], - after_dig_node = function(pos) - minetest.set_node(pos, {name=surfaces[s][2]}) - end, - on_dig = function(pos, node, digger) - -- Drop kelp as item; item count depends on height - local dname = "" - if digger then - dname = digger:get_player_name() - end - local creative = minetest.is_creative_enabled(dname) - if not creative then - minetest.add_item({x=pos.x, y=pos.y+1, z=pos.z}, "mcl_ocean:kelp "..get_kelp_height(node.param2)) - end - minetest.node_dig(pos, node, digger) - end, - drop = "", -- drops are handled in on_dig - _mcl_falling_node_alternative = alt, - _mcl_hardness = 0, - _mcl_blast_resistance = 0, - }) - - if mod_doc and surfaces[s][1] ~= "dirt" then - doc.add_entry_alias("nodes", "mcl_ocean:kelp_dirt", "nodes", "mcl_ocean:kelp_"..surfaces[s][1]) - end -end - if mod_doc then - doc.add_entry_alias("nodes", "mcl_ocean:kelp_dirt", "craftitems", "mcl_ocean:kelp") + doc.add_entry_alias("nodes", kelp.surface_docs.entry_id_orig, "craftitems", "mcl_ocean:kelp") end --- Dried kelp stuff +-- Dried kelp ------------------------------------------------------------------ -- TODO: This is supposed to be eaten very fast minetest.register_craftitem("mcl_ocean:dried_kelp", { @@ -260,22 +759,21 @@ minetest.register_craftitem("mcl_ocean:dried_kelp", { groups = { food = 2, eatable = 1 }, on_place = minetest.item_eat(1), on_secondary_use = minetest.item_eat(1), - groups = { food = 2, eatable = 1 }, _mcl_saturation = 0.6, }) -local mod_screwdriver = minetest.get_modpath("screwdriver") ~= nil + +local mod_screwdriver = minetest.get_modpath("screwdriver") local on_rotate if mod_screwdriver then on_rotate = screwdriver.rotate_3way end - minetest.register_node("mcl_ocean:dried_kelp_block", { description = S("Dried Kelp Block"), _doc_items_longdesc = S("A decorative block that serves as a great furnace fuel."), tiles = { "mcl_ocean_dried_kelp_top.png", "mcl_ocean_dried_kelp_bottom.png", "mcl_ocean_dried_kelp_side.png" }, - groups = { handy = 1, building_block = 1, flammable = 2, fire_encouragement = 30, fire_flammability = 60 }, + groups = { handy = 1, hoey = 1, building_block = 1, flammable = 2, fire_encouragement = 30, fire_flammability = 60 }, sounds = mcl_sounds.node_sound_leaves_defaults(), paramtype2 = "facedir", on_place = mcl_util.rotate_axis, @@ -310,32 +808,35 @@ minetest.register_craft({ burntime = 200, }) --- Grow kelp -minetest.register_abm({ - label = "Kelp growth", +-- Global registration ------------------------------------------------------------------------ + +minetest.register_lbm({ + label = "Kelp initialise", + name = "mcl_ocean:kelp_init", nodenames = { "group:kelp" }, - interval = 45, - chance = 12, - catch_up = false, - action = function(pos, node, active_object_count, active_object_count_wider) - local grown - -- Grow kelp by 1 node length if it would grow inside water - node.param2, grown = grow_param2_step(node.param2, true) - local top, top_node = get_kelp_top(pos, node) - local submerged = get_submerged(top_node) - if grown then - if submerged == "source" then - -- Liquid source: Grow normally - minetest.set_node(pos, node) - elseif submerged == "flowing" then - -- Flowing liquid: Grow 1 step, but also turn the top node into a liquid source - minetest.set_node(pos, node) - local def_liq = minetest.registered_nodes[top_node.name] - local alt_liq = def_liq and def_liq.liquid_alternative_source - if alt_liq then - minetest.set_node(top, {name=alt_liq}) - end - end - end - end, + run_at_every_load = true, -- so old kelps are also initialised + action = kelp.lbm_register_nodetimer, }) + + +minetest.register_globalstep(kelp.globalstep) +minetest.register_on_shutdown(kelp.on_shutdown) + +-- NOTE: Old ABM implementation. +-- minetest.register_abm({ +-- label = "Kelp drops", +-- nodenames = { "group:kelp" }, +-- interval = 1.0, +-- chance = 1, +-- catch_up = false, +-- action = surface_unsubmerged_abm, +-- }) +-- +-- minetest.register_abm({ +-- label = "Kelp growth", +-- nodenames = { "group:kelp" }, +-- interval = 45, +-- chance = 12, +-- catch_up = false, +-- action = grow_abm, +-- }) diff --git a/mods/ITEMS/mcl_ocean/locale/mcl_ocean.pl.tr b/mods/ITEMS/mcl_ocean/locale/mcl_ocean.pl.tr new file mode 100644 index 000000000..7c63e4959 --- /dev/null +++ b/mods/ITEMS/mcl_ocean/locale/mcl_ocean.pl.tr @@ -0,0 +1,60 @@ +# textdomain: mcl_ocean +Sea Lantern=Latarnia morska +Sea lanterns are decorative light sources which look great underwater but can be placed anywhere.=Latarnie morskie to dekoracyjne źródła światła, które wyglądają bardzo dobrze pod wodą, ale mogą być umieszczone gdziekolwiek. +Prismarine=Pryzmaryn +Prismarine is used as a building block. It slowly changes its color.=Pryzmaryn jest blokiem budowlanym. Powoli zmienia on swój kolor. +Prismarine Bricks=Pryzmarynowe cegły +Dark Prismarine=Ciemny pryzmaryn +Prismarine Crystals=Pryzmarynowe kryształy +Prismarine Shard=Pryzmarynowe odłamki +Dried Kelp=Suszone wodorosty +Dried Kelp Block=Blok suszonych wodorostów +Brain Coral Block=Blok mózgowatego koralowca +Brain Coral Fan=Wachlarz mózgowatego koralowca +Brain Coral=Mózgowaty koralowiec +Bubble Coral Block=Blok bąbelkowego koralowca +Bubble Coral Fan=Wachlarz bąbelkowego koralowca +Bubble Coral=Bąbelkowy koralowiec +Fire Coral Block=Blok ognistego koralowca +Fire Coral Fan=Wachlarz ognistego koralowca +Fire Coral=Ognisty koralowiec +Horn Coral Block=Blok rogatego koralowca +Horn Coral Fan=Wachlarz rogatego koralowca +Horn Coral=Rogaty koralowiec +Tube Coral Block=Blok rurkowatego koralowca +Tube Coral Fan=Wachlarz rurkowatego koralowca +Tube Coral=Rurkowaty koralowiec +Dead Brain Coral Block=Martwy blok mózgowatego koralowca +Dead Brain Coral Fan=Martwy wachlarz mózgowatego koralowca +Dead Brain Coral=Martwy mózgowaty koralowiec +Dead Bubble Coral Block=Martwy blok bąbelkowego koralowca +Dead Bubble Coral Fan=Martwy wachlarz bąbelkowego koralowca +Dead Bubble Coral=Martwy bąbelkowy koralowiec +Dead Fire Coral Block=Martwy blok ognistego koralowca +Dead Fire Coral Fan=Martwy wachlarz ognistego koralowca +Dead Fire Coral=Martwy ognisty koralowiec +Dead Horn Coral Block=Martwy blok rogatego koralowca +Dead Horn Coral Fan=Martwy wachlarz rogatego koralowca +Dead Horn Coral=Martwy rogaty koralowiec +Dead Tube Coral Block=Martwy blok rurkowatego koralowca +Dead Tube Coral Fan=Martwy wachlarz rurkowatego koralowca +Dead Tube Coral=Martwy rurkowaty koralowiec +Seagrass=Trawa morska +Kelp=Wodorosty +Kelp grows inside water on top of dirt, sand or gravel.=Wodorosty rosną w wodzie na ziemi, piasku i żwirze. +Coral blocks live in the oceans and need a water source next to them to survive. Without water, they die off.=Bloki koralowca żyją w oceanach i potrzebują źródła wody obok aby przeżyć. Bez wody obumierają. +Corals grow on top of coral blocks and need to be inside a water source to survive. Without water, it will die off, as well as the coral block below.=Koralowiec rośnie na blokach koralowca i musi być wewnątrz źródła wody aby przeżyć. Bez wody obumiera. +Corals fans grow on top of coral blocks and need to be inside a water source to survive. Without water, it will die off, as well as the coral block below.=Wachlarz koralowca rośnie na blokach koralowca i musi być wewnątrz źródła wody aby przeżyć. Bez wody obumiera zarówno on jak i blok koralowca pod nim. +Seagrass grows inside water on top of dirt, sand or gravel.=Trawa morska rośnie w wodzie na ziemi, piasku i żwirze. +A decorative block that serves as a great furnace fuel.=Blok dekoracyjny, który świetnie sprawdza się jako paliwo do pieca. +Dried kelp is a food item.=Suszone wodorosty jest przedmiotem do jedzenia. +Grows on coral block of same species=Rośnie na blokach koralowca tego samego gatunku. +Needs water to live=Potrzebuje wody do życia. +Grows in water on dirt, sand, gravel=Rośnie w wodzie na ziemi, piasku i żwirze. +Glows in the water=Świeci w wodzie +4 possible sizes=4 możliwe wielkości +Grows on dead brain coral block=Rośnie na martwych blokach mózgowatego koralowca +Sea Pickle=Iskrzyłuda +Sea pickles grow on dead brain coral blocks and provide light when underwater. They come in 4 sizes that vary in brightness.=Iskrzyłuda rośnie na martwych blokach mózgowatego koralowca i jest źródłem światła pod wodą. +It can only be placed on top of dead brain coral blocks. Placing a sea pickle on another sea pickle will make it grow and brighter.=Może być postawiona tylko na blokach mózgowatego koralowca. Postawienie iskrzyłuda na innej iskrzyłudzie sprawi, że się powiększy i będzie jaśniejsza. + diff --git a/mods/ITEMS/mcl_ocean/mod.conf b/mods/ITEMS/mcl_ocean/mod.conf index 664d8e1e8..9b639a7b0 100644 --- a/mods/ITEMS/mcl_ocean/mod.conf +++ b/mods/ITEMS/mcl_ocean/mod.conf @@ -1,2 +1,4 @@ name = mcl_ocean description = Includes various ocean nodes +depends = mcl_core, mcl_sounds, mcl_dye +optional_depends = doc, doc_items, screwdriver diff --git a/mods/ITEMS/mcl_ocean/prismarine.lua b/mods/ITEMS/mcl_ocean/prismarine.lua index 647e87fe1..e38b3e0a6 100644 --- a/mods/ITEMS/mcl_ocean/prismarine.lua +++ b/mods/ITEMS/mcl_ocean/prismarine.lua @@ -1,6 +1,6 @@ -- Nodes -local S = minetest.get_translator("mcl_ocean") +local S = minetest.get_translator(minetest.get_current_modname()) minetest.register_node("mcl_ocean:sea_lantern", { description = S("Sea Lantern"), @@ -12,8 +12,8 @@ minetest.register_node("mcl_ocean:sea_lantern", { drop = { max_items = 1, items = { - { items = {'mcl_ocean:prismarine_crystals 3'}, rarity = 2 }, - { items = {'mcl_ocean:prismarine_crystals 2'}} + { items = {"mcl_ocean:prismarine_crystals 3"}, rarity = 2 }, + { items = {"mcl_ocean:prismarine_crystals 2"}} } }, tiles = {{name="mcl_ocean_sea_lantern.png", animation={type="vertical_frames", aspect_w=32, aspect_h=32, length=1.25}}}, @@ -89,37 +89,37 @@ minetest.register_craftitem("mcl_ocean:prismarine_shard", { -- Crafting minetest.register_craft({ - output = 'mcl_ocean:sea_lantern', + output = "mcl_ocean:sea_lantern", recipe = { - {'mcl_ocean:prismarine_shard', 'mcl_ocean:prismarine_crystals', 'mcl_ocean:prismarine_shard'}, - {'mcl_ocean:prismarine_crystals', 'mcl_ocean:prismarine_crystals', 'mcl_ocean:prismarine_crystals'}, - {'mcl_ocean:prismarine_shard', 'mcl_ocean:prismarine_crystals', 'mcl_ocean:prismarine_shard'}, + {"mcl_ocean:prismarine_shard", "mcl_ocean:prismarine_crystals", "mcl_ocean:prismarine_shard"}, + {"mcl_ocean:prismarine_crystals", "mcl_ocean:prismarine_crystals", "mcl_ocean:prismarine_crystals"}, + {"mcl_ocean:prismarine_shard", "mcl_ocean:prismarine_crystals", "mcl_ocean:prismarine_shard"}, } }) minetest.register_craft({ - output = 'mcl_ocean:prismarine', + output = "mcl_ocean:prismarine", recipe = { - {'mcl_ocean:prismarine_shard', 'mcl_ocean:prismarine_shard'}, - {'mcl_ocean:prismarine_shard', 'mcl_ocean:prismarine_shard'}, + {"mcl_ocean:prismarine_shard", "mcl_ocean:prismarine_shard"}, + {"mcl_ocean:prismarine_shard", "mcl_ocean:prismarine_shard"}, } }) minetest.register_craft({ - output = 'mcl_ocean:prismarine_brick', + output = "mcl_ocean:prismarine_brick", recipe = { - {'mcl_ocean:prismarine_shard', 'mcl_ocean:prismarine_shard', 'mcl_ocean:prismarine_shard'}, - {'mcl_ocean:prismarine_shard', 'mcl_ocean:prismarine_shard', 'mcl_ocean:prismarine_shard'}, - {'mcl_ocean:prismarine_shard', 'mcl_ocean:prismarine_shard', 'mcl_ocean:prismarine_shard'}, + {"mcl_ocean:prismarine_shard", "mcl_ocean:prismarine_shard", "mcl_ocean:prismarine_shard"}, + {"mcl_ocean:prismarine_shard", "mcl_ocean:prismarine_shard", "mcl_ocean:prismarine_shard"}, + {"mcl_ocean:prismarine_shard", "mcl_ocean:prismarine_shard", "mcl_ocean:prismarine_shard"}, } }) minetest.register_craft({ - output = 'mcl_ocean:prismarine_dark', + output = "mcl_ocean:prismarine_dark", recipe = { - {'mcl_ocean:prismarine_shard', 'mcl_ocean:prismarine_shard', 'mcl_ocean:prismarine_shard'}, - {'mcl_ocean:prismarine_shard', 'mcl_dye:black', 'mcl_ocean:prismarine_shard'}, - {'mcl_ocean:prismarine_shard', 'mcl_ocean:prismarine_shard', 'mcl_ocean:prismarine_shard'}, + {"mcl_ocean:prismarine_shard", "mcl_ocean:prismarine_shard", "mcl_ocean:prismarine_shard"}, + {"mcl_ocean:prismarine_shard", "mcl_dye:black", "mcl_ocean:prismarine_shard"}, + {"mcl_ocean:prismarine_shard", "mcl_ocean:prismarine_shard", "mcl_ocean:prismarine_shard"}, } }) diff --git a/mods/ITEMS/mcl_ocean/sea_pickle.lua b/mods/ITEMS/mcl_ocean/sea_pickle.lua index 45b934a92..d215fd3b3 100644 --- a/mods/ITEMS/mcl_ocean/sea_pickle.lua +++ b/mods/ITEMS/mcl_ocean/sea_pickle.lua @@ -1,5 +1,6 @@ -local S = minetest.get_translator("mcl_ocean") -local mod_doc = minetest.get_modpath("doc") ~= nil +local S = minetest.get_translator(minetest.get_current_modname()) + +local mod_doc = minetest.get_modpath("doc") local function sea_pickle_on_place(itemstack, placer, pointed_thing) if pointed_thing.type ~= "node" or not placer then @@ -12,7 +13,7 @@ local function sea_pickle_on_place(itemstack, placer, pointed_thing) local node_under = minetest.get_node(pos_under) local node_above = minetest.get_node(pos_above) local def_under = minetest.registered_nodes[node_under.name] - local def_above = minetest.registered_nodes[node_above.name] + --local def_above = minetest.registered_nodes[node_above.name] if def_under and def_under.on_rightclick and not placer:get_player_control().sneak then return def_under.on_rightclick(pos_under, node_under, diff --git a/mods/ITEMS/mcl_ocean/seagrass.lua b/mods/ITEMS/mcl_ocean/seagrass.lua index 492205138..5fd382775 100644 --- a/mods/ITEMS/mcl_ocean/seagrass.lua +++ b/mods/ITEMS/mcl_ocean/seagrass.lua @@ -1,5 +1,6 @@ -local S = minetest.get_translator("mcl_ocean") -local mod_doc = minetest.get_modpath("doc") ~= nil +local S = minetest.get_translator(minetest.get_current_modname()) + +local mod_doc = minetest.get_modpath("doc") -- List of supported surfaces for seagrass local surfaces = { @@ -105,7 +106,7 @@ for s=1, #surfaces do doc_longdesc = S("Seagrass grows inside water on top of dirt, sand or gravel.") desc = S("Seagrass") doc_create = true - doc_img = "mcl_ocean_seagrass.png" + doc_img = "mcl_ocean_seagrass.png^[verticalframe:12:0" else doc_create = false end @@ -113,7 +114,7 @@ for s=1, #surfaces do _doc_items_entry_name = desc, _doc_items_longdesc = doc_longdesc, _doc_items_create_entry = doc_create, - _doc_items_image = "mcl_ocean_seagrass.png^[verticalframe:12:0", + _doc_items_image = doc_img, drawtype = "plantlike_rooted", paramtype = "light", paramtype2 = "meshoptions", diff --git a/mods/ITEMS/mcl_portals/depends.txt b/mods/ITEMS/mcl_portals/depends.txt deleted file mode 100644 index f794e5f9c..000000000 --- a/mods/ITEMS/mcl_portals/depends.txt +++ /dev/null @@ -1,9 +0,0 @@ -mcl_init -mcl_worlds -mcl_core -mcl_nether -mcl_end -mcl_particles -mcl_spawn -awards? -doc? diff --git a/mods/ITEMS/mcl_portals/description.txt b/mods/ITEMS/mcl_portals/description.txt deleted file mode 100644 index fe84531f3..000000000 --- a/mods/ITEMS/mcl_portals/description.txt +++ /dev/null @@ -1 +0,0 @@ -Adds buildable portals to the Nether and End dimensions. diff --git a/mods/ITEMS/mcl_portals/init.lua b/mods/ITEMS/mcl_portals/init.lua index 2fd96afad..972e93473 100644 --- a/mods/ITEMS/mcl_portals/init.lua +++ b/mods/ITEMS/mcl_portals/init.lua @@ -1,12 +1,18 @@ -- Load files -mcl_portals = {} +mcl_portals = { + storage = minetest.get_mod_storage(), +} + +local modpath = minetest.get_modpath(minetest.get_current_modname()) -- Nether portal: -- Obsidian frame, activated by flint and steel -dofile(minetest.get_modpath("mcl_portals").."/portal_nether.lua") +dofile(modpath.."/portal_nether.lua") -- End portal (W.I.P): -- Red nether brick block frame, activated by an eye of ender -dofile(minetest.get_modpath("mcl_portals").."/portal_end.lua") +dofile(modpath.."/portal_end.lua") + +dofile(modpath.."/portal_gateway.lua") diff --git a/mods/ITEMS/mcl_portals/locale/mcl_portals.pl.tr b/mods/ITEMS/mcl_portals/locale/mcl_portals.pl.tr new file mode 100644 index 000000000..18d9b4b7b --- /dev/null +++ b/mods/ITEMS/mcl_portals/locale/mcl_portals.pl.tr @@ -0,0 +1,15 @@ +# textdomain: mcl_portals +End Portal=Portal Kresu +An End portal teleports creatures and objects to the mysterious End dimension (and back!).=Portal Kresu teleportuje osoby i rzeczy do tajemniczego wymiaru Kresu (i z powrotem!). +Hop into the portal to teleport. Entering an End portal in the Overworld teleports you to a fixed position in the End dimension and creates a 5×5 obsidian platform at your destination. End portals in the End will lead back to your spawn point in the Overworld.=Wskocz do portalu by się teleportować. Wejście do portalu Kresu na Powierzchni przeniesie cię do ustalonej pozycji w wymiarze Kresu i tworzy obsydianową platformę 5×5 w tym miejscu. Portal Kresu w Kresie przeniesie cię do twojego miejsca odradzania. +End Portal Frame=Rama portalu Kresu +End portal frames are used in the construction of End portals. Each block has a socket for an eye of ender.=Ramy portalu Kresu są wykorzystywane do konstrukcji portali Kresu. Każdy blok ma miejsce na oko Kresu. +NOTE: The End dimension is currently incomplete and might change in future versions.=UWAGA: Wymiar Kresu jest aktualnie nieukończony i może się zmienić w przyszłych wersjach. +End Portal Frame with Eye of Ender=Rama portalu Kresu z okiem Kresu. +Nether Portal=Portal Netheru +A Nether portal teleports creatures and objects to the hot and dangerous Nether dimension (and back!). Enter at your own risk!=Portal Netheru teleportuje osoby i obiekty do gorącego i niebezpiecznego wymiaru Nether (i z powrotem!). Wejdź na własne ryzyko! +Stand in the portal for a moment to activate the teleportation. Entering a Nether portal for the first time will also create a new portal in the other dimension. If a Nether portal has been built in the Nether, it will lead to the Overworld. A Nether portal is destroyed if the any of the obsidian which surrounds it is destroyed, or if it was caught in an explosion.=Stań w portalu na krótki moment aby aktywować teleport. Wejście przez portal Netheru po raz pierwszy stworzy również nowy portal w drugim wymiarze. Jeśli portal Netheru został zbudowany w Netherze będzie prowadził z powrotem na Powierzchnię. Portal Netheru przestanie działać jeśli któryś z otaczających go bloków obsydianu zostanie zniszczony lub gdy dosięgnie go wybuch. +Obsidian is also used as the frame of Nether portals.=Obsydian jest również wykorzystywany do budowania portali Netheru. +To open a Nether portal, place an upright frame of obsidian with a width of at least 4 blocks and a height of 5 blocks, leaving only air in the center. After placing this frame, light a fire in the obsidian frame. Nether portals only work in the Overworld and the Nether.=Aby otworzyć portal Netheru umieść ramę z obsydianu o szerokości co najmniej 4 i wysokości 5 bloków, zostawiając tylko powietrze wewnątrz. Po postawieniu tej ramy rozpal ogień wewnątrz ramy. Portale Netheru działają tylko w Netherze i na Powierzchni. +Once placed, an eye of ender can not be taken back.=Raz umieszczone oko Kresu nie może być odzyskane +Used to construct end portals=Używane do konstrukcji portali Kresu diff --git a/mods/ITEMS/mcl_portals/mod.conf b/mods/ITEMS/mcl_portals/mod.conf index e82fbe6c1..610b590c6 100644 --- a/mods/ITEMS/mcl_portals/mod.conf +++ b/mods/ITEMS/mcl_portals/mod.conf @@ -1 +1,4 @@ name = mcl_portals +description = Adds buildable portals to the Nether and End dimensions. +depends = mcl_nether, mcl_end, mcl_particles, mcl_spawn, mcl_credits +optional_depends = awards, doc diff --git a/mods/ITEMS/mcl_portals/portal_end.lua b/mods/ITEMS/mcl_portals/portal_end.lua index 5919ef213..e4982c39b 100644 --- a/mods/ITEMS/mcl_portals/portal_end.lua +++ b/mods/ITEMS/mcl_portals/portal_end.lua @@ -1,12 +1,18 @@ -local S = minetest.get_translator("mcl_portals") +local S = minetest.get_translator(minetest.get_current_modname()) + +local table = table +local vector = vector +local math = math + +local has_doc = minetest.get_modpath("doc") -- Parameters -local SPAWN_MIN = mcl_vars.mg_end_min+70 -local SPAWN_MAX = mcl_vars.mg_end_min+98 +--local SPAWN_MIN = mcl_vars.mg_end_min+70 +--local SPAWN_MAX = mcl_vars.mg_end_min+98 -local mg_name = minetest.get_mapgen_setting("mg_name") +--local mg_name = minetest.get_mapgen_setting("mg_name") -local destroy_portal = function(pos) +local function destroy_portal(pos) local neighbors = { { x=1, y=0, z=0 }, { x=-1, y=0, z=0 }, @@ -66,7 +72,7 @@ minetest.register_node("mcl_portals:portal_end", { drawtype = "nodebox", paramtype = "light", sunlight_propagates = true, - use_texture_alpha = true, + use_texture_alpha = minetest.features.use_texture_alpha_string_modes and "blend" or true, walkable = false, diggable = false, pointable = false, @@ -76,7 +82,6 @@ minetest.register_node("mcl_portals:portal_end", { -- This is 15 in MC. light_source = 14, post_effect_color = {a = 192, r = 0, g = 0, b = 0}, - alpha = 192, after_destruct = destroy_portal, -- This prevents “falling through” collision_box = { @@ -197,7 +202,6 @@ function mcl_portals.end_teleport(obj, pos) end end - local platform build_end_portal_destination(platform_pos) check_and_build_end_portal_destination(platform_pos) @@ -212,6 +216,9 @@ function mcl_portals.end_teleport(obj, pos) -- Look towards the main End island if dim ~= "end" then obj:set_look_horizontal(math.pi/2) + -- Show credits + else + mcl_credits.show(obj) end mcl_worlds.dimension_change(obj, mcl_worlds.pos_to_dimension(target)) minetest.sound_play("mcl_portals_teleport", {pos=target, gain=0.5, max_hear_distance = 16}, true) @@ -219,7 +226,7 @@ function mcl_portals.end_teleport(obj, pos) end function mcl_portals.end_portal_teleport(pos, node) - for _,obj in ipairs(minetest.get_objects_inside_radius(pos, 1)) do + for _,obj in pairs(minetest.get_objects_inside_radius(pos, 1)) do local lua_entity = obj:get_luaentity() --maikerumine added for objects to travel if obj:is_player() or lua_entity then local objpos = obj:get_pos() @@ -277,6 +284,7 @@ minetest.register_node("mcl_portals:end_portal_frame", { _doc_items_usagehelp = S("To create an End portal, you need 12 end portal frames and 12 eyes of ender. The end portal frames have to be arranged around a horizontal 3×3 area with each block facing inward. Any other arrangement will fail.") .. "\n" .. S("Place an eye of ender into each block. The end portal appears in the middle after placing the final eye.") .. "\n" .. S("Once placed, an eye of ender can not be taken back."), groups = { creative_breakable = 1, deco_block = 1, end_portal_frame = 1 }, tiles = { "mcl_portals_endframe_top.png", "mcl_portals_endframe_bottom.png", "mcl_portals_endframe_side.png" }, + use_texture_alpha = minetest.features.use_texture_alpha_string_modes and "opaque" or false, paramtype2 = "facedir", drawtype = "nodebox", node_box = { @@ -301,8 +309,9 @@ minetest.register_node("mcl_portals:end_portal_frame_eye", { description = S("End Portal Frame with Eye of Ender"), _tt_help = S("Used to construct end portals"), _doc_items_create_entry = false, - groups = { creative_breakable = 1, deco_block = 1, comparator_signal = 15, end_portal_frame = 2 }, + groups = { creative_breakable = 1, deco_block = 1, comparator_signal = 15, end_portal_frame = 2, not_in_creative_inventory = 1 }, tiles = { "mcl_portals_endframe_top.png^[lowpart:75:mcl_portals_endframe_eye.png", "mcl_portals_endframe_bottom.png", "mcl_portals_endframe_eye.png^mcl_portals_endframe_side.png" }, + use_texture_alpha = minetest.features.use_texture_alpha_string_modes and "opaque" or false, paramtype2 = "facedir", drawtype = "nodebox", node_box = { @@ -332,7 +341,7 @@ minetest.register_node("mcl_portals:end_portal_frame_eye", { _mcl_hardness = -1, }) -if minetest.get_modpath("doc") then +if has_doc then doc.add_entry_alias("nodes", "mcl_portals:end_portal_frame", "nodes", "mcl_portals:end_portal_frame_eye") end @@ -359,7 +368,7 @@ minetest.override_item("mcl_end:ender_eye", { end minetest.set_node(pointed_thing.under, { name = "mcl_portals:end_portal_frame_eye", param2 = node.param2 }) - if minetest.get_modpath("doc") then + if has_doc then doc.mark_entry_as_revealed(user:get_player_name(), "nodes", "mcl_portals:end_portal_frame") end minetest.sound_play( @@ -374,7 +383,7 @@ minetest.override_item("mcl_end:ender_eye", { -- Epic 'portal open' sound effect that can be heard everywhere minetest.sound_play("mcl_portals_open_end_portal", {gain=0.8}, true) end_portal_area(ppos) - if minetest.get_modpath("doc") then + if has_doc then doc.mark_entry_as_revealed(user:get_player_name(), "nodes", "mcl_portals:portal_end") end end @@ -382,7 +391,3 @@ minetest.override_item("mcl_end:ender_eye", { return itemstack end, }) -minetest.override_item("mcl_core:bedrock", { - after_destruct = destroy_portal, -}) - diff --git a/mods/ITEMS/mcl_portals/portal_gateway.lua b/mods/ITEMS/mcl_portals/portal_gateway.lua new file mode 100644 index 000000000..ca15a61d5 --- /dev/null +++ b/mods/ITEMS/mcl_portals/portal_gateway.lua @@ -0,0 +1,121 @@ +local S = minetest.get_translator(minetest.get_current_modname()) +local storage = mcl_portals.storage + +local vector = vector + +local gateway_positions = { + {x = 96, y = -26925, z = 0}, + {x = 91, y = -26925, z = 29}, + {x = 77, y = -26925, z = 56}, + {x = 56, y = -26925, z = 77}, + {x = 29, y = -26925, z = 91}, + {x = 0, y = -26925, z = 96}, + {x = -29, y = -26925, z = 91}, + {x = -56, y = -26925, z = 77}, + {x = -77, y = -26925, z = 56}, + {x = -91, y = -26925, z = 29}, + {x = -96, y = -26925, z = 0}, + {x = -91, y = -26925, z = -29}, + {x = -77, y = -26925, z = -56}, + {x = -56, y = -26925, z = -77}, + {x = -29, y = -26925, z = -91}, + {x = 0, y = -26925, z = -96}, + {x = 29, y = -26925, z = -91}, + {x = 56, y = -26925, z = -77}, + {x = 77, y = -26925, z = -56}, + {x = 91, y = -26925, z = -29}, +} + +local path_gateway_portal = minetest.get_modpath("mcl_structures").."/schematics/mcl_structures_end_gateway_portal.mts" + +local function spawn_gateway_portal(pos, dest_str) + return mcl_structures.place_schematic(vector.add(pos, vector.new(-1, -2, -1)), path_gateway_portal, "0", nil, true, nil, dest_str and function() + minetest.get_meta(pos):set_string("mcl_portals:gateway_destination", dest_str) + end) +end + +function mcl_portals.spawn_gateway_portal() + local id = storage:get_int("gateway_last_id") + 1 + local pos = gateway_positions[id] + if not pos then return end + storage:set_int("gateway_last_id", id) + spawn_gateway_portal(pos) +end + +local gateway_def = table.copy(minetest.registered_nodes["mcl_portals:portal_end"]) +gateway_def.description = S("End Gateway Portal") +gateway_def._tt_help = S("Used to construct end gateway portals") +gateway_def._doc_items_longdesc = S("An End gateway portal teleports creatures and objects to the outer End (and back!).") +gateway_def._doc_items_usagehelp = S("Throw an ender pearl into the portal to teleport. Entering an Gateway portal near the Overworld teleports you to the outer End. At this destination another gateway portal will be constructed, which you can use to get back.") +gateway_def.after_destruct = nil +gateway_def.drawtype = "normal" +gateway_def.node_box = nil +gateway_def.walkable = true +gateway_def.tiles[3] = nil +minetest.register_node("mcl_portals:portal_gateway", gateway_def) + +local function find_destination_pos(minp, maxp) + for y = maxp.y, minp.y, -1 do + for x = maxp.x, minp.x, -1 do + for z = maxp.z, minp.z, -1 do + local pos = vector.new(x, y, z) + local nn = minetest.get_node(pos).name + if nn ~= "ignore" and nn ~= "mcl_portals:portal_gateway" and nn ~= "mcl_core:bedrock" then + local def = minetest.registered_nodes[nn] + if def and def.walkable then + return vector.add(pos, vector.new(0, 1.5, 0)) + end + end + end + end + end +end + +local preparing = {} + +local function teleport(pos, obj) + local meta = minetest.get_meta(pos) + local dest_portal + local dest_str = meta:get_string("mcl_portals:gateway_destination") + local pos_str = minetest.pos_to_string(pos) + if dest_str == "" then + dest_portal = vector.multiply(vector.direction(vector.new(0, pos.y, 0), pos), math.random(768, 1024)) + dest_portal.y = -26970 + spawn_gateway_portal(dest_portal, pos_str) + meta:set_string("mcl_portals:gateway_destination", minetest.pos_to_string(dest_portal)) + else + dest_portal = minetest.string_to_pos(dest_str) + end + local minp = vector.subtract(dest_portal, vector.new(5, 40, 5)) + local maxp = vector.add(dest_portal, vector.new(5, 10, 5)) + preparing[pos_str] = true + minetest.emerge_area(minp, maxp, function(blockpos, action, calls_remaining, param) + if calls_remaining < 1 then + if obj and obj:is_player() or obj:get_luaentity() then + obj:set_pos(find_destination_pos(minp, maxp) or vector.add(dest_portal, vector.new(0, 3.5, 0))) + end + preparing[pos_str] = false + end + end) +end + +minetest.register_abm({ + label = "End gateway portal teleportation", + nodenames = {"mcl_portals:portal_gateway"}, + interval = 0.1, + chance = 1, + action = function(pos) + if preparing[minetest.pos_to_string(pos)] then return end + for _, obj in pairs(minetest.get_objects_inside_radius(pos, 1)) do + if obj:get_hp() > 0 then + local luaentity = obj:get_luaentity() + if luaentity and luaentity.name == "mcl_throwing:ender_pearl" then + obj:remove() + obj = luaentity._thrower + end + teleport(pos, obj) + return + end + end + end, +}) diff --git a/mods/ITEMS/mcl_portals/portal_nether.lua b/mods/ITEMS/mcl_portals/portal_nether.lua index d35520015..3f15a134d 100644 --- a/mods/ITEMS/mcl_portals/portal_nether.lua +++ b/mods/ITEMS/mcl_portals/portal_nether.lua @@ -1,78 +1,220 @@ -local S = minetest.get_translator("mcl_portals") +local S = minetest.get_translator(minetest.get_current_modname()) --- Parameters +local SCAN_2_MAP_CHUNKS = true -- slower but helps to find more suitable places -local OVERWORLD_TO_NETHER_SCALE = 8 -local LIMIT = math.min(math.abs(mcl_vars.mapgen_edge_min), math.abs(mcl_vars.mapgen_edge_max)) +-- Localize functions for better performance +local abs = math.abs +local ceil = math.ceil +local floor = math.floor +local max = math.max +local min = math.min +local random = math.random +local dist = vector.distance +local add = vector.add +local mul = vector.multiply +local sub = vector.subtract --- Portal frame sizes -local FRAME_SIZE_X_MIN = 4 -local FRAME_SIZE_Y_MIN = 5 -local FRAME_SIZE_X_MAX = 23 -local FRAME_SIZE_Y_MAX = 23 +-- Setup +local W_MIN, W_MAX = 4, 23 +local H_MIN, H_MAX = 5, 23 +local N_MIN, N_MAX = 6, (W_MAX-2) * (H_MAX-2) +local TRAVEL_X, TRAVEL_Y, TRAVEL_Z = 8, 1, 8 +local LIM_MIN, LIM_MAX = mcl_vars.mapgen_edge_min, mcl_vars.mapgen_edge_max +local PLAYER_COOLOFF, MOB_COOLOFF = 3, 14 -- for this many seconds they won't teleported again +local TOUCH_CHATTER_TIME = 1 -- prevent multiple teleportation attempts caused by multiple portal touches, for this number of seconds +local CHATTER_US = TOUCH_CHATTER_TIME * 1000000 +local DELAY = 3 -- seconds before teleporting in Nether portal in Survival mode (4 minus ABM interval time) +local DISTANCE_MAX = 128 +local PORTAL = "mcl_portals:portal" +local OBSIDIAN = "mcl_core:obsidian" +local O_Y_MIN, O_Y_MAX = max(mcl_vars.mg_overworld_min, -31), min(mcl_vars.mg_overworld_max, 2048) +local N_Y_MIN, N_Y_MAX = mcl_vars.mg_bedrock_nether_bottom_min, mcl_vars.mg_bedrock_nether_top_min - H_MIN -local PORTAL_NODES_MIN = 5 -local PORTAL_NODES_MAX = (FRAME_SIZE_X_MAX - 2) * (FRAME_SIZE_Y_MAX - 2) - -local TELEPORT_COOLOFF = 3 -- after player was teleported, for this many seconds they won't teleported again -local MOB_TELEPORT_COOLOFF = 14 -- after mob was teleported, for this many seconds they won't teleported again -local TOUCH_CHATTER_TIME = 1 -- prevent multiple teleportation attempts caused by multiple portal touches, for this number of seconds -local TOUCH_CHATTER_TIME_US = TOUCH_CHATTER_TIME * 1000000 -local TELEPORT_DELAY = 3 -- seconds before teleporting in Nether portal (4 minus ABM interval time) -local DESTINATION_EXPIRES = 60 * 1000000 -- cached destination expires after this number of microseconds have passed without using the same origin portal - -local PORTAL_SEARCH_HALF_CHUNK = 40 -- greater values may slow down the teleportation -local PORTAL_SEARCH_ALTITUDE = 128 +-- Alpha and particles +local node_particles_allowed = minetest.settings:get("mcl_node_particles") or "none" +local node_particles_levels = { none=0, low=1, medium=2, high=3 } +local PARTICLES = node_particles_levels[node_particles_allowed] -- Table of objects (including players) which recently teleported by a -- Nether portal. Those objects have a brief cooloff period before they -- can teleport again. This prevents annoying back-and-forth teleportation. -mcl_portals.nether_portal_cooloff = {} -local touch_chatter_prevention = {} +local cooloff = {} +function mcl_portals.nether_portal_cooloff(object) + return cooloff[object] +end -local overworld_ymin = math.max(mcl_vars.mg_overworld_min, -31) -local overworld_ymax = math.min(mcl_vars.mg_overworld_max_official, 63) -local nether_ymin = mcl_vars.mg_bedrock_nether_bottom_min -local nether_ymax = mcl_vars.mg_bedrock_nether_top_max -local overworld_dy = overworld_ymax - overworld_ymin + 1 -local nether_dy = nether_ymax - nether_ymin + 1 +local chatter = {} -local node_particles_allowed = minetest.settings:get("mcl_node_particles") or "none" -local node_particles_levels = { - high = 3, - medium = 2, - low = 1, - none = 0, +local queue = {} +local chunks = {} + +local storage = mcl_portals.storage +local exits = {} +local keys = minetest.deserialize(storage:get_string("nether_exits_keys") or "return {}") or {} +for _, key in pairs(keys) do + local n = tonumber(key) + if n then + exits[key] = minetest.deserialize(storage:get_string("nether_exits_"..key) or "return {}") or {} + end +end +minetest.register_on_shutdown(function() + local keys={} + for key, data in pairs(exits) do + storage:set_string("nether_exits_"..tostring(key), minetest.serialize(data)) + keys[#keys+1] = key + end + storage:set_string("nether_exits_keys", minetest.serialize(keys)) +end) + +local get_node = mcl_vars.get_node +local set_node = minetest.set_node +local registered_nodes = minetest.registered_nodes +local is_protected = minetest.is_protected +local find_nodes_in_area = minetest.find_nodes_in_area +local find_nodes_in_area_under_air = minetest.find_nodes_in_area_under_air +local log = minetest.log +local pos_to_string = minetest.pos_to_string +local is_area_protected = minetest.is_area_protected +local get_us_time = minetest.get_us_time + +local dimension_to_teleport = { nether = "overworld", overworld = "nether" } + +local limits = { + nether = { + pmin = {x=LIM_MIN, y = N_Y_MIN, z = LIM_MIN}, + pmax = {x=LIM_MAX, y = N_Y_MAX, z = LIM_MAX}, + }, + overworld = { + pmin = {x=LIM_MIN, y = O_Y_MIN, z = LIM_MIN}, + pmax = {x=LIM_MAX, y = O_Y_MAX, z = LIM_MAX}, + }, } -local node_particles_allowed_level = node_particles_levels[node_particles_allowed] + +-- This function registers exits from Nether portals. +-- Incoming verification performed: two nodes must be portal nodes, and an obsidian below them. +-- If the verification passes - position adds to the table and saves to mod storage on exit. +local function add_exit(p) + if not p or not p.y or not p.z or not p.x then return end + local x, y, z = floor(p.x), floor(p.y), floor(p.z) + local p = {x = x, y = y, z = z} + if get_node({x=x,y=y-1,z=z}).name ~= OBSIDIAN or get_node(p).name ~= PORTAL or get_node({x=x,y=y+1,z=z}).name ~= PORTAL then return end + local k = floor(z/256) * 256 + floor(x/256) + if not exits[k] then + exits[k]={} + end + local e = exits[k] + for i = 1, #e do + local t = e[i] + if t and t.x == p.x and t.y == p.y and t.z == p.z then + return + end + end + e[#e+1] = p + log("action", "[mcl_portals] Exit added at " .. pos_to_string(p)) +end + +-- This function removes Nether portals exits. +local function remove_exit(p) + if not p or not p.y or not p.z or not p.x then return end + local x, y, z = floor(p.x), floor(p.y), floor(p.z) + local k = floor(z/256) * 256 + floor(x/256) + if not exits[k] then return end + local p = {x = x, y = y, z = z} + local e = exits[k] + if e then + for i, t in pairs(e) do + if t and t.x == x and t.y == y and t.z == z then + e[i] = nil + log("action", "[mcl_portals] Nether portal removed from " .. pos_to_string(p)) + return + end + end + end +end + +-- This functon searches Nether portal nodes whitin distance specified +local function find_exit(p, dx, dy, dz) + if not p or not p.y or not p.z or not p.x then return end + local dx, dy, dz = dx or DISTANCE_MAX, dy or DISTANCE_MAX, dz or DISTANCE_MAX + if dx < 1 or dy < 1 or dz < 1 then return false end + + --y values aren't used + local x = floor(p.x) + --local y = floor(p.y) + local z = floor(p.z) + + local x1 = x-dx+1 + --local y1 = y-dy+1 + local z1 = z-dz+1 + + local x2 = x+dx-1 + --local y2 = y+dy-1 + local z2 = z+dz-1 + + local k1x, k2x = floor(x1/256), floor(x2/256) + local k1z, k2z = floor(z1/256), floor(z2/256) + + local t, d + for kx = k1x, k2x do for kz = k1z, k2z do + local k = kz*256 + kx + local e = exits[k] + if e then + for _, t0 in pairs(e) do + local d0 = dist(p, t0) + if not d or d>d0 then + d = d0 + t = t0 + if d==0 then return t end + end + end + end + end end + + if t and abs(t.x-p.x) <= dx and abs(t.y-p.y) <= dy and abs(t.z-p.z) <= dz then + return t + end +end --- Functions +-- Ping-Pong the coordinate for Fast Travelling, https://git.minetest.land/Wuzzy/MineClone2/issues/795#issuecomment-11058 +local function ping_pong(x, m, l1, l2) + if x < 0 then + return l1 + abs(((x*m+l1) % (l1*4)) - (l1*2)), floor(x*m/l1/2) + ((ceil(x*m/l1)+1)%2) * ((x*m)%l1)/l1 + end + return l2 - abs(((x*m+l2) % (l2*4)) - (l2*2)), floor(x*m/l2/2) + (floor(x*m/l2)%2) * ((x*m)%l2)/l2 +end --- Ping-Pong fast travel, https://git.minetest.land/Wuzzy/MineClone2/issues/795#issuecomment-11058 -local function nether_to_overworld(x) - return LIMIT - math.abs(((x * OVERWORLD_TO_NETHER_SCALE + LIMIT) % (LIMIT*4)) - (LIMIT*2)) +local function get_target(p) + if p and p.y and p.x and p.z then + local x, z = p.x, p.z + local y, d = mcl_worlds.y_to_layer(p.y) + local o1, o2 -- y offset + if y then + if d=="nether" then + x, o1 = ping_pong(x, TRAVEL_X, LIM_MIN, LIM_MAX) + z, o2 = ping_pong(z, TRAVEL_Z, LIM_MIN, LIM_MAX) + y = floor(y * TRAVEL_Y + (o1+o2) / 16 * LIM_MAX) + y = min(max(y + O_Y_MIN, O_Y_MIN), O_Y_MAX) + elseif d=="overworld" then + x, y, z = floor(x / TRAVEL_X + 0.5), floor(y / TRAVEL_Y + 0.5), floor(z / TRAVEL_Z + 0.5) + y = min(max(y + N_Y_MIN, N_Y_MIN), N_Y_MAX) + end + return {x=x, y=y, z=z}, d + end + end end -- Destroy portal if pos (portal frame or portal node) got destroyed -local function destroy_nether_portal(pos) - local meta = minetest.get_meta(pos) - local node = minetest.get_node(pos) +local function destroy_nether_portal(pos, node) + if not node then return end local nn, orientation = node.name, node.param2 - local obsidian = nn == "mcl_core:obsidian" + local obsidian = nn == OBSIDIAN - local has_meta = minetest.string_to_pos(meta:get_string("portal_frame1")) - if has_meta then - meta:set_string("portal_frame1", "") - meta:set_string("portal_frame2", "") - meta:set_string("portal_target", "") - meta:set_string("portal_time", "") - end - local check_remove = function(pos, orientation) - local node = minetest.get_node(pos) - if node and (node.name == "mcl_portals:portal" and (orientation == nil or (node.param2 == orientation))) then - minetest.log("action", "[mcl_portal] Destroying Nether portal at " .. minetest.pos_to_string(pos)) - return minetest.remove_node(pos) + local function check_remove(pos, orientation) + local node = get_node(pos) + if node and (node.name == PORTAL and (orientation == nil or (node.param2 == orientation))) then + minetest.remove_node(pos) + remove_exit(pos) end end if obsidian then -- check each of 6 sides of it and destroy every portal: @@ -84,9 +226,6 @@ local function destroy_nether_portal(pos) check_remove({x = pos.x, y = pos.y + 1, z = pos.z}) return end - if not has_meta then -- no meta means repeated call: function calls on every node destruction - return - end if orientation == 0 then check_remove({x = pos.x - 1, y = pos.y, z = pos.z}, 0) check_remove({x = pos.x + 1, y = pos.y, z = pos.z}, 0) @@ -98,7 +237,7 @@ local function destroy_nether_portal(pos) check_remove({x = pos.x, y = pos.y + 1, z = pos.z}) end -minetest.register_node("mcl_portals:portal", { +minetest.register_node(PORTAL, { description = S("Nether Portal"), _doc_items_longdesc = S("A Nether portal teleports creatures and objects to the hot and dangerous Nether dimension (and back!). Enter at your own risk!"), _doc_items_usagehelp = S("Stand in the portal for a moment to activate the teleportation. Entering a Nether portal for the first time will also create a new portal in the other dimension. If a Nether portal has been built in the Nether, it will lead to the Overworld. A Nether portal is destroyed if the any of the obsidian which surrounds it is destroyed, or if it was caught in an explosion."), @@ -131,415 +270,335 @@ minetest.register_node("mcl_portals:portal", { paramtype = "light", paramtype2 = "facedir", sunlight_propagates = true, - use_texture_alpha = true, + use_texture_alpha = minetest.features.use_texture_alpha_string_modes and "blend" or true, walkable = false, - diggable = false, - pointable = false, buildable_to = false, is_ground_content = false, drop = "", light_source = 11, post_effect_color = {a = 180, r = 51, g = 7, b = 89}, - alpha = 192, node_box = { type = "fixed", fixed = { {-0.5, -0.5, -0.1, 0.5, 0.5, 0.1}, }, }, - groups = {portal=1, not_in_creative_inventory = 1}, - on_destruct = destroy_nether_portal, + groups = { creative_breakable = 1, portal = 1, not_in_creative_inventory = 1 }, + sounds = mcl_sounds.node_sound_glass_defaults(), + after_destruct = destroy_nether_portal, _mcl_hardness = -1, _mcl_blast_resistance = 0, }) -local function find_target_y(x, y, z, y_min, y_max) - local y_org = math.max(math.min(y, y_max), y_min) - local node = minetest.get_node_or_nil({x = x, y = y, z = z}) - if node == nil then - return y_org +local function light_frame(x1, y1, z1, x2, y2, z2, name, node, node_frame) + local orientation = 0 + if x1 == x2 then + orientation = 1 end - while node.name ~= "air" and y < y_max do - y = y + 1 - node = minetest.get_node_or_nil({x = x, y = y, z = z}) - if node == nil then - break - end - end - if node then - if node.name ~= "air" then - y = y_org - end - end - while node == nil and y > y_min do - y = y - 1 - node = minetest.get_node_or_nil({x = x, y = y, z = z}) - end - if y == y_max and node ~= nil then -- try reverse direction who knows what they built there... - while node.name ~= "air" and y > y_min do - y = y - 1 - node = minetest.get_node_or_nil({x = x, y = y, z = z}) - if node == nil then - break - end - end - end - if node == nil then - return y_org - end - while node.name == "air" and y > y_min do - y = y - 1 - node = minetest.get_node_or_nil({x = x, y = y, z = z}) - while node == nil and y > y_min do - y = y - 1 - node = minetest.get_node_or_nil({x = x, y = y, z = z}) - end - if node == nil then - return y_org - end - end - if y == y_min then - return y_org - end - return math.max(math.min(y, y_max), y_min) -end - -local function find_nether_target_y(x, y, z) - local target_y = find_target_y(x, y, z, nether_ymin + 4, nether_ymax - 25) + 1 - minetest.log("verbose", "[mcl_portal] Found Nether target altitude: " .. tostring(target_y) .. " for pos. " .. minetest.pos_to_string({x = x, y = y, z = z})) - return target_y -end - -local function find_overworld_target_y(x, y, z) - local target_y = find_target_y(x, y, z, overworld_ymin + 4, overworld_ymax - 25) + 1 - local node = minetest.get_node({x = x, y = target_y - 1, z = z}) - if not node then - return target_y - end - local nn = node.name - if nn ~= "air" and minetest.get_item_group(nn, "water") == 0 then - target_y = target_y + 1 - end - minetest.log("verbose", "[mcl_portal] Found Overworld target altitude: " .. tostring(target_y) .. " for pos. " .. minetest.pos_to_string({x = x, y = y, z = z})) - return target_y -end - - -local function update_target(pos, target, time_str) - local stack = {{x = pos.x, y = pos.y, z = pos.z}} - while #stack > 0 do - local i = #stack - local meta = minetest.get_meta(stack[i]) - if meta:get_string("portal_time") == time_str then - stack[i] = nil -- Already updated, skip it - else - local node = minetest.get_node(stack[i]) - local portal = node.name == "mcl_portals:portal" - if not portal then - stack[i] = nil - else - local x, y, z = stack[i].x, stack[i].y, stack[i].z - meta:set_string("portal_time", time_str) - meta:set_string("portal_target", target) - stack[i].y = y - 1 - stack[i + 1] = {x = x, y = y + 1, z = z} - if node.param2 == 0 then - stack[i + 2] = {x = x - 1, y = y, z = z} - stack[i + 3] = {x = x + 1, y = y, z = z} + local pos = {} + local node = node or {name = PORTAL, param2 = orientation} + local node_frame = node_frame or {name = OBSIDIAN} + for x = x1 - 1 + orientation, x2 + 1 - orientation do + pos.x = x + for z = z1 - orientation, z2 + orientation do + pos.z = z + for y = y1 - 1, y2 + 1 do + pos.y = y + local frame = (x < x1) or (x > x2) or (y < y1) or (y > y2) or (z < z1) or (z > z2) + if frame then + set_node(pos, node_frame) else - stack[i + 2] = {x = x, y = y, z = z - 1} - stack[i + 3] = {x = x, y = y, z = z + 1} + set_node(pos, node) + add_exit({x=pos.x, y=pos.y-1, z=pos.z}) end end end end end -local function ecb_setup_target_portal(blockpos, action, calls_remaining, param) - -- param.: srcx, srcy, srcz, dstx, dsty, dstz, srcdim, ax1, ay1, az1, ax2, ay2, az2 +--Build arrival portal +function build_nether_portal(pos, width, height, orientation, name, clear_before_build) + local width, height, orientation = width or W_MIN - 2, height or H_MIN - 2, orientation or random(0, 1) - local portal_search = function(target, p1, p2) - local portal_nodes = minetest.find_nodes_in_area(p1, p2, "mcl_portals:portal") - local portal_pos = false - if portal_nodes and #portal_nodes > 0 then - -- Found some portal(s), use nearest: - portal_pos = {x = portal_nodes[1].x, y = portal_nodes[1].y, z = portal_nodes[1].z} - local nearest_distance = vector.distance(target, portal_pos) - for n = 2, #portal_nodes do - local distance = vector.distance(target, portal_nodes[n]) - if distance < nearest_distance then - portal_pos = {x = portal_nodes[n].x, y = portal_nodes[n].y, z = portal_nodes[n].z} - nearest_distance = distance - end - end - end -- here we have the best portal_pos - return portal_pos + if clear_before_build then + light_frame(pos.x, pos.y, pos.z, pos.x + (1 - orientation) * (width - 1), pos.y + height - 1, pos.z + orientation * (width - 1), name, {name="air"}, {name="air"}) end + light_frame(pos.x, pos.y, pos.z, pos.x + (1 - orientation) * (width - 1), pos.y + height - 1, pos.z + orientation * (width - 1), name) - if calls_remaining <= 0 then - minetest.log("action", "[mcl_portal] Area for destination Nether portal emerged!") - local src_pos = {x = param.srcx, y = param.srcy, z = param.srcz} - local dst_pos = {x = param.dstx, y = param.dsty, z = param.dstz} - local meta = minetest.get_meta(src_pos) - local portal_pos = portal_search(dst_pos, {x = param.ax1, y = param.ay1, z = param.az1}, {x = param.ax2, y = param.ay2, z = param.az2}) - - if portal_pos == false then - minetest.log("verbose", "[mcl_portal] No portal in area " .. minetest.pos_to_string({x = param.ax1, y = param.ay1, z = param.az1}) .. "-" .. minetest.pos_to_string({x = param.ax2, y = param.ay2, z = param.az2})) - -- Need to build arrival portal: - local org_dst_y = dst_pos.y - if param.srcdim == "overworld" then - dst_pos.y = find_nether_target_y(dst_pos.x, dst_pos.y, dst_pos.z) - else - dst_pos.y = find_overworld_target_y(dst_pos.x, dst_pos.y, dst_pos.z) - end - if math.abs(org_dst_y - dst_pos.y) >= PORTAL_SEARCH_ALTITUDE / 2 then - portal_pos = portal_search(dst_pos, - {x = dst_pos.x - PORTAL_SEARCH_HALF_CHUNK, y = math.floor(dst_pos.y - PORTAL_SEARCH_ALTITUDE / 2), z = dst_pos.z - PORTAL_SEARCH_HALF_CHUNK}, - {x = dst_pos.x + PORTAL_SEARCH_HALF_CHUNK, y = math.ceil(dst_pos.y + PORTAL_SEARCH_ALTITUDE / 2), z = dst_pos.z + PORTAL_SEARCH_HALF_CHUNK} - ) - end - if portal_pos == false then - minetest.log("verbose", "[mcl_portal] 2nd attempt: No portal in area " .. minetest.pos_to_string({x = dst_pos.x - PORTAL_SEARCH_HALF_CHUNK, y = math.floor(dst_pos.y - PORTAL_SEARCH_ALTITUDE / 2), z = dst_pos.z - PORTAL_SEARCH_HALF_CHUNK}) .. "-" .. minetest.pos_to_string({x = dst_pos.x + PORTAL_SEARCH_HALF_CHUNK, y = math.ceil(dst_pos.y + PORTAL_SEARCH_ALTITUDE / 2), z = dst_pos.z + PORTAL_SEARCH_HALF_CHUNK})) - local width, height = 2, 3 - portal_pos = mcl_portals.build_nether_portal(dst_pos, width, height) + -- Build obsidian platform: + for x = pos.x - orientation, pos.x + orientation + (width - 1) * (1 - orientation), 1 + orientation do + for z = pos.z - 1 + orientation, pos.z + 1 - orientation + (width - 1) * orientation, 2 - orientation do + local pp = {x = x, y = pos.y - 1, z = z} + local pp_1 = {x = x, y = pos.y - 2, z = z} + local nn = get_node(pp).name + local nn_1 = get_node(pp_1).name + if ((nn=="air" and nn_1 == "air") or not registered_nodes[nn].is_ground_content) and not is_protected(pp, name) then + set_node(pp, {name = OBSIDIAN}) end end + end - local target_meta = minetest.get_meta(portal_pos) - local p3 = minetest.string_to_pos(target_meta:get_string("portal_frame1")) - local p4 = minetest.string_to_pos(target_meta:get_string("portal_frame2")) - if p3 and p4 then - portal_pos = vector.divide(vector.add(p3, p4), 2.0) - portal_pos.y = math.min(p3.y, p4.y) - portal_pos = vector.round(portal_pos) - local node = minetest.get_node(portal_pos) - if node and node.name ~= "mcl_portals:portal" then - portal_pos = {x = p3.x, y = p3.y, z = p3.z} - if minetest.get_node(portal_pos).name == "mcl_core:obsidian" then - -- Old-version portal: - if p4.z == p3.z then - portal_pos = {x = p3.x + 1, y = p3.y + 1, z = p3.z} - else - portal_pos = {x = p3.x, y = p3.y + 1, z = p3.z + 1} + log("action", "[mcl_portals] Destination Nether portal generated at "..pos_to_string(pos).."!") + + return pos +end + +function mcl_portals.spawn_nether_portal(pos, rot, pr, name) + if not pos then return end + local o = 0 + if rot then + if rot == "270" or rot=="90" then + o = 1 + elseif rot == "random" then + o = random(0,1) + end + end + build_nether_portal(pos, nil, nil, o, name, true) +end + +-- Teleportation cooloff for some seconds, to prevent back-and-forth teleportation +local function stop_teleport_cooloff(o) + cooloff[o] = nil + chatter[o] = nil +end + +local function teleport_cooloff(obj) + cooloff[obj] = true + if obj:is_player() then + minetest.after(PLAYER_COOLOFF, stop_teleport_cooloff, obj) + else + minetest.after(MOB_COOLOFF, stop_teleport_cooloff, obj) + end +end + +local function finalize_teleport(obj, exit) + if not obj or not exit or not exit.x or not exit.y or not exit.z then return end + + local objpos = obj:get_pos() + if not objpos then return end + + local is_player = obj:is_player() + local name + if is_player then + name = obj:get_player_name() + end + local _, dim = mcl_worlds.y_to_layer(exit.y) + + + -- If player stands, player is at ca. something+0.5 which might cause precision problems, so we used ceil for objpos.y + objpos = {x = floor(objpos.x+0.5), y = ceil(objpos.y), z = floor(objpos.z+0.5)} + if get_node(objpos).name ~= PORTAL then return end + + -- THIS IS A TEMPORATY CODE SECTION FOR COMPATIBILITY REASONS -- 1 of 2 -- TODO: Remove -- + -- Old worlds have no exits indexed - adding the exit to return here: + add_exit(objpos) + -- TEMPORATY CODE SECTION ENDS HERE -- + + + -- Enable teleportation cooloff for some seconds, to prevent back-and-forth teleportation + teleport_cooloff(obj) + + -- Teleport + obj:set_pos(exit) + + if is_player then + mcl_worlds.dimension_change(obj, dim) + minetest.sound_play("mcl_portals_teleport", {pos=exit, gain=0.5, max_hear_distance = 16}, true) + log("action", "[mcl_portals] player "..name.." teleported to Nether portal at "..pos_to_string(exit)..".") + else + log("action", "[mcl_portals] entity teleported to Nether portal at "..pos_to_string(exit)..".") + end +end + +local function create_portal_2(pos1, name, obj) + local orientation = 0 + local pos2 = {x = pos1.x + 3, y = pos1.y + 3, z = pos1.z + 3} + local nodes = find_nodes_in_area(pos1, pos2, {"air"}) + if #nodes == 64 then + orientation = random(0,1) + else + pos2.x = pos2.x - 1 + nodes = find_nodes_in_area(pos1, pos2, {"air"}) + if #nodes == 48 then + orientation = 1 + end + end + local exit = build_nether_portal(pos1, W_MIN-2, H_MIN-2, orientation, name) + finalize_teleport(obj, exit) + local cn = mcl_vars.get_chunk_number(pos1) + chunks[cn] = nil + if queue[cn] then + for next_obj, _ in pairs(queue[cn]) do + if next_obj ~= obj then + finalize_teleport(next_obj, exit) + end + end + queue[cn] = nil + end +end + +local function get_lava_level(pos, pos1, pos2) + if pos.y > -1000 then + return max(min(mcl_vars.mg_lava_overworld_max, pos2.y-1), pos1.y+1) + end + return max(min(mcl_vars.mg_lava_nether_max, pos2.y-1), pos1.y+1) +end + +local function ecb_scan_area_2(blockpos, action, calls_remaining, param) + if calls_remaining and calls_remaining > 0 then return end + local pos, pos1, pos2, name, obj = param.pos, param.pos1, param.pos2, param.name or "", param.obj + local pos0, distance + local lava = get_lava_level(pos, pos1, pos2) + + -- THIS IS A TEMPORATY CODE SECTION FOR COMPATIBILITY REASONS -- 2 of 2 -- TODO: Remove -- + -- Find portals for old worlds (new worlds keep them all in the table): + local portals = find_nodes_in_area(pos1, pos2, {PORTAL}) + if portals and #portals>0 then + for _, p in pairs(portals) do + add_exit(p) + end + local exit = find_exit(pos) + if exit then + finalize_teleport(obj, exit) + end + return + end + -- TEMPORATY CODE SECTION ENDS HERE -- + + + local nodes = find_nodes_in_area_under_air(pos1, pos2, {"group:building_block"}) + if nodes then + local nc = #nodes + log("action", "[mcl_portals] Area for destination Nether portal emerged! Found " .. tostring(nc) .. " nodes under the air around "..pos_to_string(pos)) + if nc > 0 then + for i=1,nc do + local node = nodes[i] + local node1 = {x=node.x, y=node.y+1, z=node.z } + local node2 = {x=node.x+2, y=node.y+3, z=node.z+2} + local nodes2 = find_nodes_in_area(node1, node2, {"air"}) + if nodes2 then + local nc2 = #nodes2 + if nc2 == 27 and not is_area_protected(node, node2, name) then + local distance0 = dist(pos, node) + if distance0 < 2 then + log("action", "[mcl_portals] found space at pos "..pos_to_string(node).." - creating a portal") + create_portal_2(node1, name, obj) + return + end + if not distance or (distance0 < distance) or (distance0 < distance-1 and node.y > lava and pos0.y < lava) then + log("verbose", "[mcl_portals] found distance "..tostring(distance0).." at pos "..pos_to_string(node)) + distance = distance0 + pos0 = {x=node1.x, y=node1.y, z=node1.z} + end end end end end - local time_str = tostring(minetest.get_us_time()) - local target = minetest.pos_to_string(portal_pos) - - update_target(src_pos, target, time_str) end -end - -local function nether_portal_get_target_position(src_pos) - local _, current_dimension = mcl_worlds.y_to_layer(src_pos.y) - local x, y, z, y_min, y_max = 0, 0, 0, 0, 0 - if current_dimension == "nether" then - x = math.floor(nether_to_overworld(src_pos.x) + 0.5) - z = math.floor(nether_to_overworld(src_pos.z) + 0.5) - y = math.floor((math.min(math.max(src_pos.y, nether_ymin), nether_ymax) - nether_ymin) / nether_dy * overworld_dy + overworld_ymin + 0.5) - y_min = overworld_ymin - y_max = overworld_ymax - else -- overworld: - x = math.floor(src_pos.x / OVERWORLD_TO_NETHER_SCALE + 0.5) - z = math.floor(src_pos.z / OVERWORLD_TO_NETHER_SCALE + 0.5) - y = math.floor((math.min(math.max(src_pos.y, overworld_ymin), overworld_ymax) - overworld_ymin) / overworld_dy * nether_dy + nether_ymin + 0.5) - y_min = nether_ymin - y_max = nether_ymax + if distance then -- several nodes of air might be better than lava lake, right? + log("action", "[mcl_portals] using backup pos "..pos_to_string(pos0).." to create a portal") + create_portal_2(pos0, name, obj) + return end - return x, y, z, current_dimension, y_min, y_max -end -local function find_or_create_portal(src_pos) - local x, y, z, cdim, y_min, y_max = nether_portal_get_target_position(src_pos) - local pos1 = {x = x - PORTAL_SEARCH_HALF_CHUNK, y = math.max(y_min, math.floor(y - PORTAL_SEARCH_ALTITUDE / 2)), z = z - PORTAL_SEARCH_HALF_CHUNK} - local pos2 = {x = x + PORTAL_SEARCH_HALF_CHUNK, y = math.min(y_max, math.ceil(y + PORTAL_SEARCH_ALTITUDE / 2)), z = z + PORTAL_SEARCH_HALF_CHUNK} - if pos1.y == y_min then - pos2.y = math.min(y_max, pos1.y + PORTAL_SEARCH_ALTITUDE) - else - if pos2.y == y_max then - pos1.y = math.max(y_min, pos2.y - PORTAL_SEARCH_ALTITUDE) + if param.next_chunk_1 and param.next_chunk_2 and param.next_pos then + local pos1, pos2, p = param.next_chunk_1, param.next_chunk_2, param.next_pos + if p.x >= pos1.x and p.x <= pos2.x and p.y >= pos1.y and p.y <= pos2.y and p.z >= pos1.z and p.z <= pos2.z then + log("action", "[mcl_portals] Making additional search in chunk below, because current one doesn't contain any air space for portal, target pos "..pos_to_string(p)) + minetest.emerge_area(pos1, pos2, ecb_scan_area_2, {pos = p, pos1 = pos1, pos2 = pos2, name=name, obj=obj}) + return end end - minetest.emerge_area(pos1, pos2, ecb_setup_target_portal, {srcx=src_pos.x, srcy=src_pos.y, srcz=src_pos.z, dstx=x, dsty=y, dstz=z, srcdim=cdim, ax1=pos1.x, ay1=pos1.y, az1=pos1.z, ax2=pos2.x, ay2=pos2.y, az2=pos2.z}) + + log("action", "[mcl_portals] found no space, reverting to target pos "..pos_to_string(pos).." - creating a portal") + if pos.y < lava then + pos.y = lava + 1 + else + pos.y = pos.y + 1 + end + create_portal_2(pos, name, obj) end -local function emerge_target_area(src_pos) - local x, y, z, cdim, y_min, y_max = nether_portal_get_target_position(src_pos) - local pos1 = {x = x - PORTAL_SEARCH_HALF_CHUNK, y = math.max(y_min + 2, math.floor(y - PORTAL_SEARCH_ALTITUDE / 2)), z = z - PORTAL_SEARCH_HALF_CHUNK} - local pos2 = {x = x + PORTAL_SEARCH_HALF_CHUNK, y = math.min(y_max - 2, math.ceil(y + PORTAL_SEARCH_ALTITUDE / 2)), z = z + PORTAL_SEARCH_HALF_CHUNK} - minetest.emerge_area(pos1, pos2) - pos1 = {x = x - 1, y = y_min, z = z - 1} - pos2 = {x = x + 1, y = y_max, z = z + 1} - minetest.emerge_area(pos1, pos2) +local function create_portal(pos, limit1, limit2, name, obj) + local cn = mcl_vars.get_chunk_number(pos) + if chunks[cn] then + local q = queue[cn] or {} + q[obj] = true + queue[cn] = q + return + end + chunks[cn] = true + + -- we need to emerge the area here, but currently (mt5.4/mcl20.71) map generation is slow + -- so we'll emerge single chunk only: 5x5x5 blocks, 80x80x80 nodes maximum + -- and maybe one more chunk from below if (SCAN_2_MAP_CHUNKS = true) + + local pos1 = add(mul(mcl_vars.pos_to_chunk(pos), mcl_vars.chunk_size_in_nodes), mcl_vars.central_chunk_offset_in_nodes) + local pos2 = add(pos1, mcl_vars.chunk_size_in_nodes - 1) + + if not SCAN_2_MAP_CHUNKS then + if limit1 and limit1.x and limit1.y and limit1.z then + pos1 = {x = max(min(limit1.x, pos.x), pos1.x), y = max(min(limit1.y, pos.y), pos1.y), z = max(min(limit1.z, pos.z), pos1.z)} + end + if limit2 and limit2.x and limit2.y and limit2.z then + pos2 = {x = min(max(limit2.x, pos.x), pos2.x), y = min(max(limit2.y, pos.y), pos2.y), z = min(max(limit2.z, pos.z), pos2.z)} + end + minetest.emerge_area(pos1, pos2, ecb_scan_area_2, {pos = vector.new(pos), pos1 = pos1, pos2 = pos2, name=name, obj=obj}) + return + end + + -- Basically the copy of code above, with minor additions to continue the search in single additional chunk below: + local next_chunk_1 = {x = pos1.x, y = pos1.y - mcl_vars.chunk_size_in_nodes, z = pos1.z} + local next_chunk_2 = add(next_chunk_1, mcl_vars.chunk_size_in_nodes - 1) + local next_pos = {x = pos.x, y=max(next_chunk_2.y, limit1.y), z = pos.z} + if limit1 and limit1.x and limit1.y and limit1.z then + pos1 = {x = max(min(limit1.x, pos.x), pos1.x), y = max(min(limit1.y, pos.y), pos1.y), z = max(min(limit1.z, pos.z), pos1.z)} + next_chunk_1 = {x = max(min(limit1.x, next_pos.x), next_chunk_1.x), y = max(min(limit1.y, next_pos.y), next_chunk_1.y), z = max(min(limit1.z, next_pos.z), next_chunk_1.z)} + end + if limit2 and limit2.x and limit2.y and limit2.z then + pos2 = {x = min(max(limit2.x, pos.x), pos2.x), y = min(max(limit2.y, pos.y), pos2.y), z = min(max(limit2.z, pos.z), pos2.z)} + next_chunk_2 = {x = min(max(limit2.x, next_pos.x), next_chunk_2.x), y = min(max(limit2.y, next_pos.y), next_chunk_2.y), z = min(max(limit2.z, next_pos.z), next_chunk_2.z)} + end + minetest.emerge_area(pos1, pos2, ecb_scan_area_2, {pos = vector.new(pos), pos1 = pos1, pos2 = pos2, name=name, obj=obj, next_chunk_1 = next_chunk_1, next_chunk_2 = next_chunk_2, next_pos = next_pos}) end local function available_for_nether_portal(p) - local nn = minetest.get_node(p).name - local obsidian = nn == "mcl_core:obsidian" + local nn = get_node(p).name + local obsidian = nn == OBSIDIAN if nn ~= "air" and minetest.get_item_group(nn, "fire") ~= 1 then return false, obsidian end return true, obsidian end -local function light_frame(x1, y1, z1, x2, y2, z2, build_frame) - local build_frame = build_frame or false - local orientation = 0 - if x1 == x2 then - orientation = 1 - end - local disperse = 50 - local pass = 1 - while true do - local protection = false - - for x = x1 - 1 + orientation, x2 + 1 - orientation do - for z = z1 - orientation, z2 + orientation do - for y = y1 - 1, y2 + 1 do - local frame = (x < x1) or (x > x2) or (y < y1) or (y > y2) or (z < z1) or (z > z2) - if frame then - if build_frame then - if pass == 1 then - if minetest.is_protected({x = x, y = y, z = z}, "") then - protection = true - local offset_x = math.random(-disperse, disperse) - local offset_z = math.random(-disperse, disperse) - disperse = disperse + math.random(25, 177) - if disperse > 5000 then - return nil - end - x1, z1 = x1 + offset_x, z1 + offset_z - x2, z2 = x2 + offset_x, z2 + offset_z - local _, dimension = mcl_worlds.y_to_layer(y1) - local height = math.abs(y2 - y1) - y1 = (y1 + y2) / 2 - if dimension == "nether" then - y1 = find_nether_target_y(math.min(x1, x2), y1, math.min(z1, z2)) - else - y1 = find_overworld_target_y(math.min(x1, x2), y1, math.min(z1, z2)) - end - y2 = y1 + height - break - end - else - minetest.set_node({x = x, y = y, z = z}, {name = "mcl_core:obsidian"}) - end - end - else - if not build_frame or pass == 2 then - local node = minetest.get_node({x = x, y = y, z = z}) - minetest.set_node({x = x, y = y, z = z}, {name = "mcl_portals:portal", param2 = orientation}) - end - end - if not frame and pass == 2 then - local meta = minetest.get_meta({x = x, y = y, z = z}) - -- Portal frame corners - meta:set_string("portal_frame1", minetest.pos_to_string({x = x1, y = y1, z = z1})) - meta:set_string("portal_frame2", minetest.pos_to_string({x = x2, y = y2, z = z2})) - -- Portal target coordinates - meta:set_string("portal_target", "") - -- Portal last teleportation time - meta:set_string("portal_time", tostring(0)) - end - end - if protection then - break - end - end - if protection then - break - end - end - if build_frame == false or pass == 2 then - break - end - if build_frame and not protection and pass == 1 then - pass = 2 - end - end - emerge_target_area({x = x1, y = y1, z = z1}) - return {x = x1, y = y1, z = z1} -end - ---Build arrival portal -function mcl_portals.build_nether_portal(pos, width, height, orientation) - local height = height or FRAME_SIZE_Y_MIN - 2 - local width = width or FRAME_SIZE_X_MIN - 2 - local orientation = orientation or math.random(0, 1) - - if orientation == 0 then - minetest.load_area({x = pos.x - 3, y = pos.y - 1, z = pos.z - width * 2}, {x = pos.x + width + 2, y = pos.y + height + 2, z = pos.z + width * 2}) - else - minetest.load_area({x = pos.x - width * 2, y = pos.y - 1, z = pos.z - 3}, {x = pos.x + width * 2, y = pos.y + height + 2, z = pos.z + width + 2}) - end - - pos = light_frame(pos.x, pos.y, pos.z, pos.x + (1 - orientation) * (width - 1), pos.y + height - 1, pos.z + orientation * (width - 1), true) - - -- Clear some space around: - for x = pos.x - math.random(2 + (width-2)*( orientation), 5 + (2*width-5)*( orientation)), pos.x + width*(1-orientation) + math.random(2+(width-2)*( orientation), 4 + (2*width-4)*( orientation)) do - for z = pos.z - math.random(2 + (width-2)*(1-orientation), 5 + (2*width-5)*(1-orientation)), pos.z + width*( orientation) + math.random(2+(width-2)*(1-orientation), 4 + (2*width-4)*(1-orientation)) do - for y = pos.y - 1, pos.y + height + math.random(1,6) do - local nn = minetest.get_node({x = x, y = y, z = z}).name - if nn ~= "mcl_core:obsidian" and nn ~= "mcl_portals:portal" and minetest.registered_nodes[nn].is_ground_content and not minetest.is_protected({x = x, y = y, z = z}, "") then - minetest.remove_node({x = x, y = y, z = z}) - end - end - end - end - - -- Build obsidian platform: - for x = pos.x - orientation, pos.x + orientation + (width - 1) * (1 - orientation), 1 + orientation do - for z = pos.z - 1 + orientation, pos.z + 1 - orientation + (width - 1) * orientation, 2 - orientation do - local pp = {x = x, y = pos.y - 1, z = z} - local nn = minetest.get_node(pp).name - if not minetest.registered_nodes[nn].is_ground_content and not minetest.is_protected(pp, "") then - minetest.set_node(pp, {name = "mcl_core:obsidian"}) - end - end - end - - minetest.log("action", "[mcl_portal] Destination Nether portal generated at "..minetest.pos_to_string(pos).."!") - - return pos -end - local function check_and_light_shape(pos, orientation) local stack = {{x = pos.x, y = pos.y, z = pos.z}} local node_list = {} + local index_list = {} local node_counter = 0 -- Search most low node from the left (pos1) and most right node from the top (pos2) local pos1 = {x = pos.x, y = pos.y, z = pos.z} local pos2 = {x = pos.x, y = pos.y, z = pos.z} - local wrong_portal_nodes_clean_up = function(node_list) - for i = 1, #node_list do - local meta = minetest.get_meta(node_list[i]) - meta:set_string("portal_time", "") - end - return false - end - + local kx, ky, kz = pos.x - 1999, pos.y - 1999, pos.z - 1999 while #stack > 0 do local i = #stack - local meta = minetest.get_meta(stack[i]) - local target = meta:get_string("portal_time") - if target and target == "-2" then + local x, y, z = stack[i].x, stack[i].y, stack[i].z + local k = (x-kx)*16000000 + (y-ky)*4000 + z-kz + if index_list[k] then stack[i] = nil -- Already checked, skip it else local good, obsidian = available_for_nether_portal(stack[i]) if obsidian then stack[i] = nil else - if (not good) or (node_counter >= PORTAL_NODES_MAX) then - return wrong_portal_nodes_clean_up(node_list) + if (not good) or (node_counter >= N_MAX) then + return false end - local x, y, z = stack[i].x, stack[i].y, stack[i].z - meta:set_string("portal_time", "-2") node_counter = node_counter + 1 node_list[node_counter] = {x = x, y = y, z = z} + index_list[k] = true stack[i].y = y - 1 stack[i + 1] = {x = x, y = y + 1, z = z} if orientation == 0 then @@ -559,40 +618,35 @@ local function check_and_light_shape(pos, orientation) end end - if node_counter < PORTAL_NODES_MIN then - return wrong_portal_nodes_clean_up(node_list) + if node_counter < N_MIN then + return false end -- Limit rectangles width and height - if math.abs(pos2.x - pos1.x + pos2.z - pos1.z) + 3 > FRAME_SIZE_X_MAX or math.abs(pos2.y - pos1.y) + 3 > FRAME_SIZE_Y_MAX then - return wrong_portal_nodes_clean_up(node_list) + if abs(pos2.x - pos1.x + pos2.z - pos1.z) + 3 > W_MAX or abs(pos2.y - pos1.y) + 3 > H_MAX then + return false end for i = 1, node_counter do local node_pos = node_list[i] - local node = minetest.get_node(node_pos) - minetest.set_node(node_pos, {name = "mcl_portals:portal", param2 = orientation}) - local meta = minetest.get_meta(node_pos) - meta:set_string("portal_frame1", minetest.pos_to_string(pos1)) - meta:set_string("portal_frame2", minetest.pos_to_string(pos2)) - meta:set_string("portal_time", tostring(0)) - meta:set_string("portal_target", "") + minetest.set_node(node_pos, {name = PORTAL, param2 = orientation}) + add_exit(node_pos) end - return true + return true end -- Attempts to light a Nether portal at pos -- Pos can be any of the inner part. -- The frame MUST be filled only with air or any fire, which will be replaced with Nether portal blocks. -- If no Nether portal can be lit, nothing happens. --- Returns number of portals created (0, 1 or 2) +-- Returns true if portal created function mcl_portals.light_nether_portal(pos) -- Only allow to make portals in Overworld and Nether local dim = mcl_worlds.pos_to_dimension(pos) if dim ~= "overworld" and dim ~= "nether" then - return 0 + return false end - local orientation = math.random(0, 1) + local orientation = random(0, 1) for orientation_iteration = 1, 2 do if check_and_light_shape(pos, orientation) then return true @@ -602,126 +656,51 @@ function mcl_portals.light_nether_portal(pos) return false end -local function update_portal_time(pos, time_str) - local stack = {{x = pos.x, y = pos.y, z = pos.z}} - while #stack > 0 do - local i = #stack - local meta = minetest.get_meta(stack[i]) - if meta:get_string("portal_time") == time_str then - stack[i] = nil -- Already updated, skip it - else - local node = minetest.get_node(stack[i]) - local portal = node.name == "mcl_portals:portal" - if not portal then - stack[i] = nil - else - local x, y, z = stack[i].x, stack[i].y, stack[i].z - meta:set_string("portal_time", time_str) - stack[i].y = y - 1 - stack[i + 1] = {x = x, y = y + 1, z = z} - if node.param2 == 0 then - stack[i + 2] = {x = x - 1, y = y, z = z} - stack[i + 3] = {x = x + 1, y = y, z = z} - else - stack[i + 2] = {x = x, y = y, z = z - 1} - stack[i + 3] = {x = x, y = y, z = z + 1} - end - end - end - end -end - -local function prepare_target(pos) - local meta, us_time = minetest.get_meta(pos), minetest.get_us_time() - local portal_time = tonumber(meta:get_string("portal_time")) or 0 - local delta_time_us = us_time - portal_time - local pos1, pos2 = minetest.string_to_pos(meta:get_string("portal_frame1")), minetest.string_to_pos(meta:get_string("portal_frame2")) - if delta_time_us <= DESTINATION_EXPIRES then - -- Destination point must be still cached according to https://minecraft.gamepedia.com/Nether_portal - return update_portal_time(pos, tostring(us_time)) - end - -- No cached destination point - find_or_create_portal(pos) -end - --- Teleportation cooloff for some seconds, to prevent back-and-forth teleportation -local function stop_teleport_cooloff(o) - mcl_portals.nether_portal_cooloff[o] = false - touch_chatter_prevention[o] = nil -end - -local function teleport_cooloff(obj) - if obj:is_player() then - minetest.after(TELEPORT_COOLOFF, stop_teleport_cooloff, obj) - else - minetest.after(MOB_TELEPORT_COOLOFF, stop_teleport_cooloff, obj) - end -end - -- Teleport function local function teleport_no_delay(obj, pos) local is_player = obj:is_player() - if (not obj:get_luaentity()) and (not is_player) then - return - end + if (not is_player and not obj:get_luaentity()) or cooloff[obj] then return end local objpos = obj:get_pos() - if objpos == nil then - return - end + if not objpos then return end - if mcl_portals.nether_portal_cooloff[obj] then - return - end - -- If player stands, player is at ca. something+0.5 - -- which might cause precision problems, so we used ceil. - objpos.y = math.ceil(objpos.y) + -- If player stands, player is at ca. something+0.5 which might cause precision problems, so we used ceil for objpos.y + objpos = {x = floor(objpos.x+0.5), y = ceil(objpos.y), z = floor(objpos.z+0.5)} + if get_node(objpos).name ~= PORTAL then return end - if minetest.get_node(objpos).name ~= "mcl_portals:portal" then - return - end - - local meta = minetest.get_meta(pos) - local delta_time = minetest.get_us_time() - (tonumber(meta:get_string("portal_time")) or 0) - local target = minetest.string_to_pos(meta:get_string("portal_target")) - if delta_time > DESTINATION_EXPIRES or target == nil then - -- Area not ready yet - retry after a second - return minetest.after(1, teleport_no_delay, obj, pos) - end - - -- Enable teleportation cooloff for some seconds, to prevent back-and-forth teleportation - teleport_cooloff(obj) - mcl_portals.nether_portal_cooloff[obj] = true - - -- Teleport - obj:set_pos(target) + local target, dim = get_target(objpos) + if not target then return end + local name if is_player then - mcl_worlds.dimension_change(obj, mcl_worlds.pos_to_dimension(target)) - minetest.sound_play("mcl_portals_teleport", {pos=target, gain=0.5, max_hear_distance = 16}, true) - local name = obj:get_player_name() - minetest.log("action", "[mcl_portal] "..name.." teleported to Nether portal at "..minetest.pos_to_string(target)..".") + name = obj:get_player_name() + end + + local exit = find_exit(target) + if exit then + finalize_teleport(obj, exit) + else + dim = dimension_to_teleport[dim] + -- need to create arrival portal + create_portal(target, limits[dim].pmin, limits[dim].pmax, name, obj) end end local function prevent_portal_chatter(obj) - local time_us = minetest.get_us_time() - local chatter = touch_chatter_prevention[obj] or 0 - touch_chatter_prevention[obj] = time_us + local time_us = get_us_time() + local ch = chatter[obj] or 0 + chatter[obj] = time_us minetest.after(TOUCH_CHATTER_TIME, function(o) - if not o or not touch_chatter_prevention[o] then - return - end - if minetest.get_us_time() - touch_chatter_prevention[o] >= TOUCH_CHATTER_TIME_US then - touch_chatter_prevention[o] = nil + if o and chatter[o] and get_us_time() - chatter[o] >= CHATTER_US then + chatter[o] = nil end end, obj) - return time_us - chatter > TOUCH_CHATTER_TIME_US + return time_us - ch > CHATTER_US end local function animation(player, playername) - local chatter = touch_chatter_prevention[player] or 0 - if mcl_portals.nether_portal_cooloff[player] or minetest.get_us_time() - chatter < TOUCH_CHATTER_TIME_US then + local ch = chatter[player] or 0 + if cooloff[player] or get_us_time() - ch < CHATTER_US then local pos = player:get_pos() if not pos then return @@ -752,36 +731,35 @@ local function teleport(obj, portal_pos) name = obj:get_player_name() animation(obj, name) end - -- Call prepare_target() first because it might take a long - prepare_target(portal_pos) - -- Prevent quick back-and-forth teleportation - if not mcl_portals.nether_portal_cooloff[obj] then - local creative_enabled = minetest.is_creative_enabled(name) - if creative_enabled then - return teleport_no_delay(obj, portal_pos) - end - minetest.after(TELEPORT_DELAY, teleport_no_delay, obj, portal_pos) + + if cooloff[obj] then return end + + if minetest.is_creative_enabled(name) then + teleport_no_delay(obj, portal_pos) + return end + + minetest.after(DELAY, teleport_no_delay, obj, portal_pos) end minetest.register_abm({ label = "Nether portal teleportation and particles", - nodenames = {"mcl_portals:portal"}, + nodenames = {PORTAL}, interval = 1, chance = 1, action = function(pos, node) local o = node.param2 -- orientation - local d = math.random(0, 1) -- direction - local time = math.random() * 1.9 + 0.5 + local d = random(0, 1) -- direction + local time = random() * 1.9 + 0.5 local velocity, acceleration if o == 1 then - velocity = {x = math.random() * 0.7 + 0.3, y = math.random() - 0.5, z = math.random() - 0.5} - acceleration = {x = math.random() * 1.1 + 0.3, y = math.random() - 0.5, z = math.random() - 0.5} + velocity = {x = random() * 0.7 + 0.3, y = random() - 0.5, z = random() - 0.5} + acceleration = {x = random() * 1.1 + 0.3, y = random() - 0.5, z = random() - 0.5} else - velocity = {x = math.random() - 0.5, y = math.random() - 0.5, z = math.random() * 0.7 + 0.3} - acceleration = {x = math.random() - 0.5, y = math.random() - 0.5, z = math.random() * 1.1 + 0.3} + velocity = {x = random() - 0.5, y = random() - 0.5, z = random() * 0.7 + 0.3} + acceleration = {x = random() - 0.5, y = random() - 0.5, z = random() * 1.1 + 0.3} end - local distance = vector.add(vector.multiply(velocity, time), vector.multiply(acceleration, time * time / 2)) + local distance = add(mul(velocity, time), mul(acceleration, time * time / 2)) if d == 1 then if o == 1 then distance.x = -distance.x @@ -793,11 +771,11 @@ minetest.register_abm({ acceleration.z = -acceleration.z end end - distance = vector.subtract(pos, distance) - for _, obj in ipairs(minetest.get_objects_inside_radius(pos, 15)) do + distance = sub(pos, distance) + for _, obj in pairs(minetest.get_objects_inside_radius(pos, 15)) do if obj:is_player() then minetest.add_particlespawner({ - amount = node_particles_allowed_level + 1, + amount = PARTICLES + 1, minpos = distance, maxpos = distance, minvel = velocity, @@ -814,7 +792,7 @@ minetest.register_abm({ }) end end - for _, obj in ipairs(minetest.get_objects_inside_radius(pos, 1)) do --maikerumine added for objects to travel + for _, obj in pairs(minetest.get_objects_inside_radius(pos, 1)) do --maikerumine added for objects to travel local lua_entity = obj:get_luaentity() --maikerumine added for objects to travel if (obj:is_player() or lua_entity) and prevent_portal_chatter(obj) then teleport(obj, pos) @@ -826,25 +804,25 @@ minetest.register_abm({ --[[ ITEM OVERRIDES ]] -local longdesc = minetest.registered_nodes["mcl_core:obsidian"]._doc_items_longdesc +local longdesc = registered_nodes[OBSIDIAN]._doc_items_longdesc longdesc = longdesc .. "\n" .. S("Obsidian is also used as the frame of Nether portals.") local usagehelp = S("To open a Nether portal, place an upright frame of obsidian with a width of at least 4 blocks and a height of 5 blocks, leaving only air in the center. After placing this frame, light a fire in the obsidian frame. Nether portals only work in the Overworld and the Nether.") -minetest.override_item("mcl_core:obsidian", { +minetest.override_item(OBSIDIAN, { _doc_items_longdesc = longdesc, _doc_items_usagehelp = usagehelp, - on_destruct = destroy_nether_portal, + after_destruct = destroy_nether_portal, _on_ignite = function(user, pointed_thing) local x, y, z = pointed_thing.under.x, pointed_thing.under.y, pointed_thing.under.z -- Check empty spaces around obsidian and light all frames found: - local portals_placed = + local portals_placed = mcl_portals.light_nether_portal({x = x - 1, y = y, z = z}) or mcl_portals.light_nether_portal({x = x + 1, y = y, z = z}) or mcl_portals.light_nether_portal({x = x, y = y - 1, z = z}) or mcl_portals.light_nether_portal({x = x, y = y + 1, z = z}) or mcl_portals.light_nether_portal({x = x, y = y, z = z - 1}) or mcl_portals.light_nether_portal({x = x, y = y, z = z + 1}) if portals_placed then - minetest.log("action", "[mcl_portal] Nether portal activated at "..minetest.pos_to_string({x=x,y=y,z=z})..".") + log("action", "[mcl_portals] Nether portal activated at "..pos_to_string({x=x,y=y,z=z})..".") if minetest.get_modpath("doc") then - doc.mark_entry_as_revealed(user:get_player_name(), "nodes", "mcl_portals:portal") + doc.mark_entry_as_revealed(user:get_player_name(), "nodes", PORTAL) -- Achievement for finishing a Nether portal TO the Nether local dim = mcl_worlds.pos_to_dimension({x=x, y=y, z=z}) @@ -858,4 +836,3 @@ minetest.override_item("mcl_core:obsidian", { end end, }) - diff --git a/mods/ITEMS/mcl_potions/commands.lua b/mods/ITEMS/mcl_potions/commands.lua index ad1d65b7f..1fbf591d9 100644 --- a/mods/ITEMS/mcl_potions/commands.lua +++ b/mods/ITEMS/mcl_potions/commands.lua @@ -1,4 +1,4 @@ -local S = minetest.get_translator("mcl_potions") +local S = minetest.get_translator(minetest.get_current_modname()) -- ░█████╗░██╗░░██╗░█████╗░████████╗  ░█████╗░░█████╗░███╗░░░███╗███╗░░░███╗░█████╗░███╗░░██╗██████╗░░██████╗ -- ██╔══██╗██║░░██║██╔══██╗╚══██╔══╝  ██╔══██╗██╔══██╗████╗░████║████╗░████║██╔══██╗████╗░██║██╔══██╗██╔════╝ diff --git a/mods/ITEMS/mcl_potions/functions.lua b/mods/ITEMS/mcl_potions/functions.lua index f1384ab30..c3b034b66 100644 --- a/mods/ITEMS/mcl_potions/functions.lua +++ b/mods/ITEMS/mcl_potions/functions.lua @@ -35,13 +35,13 @@ local function potions_init_icons(player) local name = player:get_player_name() icon_ids[name] = {} for e=1, EFFECT_TYPES do - local x = -7 + -38 * e + local x = -52 * e - 2 local id = player:hud_add({ hud_elem_type = "image", text = "blank.png", position = { x = 1, y = 0 }, - offset = { x = x, y = 272 }, - scale = { x = 2, y = 2 }, + offset = { x = x, y = 3 }, + scale = { x = 3, y = 3 }, alignment = { x = 1, y = 1 }, z_index = 100, }) @@ -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,20 +129,13 @@ 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 entity and entity._cmi_is_mob then - entity.health = math.max(entity.health - 1, 1) - EF.poisoned[player].hit_timer = 0 - elseif is_player then - player:set_hp( math.max(player:get_hp() - 1, 1), { type = "punch", other = "poison"}) - EF.poisoned[player].hit_timer = 0 - else -- if not player or mob then remove - EF.poisoned[player] = nil + if mcl_util.get_hp(player) - 1 > 0 then + mcl_util.deal_damage(player, 1, {type = "magic"}) end - + EF.poisoned[player].hit_timer = 0 end if EF.poisoned[player] and EF.poisoned[player].timer >= EF.poisoned[player].dur then @@ -165,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 @@ -199,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 @@ -224,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") @@ -246,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") @@ -268,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 @@ -293,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 @@ -314,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 @@ -335,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 @@ -351,37 +344,12 @@ minetest.register_globalstep(function(dtime) end) - -local is_fire_node = { ["mcl_core:lava_flowing"]=true, - ["mcl_core:lava_source"]=true, - ["mcl_fire:eternal_fire"]=true, - ["mcl_fire:fire"]=true, - ["mcl_nether:magma"]=true, - ["mcl_nether:nether_lava_source"]=true, - ["mcl_nether:nether_lava_flowing"]=true, - ["mcl_nether:nether_lava_source"]=true -} - -- Prevent damage to player with Fire Resistance enabled -minetest.register_on_player_hpchange(function(player, hp_change, reason) - - if EF.fire_proof[player] and hp_change < 0 then - -- This is a bit forced, but it assumes damage is taken by fire and avoids it - -- also assumes any change in hp happens between calls to this function - -- it's worth noting that you don't take damage from players in this case... - local player_info = mcl_playerinfo[player:get_player_name()] - - if is_fire_node[player_info.node_head] or is_fire_node[player_info.node_feet] or is_fire_node[player_info.node_stand] then - return 0 - else - return hp_change - end - - else - return hp_change +mcl_damage.register_modifier(function(obj, damage, reason) + if EF.fire_proof[obj] and not reason.flags.bypasses_magic and reason.flags.is_fire then + return 0 end - -end, true) +end, -50) @@ -539,7 +507,7 @@ end) minetest.register_on_shutdown(function() -- save player effects on server shutdown - for _,player in ipairs(minetest.get_connected_players()) do + for _,player in pairs(minetest.get_connected_players()) do mcl_potions._save_player_effects(player) end @@ -590,23 +558,33 @@ function mcl_potions.make_invisible(player, toggle) local is_player = player:is_player() local entity = player:get_luaentity() + --local playername = player:get_player_name() + local skin_file if toggle then -- hide player - if player:is_player() then - EF.invisible[player].old_size = player:get_properties().visual_size - elseif entity then + skin_file = "mobs_mc_empty.png" + + if entity then EF.invisible[player].old_size = entity.visual_size - else -- if not a player or entity, do nothing + elseif not is_player then -- if not a player or entity, do nothing return end - player:set_properties({visual_size = {x = 0, y = 0}}) + if is_player then + mcl_player.player_set_skin(player, skin_file) + elseif not is_player then + player:set_properties({visual_size = {x = 0, y = 0}}) + end player:set_nametag_attributes({color = {a = 0}}) elseif EF.invisible[player] then -- show player - player:set_properties({visual_size = EF.invisible[player].old_size}) + if is_player then + mcl_skins.update_player_skin(player) + elseif not is_player then + player:set_properties({visual_size = EF.invisible[player].old_size}) + end player:set_nametag_attributes({color = {r = 255, g = 255, b = 255, a = 255}}) end @@ -688,6 +666,10 @@ function mcl_potions.healing_func(player, hp) local obj = player:get_luaentity() + if player:get_hp() == 0 then + return + end + if obj and obj.harmed_by_heal then hp = -hp end if hp > 0 then @@ -707,12 +689,7 @@ function mcl_potions.healing_func(player, hp) hp = -1 end - if obj and obj._cmi_is_mob then - obj.health = obj.health + hp - elseif player:is_player() then - player:set_hp(player:get_hp() + hp, { type = "punch", other = "harming" }) - end - + mcl_util.deal_damage(player, -hp, {type = "magic"}) end end @@ -999,4 +976,3 @@ function mcl_potions._extinguish_nearby_fire(pos, radius) end return exting end - diff --git a/mods/ITEMS/mcl_potions/init.lua b/mods/ITEMS/mcl_potions/init.lua index b7f814c24..36f45b01a 100644 --- a/mods/ITEMS/mcl_potions/init.lua +++ b/mods/ITEMS/mcl_potions/init.lua @@ -1,4 +1,7 @@ -local S = minetest.get_translator("mcl_potions") +local modname = minetest.get_current_modname() +local modpath = minetest.get_modpath(modname) +local S = minetest.get_translator(modname) + mcl_potions = {} -- duration effects of redstone are a factor of 8/3 @@ -16,8 +19,6 @@ mcl_potions.INV_FACTOR = 0.50 mcl_potions.SPLASH_FACTOR = 0.75 mcl_potions.LINGERING_FACTOR = 0.25 - -local modpath = minetest.get_modpath("mcl_potions") dofile(modpath .. "/functions.lua") dofile(modpath .. "/commands.lua") dofile(modpath .. "/splash.lua") @@ -25,11 +26,9 @@ dofile(modpath .. "/lingering.lua") dofile(modpath .. "/tipped_arrow.lua") dofile(modpath .. "/potions.lua") -local brewhelp = S("Try different combinations to create potions.") - minetest.register_craftitem("mcl_potions:fermented_spider_eye", { description = S("Fermented Spider Eye"), - _doc_items_longdesc = brewhelp, + _doc_items_longdesc = S("Try different combinations to create potions."), wield_image = "mcl_potions_spider_eye_fermented.png", inventory_image = "mcl_potions_spider_eye_fermented.png", groups = { brewitem = 1, }, @@ -65,14 +64,12 @@ minetest.register_craftitem("mcl_potions:glass_bottle", { -- Try to fill glass bottle with water local get_water = false - local from_liquid_source = false + --local from_liquid_source = false local river_water = false - if not def then - -- Unknown node: no-op - elseif def.groups and def.groups.water and def.liquidtype == "source" then + if def and def.groups and def.groups.water and def.liquidtype == "source" then -- Water source get_water = true - from_liquid_source = true + --from_liquid_source = true river_water = node.name == "mclx_core:river_water_source" -- Or reduce water level of cauldron by 1 elseif string.sub(node.name, 1, 14) == "mcl_cauldrons:" then @@ -147,7 +144,7 @@ minetest.register_craft( { -- Template function for creating images of filled potions -- - colorstring must be a ColorString of form “#RRGGBB”, e.g. “#0000FF” for blue. -- - opacity is optional opacity from 0-255 (default: 127) -local potion_image = function(colorstring, opacity) +local function potion_image(colorstring, opacity) if not opacity then opacity = 127 end @@ -275,7 +272,7 @@ minetest.register_craftitem("mcl_potions:river_water", { }) -- Hurt mobs -local water_splash = function(obj, damage) +local function water_splash(obj, damage) if not obj then return end @@ -318,9 +315,9 @@ minetest.register_craftitem("mcl_potions:speckled_melon", { minetest.register_craft({ output = "mcl_potions:speckled_melon", recipe = { - {'mcl_core:gold_nugget', 'mcl_core:gold_nugget', 'mcl_core:gold_nugget'}, - {'mcl_core:gold_nugget', 'mcl_farming:melon_item', 'mcl_core:gold_nugget'}, - {'mcl_core:gold_nugget', 'mcl_core:gold_nugget', 'mcl_core:gold_nugget'}, + {"mcl_core:gold_nugget", "mcl_core:gold_nugget", "mcl_core:gold_nugget"}, + {"mcl_core:gold_nugget", "mcl_farming:melon_item", "mcl_core:gold_nugget"}, + {"mcl_core:gold_nugget", "mcl_core:gold_nugget", "mcl_core:gold_nugget"}, } }) @@ -432,22 +429,20 @@ local mod_table = { -- Compare two ingredients for compatable alchemy function mcl_potions.get_alchemy(ingr, pot) - - if output_table[pot] ~= nil then + if output_table[pot] then local brew_table = output_table[pot] - if brew_table[ingr] ~= nil then + if brew_table[ingr] then return brew_table[ingr] end - end - if mod_table[ingr] ~= nil then + if mod_table[ingr] then local brew_table = mod_table[ingr] - if brew_table[pot] ~= nil then + if brew_table[pot] then return brew_table[pot] end @@ -455,3 +450,12 @@ function mcl_potions.get_alchemy(ingr, pot) return false end + +mcl_wip.register_wip_item("mcl_potions:night_vision") +mcl_wip.register_wip_item("mcl_potions:night_vision_plus") +mcl_wip.register_wip_item("mcl_potions:night_vision_splash") +mcl_wip.register_wip_item("mcl_potions:night_vision_plus_splash") +mcl_wip.register_wip_item("mcl_potions:night_vision_lingering") +mcl_wip.register_wip_item("mcl_potions:night_vision_plus_lingering") +mcl_wip.register_wip_item("mcl_potions:night_vision_arrow") +mcl_wip.register_wip_item("mcl_potions:night_vision_plus_arrow") \ No newline at end of file diff --git a/mods/ITEMS/mcl_potions/lingering.lua b/mods/ITEMS/mcl_potions/lingering.lua index cea045233..d22dd4181 100644 --- a/mods/ITEMS/mcl_potions/lingering.lua +++ b/mods/ITEMS/mcl_potions/lingering.lua @@ -1,19 +1,16 @@ -local S = minetest.get_translator("mcl_potions") +local S = minetest.get_translator(minetest.get_current_modname()) -local lingering_image = function(colorstring, opacity) +local function lingering_image(colorstring, opacity) if not opacity then opacity = 127 end return "mcl_potions_splash_overlay.png^[colorize:"..colorstring..":"..tostring(opacity).."^mcl_potions_lingering_bottle.png" end - local lingering_effect_at = {} local function add_lingering_effect(pos, color, def, is_water, instant) - lingering_effect_at[pos] = {color = color, timer = 30, def = def, is_water = is_water} - end local function linger_particles(pos, d, texture, color) @@ -142,7 +139,7 @@ minetest.register_entity(id.."_flying",{ local pos = self.object:get_pos() local node = minetest.get_node(pos) local n = node.name - local g = minetest.get_node_group(n, "liquid") + local g = minetest.get_item_group(n, "liquid") local d = 4 if n ~= "air" and n ~= "mcl_portals:portal" and n ~= "mcl_portals:portal_end" and g == 0 or mcl_potions.is_obj_hit(self, pos) then minetest.sound_play("mcl_potions_breaking_glass", {pos = pos, max_hear_distance = 16, gain = 1}) diff --git a/mods/ITEMS/mcl_potions/locale/mcl_potions.de.tr b/mods/ITEMS/mcl_potions/locale/mcl_potions.de.tr index 36f5280b9..34693d531 100644 --- a/mods/ITEMS/mcl_potions/locale/mcl_potions.de.tr +++ b/mods/ITEMS/mcl_potions/locale/mcl_potions.de.tr @@ -112,18 +112,3 @@ No effect=Keine Wirkung A throwable potion that will shatter on impact, where it gives all nearby players and mobs a status effect.=Ein werfbarer Trank, der bei Kollision zerbrechen wird, wo er allen nahen Spielern und Mobs einen Statuseffekt geben wird. This particular arrow is tipped and will give an effect when it hits a player or mob.=Diese Pfeilspitze dieses Pfeils in einem Trank getränkt und gibt einen Effekt, wenn er einen Spieler oder einen Mob trifft. - - - -##### not used anymore ##### - -Lingering Weakness Potion=Schwächeverweiltrank -Lingering Weakness Potion +=Schwächeverweiltrank + -Lingering Strength Potion=Stärkeverweiltrank -Lingering Strength Potion II=Stärkeverweiltrank II -Lingering Strength Potion +=Stärkeverweiltrank + -Weakness Splash Potion=Schwächewurftrank -Weakness Splash Potion +=Schwächewurftrank + -Strength Splash Potion=Stärkewurftrank -Strength Splash Potion II=Stärkewurftrank II -Strength Splash Potion +=Stärkewurftrank + diff --git a/mods/ITEMS/mcl_potions/locale/mcl_potions.pl.tr b/mods/ITEMS/mcl_potions/locale/mcl_potions.pl.tr new file mode 100644 index 000000000..abf61d4d3 --- /dev/null +++ b/mods/ITEMS/mcl_potions/locale/mcl_potions.pl.tr @@ -0,0 +1,115 @@ +# textdomain: mcl_potions + []= [] + +Add a status effect to yourself. Arguments: : name of status effect, e.g. poison. : duration in seconds. : effect strength multiplier (1 @= 100%)=Dodaj status na siebie. Argumenty: : nazwa efektu statusu, np. trucizna. : czas trwania w sekundach. : czynnik siły efektu (1 @= 100%) + +Missing effect parameter!=Brak parametru efektu! +Missing or invalid duration parameter!=Brak lub nieprawidłowy parametr czasu trwania! +Invalid factor parameter!=Nieprawidłowy parametr czynnika! +@1 is not an available status effect.=@1 nie jest dostępnym efektem statusu. +Fermented Spider Eye=Fermentowane oko pająka +Glass Bottle=Szklana butelka +Liquid container=Pojemnik na płyn + +A glass bottle is used as a container for liquids and can be used to collect water directly.=Szklana butelka jest używana jako pojemnik na płyny i może być wykorzystana bezpośrednio do pozyskiwania wody. + +To collect water, use it on a cauldron with water (which removes a level of water) or any water source (which removes no water).=Aby pozyskać wodę użyj jej na kotle z wodą (co usunie jeden poziom wody) lub jakimkolwiek źródle wody (co nie usunie wody). + +Water Bottle=Butelka wody +Water bottles can be used to fill cauldrons. Drinking water has no effect.=Butelka wody może być wykorzystana do napełniania kotłów. Picie wody nie ma żadnych efektów. + +Use the “Place” key to drink. Place this item on a cauldron to pour the water into the cauldron.=Użyj przycisku do stawiania aby pić. Postaw ten przedmiot na kotle aby wylać wodę do kotła. + +River Water Bottle=Butelka wody rzecznej +River water bottles can be used to fill cauldrons. Drinking it has no effect.=Butelka wody rzecznej może być wykorzystana do napełniania kotłów. Picie jej nie ma żadnego efektu. + +Use the “Place” key to drink. Place this item on a cauldron to pour the river water into the cauldron.=Użyj przycisku do stawiania aby pić. Postaw ten przedmiot na kotle aby wylać wodę rzeczną do kotła. + +Splash Water Bottle=Miotana butelka wody +Extinguishes fire and hurts some mobs=Gasi ogień i rani niektóre moby + +A throwable water bottle that will shatter on impact, where it extinguishes nearby fire and hurts mobs that are vulnerable to water.=Butelka wody którą można rzucać i roztrzaska się przy uderzeniu, gdzie ugasi ogień i rani moby podatne na wodę. + +Lingering Water Bottle=Trwała miotana butelka wody + +A throwable water bottle that will shatter on impact, where it creates a cloud of water vapor that lingers on the ground for a while. This cloud extinguishes fire and hurts mobs that are vulnerable to water.=Butelka wody którą można rzucać i roztrzaska się przy uderzeniu tworząc opary wody pozostające przez chwilę na ziemi. Opary te gaszą ogień i ranią moby podatne na wodę. + +Glistering Melon=Błyszczący arbuz + +This shiny melon is full of tiny gold nuggets and would be nice in an item frame. It isn't edible and not useful for anything else.=Ten błyszczący arbuz jest pełen tycich odłamków złota i wygląda ładnie w ramkach na przedmioty. Nie jest jadalny ani użyteczny do innych rzeczy. + +A throwable potion that will shatter on impact, where it creates a magic cloud that lingers around for a while. Any player or mob inside the cloud will receive the potion's effect, possibly repeatedly.=Mikstura którą można rzucać i roztrzaska się przy uderzeniu tworząc magiczne opary pozostające przez chwilę na ziemi. Jakikolwiek gracz lub mob wewnątrz oparów będzie wystawiony na efekt mikstury. + +Use the “Punch” key to throw it.=Użyj przycisku "Uderz" by rzucić. +Use the “Place” key to drink it.=Użyj przycisku "Postaw" by wypić. +Drinking a potion gives you a particular effect.=Wypicie mikstury sprawi, że będziesz wystawiona na jej efekty. +1 HP/@1s | @2=1 HP/@1s | @2 +@1 HP=@1 HP +@1 Potion=Mikstura @1 +Splash @1 Potion=Miotana mikstura @1 +Lingering @1 Potion=Trwała miotana mikstura @1 +Arrow of @1=Strzała @1 + II= II + IV= IV +@1 Potion@2=Mikstura @1@2 +Splash @1@2 Potion=Miotana mikstura @1@2 +Lingering @1@2 Potion=Trwała miotana mikstura @1@2 +Arrow of @1@2=Strzała @1@2 +@1 + Potion=Mikstura @1 + +Splash @1 + Potion=Miotana mikstura @1 + +Lingering @1 + Potion=Trwała miotana mikstura @1 + +Arrow of @1 +=Strzała @1 + +Awkward Potion=Klarowna mikstura +Awkward Splash Potion=Klarowna miotana mikstura +Awkward Lingering Potion=Klarowna trwała miotana mikstura +Has an awkward taste and is used for brewing potions.=Ma dziwny smak i jest użyteczna przy warzenia mikstur. +Mundane Potion=Mdła mikstura +Mundane Splash Potion=Mdła miotana mikstura +Mundane Lingering Potion=Mdła trwała miotana mikstura +Has a terrible taste and is not useful for brewing potions.=Ma ohydny smak i nie jest użyteczna przy warzenia mikstur. +Thick Potion=Gęsta mikstura +Thick Splash Potion=Gęsta miotana mikstura +Thick Lingering Potion=Gęsta trwała miotana mikstura +Has a bitter taste and is not useful for brewing potions.=Ma cierpki smak i nie jest użyteczna przy warzenia mikstur. +Dragon's Breath=Oddech smoka + +This item is used in brewing and can be combined with splash potions to create lingering potions.=Ten przedmiot jest używany przy warzeniu i może zostać dodany do miotanych mikstur aby uczynić je trwałymi. + +Healing=leczenia ++4 HP=+4 HP ++8 HP=+8 HP +Instantly heals.=Natychmiastowo leczy. +Harming=obrażeń +-6 HP=-6 HP +-12 HP=-12 HP +Instantly deals damage.=Natychmiastowo zadaje obrażenia. +Night Vision=widzenia w ciemności +Increases the perceived brightness of light under a dark sky.=Zwiększa postrzeganą jasność przy ciemnym niebie. +Swiftness=prędkości +Increases walking speed.=Zwiększa prędkość poruszania. +Slowness=spowolnienia +Decreases walking speed.=Zmniejsza prędkość poruszania. +Leaping=skakania +Increases jump strength.=Zwiększa siłę skoku. +Poison=trucizny +Applies the poison effect which deals damage at a regular interval.=Aplikuje efekt trucizny zadający obrażenia w regularnych odstępach czasu. +Regeneration=regeneracji +Regenerates health over time.=Regeneruje życie przez pewien czas. +Invisibility=niewidzialności +Grants invisibility.=Sprawia, że cel jest niewidzialny. +Water Breathing=oddychania pod wodą +Grants limitless breath underwater.=Sprawia, że cel może oddychać pod wodą. +Fire Resistance=odporności na ogień +Grants immunity to damage from heat sources like fire.=Sprawia, że cel jest odporny na obrażenia od źródeł ciepła takich jak ogień. +Weakness=słabości +Weakness +=słabości + +Strength=siły +Strength II=siły II +Strength +=siły + +Try different combinations to create potions.=Spróbuj innej kombinacji aby stworzyć miksturę. +No effect=Brak efektu + +A throwable potion that will shatter on impact, where it gives all nearby players and mobs a status effect.=Mikstura, którą można rzucić i rozbije się przy uderzeniu wystawiając wszystkich pobliskich graczy i moby na efekt jej działania. + +This particular arrow is tipped and will give an effect when it hits a player or mob.=Czubek tej strzały jest zanurzony w miksturze co wystawi jej cel na efekt jej działania. + diff --git a/mods/ITEMS/mcl_potions/mod.conf b/mods/ITEMS/mcl_potions/mod.conf index 3d6fd0011..bcb6d8ad3 100644 --- a/mods/ITEMS/mcl_potions/mod.conf +++ b/mods/ITEMS/mcl_potions/mod.conf @@ -1,2 +1,2 @@ name = mcl_potions -depends = mcl_core, mcl_farming, mcl_mobitems, mcl_fishing, mcl_bows, mcl_end, mcl_weather, playerphysics +depends = mcl_core, mcl_farming, mcl_mobitems, mcl_fishing, mcl_bows, mcl_end, mcl_weather, playerphysics, mcl_wip diff --git a/mods/ITEMS/mcl_potions/potions.lua b/mods/ITEMS/mcl_potions/potions.lua index 4a82348e5..3d89d1d40 100644 --- a/mods/ITEMS/mcl_potions/potions.lua +++ b/mods/ITEMS/mcl_potions/potions.lua @@ -1,7 +1,7 @@ -local S = minetest.get_translator("mcl_potions") -local brewhelp = S("Try different combinations to create potions.") +local S = minetest.get_translator(minetest.get_current_modname()) +--local brewhelp = S("Try different combinations to create potions.") -local potion_image = function(colorstring, opacity) +local function potion_image(colorstring, opacity) if not opacity then opacity = 127 end @@ -98,7 +98,7 @@ local function register_potion(def) end elseif def.name == "healing" or def.name == "harming" then _tt = S("@1 HP", effect) - else + else _tt = tt or time_string(dur) or S("No effect") end return _tt @@ -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 -- }) diff --git a/mods/ITEMS/mcl_potions/splash.lua b/mods/ITEMS/mcl_potions/splash.lua index d5cf30782..112b58754 100644 --- a/mods/ITEMS/mcl_potions/splash.lua +++ b/mods/ITEMS/mcl_potions/splash.lua @@ -1,7 +1,7 @@ -local S = minetest.get_translator("mcl_potions") +local S = minetest.get_translator(minetest.get_current_modname()) local GRAVITY = tonumber(minetest.settings:get("movement_gravity")) -local splash_image = function(colorstring, opacity) +local function splash_image(colorstring, opacity) if not opacity then opacity = 127 end @@ -10,7 +10,6 @@ end function mcl_potions.register_splash(name, descr, color, def) - local id = "mcl_potions:"..name.."_splash" local longdesc = def.longdesc if not def.no_effect then @@ -64,7 +63,7 @@ function mcl_potions.register_splash(name, descr, color, def) local pos = self.object:get_pos() local node = minetest.get_node(pos) local n = node.name - local g = minetest.get_node_group(n, "liquid") + local g = minetest.get_item_group(n, "liquid") local d = 0.1 local redux_map = {7/8,0.5,0.25} if n ~= "air" and n ~= "mcl_portals:portal" and n ~= "mcl_portals:portal_end" and g == 0 or mcl_potions.is_obj_hit(self, pos) then @@ -123,6 +122,6 @@ function mcl_potions.register_splash(name, descr, color, def) }) end -local function time_string(dur) +--[[local function time_string(dur) return math.floor(dur/60)..string.format(":%02d",math.floor(dur % 60)) -end +end]] diff --git a/mods/ITEMS/mcl_potions/tipped_arrow.lua b/mods/ITEMS/mcl_potions/tipped_arrow.lua index 31e7c1ddd..ab55cb72a 100644 --- a/mods/ITEMS/mcl_potions/tipped_arrow.lua +++ b/mods/ITEMS/mcl_potions/tipped_arrow.lua @@ -1,15 +1,18 @@ -local S = minetest.get_translator("mcl_potions") +local S = minetest.get_translator(minetest.get_current_modname()) + +local math = math + -- Time in seconds after which a stuck arrow is deleted local ARROW_TIMEOUT = 60 -- Time after which stuck arrow is rechecked for being stuck local STUCK_RECHECK_TIME = 5 -local GRAVITY = 9.81 +--local GRAVITY = 9.81 local YAW_OFFSET = -math.pi/2 -local dir_to_pitch = function(dir) - local dir2 = vector.normalize(dir) +local function dir_to_pitch(dir) + --local dir2 = vector.normalize(dir) local xz = math.abs(dir.x) + math.abs(dir.z) return -math.atan2(-dir.y, xz) end @@ -18,12 +21,7 @@ local function arrow_image(colorstring, opacity) if not opacity then opacity = 127 end - return {"mcl_bows_arrow.png^[transformFX^(mcl_bows_arrow_overlay.png^[transformFX^[colorize:"..colorstring..":"..tostring(opacity)..")", - "mcl_bows_arrow.png^[transformFX^(mcl_bows_arrow_overlay.png^[transformFX^[colorize:"..colorstring..":"..tostring(opacity)..")", - "mcl_bows_arrow_back.png^[colorize:"..colorstring..":"..tostring(opacity), - "mcl_bows_arrow_front.png^[colorize:"..colorstring..":"..tostring(opacity), - "mcl_bows_arrow.png^(mcl_bows_arrow_overlay.png^[colorize:"..colorstring..":"..tostring(opacity)..")", - "mcl_bows_arrow.png^[transformFX^(mcl_bows_arrow_overlay.png^[transformFX^[colorize:"..colorstring..":"..tostring(opacity)..")"} + return {"mcl_bows_arrow.png^(mcl_bows_arrow_overlay.png^[colorize:"..colorstring..":"..tostring(opacity)..")"} end local how_to_shoot = minetest.registered_items["mcl_bows:arrow"]._doc_items_usagehelp @@ -84,6 +82,7 @@ function mcl_potions.register_arrow(name, desc, color, def) } }, tiles = arrow_image(color, 100), + use_texture_alpha = minetest.features.use_texture_alpha_string_modes and "opaque" or false, paramtype = "light", paramtype2 = "facedir", sunlight_propagates = true, @@ -99,9 +98,10 @@ function mcl_potions.register_arrow(name, desc, color, def) local ARROW_ENTITY={ physical = true, - visual = "wielditem", - visual_size = {x=0.4, y=0.4}, - textures = {"mcl_potions:"..name.."_arrow_box"}, + visual = "mesh", + mesh = "mcl_bows_arrow.obj", + visual_size = {x=-1, y=1}, + textures = arrow_image(color, 100), collisionbox = {-0.19, -0.125, -0.19, 0.19, 0.125, 0.19}, collide_with_objects = false, @@ -119,7 +119,7 @@ function mcl_potions.register_arrow(name, desc, color, def) } -- Destroy arrow entity self at pos and drops it as an item - local spawn_item = function(self, pos) + local function spawn_item(self, pos) if not minetest.is_creative_enabled("") then local item = minetest.add_item(pos, "mcl_potions:"..name.."_arrow") item:set_velocity({x=0, y=0, z=0}) @@ -128,7 +128,7 @@ function mcl_potions.register_arrow(name, desc, color, def) self.object:remove() end - ARROW_ENTITY.on_step = function(self, dtime) + function ARROW_ENTITY.on_step(self, dtime) local pos = self.object:get_pos() local dpos = table.copy(pos) -- digital pos dpos = vector.round(dpos) @@ -176,6 +176,25 @@ function mcl_potions.register_arrow(name, desc, color, def) -- Check for object "collision". Done every tick (hopefully this is not too stressing) else + + if self._damage == 10 or self._damage == 9 then + minetest.add_particlespawner({ + amount = 1, + time = .001, + minpos = pos, + maxpos = pos, + minvel = vector.new(-0.1,-0.1,-0.1), + maxvel = vector.new(0.1,0.1,0.1), + minexptime = 0.5, + maxexptime = 0.5, + minsize = 2, + maxsize = 2, + collisiondetection = false, + vertical = false, + texture = "mobs_mc_arrow_particle.png", + glow = 1, + }) + end -- We just check for any hurtable objects nearby. -- The radius of 3 is fairly liberal, but anything lower than than will cause -- arrow to hilariously go through mobs often. @@ -194,7 +213,7 @@ function mcl_potions.register_arrow(name, desc, color, def) -- Arrows can only damage players and mobs if obj ~= self._shooter and obj:is_player() then ok = true - elseif obj:get_luaentity() ~= nil then + elseif obj:get_luaentity() then if obj ~= self._shooter and obj:get_luaentity()._cmi_is_mob then ok = true end @@ -213,7 +232,7 @@ function mcl_potions.register_arrow(name, desc, color, def) end -- If an attackable object was found, we will damage the closest one only - if closest_object ~= nil then + if closest_object then local obj = closest_object local is_player = obj:is_player() local lua = obj:get_luaentity() @@ -338,7 +357,7 @@ function mcl_potions.register_arrow(name, desc, color, def) if not v then v = 0 end - local old_v = self._viscosity + --local old_v = self._viscosity self._viscosity = v local vpenalty = math.max(0.1, 0.98 - 0.1 * v) if math.abs(vel.x) > 0.001 then @@ -365,13 +384,13 @@ function mcl_potions.register_arrow(name, desc, color, def) -- Force recheck of stuck arrows when punched. -- Otherwise, punching has no effect. - ARROW_ENTITY.on_punch = function(self) + function ARROW_ENTITY.on_punch(self) if self._stuck then self._stuckrechecktimer = STUCK_RECHECK_TIME end end - ARROW_ENTITY.get_staticdata = function(self) + function ARROW_ENTITY.get_staticdata(self) local out = { lastpos = self._lastpos, startpos = self._startpos, @@ -392,7 +411,7 @@ function mcl_potions.register_arrow(name, desc, color, def) return minetest.serialize(out) end - ARROW_ENTITY.on_activate = function(self, staticdata, dtime_s) + function ARROW_ENTITY.on_activate(self, staticdata, dtime_s) local data = minetest.deserialize(staticdata) if data then self._stuck = data.stuck @@ -430,20 +449,18 @@ function mcl_potions.register_arrow(name, desc, color, def) minetest.register_entity("mcl_potions:"..name.."_arrow_entity", ARROW_ENTITY) if minetest.get_modpath("mcl_bows") then - minetest.register_craft({ - output = 'mcl_potions:'..name..'_arrow 8', + output = "mcl_potions:"..name.."_arrow 8", recipe = { - {'mcl_bows:arrow','mcl_bows:arrow','mcl_bows:arrow'}, - {'mcl_bows:arrow','mcl_potions:'..name..'_lingering','mcl_bows:arrow'}, - {'mcl_bows:arrow','mcl_bows:arrow','mcl_bows:arrow'} + {"mcl_bows:arrow","mcl_bows:arrow","mcl_bows:arrow"}, + {"mcl_bows:arrow","mcl_potions:"..name.."_lingering","mcl_bows:arrow"}, + {"mcl_bows:arrow","mcl_bows:arrow","mcl_bows:arrow"} } }) end - if minetest.get_modpath("doc_identifier") ~= nil then + if minetest.get_modpath("doc_identifier") then doc.sub.identifier.register_object("mcl_bows:arrow_entity", "craftitems", "mcl_bows:arrow") end - -end +end \ No newline at end of file diff --git a/mods/ITEMS/mcl_signs/depends.txt b/mods/ITEMS/mcl_signs/depends.txt deleted file mode 100644 index f123382f8..000000000 --- a/mods/ITEMS/mcl_signs/depends.txt +++ /dev/null @@ -1,3 +0,0 @@ -mcl_sounds? -mcl_core? -doc? diff --git a/mods/ITEMS/mcl_signs/init.lua b/mods/ITEMS/mcl_signs/init.lua index d21b58242..b6bfb3fe8 100644 --- a/mods/ITEMS/mcl_signs/init.lua +++ b/mods/ITEMS/mcl_signs/init.lua @@ -1,6 +1,10 @@ -local S = minetest.get_translator("mcl_signs") +local modname = minetest.get_current_modname() +local modpath = minetest.get_modpath(modname) +local S = minetest.get_translator(modname) local F = minetest.formspec_escape +local table = table + -- Load the characters map (characters.txt) --[[ File format of characters.txt: It's an UTF-8 encoded text file that contains metadata for all supported characters. It contains a sequence of info blocks, one for each character. Each info block is made out of 3 lines: @@ -13,7 +17,7 @@ After line 3, another info block may follow. This repeats until the end of the f All character files must be 5 or 6 pixels wide (5 pixels are preferred) ]] -local chars_file = io.open(minetest.get_modpath("mcl_signs").."/characters.txt", "r") +local chars_file = io.open(modpath.."/characters.txt", "r") -- FIXME: Support more characters (many characters are missing). Currently ASCII and Latin-1 Supplement are supported. local charmap = {} if not chars_file then @@ -46,7 +50,7 @@ local function round(num, idp) return math.floor(num * mult + 0.5) / mult end -local string_to_array = function(str) +local function string_to_array(str) local tab = {} for i=1,string.len(str) do table.insert(tab, string.sub(str, i,i)) @@ -54,7 +58,7 @@ local string_to_array = function(str) return tab end -local string_to_line_array = function(str) +local function string_to_line_array(str) local tab = {} local current = 1 local linechar = 1 @@ -73,7 +77,7 @@ local string_to_line_array = function(str) return tab end -local create_lines = function(text) +local function create_lines(text) local line_num = 1 local tab = {} for _, line in ipairs(string_to_line_array(text)) do @@ -86,19 +90,19 @@ local create_lines = function(text) return tab end -local generate_line = function(s, ypos) +local function generate_line(s, ypos) local i = 1 local parsed = {} local width = 0 local chars = 0 local printed_char_width = CHAR_WIDTH + 1 while chars < LINE_LENGTH and i <= #s do - local file = nil + local file -- Get and render character - if charmap[s:sub(i, i)] ~= nil then + if charmap[s:sub(i, i)] then file = charmap[s:sub(i, i)] i = i + 1 - elseif i < #s and charmap[s:sub(i, i + 1)] ~= nil then + elseif i < #s and charmap[s:sub(i, i + 1)] then file = charmap[s:sub(i, i + 1)] i = i + 2 else @@ -108,7 +112,7 @@ local generate_line = function(s, ypos) i = i + 1 minetest.log("verbose", "[mcl_signs] Unknown symbol in '"..s.."' at "..i) end - if file ~= nil then + if file then width = width + printed_char_width table.insert(parsed, file) chars = chars + 1 @@ -125,7 +129,7 @@ local generate_line = function(s, ypos) return texture end -local generate_texture = function(lines, signnodename) +local function generate_texture(lines, signnodename) local texture = "[combine:"..SIGN_WIDTH.."x"..SIGN_WIDTH local ypos if signnodename == "mcl_signs:wall_sign" then @@ -152,6 +156,7 @@ local signtext_info_wall = { local signtext_info_standing = {} local m = -1/16 + 1/64 + for rot=0, 15 do local yaw = math.pi*2 - (((math.pi*2) / 16) * rot) local delta = vector.multiply(minetest.yaw_to_dir(yaw), m) @@ -185,9 +190,9 @@ local function get_wall_signtext_info(param2, nodename) end end -local sign_groups = {handy=1,axey=1, flammable=1, deco_block=1, material_wood=1, attached_node=1, dig_by_piston=1, flammable=-1} +local sign_groups = {handy=1,axey=1, deco_block=1, material_wood=1, attached_node=1, dig_by_piston=1, flammable=-1} -local destruct_sign = function(pos) +local function destruct_sign(pos) local objects = minetest.get_objects_inside_radius(pos, 0.5) for _, v in ipairs(objects) do local ent = v:get_luaentity() @@ -203,7 +208,7 @@ local destruct_sign = function(pos) end end -local update_sign = function(pos, fields, sender, force_remove) +local function update_sign(pos, fields, sender, force_remove) local meta = minetest.get_meta(pos) if not meta then return @@ -256,7 +261,7 @@ local update_sign = function(pos, fields, sender, force_remove) text_entity:set_yaw(sign_info.yaw) end -local show_formspec = function(player, pos) +local function show_formspec(player, pos) minetest.show_formspec( player:get_player_name(), "mcl_signs:set_text_"..pos.x.."_"..pos.y.."_"..pos.z, @@ -295,6 +300,7 @@ minetest.register_node("mcl_signs:wall_sign", { mesh = "mcl_signs_signonwallmount.obj", selection_box = {type = "wallmounted", wall_side = {-0.5, -7/28, -0.5, -23/56, 7/28, 0.5}}, tiles = {"mcl_signs_sign.png"}, + use_texture_alpha = minetest.features.use_texture_alpha_string_modes and "opaque" or false, groups = sign_groups, stack_max = 16, sounds = node_sounds, @@ -321,7 +327,7 @@ minetest.register_node("mcl_signs:wall_sign", { local wdir = minetest.dir_to_wallmounted(dir) - local placer_pos = placer:get_pos() + --local placer_pos = placer:get_pos() local fdir = minetest.dir_to_facedir(dir) @@ -425,6 +431,7 @@ minetest.register_node("mcl_signs:wall_sign", { -- 0° local ssign = { paramtype = "light", + use_texture_alpha = minetest.features.use_texture_alpha_string_modes and "opaque" or false, sunlight_propagates = true, walkable = false, is_ground_content = false, @@ -516,7 +523,7 @@ minetest.register_entity("mcl_signs:text", { _signnodename = nil, -- node name of sign node to which the text belongs on_activate = function(self, staticdata) - if staticdata ~= nil and staticdata ~= "" then + if staticdata and staticdata ~= "" then local des = minetest.deserialize(staticdata) if des then self._signnodename = des._signnodename @@ -543,11 +550,11 @@ minetest.register_craft({ if minetest.get_modpath("mcl_core") then minetest.register_craft({ - output = 'mcl_signs:wall_sign 3', + output = "mcl_signs:wall_sign 3", recipe = { - {'group:wood', 'group:wood', 'group:wood'}, - {'group:wood', 'group:wood', 'group:wood'}, - {'', 'mcl_core:stick', ''}, + {"group:wood", "group:wood", "group:wood"}, + {"group:wood", "group:wood", "group:wood"}, + {"", "mcl_core:stick", ""}, } }) end diff --git a/mods/ITEMS/mcl_signs/locale/mcl_signs.pl.tr b/mods/ITEMS/mcl_signs/locale/mcl_signs.pl.tr new file mode 100644 index 000000000..bf3bbf3c8 --- /dev/null +++ b/mods/ITEMS/mcl_signs/locale/mcl_signs.pl.tr @@ -0,0 +1,9 @@ +# textdomain: mcl_signs +Sign=Znak +Signs can be written and come in two variants: Wall sign and sign on a sign post. Signs can be placed on the top and the sides of other blocks, but not below them.=Na znakach można pisać i postawić je w dwóch wariantach: znak ścienny i znak na patyku. Znaki mogą być stawiane na górze i na bokach bloków, ale nie pod nimi. +After placing the sign, you can write something on it. You have 4 lines of text with up to 15 characters for each line; anything beyond these limits is lost. Not all characters are supported. The text can not be changed once it has been written; you have to break and place the sign again.=Po postawieniu znaku możesz coś na nim napisać. Masz miejsce na cztery linie tekstu po 15 znaków każda; cokolwiek poza limitami będzie utracone. Nie wszystkie znaki są wspierane. Tekstu nie można zmienić po napisaniu; musisz zniszczyć znak i postawić go ponownie. +Enter sign text:=Wpisz tekst znaku: +Maximum line length: 15=Maksymalna długość linii: 15 +Maximum lines: 4=Maksymalna liczba linii: 4 +Done=Skończone +Can be written=Można na nim coś napisać diff --git a/mods/ITEMS/mcl_signs/mod.conf b/mods/ITEMS/mcl_signs/mod.conf index 8346bbcb4..1af689d7b 100644 --- a/mods/ITEMS/mcl_signs/mod.conf +++ b/mods/ITEMS/mcl_signs/mod.conf @@ -1 +1,2 @@ name = mcl_signs +optional_depends = mcl_sounds, mcl_core, doc diff --git a/mods/ITEMS/mcl_sponges/depends.txt b/mods/ITEMS/mcl_sponges/depends.txt deleted file mode 100644 index 10e9d2909..000000000 --- a/mods/ITEMS/mcl_sponges/depends.txt +++ /dev/null @@ -1,3 +0,0 @@ -mcl_sounds -mcl_core? -mclx_core? diff --git a/mods/ITEMS/mcl_sponges/description.txt b/mods/ITEMS/mcl_sponges/description.txt deleted file mode 100644 index 80f47c25f..000000000 --- a/mods/ITEMS/mcl_sponges/description.txt +++ /dev/null @@ -1 +0,0 @@ -A sponge which sucks in water (WIP). diff --git a/mods/ITEMS/mcl_sponges/init.lua b/mods/ITEMS/mcl_sponges/init.lua index 4a2107f88..a1998ecb0 100644 --- a/mods/ITEMS/mcl_sponges/init.lua +++ b/mods/ITEMS/mcl_sponges/init.lua @@ -1,4 +1,4 @@ -local S = minetest.get_translator("mcl_sponges") +local S = minetest.get_translator(minetest.get_current_modname()) local absorb = function(pos) local change = false @@ -48,7 +48,7 @@ minetest.register_node("mcl_sponges:sponge", { buildable_to = false, stack_max = 64, sounds = mcl_sounds.node_sound_dirt_defaults(), - groups = {handy=1, building_block=1}, + groups = {handy=1, hoey=1, building_block=1}, on_place = function(itemstack, placer, pointed_thing) local pn = placer:get_player_name() if pointed_thing.type ~= "node" then @@ -73,7 +73,7 @@ minetest.register_node("mcl_sponges:sponge", { on_water = true end local water_found = minetest.find_node_near(pos, 1, "group:water") - if water_found ~= nil then + if water_found then on_water = true end if on_water then @@ -94,6 +94,48 @@ minetest.register_node("mcl_sponges:sponge", { _mcl_hardness = 0.6, }) +function place_wet_sponge(itemstack, placer, pointed_thing) + if pointed_thing.type ~= "node" then + return itemstack + end + -- Use pointed node's on_rightclick function first, if present + local node = minetest.get_node(pointed_thing.under) + if placer and not placer:get_player_control().sneak then + if minetest.registered_nodes[node.name] and minetest.registered_nodes[node.name].on_rightclick then + return minetest.registered_nodes[node.name].on_rightclick(pointed_thing.under, node, placer, itemstack) or itemstack + end + end + + local name = placer:get_player_name() + + if minetest.is_protected(pointed_thing.above, name) then + return itemstack + end + + if mcl_worlds.pos_to_dimension(pointed_thing.above) == "nether" then + minetest.item_place_node(ItemStack("mcl_sponges:sponge"), placer, pointed_thing) + local pos = pointed_thing.above + for n = 0, 25 do + minetest.add_particle({ + pos = {x = pos.x + math.random(-1, 1)*math.random()/2, y = pos.y + 0.6, z = pos.z + math.random(-1, 1)*math.random()/2}, + velocity = {x = 0, y = math.random(), z = 0}, + acceleration = {x=0, y=0, z=0}, + expirationtime = math.random(), + collisiondetection = false, + vertical = false, + size = math.random(2, 5), + texture = "mcl_particles_sponge"..math.random(1, 5)..".png", + }) + end + if not minetest.is_creative_enabled(name) then + itemstack:take_item() + end + return itemstack + end + + return minetest.item_place_node(itemstack, placer, pointed_thing) +end + minetest.register_node("mcl_sponges:sponge_wet", { description = S("Waterlogged Sponge"), _tt_help = S("Can be dried in furnace"), @@ -107,7 +149,8 @@ minetest.register_node("mcl_sponges:sponge_wet", { buildable_to = false, stack_max = 64, sounds = mcl_sounds.node_sound_dirt_defaults(), - groups = {handy=1, building_block=1}, + groups = {handy=1, hoey=1, building_block=1}, + on_place = place_wet_sponge, _mcl_blast_resistance = 0.6, _mcl_hardness = 0.6, }) @@ -127,6 +170,7 @@ if minetest.get_modpath("mclx_core") then stack_max = 64, sounds = mcl_sounds.node_sound_dirt_defaults(), groups = {handy=1, building_block=1}, + on_place = place_wet_sponge, _mcl_blast_resistance = 0.6, _mcl_hardness = 0.6, }) diff --git a/mods/ITEMS/mcl_sponges/locale/mcl_sponges.pl.tr b/mods/ITEMS/mcl_sponges/locale/mcl_sponges.pl.tr new file mode 100644 index 000000000..6cb6bf474 --- /dev/null +++ b/mods/ITEMS/mcl_sponges/locale/mcl_sponges.pl.tr @@ -0,0 +1,10 @@ +# textdomain: mcl_sponges +Sponge=Gąbka +Sponges are blocks which remove water around them when they are placed or come in contact with water, turning it into a wet sponge.=Gąbki to bloki które usuwają wodę wokół siebie gdy są postawione, lub gdy wejdą w kontakt z wodą, zamieniając się w mokre gąbki. +Waterlogged Sponge=Nasiąknięta gąbka +A waterlogged sponge can be dried in the furnace to turn it into (dry) sponge. When there's an empty bucket in the fuel slot of a furnace, the water will pour into the bucket.=Nasiąknięta gąbka może zostać wysuszona w piecu by zamienić się w (suchą) gąbkę. Jeśli w miejscu na paliwo jest puste wiadro, to woda wyleje się do wiaderka. +Riverwaterlogged Sponge=Gąbka nasiąknięta wodą rzeczną +This is a sponge soaking wet with river water. It can be dried in the furnace to turn it into (dry) sponge. When there's an empty bucket in the fuel slot of the furnace, the river water will pour into the bucket.=To jest gąbka, która wchłonęła wodę rzeczną. Może zostać wysuszona w piecu by zamienić się w (suchą) gąbkę. Jeśli w miejscu na paliwo jest puste wiadro, to woda rzeczna wyleje się do wiaderka. +A sponge becomes riverwaterlogged (instead of waterlogged) if it sucks up more river water than (normal) water.=Gąbka zostanie nasiąknięta wodą rzeczną jeśli nasiąknie większą ilością wody z rzeki niż normalnej wody. +Removes water on contact=Usuwa dotkniętą wodę +Can be dried in furnace=Może zostać wysuszona w piecu diff --git a/mods/ITEMS/mcl_sponges/mod.conf b/mods/ITEMS/mcl_sponges/mod.conf index 71a459c10..d833493b3 100644 --- a/mods/ITEMS/mcl_sponges/mod.conf +++ b/mods/ITEMS/mcl_sponges/mod.conf @@ -1 +1,4 @@ name = mcl_sponges +description = A sponge which sucks in water (WIP). +depends = mcl_sounds +optional_depends = mcl_core, mclx_core diff --git a/mods/ITEMS/mcl_stairs/api.lua b/mods/ITEMS/mcl_stairs/api.lua index aecf10836..34afb018e 100644 --- a/mods/ITEMS/mcl_stairs/api.lua +++ b/mods/ITEMS/mcl_stairs/api.lua @@ -1,4 +1,4 @@ -local S = minetest.get_translator("mcl_stairs") +local S = minetest.get_translator(minetest.get_current_modname()) -- Core mcl_stairs API @@ -20,7 +20,7 @@ local function place_slab_normal(itemstack, placer, pointed_thing) local p0 = pointed_thing.under local p1 = pointed_thing.above - local placer_pos = placer:get_pos() + --local placer_pos = placer:get_pos() local fpos = get_fpos(placer, pointed_thing) @@ -155,7 +155,7 @@ function mcl_stairs.register_stair(subname, recipeitem, groups, images, descript if recipeitem then minetest.register_craft({ - output = 'mcl_stairs:stair_' .. subname .. ' 4', + output = "mcl_stairs:stair_" .. subname .. " 4", recipe = { {recipeitem, "", ""}, {recipeitem, recipeitem, ""}, @@ -165,7 +165,7 @@ function mcl_stairs.register_stair(subname, recipeitem, groups, images, descript -- Flipped recipe minetest.register_craft({ - output = 'mcl_stairs:stair_' .. subname .. ' 4', + output = "mcl_stairs:stair_" .. subname .. " 4", recipe = { {"", "", recipeitem}, {"", recipeitem, recipeitem}, @@ -179,7 +179,7 @@ end -- Slab facedir to placement 6d matching table -local slab_trans_dir = {[0] = 8, 0, 2, 1, 3, 4} +--local slab_trans_dir = {[0] = 8, 0, 2, 1, 3, 4} -- Register slabs. -- Node will be called mcl_stairs:slab_ @@ -268,6 +268,7 @@ function mcl_stairs.register_slab(subname, recipeitem, groups, images, descripti end end, _mcl_hardness = hardness, + _mcl_blast_resistance = blast_resistance, _mcl_other_slab_half = upper_slab, on_rotate = function(pos, node, user, mode, param2) -- Flip slab @@ -296,7 +297,7 @@ function mcl_stairs.register_slab(subname, recipeitem, groups, images, descripti topdef._doc_items_usagehelp = nil topdef.drop = lower_slab topdef._mcl_other_slab_half = lower_slab - topdef.on_rotate = function(pos, node, user, mode, param2) + function topdef.on_rotate(pos, node, user, mode, param2) -- Flip slab if mode == screwdriver.ROTATE_AXIS then node.name = lower_slab @@ -331,6 +332,7 @@ function mcl_stairs.register_slab(subname, recipeitem, groups, images, descripti sounds = sounds, drop = lower_slab .. " 2", _mcl_hardness = hardness, + _mcl_blast_resistance = blast_resistance, }) if recipeitem then diff --git a/mods/ITEMS/mcl_stairs/cornerstair.lua b/mods/ITEMS/mcl_stairs/cornerstair.lua index 2d5f214e1..ae3eb4ea3 100644 --- a/mods/ITEMS/mcl_stairs/cornerstair.lua +++ b/mods/ITEMS/mcl_stairs/cornerstair.lua @@ -5,7 +5,7 @@ mcl_stairs.cornerstair = {} -local get_stair_param = function(node) +local function get_stair_param(node) local stair = minetest.get_item_group(node.name, "stair") if stair == 1 then return node.param2 @@ -24,7 +24,7 @@ local get_stair_param = function(node) end end -local get_stair_from_param = function(param, stairs) +local function get_stair_from_param(param, stairs) if param < 12 then if param < 4 then return {name = stairs[1], param2 = param} @@ -44,7 +44,7 @@ local get_stair_from_param = function(param, stairs) end end -local stair_param_to_connect = function(param, ceiling) +local function stair_param_to_connect(param, ceiling) local out = {false, false, false, false, false, false, false, false} if not ceiling then if param == 0 then @@ -126,7 +126,7 @@ local stair_param_to_connect = function(param, ceiling) return out end -local stair_connect_to_param = function(connect, ceiling) +local function stair_connect_to_param(connect, ceiling) local param if not ceiling then if connect[3] and connect[8] then @@ -240,7 +240,7 @@ function mcl_stairs.cornerstair.add(name, stairtiles) inner_groups.stair = 3 inner_groups.not_in_craft_guide = 1 local drop = node_def.drop or name - local after_dig_node = function(pos, oldnode) + local function after_dig_node(pos, oldnode) local param = get_stair_param(oldnode) local ceiling if param < 12 then @@ -273,7 +273,7 @@ function mcl_stairs.cornerstair.add(name, stairtiles) end end end - local swap_stair = function(index, n1, n2) + local function swap_stair(index, n1, n2) local connect = {false, false, false, false, false, false, false, false} connect[n1] = true connect[n2] = true @@ -425,13 +425,13 @@ function mcl_stairs.cornerstair.add(name, stairtiles) end end end - local reset_node = function(n1, n2) + local function reset_node(n1, n2) local connect = {false, false, false, false, false, false, false, false} connect[n1] = true connect[n2] = true node = get_stair_from_param(stair_connect_to_param(connect, ceiling), t[5].stairs) end - local swap_stair = function(index, n1, n2) + local function swap_stair(index, n1, n2) local connect = {false, false, false, false, false, false, false, false} connect[n1] = true connect[n2] = true diff --git a/mods/ITEMS/mcl_stairs/crafting.lua b/mods/ITEMS/mcl_stairs/crafting.lua index 702a78068..f31237eed 100644 --- a/mods/ITEMS/mcl_stairs/crafting.lua +++ b/mods/ITEMS/mcl_stairs/crafting.lua @@ -1,40 +1,40 @@ minetest.register_craft({ - output = 'mcl_core:sandstonecarved', + output = "mcl_core:sandstonecarved", recipe = { - {'mcl_stairs:slab_sandstone'}, - {'mcl_stairs:slab_sandstone'} + {"mcl_stairs:slab_sandstone"}, + {"mcl_stairs:slab_sandstone"} } }) minetest.register_craft({ - output = 'mcl_core:redsandstonecarved', + output = "mcl_core:redsandstonecarved", recipe = { - {'mcl_stairs:slab_redsandstone'}, - {'mcl_stairs:slab_redsandstone'} + {"mcl_stairs:slab_redsandstone"}, + {"mcl_stairs:slab_redsandstone"} } }) minetest.register_craft({ - output = 'mcl_core:stonebrickcarved', + output = "mcl_core:stonebrickcarved", recipe = { - {'mcl_stairs:slab_stonebrick'}, - {'mcl_stairs:slab_stonebrick'} + {"mcl_stairs:slab_stonebrick"}, + {"mcl_stairs:slab_stonebrick"} } }) minetest.register_craft({ - output = 'mcl_end:purpur_pillar', + output = "mcl_end:purpur_pillar", recipe = { - {'mcl_stairs:slab_purpur_block'}, - {'mcl_stairs:slab_purpur_block'} + {"mcl_stairs:slab_purpur_block"}, + {"mcl_stairs:slab_purpur_block"} } }) minetest.register_craft({ - output = 'mcl_nether:quartz_chiseled 2', + output = "mcl_nether:quartz_chiseled 2", recipe = { - {'mcl_stairs:slab_quartzblock'}, - {'mcl_stairs:slab_quartzblock'}, + {"mcl_stairs:slab_quartzblock"}, + {"mcl_stairs:slab_quartzblock"}, } }) diff --git a/mods/ITEMS/mcl_stairs/depends.txt b/mods/ITEMS/mcl_stairs/depends.txt deleted file mode 100644 index 96e184bd9..000000000 --- a/mods/ITEMS/mcl_stairs/depends.txt +++ /dev/null @@ -1,5 +0,0 @@ -mcl_core -mcl_sounds -mcl_nether -mcl_end -mcl_ocean diff --git a/mods/ITEMS/mcl_stairs/init.lua b/mods/ITEMS/mcl_stairs/init.lua index a5ca820bf..92f0640b3 100644 --- a/mods/ITEMS/mcl_stairs/init.lua +++ b/mods/ITEMS/mcl_stairs/init.lua @@ -7,8 +7,10 @@ mcl_stairs = {} -- Load other files -dofile(minetest.get_modpath("mcl_stairs").."/api.lua") -dofile(minetest.get_modpath("mcl_stairs").."/cornerstair.lua") -dofile(minetest.get_modpath("mcl_stairs").."/register.lua") -dofile(minetest.get_modpath("mcl_stairs").."/crafting.lua") -dofile(minetest.get_modpath("mcl_stairs").."/alias.lua") +local modpath = minetest.get_modpath(minetest.get_current_modname()) + +dofile(modpath.."/api.lua") +dofile(modpath.."/cornerstair.lua") +dofile(modpath.."/register.lua") +dofile(modpath.."/crafting.lua") +dofile(modpath.."/alias.lua") diff --git a/mods/ITEMS/mcl_stairs/locale/mcl_stairs.fr.tr b/mods/ITEMS/mcl_stairs/locale/mcl_stairs.fr.tr index 9c6684fc6..4892122f6 100644 --- a/mods/ITEMS/mcl_stairs/locale/mcl_stairs.fr.tr +++ b/mods/ITEMS/mcl_stairs/locale/mcl_stairs.fr.tr @@ -30,9 +30,9 @@ Double Polished Stone Slab=Double Dalle en Pierre Polie Andesite Stairs=Escalier en Andésite Andesite Slab=Dalle en Andésite Double Andesite Slab=Double Dalle en Andésite -Granite Stairs=Escalier en Granite -Granite Slab=Dalle en Granite -Double Granite Slab=Double Dalle en Granite +Granite Stairs=Escalier en Granit +Granite Slab=Dalle en Granit +Double Granite Slab=Double Dalle en Granit Diorite Stairs=Escalier en Diorite Diorite Slab=Dalle en Diorite Double Diorite Slab=Double Dalle en Diorite diff --git a/mods/ITEMS/mcl_stairs/locale/mcl_stairs.pl.tr b/mods/ITEMS/mcl_stairs/locale/mcl_stairs.pl.tr new file mode 100644 index 000000000..2b2b52486 --- /dev/null +++ b/mods/ITEMS/mcl_stairs/locale/mcl_stairs.pl.tr @@ -0,0 +1,101 @@ +# textdomain: mcl_stairs +Stairs are useful to reach higher places by walking over them; jumping is not required. Placing stairs in a corner pattern will create corner stairs. Stairs placed on the ceiling or at the upper half of the side of a block will be placed upside down.=Schody są użyteczne by wspiąć się do wyższych miejsc poprzez chodzenie po nich. Nie trzeba na nich skakać. Umieszczenie schodów w rogu schodów dopasuje schodu do rogu. Schody postawione na suficie lub na górnej części bloku będą postawione do góry nogami. +Double @1=Podwójna @1 +Slabs are half as high as their full block counterparts and occupy either the lower or upper part of a block, depending on how it was placed. Slabs can be easily stepped on without needing to jump. When a slab is placed on another slab of the same type, a double slab is created.=Płyty są wysokości połowy odpowiadającego im bloku i zajmują górną lub dolną część bloku w zależności od tego jak są postawione. Na płyty można łatwo wejść bez konieczności skakania. Gdy płyta jest postawiona na innej płycie tego samego typu, podwójna płyta jest tworzona. +Upper @1=Górna @1 +Double slabs are full blocks which are created by placing two slabs of the same kind on each other.=Podwójne płyty są pełnymi blokami tworzonymi przez położenie dwóch płyt tego samego typu jedna na drugiej. +Oak Wood Stairs=Dębowe schody +Oak Wood Slab=Dębowa płyta +Double Oak Wood Slab=Podwójna dębowa płyta +Jungle Wood Stairs=Tropikalne schody +Jungle Wood Slab=Tropikalna płyta +Double Jungle Wood Slab=Podwójna tropikalna płyta +Acacia Wood Stairs=Akacjowe schody +Acacia Wood Slab=Akacjowa płyta +Double Acacia Wood Slab=Podwójna akacjowa płyta +Spruce Wood Stairs=Świerkowe schody +Spruce Wood Slab=Świerkowa płyta +Double Spruce Wood Slab=Podwójna świerkowa płyta +Birch Wood Stairs=Brzozowe schody +Birch Wood Slab=Brzozowa płyta +Double Birch Wood Slab=Podwójna brzozowa płyta +Dark Oak Wood Stairs=Ciemno-dębowe schody +Dark Oak Wood Slab=Ciemno-dębowa płyta +Double Dark Oak Wood Slab=Podwójna ciemno-dębowa płyta +Stone Stairs=Kamienne schody +Stone Slab=Kamienna płyta +Double Stone Slab=Podwójna kamienna płyta +Polished Stone Slab=Polerowana kamienna płyta +Double Polished Stone Slab=Podwójna polerowana kamienna płyta +Andesite Stairs=Andezytowe schody +Andesite Slab=Andezytowa płyta +Double Andesite Slab=Podwójne andezytowa płyta +Granite Stairs=Granitowe schody +Granite Slab=Granitowa płyta +Double Granite Slab=Podwójna granitowa płyta +Diorite Stairs=Diorytowe schody +Diorite Slab=Diorytowa płyta +Double Diorite Slab=Podwójna diorytowa płyta +Cobblestone Stairs=Brukowane schody +Cobblestone Slab=Brukowana płyta +Double Cobblestone Slab=Podwójna brukowana płyta +Mossy Cobblestone Stairs=Zamszone brukowane schody +Mossy Cobblestone Slab=Zamszona brukowana płyta +Double Mossy Cobblestone Slab=Podwójna zamszona brukowana płyta +Brick Stairs=Ceglane schody +Brick Slab=Ceglana płyta +Double Brick Slab=Podwójna ceglana płyta +Sandstone Stairs=Piaskowcowe schody +Sandstone Slab=Piaskowcowa płyta +Double Sandstone Slab=Podwójna piaskowcowa płyta +Smooth Sandstone Stairs=Polerowane piaskowcowe schody +Smooth Sandstone Slab=Polerowana piaskowcowa płyta +Double Smooth Sandstone Slab=Podwójna polerowana piaskowcowa płyta +Red Sandstone Stairs=Czerwone piaskowcowe schody +Red Sandstone Slab=Czerwona piaskowcowa płyta +Double Red Sandstone Slab=Podwójna czerwona piaskowcowa płyta +Smooth Red Sandstone Stairs=Polerowane czerwone piaskowcowe schody +Smooth Red Sandstone Slab=Polerowana czerwona piaskowcowa płyta +Double Smooth Red Sandstone Slab=Podwójna polerowana czerwona piaskowcowa płyta +Stone Bricks Stairs=Ceglane kamienne schody +Stone Bricks Slab=Ceglana kamienna płyta +Double Stone Bricks Slab=Podwójna ceglana kamienna płyta +Quartz Stairs=Kwarcowe schody +Quartz Slab=Kwarcowa płyta +Double Quartz Slab=Podwójna kwarcowa płyta +Smooth Quartz Stairs=Polerowane kwarcowe schody +Smooth Quartz Slab=Polerowana kwarcowa płyta +Double Smooth Quartz Slab=Podwójna polerowana kwarcowa płyta +Nether Brick Stairs=Netherowe ceglane schody +Nether Brick Slab=Netherowa ceglana płyta +Double Nether Brick Slab=Podwójna Netherowa ceglana płyta +Red Nether Brick Stairs=Czerwone Netherowe ceglane schody +Red Nether Brick Slab=Czerwona Netherowa ceglana płyta +Double Red Nether Brick Slab=Podwójna czerwona Netherowa ceglana płyta +End Stone Brick Stairs=Kresowe ceglane kamienne schody +End Stone Brick Slab=Kresowa ceglana kamienna płyta +Double End Stone Brick Slab=Podwójna kresowa ceglana kamienna płyta +Purpur Stairs=Purpurowe schody +Purpur Slab=Purpurowa płyta +Double Purpur Slab=Podwójna purpurowe płyta +Prismarine Stairs=Pryzmarynowe schody +Prismarine Slab=Pryzmarynowa płyta +Double Prismarine Slab=Podwójna pryzmarynowa płyta +Prismarine Brick Stairs=Pryzmarynowe ceglane schody +Prismarine Brick Slab=Pryzmarynowa ceglana płyta +Double Prismarine Brick Slab=Podwójna pryzmarynowa ceglana płyta +Dark Prismarine Stairs=Ciemne pryzmarynowe schody +Dark Prismarine Slab=Ciemna pryzmarynowa płyta +Double Dark Prismarine Slab=Podwójna ciemna pryzmarynowa płyta +Polished Andesite Slab=Polerowana andezytowa płyta +Double Polished Andesite Slab=Podwójna polerowana andezytowa płyta +Polished Andesite Stairs=Polerowane andezytowe schody +Polished Granite Slab=Polerowana granitowa płyta +Double Polished Granite Slab=Podwójna polerowana granitowa płyta +Polished Granite Stairs=Polerowane granitowe schody +Polished Diorite Slab=Polerowana diorytowa płyta +Double Polished Diorite Slab=Podwójna polerowana diorytowa płyta +Polished Diorite Stairs=Polerowane diorytowe schody +Mossy Stone Brick Stairs=Zamszone kamienne ceglane schody +Mossy Stone Brick Slab=Zamszona kamienna ceglana płyta +Double Mossy Stone Brick Slab=Podwójna zamszona kamienna ceglana płyta diff --git a/mods/ITEMS/mcl_stairs/mod.conf b/mods/ITEMS/mcl_stairs/mod.conf index 4540a7981..a357c2c79 100644 --- a/mods/ITEMS/mcl_stairs/mod.conf +++ b/mods/ITEMS/mcl_stairs/mod.conf @@ -1 +1,2 @@ name = mcl_stairs +depends = mcl_core, mcl_sounds, mcl_nether, mcl_end, mcl_ocean diff --git a/mods/ITEMS/mcl_stairs/register.lua b/mods/ITEMS/mcl_stairs/register.lua index 565f5409b..5de380585 100644 --- a/mods/ITEMS/mcl_stairs/register.lua +++ b/mods/ITEMS/mcl_stairs/register.lua @@ -3,7 +3,7 @@ -- slabs actually take slightly longer to be dug than their stair counterparts. -- Note sure if it is a good idea to preserve this oddity. -local S = minetest.get_translator("mcl_stairs") +local S = minetest.get_translator(minetest.get_current_modname()) local woods = { { "wood", "default_wood.png", S("Oak Wood Stairs"), S("Oak Wood Slab"), S("Double Oak Wood Slab") }, diff --git a/mods/ITEMS/mcl_throwing/API.md b/mods/ITEMS/mcl_throwing/API.md new file mode 100644 index 000000000..41a47223a --- /dev/null +++ b/mods/ITEMS/mcl_throwing/API.md @@ -0,0 +1,41 @@ +# mcl_throwing + +## mcl_throwing.throw(throw_item, pos, dir, velocity, thrower) +Throw a throwable item. + +* throw_item: itemstring of the throwable item +* pos: initial position of the entity +* dir: direction where the throwable item will be thrown +* velocity: (optional) will overide the default velocity value (can be nil) +* thrower: (optional) player/entity who throw the object (can be nil) + +## mcl_throwing.register_throwable_object(name, entity, velocity) +Register a throwable item. + +* name: itemname of the throwable object +* entity: entity thrown +* velocity: initial velocity of the entity + +## mcl_throwing.dispense_function(stack, dispenserpos, droppos, dropnode, dropdir) +Throw throwable item from dispencer. + +Shouldn't be called directly. + +Must be used in item definition: + +`_on_dispense = mcl_throwing.dispense_function,` + +## mcl_throwing.get_player_throw_function(entity_name, velocity) + +Return a function who handle item throwing (to be used in item definition) + +Handle creative mode, and throw params. + +* entity_name: the name of the entity to throw +* velocity: (optional) velocity overide (can be nil) + +## mcl_throwing.get_staticdata(self) +Must be used in entity def if you want the entity to be saved after unloading mapblock. + +## mcl_throwing.on_activate(self, staticdata, dtime_s) +Must be used in entity def if you want the entity to be saved after unloading mapblock. diff --git a/mods/ITEMS/mcl_throwing/depends.txt b/mods/ITEMS/mcl_throwing/depends.txt deleted file mode 100644 index 2787220ee..000000000 --- a/mods/ITEMS/mcl_throwing/depends.txt +++ /dev/null @@ -1,4 +0,0 @@ -mcl_core? -mcl_mobitems? -doc? -mcl_fishing diff --git a/mods/ITEMS/mcl_throwing/init.lua b/mods/ITEMS/mcl_throwing/init.lua index 5fe34b45e..c468946dd 100644 --- a/mods/ITEMS/mcl_throwing/init.lua +++ b/mods/ITEMS/mcl_throwing/init.lua @@ -1,30 +1,22 @@ mcl_throwing = {} -local S = minetest.get_translator("mcl_throwing") -local mod_death_messages = minetest.get_modpath("mcl_death_messages") -local mod_fishing = minetest.get_modpath("mcl_fishing") +local modpath = minetest.get_modpath(minetest.get_current_modname()) --- +-- -- Snowballs and other throwable items -- local GRAVITY = tonumber(minetest.settings:get("movement_gravity")) -local entity_mapping = { - ["mcl_throwing:flying_bobber"] = "mcl_throwing:flying_bobber_entity", - ["mcl_throwing:snowball"] = "mcl_throwing:snowball_entity", - ["mcl_throwing:egg"] = "mcl_throwing:egg_entity", - ["mcl_throwing:ender_pearl"] = "mcl_throwing:ender_pearl_entity", -} +local entity_mapping = {} +local velocities = {} -local velocities = { - ["mcl_throwing:flying_bobber_entity"] = 5, - ["mcl_throwing:snowball_entity"] = 22, - ["mcl_throwing:egg_entity"] = 22, - ["mcl_throwing:ender_pearl_entity"] = 22, -} +function mcl_throwing.register_throwable_object(name, entity, velocity) + entity_mapping[name] = entity + velocities[name] = velocity +end -mcl_throwing.throw = function(throw_item, pos, dir, velocity, thrower) +function mcl_throwing.throw(throw_item, pos, dir, velocity, thrower) if velocity == nil then velocity = velocities[throw_item] end @@ -44,11 +36,11 @@ mcl_throwing.throw = function(throw_item, pos, dir, velocity, thrower) end -- Throw item -local player_throw_function = function(entity_name, velocity) - local func = function(item, player, pointed_thing) +function mcl_throwing.get_player_throw_function(entity_name, velocity) + local function func(item, player, pointed_thing) local playerpos = player:get_pos() local dir = player:get_look_dir() - local obj = mcl_throwing.throw(item, {x=playerpos.x, y=playerpos.y+1.5, z=playerpos.z}, dir, velocity, player:get_player_name()) + mcl_throwing.throw(item, {x=playerpos.x, y=playerpos.y+1.5, z=playerpos.z}, dir, velocity, player:get_player_name()) if not minetest.is_creative_enabled(player:get_player_name()) then item:take_item() end @@ -57,14 +49,14 @@ local player_throw_function = function(entity_name, velocity) return func end -local dispense_function = function(stack, dispenserpos, droppos, dropnode, dropdir) +function mcl_throwing.dispense_function(stack, dispenserpos, droppos, dropnode, dropdir) -- Launch throwable item local shootpos = vector.add(dispenserpos, vector.multiply(dropdir, 0.51)) mcl_throwing.throw(stack:get_name(), shootpos, dropdir) end -- Staticdata handling because objects may want to be reloaded -local get_staticdata = function(self) +function mcl_throwing.get_staticdata(self) local thrower -- Only save thrower if it's a player name if type(self._thrower) == "string" then @@ -77,7 +69,7 @@ local get_staticdata = function(self) return minetest.serialize(data) end -local on_activate = function(self, staticdata, dtime_s) +function mcl_throwing.on_activate(self, staticdata, dtime_s) local data = minetest.deserialize(staticdata) if data then self._lastpos = data._lastpos @@ -85,374 +77,4 @@ local on_activate = function(self, staticdata, dtime_s) end end --- The snowball entity -local snowball_ENTITY={ - physical = false, - timer=0, - textures = {"mcl_throwing_snowball.png"}, - visual_size = {x=0.5, y=0.5}, - collisionbox = {0,0,0,0,0,0}, - pointable = false, - - get_staticdata = get_staticdata, - on_activate = on_activate, - _thrower = nil, - - _lastpos={}, -} -local egg_ENTITY={ - physical = false, - timer=0, - textures = {"mcl_throwing_egg.png"}, - visual_size = {x=0.45, y=0.45}, - collisionbox = {0,0,0,0,0,0}, - pointable = false, - - get_staticdata = get_staticdata, - on_activate = on_activate, - _thrower = nil, - - _lastpos={}, -} --- Ender pearl entity -local pearl_ENTITY={ - physical = false, - timer=0, - textures = {"mcl_throwing_ender_pearl.png"}, - visual_size = {x=0.9, y=0.9}, - collisionbox = {0,0,0,0,0,0}, - pointable = false, - - get_staticdata = get_staticdata, - on_activate = on_activate, - - _lastpos={}, - _thrower = nil, -- Player ObjectRef of the player who threw the ender pearl -} - -local flying_bobber_ENTITY={ - physical = false, - timer=0, - textures = {"mcl_fishing_bobber.png"}, --FIXME: Replace with correct texture. - visual_size = {x=0.5, y=0.5}, - collisionbox = {0,0,0,0,0,0}, - pointable = false, - - get_staticdata = get_staticdata, - on_activate = on_activate, - - _lastpos={}, - _thrower = nil, - objtype="fishing", -} - -local check_object_hit = function(self, pos, dmg) - for _,object in pairs(minetest.get_objects_inside_radius(pos, 1.5)) do - - local entity = object:get_luaentity() - - if entity - and entity.name ~= self.object:get_luaentity().name then - - if object:is_player() and self._thrower ~= object:get_player_name() then - -- TODO: Deal knockback - self.object:remove() - return true - elseif (entity._cmi_is_mob == true or entity._hittable_by_projectile) and (self._thrower ~= object) then - -- FIXME: Knockback is broken - object:punch(self.object, 1.0, { - full_punch_interval = 1.0, - damage_groups = dmg, - }, nil) - return true - end - end - end - return false -end - -local snowball_particles = function(pos, vel) - local vel = vector.normalize(vector.multiply(vel, -1)) - minetest.add_particlespawner({ - amount = 20, - time = 0.001, - minpos = pos, - maxpos = pos, - minvel = vector.add({x=-2, y=3, z=-2}, vel), - maxvel = vector.add({x=2, y=5, z=2}, vel), - minacc = {x=0, y=-9.81, z=0}, - maxacc = {x=0, y=-9.81, z=0}, - minexptime = 1, - maxexptime = 3, - minsize = 0.7, - maxsize = 0.7, - collisiondetection = true, - collision_removal = true, - object_collision = false, - texture = "weather_pack_snow_snowflake"..math.random(1,2)..".png", - }) -end - --- Snowball on_step()--> called when snowball is moving. -local snowball_on_step = function(self, dtime) - self.timer=self.timer+dtime - local pos = self.object:get_pos() - local vel = self.object:get_velocity() - local node = minetest.get_node(pos) - local def = minetest.registered_nodes[node.name] - - - -- Destroy when hitting a solid node - if self._lastpos.x~=nil then - if (def and def.walkable) or not def then - minetest.sound_play("mcl_throwing_snowball_impact_hard", { pos = pos, max_hear_distance=16, gain=0.7 }, true) - snowball_particles(self._lastpos, vel) - self.object:remove() - return - end - end - - if check_object_hit(self, pos, {snowball_vulnerable = 3}) then - minetest.sound_play("mcl_throwing_snowball_impact_soft", { pos = pos, max_hear_distance=16, gain=0.7 }, true) - snowball_particles(pos, vel) - self.object:remove() - return - end - - self._lastpos={x=pos.x, y=pos.y, z=pos.z} -- Set _lastpos-->Node will be added at last pos outside the node -end - --- Movement function of egg -local egg_on_step = function(self, dtime) - self.timer=self.timer+dtime - local pos = self.object:get_pos() - local node = minetest.get_node(pos) - local def = minetest.registered_nodes[node.name] - - -- Destroy when hitting a solid node with chance to spawn chicks - if self._lastpos.x~=nil then - if (def and def.walkable) or not def then - -- 1/8 chance to spawn a chick - -- FIXME: Chicks have a quite good chance to spawn in walls - local r = math.random(1,8) - - -- Turn given object into a child - local make_child= function(object) - local ent = object:get_luaentity() - object:set_properties({ - visual_size = { x = ent.base_size.x/2, y = ent.base_size.y/2 }, - collisionbox = { - ent.base_colbox[1]/2, - ent.base_colbox[2]/2, - ent.base_colbox[3]/2, - ent.base_colbox[4]/2, - ent.base_colbox[5]/2, - ent.base_colbox[6]/2, - } - }) - ent.child = true - end - if r == 1 then - make_child(minetest.add_entity(self._lastpos, "mobs_mc:chicken")) - - -- BONUS ROUND: 1/32 chance to spawn 3 additional chicks - local r = math.random(1,32) - if r == 1 then - local offsets = { - { x=0.7, y=0, z=0 }, - { x=-0.7, y=0, z=-0.7 }, - { x=-0.7, y=0, z=0.7 }, - } - for o=1, 3 do - local pos = vector.add(self._lastpos, offsets[o]) - make_child(minetest.add_entity(pos, "mobs_mc:chicken")) - end - end - end - minetest.sound_play("mcl_throwing_egg_impact", { pos = self.object:get_pos(), max_hear_distance=10, gain=0.5 }, true) - self.object:remove() - return - end - end - - -- Destroy when hitting a mob or player (no chick spawning) - if check_object_hit(self, pos) then - minetest.sound_play("mcl_throwing_egg_impact", { pos = self.object:get_pos(), max_hear_distance=10, gain=0.5 }, true) - self.object:remove() - return - end - - self._lastpos={x=pos.x, y=pos.y, z=pos.z} -- Set lastpos-->Node will be added at last pos outside the node -end - --- Movement function of ender pearl -local pearl_on_step = function(self, dtime) - self.timer=self.timer+dtime - local pos = self.object:get_pos() - pos.y = math.floor(pos.y) - local node = minetest.get_node(pos) - local nn = node.name - local def = minetest.registered_nodes[node.name] - - -- Destroy when hitting a solid node - if self._lastpos.x~=nil then - local walkable = (def and def.walkable) - - -- No teleport for hitting ignore for now. Otherwise the player could get stuck. - -- FIXME: This also means the player loses an ender pearl for throwing into unloaded areas - if node.name == "ignore" then - self.object:remove() - -- Activate when hitting a solid node or a plant - elseif walkable or nn == "mcl_core:vine" or nn == "mcl_core:deadbush" or minetest.get_item_group(nn, "flower") ~= 0 or minetest.get_item_group(nn, "sapling") ~= 0 or minetest.get_item_group(nn, "plant") ~= 0 or minetest.get_item_group(nn, "mushroom") ~= 0 or not def then - local player = minetest.get_player_by_name(self._thrower) - if player then - -- Teleport and hurt player - - -- First determine good teleport position - local dir = {x=0, y=0, z=0} - - local v = self.object:get_velocity() - if walkable then - local vc = table.copy(v) -- vector for calculating - -- Node is walkable, we have to find a place somewhere outside of that node - vc = vector.normalize(vc) - - -- Zero-out the two axes with a lower absolute value than - -- the axis with the strongest force - local lv, ld - lv, ld = math.abs(vc.y), "y" - if math.abs(vc.x) > lv then - lv, ld = math.abs(vc.x), "x" - end - if math.abs(vc.z) > lv then - lv, ld = math.abs(vc.z), "z" - end - if ld ~= "x" then vc.x = 0 end - if ld ~= "y" then vc.y = 0 end - if ld ~= "z" then vc.z = 0 end - - -- Final tweaks to the teleporting pos, based on direction - -- Impact from the side - dir.x = vc.x * -1 - dir.z = vc.z * -1 - - -- Special case: top or bottom of node - if vc.y > 0 then - -- We need more space when impact is from below - dir.y = -2.3 - elseif vc.y < 0 then - -- Standing on top - dir.y = 0.5 - end - end - -- If node was not walkable, no modification to pos is made. - - -- Final teleportation position - local telepos = vector.add(pos, dir) - local telenode = minetest.get_node(telepos) - - --[[ It may be possible that telepos is walkable due to the algorithm. - Especially when the ender pearl is faster horizontally than vertical. - This applies final fixing, just to be sure we're not in a walkable node ]] - if not minetest.registered_nodes[telenode.name] or minetest.registered_nodes[telenode.name].walkable then - if v.y < 0 then - telepos.y = telepos.y + 0.5 - else - telepos.y = telepos.y - 2.3 - end - end - - local oldpos = player:get_pos() - -- Teleport and hurt player - player:set_pos(telepos) - player:set_hp(player:get_hp() - 5, { type = "fall", from = "mod" }) - - -- 5% chance to spawn endermite at the player's origin - local r = math.random(1,20) - if r == 1 then - minetest.add_entity(oldpos, "mobs_mc:endermite") - end - - end - self.object:remove() - return - end - end - self._lastpos={x=pos.x, y=pos.y, z=pos.z} -- Set lastpos-->Node will be added at last pos outside the node -end - --- Movement function of flying bobber -local flying_bobber_on_step = function(self, dtime) - self.timer=self.timer+dtime - local pos = self.object:get_pos() - local node = minetest.get_node(pos) - local def = minetest.registered_nodes[node.name] - --local player = minetest.get_player_by_name(self._thrower) - - -- Destroy when hitting a solid node - if self._lastpos.x~=nil then - if (def and (def.walkable or def.liquidtype == "flowing" or def.liquidtype == "source")) or not def then - local make_child= function(object) - local ent = object:get_luaentity() - ent.player = self._thrower - ent.child = true - end - make_child(minetest.add_entity(self._lastpos, "mcl_fishing:bobber_entity")) - self.object:remove() - return - end - end - self._lastpos={x=pos.x, y=pos.y, z=pos.z} -- Set lastpos-->Node will be added at last pos outside the node -end - -snowball_ENTITY.on_step = snowball_on_step -egg_ENTITY.on_step = egg_on_step -pearl_ENTITY.on_step = pearl_on_step -flying_bobber_ENTITY.on_step = flying_bobber_on_step - -minetest.register_entity("mcl_throwing:snowball_entity", snowball_ENTITY) -minetest.register_entity("mcl_throwing:egg_entity", egg_ENTITY) -minetest.register_entity("mcl_throwing:ender_pearl_entity", pearl_ENTITY) -minetest.register_entity("mcl_throwing:flying_bobber_entity", flying_bobber_ENTITY) - -local how_to_throw = S("Use the punch key to throw.") - --- Snowball -minetest.register_craftitem("mcl_throwing:snowball", { - description = S("Snowball"), - _tt_help = S("Throwable"), - _doc_items_longdesc = S("Snowballs can be thrown or launched from a dispenser for fun. Hitting something with a snowball does nothing."), - _doc_items_usagehelp = how_to_throw, - inventory_image = "mcl_throwing_snowball.png", - stack_max = 16, - groups = { weapon_ranged = 1 }, - on_use = player_throw_function("mcl_throwing:snowball_entity"), - _on_dispense = dispense_function, -}) - --- Egg -minetest.register_craftitem("mcl_throwing:egg", { - description = S("Egg"), - _tt_help = S("Throwable").."\n"..S("Chance to hatch chicks when broken"), - _doc_items_longdesc = S("Eggs can be thrown or launched from a dispenser and breaks on impact. There is a small chance that 1 or even 4 chicks will pop out of the egg."), - _doc_items_usagehelp = how_to_throw, - inventory_image = "mcl_throwing_egg.png", - stack_max = 16, - on_use = player_throw_function("mcl_throwing:egg_entity"), - _on_dispense = dispense_function, - groups = { craftitem = 1 }, -}) - --- Ender Pearl -minetest.register_craftitem("mcl_throwing:ender_pearl", { - description = S("Ender Pearl"), - _tt_help = S("Throwable").."\n"..minetest.colorize("#FFFF00", S("Teleports you on impact for cost of 5 HP")), - _doc_items_longdesc = S("An ender pearl is an item which can be used for teleportation at the cost of health. It can be thrown and teleport the thrower to its impact location when it hits a solid block or a plant. Each teleportation hurts the user by 5 hit points."), - _doc_items_usagehelp = how_to_throw, - wield_image = "mcl_throwing_ender_pearl.png", - inventory_image = "mcl_throwing_ender_pearl.png", - stack_max = 16, - on_use = player_throw_function("mcl_throwing:ender_pearl_entity"), - groups = { transport = 1 }, -}) - +dofile(modpath.."/register.lua") \ No newline at end of file diff --git a/mods/ITEMS/mcl_throwing/locale/mcl_throwing.pl.tr b/mods/ITEMS/mcl_throwing/locale/mcl_throwing.pl.tr new file mode 100644 index 000000000..e27970424 --- /dev/null +++ b/mods/ITEMS/mcl_throwing/locale/mcl_throwing.pl.tr @@ -0,0 +1,12 @@ +# textdomain: mcl_throwing +@1 used the ender pearl too often.=@1 zbyt często używała perły kresu. +Use the punch key to throw.=Użyj przycisku ataku by rzucić. +Snowball=Śnieżka +Snowballs can be thrown or launched from a dispenser for fun. Hitting something with a snowball does nothing.=Śnieżki mogą być rzucone lub wystrzelone z dozownika dla zabawy. Uderzenie czegoś śnieżką niczego nie daje. +Egg=Jajo +Eggs can be thrown or launched from a dispenser and breaks on impact. There is a small chance that 1 or even 4 chicks will pop out of the egg.=Jaja mogą być rzucone lub wystrzelone z dozownika i rozbiją się przy uderzeniu. Jest mała szansa, że 1 lub nawet 4 kurczęta wyskoczą z jaja. +Ender Pearl=Perła kresu +An ender pearl is an item which can be used for teleportation at the cost of health. It can be thrown and teleport the thrower to its impact location when it hits a solid block or a plant. Each teleportation hurts the user by 5 hit points.=Perła kresu jest przedmiotem, który można wykorzystać do teleportacji kosztem zdrowia. Może być rzucona, a rzucający zostanie przeteleportowany w miejsce gdzie uderzyła ona stały blok lub roślinę. +Throwable=Można rzucać +Chance to hatch chicks when broken=Szansa na wyklucie kurcząt po rozbiciu +Teleports you on impact for cost of 5 HP=Teleportuje przy uderzeniu za 5 HP diff --git a/mods/ITEMS/mcl_throwing/mod.conf b/mods/ITEMS/mcl_throwing/mod.conf index 117ca80a7..60d3e31a7 100644 --- a/mods/ITEMS/mcl_throwing/mod.conf +++ b/mods/ITEMS/mcl_throwing/mod.conf @@ -1 +1,3 @@ name = mcl_throwing +depends = mcl_colors +optional_depends = mcl_core, mcl_mobitems, doc diff --git a/mods/ITEMS/mcl_throwing/register.lua b/mods/ITEMS/mcl_throwing/register.lua new file mode 100644 index 000000000..ec11f86c7 --- /dev/null +++ b/mods/ITEMS/mcl_throwing/register.lua @@ -0,0 +1,337 @@ +local S = minetest.get_translator(minetest.get_current_modname()) + +local math = math +local vector = vector + +-- The snowball entity +local snowball_ENTITY={ + physical = false, + timer=0, + textures = {"mcl_throwing_snowball.png"}, + visual_size = {x=0.5, y=0.5}, + collisionbox = {0,0,0,0,0,0}, + pointable = false, + + get_staticdata = mcl_throwing.get_staticdata, + on_activate = mcl_throwing.on_activate, + _thrower = nil, + + _lastpos={}, +} + +local egg_ENTITY={ + physical = false, + timer=0, + textures = {"mcl_throwing_egg.png"}, + visual_size = {x=0.45, y=0.45}, + collisionbox = {0,0,0,0,0,0}, + pointable = false, + + get_staticdata = mcl_throwing.get_staticdata, + on_activate = mcl_throwing.on_activate, + _thrower = nil, + + _lastpos={}, +} + +-- Ender pearl entity +local pearl_ENTITY={ + physical = false, + timer=0, + textures = {"mcl_throwing_ender_pearl.png"}, + visual_size = {x=0.9, y=0.9}, + collisionbox = {0,0,0,0,0,0}, + pointable = false, + + get_staticdata = mcl_throwing.get_staticdata, + on_activate = mcl_throwing.on_activate, + + _lastpos={}, + _thrower = nil, -- Player ObjectRef of the player who threw the ender pearl +} + +local function check_object_hit(self, pos, dmg) + for _,object in pairs(minetest.get_objects_inside_radius(pos, 1.5)) do + + local entity = object:get_luaentity() + + if entity + and entity.name ~= self.object:get_luaentity().name then + + if object:is_player() and self._thrower ~= object:get_player_name() then + -- TODO: Deal knockback + self.object:remove() + return true + elseif (entity._cmi_is_mob == true or entity._hittable_by_projectile) and (self._thrower ~= object) then + -- FIXME: Knockback is broken + object:punch(self.object, 1.0, { + full_punch_interval = 1.0, + damage_groups = dmg, + }, nil) + return true + end + end + end + return false +end + +local function snowball_particles(pos, vel) + local vel = vector.normalize(vector.multiply(vel, -1)) + minetest.add_particlespawner({ + amount = 20, + time = 0.001, + minpos = pos, + maxpos = pos, + minvel = vector.add({x=-2, y=3, z=-2}, vel), + maxvel = vector.add({x=2, y=5, z=2}, vel), + minacc = {x=0, y=-9.81, z=0}, + maxacc = {x=0, y=-9.81, z=0}, + minexptime = 1, + maxexptime = 3, + minsize = 0.7, + maxsize = 0.7, + collisiondetection = true, + collision_removal = true, + object_collision = false, + texture = "weather_pack_snow_snowflake"..math.random(1,2)..".png", + }) +end + +-- Snowball on_step()--> called when snowball is moving. +local function snowball_on_step(self, dtime) + self.timer = self.timer + dtime + local pos = self.object:get_pos() + local vel = self.object:get_velocity() + local node = minetest.get_node(pos) + local def = minetest.registered_nodes[node.name] + + -- Destroy when hitting a solid node + if self._lastpos.x~=nil then + if (def and def.walkable) or not def then + minetest.sound_play("mcl_throwing_snowball_impact_hard", { pos = pos, max_hear_distance=16, gain=0.7 }, true) + snowball_particles(self._lastpos, vel) + self.object:remove() + return + end + end + if check_object_hit(self, pos, {snowball_vulnerable = 3}) then + minetest.sound_play("mcl_throwing_snowball_impact_soft", { pos = pos, max_hear_distance=16, gain=0.7 }, true) + snowball_particles(pos, vel) + self.object:remove() + return + end + self._lastpos={x=pos.x, y=pos.y, z=pos.z} -- Set _lastpos-->Node will be added at last pos outside the node +end + +-- Movement function of egg +local function egg_on_step(self, dtime) + self.timer = self.timer + dtime + local pos = self.object:get_pos() + local node = minetest.get_node(pos) + local def = minetest.registered_nodes[node.name] + + -- Destroy when hitting a solid node with chance to spawn chicks + if self._lastpos.x then + if (def and def.walkable) or not def then + -- 1/8 chance to spawn a chick + -- FIXME: Chicks have a quite good chance to spawn in walls + local r = math.random(1,8) + + -- Turn given object into a child + local function make_child(object) + local ent = object:get_luaentity() + object:set_properties({ + visual_size = { x = ent.base_size.x/2, y = ent.base_size.y/2 }, + collisionbox = { + ent.base_colbox[1]/2, + ent.base_colbox[2]/2, + ent.base_colbox[3]/2, + ent.base_colbox[4]/2, + ent.base_colbox[5]/2, + ent.base_colbox[6]/2, + } + }) + ent.child = true + end + if r == 1 then + make_child(minetest.add_entity(self._lastpos, "mobs_mc:chicken")) + + -- BONUS ROUND: 1/32 chance to spawn 3 additional chicks + local r = math.random(1,32) + if r == 1 then + local offsets = { + { x=0.7, y=0, z=0 }, + { x=-0.7, y=0, z=-0.7 }, + { x=-0.7, y=0, z=0.7 }, + } + for o=1, 3 do + local pos = vector.add(self._lastpos, offsets[o]) + make_child(minetest.add_entity(pos, "mobs_mc:chicken")) + end + end + end + minetest.sound_play("mcl_throwing_egg_impact", { pos = self.object:get_pos(), max_hear_distance=10, gain=0.5 }, true) + self.object:remove() + return + end + end + + -- Destroy when hitting a mob or player (no chick spawning) + if check_object_hit(self, pos) then + minetest.sound_play("mcl_throwing_egg_impact", { pos = self.object:get_pos(), max_hear_distance=10, gain=0.5 }, true) + self.object:remove() + return + end + + self._lastpos={x=pos.x, y=pos.y, z=pos.z} -- Set lastpos-->Node will be added at last pos outside the node +end + +-- Movement function of ender pearl +local function pearl_on_step(self, dtime) + self.timer = self.timer + dtime + local pos = self.object:get_pos() + pos.y = math.floor(pos.y) + local node = minetest.get_node(pos) + local nn = node.name + local def = minetest.registered_nodes[node.name] + + -- Destroy when hitting a solid node + if self._lastpos.x~=nil then + local walkable = (def and def.walkable) + + -- No teleport for hitting ignore for now. Otherwise the player could get stuck. + -- FIXME: This also means the player loses an ender pearl for throwing into unloaded areas + if node.name == "ignore" then + self.object:remove() + -- Activate when hitting a solid node or a plant + elseif walkable or nn == "mcl_core:vine" or nn == "mcl_core:deadbush" or minetest.get_item_group(nn, "flower") ~= 0 or minetest.get_item_group(nn, "sapling") ~= 0 or minetest.get_item_group(nn, "plant") ~= 0 or minetest.get_item_group(nn, "mushroom") ~= 0 or not def then + local player = self._thrower and minetest.get_player_by_name(self._thrower) + if player then + -- Teleport and hurt player + + -- First determine good teleport position + local dir = {x=0, y=0, z=0} + + local v = self.object:get_velocity() + if walkable then + local vc = table.copy(v) -- vector for calculating + -- Node is walkable, we have to find a place somewhere outside of that node + vc = vector.normalize(vc) + + -- Zero-out the two axes with a lower absolute value than + -- the axis with the strongest force + local lv, ld + lv, ld = math.abs(vc.y), "y" + if math.abs(vc.x) > lv then + lv, ld = math.abs(vc.x), "x" + end + if math.abs(vc.z) > lv then + ld = "z" --math.abs(vc.z) + end + if ld ~= "x" then vc.x = 0 end + if ld ~= "y" then vc.y = 0 end + if ld ~= "z" then vc.z = 0 end + + -- Final tweaks to the teleporting pos, based on direction + -- Impact from the side + dir.x = vc.x * -1 + dir.z = vc.z * -1 + + -- Special case: top or bottom of node + if vc.y > 0 then + -- We need more space when impact is from below + dir.y = -2.3 + elseif vc.y < 0 then + -- Standing on top + dir.y = 0.5 + end + end + -- If node was not walkable, no modification to pos is made. + + -- Final teleportation position + local telepos = vector.add(pos, dir) + local telenode = minetest.get_node(telepos) + + --[[ It may be possible that telepos is walkable due to the algorithm. + Especially when the ender pearl is faster horizontally than vertical. + This applies final fixing, just to be sure we're not in a walkable node ]] + if not minetest.registered_nodes[telenode.name] or minetest.registered_nodes[telenode.name].walkable then + if v.y < 0 then + telepos.y = telepos.y + 0.5 + else + telepos.y = telepos.y - 2.3 + end + end + + local oldpos = player:get_pos() + -- Teleport and hurt player + player:set_pos(telepos) + player:set_hp(player:get_hp() - 5, { type = "fall", from = "mod" }) + + -- 5% chance to spawn endermite at the player's origin + local r = math.random(1,20) + if r == 1 then + minetest.add_entity(oldpos, "mobs_mc:endermite") + end + + end + self.object:remove() + return + end + end + self._lastpos={x=pos.x, y=pos.y, z=pos.z} -- Set lastpos-->Node will be added at last pos outside the node +end + +snowball_ENTITY.on_step = snowball_on_step +egg_ENTITY.on_step = egg_on_step +pearl_ENTITY.on_step = pearl_on_step + +minetest.register_entity("mcl_throwing:snowball_entity", snowball_ENTITY) +minetest.register_entity("mcl_throwing:egg_entity", egg_ENTITY) +minetest.register_entity("mcl_throwing:ender_pearl_entity", pearl_ENTITY) + + +local how_to_throw = S("Use the punch key to throw.") + +-- Snowball +minetest.register_craftitem("mcl_throwing:snowball", { + description = S("Snowball"), + _tt_help = S("Throwable"), + _doc_items_longdesc = S("Snowballs can be thrown or launched from a dispenser for fun. Hitting something with a snowball does nothing."), + _doc_items_usagehelp = how_to_throw, + inventory_image = "mcl_throwing_snowball.png", + stack_max = 16, + groups = { weapon_ranged = 1 }, + on_use = mcl_throwing.get_player_throw_function("mcl_throwing:snowball_entity"), + _on_dispense = mcl_throwing.dispense_function, +}) + +-- Egg +minetest.register_craftitem("mcl_throwing:egg", { + description = S("Egg"), + _tt_help = S("Throwable").."\n"..S("Chance to hatch chicks when broken"), + _doc_items_longdesc = S("Eggs can be thrown or launched from a dispenser and breaks on impact. There is a small chance that 1 or even 4 chicks will pop out of the egg."), + _doc_items_usagehelp = how_to_throw, + inventory_image = "mcl_throwing_egg.png", + stack_max = 16, + on_use = mcl_throwing.get_player_throw_function("mcl_throwing:egg_entity"), + _on_dispense = mcl_throwing.dispense_function, + groups = { craftitem = 1 }, +}) + +-- Ender Pearl +minetest.register_craftitem("mcl_throwing:ender_pearl", { + description = S("Ender Pearl"), + _tt_help = S("Throwable").."\n"..minetest.colorize(mcl_colors.YELLOW, S("Teleports you on impact for cost of 5 HP")), + _doc_items_longdesc = S("An ender pearl is an item which can be used for teleportation at the cost of health. It can be thrown and teleport the thrower to its impact location when it hits a solid block or a plant. Each teleportation hurts the user by 5 hit points."), + _doc_items_usagehelp = how_to_throw, + wield_image = "mcl_throwing_ender_pearl.png", + inventory_image = "mcl_throwing_ender_pearl.png", + stack_max = 16, + on_use = mcl_throwing.get_player_throw_function("mcl_throwing:ender_pearl_entity"), + groups = { transport = 1 }, +}) + +mcl_throwing.register_throwable_object("mcl_throwing:snowball", "mcl_throwing:snowball_entity", 22) +mcl_throwing.register_throwable_object("mcl_throwing:egg", "mcl_throwing:egg_entity", 22) +mcl_throwing.register_throwable_object("mcl_throwing:ender_pearl", "mcl_throwing:ender_pearl_entity", 22) diff --git a/mods/ITEMS/mcl_tnt/depends.txt b/mods/ITEMS/mcl_tnt/depends.txt deleted file mode 100644 index 6a2354764..000000000 --- a/mods/ITEMS/mcl_tnt/depends.txt +++ /dev/null @@ -1,7 +0,0 @@ -mcl_explosions -mcl_particles -mcl_sounds? -mcl_mobitems? -mcl_death_messages? -doc_identifier? -mesecons? diff --git a/mods/ITEMS/mcl_tnt/init.lua b/mods/ITEMS/mcl_tnt/init.lua index ef4fb33c2..bf7b52385 100644 --- a/mods/ITEMS/mcl_tnt/init.lua +++ b/mods/ITEMS/mcl_tnt/init.lua @@ -1,8 +1,6 @@ -local S = minetest.get_translator("mcl_tnt") +local S = minetest.get_translator(minetest.get_current_modname()) local tnt_griefing = minetest.settings:get_bool("mcl_tnt_griefing", true) -local mod_death_messages = minetest.get_modpath("mcl_death_messages") - local function spawn_tnt(pos, entname) minetest.sound_play("tnt_ignite", {pos = pos,gain = 1.0,max_hear_distance = 15,}, true) local tnt = minetest.add_entity(pos, entname) @@ -11,7 +9,8 @@ local function spawn_tnt(pos, entname) end tnt = {} -tnt.ignite = function(pos) + +function tnt.ignite(pos) minetest.remove_node(pos) local e = spawn_tnt(pos, "mcl_tnt:tnt") minetest.check_for_falling(pos) @@ -20,7 +19,7 @@ end -- Add smoke particle of entity at pos. -- Intended to be called every step -tnt.smoke_step = function(pos) +function tnt.smoke_step(pos) minetest.add_particle({ pos = {x=pos.x,y=pos.y+0.5,z=pos.z}, velocity = vector.new(math.random() * 0.2 - 0.1, 1.0 + math.random(), math.random() * 0.2 - 0.1), @@ -116,7 +115,7 @@ function TNT:on_activate(staticdata) self.object:set_texture_mod("^mcl_tnt_blink.png") end -local function add_effects(pos, radius, drops) +--[[local function add_effects(pos, radius, drops) minetest.add_particlespawner({ amount = 64, time = 0.5, @@ -163,7 +162,7 @@ local function add_effects(pos, radius, drops) texture = texture, collisiondetection = true, }) -end +end]] function TNT:on_step(dtime) local pos = self.object:get_pos() @@ -180,7 +179,7 @@ function TNT:on_step(dtime) self.blinkstatus = not self.blinkstatus end if self.timer > tnt.BOOMTIMER then - mcl_explosions.explode(self.object:get_pos(), 4, { drop_chance = 1.0 }, self.object) + mcl_explosions.explode(self.object:get_pos(), 4, {}, self.object) self.object:remove() end end @@ -191,9 +190,9 @@ if minetest.get_modpath("mcl_mobitems") then minetest.register_craft({ output = "mcl_tnt:tnt", recipe = { - {'mcl_mobitems:gunpowder','group:sand','mcl_mobitems:gunpowder'}, - {'group:sand','mcl_mobitems:gunpowder','group:sand'}, - {'mcl_mobitems:gunpowder','group:sand','mcl_mobitems:gunpowder'} + {"mcl_mobitems:gunpowder", "group:sand", "mcl_mobitems:gunpowder"}, + {"group:sand", "mcl_mobitems:gunpowder", "group:sand"}, + {"mcl_mobitems:gunpowder", "group:sand", "mcl_mobitems:gunpowder"} } }) end diff --git a/mods/ITEMS/mcl_tnt/locale/mcl_tnt.pl.tr b/mods/ITEMS/mcl_tnt/locale/mcl_tnt.pl.tr new file mode 100644 index 000000000..39e520684 --- /dev/null +++ b/mods/ITEMS/mcl_tnt/locale/mcl_tnt.pl.tr @@ -0,0 +1,8 @@ +# textdomain: mcl_tnt +@1 was caught in an explosion.=@1 została wysadzona. +TNT=Trotyl +An explosive device. When it explodes, it will hurt living beings and destroy blocks around it. TNT has an explosion radius of @1. With a small chance, blocks may drop as an item (as if being mined) rather than being destroyed. TNT can be ignited by tools, explosions, fire, lava and redstone signals.=Wybuchowy materiał. Gdy wybucha rani żywe istoty w pobliżu i niszczy pobliskie bloki. Trotyl ma promień wybuchu równy @1. Trotyl może być zapalony narzędziami, eksplozjami, ogniem, lawą i energią z czerwienitu. +An explosive device. When it explodes, it will hurt living beings. TNT has an explosion radius of @1. TNT can be ignited by tools, explosions, fire, lava and redstone signals.=Materiał wybuchowy Gdy wybucha rani żywe istoty. Trotyl ma promień wybuchu równy @1. Trotyl może być zapalony narzędziami, eksplozjami, ogniem, lawą i energią z czerwienitu. +Place the TNT and ignite it with one of the methods above. Quickly get in safe distance. The TNT will start to be affected by gravity and explodes in 4 seconds.=Postaw trotyl i zapal go za pomocą metod opisanych powyżej. Szybko oddal się na bezpieczny dystans. Na trotyl zacznie działać grawitacja, a po 4 sekundach wybuchnie. +Ignited by tools, explosions, fire, lava, redstone power=Zapalany przez narzędzia, eksplozję, ogień lawę, energię z czerwienitu +Explosion radius: @1=Promień wybuchu: @1 diff --git a/mods/ITEMS/mcl_tnt/mod.conf b/mods/ITEMS/mcl_tnt/mod.conf index 96d4584cf..2e90ddb80 100644 --- a/mods/ITEMS/mcl_tnt/mod.conf +++ b/mods/ITEMS/mcl_tnt/mod.conf @@ -1 +1,3 @@ name = mcl_tnt +depends = mcl_explosions, mcl_particles +optional_depends = mcl_sounds, mcl_mobitems, doc_identifier, mesecons diff --git a/mods/ITEMS/mcl_tools/crafting.lua b/mods/ITEMS/mcl_tools/crafting.lua index 00d378d7c..636cb6660 100644 --- a/mods/ITEMS/mcl_tools/crafting.lua +++ b/mods/ITEMS/mcl_tools/crafting.lua @@ -1,235 +1,235 @@ minetest.register_craft({ - output = 'mcl_tools:pick_wood', + output = "mcl_tools:pick_wood", recipe = { - {'group:wood', 'group:wood', 'group:wood'}, - {'', 'mcl_core:stick', ''}, - {'', 'mcl_core:stick', ''}, + {"group:wood", "group:wood", "group:wood"}, + {"", "mcl_core:stick", ""}, + {"", "mcl_core:stick", ""}, } }) minetest.register_craft({ - output = 'mcl_tools:pick_stone', + output = "mcl_tools:pick_stone", recipe = { - {'mcl_core:cobble', 'mcl_core:cobble', 'mcl_core:cobble'}, - {'', 'mcl_core:stick', ''}, - {'', 'mcl_core:stick', ''}, + {"mcl_core:cobble", "mcl_core:cobble", "mcl_core:cobble"}, + {"", "mcl_core:stick", ""}, + {"", "mcl_core:stick", ""}, } }) minetest.register_craft({ - output = 'mcl_tools:pick_iron', + output = "mcl_tools:pick_iron", recipe = { - {'mcl_core:iron_ingot', 'mcl_core:iron_ingot', 'mcl_core:iron_ingot'}, - {'', 'mcl_core:stick', ''}, - {'', 'mcl_core:stick', ''}, + {"mcl_core:iron_ingot", "mcl_core:iron_ingot", "mcl_core:iron_ingot"}, + {"", "mcl_core:stick", ""}, + {"", "mcl_core:stick", ""}, } }) minetest.register_craft({ - output = 'mcl_tools:pick_gold', + output = "mcl_tools:pick_gold", recipe = { - {'mcl_core:gold_ingot', 'mcl_core:gold_ingot', 'mcl_core:gold_ingot'}, - {'', 'mcl_core:stick', ''}, - {'', 'mcl_core:stick', ''}, + {"mcl_core:gold_ingot", "mcl_core:gold_ingot", "mcl_core:gold_ingot"}, + {"", "mcl_core:stick", ""}, + {"", "mcl_core:stick", ""}, } }) minetest.register_craft({ - output = 'mcl_tools:pick_diamond', + output = "mcl_tools:pick_diamond", recipe = { - {'mcl_core:diamond', 'mcl_core:diamond', 'mcl_core:diamond'}, - {'', 'mcl_core:stick', ''}, - {'', 'mcl_core:stick', ''}, + {"mcl_core:diamond", "mcl_core:diamond", "mcl_core:diamond"}, + {"", "mcl_core:stick", ""}, + {"", "mcl_core:stick", ""}, } }) minetest.register_craft({ - output = 'mcl_tools:shovel_wood', + output = "mcl_tools:shovel_wood", recipe = { - {'group:wood'}, - {'mcl_core:stick'}, - {'mcl_core:stick'}, + {"group:wood"}, + {"mcl_core:stick"}, + {"mcl_core:stick"}, } }) minetest.register_craft({ - output = 'mcl_tools:shovel_stone', + output = "mcl_tools:shovel_stone", recipe = { - {'mcl_core:cobble'}, - {'mcl_core:stick'}, - {'mcl_core:stick'}, + {"mcl_core:cobble"}, + {"mcl_core:stick"}, + {"mcl_core:stick"}, } }) minetest.register_craft({ - output = 'mcl_tools:shovel_iron', + output = "mcl_tools:shovel_iron", recipe = { - {'mcl_core:iron_ingot'}, - {'mcl_core:stick'}, - {'mcl_core:stick'}, + {"mcl_core:iron_ingot"}, + {"mcl_core:stick"}, + {"mcl_core:stick"}, } }) minetest.register_craft({ - output = 'mcl_tools:shovel_gold', + output = "mcl_tools:shovel_gold", recipe = { - {'mcl_core:gold_ingot'}, - {'mcl_core:stick'}, - {'mcl_core:stick'}, + {"mcl_core:gold_ingot"}, + {"mcl_core:stick"}, + {"mcl_core:stick"}, } }) minetest.register_craft({ - output = 'mcl_tools:shovel_diamond', + output = "mcl_tools:shovel_diamond", recipe = { - {'mcl_core:diamond'}, - {'mcl_core:stick'}, - {'mcl_core:stick'}, + {"mcl_core:diamond"}, + {"mcl_core:stick"}, + {"mcl_core:stick"}, } }) minetest.register_craft({ - output = 'mcl_tools:axe_wood', + output = "mcl_tools:axe_wood", recipe = { - {'group:wood', 'group:wood'}, - {'group:wood', 'mcl_core:stick'}, - {'', 'mcl_core:stick'}, + {"group:wood", "group:wood"}, + {"group:wood", "mcl_core:stick"}, + {"", "mcl_core:stick"}, } }) minetest.register_craft({ - output = 'mcl_tools:axe_wood', + output = "mcl_tools:axe_wood", recipe = { - {'group:wood', 'group:wood'}, - {'mcl_core:stick', 'group:wood'}, - {'mcl_core:stick', ''}, + {"group:wood", "group:wood"}, + {"mcl_core:stick", "group:wood"}, + {"mcl_core:stick", ""}, } }) minetest.register_craft({ - output = 'mcl_tools:axe_stone', + output = "mcl_tools:axe_stone", recipe = { - {'mcl_core:cobble', 'mcl_core:cobble'}, - {'mcl_core:cobble', 'mcl_core:stick'}, - {'', 'mcl_core:stick'}, + {"mcl_core:cobble", "mcl_core:cobble"}, + {"mcl_core:cobble", "mcl_core:stick"}, + {"", "mcl_core:stick"}, } }) minetest.register_craft({ - output = 'mcl_tools:axe_stone', + output = "mcl_tools:axe_stone", recipe = { - {'mcl_core:cobble', 'mcl_core:cobble'}, - {'mcl_core:stick', 'mcl_core:cobble'}, - {'mcl_core:stick', ''}, + {"mcl_core:cobble", "mcl_core:cobble"}, + {"mcl_core:stick", "mcl_core:cobble"}, + {"mcl_core:stick", ""}, } }) minetest.register_craft({ - output = 'mcl_tools:axe_iron', + output = "mcl_tools:axe_iron", recipe = { - {'mcl_core:iron_ingot', 'mcl_core:iron_ingot'}, - {'mcl_core:iron_ingot', 'mcl_core:stick'}, - {'', 'mcl_core:stick'}, + {"mcl_core:iron_ingot", "mcl_core:iron_ingot"}, + {"mcl_core:iron_ingot", "mcl_core:stick"}, + {"", "mcl_core:stick"}, } }) minetest.register_craft({ - output = 'mcl_tools:axe_iron', + output = "mcl_tools:axe_iron", recipe = { - {'mcl_core:iron_ingot', 'mcl_core:iron_ingot'}, - {'mcl_core:stick', 'mcl_core:iron_ingot'}, - {'mcl_core:stick', ''}, + {"mcl_core:iron_ingot", "mcl_core:iron_ingot"}, + {"mcl_core:stick", "mcl_core:iron_ingot"}, + {"mcl_core:stick", ""}, } }) minetest.register_craft({ - output = 'mcl_tools:axe_gold', + output = "mcl_tools:axe_gold", recipe = { - {'mcl_core:gold_ingot', 'mcl_core:gold_ingot'}, - {'mcl_core:gold_ingot', 'mcl_core:stick'}, - {'', 'mcl_core:stick'}, + {"mcl_core:gold_ingot", "mcl_core:gold_ingot"}, + {"mcl_core:gold_ingot", "mcl_core:stick"}, + {"", "mcl_core:stick"}, } }) minetest.register_craft({ - output = 'mcl_tools:axe_gold', + output = "mcl_tools:axe_gold", recipe = { - {'mcl_core:gold_ingot', 'mcl_core:gold_ingot'}, - {'mcl_core:stick', 'mcl_core:gold_ingot'}, - {'mcl_core:stick', ''}, + {"mcl_core:gold_ingot", "mcl_core:gold_ingot"}, + {"mcl_core:stick", "mcl_core:gold_ingot"}, + {"mcl_core:stick", ""}, } }) minetest.register_craft({ - output = 'mcl_tools:axe_diamond', + output = "mcl_tools:axe_diamond", recipe = { - {'mcl_core:diamond', 'mcl_core:diamond'}, - {'mcl_core:diamond', 'mcl_core:stick'}, - {'', 'mcl_core:stick'}, + {"mcl_core:diamond", "mcl_core:diamond"}, + {"mcl_core:diamond", "mcl_core:stick"}, + {"", "mcl_core:stick"}, } }) minetest.register_craft({ - output = 'mcl_tools:axe_diamond', + output = "mcl_tools:axe_diamond", recipe = { - {'mcl_core:diamond', 'mcl_core:diamond'}, - {'mcl_core:stick', 'mcl_core:diamond'}, - {'mcl_core:stick', ''}, + {"mcl_core:diamond", "mcl_core:diamond"}, + {"mcl_core:stick", "mcl_core:diamond"}, + {"mcl_core:stick", ""}, } }) minetest.register_craft({ - output = 'mcl_tools:sword_wood', + output = "mcl_tools:sword_wood", recipe = { - {'group:wood'}, - {'group:wood'}, - {'mcl_core:stick'}, + {"group:wood"}, + {"group:wood"}, + {"mcl_core:stick"}, } }) minetest.register_craft({ - output = 'mcl_tools:sword_stone', + output = "mcl_tools:sword_stone", recipe = { - {'mcl_core:cobble'}, - {'mcl_core:cobble'}, - {'mcl_core:stick'}, + {"mcl_core:cobble"}, + {"mcl_core:cobble"}, + {"mcl_core:stick"}, } }) minetest.register_craft({ - output = 'mcl_tools:sword_iron', + output = "mcl_tools:sword_iron", recipe = { - {'mcl_core:iron_ingot'}, - {'mcl_core:iron_ingot'}, - {'mcl_core:stick'}, + {"mcl_core:iron_ingot"}, + {"mcl_core:iron_ingot"}, + {"mcl_core:stick"}, } }) minetest.register_craft({ - output = 'mcl_tools:sword_gold', + output = "mcl_tools:sword_gold", recipe = { - {'mcl_core:gold_ingot'}, - {'mcl_core:gold_ingot'}, - {'mcl_core:stick'}, + {"mcl_core:gold_ingot"}, + {"mcl_core:gold_ingot"}, + {"mcl_core:stick"}, } }) minetest.register_craft({ - output = 'mcl_tools:sword_diamond', + output = "mcl_tools:sword_diamond", recipe = { - {'mcl_core:diamond'}, - {'mcl_core:diamond'}, - {'mcl_core:stick'}, + {"mcl_core:diamond"}, + {"mcl_core:diamond"}, + {"mcl_core:stick"}, } }) minetest.register_craft({ - output = 'mcl_tools:shears', + output = "mcl_tools:shears", recipe = { - { 'mcl_core:iron_ingot', '' }, - { '', 'mcl_core:iron_ingot', }, + { "mcl_core:iron_ingot", "" }, + { "", "mcl_core:iron_ingot", }, } }) minetest.register_craft({ - output = 'mcl_tools:shears', + output = "mcl_tools:shears", recipe = { - { '', 'mcl_core:iron_ingot', }, - { 'mcl_core:iron_ingot', '' }, + { "", "mcl_core:iron_ingot" }, + { "mcl_core:iron_ingot", "" }, } }) diff --git a/mods/ITEMS/mcl_tools/depends.txt b/mods/ITEMS/mcl_tools/depends.txt deleted file mode 100644 index 5ce101eda..000000000 --- a/mods/ITEMS/mcl_tools/depends.txt +++ /dev/null @@ -1,2 +0,0 @@ -mcl_sounds -_mcl_autogroup diff --git a/mods/ITEMS/mcl_tools/init.lua b/mods/ITEMS/mcl_tools/init.lua index 91aacc287..1d68a0973 100644 --- a/mods/ITEMS/mcl_tools/init.lua +++ b/mods/ITEMS/mcl_tools/init.lua @@ -1,4 +1,6 @@ -local S = minetest.get_translator("mcl_tools") +local modname = minetest.get_current_modname() +local modpath = minetest.get_modpath(modname) +local S = minetest.get_translator(modname) -- mods/default/tools.lua @@ -6,14 +8,7 @@ local S = minetest.get_translator("mcl_tools") -- Tool definition -- ---[[ Maximum drop level definitions: -- 0: Hand -- 1: Wood / Shears -- 2: Gold -- 3: Stone -- 4: Iron -- 5: Diamond - +--[[ dig_speed_class group: - 1: Painfully slow - 2: Very slow @@ -26,30 +21,23 @@ dig_speed_class group: -- The hand local groupcaps, hand_range, hand_groups + if minetest.is_creative_enabled("") then -- Instant breaking in creative mode - groupcaps = { - creative_breakable = {times={[1]=0}, uses=0}, - } - -- mcl_autogroup provides the creative digging times for all digging groups - for k,v in pairs(mcl_autogroup.creativetimes) do - groupcaps[k] = { times = v, uses = 0 } - end + groupcaps = { creative_breakable = { times = {0}, uses = 0 } } hand_range = 10 hand_groups = { dig_speed_class = 7 } else - groupcaps = { - handy_dig = {times=mcl_autogroup.digtimes.handy_dig, uses=0}, - } + groupcaps = {} hand_range = 4 hand_groups = { dig_speed_class = 1 } end -minetest.register_item(":", { +minetest.register_tool(":", { type = "none", _doc_items_longdesc = S("You use your bare hand whenever you are not wielding any item. With your hand you can mine most blocks, but this is the slowest method and only the weakest blocks will yield their useful drop. The hand also deals minor damage by punching. Using the hand is often a last resort, as proper mining tools and weapons are much better.").."\n".. S("When you are wielding an item which is not a mining tool or a weapon, it will behave as if it were the hand when you start mining or punching.").."\n".. S("In Creative Mode, the hand is able to break all blocks instantly."), - wield_image = "wieldhand.png", + wield_image = "blank.png", wield_scale = {x=1.0,y=1.0,z=2.0}, -- According to Minecraft Wiki, the exact range is 3.975. -- Minetest seems to only support whole numbers, so we use 4. @@ -61,6 +49,18 @@ minetest.register_item(":", { damage_groups = {fleshy=1}, }, groups = hand_groups, + _mcl_diggroups = { + handy = { speed = 1, level = 1, uses = 0 }, + axey = { speed = 1, level = 1, uses = 0 }, + shovely = { speed = 1, level = 1, uses = 0 }, + hoey = { speed = 1, level = 1, uses = 0 }, + pickaxey = { speed = 1, level = 0, uses = 0 }, + swordy = { speed = 1, level = 0, uses = 0 }, + swordy_cobweb = { speed = 1, level = 0, uses = 0 }, + shearsy = { speed = 1, level = 0, uses = 0 }, + shearsy_wool = { speed = 1, level = 0, uses = 0 }, + shearsy_cobweb = { speed = 1, level = 0, uses = 0 }, + } }) -- Help texts @@ -72,7 +72,7 @@ local shovel_use = S("To turn a grass block into a grass path, hold the shovel i local shears_longdesc = S("Shears are tools to shear sheep and to mine a few block types. Shears are a special mining tool and can be used to obtain the original item from grass, leaves and similar blocks that require cutting.") local shears_use = S("To shear sheep or carve faceless pumpkins, use the “place” key on them. Faces can only be carved at the side of faceless pumpkins. Mining works as usual, but the drops are different for a few blocks.") -local wield_scale = { x = 1.8, y = 1.8, z = 1 } +local wield_scale = mcl_vars.tool_wield_scale -- Picks minetest.register_tool("mcl_tools:pick_wood", { @@ -86,14 +86,15 @@ minetest.register_tool("mcl_tools:pick_wood", { -- 1/1.2 full_punch_interval = 0.83333333, max_drop_level=1, - groupcaps={ - pickaxey_dig_wood = {times=mcl_autogroup.digtimes.pickaxey_dig_wood, uses=60, maxlevel=0}, - }, damage_groups = {fleshy=2}, punch_attack_uses = 30, }, sound = { breaks = "default_tool_breaks" }, _repair_material = "group:wood", + _mcl_toollike_wield = true, + _mcl_diggroups = { + pickaxey = { speed = 2, level = 1, uses = 60 } + }, }) minetest.register_tool("mcl_tools:pick_stone", { description = S("Stone Pickaxe"), @@ -105,14 +106,15 @@ minetest.register_tool("mcl_tools:pick_stone", { -- 1/1.2 full_punch_interval = 0.83333333, max_drop_level=3, - groupcaps={ - pickaxey_dig_stone = {times=mcl_autogroup.digtimes.pickaxey_dig_stone, uses=132, maxlevel=0}, - }, damage_groups = {fleshy=3}, punch_attack_uses = 66, }, sound = { breaks = "default_tool_breaks" }, _repair_material = "mcl_core:cobble", + _mcl_toollike_wield = true, + _mcl_diggroups = { + pickaxey = { speed = 4, level = 3, uses = 132 } + }, }) minetest.register_tool("mcl_tools:pick_iron", { description = S("Iron Pickaxe"), @@ -124,14 +126,15 @@ minetest.register_tool("mcl_tools:pick_iron", { -- 1/1.2 full_punch_interval = 0.83333333, max_drop_level=4, - groupcaps={ - pickaxey_dig_iron = {times=mcl_autogroup.digtimes.pickaxey_dig_iron , uses=251, maxlevel=0}, - }, damage_groups = {fleshy=4}, punch_attack_uses = 126, }, sound = { breaks = "default_tool_breaks" }, _repair_material = "mcl_core:iron_ingot", + _mcl_toollike_wield = true, + _mcl_diggroups = { + pickaxey = { speed = 6, level = 4, uses = 251 } + }, }) minetest.register_tool("mcl_tools:pick_gold", { description = S("Golden Pickaxe"), @@ -143,14 +146,15 @@ minetest.register_tool("mcl_tools:pick_gold", { -- 1/1.2 full_punch_interval = 0.83333333, max_drop_level=2, - groupcaps={ - pickaxey_dig_gold = {times=mcl_autogroup.digtimes.pickaxey_dig_gold , uses=33, maxlevel=0}, - }, damage_groups = {fleshy=2}, punch_attack_uses = 17, }, sound = { breaks = "default_tool_breaks" }, _repair_material = "mcl_core:gold_ingot", + _mcl_toollike_wield = true, + _mcl_diggroups = { + pickaxey = { speed = 12, level = 2, uses = 33 } + }, }) minetest.register_tool("mcl_tools:pick_diamond", { description = S("Diamond Pickaxe"), @@ -162,37 +166,18 @@ minetest.register_tool("mcl_tools:pick_diamond", { -- 1/1.2 full_punch_interval = 0.83333333, max_drop_level=5, - groupcaps={ - pickaxey_dig_diamond = {times=mcl_autogroup.digtimes.pickaxey_dig_diamond, uses=1562, maxlevel=0}, - }, damage_groups = {fleshy=5}, punch_attack_uses = 781, }, sound = { breaks = "default_tool_breaks" }, _repair_material = "mcl_core:diamond", + _mcl_toollike_wield = true, + _mcl_diggroups = { + pickaxey = { speed = 8, level = 5, uses = 1562 } + }, }) -local get_shovel_dig_group = function(itemstack) - local itemstring = itemstack:get_name() - local efficiency_level = mcl_enchanting.get_enchantment(itemstack, "efficiency") - local postfix = efficiency_level > 0 and "_efficiency_" .. efficiency_level or "" - if itemstring:find("mcl_tools:shovel_wood") == 1 then - return "shovely_dig_wood" .. postfix - elseif itemstring:find("mcl_tools:shovel_stone") == 1 then - return "shovely_dig_stone" .. postfix - elseif itemstring:find("mcl_tools:shovel_iron") == 1 then - return "shovely_dig_iron" .. postfix - elseif itemstring:find("mcl_tools:shovel_gold") == 1 then - return "shovely_dig_gold" .. postfix - elseif itemstring:find("mcl_tools:shovel_diamond") == 1 then - return "shovely_dig_diamond" .. postfix - else - -- Fallback - return "shovely_dig_wood" - end -end - -local make_grass_path = function(itemstack, placer, pointed_thing) +local function make_grass_path(itemstack, placer, pointed_thing) -- Use pointed node's on_rightclick function first, if present local node = minetest.get_node(pointed_thing.under) if placer and not placer:get_player_control().sneak then @@ -216,15 +201,9 @@ local make_grass_path = function(itemstack, placer, pointed_thing) end if not minetest.is_creative_enabled(placer:get_player_name()) then - -- Add wear, as if digging a level 0 shovely node + -- Add wear (as if digging a shovely node) local toolname = itemstack:get_name() - local def = minetest.registered_items[toolname] - local group = get_shovel_dig_group(itemstack) - local toolcaps = itemstack:get_tool_capabilities() - local base_uses = toolcaps.groupcaps[group].uses - local maxlevel = toolcaps.groupcaps[group].maxlevel - local uses = base_uses * math.pow(3, maxlevel) - local wear = math.ceil(65535 / uses) + local wear = mcl_autogroup.get_wear(toolname, "shovely") itemstack:add_wear(wear) end minetest.sound_play({name="default_grass_footstep", gain=1}, {pos = above}, true) @@ -236,7 +215,7 @@ end local carve_pumpkin if minetest.get_modpath("mcl_farming") then - carve_pumpkin = function(itemstack, placer, pointed_thing) + function carve_pumpkin(itemstack, placer, pointed_thing) -- Use pointed node's on_rightclick function first, if present local node = minetest.get_node(pointed_thing.under) if placer and not placer:get_player_control().sneak then @@ -253,15 +232,10 @@ if minetest.get_modpath("mcl_farming") then if not minetest.is_creative_enabled(placer:get_player_name()) then -- Add wear (as if digging a shearsy node) local toolname = itemstack:get_name() - local def = minetest.registered_items[toolname] - local group = get_shovel_dig_group(toolname) - local base_uses = def.tool_capabilities.groupcaps["shearsy_dig"].uses - local maxlevel = def.tool_capabilities.groupcaps["shearsy_dig"].maxlevel - local uses = base_uses * math.pow(3, maxlevel) - local wear = math.ceil(65535 / uses) + local wear = mcl_autogroup.get_wear(toolname, "shearsy") itemstack:add_wear(wear) end - minetest.sound_play({name="default_grass_footstep", gain=1}, {pos = above}, true) + minetest.sound_play({name="default_grass_footstep", gain=1}, {pos = pointed_thing.above}, true) local dir = vector.subtract(pointed_thing.under, pointed_thing.above) local param2 = minetest.dir_to_facedir(dir) minetest.swap_node(pointed_thing.under, {name="mcl_farming:pumpkin_face", param2 = param2}) @@ -283,15 +257,16 @@ minetest.register_tool("mcl_tools:shovel_wood", { tool_capabilities = { full_punch_interval = 1, max_drop_level=1, - groupcaps={ - shovely_dig_wood = {times=mcl_autogroup.digtimes.shovely_dig_wood, uses=60, maxlevel=0}, - }, damage_groups = {fleshy=2}, punch_attack_uses = 30, }, on_place = make_grass_path, sound = { breaks = "default_tool_breaks" }, _repair_material = "group:wood", + _mcl_toollike_wield = true, + _mcl_diggroups = { + shovely = { speed = 2, level = 1, uses = 60 } + }, }) minetest.register_tool("mcl_tools:shovel_stone", { description = S("Stone Shovel"), @@ -303,15 +278,16 @@ minetest.register_tool("mcl_tools:shovel_stone", { tool_capabilities = { full_punch_interval = 1, max_drop_level=3, - groupcaps={ - shovely_dig_stone = {times=mcl_autogroup.digtimes.shovely_dig_stone, uses=132, maxlevel=0}, - }, damage_groups = {fleshy=3}, punch_attack_uses = 66, }, on_place = make_grass_path, sound = { breaks = "default_tool_breaks" }, _repair_material = "mcl_core:cobble", + _mcl_toollike_wield = true, + _mcl_diggroups = { + shovely = { speed = 4, level = 3, uses = 132 } + }, }) minetest.register_tool("mcl_tools:shovel_iron", { description = S("Iron Shovel"), @@ -323,15 +299,16 @@ minetest.register_tool("mcl_tools:shovel_iron", { tool_capabilities = { full_punch_interval = 1, max_drop_level=4, - groupcaps={ - shovely_dig_iron = {times=mcl_autogroup.digtimes.shovely_dig_iron, uses=251, maxlevel=0}, - }, damage_groups = {fleshy=4}, punch_attack_uses = 126, }, on_place = make_grass_path, sound = { breaks = "default_tool_breaks" }, _repair_material = "mcl_core:iron_ingot", + _mcl_toollike_wield = true, + _mcl_diggroups = { + shovely = { speed = 6, level = 4, uses = 251 } + }, }) minetest.register_tool("mcl_tools:shovel_gold", { description = S("Golden Shovel"), @@ -343,15 +320,16 @@ minetest.register_tool("mcl_tools:shovel_gold", { tool_capabilities = { full_punch_interval = 1, max_drop_level=2, - groupcaps={ - shovely_dig_gold = {times=mcl_autogroup.digtimes.shovely_dig_gold, uses=33, maxlevel=0}, - }, damage_groups = {fleshy=2}, punch_attack_uses = 17, }, on_place = make_grass_path, sound = { breaks = "default_tool_breaks" }, _repair_material = "mcl_core:gold_ingot", + _mcl_toollike_wield = true, + _mcl_diggroups = { + shovely = { speed = 12, level = 2, uses = 33 } + }, }) minetest.register_tool("mcl_tools:shovel_diamond", { description = S("Diamond Shovel"), @@ -363,18 +341,47 @@ minetest.register_tool("mcl_tools:shovel_diamond", { tool_capabilities = { full_punch_interval = 1, max_drop_level=5, - groupcaps={ - shovely_dig_diamond = {times=mcl_autogroup.digtimes.shovely_dig_diamond, uses=1562, maxlevel=0}, - }, damage_groups = {fleshy=5}, punch_attack_uses = 781, }, on_place = make_grass_path, sound = { breaks = "default_tool_breaks" }, _repair_material = "mcl_core:diamond", + _mcl_toollike_wield = true, + _mcl_diggroups = { + shovely = { speed = 8, level = 5, uses = 1562 } + }, }) -- Axes +local function make_stripped_trunk(itemstack, placer, pointed_thing) + if pointed_thing.type ~= "node" then return end + + local node = minetest.get_node(pointed_thing.under) + local noddef = minetest.registered_nodes[minetest.get_node(pointed_thing.under).name] + + if not placer:get_player_control().sneak and noddef.on_rightclick then + return minetest.item_place(itemstack, placer, pointed_thing) + end + if minetest.is_protected(pointed_thing.under, placer:get_player_name()) then + minetest.record_protection_violation(pointed_thing.under, placer:get_player_name()) + return itemstack + end + + if noddef._mcl_stripped_variant == nil then + return itemstack + else + minetest.swap_node(pointed_thing.under, {name=noddef._mcl_stripped_variant, param2=node.param2}) + if not minetest.is_creative_enabled(placer:get_player_name()) then + -- Add wear (as if digging a axey node) + local toolname = itemstack:get_name() + local wear = mcl_autogroup.get_wear(toolname, "axey") + itemstack:add_wear(wear) + end + end + return itemstack +end + minetest.register_tool("mcl_tools:axe_wood", { description = S("Wooden Axe"), _doc_items_longdesc = axe_longdesc, @@ -385,14 +392,16 @@ minetest.register_tool("mcl_tools:axe_wood", { tool_capabilities = { full_punch_interval = 1.25, max_drop_level=1, - groupcaps={ - axey_dig_wood = {times=mcl_autogroup.digtimes.axey_dig_wood, uses=60, maxlevel=0}, - }, damage_groups = {fleshy=7}, punch_attack_uses = 30, }, + on_place = make_stripped_trunk, sound = { breaks = "default_tool_breaks" }, _repair_material = "group:wood", + _mcl_toollike_wield = true, + _mcl_diggroups = { + axey = { speed = 2, level = 1, uses = 60 } + }, }) minetest.register_tool("mcl_tools:axe_stone", { description = S("Stone Axe"), @@ -403,14 +412,16 @@ minetest.register_tool("mcl_tools:axe_stone", { tool_capabilities = { full_punch_interval = 1.25, max_drop_level=3, - groupcaps={ - axey_dig_stone = {times=mcl_autogroup.digtimes.axey_dig_stone, uses=132, maxlevel=0}, - }, damage_groups = {fleshy=9}, punch_attack_uses = 66, }, + on_place = make_stripped_trunk, sound = { breaks = "default_tool_breaks" }, _repair_material = "mcl_core:cobble", + _mcl_toollike_wield = true, + _mcl_diggroups = { + axey = { speed = 4, level = 3, uses = 132 } + }, }) minetest.register_tool("mcl_tools:axe_iron", { description = S("Iron Axe"), @@ -422,14 +433,16 @@ minetest.register_tool("mcl_tools:axe_iron", { -- 1/0.9 full_punch_interval = 1.11111111, max_drop_level=4, - groupcaps={ - axey_dig_iron = {times=mcl_autogroup.digtimes.axey_dig_iron, uses=251, maxlevel=0}, - }, damage_groups = {fleshy=9}, punch_attack_uses = 126, }, + on_place = make_stripped_trunk, sound = { breaks = "default_tool_breaks" }, _repair_material = "mcl_core:iron_ingot", + _mcl_toollike_wield = true, + _mcl_diggroups = { + axey = { speed = 6, level = 4, uses = 251 } + }, }) minetest.register_tool("mcl_tools:axe_gold", { description = S("Golden Axe"), @@ -440,14 +453,16 @@ minetest.register_tool("mcl_tools:axe_gold", { tool_capabilities = { full_punch_interval = 1.0, max_drop_level=2, - groupcaps={ - axey_dig_gold= {times=mcl_autogroup.digtimes.axey_dig_gold, uses=33, maxlevel=0}, - }, damage_groups = {fleshy=7}, punch_attack_uses = 17, }, + on_place = make_stripped_trunk, sound = { breaks = "default_tool_breaks" }, _repair_material = "mcl_core:gold_ingot", + _mcl_toollike_wield = true, + _mcl_diggroups = { + axey = { speed = 12, level = 2, uses = 33 } + }, }) minetest.register_tool("mcl_tools:axe_diamond", { description = S("Diamond Axe"), @@ -458,14 +473,16 @@ minetest.register_tool("mcl_tools:axe_diamond", { tool_capabilities = { full_punch_interval = 1.0, max_drop_level=5, - groupcaps={ - axey_dig_diamond = {times=mcl_autogroup.digtimes.axey_dig_diamond, uses=1562, maxlevel=0}, - }, damage_groups = {fleshy=9}, punch_attack_uses = 781, }, + on_place = make_stripped_trunk, sound = { breaks = "default_tool_breaks" }, _repair_material = "mcl_core:diamond", + _mcl_toollike_wield = true, + _mcl_diggroups = { + axey = { speed = 8, level = 5, uses = 1562 } + }, }) -- Swords @@ -479,15 +496,16 @@ minetest.register_tool("mcl_tools:sword_wood", { tool_capabilities = { full_punch_interval = 0.625, max_drop_level=1, - groupcaps={ - swordy_dig = {times=mcl_autogroup.digtimes.swordy_dig , uses=60, maxlevel=0}, - swordy_cobweb_dig = {times=mcl_autogroup.digtimes.swordy_cobweb_dig , uses=60, maxlevel=0}, - }, damage_groups = {fleshy=4}, punch_attack_uses = 60, }, sound = { breaks = "default_tool_breaks" }, _repair_material = "group:wood", + _mcl_toollike_wield = true, + _mcl_diggroups = { + swordy = { speed = 2, level = 1, uses = 60 }, + swordy_cobweb = { speed = 2, level = 1, uses = 60 } + }, }) minetest.register_tool("mcl_tools:sword_stone", { description = S("Stone Sword"), @@ -498,15 +516,16 @@ minetest.register_tool("mcl_tools:sword_stone", { tool_capabilities = { full_punch_interval = 0.625, max_drop_level=3, - groupcaps={ - swordy_dig = {times=mcl_autogroup.digtimes.swordy_dig , uses=132, maxlevel=0}, - swordy_cobweb_dig = {times=mcl_autogroup.digtimes.swordy_cobweb_dig , uses=132, maxlevel=0}, - }, damage_groups = {fleshy=5}, punch_attack_uses = 132, }, sound = { breaks = "default_tool_breaks" }, _repair_material = "mcl_core:cobble", + _mcl_toollike_wield = true, + _mcl_diggroups = { + swordy = { speed = 4, level = 3, uses = 132 }, + swordy_cobweb = { speed = 4, level = 3, uses = 132 } + }, }) minetest.register_tool("mcl_tools:sword_iron", { description = S("Iron Sword"), @@ -517,15 +536,16 @@ minetest.register_tool("mcl_tools:sword_iron", { tool_capabilities = { full_punch_interval = 0.625, max_drop_level=4, - groupcaps={ - swordy_dig = {times=mcl_autogroup.digtimes.swordy_dig, uses=251, maxlevel=0}, - swordy_cobweb_dig = {times=mcl_autogroup.digtimes.swordy_cobweb_dig , uses=251, maxlevel=0}, - }, damage_groups = {fleshy=6}, punch_attack_uses = 251, }, sound = { breaks = "default_tool_breaks" }, _repair_material = "mcl_core:iron_ingot", + _mcl_toollike_wield = true, + _mcl_diggroups = { + swordy = { speed = 6, level = 4, uses = 251 }, + swordy_cobweb = { speed = 6, level = 4, uses = 251 } + }, }) minetest.register_tool("mcl_tools:sword_gold", { description = S("Golden Sword"), @@ -536,15 +556,16 @@ minetest.register_tool("mcl_tools:sword_gold", { tool_capabilities = { full_punch_interval = 0.625, max_drop_level=2, - groupcaps={ - swordy_dig = {times=mcl_autogroup.digtimes.swordy_dig, uses=33, maxlevel=0}, - swordy_cobweb_dig = {times=mcl_autogroup.digtimes.swordy_cobweb_dig, uses=33, maxlevel=0}, - }, damage_groups = {fleshy=4}, punch_attack_uses = 33, }, sound = { breaks = "default_tool_breaks" }, _repair_material = "mcl_core:gold_ingot", + _mcl_toollike_wield = true, + _mcl_diggroups = { + swordy = { speed = 12, level = 2, uses = 33 }, + swordy_cobweb = { speed = 12, level = 2, uses = 33 } + }, }) minetest.register_tool("mcl_tools:sword_diamond", { description = S("Diamond Sword"), @@ -555,15 +576,16 @@ minetest.register_tool("mcl_tools:sword_diamond", { tool_capabilities = { full_punch_interval = 0.625, max_drop_level=5, - groupcaps={ - swordy_dig = {times=mcl_autogroup.digtimes.swordy_dig, uses=1562, maxlevel=0}, - swordy_cobweb_dig = {times=mcl_autogroup.digtimes.swordy_cobweb_dig, uses=1562, maxlevel=0}, - }, damage_groups = {fleshy=7}, punch_attack_uses = 1562, }, sound = { breaks = "default_tool_breaks" }, _repair_material = "mcl_core:diamond", + _mcl_toollike_wield = true, + _mcl_diggroups = { + swordy = { speed = 8, level = 5, uses = 1562 }, + swordy_cobweb = { speed = 8, level = 5, uses = 1562 } + }, }) --Shears @@ -578,15 +600,17 @@ minetest.register_tool("mcl_tools:shears", { tool_capabilities = { full_punch_interval = 0.5, max_drop_level=1, - groupcaps={ - shearsy_dig = {times=mcl_autogroup.digtimes.shearsy_dig, uses=238, maxlevel=0}, - shearsy_wool_dig = {times=mcl_autogroup.digtimes.shearsy_wool_dig, uses=238, maxlevel=0}, - } }, on_place = carve_pumpkin, sound = { breaks = "default_tool_breaks" }, + _mcl_toollike_wield = true, + _mcl_diggroups = { + shearsy = { speed = 1.5, level = 1, uses = 238 }, + shearsy_wool = { speed = 5, level = 1, uses = 238 }, + shearsy_cobweb = { speed = 15, level = 1, uses = 238 } + }, }) -dofile(minetest.get_modpath("mcl_tools").."/crafting.lua") -dofile(minetest.get_modpath("mcl_tools").."/aliases.lua") +dofile(modpath.."/crafting.lua") +dofile(modpath.."/aliases.lua") diff --git a/mods/ITEMS/mcl_tools/locale/mcl_tools.pl.tr b/mods/ITEMS/mcl_tools/locale/mcl_tools.pl.tr new file mode 100644 index 000000000..afe42593f --- /dev/null +++ b/mods/ITEMS/mcl_tools/locale/mcl_tools.pl.tr @@ -0,0 +1,33 @@ +# textdomain: mcl_tools +You use your bare hand whenever you are not wielding any item. With your hand you can mine most blocks, but this is the slowest method and only the weakest blocks will yield their useful drop. The hand also deals minor damage by punching. Using the hand is often a last resort, as proper mining tools and weapons are much better.=Gdy nie trzymasz żadnego przedmiotu używasz swoich gołych dłoni. Swoją dłonią możesz wykopać większość bloków, ale jest to najwolniejsza metoda i tylko najsłabsze bloki wyrzucą z siebie użyteczny zrzut. Ręce zadają również niewielkie obrażenia przy uderzaniu. Używanie ręki to często ostateczność, ponieważ porządne narzędzia do kopania i bronie są o wiele lepsze. +When you are wielding an item which is not a mining tool or a weapon, it will behave as if it were the hand when you start mining or punching.=Gdy trzymasz przedmiot który nie jest narzędziem do kopania ani bronią, będzie się on zachowywał jakby był dłonią podczas kopania i uderzania. +In Creative Mode, the hand is able to break all blocks instantly.=W trybie kreatywnym ręka jest w stanie zniszczyć wszystkie bloki natychmiastowo. +Pickaxes are mining tools to mine hard blocks, such as stone. A pickaxe can also be used as weapon, but it is rather inefficient.=Kilofy są narzędziami wykorzystywanymi do kopania twardych bloków, takich jak kamień. Mogą być również wykorzystane jako bronie, ale nie jest to bardzo efektywne. +An axe is your tool of choice to cut down trees, wood-based blocks and other blocks. Axes deal a lot of damage as well, but they are rather slow.=Siekiera jest narzędziem do ścinania drzew, bloków z desek i innych bloków. Siekiery zadają duże obrażenia, ale są wolne. +Swords are great in melee combat, as they are fast, deal high damage and can endure countless battles. Swords can also be used to cut down a few particular blocks, such as cobwebs.=Miecze są świetne do walki wręcz, ponieważ są szybkie, zadają duże obrażenia i mogą wytrzymać niezliczone pojedynki. Można je również wykorzystać do ścięcia niektórych bloków takich jak pajęczyny. +Shovels are tools for digging coarse blocks, such as dirt, sand and gravel. They can also be used to turn grass blocks to grass paths. Shovels can be used as weapons, but they are very weak.=Łopaty są użyteczne do kopania sypkich bloków takich jak ziemia, piasek czy żwir. Można je również wykorzystać by zmienić bloki trawy w ścieżki. Mogą być również wykorzystane jako broń, ale są bardzo słabe. +To turn a grass block into a grass path, hold the shovel in your hand, then use (rightclick) the top or side of a grass block. This only works when there's air above the grass block.=Aby zmienić blok trawy w ścieżkę, weź łopatę do ręki, następnie użyj prawego przycisku myszy na wierzchu lub boku bloku trawy. To zadziała tylko pod warunkiem, że nad blokiem ziemi jest blok powietrza. +Shears are tools to shear sheep and to mine a few block types. Shears are a special mining tool and can be used to obtain the original item from grass, leaves and similar blocks that require cutting.=Nożyce są narzędziem do strzyżenia owiec i kopania kilku typów bloków. Są one specjalnym narzędziem do kopania i można je wykorzystać do uzyskania oryginalnych przedmiotów z trawy, liści i podobnych bloków wymagających ścinania. +To shear sheep or carve faceless pumpkins, use the “place” key on them. Faces can only be carved at the side of faceless pumpkins. Mining works as usual, but the drops are different for a few blocks.=Aby ostrzyc owcę lub wydrążyć dynię użyj przycisku "umieść" na nich. Twarze mogą zostać wydrążone na bokach dyń bez twarzy. Kopanie działa jak zwykle, ale zrzut jest inny dla niektórych bloków. +Wooden Pickaxe=Drewniany kilof +Stone Pickaxe=Kamienny kilof +Iron Pickaxe=Żelazny kilof +Golden Pickaxe=Złoty kilof +Diamond Pickaxe=Diamentowy kilof +Wooden Shovel=Drewniana łopata +Stone Shovel=Kamienna łopata +Iron Shovel=Żelazna łopata +Golden Shovel=Złota łopata +Diamond Shovel=Diamentowa łopata +Wooden Axe=Drewniana siekiera +Stone Axe=Kamienna siekiera +Iron Axe=Żelazna siekiera +Golden Axe=Złota siekiera +Diamond Axe=Diamentowa siekiera +Wooden Sword=Drewniany miecz +Stone Sword=Kamienny miecz +Iron Sword=Żelazny miecz +Golden Sword=Złoty miecz +Diamond Sword=Diamentowy miecz +Shears=Nożyce + diff --git a/mods/ITEMS/mcl_tools/mod.conf b/mods/ITEMS/mcl_tools/mod.conf index fb522b423..d2d93197b 100644 --- a/mods/ITEMS/mcl_tools/mod.conf +++ b/mods/ITEMS/mcl_tools/mod.conf @@ -1 +1,2 @@ name = mcl_tools +depends = mcl_sounds, mcl_init diff --git a/mods/ITEMS/mcl_tools/textures/wieldhand.png b/mods/ITEMS/mcl_tools/textures/wieldhand.png deleted file mode 100644 index 47d21f69016c56acc68fcdc7c6f590f6dafdca8f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 170 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61SBU+%rFB|Y$ZW{!9W@a@|Lkr1XA&yE{-7; zjL8WJ60FOgUy*sC8xt?JUq!j5I{4bj$g3$`K+b>nSmBR`+j3TqPU z)8%9YuQ7!0+HNa;NMQ}*3!x$t2Ek0J2Rw`ZIJB{`C>c(%D$?W)V~A2Jh}1Vb6AH4@ M)78&qol`;+0NNEYegFUf diff --git a/mods/ITEMS/mcl_torches/api.lua b/mods/ITEMS/mcl_torches/api.lua new file mode 100644 index 000000000..dab508795 --- /dev/null +++ b/mods/ITEMS/mcl_torches/api.lua @@ -0,0 +1,267 @@ +local smoke_pdef = { + amount = 0.5, + maxexptime = 2.0, + minvel = { x = 0.0, y = 0.5, z = 0.0 }, + maxvel = { x = 0.0, y = 0.6, z = 0.0 }, + minsize = 1.5, + maxsize = 1.5, + minrelpos = { x = -1/16, y = 0.04, z = -1/16 }, + maxrelpos = { x = 1/16, y = 0.06, z = 1/16 }, +} + +local function spawn_flames_floor(pos) + -- Flames + mcl_particles.add_node_particlespawner(pos, { + amount = 8, + time = 0, + minpos = vector.add(pos, { x = -0.1, y = 0.05, z = -0.1 }), + maxpos = vector.add(pos, { x = 0.1, y = 0.15, z = 0.1 }), + minvel = { x = -0.01, y = 0, z = -0.01 }, + maxvel = { x = 0.01, y = 0.1, z = 0.01 }, + minexptime = 0.3, + maxexptime = 0.6, + minsize = 0.7, + maxsize = 2, + texture = "mcl_particles_flame.png", + glow = minetest.registered_nodes[minetest.get_node(pos).name].light_source, + }, "low") + -- Smoke + mcl_particles.spawn_smoke(pos, "torch", smoke_pdef) +end + +local function spawn_flames_wall(pos) + --local minrelpos, maxrelpos + local node = minetest.get_node(pos) + local dir = minetest.wallmounted_to_dir(node.param2) + + local smoke_pdef = table.copy(smoke_pdef) + + if dir.x < 0 then + smoke_pdef.minrelpos = { x = -0.38, y = 0.04, z = -0.1 } + smoke_pdef.maxrelpos = { x = -0.2, y = 0.14, z = 0.1 } + elseif dir.x > 0 then + smoke_pdef.minrelpos = { x = 0.2, y = 0.04, z = -0.1 } + smoke_pdef.maxrelpos = { x = 0.38, y = 0.14, z = 0.1 } + elseif dir.z < 0 then + smoke_pdef.minrelpos = { x = -0.1, y = 0.04, z = -0.38 } + smoke_pdef.maxrelpos = { x = 0.1, y = 0.14, z = -0.2 } + elseif dir.z > 0 then + smoke_pdef.minrelpos = { x = -0.1, y = 0.04, z = 0.2 } + smoke_pdef.maxrelpos = { x = 0.1, y = 0.14, z = 0.38 } + else + return + end + + + -- Flames + mcl_particles.add_node_particlespawner(pos, { + amount = 8, + time = 0, + minpos = vector.add(pos, smoke_pdef.minrelpos), + maxpos = vector.add(pos, smoke_pdef.maxrelpos), + minvel = { x = -0.01, y = 0, z = -0.01 }, + maxvel = { x = 0.01, y = 0.1, z = 0.01 }, + minexptime = 0.3, + maxexptime = 0.6, + minsize = 0.7, + maxsize = 2, + texture = "mcl_particles_flame.png", + glow = minetest.registered_nodes[node.name].light_source, + }, "low") + -- Smoke + mcl_particles.spawn_smoke(pos, "torch", smoke_pdef) +end + +local function remove_flames(pos) + mcl_particles.delete_node_particlespawners(pos) +end + +-- +-- 3d torch part +-- + +-- Check if placement at given node is allowed +local function check_placement_allowed(node, wdir) + -- Torch placement rules: Disallow placement on some nodes. General rule: Solid, opaque, full cube collision box nodes are allowed. + -- Special allowed nodes: + -- * soul sand + -- * mob spawner + -- * chorus flower + -- * glass, barrier, ice + -- * Fence, wall, end portal frame with ender eye: Only on top + -- * Slab, stairs: Only on top if upside down + + -- Special forbidden nodes: + -- * Piston, sticky piston + local def = minetest.registered_nodes[node.name] + if not def then + return false + -- No ceiling torches + elseif wdir == 0 then + return false + elseif not def.buildable_to then + if node.name ~= "mcl_core:ice" and node.name ~= "mcl_nether:soul_sand" and node.name ~= "mcl_mobspawners:spawner" and node.name ~= "mcl_core:barrier" and node.name ~= "mcl_end:chorus_flower" and node.name ~= "mcl_end:chorus_flower_dead" and (not def.groups.glass) and + ((not def.groups.solid) or (not def.groups.opaque)) then + -- Only allow top placement on these nodes + if node.name == "mcl_end:dragon_egg" or node.name == "mcl_portals:end_portal_frame_eye" or def.groups.fence == 1 or def.groups.wall or def.groups.slab_top == 1 or def.groups.anvil or def.groups.pane or (def.groups.stair == 1 and minetest.facedir_to_dir(node.param2).y ~= 0) then + if wdir ~= 1 then + return false + end + else + return false + end + elseif minetest.get_item_group(node.name, "piston") >= 1 then + return false + end + end + return true +end + +function mcl_torches.register_torch(def) + local itemstring = minetest.get_current_modname() .. ":" .. def.name + local itemstring_wall = itemstring .. "_wall" + + def.light = def.light or minetest.LIGHT_MAX + def.mesh_floor = def.mesh_floor or "mcl_torches_torch_floor.obj" + def.mesh_wall = def.mesh_wall or "mcl_torches_torch_wall.obj" + + local groups = def.groups or {} + + groups.attached_node = 1 + groups.torch = 1 + groups.torch_particles = def.particles and 1 + groups.dig_by_water = 1 + groups.destroy_by_lava_flow = 1 + groups.dig_by_piston = 1 + + local floordef = { + description = def.description, + _doc_items_longdesc = def.doc_items_longdesc, + _doc_items_usagehelp = def.doc_items_usagehelp, + _doc_items_hidden = def.doc_items_hidden, + _doc_items_create_entry = def._doc_items_create_entry, + drawtype = "mesh", + mesh = def.mesh_floor, + inventory_image = def.icon, + wield_image = def.icon, + tiles = def.tiles, + use_texture_alpha = minetest.features.use_texture_alpha_string_modes and "opaque" or false, + paramtype = "light", + paramtype2 = "wallmounted", + sunlight_propagates = true, + is_ground_content = false, + walkable = false, + liquids_pointable = false, + light_source = def.light, + groups = groups, + drop = def.drop or itemstring, + selection_box = { + type = "wallmounted", + wall_top = {-1/16, -1/16, -1/16, 1/16, 0.5, 1/16}, + wall_bottom = {-1/16, -0.5, -1/16, 1/16, 1/16, 1/16}, + }, + sounds = def.sounds, + node_placement_prediction = "", + on_place = function(itemstack, placer, pointed_thing) + if pointed_thing.type ~= "node" then + -- no interaction possible with entities, for now. + return itemstack + end + + local under = pointed_thing.under + local node = minetest.get_node(under) + local def = minetest.registered_nodes[node.name] + if not def then return itemstack end + + -- Call on_rightclick if the pointed node defines it + if placer and not placer:get_player_control().sneak then + if minetest.registered_nodes[node.name] and minetest.registered_nodes[node.name].on_rightclick then + return minetest.registered_nodes[node.name].on_rightclick(under, node, placer, itemstack) or itemstack + end + end + + local above = pointed_thing.above + local wdir = minetest.dir_to_wallmounted({x = under.x - above.x, y = under.y - above.y, z = under.z - above.z}) + + if check_placement_allowed(node, wdir) == false then + return itemstack + end + + local itemstring = itemstack:get_name() + local fakestack = ItemStack(itemstack) + local idef = fakestack:get_definition() + local retval + + if wdir == 1 then + retval = fakestack:set_name(itemstring) + else + retval = fakestack:set_name(itemstring_wall) + end + if not retval then + return itemstack + end + + local success + itemstack, success = minetest.item_place(fakestack, placer, pointed_thing, wdir) + itemstack:set_name(itemstring) + + if success and idef.sounds and idef.sounds.place then + minetest.sound_play(idef.sounds.place, {pos=under, gain=1}, true) + end + return itemstack + end, + on_rotate = false, + on_construct = def.particles and spawn_flames_floor, + on_destruct = def.particles and remove_flames, + } + minetest.register_node(itemstring, floordef) + + local groups_wall = table.copy(groups) + groups_wall.torch = 2 + + local walldef = { + drawtype = "mesh", + mesh = def.mesh_wall, + tiles = def.tiles, + use_texture_alpha = minetest.features.use_texture_alpha_string_modes and "opaque" or false, + paramtype = "light", + paramtype2 = "wallmounted", + sunlight_propagates = true, + is_ground_content = false, + walkable = false, + light_source = def.light, + groups = groups_wall, + drop = def.drop or itemstring, + selection_box = { + type = "wallmounted", + wall_top = {-0.1, -0.1, -0.1, 0.1, 0.5, 0.1}, + wall_bottom = {-0.1, -0.5, -0.1, 0.1, 0.1, 0.1}, + wall_side = {-0.5, -0.5, -0.1, -0.2, 0.1, 0.1}, + }, + sounds = def.sounds, + on_rotate = false, + on_construct = def.particles and spawn_flames_wall, + on_destruct = def.particles and remove_flames, + } + minetest.register_node(itemstring_wall, walldef) + + -- Add entry alias for the Help + if minetest.get_modpath("doc") then + doc.add_entry_alias("nodes", itemstring, "nodes", itemstring_wall) + end +end + +minetest.register_lbm({ + label = "Torch flame particles", + name = "mcl_torches:flames", + nodenames = {"group:torch_particles"}, + run_at_every_load = true, + action = function(pos, node) + local torch_group = minetest.get_item_group(node.name, "torch") + if torch_group == 1 then + spawn_flames_floor(pos) + elseif torch_group == 2 then + spawn_flames_wall(pos) + end + end, +}) diff --git a/mods/ITEMS/mcl_torches/depends.txt b/mods/ITEMS/mcl_torches/depends.txt deleted file mode 100644 index d15228bce..000000000 --- a/mods/ITEMS/mcl_torches/depends.txt +++ /dev/null @@ -1,4 +0,0 @@ -mcl_core -mcl_sounds -mcl_particles -doc? diff --git a/mods/ITEMS/mcl_torches/description.txt b/mods/ITEMS/mcl_torches/description.txt deleted file mode 100644 index 1ce04a366..000000000 --- a/mods/ITEMS/mcl_torches/description.txt +++ /dev/null @@ -1 +0,0 @@ -Mesh-based torches - three dimensional torches for minetest. diff --git a/mods/ITEMS/mcl_torches/init.lua b/mods/ITEMS/mcl_torches/init.lua index 179308358..6b6ebcae9 100644 --- a/mods/ITEMS/mcl_torches/init.lua +++ b/mods/ITEMS/mcl_torches/init.lua @@ -1,336 +1,6 @@ -local S = minetest.get_translator("mcl_torches") -local LIGHT_TORCH = minetest.LIGHT_MAX - -local spawn_flames_floor = function(pos) - -- Flames - mcl_particles.add_node_particlespawner(pos, { - amount = 8, - time = 0, - minpos = vector.add(pos, { x = -0.1, y = 0.05, z = -0.1 }), - maxpos = vector.add(pos, { x = 0.1, y = 0.15, z = 0.1 }), - minvel = { x = -0.01, y = 0, z = -0.01 }, - maxvel = { x = 0.01, y = 0.1, z = 0.01 }, - minexptime = 0.3, - maxexptime = 0.6, - minsize = 0.7, - maxsize = 2, - texture = "mcl_particles_flame.png", - glow = LIGHT_TORCH, - }, "low") - -- Smoke - mcl_particles.add_node_particlespawner(pos, { - amount = 0.5, - time = 0, - minpos = vector.add(pos, { x = -1/16, y = 0.04, z = -1/16 }), - maxpos = vector.add(pos, { x = -1/16, y = 0.06, z = -1/16 }), - minvel = { x = 0, y = 0.5, z = 0 }, - maxvel = { x = 0, y = 0.6, z = 0 }, - minexptime = 2.0, - maxexptime = 2.0, - minsize = 1.5, - maxsize = 1.5, - texture = "mcl_particles_smoke_anim.png", - animation = { - type = "vertical_frames", - aspect_w = 8, - aspect_h = 8, - length = 2.05, - }, - }, "medium") -end - -local spawn_flames_wall = function(pos, param2) - local minrelpos, maxrelpos - local dir = minetest.wallmounted_to_dir(param2) - if dir.x < 0 then - minrelpos = { x = -0.38, y = 0.04, z = -0.1 } - maxrelpos = { x = -0.2, y = 0.14, z = 0.1 } - elseif dir.x > 0 then - minrelpos = { x = 0.2, y = 0.04, z = -0.1 } - maxrelpos = { x = 0.38, y = 0.14, z = 0.1 } - elseif dir.z < 0 then - minrelpos = { x = -0.1, y = 0.04, z = -0.38 } - maxrelpos = { x = 0.1, y = 0.14, z = -0.2 } - elseif dir.z > 0 then - minrelpos = { x = -0.1, y = 0.04, z = 0.2 } - maxrelpos = { x = 0.1, y = 0.14, z = 0.38 } - else - return - end - -- Flames - mcl_particles.add_node_particlespawner(pos, { - amount = 8, - time = 0, - minpos = vector.add(pos, minrelpos), - maxpos = vector.add(pos, maxrelpos), - minvel = { x = -0.01, y = 0, z = -0.01 }, - maxvel = { x = 0.01, y = 0.1, z = 0.01 }, - minexptime = 0.3, - maxexptime = 0.6, - minsize = 0.7, - maxsize = 2, - texture = "mcl_particles_flame.png", - glow = LIGHT_TORCH, - }, "low") - -- Smoke - mcl_particles.add_node_particlespawner(pos, { - amount = 0.5, - time = 0, - minpos = vector.add(pos, minrelpos), - maxpos = vector.add(pos, maxrelpos), - minvel = { x = 0, y = 0.5, z = 0 }, - maxvel = { x = 0, y = 0.6, z = 0 }, - minexptime = 2.0, - maxexptime = 2.0, - minsize = 1.5, - maxsize = 1.5, - texture = "mcl_particles_smoke_anim.png", - animation = { - type = "vertical_frames", - aspect_w = 8, - aspect_h = 8, - length = 2.05, - }, - }, "medium") -end - -local remove_flames = function(pos) - mcl_particles.delete_node_particlespawners(pos) -end - --- --- 3d torch part --- - --- Check if placement at given node is allowed -local function check_placement_allowed(node, wdir) - -- Torch placement rules: Disallow placement on some nodes. General rule: Solid, opaque, full cube collision box nodes are allowed. - -- Special allowed nodes: - -- * soul sand - -- * mob spawner - -- * chorus flower - -- * glass, barrier, ice - -- * Fence, wall, end portal frame with ender eye: Only on top - -- * Slab, stairs: Only on top if upside down - - -- Special forbidden nodes: - -- * Piston, sticky piston - local def = minetest.registered_nodes[node.name] - if not def then - return false - -- No ceiling torches - elseif wdir == 0 then - return false - elseif not def.buildable_to then - if node.name ~= "mcl_core:ice" and node.name ~= "mcl_nether:soul_sand" and node.name ~= "mcl_mobspawners:spawner" and node.name ~= "mcl_core:barrier" and node.name ~= "mcl_end:chorus_flower" and node.name ~= "mcl_end:chorus_flower_dead" and (not def.groups.glass) and - ((not def.groups.solid) or (not def.groups.opaque)) then - -- Only allow top placement on these nodes - if node.name == "mcl_end:dragon_egg" or node.name == "mcl_portals:end_portal_frame_eye" or def.groups.fence == 1 or def.groups.wall or def.groups.slab_top == 1 or def.groups.anvil or def.groups.pane or (def.groups.stair == 1 and minetest.facedir_to_dir(node.param2).y ~= 0) then - if wdir ~= 1 then - return false - end - else - return false - end - elseif minetest.get_item_group(node.name, "piston") >= 1 then - return false - end - end - return true -end - mcl_torches = {} -mcl_torches.register_torch = function(substring, description, doc_items_longdesc, doc_items_usagehelp, icon, mesh_floor, mesh_wall, tiles, light, groups, sounds, moredef, moredef_floor, moredef_wall) - local itemstring = minetest.get_current_modname()..":"..substring - local itemstring_wall = minetest.get_current_modname()..":"..substring.."_wall" - - if light == nil then light = minetest.LIGHT_MAX end - if mesh_floor == nil then mesh_floor = "mcl_torches_torch_floor.obj" end - if mesh_wall == nil then mesh_wall = "mcl_torches_torch_wall.obj" end - if groups == nil then groups = {} end - - groups.attached_node = 1 - groups.torch = 1 - groups.dig_by_water = 1 - groups.destroy_by_lava_flow = 1 - groups.dig_by_piston = 1 - - local floordef = { - description = description, - _doc_items_longdesc = doc_items_longdesc, - _doc_items_usagehelp = doc_items_usagehelp, - drawtype = "mesh", - mesh = mesh_floor, - inventory_image = icon, - wield_image = icon, - tiles = tiles, - paramtype = "light", - paramtype2 = "wallmounted", - sunlight_propagates = true, - is_ground_content = false, - walkable = false, - liquids_pointable = false, - light_source = light, - groups = groups, - drop = itemstring, - selection_box = { - type = "wallmounted", - wall_top = {-1/16, -1/16, -1/16, 1/16, 0.5, 1/16}, - wall_bottom = {-1/16, -0.5, -1/16, 1/16, 1/16, 1/16}, - }, - sounds = sounds, - node_placement_prediction = "", - on_place = function(itemstack, placer, pointed_thing) - if pointed_thing.type ~= "node" then - -- no interaction possible with entities, for now. - return itemstack - end - - local under = pointed_thing.under - local node = minetest.get_node(under) - local def = minetest.registered_nodes[node.name] - if not def then return itemstack end - - -- Call on_rightclick if the pointed node defines it - if placer and not placer:get_player_control().sneak then - if minetest.registered_nodes[node.name] and minetest.registered_nodes[node.name].on_rightclick then - return minetest.registered_nodes[node.name].on_rightclick(under, node, placer, itemstack) or itemstack - end - end - - local above = pointed_thing.above - local wdir = minetest.dir_to_wallmounted({x = under.x - above.x, y = under.y - above.y, z = under.z - above.z}) - - if check_placement_allowed(node, wdir) == false then - return itemstack - end - - local itemstring = itemstack:get_name() - local fakestack = ItemStack(itemstack) - local idef = fakestack:get_definition() - local retval - - if wdir == 1 then - retval = fakestack:set_name(itemstring) - else - retval = fakestack:set_name(itemstring_wall) - end - if not retval then - return itemstack - end - - local success - itemstack, success = minetest.item_place(fakestack, placer, pointed_thing, wdir) - itemstack:set_name(itemstring) - - if success and idef.sounds and idef.sounds.place then - minetest.sound_play(idef.sounds.place, {pos=under, gain=1}, true) - end - return itemstack - end, - on_rotate = false, - } - if moredef ~= nil then - for k,v in pairs(moredef) do - floordef[k] = v - end - end - if moredef_floor ~= nil then - for k,v in pairs(moredef_floor) do - floordef[k] = v - end - end - minetest.register_node(itemstring, floordef) - - local groups_wall = table.copy(groups) - groups_wall.torch = 2 - - local walldef = { - drawtype = "mesh", - mesh = mesh_wall, - tiles = tiles, - paramtype = "light", - paramtype2 = "wallmounted", - sunlight_propagates = true, - is_ground_content = false, - walkable = false, - light_source = light, - groups = groups_wall, - drop = itemstring, - selection_box = { - type = "wallmounted", - wall_top = {-0.1, -0.1, -0.1, 0.1, 0.5, 0.1}, - wall_bottom = {-0.1, -0.5, -0.1, 0.1, 0.1, 0.1}, - wall_side = {-0.5, -0.5, -0.1, -0.2, 0.1, 0.1}, - }, - sounds = sounds, - on_rotate = false, - } - if moredef ~= nil then - for k,v in pairs(moredef) do - walldef[k] = v - end - end - if moredef_wall ~= nil then - for k,v in pairs(moredef_wall) do - walldef[k] = v - end - end - minetest.register_node(itemstring_wall, walldef) - - - -- Add entry alias for the Help - if minetest.get_modpath("doc") then - doc.add_entry_alias("nodes", itemstring, "nodes", itemstring_wall) - end - -end - -mcl_torches.register_torch("torch", - S("Torch"), - S("Torches are light sources which can be placed at the side or on the top of most blocks."), - nil, - "default_torch_on_floor.png", - "mcl_torches_torch_floor.obj", "mcl_torches_torch_wall.obj", - {{ - name = "default_torch_on_floor_animated.png", - animation = {type = "vertical_frames", aspect_w = 16, aspect_h = 16, length = 3.3} - }}, - LIGHT_TORCH, - {dig_immediate=3, torch=1, deco_block=1}, - mcl_sounds.node_sound_wood_defaults(), - {_doc_items_hidden = false, - on_destruct = function(pos) - remove_flames(pos) - end}, - {on_construct = function(pos) - spawn_flames_floor(pos) - end}, - {on_construct = function(pos) - local node = minetest.get_node(pos) - spawn_flames_wall(pos, node.param2) - end}) - -minetest.register_craft({ - output = "mcl_torches:torch 4", - recipe = { - { "group:coal" }, - { "mcl_core:stick" }, - } -}) - -minetest.register_lbm({ - label = "Torch flame particles", - name = "mcl_torches:flames", - nodenames = {"mcl_torches:torch", "mcl_torches:torch_wall"}, - run_at_every_load = true, - action = function(pos, node) - if node.name == "mcl_torches:torch" then - spawn_flames_floor(pos) - elseif node.name == "mcl_torches:torch_wall" then - spawn_flames_wall(pos, node.param2) - end - end, -}) +local modpath = minetest.get_modpath(minetest.get_current_modname()) +dofile(modpath .. "/api.lua") +dofile(modpath .. "/register.lua") diff --git a/mods/ITEMS/mcl_torches/locale/mcl_torches.pl.tr b/mods/ITEMS/mcl_torches/locale/mcl_torches.pl.tr new file mode 100644 index 000000000..ae1c118ae --- /dev/null +++ b/mods/ITEMS/mcl_torches/locale/mcl_torches.pl.tr @@ -0,0 +1,3 @@ +# textdomain: mcl_torches +Torch=Pochodnia +Torches are light sources which can be placed at the side or on the top of most blocks.=Pochodnie są źródłami światła, które może zostać postawione na boku lub na górze większości bloków. diff --git a/mods/ITEMS/mcl_torches/mod.conf b/mods/ITEMS/mcl_torches/mod.conf index ec9cfb624..b383df2a7 100644 --- a/mods/ITEMS/mcl_torches/mod.conf +++ b/mods/ITEMS/mcl_torches/mod.conf @@ -1 +1,4 @@ name = mcl_torches +description = Mesh-based torches - three dimensional torches for minetest. +depends = mcl_core, mcl_sounds, mcl_particles +optional_depends = doc diff --git a/mods/ITEMS/mcl_torches/register.lua b/mods/ITEMS/mcl_torches/register.lua new file mode 100644 index 000000000..f8c34e6b5 --- /dev/null +++ b/mods/ITEMS/mcl_torches/register.lua @@ -0,0 +1,27 @@ +local S = minetest.get_translator(minetest.get_current_modname()) + +mcl_torches.register_torch({ + name = "torch", + description = S("Torch"), + doc_items_longdesc = S("Torches are light sources which can be placed at the side or on the top of most blocks."), + doc_items_hidden = false, + icon = "default_torch_on_floor.png", + tiles = {{ + name = "default_torch_on_floor_animated.png", + animation = {type = "vertical_frames", aspect_w = 16, aspect_h = 16, length = 3.3} + }}, + -- this is 15 in minecraft + light = 14, + groups = {dig_immediate = 3, deco_block = 1}, + sounds = mcl_sounds.node_sound_wood_defaults(), + particles = true, +}) + +minetest.register_craft({ + output = "mcl_torches:torch 4", + recipe = { + {"group:coal"}, + {"mcl_core:stick"}, + } +}) + diff --git a/mods/ITEMS/mcl_torches/screenshot.png b/mods/ITEMS/mcl_torches/screenshot.png deleted file mode 100644 index 5c9f85919fd676fc32d3333bcba43c218353785a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 36243 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 diff --git a/mods/ITEMS/mcl_totems/depends.txt b/mods/ITEMS/mcl_totems/depends.txt deleted file mode 100644 index 9b7650e03..000000000 --- a/mods/ITEMS/mcl_totems/depends.txt +++ /dev/null @@ -1 +0,0 @@ -mobs_mc diff --git a/mods/ITEMS/mcl_totems/init.lua b/mods/ITEMS/mcl_totems/init.lua index b4ec3eb8d..499d7362d 100644 --- a/mods/ITEMS/mcl_totems/init.lua +++ b/mods/ITEMS/mcl_totems/init.lua @@ -1,5 +1,58 @@ --- Node is currently defined in mobs_mc. --- TODO: Add full item definition here when status effects become a thing. +local hud_totem = {} --- Add group for Creative Mode. -minetest.override_item("mobs_mc:totem", {groups = { combat_item=1}}) +minetest.register_on_leaveplayer(function(player) + hud_totem[player] = nil +end) + +-- Save the player from death when holding totem of undying in hand +mcl_damage.register_modifier(function(obj, damage, reason) + if obj:is_player() then + local hp = obj:get_hp() + if hp - damage <= 0 then + local wield = obj:get_wielded_item() + if wield:get_name() == "mobs_mc:totem" then + local ppos = obj:get_pos() + local pnname = minetest.get_node(ppos).name + -- Some exceptions when _not_ to save the player + for n=1, #mobs_mc.misc.totem_fail_nodes do + if pnname == mobs_mc.misc.totem_fail_nodes[n] then + return + end + end + -- Reset breath as well + if obj:get_breath() < 11 then + obj:set_breath(10) + end + + if not minetest.is_creative_enabled(obj:get_player_name()) then + wield:take_item() + obj:set_wielded_item(wield) + end + + -- Effects + minetest.sound_play({name = "mcl_totems_totem", gain=1}, {pos=ppos, max_hear_distance=16}, true) + + -- Big totem overlay + if not hud_totem[obj] then + hud_totem[obj] = obj:hud_add({ + hud_elem_type = "image", + text = "mcl_totems_totem.png", + position = { x=0.5, y=1 }, + scale = { x=17, y=17 }, + offset = { x=0, y=-178 }, + z_index = 100, + }) + minetest.after(3, function() + if obj:is_player() then + obj:hud_remove(hud_totem[obj]) + hud_totem[obj] = nil + end + end) + end + + -- Set HP to exactly 1 + return hp - 1 + end + end + end +end, 1000) diff --git a/mods/ITEMS/mcl_totems/mod.conf b/mods/ITEMS/mcl_totems/mod.conf new file mode 100644 index 000000000..4ba94defc --- /dev/null +++ b/mods/ITEMS/mcl_totems/mod.conf @@ -0,0 +1,2 @@ +name = mcl_totems +depends = mobs_mc, mcl_damage diff --git a/mods/ITEMS/mcl_walls/depends.txt b/mods/ITEMS/mcl_walls/depends.txt deleted file mode 100644 index de1f8a39b..000000000 --- a/mods/ITEMS/mcl_walls/depends.txt +++ /dev/null @@ -1,6 +0,0 @@ -mcl_core -mcl_end -mcl_ocean -mcl_nether -mcl_sounds -doc? diff --git a/mods/ITEMS/mcl_walls/init.lua b/mods/ITEMS/mcl_walls/init.lua index 5704309db..14b512ffd 100644 --- a/mods/ITEMS/mcl_walls/init.lua +++ b/mods/ITEMS/mcl_walls/init.lua @@ -1,4 +1,6 @@ -local S = minetest.get_translator("mcl_walls") +local modname = minetest.get_current_modname() +local modpath = minetest.get_modpath(modname) +local S = minetest.get_translator(modname) mcl_walls = {} @@ -29,7 +31,7 @@ local function update_wall(pos) local colonpos = thisnode.name:find(":") local underscorepos local itemname, basename, modname - if colonpos ~= nil then + if colonpos then itemname = thisnode.name:sub(colonpos+1) modname = thisnode.name:sub(1, colonpos-1) end @@ -151,12 +153,13 @@ function mcl_walls.register_wall(nodename, description, source, tiles, inventory minetest.register_node(nodename.."_"..i, { collision_box = { - type = 'fixed', + type = "fixed", fixed = {-4/16, -0.5, -4/16, 4/16, 1, 4/16} }, drawtype = "nodebox", is_ground_content = false, tiles = tiles, + use_texture_alpha = minetest.features.use_texture_alpha_string_modes and "opaque" or false, paramtype = "light", sunlight_propagates = true, groups = internal_groups, @@ -179,10 +182,11 @@ function mcl_walls.register_wall(nodename, description, source, tiles, inventory minetest.register_node(nodename.."_16", { drawtype = "nodebox", collision_box = { - type = 'fixed', + type = "fixed", fixed = {-4/16, -0.5, -4/16, 4/16, 1, 4/16} }, tiles = tiles, + use_texture_alpha = minetest.features.use_texture_alpha_string_modes and "opaque" or false, paramtype = "light", sunlight_propagates = true, is_ground_content = false, @@ -204,10 +208,11 @@ function mcl_walls.register_wall(nodename, description, source, tiles, inventory minetest.register_node(nodename.."_21", { drawtype = "nodebox", collision_box = { - type = 'fixed', + type = "fixed", fixed = {-4/16, -0.5, -4/16, 4/16, 1, 4/16} }, tiles = tiles, + use_texture_alpha = minetest.features.use_texture_alpha_string_modes and "opaque" or false, paramtype = "light", sunlight_propagates = true, is_ground_content = false, @@ -235,6 +240,7 @@ function mcl_walls.register_wall(nodename, description, source, tiles, inventory is_ground_content = false, groups = main_node_groups, tiles = tiles, + use_texture_alpha = minetest.features.use_texture_alpha_string_modes and "opaque" or false, inventory_image = inventory_image, stack_max = 64, drawtype = "nodebox", @@ -243,7 +249,7 @@ function mcl_walls.register_wall(nodename, description, source, tiles, inventory fixed = pillar }, collision_box = { - type = 'fixed', + type = "fixed", fixed = {-4/16, -0.5, -4/16, 4/16, 1, 4/16} }, collisionbox = {-0.2, 0, -0.2, 0.2, 1.4, 0.2}, @@ -263,7 +269,7 @@ function mcl_walls.register_wall(nodename, description, source, tiles, inventory end end -dofile(minetest.get_modpath("mcl_walls") .. "/register.lua") +dofile(modpath.."/register.lua") minetest.register_on_placenode(update_wall_global) minetest.register_on_dignode(update_wall_global) diff --git a/mods/ITEMS/mcl_walls/locale/mcl_walls.fr.tr b/mods/ITEMS/mcl_walls/locale/mcl_walls.fr.tr index e4bbfd0dd..445c8f7b3 100644 --- a/mods/ITEMS/mcl_walls/locale/mcl_walls.fr.tr +++ b/mods/ITEMS/mcl_walls/locale/mcl_walls.fr.tr @@ -3,7 +3,7 @@ A piece of wall. It cannot be jumped over with a simple jump. When multiple of t Cobblestone Wall=Muret de Pierres Mossy Cobblestone Wall=Muret de Pierres Moussu Andesite Wall=Muret d'Andésite -Granite Wall=Muret de Granite +Granite Wall=Muret de Granit Diorite Wall=Muret de Diorite Brick Wall=Muret en Brique Sandstone Wall=Muret de Grès diff --git a/mods/ITEMS/mcl_walls/locale/mcl_walls.pl.tr b/mods/ITEMS/mcl_walls/locale/mcl_walls.pl.tr new file mode 100644 index 000000000..9d75eb18d --- /dev/null +++ b/mods/ITEMS/mcl_walls/locale/mcl_walls.pl.tr @@ -0,0 +1,17 @@ +# textdomain: mcl_walls +A piece of wall. It cannot be jumped over with a simple jump. When multiple of these are placed to next to each other, they will automatically build a nice wall structure.=Kawałek ściany. Nie może być przeskoczony pojedynczym skokiem. Gdy kilka z nich jest położonych obok siebie, automatycznie połączą się one w ścianę. +Cobblestone Wall=Ściana z brukowca +Mossy Cobblestone Wall=Ściana z zamszonego brukowca +Andesite Wall=Andezytowa ściana +Granite Wall=Granitowa ściana +Diorite Wall=Diorytowa ściana +Brick Wall=Ceglana ściana +Sandstone Wall=Ściana z piaskowca +Red Sandstone Wall=Ściana z czerwienitu +Stone Brick Wall=Ściana z ceglanego kamienia +Mossy Stone Brick Wall=Ściana z zamszonego ceglanego kamienia +Prismarine Wall=Pryzmarynowa ściana +End Stone Brick Wall=Ściana z ceglanego kamienia Kresu +Nether Brick Wall=Ściana z Netherowej cegły +Red Nether Brick Wall=Ściana z czerwonej Netherowej cegły + diff --git a/mods/ITEMS/mcl_walls/mod.conf b/mods/ITEMS/mcl_walls/mod.conf new file mode 100644 index 000000000..8839312de --- /dev/null +++ b/mods/ITEMS/mcl_walls/mod.conf @@ -0,0 +1,3 @@ +name = mcl_walls +depends = mcl_core, mcl_end, mcl_ocean, mcl_nether, mcl_sounds +optional_depends = doc diff --git a/mods/ITEMS/mcl_walls/register.lua b/mods/ITEMS/mcl_walls/register.lua index 0ccefd62f..483af493e 100644 --- a/mods/ITEMS/mcl_walls/register.lua +++ b/mods/ITEMS/mcl_walls/register.lua @@ -1,4 +1,4 @@ -local S = minetest.get_translator("mcl_walls") +local S = minetest.get_translator(minetest.get_current_modname()) mcl_walls.register_wall("mcl_walls:cobble", S("Cobblestone Wall"), "mcl_core:cobble", {"mcl_walls_cobble_wall_top.png", "default_cobble.png", "mcl_walls_cobble_wall_side.png"}) mcl_walls.register_wall("mcl_walls:mossycobble", S("Mossy Cobblestone Wall"), "mcl_core:mossycobble", {"mcl_walls_cobble_mossy_wall_top.png", "default_mossycobble.png", "mcl_walls_cobble_mossy_wall_side.png"}) diff --git a/mods/ITEMS/mcl_wool/depends.txt b/mods/ITEMS/mcl_wool/depends.txt deleted file mode 100644 index 9699080ad..000000000 --- a/mods/ITEMS/mcl_wool/depends.txt +++ /dev/null @@ -1,2 +0,0 @@ -mcl_sounds -doc? diff --git a/mods/ITEMS/mcl_wool/init.lua b/mods/ITEMS/mcl_wool/init.lua index 22648efc9..8fb4f51ec 100644 --- a/mods/ITEMS/mcl_wool/init.lua +++ b/mods/ITEMS/mcl_wool/init.lua @@ -1,4 +1,4 @@ -local S = minetest.get_translator("mcl_wool") +local S = minetest.get_translator(minetest.get_current_modname()) local mod_doc = minetest.get_modpath("doc") -- minetest/wool/init.lua @@ -99,13 +99,13 @@ for _, row in ipairs(wool.dyes) do -- Crafting from dye and white wool minetest.register_craft({ type = "shapeless", - output = 'mcl_wool:'..name, - recipe = {"mcl_dye:"..dye, 'mcl_wool:white'}, + output = "mcl_wool:"..name, + recipe = {"mcl_dye:"..dye, "mcl_wool:white"}, }) end minetest.register_craft({ - output = 'mcl_wool:'..name..'_carpet 3', - recipe = {{'mcl_wool:'..name, 'mcl_wool:'..name}}, + output = "mcl_wool:"..name.."_carpet 3", + recipe = {{"mcl_wool:"..name, "mcl_wool:"..name}}, }) end diff --git a/mods/ITEMS/mcl_wool/locale/mcl_wool.de.tr b/mods/ITEMS/mcl_wool/locale/mcl_wool.de.tr index 5b979d51b..9f67a52fb 100644 --- a/mods/ITEMS/mcl_wool/locale/mcl_wool.de.tr +++ b/mods/ITEMS/mcl_wool/locale/mcl_wool.de.tr @@ -22,7 +22,7 @@ Blue Carpet=Blauer Teppich Magenta Wool=Magenta Wolle Magenta Carpet=Magenta Teppich Orange Wool=Orange Wolle -Orange Carpet=Orange Teppich +Orange Carpet=Oranger Teppich Purple Wool=Violette Wolle Purple Carpet=Violetter Teppich Brown Wool=Braune Wolle diff --git a/mods/ITEMS/mcl_wool/locale/mcl_wool.pl.tr b/mods/ITEMS/mcl_wool/locale/mcl_wool.pl.tr new file mode 100644 index 000000000..ac92171d1 --- /dev/null +++ b/mods/ITEMS/mcl_wool/locale/mcl_wool.pl.tr @@ -0,0 +1,37 @@ +# textdomain: mcl_wool +Wool=Wełna +Carpet=Dywan +White Wool=Biała wełna +White Carpet=Biały dywan +Grey Wool=Szara wełna +Grey Carpet=Szary dywan +Light Grey Wool=Jasnoszara wełna +Light Grey Carpet=Jasnoszary dywan +Black Wool=Czarna wełna +Black Carpet=Czarny dywan +Red Wool=Czerwona wełna +Red Carpet=Czerwony dywan +Yellow Wool=Żółta wełna +Yellow Carpet=Żółty dywan +Green Wool=Zielona wełna +Green Carpet=Zielony dywan +Cyan Wool=Błękitna wełna +Cyan Carpet=Błękitny dywan +Blue Wool=Niebieska wełna +Blue Carpet=Niebieski dywan +Magenta Wool=Karmazynowa wełna +Magenta Carpet=Karmazynowy dywan +Orange Wool=Pomarańczowa wełna +Orange Carpet=Pomarańczowy dywan +Purple Wool=Fioletowa wełna +Purple Carpet=Fioletowy dywan +Brown Wool=Brązowa wełna +Brown Carpet=Brązowy dywan +Pink Wool=Różowa wełna +Pink Carpet=Różowy dywan +Lime Wool=Jasnozielona wełna +Lime Carpet=Jasnozielony dywan +Light Blue Wool=Jasnoniebieska wełna +Light Blue Carpet=Jasnoniebieski dywan +Wool is a decorative block which comes in many different colors.=Wełna jest blokiem dekoracyjnym, który może mieć wiele różnych kolorów. +Carpets are thin floor covers which come in many different colors.=Dywany są cienkimi pokrywami na podłogi, które mogą mieć wiele różnych kolorów. diff --git a/mods/ITEMS/mcl_wool/mod.conf b/mods/ITEMS/mcl_wool/mod.conf index 2a4f86800..b7e9a4dab 100644 --- a/mods/ITEMS/mcl_wool/mod.conf +++ b/mods/ITEMS/mcl_wool/mod.conf @@ -1 +1,3 @@ name = mcl_wool +depends = mcl_sounds +optional_depends = doc diff --git a/mods/ITEMS/mclx_core/depends.txt b/mods/ITEMS/mclx_core/depends.txt deleted file mode 100644 index 870d9cb09..000000000 --- a/mods/ITEMS/mclx_core/depends.txt +++ /dev/null @@ -1,2 +0,0 @@ -mcl_core -doc? diff --git a/mods/ITEMS/mclx_core/description.txt b/mods/ITEMS/mclx_core/description.txt deleted file mode 100644 index 422e6da57..000000000 --- a/mods/ITEMS/mclx_core/description.txt +++ /dev/null @@ -1 +0,0 @@ -Core items not found in Minecraft diff --git a/mods/ITEMS/mclx_core/init.lua b/mods/ITEMS/mclx_core/init.lua index bc17e0075..4bb40184a 100644 --- a/mods/ITEMS/mclx_core/init.lua +++ b/mods/ITEMS/mclx_core/init.lua @@ -1,4 +1,4 @@ -local S = minetest.get_translator("mclx_core") +local S = minetest.get_translator(minetest.get_current_modname()) -- Liquids: River Water diff --git a/mods/ITEMS/mclx_core/locale/mclx_core.pl.tr b/mods/ITEMS/mclx_core/locale/mclx_core.pl.tr new file mode 100644 index 000000000..757507065 --- /dev/null +++ b/mods/ITEMS/mclx_core/locale/mclx_core.pl.tr @@ -0,0 +1,5 @@ +# textdomain: mclx_core +River Water Source=Źródło wody rzecznej +River water has the same properties as water, but has a reduced flowing distance and is not renewable.=Woda rzeczna ma takie same własności jak woda, ale ma zmniejszony zasięg płynięcia i nie jest odnawialna. +River Water=Woda rzeczna +Flowing River Water=Płynąca woda rzeczna diff --git a/mods/ITEMS/mclx_core/mod.conf b/mods/ITEMS/mclx_core/mod.conf index 235cf6d3f..62e8d5fb3 100644 --- a/mods/ITEMS/mclx_core/mod.conf +++ b/mods/ITEMS/mclx_core/mod.conf @@ -1 +1,4 @@ name = mclx_core +description = Core items not found in Minecraft +depends = mcl_core +optional_depends = doc diff --git a/mods/ITEMS/mclx_fences/depends.txt b/mods/ITEMS/mclx_fences/depends.txt deleted file mode 100644 index 640669f2a..000000000 --- a/mods/ITEMS/mclx_fences/depends.txt +++ /dev/null @@ -1 +0,0 @@ -mcl_fences diff --git a/mods/ITEMS/mclx_fences/description.txt b/mods/ITEMS/mclx_fences/description.txt deleted file mode 100644 index 57005b4cf..000000000 --- a/mods/ITEMS/mclx_fences/description.txt +++ /dev/null @@ -1 +0,0 @@ -Additional fences and fence gates diff --git a/mods/ITEMS/mclx_fences/init.lua b/mods/ITEMS/mclx_fences/init.lua index 08c3d91ac..e78c7ef7f 100644 --- a/mods/ITEMS/mclx_fences/init.lua +++ b/mods/ITEMS/mclx_fences/init.lua @@ -1,4 +1,4 @@ -local S = minetest.get_translator("mclx_fences") +local S = minetest.get_translator(minetest.get_current_modname()) -- Red Nether Brick Fence @@ -25,7 +25,7 @@ mcl_fences.register_fence_gate( -- Crafting minetest.register_craft({ - output = 'mclx_fences:red_nether_brick_fence 6', + output = "mclx_fences:red_nether_brick_fence 6", recipe = { {"mcl_nether:red_nether_brick", "mcl_nether:netherbrick", "mcl_nether:red_nether_brick"}, {"mcl_nether:red_nether_brick", "mcl_nether:netherbrick", "mcl_nether:red_nether_brick"}, @@ -33,14 +33,14 @@ minetest.register_craft({ }) minetest.register_craft({ - output = 'mclx_fences:red_nether_brick_fence_gate', + output = "mclx_fences:red_nether_brick_fence_gate", recipe = { {"mcl_nether:nether_wart_item", "mcl_nether:red_nether_brick", "mcl_nether:netherbrick"}, {"mcl_nether:netherbrick", "mcl_nether:red_nether_brick", "mcl_nether:nether_wart_item"}, } }) minetest.register_craft({ - output = 'mclx_fences:red_nether_brick_fence_gate', + output = "mclx_fences:red_nether_brick_fence_gate", recipe = { {"mcl_nether:netherbrick", "mcl_nether:red_nether_brick", "mcl_nether:nether_wart_item"}, {"mcl_nether:nether_wart_item", "mcl_nether:red_nether_brick", "mcl_nether:netherbrick"}, @@ -48,7 +48,7 @@ minetest.register_craft({ }) minetest.register_craft({ - output = 'mclx_fences:nether_brick_fence_gate 2', + output = "mclx_fences:nether_brick_fence_gate 2", recipe = { {"mcl_nether:netherbrick", "mcl_nether:nether_brick", "mcl_nether:netherbrick"}, {"mcl_nether:netherbrick", "mcl_nether:nether_brick", "mcl_nether:netherbrick"}, diff --git a/mods/ITEMS/mclx_fences/locale/mclx_fences.pl.tr b/mods/ITEMS/mclx_fences/locale/mclx_fences.pl.tr new file mode 100644 index 000000000..ecdd84562 --- /dev/null +++ b/mods/ITEMS/mclx_fences/locale/mclx_fences.pl.tr @@ -0,0 +1,4 @@ +# textdomain: mclx_fences +Red Nether Brick Fence=Płot z czerwonej netherowej cegły +Red Nether Brick Fence Gate=Furtka z czerwonej netherowej cegły +Nether Brick Fence Gate=Furtka z netherowej cegły diff --git a/mods/ITEMS/mclx_fences/mod.conf b/mods/ITEMS/mclx_fences/mod.conf index b53158aad..a4795159d 100644 --- a/mods/ITEMS/mclx_fences/mod.conf +++ b/mods/ITEMS/mclx_fences/mod.conf @@ -1 +1,3 @@ name = mclx_fences +description = Additional fences and fence gates +depends = mcl_fences diff --git a/mods/ITEMS/mclx_stairs/depends.txt b/mods/ITEMS/mclx_stairs/depends.txt deleted file mode 100644 index 49805c174..000000000 --- a/mods/ITEMS/mclx_stairs/depends.txt +++ /dev/null @@ -1,8 +0,0 @@ -mcl_ocean -mcl_core -mcl_sounds -mcl_nether -mcl_end -mcl_colorblocks -mcl_stairs -doc? diff --git a/mods/ITEMS/mclx_stairs/description.txt b/mods/ITEMS/mclx_stairs/description.txt deleted file mode 100644 index 896be59b9..000000000 --- a/mods/ITEMS/mclx_stairs/description.txt +++ /dev/null @@ -1 +0,0 @@ -Additional stairs and slabs not found in Minecraft 1.11 diff --git a/mods/ITEMS/mclx_stairs/init.lua b/mods/ITEMS/mclx_stairs/init.lua index 26ab5c4b5..effa87f13 100644 --- a/mods/ITEMS/mclx_stairs/init.lua +++ b/mods/ITEMS/mclx_stairs/init.lua @@ -1,4 +1,4 @@ -local S = minetest.get_translator("mclx_stairs") +local S = minetest.get_translator(minetest.get_current_modname()) local doc_mod = minetest.get_modpath("doc") diff --git a/mods/ITEMS/mclx_stairs/locale/mclx_stairs.pl.tr b/mods/ITEMS/mclx_stairs/locale/mclx_stairs.pl.tr new file mode 100644 index 000000000..8a4c4d5e2 --- /dev/null +++ b/mods/ITEMS/mclx_stairs/locale/mclx_stairs.pl.tr @@ -0,0 +1,82 @@ +# textdomain: mclx_stairs +Oak Bark Stairs=Schody z dębowej kory +Oak Bark Slab=Płyta z dębowej kory +Double Oak Bark Slab=Podwójna płyta z dębowej kory +Acacia Bark Stairs=Schody z akacjowej kory +Acacia Bark Slab=Płyta z akacjowej kory +Double Acacia Bark Slab=Podwójna płyta z akacjowej kory +Spruce Bark Stairs=Schody ze świerkowej kory +Spruce Bark Slab=Płyta ze świerkowej kory +Double Spruce Bark Slab=Podwójna płyta ze świerkowej kory +Birch Bark Stairs=Schody z brzozowej kory +Birch Bark Slab=Płyta z brzozowej kory +Double Birch Bark Slab=Podwójna płyta z brzozowej kory +Jungle Bark Stairs=Schody z tropikalnej kory +Jungle Bark Slab=Płyta z tropikalnej kory +Double Jungle Bark Slab=Podwójna płyta z tropikalnej kory +Dark Oak Bark Stairs=Schody z ciemno-dębowej kory +Dark Oak Bark Slab=Płyta z ciemno-dębowej kory +Double Dark Oak Bark Slab=Podwójna płyta z ciemno-dębowej kory +Lapis Lazuli Slab=Płyta lazurytu +Double Lapis Lazuli Slab=Podwójna płyta lazurytu +Lapis Lazuli Stairs=Lazurytowe schody +Slab of Gold=Płyta złota +Double Slab of Gold=Podwójna płyta złota +Stairs of Gold=Złote schody +Slab of Iron=Płyta żelaza +Double Slab of Iron=Podwójna płyta żelaza +Stairs of Iron=Żelazne schody +Cracked Stone Brick Stairs=Schody z pękniętych ceglanych kamieni +Cracked Stone Brick Slab=Płyta z pękniętych ceglanych kamieni +Double Cracked Stone Brick Slab=Podwójna płyta z pękniętych ceglanych kamieni +White Concrete Stairs=Schody z białego cementu +White Concrete Slab=Płyta z białego cementu +Double White Concrete Slab=Podwójna płyta z białego cementu +Grey Concrete Stairs=Schody z szarego cementu +Grey Concrete Slab=Płyta z szarego cementu +Double Grey Concrete Slab=Podwójna płyta z szarego cementu +Light Grey Concrete Stairs=Schody z jasnoszarego cementu +Light Grey Concrete Slab=Płyta z jasnoszarego cementu +Double Light Grey Concrete Slab=Podwójna płyta z jasnoszarego cementu +Black Concrete Stairs=Schody z czarnego cementu +Black Concrete Slab=Płyta z czarnego cementu +Double Black Concrete Slab=Podwójna płyta z czarnego cementu +Red Concrete Stairs=Schody z czerwonego cementu +Red Concrete Slab=Płyta z czerwonego cementu +Double Red Concrete Slab=Podwójna płyta z czerwonego cementu +Yellow Concrete Stairs=Schody z żółtego cementu +Yellow Concrete Slab=Płyta z żółtego cementu +Double Yellow Concrete Slab=Podwójna płyta z żółtego cementu +Green Concrete Stairs=Schody z zielonego cementu +Green Concrete Slab=Płyta z zielonego cementu +Double Green Concrete Slab=Podwójna płyta z zielonego cementu +Cyan Concrete Stairs=Schody z błękitnego cementu +Cyan Concrete Slab=Płyta z błękitnego cementu +Double Cyan Concrete Slab=Podwójna płyta z błękitnego cementu +Blue Concrete Stairs=Schody z niebieskiego cementu +Blue Concrete Slab=Płyta z niebieskiego cementu +Double Blue Concrete Slab=Podwójna płyta z niebieskiego cementu +Magenta Concrete Stairs=Schody z karmazynowego cementu +Magenta Concrete Slab=Płyta z karmazynowego cementu +Double Magenta Concrete Slab=Podwójna płyta z karmazynowego cementu +Orange Concrete Stairs=Schody z pomarańczowego cementu +Orange Concrete Slab=Płyta z pomarańczowego cementu +Double Orange Concrete Slab=Podwójna płyta z pomarańczowego cementu +Purple Concrete Stairs=Schody z fioletowego cementu +Purple Concrete Slab=Płyta z fioletowego cementu +Double Purple Concrete Slab=Podwójna płyta z fioletowego cementu +Brown Concrete Stairs=Schody z brązowego cementu +Brown Concrete Slab=Płyta z brązowego cementu +Double Brown Concrete Slab=Podwójna płyta z brązowego cementu +Pink Concrete Stairs=Schody z różowego cementu +Pink Concrete Slab=Płyta z różowego cementu +Double Pink Concrete Slab=Podwójna płyta z różowego cementu +Lime Concrete Stairs=Schody z jasnozielonego cementu +Lime Concrete Slab=Płyta z jasnozielonego cementu +Double Lime Concrete Slab=Podwójna płyta z jasnozielonego cementu +Light Blue Concrete Stairs=Schody z jasnoniebieskiego cementu +Light Blue Concrete Slab=Płyta z jasnoniebieskiego cementu +Double Light Blue Concrete Slab=Podwójna płyta z jasnoniebieskiego cementu +Concrete Slab=płyta betonu +Double Concrete Slab=Podwójna płyta betonu +Concrete Stairs=Betonowe schody diff --git a/mods/ITEMS/mclx_stairs/mod.conf b/mods/ITEMS/mclx_stairs/mod.conf index 9d514a88c..b3aecd806 100644 --- a/mods/ITEMS/mclx_stairs/mod.conf +++ b/mods/ITEMS/mclx_stairs/mod.conf @@ -1 +1,4 @@ name = mclx_stairs +description = Additional stairs and slabs not found in Minecraft 1.11 +depends = mcl_ocean, mcl_core, mcl_sounds, mcl_nether, mcl_end, mcl_colorblocks, mcl_stairs +optional_depends = doc diff --git a/mods/ITEMS/screwdriver/init.lua b/mods/ITEMS/screwdriver/init.lua index ec4f1a2ad..baa4ff9c5 100644 --- a/mods/ITEMS/screwdriver/init.lua +++ b/mods/ITEMS/screwdriver/init.lua @@ -1,18 +1,21 @@ -local S = minetest.get_translator("screwdriver") +local S = minetest.get_translator(minetest.get_current_modname()) screwdriver = {} screwdriver.ROTATE_FACE = 1 screwdriver.ROTATE_AXIS = 2 -screwdriver.disallow = function(pos, node, user, mode, new_param2) + +function screwdriver.disallow(pos, node, user, mode, new_param2) return false end -screwdriver.rotate_simple = function(pos, node, user, mode, new_param2) + +function screwdriver.rotate_simple(pos, node, user, mode, new_param2) if mode ~= screwdriver.ROTATE_FACE then return false end end -screwdriver.rotate_3way = function(pos, node, user, mode, new_param2) + +function screwdriver.rotate_3way(pos, node, user, mode, new_param2) if mode == screwdriver.ROTATE_AXIS then if node.param2 == 0 then node.param2 = 6 @@ -71,7 +74,7 @@ local facedir_tbl = { }, } -screwdriver.rotate.facedir = function(pos, node, mode) +function screwdriver.rotate.facedir(pos, node, mode) local rotation = node.param2 % 32 -- get first 5 bits local other = node.param2 - rotation rotation = facedir_tbl[mode][rotation] or 0 @@ -82,10 +85,10 @@ screwdriver.rotate.colorfacedir = screwdriver.rotate.facedir local wallmounted_tbl = { [screwdriver.ROTATE_FACE] = {[2] = 5, [3] = 4, [4] = 2, [5] = 3, [1] = 0, [0] = 1}, - [screwdriver.ROTATE_AXIS] = {[2] = 5, [3] = 4, [4] = 2, [5] = 1, [1] = 0, [0] = 3} + [screwdriver.ROTATE_AXIS] = {[2] = 5, [3] = 4, [4] = 2, [5] = 1, [1] = 0, [0] = 3}, } -screwdriver.rotate.wallmounted = function(pos, node, mode) +function screwdriver.rotate.wallmounted(pos, node, mode) local rotation = node.param2 % 8 -- get first 3 bits local other = node.param2 - rotation rotation = wallmounted_tbl[mode][rotation] or 0 @@ -105,7 +108,7 @@ end screwdriver.rotate.colorwallmounted = screwdriver.rotate.wallmounted -- Handles rotation -screwdriver.handler = function(itemstack, user, pointed_thing, mode, uses) +function screwdriver.handler(itemstack, user, pointed_thing, mode, uses) if pointed_thing.type ~= "node" then return end @@ -157,7 +160,6 @@ screwdriver.handler = function(itemstack, user, pointed_thing, mode, uses) if should_rotate and new_param2 ~= node.param2 then node.param2 = new_param2 minetest.swap_node(pos, node) - minetest.check_for_falling(pos) if ndef.after_rotate then ndef.after_rotate(vector.new(pos)) @@ -187,6 +189,7 @@ minetest.register_tool("screwdriver:screwdriver", { end, }) +mcl_wip.register_wip_item("screwdriver:screwdriver") minetest.register_craft({ output = "screwdriver:screwdriver", diff --git a/mods/ITEMS/screwdriver/locale/screwdriver.de.tr b/mods/ITEMS/screwdriver/locale/screwdriver.de.tr index 35c99c05f..eaf44b0d6 100644 --- a/mods/ITEMS/screwdriver/locale/screwdriver.de.tr +++ b/mods/ITEMS/screwdriver/locale/screwdriver.de.tr @@ -1,2 +1,2 @@ # textdomain: screwdriver -Screwdriver=Schraubendreher +Screwdriver=Schraubenzieher diff --git a/mods/ITEMS/screwdriver/locale/screwdriver.pl.tr b/mods/ITEMS/screwdriver/locale/screwdriver.pl.tr new file mode 100644 index 000000000..b9adac135 --- /dev/null +++ b/mods/ITEMS/screwdriver/locale/screwdriver.pl.tr @@ -0,0 +1,2 @@ +#textdomain: screwdriver +Screwdriver=Śrubokręt diff --git a/mods/ITEMS/screwdriver/mod.conf b/mods/ITEMS/screwdriver/mod.conf new file mode 100644 index 000000000..a18279839 --- /dev/null +++ b/mods/ITEMS/screwdriver/mod.conf @@ -0,0 +1,2 @@ +name = screwdriver +depends = mcl_wip \ No newline at end of file diff --git a/mods/ITEMS/xpanes/depends.txt b/mods/ITEMS/xpanes/depends.txt deleted file mode 100644 index 812afabce..000000000 --- a/mods/ITEMS/xpanes/depends.txt +++ /dev/null @@ -1,3 +0,0 @@ -mcl_sounds -mcl_core -doc? diff --git a/mods/ITEMS/xpanes/init.lua b/mods/ITEMS/xpanes/init.lua index c17f2cd69..fe67934a1 100644 --- a/mods/ITEMS/xpanes/init.lua +++ b/mods/ITEMS/xpanes/init.lua @@ -1,4 +1,4 @@ -local S = minetest.get_translator("xpanes") +local S = minetest.get_translator(minetest.get_current_modname()) local mod_doc = minetest.get_modpath("doc") local function is_pane(pos) @@ -142,7 +142,7 @@ function xpanes.register_pane(name, def) tiles = {def.textures[3], def.textures[2], def.textures[1]}, use_texture_alpha = def.use_texture_alpha, groups = groups, - drop = "xpanes:" .. name .. "_flat", + drop = drop, sounds = def.sounds, node_box = { type = "connected", @@ -153,7 +153,6 @@ function xpanes.register_pane(name, def) connect_right = {{1/32, -1/2, -1/32, 1/2, 1/2, 1/32}}, }, connects_to = {"group:pane", "group:stone", "group:glass", "group:wood", "group:tree"}, - drop = drop, _mcl_blast_resistance = def._mcl_blast_resistance, _mcl_hardness = def._mcl_hardness, _mcl_silk_touch_drop = def._mcl_silk_touch_drop and {"xpanes:" .. name .. "_flat"}, @@ -171,7 +170,7 @@ end local canonical_color = "yellow" -- Register glass pane (stained and unstained) -local pane = function(description, node, append) +local function pane(description, node, append) local texture1, longdesc, entry_name, create_entry local is_canonical = true -- Special case: Default (unstained) glass texture @@ -194,7 +193,7 @@ local pane = function(description, node, append) _doc_items_entry_name = entry_name, _doc_items_longdesc = longdesc, textures = {texture1, texture1, "xpanes_top_glass"..append..".png"}, - use_texture_alpha = true, + use_texture_alpha = minetest.features.use_texture_alpha_string_modes and "blend" or true, inventory_image = texture1, wield_image = texture1, sounds = mcl_sounds.node_sound_glass_defaults(), @@ -224,6 +223,7 @@ xpanes.register_pane("bar", { wield_image = "xpanes_pane_iron.png", groups = {pickaxey=1}, sounds = mcl_sounds.node_sound_metal_defaults(), + use_texture_alpha = minetest.features.use_texture_alpha_string_modes and "clip" or true, recipe = { {"mcl_core:iron_ingot", "mcl_core:iron_ingot", "mcl_core:iron_ingot"}, {"mcl_core:iron_ingot", "mcl_core:iron_ingot", "mcl_core:iron_ingot"}, diff --git a/mods/ITEMS/xpanes/locale/xpanes.pl.tr b/mods/ITEMS/xpanes/locale/xpanes.pl.tr new file mode 100644 index 000000000..d169c1f97 --- /dev/null +++ b/mods/ITEMS/xpanes/locale/xpanes.pl.tr @@ -0,0 +1,23 @@ +# textdomain: xpanes +Glass panes are thin layers of glass which neatly connect to their neighbors as you build them.=Szyby są cienkimi warstwami szkła które łączą się z sąsiadującymi blokami podczas budowania. +Stained glass panes are thin layers of stained glass which neatly connect to their neighbors as you build them. They come in many different colors.=Kolorowe szyby są cienkimi warstwami kolorowego szkła które łączą się z sąsiadującymi blokami podczas budowania. Można je pokolorować na wiele kolorów. +Iron Bars=Żelazne kraty +Iron bars neatly connect to their neighbors as you build them.=Żelazne kraty łączą się z sąsiadującymi blokami podczas budowania. +Glass Pane=Szyba +Stained Glass Pane=Kolorowa szyba +Red Stained Glass Pane=Czerwona szyba +Green Stained Glass Pane=Zielona szyba +Blue Stained Glass Pane=Niebieska szyba +Light Blue Stained Glass Pane=Jasnoniebieska szyba +Black Stained Glass Pane=Czarna szyba +White Stained Glass Pane=Biała szyba +Yellow Stained Glass Pane=Żółta szyba +Brown Stained Glass Pane=Brązowa szyba +Orange Stained Glass Pane=Pomarańczowa szyba +Pink Stained Glass Pane=Różowa szyba +Grey Stained Glass Pane=Szara szyba +Lime Stained Glass Pane=Jasnozielona szyba +Light Grey Stained Glass Pane=Jasnoszara szyba +Magenta Stained Glass Pane=Karmazynowa szyba +Purple Stained Glass Pane=Fioletowa szyba +Cyan Stained Glass Pane=Błękitna szyba diff --git a/mods/ITEMS/xpanes/mod.conf b/mods/ITEMS/xpanes/mod.conf new file mode 100644 index 000000000..ba2147663 --- /dev/null +++ b/mods/ITEMS/xpanes/mod.conf @@ -0,0 +1,3 @@ +name = xpanes +depends = mcl_sounds, mcl_core +optional_depends = doc diff --git a/mods/MAPGEN/mcl_biomes/depends.txt b/mods/MAPGEN/mcl_biomes/depends.txt deleted file mode 100644 index dd21ef64f..000000000 --- a/mods/MAPGEN/mcl_biomes/depends.txt +++ /dev/null @@ -1,7 +0,0 @@ -mcl_init -mcl_core -mcl_worlds -mcl_farming -mcl_flowers -mcl_end -mcl_ocean diff --git a/mods/MAPGEN/mcl_biomes/description.txt b/mods/MAPGEN/mcl_biomes/description.txt deleted file mode 100644 index 496ffb217..000000000 --- a/mods/MAPGEN/mcl_biomes/description.txt +++ /dev/null @@ -1 +0,0 @@ -Adds the various biomes and biome-related things for non-v6 map generators. diff --git a/mods/MAPGEN/mcl_biomes/init.lua b/mods/MAPGEN/mcl_biomes/init.lua index 5687db1b3..a630dba04 100644 --- a/mods/MAPGEN/mcl_biomes/init.lua +++ b/mods/MAPGEN/mcl_biomes/init.lua @@ -6,8 +6,12 @@ local superflat = mg_name == "flat" and minetest.get_mapgen_setting("mcl_superfl local generate_fallen_logs = minetest.settings:get_bool("mcl_generate_fallen_logs", false) +local mod_mcl_structures = minetest.get_modpath("mcl_structures") +local mod_mcl_core = minetest.get_modpath("mcl_core") +local mod_mcl_mushrooms = minetest.get_modpath("mcl_mushrooms") + -- Jungle bush schematic. In PC/Java Edition it's Jungle Wood + Oak Leaves -local jungle_bush_schematic = minetest.get_modpath("mcl_core").."/schematics/mcl_core_jungle_bush_oak_leaves.mts" +local jungle_bush_schematic = mod_mcl_core.."/schematics/mcl_core_jungle_bush_oak_leaves.mts" local deco_id_chorus_plant @@ -1484,6 +1488,7 @@ local function register_dimension_biomes() node_stone = "mcl_nether:netherrack", node_water = "air", node_river_water = "air", + node_cave_liquid = "air", y_min = mcl_vars.mg_nether_min, -- FIXME: For some reason the Nether stops generating early if this constant is not added. -- Figure out why. @@ -1501,6 +1506,7 @@ local function register_dimension_biomes() node_filler = "air", node_water = "air", node_river_water = "air", + node_cave_liquid = "air", -- FIXME: For some reason the End stops generating early if this constant is not added. -- Figure out why. y_min = mcl_vars.mg_end_min, @@ -1616,6 +1622,16 @@ local function register_biomelike_ores() clust_size = 7, y_min = mcl_vars.mg_overworld_min, y_max = mcl_vars.mg_overworld_max, + noise_params = { + offset = 0, + scale = 1, + spread = {x=250, y=250, z=250}, + seed = 12345, + octaves = 3, + persist = 0.6, + lacunarity = 2, + flags = "defaults", + }, biomes = { "MesaPlateauF_grasstop" }, }) minetest.register_ore({ @@ -1639,6 +1655,16 @@ local function register_biomelike_ores() clust_size = 15, y_min = mcl_vars.mg_overworld_min, y_max = mcl_vars.mg_overworld_max, + noise_params = { + offset = 0, + scale = 1, + spread = {x=250, y=250, z=250}, + seed = 12345, + octaves = 3, + persist = 0.6, + lacunarity = 2, + flags = "defaults", + }, biomes = { "MesaPlateauFM_grasstop" }, }) -- Occasionally dig out portions of MesaPlateauFM @@ -1650,6 +1676,16 @@ local function register_biomelike_ores() clust_size = 5, y_min = mcl_vars.mg_overworld_min, y_max = mcl_vars.mg_overworld_max, + noise_params = { + offset = 0, + scale = 1, + spread = {x=250, y=250, z=250}, + seed = 12345, + octaves = 3, + persist = 0.6, + lacunarity = 2, + flags = "defaults", + }, biomes = { "MesaPlateauFM", "MesaPlateauFM_grasstop" }, }) minetest.register_ore({ @@ -1660,6 +1696,16 @@ local function register_biomelike_ores() clust_size = 8, y_min = mcl_vars.mg_overworld_min, y_max = mcl_vars.mg_overworld_max, + noise_params = { + offset = 0, + scale = 1, + spread = {x=250, y=250, z=250}, + seed = 12345, + octaves = 3, + persist = 0.6, + lacunarity = 2, + flags = "defaults", + }, biomes = { "MesaPlateauFM_sandlevel" }, }) -- More red sand in MesaPlateauFM @@ -1684,6 +1730,16 @@ local function register_biomelike_ores() clust_size = 4, y_min = mcl_vars.mg_overworld_min, y_max = mcl_vars.mg_overworld_max, + noise_params = { + offset = 0, + scale = 1, + spread = {x=250, y=250, z=250}, + seed = 12345, + octaves = 3, + persist = 0.6, + lacunarity = 2, + flags = "defaults", + }, biomes = { "MesaPlateauFM", "MesaPlateauFM_grasstop", "MesaPlateauFM_sandlevel" }, }) @@ -1723,7 +1779,7 @@ local function register_biomelike_ores() -- Mesa strata (registered as sheet ores) -- Helper function to create strata. - local stratum = function(y_min, height, color, seed, is_perfect) + local function stratum(y_min, height, color, seed, is_perfect) if not height then height = 1 end @@ -1918,6 +1974,16 @@ local function register_dimension_ores() clust_size = 6, y_min = mcl_worlds.layer_to_y(23, "nether"), y_max = mcl_worlds.layer_to_y(37, "nether"), + noise_params = { + offset = 0, + scale = 1, + spread = {x=250, y=250, z=250}, + seed = 12345, + octaves = 3, + persist = 0.6, + lacunarity = 2, + flags = "defaults", + }, }) minetest.register_ore({ ore_type = "blob", @@ -1928,6 +1994,16 @@ local function register_dimension_ores() clust_size = 8, y_min = mcl_worlds.layer_to_y(23, "nether"), y_max = mcl_worlds.layer_to_y(37, "nether"), + noise_params = { + offset = 0, + scale = 1, + spread = {x=250, y=250, z=250}, + seed = 12345, + octaves = 3, + persist = 0.6, + lacunarity = 2, + flags = "defaults", + }, }) -- Glowstone @@ -1973,26 +2049,28 @@ local function register_dimension_ores() }) -- Nether quartz - minetest.register_ore({ - ore_type = "scatter", - ore = "mcl_nether:quartz_ore", - wherein = {"mcl_nether:netherrack", "mcl_core:stone"}, - clust_scarcity = 850, - clust_num_ores = 4, -- MC cluster amount: 4-10 - clust_size = 3, - y_min = mcl_vars.mg_nether_min, - y_max = mcl_vars.mg_nether_max, - }) - minetest.register_ore({ - ore_type = "scatter", - ore = "mcl_nether:quartz_ore", - wherein = {"mcl_nether:netherrack", "mcl_core:stone"}, - clust_scarcity = 1650, - clust_num_ores = 8, -- MC cluster amount: 4-10 - clust_size = 4, - y_min = mcl_vars.mg_nether_min, - y_max = mcl_vars.mg_nether_max, - }) + if minetest.settings:get_bool("mcl_generate_ores", true) then + minetest.register_ore({ + ore_type = "scatter", + ore = "mcl_nether:quartz_ore", + wherein = {"mcl_nether:netherrack", "mcl_core:stone"}, + clust_scarcity = 850, + clust_num_ores = 4, -- MC cluster amount: 4-10 + clust_size = 3, + y_min = mcl_vars.mg_nether_min, + y_max = mcl_vars.mg_nether_max, + }) + minetest.register_ore({ + ore_type = "scatter", + ore = "mcl_nether:quartz_ore", + wherein = {"mcl_nether:netherrack", "mcl_core:stone"}, + clust_scarcity = 1650, + clust_num_ores = 8, -- MC cluster amount: 4-10 + clust_size = 4, + y_min = mcl_vars.mg_nether_min, + y_max = mcl_vars.mg_nether_max, + }) + end -- Lava springs in the Nether minetest.register_ore({ @@ -2233,7 +2311,7 @@ local function register_decorations() biomes = {"IcePlainsSpikes"}, y_min = 4, y_max = mcl_vars.mg_overworld_max, - schematic = minetest.get_modpath("mcl_structures").."/schematics/mcl_structures_ice_spike_large.mts", + schematic = mod_mcl_structures.."/schematics/mcl_structures_ice_spike_large.mts", rotation = "random", flags = "place_center_x, place_center_z", }) @@ -2254,7 +2332,7 @@ local function register_decorations() biomes = {"IcePlainsSpikes"}, y_min = 4, y_max = mcl_vars.mg_overworld_max, - schematic = minetest.get_modpath("mcl_structures").."/schematics/mcl_structures_ice_spike_small.mts", + schematic = mod_mcl_structures.."/schematics/mcl_structures_ice_spike_small.mts", rotation = "random", flags = "place_center_x, place_center_z", }) @@ -2277,7 +2355,7 @@ local function register_decorations() biomes = {"Forest"}, y_min = 1, y_max = mcl_vars.mg_overworld_max, - schematic = minetest.get_modpath("mcl_core").."/schematics/mcl_core_oak_large_"..i..".mts", + schematic = mod_mcl_core.."/schematics/mcl_core_oak_large_"..i..".mts", flags = "place_center_x, place_center_z", rotation = "random", }) @@ -2297,7 +2375,7 @@ local function register_decorations() biomes = {"ExtremeHills", "ExtremeHillsM", "ExtremeHills+", "ExtremeHills+_snowtop"}, y_min = 1, y_max = mcl_vars.mg_overworld_max, - schematic = minetest.get_modpath("mcl_core").."/schematics/mcl_core_oak_large_"..i..".mts", + schematic = mod_mcl_core.."/schematics/mcl_core_oak_large_"..i..".mts", flags = "place_center_x, place_center_z", rotation = "random", }) @@ -2318,7 +2396,7 @@ local function register_decorations() biomes = {"Forest"}, y_min = 1, y_max = mcl_vars.mg_overworld_max, - schematic = minetest.get_modpath("mcl_core").."/schematics/mcl_core_oak_classic.mts", + schematic = mod_mcl_core.."/schematics/mcl_core_oak_classic.mts", flags = "place_center_x, place_center_z", rotation = "random", }) @@ -2337,7 +2415,7 @@ local function register_decorations() biomes = {"FlowerForest"}, y_min = 1, y_max = mcl_vars.mg_overworld_max, - schematic = minetest.get_modpath("mcl_core").."/schematics/mcl_core_oak_classic.mts", + schematic = mod_mcl_core.."/schematics/mcl_core_oak_classic.mts", flags = "place_center_x, place_center_z", rotation = "random", }) @@ -2356,7 +2434,7 @@ local function register_decorations() biomes = {"ExtremeHills", "ExtremeHillsM", "ExtremeHills+", "ExtremeHills+_snowtop"}, y_min = 1, y_max = mcl_vars.mg_overworld_max, - schematic = minetest.get_modpath("mcl_core").."/schematics/mcl_core_oak_classic.mts", + schematic = mod_mcl_core.."/schematics/mcl_core_oak_classic.mts", flags = "place_center_x, place_center_z", rotation = "random", }) @@ -2376,7 +2454,7 @@ local function register_decorations() biomes = {"ExtremeHills+", "ExtremeHills+_snowtop"}, y_min = 50, y_max = mcl_vars.mg_overworld_max, - schematic = minetest.get_modpath("mcl_core").."/schematics/mcl_core_oak_classic.mts", + schematic = mod_mcl_core.."/schematics/mcl_core_oak_classic.mts", flags = "place_center_x, place_center_z", rotation = "random", }) @@ -2395,7 +2473,7 @@ local function register_decorations() biomes = {"MesaPlateauF_grasstop"}, y_min = 30, y_max = mcl_vars.mg_overworld_max, - schematic = minetest.get_modpath("mcl_core").."/schematics/mcl_core_oak_classic.mts", + schematic = mod_mcl_core.."/schematics/mcl_core_oak_classic.mts", flags = "place_center_x, place_center_z", rotation = "random", }) @@ -2414,7 +2492,7 @@ local function register_decorations() biomes = {"MesaPlateauFM_grasstop"}, y_min = 30, y_max = mcl_vars.mg_overworld_max, - schematic = minetest.get_modpath("mcl_core").."/schematics/mcl_core_oak_classic.mts", + schematic = mod_mcl_core.."/schematics/mcl_core_oak_classic.mts", flags = "place_center_x, place_center_z", rotation = "random", }) @@ -2434,7 +2512,7 @@ local function register_decorations() biomes = {"IcePlains"}, y_min = 1, y_max = mcl_vars.mg_overworld_max, - schematic = minetest.get_modpath("mcl_core").."/schematics/mcl_core_oak_classic.mts", + schematic = mod_mcl_core.."/schematics/mcl_core_oak_classic.mts", flags = "place_center_x, place_center_z", rotation = "random", }) @@ -2446,7 +2524,7 @@ local function register_decorations() biomes = {"Jungle", "JungleM"}, y_min = 1, y_max = mcl_vars.mg_overworld_max, - schematic = minetest.get_modpath("mcl_core").."/schematics/mcl_core_oak_classic.mts", + schematic = mod_mcl_core.."/schematics/mcl_core_oak_classic.mts", flags = "place_center_x, place_center_z", rotation = "random", }) @@ -2458,7 +2536,7 @@ local function register_decorations() biomes = {"JungleEdge", "JungleEdgeM", "Savanna"}, y_min = 1, y_max = mcl_vars.mg_overworld_max, - schematic = minetest.get_modpath("mcl_core").."/schematics/mcl_core_oak_classic.mts", + schematic = mod_mcl_core.."/schematics/mcl_core_oak_classic.mts", flags = "place_center_x, place_center_z", rotation = "random", }) @@ -2480,7 +2558,7 @@ local function register_decorations() biomes = {"Forest"}, y_min = 1, y_max = mcl_vars.mg_overworld_max, - schematic = minetest.get_modpath("mcl_core").."/schematics/mcl_core_oak_balloon.mts", + schematic = mod_mcl_core.."/schematics/mcl_core_oak_balloon.mts", flags = "place_center_x, place_center_z", rotation = "random", }) @@ -2501,7 +2579,7 @@ local function register_decorations() biomes = {"Swampland", "Swampland_shore"}, y_min = 0, y_max = mcl_vars.mg_overworld_max, - schematic = minetest.get_modpath("mcl_core").."/schematics/mcl_core_oak_swamp.mts", + schematic = mod_mcl_core.."/schematics/mcl_core_oak_swamp.mts", flags = "place_center_x, place_center_z", rotation = "random", }) @@ -2518,7 +2596,7 @@ local function register_decorations() biomes = {"Jungle"}, y_min = 4, y_max = mcl_vars.mg_overworld_max, - schematic = minetest.get_modpath("mcl_core").."/schematics/mcl_core_jungle_tree_huge_"..i..".mts", + schematic = mod_mcl_core.."/schematics/mcl_core_jungle_tree_huge_"..i..".mts", flags = "place_center_x, place_center_z", rotation = "random", }) @@ -2530,7 +2608,7 @@ local function register_decorations() biomes = {"JungleM"}, y_min = 4, y_max = mcl_vars.mg_overworld_max, - schematic = minetest.get_modpath("mcl_core").."/schematics/mcl_core_jungle_tree_huge_"..i..".mts", + schematic = mod_mcl_core.."/schematics/mcl_core_jungle_tree_huge_"..i..".mts", flags = "place_center_x, place_center_z", rotation = "random", }) @@ -2545,7 +2623,7 @@ local function register_decorations() biomes = {"Jungle"}, y_min = 1, y_max = mcl_vars.mg_overworld_max, - schematic = minetest.get_modpath("mcl_core").."/schematics/mcl_core_jungle_tree.mts", + schematic = mod_mcl_core.."/schematics/mcl_core_jungle_tree.mts", flags = "place_center_x, place_center_z", rotation = "random", }) @@ -2557,7 +2635,7 @@ local function register_decorations() biomes = {"JungleEdge", "JungleEdgeM"}, y_min = 1, y_max = mcl_vars.mg_overworld_max, - schematic = minetest.get_modpath("mcl_core").."/schematics/mcl_core_jungle_tree.mts", + schematic = mod_mcl_core.."/schematics/mcl_core_jungle_tree.mts", flags = "place_center_x, place_center_z", rotation = "random", }) @@ -2570,7 +2648,7 @@ local function register_decorations() biomes = {"JungleM"}, y_min = 1, y_max = mcl_vars.mg_overworld_max, - schematic = minetest.get_modpath("mcl_core").."/schematics/mcl_core_jungle_tree.mts", + schematic = mod_mcl_core.."/schematics/mcl_core_jungle_tree.mts", flags = "place_center_x, place_center_z", rotation = "random", }) @@ -2595,7 +2673,7 @@ local function register_decorations() biomes = biomes, y_min = y, y_max = mcl_vars.mg_overworld_max, - schematic = minetest.get_modpath("mcl_core").."/schematics/"..sprucename, + schematic = mod_mcl_core.."/schematics/"..sprucename, flags = "place_center_x, place_center_z", }) end @@ -2649,7 +2727,7 @@ local function register_decorations() biomes = {"Taiga", "ColdTaiga"}, y_min = 2, y_max = mcl_vars.mg_overworld_max, - schematic = minetest.get_modpath("mcl_core").."/schematics/mcl_core_spruce_lollipop.mts", + schematic = mod_mcl_core.."/schematics/mcl_core_spruce_lollipop.mts", flags = "place_center_x, place_center_z", }) @@ -2669,7 +2747,7 @@ local function register_decorations() biomes = {"Taiga", "ColdTaiga"}, y_min = 3, y_max = mcl_vars.mg_overworld_max, - schematic = minetest.get_modpath("mcl_core").."/schematics/mcl_core_spruce_matchstick.mts", + schematic = mod_mcl_core.."/schematics/mcl_core_spruce_matchstick.mts", flags = "place_center_x, place_center_z", }) @@ -2689,7 +2767,7 @@ local function register_decorations() biomes = {"IcePlains"}, y_min = 1, y_max = mcl_vars.mg_overworld_max, - schematic = minetest.get_modpath("mcl_core").."/schematics/mcl_core_spruce_5.mts", + schematic = mod_mcl_core.."/schematics/mcl_core_spruce_5.mts", flags = "place_center_x, place_center_z", }) @@ -2703,7 +2781,7 @@ local function register_decorations() biomes = {"Savanna", "SavannaM"}, y_min = 1, y_max = mcl_vars.mg_overworld_max, - schematic = minetest.get_modpath("mcl_core").."/schematics/mcl_core_acacia_"..a..".mts", + schematic = mod_mcl_core.."/schematics/mcl_core_acacia_"..a..".mts", flags = "place_center_x, place_center_z", rotation = "random", }) @@ -2725,7 +2803,7 @@ local function register_decorations() biomes = {"BirchForest"}, y_min = 1, y_max = mcl_vars.mg_overworld_max, - schematic = minetest.get_modpath("mcl_core").."/schematics/mcl_core_birch.mts", + schematic = mod_mcl_core.."/schematics/mcl_core_birch.mts", flags = "place_center_x, place_center_z", }) minetest.register_decoration({ @@ -2743,7 +2821,7 @@ local function register_decorations() biomes = {"BirchForestM"}, y_min = 1, y_max = mcl_vars.mg_overworld_max, - schematic = minetest.get_modpath("mcl_core").."/schematics/mcl_core_birch_tall.mts", + schematic = mod_mcl_core.."/schematics/mcl_core_birch_tall.mts", flags = "place_center_x, place_center_z", }) @@ -2762,7 +2840,7 @@ local function register_decorations() biomes = {"Forest", "FlowerForest"}, y_min = 1, y_max = mcl_vars.mg_overworld_max, - schematic = minetest.get_modpath("mcl_core").."/schematics/mcl_core_birch.mts", + schematic = mod_mcl_core.."/schematics/mcl_core_birch.mts", flags = "place_center_x, place_center_z", }) @@ -2782,7 +2860,7 @@ local function register_decorations() biomes = {"RoofedForest"}, y_min = 4, y_max = mcl_vars.mg_overworld_max, - schematic = minetest.get_modpath("mcl_core").."/schematics/mcl_core_dark_oak.mts", + schematic = mod_mcl_core.."/schematics/mcl_core_dark_oak.mts", flags = "place_center_x, place_center_z", rotation = "random", }) @@ -2804,7 +2882,7 @@ local function register_decorations() biomes = { "RoofedForest" }, y_min = 1, y_max = mcl_vars.mg_overworld_max, - schematic = minetest.get_modpath("mcl_mushrooms").."/schematics/mcl_mushrooms_huge_brown.mts", + schematic = mod_mcl_mushrooms.."/schematics/mcl_mushrooms_huge_brown.mts", flags = "place_center_x, place_center_z", rotation = "0", }) @@ -2816,7 +2894,7 @@ local function register_decorations() biomes = { "RoofedForest" }, y_min = 1, y_max = mcl_vars.mg_overworld_max, - schematic = minetest.get_modpath("mcl_mushrooms").."/schematics/mcl_mushrooms_giant_brown.mts", + schematic = mod_mcl_mushrooms.."/schematics/mcl_mushrooms_giant_brown.mts", flags = "place_center_x, place_center_z", rotation = "0", }) @@ -2829,7 +2907,7 @@ local function register_decorations() biomes = { "MushroomIsland", "MushroomIslandShore" }, y_min = 1, y_max = mcl_vars.mg_overworld_max, - schematic = minetest.get_modpath("mcl_mushrooms").."/schematics/mcl_mushrooms_huge_brown.mts", + schematic = mod_mcl_mushrooms.."/schematics/mcl_mushrooms_huge_brown.mts", flags = "place_center_x, place_center_z", rotation = "0", }) @@ -2841,7 +2919,7 @@ local function register_decorations() biomes = { "MushroomIsland", "MushroomIslandShore" }, y_min = 1, y_max = mcl_vars.mg_overworld_max, - schematic = minetest.get_modpath("mcl_mushrooms").."/schematics/mcl_mushrooms_giant_brown.mts", + schematic = mod_mcl_mushrooms.."/schematics/mcl_mushrooms_giant_brown.mts", flags = "place_center_x, place_center_z", rotation = "0", }) @@ -2855,7 +2933,7 @@ local function register_decorations() biomes = { "RoofedForest" }, y_min = 1, y_max = mcl_vars.mg_overworld_max, - schematic = minetest.get_modpath("mcl_mushrooms").."/schematics/mcl_mushrooms_huge_red.mts", + schematic = mod_mcl_mushrooms.."/schematics/mcl_mushrooms_huge_red.mts", flags = "place_center_x, place_center_z", rotation = "0", }) @@ -2867,7 +2945,7 @@ local function register_decorations() biomes = { "RoofedForest" }, y_min = 1, y_max = mcl_vars.mg_overworld_max, - schematic = minetest.get_modpath("mcl_mushrooms").."/schematics/mcl_mushrooms_giant_red.mts", + schematic = mod_mcl_mushrooms.."/schematics/mcl_mushrooms_giant_red.mts", flags = "place_center_x, place_center_z", rotation = "0", }) @@ -2880,7 +2958,7 @@ local function register_decorations() biomes = { "MushroomIsland", "MushroomIslandShore" }, y_min = 1, y_max = mcl_vars.mg_overworld_max, - schematic = minetest.get_modpath("mcl_mushrooms").."/schematics/mcl_mushrooms_huge_red.mts", + schematic = mod_mcl_mushrooms.."/schematics/mcl_mushrooms_huge_red.mts", flags = "place_center_x, place_center_z", rotation = "0", }) @@ -2892,7 +2970,7 @@ local function register_decorations() biomes = { "MushroomIsland", "MushroomIslandShore" }, y_min = 1, y_max = mcl_vars.mg_overworld_max, - schematic = minetest.get_modpath("mcl_mushrooms").."/schematics/mcl_mushrooms_giant_red.mts", + schematic = mod_mcl_mushrooms.."/schematics/mcl_mushrooms_giant_red.mts", flags = "place_center_x, place_center_z", rotation = "0", }) @@ -2913,7 +2991,7 @@ local function register_decorations() biomes = {"MegaTaiga", "MegaSpruceTaiga"}, y_min = 1, y_max = mcl_vars.mg_overworld_max, - schematic = minetest.get_modpath("mcl_structures").."/schematics/mcl_structures_boulder.mts", + schematic = mod_mcl_structures.."/schematics/mcl_structures_boulder.mts", flags = "place_center_x, place_center_z", }) @@ -2933,7 +3011,7 @@ local function register_decorations() biomes = {"MegaTaiga", "MegaSpruceTaiga"}, y_min = 1, y_max = mcl_vars.mg_overworld_max, - schematic = minetest.get_modpath("mcl_structures").."/schematics/mcl_structures_boulder_small.mts", + schematic = mod_mcl_structures.."/schematics/mcl_structures_boulder_small.mts", flags = "place_center_x, place_center_z", }) @@ -3005,7 +3083,7 @@ local function register_decorations() }) -- Doubletall grass - local register_doubletall_grass = function(offset, scale, biomes) + local function register_doubletall_grass(offset, scale, biomes) for b=1, #biomes do local param2 = minetest.registered_biomes[biomes[b]]._mcl_palette_index @@ -3041,7 +3119,7 @@ local function register_decorations() register_doubletall_grass(-0.0005, -0.03, {"Savanna", "SavannaM"}) -- Large ferns - local register_double_fern = function(offset, scale, biomes) + local function register_double_fern(offset, scale, biomes) for b=1, #biomes do local param2 = minetest.registered_biomes[biomes[b]]._mcl_palette_index minetest.register_decoration({ @@ -3075,7 +3153,7 @@ local function register_decorations() register_double_fern(0.15, 0.1, { "JungleM" }) -- Large flowers - local register_large_flower = function(name, biomes, seed, offset, flower_forest_offset) + local function register_large_flower(name, biomes, seed, offset, flower_forest_offset) local maxi if flower_forest_offset then maxi = 2 @@ -3506,7 +3584,8 @@ local function register_decorations() local fern_minimal = { "Jungle", "JungleM", "JungleEdge", "JungleEdgeM", "Taiga", "MegaTaiga", "MegaSpruceTaiga", "ColdTaiga" } local fern_low = { "Jungle", "JungleM", "JungleEdge", "JungleEdgeM", "Taiga", "MegaTaiga", "MegaSpruceTaiga" } local fern_Jungle = { "Jungle", "JungleM", "JungleEdge", "JungleEdgeM" } - local fern_JungleM = { "JungleM" }, + --local fern_JungleM = { "JungleM" }, + register_grass_decoration("fern", -0.03, 0.09, fern_minimal) register_grass_decoration("fern", -0.015, 0.075, fern_minimal) register_grass_decoration("fern", 0, 0.06, fern_minimal) @@ -3517,7 +3596,7 @@ local function register_decorations() register_grass_decoration("fern", 0.05, 0.01, fern_Jungle) register_grass_decoration("fern", 0.07, -0.01, fern_Jungle) register_grass_decoration("fern", 0.09, -0.03, fern_Jungle) - register_grass_decoration("fern", 0.12, -0.03, fern_JungleM) + register_grass_decoration("fern", 0.12, -0.03, {"JungleM"}) local b_seagrass = {"ColdTaiga_ocean","ExtremeHills_ocean","ExtremeHillsM_ocean","ExtremeHills+_ocean","Taiga_ocean","MegaTaiga_ocean","MegaSpruceTaiga_ocean","StoneBeach_ocean","Plains_ocean","SunflowerPlains_ocean","Forest_ocean","FlowerForest_ocean","BirchForest_ocean","BirchForestM_ocean","RoofedForest_ocean","Swampland_ocean","Jungle_ocean","JungleM_ocean","JungleEdge_ocean","JungleEdgeM_ocean","MushroomIsland_ocean","Desert_ocean","Savanna_ocean","SavannaM_ocean","Mesa_ocean","MesaBryce_ocean","MesaPlateauF_ocean","MesaPlateauFM_ocean", "ColdTaiga_deep_ocean","ExtremeHills_deep_ocean","ExtremeHillsM_deep_ocean","ExtremeHills+_deep_ocean","Taiga_deep_ocean","MegaTaiga_deep_ocean","MegaSpruceTaiga_deep_ocean","StoneBeach_deep_ocean","Plains_deep_ocean","SunflowerPlains_deep_ocean","Forest_deep_ocean","FlowerForest_deep_ocean","BirchForest_deep_ocean","BirchForestM_deep_ocean","RoofedForest_deep_ocean","Swampland_deep_ocean","Jungle_deep_ocean","JungleM_deep_ocean","JungleEdge_deep_ocean","JungleEdgeM_deep_ocean","MushroomIsland_deep_ocean","Desert_deep_ocean","Savanna_deep_ocean","SavannaM_deep_ocean","Mesa_deep_ocean","MesaBryce_deep_ocean","MesaPlateauF_deep_ocean","MesaPlateauFM_deep_ocean", @@ -3832,7 +3911,7 @@ end -- Decorations in non-Overworld dimensions local function register_dimension_decorations() --[[ NETHER ]] - -- TODO: Nether + -- TODO: Nether --[[ THE END ]] @@ -3897,12 +3976,19 @@ if mg_name ~= "singlenode" then -- Overworld decorations for v6 are handled in mcl_mapgen_core if deco_id_chorus_plant then - minetest.register_on_generated(function(minp, maxp, blockseed) + mcl_mapgen_core.register_generator("chorus_grow", nil, function(minp, maxp, blockseed) local gennotify = minetest.get_mapgen_object("gennotify") - local poslist = {} + --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 } - mcl_end.grow_chorus_plant(realpos) + 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) end diff --git a/mods/MAPGEN/mcl_biomes/mod.conf b/mods/MAPGEN/mcl_biomes/mod.conf new file mode 100644 index 000000000..0c6095f3d --- /dev/null +++ b/mods/MAPGEN/mcl_biomes/mod.conf @@ -0,0 +1,4 @@ +name = mcl_biomes +author = maikerumine +description = Adds the various biomes and biome-related things for non-v6 map generators. +depends = mcl_init, mcl_mapgen_core, mcl_core, mcl_worlds, mcl_farming, mcl_flowers, mcl_end, mcl_ocean diff --git a/mods/MAPGEN/mcl_dungeons/depends.txt b/mods/MAPGEN/mcl_dungeons/depends.txt deleted file mode 100644 index 4c803c72d..000000000 --- a/mods/MAPGEN/mcl_dungeons/depends.txt +++ /dev/null @@ -1,7 +0,0 @@ -mcl_init -mcl_core -mcl_chests -mcl_mobs -mcl_mobspawners -mcl_mapgen_core -mobs_mc diff --git a/mods/MAPGEN/mcl_dungeons/description.txt b/mods/MAPGEN/mcl_dungeons/description.txt deleted file mode 100644 index 343cb7bdb..000000000 --- a/mods/MAPGEN/mcl_dungeons/description.txt +++ /dev/null @@ -1 +0,0 @@ -Generates random dungeons in the world diff --git a/mods/MAPGEN/mcl_dungeons/init.lua b/mods/MAPGEN/mcl_dungeons/init.lua index 1ce1556b2..58e23b12e 100644 --- a/mods/MAPGEN/mcl_dungeons/init.lua +++ b/mods/MAPGEN/mcl_dungeons/init.lua @@ -1,400 +1,419 @@ -- FIXME: Chests may appear at openings +mcl_dungeons = {} + local mg_name = minetest.get_mapgen_setting("mg_name") -local pr = PseudoRandom(os.time()) -- Are dungeons disabled? -if mcl_vars.mg_dungeons == false then +if mcl_vars.mg_dungeons == false or mg_name == "singlenode" then return end -if mg_name ~= "singlenode" then --- Get loot for dungeon chests -local get_loot = function() - local loottable = { - { - stacks_min = 1, - stacks_max = 3, - items = { - { itemstring = "mcl_mobs:nametag", weight = 20 }, - { itemstring = "mcl_mobitems:saddle", weight = 20 }, - { itemstring = "mcl_jukebox:record_1", weight = 15 }, - { itemstring = "mcl_jukebox:record_4", weight = 15 }, - { itemstring = "mobs_mc:iron_horse_armor", weight = 15 }, - { itemstring = "mcl_core:apple_gold", weight = 15 }, - { itemstack = mcl_enchanting.get_uniform_randomly_enchanted_book({"soul_speed"}), weight = 10 }, - { itemstring = "mobs_mc:gold_horse_armor", weight = 10 }, - { itemstring = "mobs_mc:diamond_horse_armor", weight = 5 }, - { itemstring = "mcl_core:apple_gold_enchanted", weight = 2 }, - } - }, - { - stacks_min = 1, - stacks_max = 4, - items = { - { itemstring = "mcl_farming:wheat_item", weight = 20, amount_min = 1, amount_max = 4 }, - { itemstring = "mcl_farming:bread", weight = 20 }, - { itemstring = "mcl_core:coal_lump", weight = 15, amount_min = 1, amount_max = 4 }, - { itemstring = "mesecons:redstone", weight = 15, amount_min = 1, amount_max = 4 }, - { itemstring = "mcl_farming:beetroot_seeds", weight = 10, amount_min = 2, amount_max = 4 }, - { itemstring = "mcl_farming:melon_seeds", weight = 10, amount_min = 2, amount_max = 4 }, - { itemstring = "mcl_farming:pumpkin_seeds", weight = 10, amount_min = 2, amount_max = 4 }, - { itemstring = "mcl_core:iron_ingot", weight = 10, amount_min = 1, amount_max = 4 }, - { itemstring = "mcl_buckets:bucket_empty", weight = 10 }, - { itemstring = "mcl_core:gold_ingot", weight = 5, amount_min = 1, amount_max = 4 }, - }, - }, - { - stacks_min = 3, - stacks_max = 3, - items = { - { itemstring = "mcl_mobitems:bone", weight = 10, amount_min = 1, amount_max = 8 }, - { itemstring = "mcl_mobitems:gunpowder", weight = 10, amount_min = 1, amount_max = 8 }, - { itemstring = "mcl_mobitems:rotten_flesh", weight = 10, amount_min = 1, amount_max = 8 }, - { itemstring = "mcl_mobitems:string", weight = 10, amount_min = 1, amount_max = 8 }, - }, - } - } +--lua locals +--minetest +local registered_nodes = minetest.registered_nodes +local swap_node = minetest.swap_node +local set_node = minetest.set_node +local dir_to_facedir = minetest.dir_to_facedir +local get_meta = minetest.get_meta +local emerge_area = minetest.emerge_area - -- Bonus loot for v6 mapgen: Otherwise unobtainable saplings. - if mg_name == "v6" then - table.insert(loottable, { - stacks_min = 1, - stacks_max = 3, - items = { - { itemstring = "mcl_core:birchsapling", weight = 1, amount_min = 1, amount_max = 2 }, - { itemstring = "mcl_core:acaciasapling", weight = 1, amount_min = 1, amount_max = 2 }, - { itemstring = "", weight = 6 }, - }, - }) +--vector +local vector_add = vector.add +local vector_subtract = vector.subtract + +--table +local table_insert = table.insert +local table_sort = table.sort + +--math +local math_min = math.min +local math_max = math.max +local math_ceil = math.ceil + +--custom mcl_vars +local get_node = mcl_vars.get_node + + +local min_y = math_max(mcl_vars.mg_overworld_min, mcl_vars.mg_bedrock_overworld_max) + 1 +local max_y = mcl_vars.mg_overworld_max - 1 +-- Calculate the number of dungeon spawn attempts +-- In Minecraft, there 8 dungeon spawn attempts Minecraft chunk (16*256*16 = 65536 blocks). +-- Minetest chunks don't have this size, so scale the number accordingly. +local attempts = math_ceil(((mcl_vars.chunksize * mcl_vars.MAP_BLOCKSIZE) ^ 3) / 8192) -- 63 = 80*80*80/8192 + +local dungeonsizes = { + { x=5, y=4, z=5}, + { x=5, y=4, z=7}, + { x=7, y=4, z=5}, + { x=7, y=4, z=7}, +} + +--[[local dirs = { + { x= 1, y=0, z= 0 }, + { x= 0, y=0, z= 1 }, + { x=-1, y=0, z= 0 }, + { x= 0, y=0, z=-1 }, +}]] + +local surround_vectors = { + { x=-1, y=0, z=0 }, + { x=1, y=0, z=0 }, + { x=0, y=0, z=-1 }, + { x=0, y=0, z=1 }, +} + +local function ecb_spawn_dungeon(blockpos, action, calls_remaining, param) + if calls_remaining >= 1 then return end + + local p1, _, dim, pr = param.p1, param.p2, param.dim, param.pr + local x, y, z = p1.x, p1.y, p1.z + local check = not (param.dontcheck or false) + + -- Check floor and ceiling: Must be *completely* solid + local y_floor = y + local y_ceiling = y + dim.y + 1 + if check then for tx = x+1, x+dim.x do for tz = z+1, z+dim.z do + if not registered_nodes[get_node({x = tx, y = y_floor , z = tz}).name].walkable + or not registered_nodes[get_node({x = tx, y = y_ceiling, z = tz}).name].walkable then return false end + end end end + + -- Check for air openings (2 stacked air at ground level) in wall positions + local openings_counter = 0 + -- Store positions of openings; walls will not be generated here + local openings = {} + -- Corners are stored because a corner-only opening needs to be increased, + -- so entities can get through. + local corners = {} + + local x2,z2 = x+dim.x+1, z+dim.z+1 + + if get_node({x=x, y=y+1, z=z}).name == "air" and get_node({x=x, y=y+2, z=z}).name == "air" then + openings_counter = openings_counter + 1 + if not openings[x] then openings[x]={} end + openings[x][z] = true + table_insert(corners, {x=x, z=z}) end - local items = mcl_loot.get_multi_loot(loottable, pr) - - return items -end - - --- Buffer for LuaVoxelManip -local lvm_buffer = {} - --- Below the bedrock, generate air/void -minetest.register_on_generated(function(minp, maxp) - if maxp.y < mcl_vars.mg_overworld_min or minp.y > mcl_vars.mg_overworld_max then - return + if get_node({x=x2, y=y+1, z=z}).name == "air" and get_node({x=x2, y=y+2, z=z}).name == "air" then + openings_counter = openings_counter + 1 + if not openings[x2] then openings[x2]={} end + openings[x2][z] = true + table_insert(corners, {x=x2, z=z}) + end + if get_node({x=x, y=y+1, z=z2}).name == "air" and get_node({x=x, y=y+2, z=z2}).name == "air" then + openings_counter = openings_counter + 1 + if not openings[x] then openings[x]={} end + openings[x][z2] = true + table_insert(corners, {x=x, z=z2}) + end + if get_node({x=x2, y=y+1, z=z2}).name == "air" and get_node({x=x2, y=y+2, z=z2}).name == "air" then + openings_counter = openings_counter + 1 + if not openings[x2] then openings[x2]={} end + openings[x2][z2] = true + table_insert(corners, {x=x2, z=z2}) end - local vm, emin, emax = minetest.get_mapgen_object("voxelmanip") - local data = vm:get_data(lvm_buffer) - local area = VoxelArea:new({MinEdge=emin, MaxEdge=emax}) - local lvm_used = false + for wx = x+1, x+dim.x do + if get_node({x=wx, y=y+1, z=z}).name == "air" and get_node({x=wx, y=y+2, z=z}).name == "air" then + openings_counter = openings_counter + 1 + if check and openings_counter > 5 then return end + if not openings[wx] then openings[wx]={} end + openings[wx][z] = true + end + if get_node({x=wx, y=y+1, z=z2}).name == "air" and get_node({x=wx, y=y+2, z=z2}).name == "air" then + openings_counter = openings_counter + 1 + if check and openings_counter > 5 then return end + if not openings[wx] then openings[wx]={} end + openings[wx][z2] = true + end + end + for wz = z+1, z+dim.z do + if get_node({x=x, y=y+1, z=wz}).name == "air" and get_node({x=x, y=y+2, z=wz}).name == "air" then + openings_counter = openings_counter + 1 + if check and openings_counter > 5 then return end + if not openings[x] then openings[x]={} end + openings[x][wz] = true + end + if get_node({x=x2, y=y+1, z=wz}).name == "air" and get_node({x=x2, y=y+2, z=wz}).name == "air" then + openings_counter = openings_counter + 1 + if check and openings_counter > 5 then return end + if not openings[x2] then openings[x2]={} end + openings[x2][wz] = true + end + end - local c_air = minetest.get_content_id("air") - local c_cobble = minetest.get_content_id("mcl_core:cobble") - local c_mossycobble = minetest.get_content_id("mcl_core:mossycobble") + -- If all openings are only at corners, the dungeon can't be accessed yet. + -- This code extends the openings of corners so they can be entered. + if openings_counter >= 1 and openings_counter == #corners then + for c=1, #corners do + -- Prevent creating too many openings because this would lead to dungeon rejection + if openings_counter >= 5 then + break + end + -- A corner is widened by adding openings to both neighbors + local cx, cz = corners[c].x, corners[c].z + local cxn, czn = cx, cz + if x == cx then + cxn = cxn + 1 + else + cxn = cxn - 1 + end + if z == cz then + czn = czn + 1 + else + czn = czn - 1 + end + openings[cx][czn] = true + openings_counter = openings_counter + 1 + if openings_counter < 5 then + if not openings[cxn] then openings[cxn]={} end + openings[cxn][cz] = true + openings_counter = openings_counter + 1 + end + end + end + + -- Check conditions. If okay, start generating + if check and (openings_counter < 1 or openings_counter > 5) then return end + + minetest.log("action","[mcl_dungeons] Placing new dungeon at "..minetest.pos_to_string({x=x,y=y,z=z})) + -- Okay! Spawning starts! -- Remember spawner chest positions to set metadata later - local chest_posses = {} + local chests = {} local spawner_posses = {} - -- Calculate the number of dungeon spawn attempts - local sizevector = vector.subtract(maxp, minp) - sizevector = vector.add(sizevector, 1) - local chunksize = sizevector.x * sizevector.y * sizevector.z + -- First prepare random chest positions. + -- Chests spawn at wall - -- In Minecraft, there 8 dungeon spawn attempts Minecraft chunk (16*256*16 = 65536 blocks). - -- Minetest chunks don't have this size, so scale the number accordingly. - local attempts = math.ceil(chunksize / 65536 * 8) - - for a=1, attempts do - local x, y, z - local b = 7 -- buffer - x = math.random(minp.x+b, maxp.x-b) - - local ymin = math.min(mcl_vars.mg_overworld_max, math.max(minp.y, mcl_vars.mg_bedrock_overworld_max) + 7) - local ymax = math.min(mcl_vars.mg_overworld_max, math.max(maxp.y, mcl_vars.mg_bedrock_overworld_max) - 4) - - y = math.random(ymin, ymax) - z = math.random(minp.z+b, maxp.z-b) - - local dungeonsizes = { - { x=5, y=4, z=5}, - { x=5, y=4, z=7}, - { x=7, y=4, z=5}, - { x=7, y=4, z=7}, - } - local dim = dungeonsizes[math.random(1, #dungeonsizes)] - - -- Check floor and ceiling: Must be *completely* solid - local ceilingfloor_ok = true - for tx = x, x+dim.x do - for tz = z, z+dim.z do - local floor = minetest.get_name_from_content_id(data[area:index(tx, y, tz)]) - local ceiling = minetest.get_name_from_content_id(data[area:index(tx, y+dim.y+1, tz)]) - if (not minetest.registered_nodes[floor].walkable) or (not minetest.registered_nodes[ceiling].walkable) then - ceilingfloor_ok = false - break - end - end - if not ceilingfloor_ok then break end + -- We assign each position at the wall a number and each chest gets one of these numbers randomly + local totalChests = 2 -- this code strongly relies on this number being 2 + local totalChestSlots = (dim.x + dim.z - 2) * 2 + local chestSlots = {} + -- There is a small chance that both chests have the same slot. + -- In that case, we give a 2nd chance for the 2nd chest to get spawned. + -- If it failed again, tough luck! We stick with only 1 chest spawned. + local lastRandom + local secondChance = true -- second chance is still available + for i=1, totalChests do + local r = pr:next(1, totalChestSlots) + if r == lastRandom and secondChance then + -- Oops! Same slot selected. Try again. + r = pr:next(1, totalChestSlots) + secondChance = false end + lastRandom = r + table_insert(chestSlots, r) + end + table_sort(chestSlots) + local currentChest = 1 - -- Check for air openings (2 stacked air at ground level) in wall positions - local openings_counter = 0 - -- Store positions of openings; walls will not be generated here - local openings = {} - -- Corners are stored because a corner-only opening needs to be increased, - -- so entities can get through. - local corners = {} - if ceilingfloor_ok then - - local walls = { - -- walls along x axis (contain corners) - { x, x+dim.x+1, "x", "z", z }, - { x, x+dim.x+1, "x", "z", z+dim.z+1 }, - -- walls along z axis (exclude corners) - { z+1, z+dim.z, "z", "x", x }, - { z+1, z+dim.z, "z", "x", x+dim.x+1 }, - } - - for w=1, #walls do - local wall = walls[w] - for iter = wall[1], wall[2] do - local pos = {} - pos[wall[3]] = iter - pos[wall[4]] = wall[5] - pos.y = y+1 - - if openings[pos.x] == nil then openings[pos.x] = {} end - - local door1 = area:index(pos.x, pos.y, pos.z) - pos.y = y+2 - local door2 = area:index(pos.x, pos.y, pos.z) - local doorname1 = minetest.get_name_from_content_id(data[door1]) - local doorname2 = minetest.get_name_from_content_id(data[door2]) - if doorname1 == "air" and doorname2 == "air" then - openings_counter = openings_counter + 1 - openings[pos.x][pos.z] = true - - -- Record corners - if wall[3] == "x" and (iter == wall[1] or iter == wall[2]) then - table.insert(corners, {x=pos.x, z=pos.z}) - end - end - end - end - - end - - -- If all openings are only at corners, the dungeon can't be accessed yet. - -- This code extends the openings of corners so they can be entered. - if openings_counter >= 1 and openings_counter == #corners then - for c=1, #corners do - -- Prevent creating too many openings because this would lead to dungeon rejection - if openings_counter >= 5 then - break - end - -- A corner is widened by adding openings to both neighbors - local cx, cz = corners[c].x, corners[c].z - local cxn, czn = cx, cz - if x == cx then - cxn = cxn + 1 - else - cxn = cxn - 1 - end - if z == cz then - czn = czn + 1 - else - czn = czn - 1 - end - openings[cx][czn] = true - openings_counter = openings_counter + 1 - if openings_counter < 5 then - openings[cxn][cz] = true - openings_counter = openings_counter + 1 - end - end - end - - -- Check conditions. If okay, start generating - if ceilingfloor_ok and openings_counter >= 1 and openings_counter <= 5 then - -- Okay! Spawning starts! - - -- First prepare random chest positions. - -- Chests spawn at wall - - -- We assign each position at the wall a number and each chest gets one of these numbers randomly - local totalChests = 2 -- this code strongly relies on this number being 2 - local totalChestSlots = (dim.x-1) * (dim.z-1) - local chestSlots = {} - -- There is a small chance that both chests have the same slot. - -- In that case, we give a 2nd chance for the 2nd chest to get spawned. - -- If it failed again, tough luck! We stick with only 1 chest spawned. - local lastRandom - local secondChance = true -- second chance is still available - for i=1, totalChests do - local r = math.random(1, totalChestSlots) - if r == lastRandom and secondChance then - -- Oops! Same slot selected. Try again. - r = math.random(1, totalChestSlots) - secondChance = false - end - lastRandom = r - table.insert(chestSlots, r) - end - table.sort(chestSlots) - local currentChest = 1 - - -- Calculate the mob spawner position, to be re-used for later - local spawner_pos = {x = x + math.ceil(dim.x/2), y = y+1, z = z + math.ceil(dim.z/2)} - table.insert(spawner_posses, spawner_pos) - - -- Generate walls and floor - local maxx, maxy, maxz = x+dim.x+1, y+dim.y, z+dim.z+1 - local chestSlotCounter = 1 - for tx = x, maxx do - for tz = z, maxz do - for ty = y, maxy do - local p_pos = area:index(tx, ty, tz) - - -- Do not overwrite nodes with is_ground_content == false (e.g. bedrock) - -- Exceptions: cobblestone and mossy cobblestone so neighborings dungeons nicely connect to each other - local name = minetest.get_name_from_content_id(data[p_pos]) - if name == "mcl_core:cobble" or name == "mcl_core:mossycobble" or minetest.registered_nodes[name].is_ground_content then - -- Floor - if ty == y then - if math.random(1,4) == 1 then - data[p_pos] = c_cobble - else - data[p_pos] = c_mossycobble - end - - -- Generate walls - --[[ Note: No additional cobblestone ceiling is generated. This is intentional. - The solid blocks above the dungeon are considered as the “ceiling”. - It is possible (but rare) for a dungeon to generate below sand or gravel. ]] - - elseif ty > y and (tx == x or tx == maxx or (tz == z or tz == maxz)) then - -- Check if it's an opening first - if (not openings[tx][tz]) or ty == maxy then - -- Place wall or ceiling - data[p_pos] = c_cobble - elseif ty < maxy - 1 then - -- Normally the openings are already clear, but not if it is a corner - -- widening. Make sure to clear at least the bottom 2 nodes of an opening. - data[p_pos] = c_air - elseif ty == maxy - 1 and data[p_pos] ~= c_air then - -- This allows for variation between 2-node and 3-node high openings. - data[p_pos] = c_cobble - end - -- If it was an opening, the lower 3 blocks are not touched at all - - -- Room interiour - else - local forChest = ty==y+1 and (tx==x+1 or tx==maxx-1 or tz==z+1 or tz==maxz-1) - - -- Place next chest at the wall (if it was its chosen wall slot) - if forChest and (currentChest < totalChests + 1) and (chestSlots[currentChest] == chestSlotCounter) then - table.insert(chest_posses, {x=tx, y=ty, z=tz}) - currentChest = currentChest + 1 - else - data[p_pos] = c_air - end - if forChest then - chestSlotCounter = chestSlotCounter + 1 - end - end - end - - end - end - end - end - - lvm_used = true + -- Calculate the mob spawner position, to be re-used for later + local sp = {x = x + math_ceil(dim.x/2), y = y+1, z = z + math_ceil(dim.z/2)} + local rn = registered_nodes[get_node(sp).name] + if rn and rn.is_ground_content then + table_insert(spawner_posses, sp) end - if lvm_used then - local chest_param2 = {} - -- Determine correct chest rotation (must pointi outwards) - for c=1, #chest_posses do - local cpos = chest_posses[c] + -- Generate walls and floor + local maxx, maxy, maxz = x+dim.x+1, y+dim.y, z+dim.z+1 + local chestSlotCounter = 1 + for tx = x, maxx do + for tz = z, maxz do + for ty = y, maxy do + local p = {x = tx, y=ty, z=tz} - -- Check surroundings of chest to determine correct rotation - local surround_vectors = { - { x=-1, y=0, z=0 }, - { x=1, y=0, z=0 }, - { x=0, y=0, z=-1 }, - { x=0, y=0, z=1 }, - } - local surroundings = {} - - for s=1, #surround_vectors do - -- Detect the 4 horizontal neighbors - local spos = vector.add(cpos, surround_vectors[s]) - local wpos = vector.subtract(cpos, surround_vectors[s]) - local p_pos = area:index(spos.x, spos.y, spos.z) - local p_pos2 = area:index(wpos.x, wpos.y, wpos.z) - - local nodename = minetest.get_name_from_content_id(data[p_pos]) - local nodename2 = minetest.get_name_from_content_id(data[p_pos2]) - local nodedef = minetest.registered_nodes[nodename] - local nodedef2 = minetest.registered_nodes[nodename2] - -- The chest needs an open space in front of it and a walkable node (except chest) behind it - if nodedef and nodedef.walkable == false and nodedef2 and nodedef2.walkable == true and nodename2 ~= "mcl_chests:chest" then - table.insert(surroundings, spos) + -- Do not overwrite nodes with is_ground_content == false (e.g. bedrock) + -- Exceptions: cobblestone and mossy cobblestone so neighborings dungeons nicely connect to each other + local name = get_node(p).name + if registered_nodes[name].is_ground_content or name == "mcl_core:cobble" or name == "mcl_core:mossycobble" then + -- Floor + if ty == y then + if pr:next(1,4) == 1 then + swap_node(p, {name = "mcl_core:cobble"}) + else + swap_node(p, {name = "mcl_core:mossycobble"}) end - end - -- Set param2 (=facedir) of this chest - local facedir - if #surroundings <= 0 then - -- Fallback if chest ended up in the middle of a room for some reason - facedir = math.random(0, 0) + + -- Generate walls + --[[ Note: No additional cobblestone ceiling is generated. This is intentional. + The solid blocks above the dungeon are considered as the “ceiling”. + It is possible (but rare) for a dungeon to generate below sand or gravel. ]] + + elseif tx == x or tz == z or tx == maxx or tz == maxz then + -- Check if it's an opening first + if (ty == maxy) or (not (openings[tx] and openings[tx][tz])) then + -- Place wall or ceiling + swap_node(p, {name = "mcl_core:cobble"}) + elseif ty < maxy - 1 then + -- Normally the openings are already clear, but not if it is a corner + -- widening. Make sure to clear at least the bottom 2 nodes of an opening. + if name ~= "air" then swap_node(p, {name = "air"}) end + elseif name ~= "air" then + -- This allows for variation between 2-node and 3-node high openings. + swap_node(p, {name = "mcl_core:cobble"}) + end + -- If it was an opening, the lower 3 blocks are not touched at all + + -- Room interiour else - -- 1 or multiple possible open directions: Choose random facedir - local face_to = surroundings[math.random(1, #surroundings)] - facedir = minetest.dir_to_facedir(vector.subtract(cpos, face_to)) + if (ty==y+1) and (tx==x+1 or tx==maxx-1 or tz==z+1 or tz==maxz-1) and (currentChest < totalChests + 1) and (chestSlots[currentChest] == chestSlotCounter) then + currentChest = currentChest + 1 + table_insert(chests, {x=tx, y=ty, z=tz}) + else + swap_node(p, {name = "air"}) + end + + local forChest = ty==y+1 and (tx==x+1 or tx==maxx-1 or tz==z+1 or tz==maxz-1) + + -- Place next chest at the wall (if it was its chosen wall slot) + if forChest and (currentChest < totalChests + 1) and (chestSlots[currentChest] == chestSlotCounter) then + currentChest = currentChest + 1 + table_insert(chests, {x=tx, y=ty, z=tz}) + -- else + --swap_node(p, {name = "air"}) + end + if forChest then + chestSlotCounter = chestSlotCounter + 1 + end end - chest_param2[c] = facedir + end + end end end + + for c=#chests, 1, -1 do + local pos = chests[c] + + local surroundings = {} + for s=1, #surround_vectors do + -- Detect the 4 horizontal neighbors + local spos = vector_add(pos, surround_vectors[s]) + local wpos = vector_subtract(pos, surround_vectors[s]) + local nodename = get_node(spos).name + local nodename2 = get_node(wpos).name + local nodedef = registered_nodes[nodename] + local nodedef2 = registered_nodes[nodename2] + -- The chest needs an open space in front of it and a walkable node (except chest) behind it + if nodedef and nodedef.walkable == false and nodedef2 and nodedef2.walkable == true and nodename2 ~= "mcl_chests:chest" then + table_insert(surroundings, spos) + end + end + -- Set param2 (=facedir) of this chest + local facedir + if #surroundings <= 0 then + -- Fallback if chest ended up in the middle of a room for some reason + facedir = pr:next(0, 0) + else + -- 1 or multiple possible open directions: Choose random facedir + local face_to = surroundings[pr:next(1, #surroundings)] + facedir = dir_to_facedir(vector_subtract(pos, face_to)) end - -- Finally generate the dungeons all at once (except the chests and the spawners) - vm:set_data(data) - vm:calc_lighting() - vm:update_liquids() - vm:write_to_map() + set_node(pos, {name="mcl_chests:chest", param2=facedir}) + local meta = get_meta(pos) - -- Chests are placed seperately - for c=1, #chest_posses do - local cpos = chest_posses[c] - minetest.set_node(cpos, {name="mcl_chests:chest", param2=chest_param2[c]}) - local meta = minetest.get_meta(cpos) - local inv = meta:get_inventory() - local items = get_loot() - mcl_loot.fill_inventory(inv, "main", items) - end - - -- Mob spawners are placed seperately, too - -- We don't want to destroy non-ground nodes - for s=1, #spawner_posses do - local sp = spawner_posses[s] - local n = minetest.get_name_from_content_id(data[area:index(sp.x,sp.y,sp.z)]) - if minetest.registered_nodes[n].is_ground_content then - - -- ... and place it and select a random mob - minetest.set_node(sp, {name = "mcl_mobspawners:spawner"}) - local mobs = { - "mobs_mc:zombie", - "mobs_mc:zombie", - "mobs_mc:spider", - "mobs_mc:skeleton", + local loottable = + { + { + stacks_min = 1, + stacks_max = 3, + items = { + { itemstring = "mcl_mobs:nametag", weight = 20 }, + { itemstring = "mcl_mobitems:saddle", weight = 20 }, + { itemstring = "mcl_jukebox:record_1", weight = 15 }, + { itemstring = "mcl_jukebox:record_4", weight = 15 }, + { itemstring = "mobs_mc:iron_horse_armor", weight = 15 }, + { itemstring = "mcl_core:apple_gold", weight = 15 }, + { itemstack = mcl_enchanting.get_uniform_randomly_enchanted_book({"soul_speed"}, pr), weight = 10 }, + { itemstring = "mobs_mc:gold_horse_armor", weight = 10 }, + { itemstring = "mobs_mc:diamond_horse_armor", weight = 5 }, + { itemstring = "mcl_core:apple_gold_enchanted", weight = 2 }, } - local spawner_mob = mobs[math.random(1, #mobs)] + }, + { + stacks_min = 1, + stacks_max = 4, + items = { + { itemstring = "mcl_farming:wheat_item", weight = 20, amount_min = 1, amount_max = 4 }, + { itemstring = "mcl_farming:bread", weight = 20 }, + { itemstring = "mcl_core:coal_lump", weight = 15, amount_min = 1, amount_max = 4 }, + { itemstring = "mesecons:redstone", weight = 15, amount_min = 1, amount_max = 4 }, + { itemstring = "mcl_farming:beetroot_seeds", weight = 10, amount_min = 2, amount_max = 4 }, + { itemstring = "mcl_farming:melon_seeds", weight = 10, amount_min = 2, amount_max = 4 }, + { itemstring = "mcl_farming:pumpkin_seeds", weight = 10, amount_min = 2, amount_max = 4 }, + { itemstring = "mcl_core:iron_ingot", weight = 10, amount_min = 1, amount_max = 4 }, + { itemstring = "mcl_buckets:bucket_empty", weight = 10 }, + { itemstring = "mcl_core:gold_ingot", weight = 5, amount_min = 1, amount_max = 4 }, + }, + }, + { + stacks_min = 3, + stacks_max = 3, + items = { + { itemstring = "mcl_mobitems:bone", weight = 10, amount_min = 1, amount_max = 8 }, + { itemstring = "mcl_mobitems:gunpowder", weight = 10, amount_min = 1, amount_max = 8 }, + { itemstring = "mcl_mobitems:rotten_flesh", weight = 10, amount_min = 1, amount_max = 8 }, + { itemstring = "mcl_mobitems:string", weight = 10, amount_min = 1, amount_max = 8 }, + }, + } + } - mcl_mobspawners.setup_spawner(sp, spawner_mob, 0, 7) - end + -- Bonus loot for v6 mapgen: Otherwise unobtainable saplings. + if mg_name == "v6" then + table_insert(loottable, { + stacks_min = 1, + stacks_max = 3, + items = { + { itemstring = "mcl_core:birchsapling", weight = 1, amount_min = 1, amount_max = 2 }, + { itemstring = "mcl_core:acaciasapling", weight = 1, amount_min = 1, amount_max = 2 }, + { itemstring = "", weight = 6 }, + }, + }) end + minetest.log("action", "[mcl_dungeons] Filling chest " .. tostring(c) .. " at " .. minetest.pos_to_string(pos)) + mcl_loot.fill_inventory(meta:get_inventory(), "main", mcl_loot.get_multi_loot(loottable, pr), pr) end -end) + -- Mob spawners are placed seperately, too + -- We don't want to destroy non-ground nodes + for s=#spawner_posses, 1, -1 do + local sp = spawner_posses[s] + -- ... and place it and select a random mob + set_node(sp, {name = "mcl_mobspawners:spawner"}) + local mobs = { + "mobs_mc:zombie", + "mobs_mc:zombie", + "mobs_mc:spider", + "mobs_mc:skeleton", + } + local spawner_mob = mobs[pr:next(1, #mobs)] + + mcl_mobspawners.setup_spawner(sp, spawner_mob, 0, 7) + end end + +local function dungeons_nodes(minp, maxp, blockseed) + local ymin, ymax = math_max(min_y, minp.y), math_min(max_y, maxp.y) + if ymax < ymin then return false end + local pr = PseudoRandom(blockseed) + for a=1, attempts do + local dim = dungeonsizes[pr:next(1, #dungeonsizes)] + local x = pr:next(minp.x, maxp.x-dim.x-1) + local y = pr:next(ymin , ymax -dim.y-1) + local z = pr:next(minp.z, maxp.z-dim.z-1) + local p1 = {x=x,y=y,z=z} + local p2 = {x = x+dim.x+1, y = y+dim.y+1, z = z+dim.z+1} + minetest.log("verbose","[mcl_dungeons] size=" ..minetest.pos_to_string(dim) .. ", emerge from "..minetest.pos_to_string(p1) .. " to " .. minetest.pos_to_string(p2)) + emerge_area(p1, p2, ecb_spawn_dungeon, {p1=p1, p2=p2, dim=dim, pr=pr}) + end +end + +function mcl_dungeons.spawn_dungeon(p1, _, pr) + if not p1 or not pr or not p1.x or not p1.y or not p1.z then return end + local dim = dungeonsizes[pr:next(1, #dungeonsizes)] + local p2 = {x = p1.x+dim.x+1, y = p1.y+dim.y+1, z = p1.z+dim.z+1} + minetest.log("verbose","[mcl_dungeons] size=" ..minetest.pos_to_string(dim) .. ", emerge from "..minetest.pos_to_string(p1) .. " to " .. minetest.pos_to_string(p2)) + emerge_area(p1, p2, ecb_spawn_dungeon, {p1=p1, p2=p2, dim=dim, pr=pr, dontcheck=true}) +end + +mcl_mapgen_core.register_generator("dungeons", nil, dungeons_nodes, 999999) diff --git a/mods/MAPGEN/mcl_dungeons/mod.conf b/mods/MAPGEN/mcl_dungeons/mod.conf index d6af72a27..fe02286fa 100644 --- a/mods/MAPGEN/mcl_dungeons/mod.conf +++ b/mods/MAPGEN/mcl_dungeons/mod.conf @@ -1 +1,4 @@ name = mcl_dungeons +author = Wuzzy +description = Generates random dungeons in the world +depends = mcl_init, mcl_core, mcl_chests, mcl_mobs, mcl_mobspawners, mcl_mapgen_core, mobs_mc diff --git a/mods/MAPGEN/mcl_end_island/init.lua b/mods/MAPGEN/mcl_end_island/init.lua new file mode 100644 index 000000000..730176257 --- /dev/null +++ b/mods/MAPGEN/mcl_end_island/init.lua @@ -0,0 +1,34 @@ +local noisemap = PerlinNoiseMap({ + offset = 0.5, + scale = 0.5, + spread = {x = 84, y = 84, z = 84}, + seed = minetest.get_mapgen_setting("seed") + 99999, + octaves = 4, + persist = 0.85, +}, {x = 151, y = 30, z = 151}):get_3d_map({x = 0, y = 0, z = 0}) + +local c_end_stone = minetest.get_content_id("mcl_end:end_stone") +local y_offset = -2 + +minetest.register_on_generated(function(minp, maxp) + if maxp.y < (-27025 + y_offset) or minp.y > (-27000 + y_offset + 4) or maxp.x < -75 or minp.x > 75 or maxp.z < -75 or minp.z > 75 then + return + end + + local vm, emin, emax = minetest.get_mapgen_object("voxelmanip") + local data = vm:get_data() + local area = VoxelArea:new({MinEdge = emin, MaxEdge = emax}) + + for idx in area:iter(math.max(minp.x, -75), math.max(minp.y, -27025 + y_offset + 4), math.max(minp.z, -75), math.min(maxp.x, 75), math.min(maxp.y, -27000 + y_offset), math.min(maxp.z, 75)) do + local pos = area:position(idx) + local y = 27025 + pos.y - y_offset + if noisemap[pos.x + 75 + 1][y + 1][pos.z + 75 + 1] > (math.abs(1 - y / 25) ^ 2 + math.abs(pos.x / 75) ^ 2 + math.abs(pos.z / 75) ^ 2) then + data[idx] = c_end_stone + end + end + + vm:set_data(data) + vm:calc_lighting() + vm:update_liquids() + vm:write_to_map() +end) diff --git a/mods/MAPGEN/mcl_end_island/mod.conf b/mods/MAPGEN/mcl_end_island/mod.conf new file mode 100644 index 000000000..90432792c --- /dev/null +++ b/mods/MAPGEN/mcl_end_island/mod.conf @@ -0,0 +1,4 @@ +name = mcl_end_island +author = Fleckenstein +depends = mcl_mapgen_core, mcl_end +description = Generate the end main island for MCL2 diff --git a/mods/MAPGEN/mcl_mapgen_core/depends.txt b/mods/MAPGEN/mcl_mapgen_core/depends.txt deleted file mode 100644 index 4aa96f053..000000000 --- a/mods/MAPGEN/mcl_mapgen_core/depends.txt +++ /dev/null @@ -1,11 +0,0 @@ -mcl_init -mcl_core -biomeinfo -mclx_core? -mcl_worlds -mcl_cocoas -mcl_sponges -mcl_ocean -mcl_stairs -mcl_monster_eggs -mcl_structures diff --git a/mods/MAPGEN/mcl_mapgen_core/init.lua b/mods/MAPGEN/mcl_mapgen_core/init.lua index e292ac25d..41bee508b 100644 --- a/mods/MAPGEN/mcl_mapgen_core/init.lua +++ b/mods/MAPGEN/mcl_mapgen_core/init.lua @@ -1,3 +1,9 @@ +mcl_mapgen_core = {} +local registered_generators = {} + +local lvm, nodes, param2 = 0, 0, 0 +local lvm_buffer = {} + -- -- Aliases for map generator outputs -- @@ -48,12 +54,8 @@ local superflat = mg_name == "flat" and minetest.get_mapgen_setting("mcl_superfl local WITCH_HUT_HEIGHT = 3 -- Exact Y level to spawn witch huts at. This height refers to the height of the floor --- End exit portal position. This is temporary. --- TODO: Remove the exit portal generation when the ender dragon has been implemented. -local END_EXIT_PORTAL_POS = table.copy(mcl_vars.mg_end_platform_pos) -END_EXIT_PORTAL_POS.x = END_EXIT_PORTAL_POS.x - 30 -END_EXIT_PORTAL_POS.z = END_EXIT_PORTAL_POS.z - 3 -END_EXIT_PORTAL_POS.y = END_EXIT_PORTAL_POS.y - 3 +-- End exit portal position +local END_EXIT_PORTAL_POS = vector.new(-3, -27003, -3) -- Content IDs local c_bedrock = minetest.get_content_id("mcl_core:bedrock") @@ -63,21 +65,21 @@ local c_dirt = minetest.get_content_id("mcl_core:dirt") local c_dirt_with_grass = minetest.get_content_id("mcl_core:dirt_with_grass") local c_dirt_with_grass_snow = minetest.get_content_id("mcl_core:dirt_with_grass_snow") local c_sand = minetest.get_content_id("mcl_core:sand") -local c_sandstone = minetest.get_content_id("mcl_core:sandstone") +--local c_sandstone = minetest.get_content_id("mcl_core:sandstone") local c_void = minetest.get_content_id("mcl_core:void") local c_lava = minetest.get_content_id("mcl_core:lava_source") local c_water = minetest.get_content_id("mcl_core:water_source") local c_soul_sand = minetest.get_content_id("mcl_nether:soul_sand") local c_netherrack = minetest.get_content_id("mcl_nether:netherrack") local c_nether_lava = minetest.get_content_id("mcl_nether:nether_lava_source") -local c_end_stone = minetest.get_content_id("mcl_end:end_stone") +--local c_end_stone = minetest.get_content_id("mcl_end:end_stone") local c_realm_barrier = minetest.get_content_id("mcl_core:realm_barrier") local c_top_snow = minetest.get_content_id("mcl_core:snow") local c_snow_block = minetest.get_content_id("mcl_core:snowblock") local c_clay = minetest.get_content_id("mcl_core:clay") local c_leaves = minetest.get_content_id("mcl_core:leaves") local c_jungleleaves = minetest.get_content_id("mcl_core:jungleleaves") -local c_jungletree = minetest.get_content_id("mcl_core:jungletree") +--local c_jungletree = minetest.get_content_id("mcl_core:jungletree") local c_cocoa_1 = minetest.get_content_id("mcl_cocoas:cocoa_1") local c_cocoa_2 = minetest.get_content_id("mcl_cocoas:cocoa_2") local c_cocoa_3 = minetest.get_content_id("mcl_cocoas:cocoa_3") @@ -101,6 +103,16 @@ for s=1, #specialstones do clust_size = 5, y_min = mcl_vars.mg_overworld_min, y_max = mcl_vars.mg_overworld_max, + noise_params = { + offset = 0, + scale = 1, + spread = {x=250, y=250, z=250}, + seed = 12345, + octaves = 3, + persist = 0.6, + lacunarity = 2, + flags = "defaults", + } }) minetest.register_ore({ ore_type = "blob", @@ -111,6 +123,16 @@ for s=1, #specialstones do clust_size = 7, y_min = mcl_vars.mg_overworld_min, y_max = mcl_vars.mg_overworld_max, + noise_params = { + offset = 0, + scale = 1, + spread = {x=250, y=250, z=250}, + seed = 12345, + octaves = 3, + persist = 0.6, + lacunarity = 2, + flags = "defaults", + } }) end @@ -126,6 +148,16 @@ minetest.register_ore({ clust_size = 4, y_min = mcl_vars.mg_overworld_min, y_max = mcl_vars.mg_overworld_max, + noise_params = { + offset = 0, + scale = 1, + spread = {x=250, y=250, z=250}, + seed = 12345, + octaves = 3, + persist = 0.6, + lacunarity = 2, + flags = "defaults", + } }) -- Gravel @@ -138,417 +170,429 @@ minetest.register_ore({ clust_size = 5, y_min = mcl_vars.mg_overworld_min, y_max = mcl_worlds.layer_to_y(111), + noise_params = { + offset = 0, + scale = 1, + spread = {x=250, y=250, z=250}, + seed = 12345, + octaves = 3, + persist = 0.6, + lacunarity = 2, + flags = "defaults", + } }) --- --- Coal --- - --- Common spawn -minetest.register_ore({ - ore_type = "scatter", - ore = "mcl_core:stone_with_coal", - wherein = stonelike, - clust_scarcity = 525*3, - clust_num_ores = 5, - clust_size = 3, - y_min = mcl_vars.mg_overworld_min, - y_max = mcl_worlds.layer_to_y(50), -}) -minetest.register_ore({ - ore_type = "scatter", - ore = "mcl_core:stone_with_coal", - wherein = stonelike, - clust_scarcity = 510*3, - clust_num_ores = 8, - clust_size = 3, - y_min = mcl_vars.mg_overworld_min, - y_max = mcl_worlds.layer_to_y(50), -}) -minetest.register_ore({ - ore_type = "scatter", - ore = "mcl_core:stone_with_coal", - wherein = stonelike, - clust_scarcity = 500*3, - clust_num_ores = 12, - clust_size = 3, - y_min = mcl_vars.mg_overworld_min, - y_max = mcl_worlds.layer_to_y(50), -}) - --- Medium-rare spawn -minetest.register_ore({ - ore_type = "scatter", - ore = "mcl_core:stone_with_coal", - wherein = stonelike, - clust_scarcity = 550*3, - clust_num_ores = 4, - clust_size = 2, - y_min = mcl_worlds.layer_to_y(51), - y_max = mcl_worlds.layer_to_y(80), -}) -minetest.register_ore({ - ore_type = "scatter", - ore = "mcl_core:stone_with_coal", - wherein = stonelike, - clust_scarcity = 525*3, - clust_num_ores = 6, - clust_size = 3, - y_min = mcl_worlds.layer_to_y(51), - y_max = mcl_worlds.layer_to_y(80), -}) -minetest.register_ore({ - ore_type = "scatter", - ore = "mcl_core:stone_with_coal", - wherein = stonelike, - clust_scarcity = 500*3, - clust_num_ores = 8, - clust_size = 3, - y_min = mcl_worlds.layer_to_y(51), - y_max = mcl_worlds.layer_to_y(80), -}) - --- Rare spawn -minetest.register_ore({ - ore_type = "scatter", - ore = "mcl_core:stone_with_coal", - wherein = stonelike, - clust_scarcity = 600*3, - clust_num_ores = 3, - clust_size = 2, - y_min = mcl_worlds.layer_to_y(81), - y_max = mcl_worlds.layer_to_y(128), -}) -minetest.register_ore({ - ore_type = "scatter", - ore = "mcl_core:stone_with_coal", - wherein = stonelike, - clust_scarcity = 550*3, - clust_num_ores = 4, - clust_size = 3, - y_min = mcl_worlds.layer_to_y(81), - y_max = mcl_worlds.layer_to_y(128), -}) -minetest.register_ore({ - ore_type = "scatter", - ore = "mcl_core:stone_with_coal", - wherein = stonelike, - clust_scarcity = 500*3, - clust_num_ores = 5, - clust_size = 3, - y_min = mcl_worlds.layer_to_y(81), - y_max = mcl_worlds.layer_to_y(128), -}) - --- --- Iron --- -minetest.register_ore({ - ore_type = "scatter", - ore = "mcl_core:stone_with_iron", - wherein = stonelike, - clust_scarcity = 830, - clust_num_ores = 5, - clust_size = 3, - y_min = mcl_vars.mg_overworld_min, - y_max = mcl_worlds.layer_to_y(39), -}) -minetest.register_ore({ - ore_type = "scatter", - ore = "mcl_core:stone_with_iron", - wherein = stonelike, - clust_scarcity = 1660, - clust_num_ores = 4, - clust_size = 2, - y_min = mcl_worlds.layer_to_y(40), - y_max = mcl_worlds.layer_to_y(63), -}) - --- --- Gold --- - --- Common spawn -minetest.register_ore({ - ore_type = "scatter", - ore = "mcl_core:stone_with_gold", - wherein = stonelike, - clust_scarcity = 4775, - clust_num_ores = 5, - clust_size = 3, - y_min = mcl_vars.mg_overworld_min, - y_max = mcl_worlds.layer_to_y(30), -}) -minetest.register_ore({ - ore_type = "scatter", - ore = "mcl_core:stone_with_gold", - wherein = stonelike, - clust_scarcity = 6560, - clust_num_ores = 7, - clust_size = 3, - y_min = mcl_vars.mg_overworld_min, - y_max = mcl_worlds.layer_to_y(30), -}) - --- Rare spawn -minetest.register_ore({ - ore_type = "scatter", - ore = "mcl_core:stone_with_gold", - wherein = stonelike, - clust_scarcity = 13000, - clust_num_ores = 4, - clust_size = 2, - y_min = mcl_worlds.layer_to_y(31), - y_max = mcl_worlds.layer_to_y(33), -}) - --- --- Diamond --- - --- Common spawn -minetest.register_ore({ - ore_type = "scatter", - ore = "mcl_core:stone_with_diamond", - wherein = stonelike, - clust_scarcity = 10000, - clust_num_ores = 4, - clust_size = 3, - y_min = mcl_vars.mg_overworld_min, - y_max = mcl_worlds.layer_to_y(12), -}) -minetest.register_ore({ - ore_type = "scatter", - ore = "mcl_core:stone_with_diamond", - wherein = stonelike, - clust_scarcity = 5000, - clust_num_ores = 2, - clust_size = 2, - y_min = mcl_vars.mg_overworld_min, - y_max = mcl_worlds.layer_to_y(12), -}) -minetest.register_ore({ - ore_type = "scatter", - ore = "mcl_core:stone_with_diamond", - wherein = stonelike, - clust_scarcity = 10000, - clust_num_ores = 8, - clust_size = 3, - y_min = mcl_vars.mg_overworld_min, - y_max = mcl_worlds.layer_to_y(12), -}) - --- Rare spawn -minetest.register_ore({ - ore_type = "scatter", - ore = "mcl_core:stone_with_diamond", - wherein = stonelike, - clust_scarcity = 20000, - clust_num_ores = 1, - clust_size = 1, - y_min = mcl_worlds.layer_to_y(13), - y_max = mcl_worlds.layer_to_y(15), -}) -minetest.register_ore({ - ore_type = "scatter", - ore = "mcl_core:stone_with_diamond", - wherein = stonelike, - clust_scarcity = 20000, - clust_num_ores = 2, - clust_size = 2, - y_min = mcl_worlds.layer_to_y(13), - y_max = mcl_worlds.layer_to_y(15), -}) - --- --- Redstone --- - --- Common spawn -minetest.register_ore({ - ore_type = "scatter", - ore = "mcl_core:stone_with_redstone", - wherein = stonelike, - clust_scarcity = 500, - clust_num_ores = 4, - clust_size = 3, - y_min = mcl_vars.mg_overworld_min, - y_max = mcl_worlds.layer_to_y(13), -}) -minetest.register_ore({ - ore_type = "scatter", - ore = "mcl_core:stone_with_redstone", - wherein = stonelike, - clust_scarcity = 800, - clust_num_ores = 7, - clust_size = 4, - y_min = mcl_vars.mg_overworld_min, - y_max = mcl_worlds.layer_to_y(13), -}) - --- Rare spawn -minetest.register_ore({ - ore_type = "scatter", - ore = "mcl_core:stone_with_redstone", - wherein = stonelike, - clust_scarcity = 1000, - clust_num_ores = 4, - clust_size = 3, - y_min = mcl_worlds.layer_to_y(13), - y_max = mcl_worlds.layer_to_y(15), -}) -minetest.register_ore({ - ore_type = "scatter", - ore = "mcl_core:stone_with_redstone", - wherein = stonelike, - clust_scarcity = 1600, - clust_num_ores = 7, - clust_size = 4, - y_min = mcl_worlds.layer_to_y(13), - y_max = mcl_worlds.layer_to_y(15), -}) - --- --- Emerald --- - -if mg_name == "v6" then - -- Generate everywhere in v6, but rarely. +if minetest.settings:get_bool("mcl_generate_ores", true) then + -- + -- Coal + -- -- Common spawn minetest.register_ore({ ore_type = "scatter", - ore = "mcl_core:stone_with_emerald", + ore = "mcl_core:stone_with_coal", wherein = stonelike, - clust_scarcity = 14340, - clust_num_ores = 1, - clust_size = 1, + clust_scarcity = 525*3, + clust_num_ores = 5, + clust_size = 3, y_min = mcl_vars.mg_overworld_min, - y_max = mcl_worlds.layer_to_y(29), + y_max = mcl_worlds.layer_to_y(50), }) + minetest.register_ore({ + ore_type = "scatter", + ore = "mcl_core:stone_with_coal", + wherein = stonelike, + clust_scarcity = 510*3, + clust_num_ores = 8, + clust_size = 3, + y_min = mcl_vars.mg_overworld_min, + y_max = mcl_worlds.layer_to_y(50), + }) + minetest.register_ore({ + ore_type = "scatter", + ore = "mcl_core:stone_with_coal", + wherein = stonelike, + clust_scarcity = 500*3, + clust_num_ores = 12, + clust_size = 3, + y_min = mcl_vars.mg_overworld_min, + y_max = mcl_worlds.layer_to_y(50), + }) + + -- Medium-rare spawn + minetest.register_ore({ + ore_type = "scatter", + ore = "mcl_core:stone_with_coal", + wherein = stonelike, + clust_scarcity = 550*3, + clust_num_ores = 4, + clust_size = 2, + y_min = mcl_worlds.layer_to_y(51), + y_max = mcl_worlds.layer_to_y(80), + }) + minetest.register_ore({ + ore_type = "scatter", + ore = "mcl_core:stone_with_coal", + wherein = stonelike, + clust_scarcity = 525*3, + clust_num_ores = 6, + clust_size = 3, + y_min = mcl_worlds.layer_to_y(51), + y_max = mcl_worlds.layer_to_y(80), + }) + minetest.register_ore({ + ore_type = "scatter", + ore = "mcl_core:stone_with_coal", + wherein = stonelike, + clust_scarcity = 500*3, + clust_num_ores = 8, + clust_size = 3, + y_min = mcl_worlds.layer_to_y(51), + y_max = mcl_worlds.layer_to_y(80), + }) + -- Rare spawn minetest.register_ore({ ore_type = "scatter", - ore = "mcl_core:stone_with_emerald", - wherein = stonelike, - clust_scarcity = 21510, + ore = "mcl_core:stone_with_coal", + wherein = stonelike, + clust_scarcity = 600*3, + clust_num_ores = 3, + clust_size = 2, + y_min = mcl_worlds.layer_to_y(81), + y_max = mcl_worlds.layer_to_y(128), + }) + minetest.register_ore({ + ore_type = "scatter", + ore = "mcl_core:stone_with_coal", + wherein = stonelike, + clust_scarcity = 550*3, + clust_num_ores = 4, + clust_size = 3, + y_min = mcl_worlds.layer_to_y(81), + y_max = mcl_worlds.layer_to_y(128), + }) + minetest.register_ore({ + ore_type = "scatter", + ore = "mcl_core:stone_with_coal", + wherein = stonelike, + clust_scarcity = 500*3, + clust_num_ores = 5, + clust_size = 3, + y_min = mcl_worlds.layer_to_y(81), + y_max = mcl_worlds.layer_to_y(128), + }) + + -- + -- Iron + -- + minetest.register_ore({ + ore_type = "scatter", + ore = "mcl_core:stone_with_iron", + wherein = stonelike, + clust_scarcity = 830, + clust_num_ores = 5, + clust_size = 3, + y_min = mcl_vars.mg_overworld_min, + y_max = mcl_worlds.layer_to_y(39), + }) + minetest.register_ore({ + ore_type = "scatter", + ore = "mcl_core:stone_with_iron", + wherein = stonelike, + clust_scarcity = 1660, + clust_num_ores = 4, + clust_size = 2, + y_min = mcl_worlds.layer_to_y(40), + y_max = mcl_worlds.layer_to_y(63), + }) + + -- + -- Gold + -- + + -- Common spawn + minetest.register_ore({ + ore_type = "scatter", + ore = "mcl_core:stone_with_gold", + wherein = stonelike, + clust_scarcity = 4775, + clust_num_ores = 5, + clust_size = 3, + y_min = mcl_vars.mg_overworld_min, + y_max = mcl_worlds.layer_to_y(30), + }) + minetest.register_ore({ + ore_type = "scatter", + ore = "mcl_core:stone_with_gold", + wherein = stonelike, + clust_scarcity = 6560, + clust_num_ores = 7, + clust_size = 3, + y_min = mcl_vars.mg_overworld_min, + y_max = mcl_worlds.layer_to_y(30), + }) + + -- Rare spawn + minetest.register_ore({ + ore_type = "scatter", + ore = "mcl_core:stone_with_gold", + wherein = stonelike, + clust_scarcity = 13000, + clust_num_ores = 4, + clust_size = 2, + y_min = mcl_worlds.layer_to_y(31), + y_max = mcl_worlds.layer_to_y(33), + }) + + -- + -- Diamond + -- + + -- Common spawn + minetest.register_ore({ + ore_type = "scatter", + ore = "mcl_core:stone_with_diamond", + wherein = stonelike, + clust_scarcity = 10000, + clust_num_ores = 4, + clust_size = 3, + y_min = mcl_vars.mg_overworld_min, + y_max = mcl_worlds.layer_to_y(12), + }) + minetest.register_ore({ + ore_type = "scatter", + ore = "mcl_core:stone_with_diamond", + wherein = stonelike, + clust_scarcity = 5000, + clust_num_ores = 2, + clust_size = 2, + y_min = mcl_vars.mg_overworld_min, + y_max = mcl_worlds.layer_to_y(12), + }) + minetest.register_ore({ + ore_type = "scatter", + ore = "mcl_core:stone_with_diamond", + wherein = stonelike, + clust_scarcity = 10000, + clust_num_ores = 8, + clust_size = 3, + y_min = mcl_vars.mg_overworld_min, + y_max = mcl_worlds.layer_to_y(12), + }) + + -- Rare spawn + minetest.register_ore({ + ore_type = "scatter", + ore = "mcl_core:stone_with_diamond", + wherein = stonelike, + clust_scarcity = 20000, clust_num_ores = 1, clust_size = 1, - y_min = mcl_worlds.layer_to_y(30), + y_min = mcl_worlds.layer_to_y(13), + y_max = mcl_worlds.layer_to_y(15), + }) + minetest.register_ore({ + ore_type = "scatter", + ore = "mcl_core:stone_with_diamond", + wherein = stonelike, + clust_scarcity = 20000, + clust_num_ores = 2, + clust_size = 2, + y_min = mcl_worlds.layer_to_y(13), + y_max = mcl_worlds.layer_to_y(15), + }) + + -- + -- Redstone + -- + + -- Common spawn + minetest.register_ore({ + ore_type = "scatter", + ore = "mcl_core:stone_with_redstone", + wherein = stonelike, + clust_scarcity = 500, + clust_num_ores = 4, + clust_size = 3, + y_min = mcl_vars.mg_overworld_min, + y_max = mcl_worlds.layer_to_y(13), + }) + minetest.register_ore({ + ore_type = "scatter", + ore = "mcl_core:stone_with_redstone", + wherein = stonelike, + clust_scarcity = 800, + clust_num_ores = 7, + clust_size = 4, + y_min = mcl_vars.mg_overworld_min, + y_max = mcl_worlds.layer_to_y(13), + }) + + -- Rare spawn + minetest.register_ore({ + ore_type = "scatter", + ore = "mcl_core:stone_with_redstone", + wherein = stonelike, + clust_scarcity = 1000, + clust_num_ores = 4, + clust_size = 3, + y_min = mcl_worlds.layer_to_y(13), + y_max = mcl_worlds.layer_to_y(15), + }) + minetest.register_ore({ + ore_type = "scatter", + ore = "mcl_core:stone_with_redstone", + wherein = stonelike, + clust_scarcity = 1600, + clust_num_ores = 7, + clust_size = 4, + y_min = mcl_worlds.layer_to_y(13), + y_max = mcl_worlds.layer_to_y(15), + }) + + -- + -- Emerald + -- + + if mg_name == "v6" then + -- Generate everywhere in v6, but rarely. + + -- Common spawn + minetest.register_ore({ + ore_type = "scatter", + ore = "mcl_core:stone_with_emerald", + wherein = stonelike, + clust_scarcity = 14340, + clust_num_ores = 1, + clust_size = 1, + y_min = mcl_vars.mg_overworld_min, + y_max = mcl_worlds.layer_to_y(29), + }) + -- Rare spawn + minetest.register_ore({ + ore_type = "scatter", + ore = "mcl_core:stone_with_emerald", + wherein = stonelike, + clust_scarcity = 21510, + clust_num_ores = 1, + clust_size = 1, + y_min = mcl_worlds.layer_to_y(30), + y_max = mcl_worlds.layer_to_y(32), + }) + end + + -- + -- Lapis Lazuli + -- + + -- Common spawn (in the center) + minetest.register_ore({ + ore_type = "scatter", + ore = "mcl_core:stone_with_lapis", + wherein = stonelike, + clust_scarcity = 10000, + clust_num_ores = 7, + clust_size = 4, + y_min = mcl_worlds.layer_to_y(14), + y_max = mcl_worlds.layer_to_y(16), + }) + + -- Rare spawn (below center) + minetest.register_ore({ + ore_type = "scatter", + ore = "mcl_core:stone_with_lapis", + wherein = stonelike, + clust_scarcity = 12000, + clust_num_ores = 6, + clust_size = 3, + y_min = mcl_worlds.layer_to_y(10), + y_max = mcl_worlds.layer_to_y(13), + }) + minetest.register_ore({ + ore_type = "scatter", + ore = "mcl_core:stone_with_lapis", + wherein = stonelike, + clust_scarcity = 14000, + clust_num_ores = 5, + clust_size = 3, + y_min = mcl_worlds.layer_to_y(6), + y_max = mcl_worlds.layer_to_y(9), + }) + minetest.register_ore({ + ore_type = "scatter", + ore = "mcl_core:stone_with_lapis", + wherein = stonelike, + clust_scarcity = 16000, + clust_num_ores = 4, + clust_size = 3, + y_min = mcl_worlds.layer_to_y(2), + y_max = mcl_worlds.layer_to_y(5), + }) + minetest.register_ore({ + ore_type = "scatter", + ore = "mcl_core:stone_with_lapis", + wherein = stonelike, + clust_scarcity = 18000, + clust_num_ores = 3, + clust_size = 2, + y_min = mcl_worlds.layer_to_y(0), + y_max = mcl_worlds.layer_to_y(2), + }) + + -- Rare spawn (above center) + minetest.register_ore({ + ore_type = "scatter", + ore = "mcl_core:stone_with_lapis", + wherein = stonelike, + clust_scarcity = 12000, + clust_num_ores = 6, + clust_size = 3, + y_min = mcl_worlds.layer_to_y(17), + y_max = mcl_worlds.layer_to_y(20), + }) + minetest.register_ore({ + ore_type = "scatter", + ore = "mcl_core:stone_with_lapis", + wherein = stonelike, + clust_scarcity = 14000, + clust_num_ores = 5, + clust_size = 3, + y_min = mcl_worlds.layer_to_y(21), + y_max = mcl_worlds.layer_to_y(24), + }) + minetest.register_ore({ + ore_type = "scatter", + ore = "mcl_core:stone_with_lapis", + wherein = stonelike, + clust_scarcity = 16000, + clust_num_ores = 4, + clust_size = 3, + y_min = mcl_worlds.layer_to_y(25), + y_max = mcl_worlds.layer_to_y(28), + }) + minetest.register_ore({ + ore_type = "scatter", + ore = "mcl_core:stone_with_lapis", + wherein = stonelike, + clust_scarcity = 18000, + clust_num_ores = 3, + clust_size = 2, + y_min = mcl_worlds.layer_to_y(29), + y_max = mcl_worlds.layer_to_y(32), + }) + minetest.register_ore({ + ore_type = "scatter", + ore = "mcl_core:stone_with_lapis", + wherein = stonelike, + clust_scarcity = 32000, + clust_num_ores = 1, + clust_size = 1, + y_min = mcl_worlds.layer_to_y(31), y_max = mcl_worlds.layer_to_y(32), }) end --- --- Lapis Lazuli --- - --- Common spawn (in the center) -minetest.register_ore({ - ore_type = "scatter", - ore = "mcl_core:stone_with_lapis", - wherein = stonelike, - clust_scarcity = 10000, - clust_num_ores = 7, - clust_size = 4, - y_min = mcl_worlds.layer_to_y(14), - y_max = mcl_worlds.layer_to_y(16), -}) - --- Rare spawn (below center) -minetest.register_ore({ - ore_type = "scatter", - ore = "mcl_core:stone_with_lapis", - wherein = stonelike, - clust_scarcity = 12000, - clust_num_ores = 6, - clust_size = 3, - y_min = mcl_worlds.layer_to_y(10), - y_max = mcl_worlds.layer_to_y(13), -}) -minetest.register_ore({ - ore_type = "scatter", - ore = "mcl_core:stone_with_lapis", - wherein = stonelike, - clust_scarcity = 14000, - clust_num_ores = 5, - clust_size = 3, - y_min = mcl_worlds.layer_to_y(6), - y_max = mcl_worlds.layer_to_y(9), -}) -minetest.register_ore({ - ore_type = "scatter", - ore = "mcl_core:stone_with_lapis", - wherein = stonelike, - clust_scarcity = 16000, - clust_num_ores = 4, - clust_size = 3, - y_min = mcl_worlds.layer_to_y(2), - y_max = mcl_worlds.layer_to_y(5), -}) -minetest.register_ore({ - ore_type = "scatter", - ore = "mcl_core:stone_with_lapis", - wherein = stonelike, - clust_scarcity = 18000, - clust_num_ores = 3, - clust_size = 2, - y_min = mcl_worlds.layer_to_y(0), - y_max = mcl_worlds.layer_to_y(2), -}) - --- Rare spawn (above center) -minetest.register_ore({ - ore_type = "scatter", - ore = "mcl_core:stone_with_lapis", - wherein = stonelike, - clust_scarcity = 12000, - clust_num_ores = 6, - clust_size = 3, - y_min = mcl_worlds.layer_to_y(17), - y_max = mcl_worlds.layer_to_y(20), -}) -minetest.register_ore({ - ore_type = "scatter", - ore = "mcl_core:stone_with_lapis", - wherein = stonelike, - clust_scarcity = 14000, - clust_num_ores = 5, - clust_size = 3, - y_min = mcl_worlds.layer_to_y(21), - y_max = mcl_worlds.layer_to_y(24), -}) -minetest.register_ore({ - ore_type = "scatter", - ore = "mcl_core:stone_with_lapis", - wherein = stonelike, - clust_scarcity = 16000, - clust_num_ores = 4, - clust_size = 3, - y_min = mcl_worlds.layer_to_y(25), - y_max = mcl_worlds.layer_to_y(28), -}) -minetest.register_ore({ - ore_type = "scatter", - ore = "mcl_core:stone_with_lapis", - wherein = stonelike, - clust_scarcity = 18000, - clust_num_ores = 3, - clust_size = 2, - y_min = mcl_worlds.layer_to_y(29), - y_max = mcl_worlds.layer_to_y(32), -}) -minetest.register_ore({ - ore_type = "scatter", - ore = "mcl_core:stone_with_lapis", - wherein = stonelike, - clust_scarcity = 32000, - clust_num_ores = 1, - clust_size = 1, - y_min = mcl_worlds.layer_to_y(31), - y_max = mcl_worlds.layer_to_y(32), -}) - if not superflat then -- Water and lava springs (single blocks of lava/water source) -- Water appears at nearly every height, but not near the bottom @@ -721,7 +765,7 @@ local function register_mgv6_decorations() }) -- Large flowers - local register_large_flower = function(name, seed, offset) + local function register_large_flower(name, seed, offset) minetest.register_decoration({ deco_type = "schematic", schematic = { @@ -1125,18 +1169,18 @@ end -- minp and maxp (from an on_generated callback) and returns the real world coordinates -- as X, Z. -- Inverse function of xz_to_biomemap -local biomemap_to_xz = function(index, minp, maxp) +--[[local function biomemap_to_xz(index, minp, maxp) local xwidth = maxp.x - minp.x + 1 local zwidth = maxp.z - minp.z + 1 local x = ((index-1) % xwidth) + minp.x local z = ((index-1) / zwidth) + minp.z return x, z -end +end]] -- Takes x and z coordinates and minp and maxp of a generated chunk -- (in on_generated callback) and returns a biomemap index) -- Inverse function of biomemap_to_xz -local xz_to_biomemap_index = function(x, z, minp, maxp) +local function xz_to_biomemap_index(x, z, minp, maxp) local xwidth = maxp.x - minp.x + 1 local zwidth = maxp.z - minp.z + 1 local minix = x % xwidth @@ -1150,12 +1194,14 @@ local perlin_structures local perlin_vines, perlin_vines_fine, perlin_vines_upwards, perlin_vines_length, perlin_vines_density local perlin_clay -local function generate_clay(minp, maxp, seed, voxelmanip_data, voxelmanip_area, lvm_used) +local function generate_clay(minp, maxp, blockseed, voxelmanip_data, voxelmanip_area, lvm_used) -- TODO: Make clay generation reproducible for same seed. if maxp.y < -5 or minp.y > 0 then return lvm_used end + local pr = PseudoRandom(blockseed) + perlin_clay = perlin_clay or minetest.get_perlin({ offset = 0.5, scale = 0.2, @@ -1172,18 +1218,18 @@ local function generate_clay(minp, maxp, seed, voxelmanip_data, voxelmanip_area, for divx=0+1,divs-2 do for divz=0+1,divs-2 do -- Get position and shift it a bit randomly so the clay do not obviously appear in a grid - local cx = minp.x + math.floor((divx+0.5)*divlen) + math.random(-1,1) - local cz = minp.z + math.floor((divz+0.5)*divlen) + math.random(-1,1) + local cx = minp.x + math.floor((divx+0.5)*divlen) + pr:next(-1,1) + local cz = minp.z + math.floor((divz+0.5)*divlen) + pr:next(-1,1) local water_pos = voxelmanip_area:index(cx, y+1, cz) local waternode = voxelmanip_data[water_pos] local surface_pos = voxelmanip_area:index(cx, y, cz) local surfacenode = voxelmanip_data[surface_pos] - local genrnd = math.random(1, 20) + local genrnd = pr:next(1, 20) if genrnd == 1 and perlin_clay:get_3d({x=cx,y=y,z=cz}) > 0 and waternode == c_water and (surfacenode == c_dirt or minetest.get_item_group(minetest.get_name_from_content_id(surfacenode), "sand") == 1) then - local diamondsize = math.random(1, 3) + local diamondsize = pr:next(1, 3) for x1 = -diamondsize, diamondsize do for z1 = -(diamondsize - math.abs(x1)), diamondsize - math.abs(x1) do local ccpos = voxelmanip_area:index(cx+x1, y, cz+z1) @@ -1201,38 +1247,47 @@ local function generate_clay(minp, maxp, seed, voxelmanip_data, voxelmanip_area, return lvm_used end +local function generate_end_exit_portal(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 + -- TODO: Try to use more efficient structure generating code -local function generate_structures(minp, maxp, seed, biomemap) +local function generate_structures(minp, maxp, blockseed, biomemap) local chunk_has_desert_well = false local chunk_has_desert_temple = false local chunk_has_igloo = false - local struct_min, struct_max = -3, 64 + local struct_min, struct_max = -3, 111 --64 + if maxp.y >= struct_min and minp.y <= struct_max then -- Generate structures - + local pr = PcgRandom(blockseed) perlin_structures = perlin_structures or minetest.get_perlin(329, 3, 0.6, 100) -- Assume X and Z lengths are equal local divlen = 5 - local divs = (maxp.x-minp.x)/divlen+1; - for divx=0,divs-1 do - for divz=0,divs-1 do - local x0 = minp.x + math.floor((divx+0)*divlen) - local z0 = minp.z + math.floor((divz+0)*divlen) - local x1 = minp.x + math.floor((divx+1)*divlen) - local z1 = minp.z + math.floor((divz+1)*divlen) + for x0 = minp.x, maxp.x, divlen do for z0 = minp.z, maxp.z, divlen do -- Determine amount from perlin noise local amount = math.floor(perlin_structures:get_2d({x=x0, y=z0}) * 9) -- Find random positions based on this random - local pr = PseudoRandom(seed+1) + local p, ground_y for i=0, amount do - local x = pr:next(x0, x1) - local z = pr:next(z0, z1) + p = {x = pr:next(x0, x0+divlen-1), y = 0, z = pr:next(z0, z0+divlen-1)} -- Find ground level - local ground_y = nil + ground_y = nil + local nn for y = struct_max, struct_min, -1 do - local checknode = minetest.get_node_or_nil({x=x,y=y,z=z}) + p.y = y + local checknode = minetest.get_node(p) if checknode then - local def = minetest.registered_nodes[checknode.name] + nn = checknode.name + local def = minetest.registered_nodes[nn] if def and def.walkable then ground_y = y break @@ -1241,21 +1296,17 @@ local function generate_structures(minp, maxp, seed, biomemap) end if ground_y then - local p = {x=x,y=ground_y+1,z=z} - local nn = minetest.get_node(p).name + p.y = ground_y+1 + local nn0 = minetest.get_node(p).name -- Check if the node can be replaced - if minetest.registered_nodes[nn] and - minetest.registered_nodes[nn].buildable_to then - nn = minetest.get_node({x=x,y=ground_y,z=z}).name - local struct = false - + if minetest.registered_nodes[nn0] and minetest.registered_nodes[nn0].buildable_to then -- Desert temples and desert wells if nn == "mcl_core:sand" or (nn == "mcl_core:sandstone") then if not chunk_has_desert_temple and not chunk_has_desert_well and ground_y > 3 then -- Spawn desert temple -- TODO: Check surface - if math.random(1,12000) == 1 then - mcl_structures.call_struct(p, "desert_temple") + if pr:next(1,12000) == 1 then + mcl_structures.call_struct(p, "desert_temple", nil, pr) chunk_has_desert_temple = true end end @@ -1263,11 +1314,11 @@ local function generate_structures(minp, maxp, seed, biomemap) local desert_well_prob = minecraft_chunk_probability(1000, minp, maxp) -- Spawn desert well - if math.random(1, desert_well_prob) == 1 then + if pr:next(1, desert_well_prob) == 1 then -- Check surface local surface = minetest.find_nodes_in_area({x=p.x,y=p.y-1,z=p.z}, {x=p.x+5, y=p.y-1, z=p.z+5}, "mcl_core:sand") if #surface >= 25 then - mcl_structures.call_struct(p, "desert_well") + mcl_structures.call_struct(p, "desert_well", nil, pr) chunk_has_desert_well = true end end @@ -1275,13 +1326,13 @@ local function generate_structures(minp, maxp, seed, biomemap) -- Igloos elseif not chunk_has_igloo and (nn == "mcl_core:snowblock" or nn == "mcl_core:snow" or (minetest.get_item_group(nn, "grass_block_snow") == 1)) then - if math.random(1, 4400) == 1 then + if pr:next(1, 4400) == 1 then -- Check surface local floor = {x=p.x+9, y=p.y-1, z=p.z+9} local surface = minetest.find_nodes_in_area({x=p.x,y=p.y-1,z=p.z}, floor, "mcl_core:snowblock") local surface2 = minetest.find_nodes_in_area({x=p.x,y=p.y-1,z=p.z}, floor, "mcl_core:dirt_with_grass_snow") if #surface + #surface2 >= 63 then - mcl_structures.call_struct(p, "igloo") + mcl_structures.call_struct(p, "igloo", nil, pr) chunk_has_igloo = true end end @@ -1291,16 +1342,16 @@ local function generate_structures(minp, maxp, seed, biomemap) if nn == "mcl_core:sandstone" or nn == "mcl_core:sand" and not chunk_has_desert_temple and ground_y > 3 then local fossil_prob = minecraft_chunk_probability(64, minp, maxp) - if math.random(1, fossil_prob) == 1 then + if pr:next(1, fossil_prob) == 1 then -- Spawn fossil below desert surface between layers 40 and 49 - local p1 = {x=p.x, y=math.random(mcl_worlds.layer_to_y(40), mcl_worlds.layer_to_y(49)), z=p.z} + local p1 = {x=p.x, y=pr:next(mcl_worlds.layer_to_y(40), mcl_worlds.layer_to_y(49)), z=p.z} -- Very rough check of the environment (we expect to have enough stonelike nodes). -- Fossils may still appear partially exposed in caves, but this is O.K. local p2 = vector.add(p1, 4) local nodes = minetest.find_nodes_in_area(p1, p2, {"mcl_core:sandstone", "mcl_core:stone", "mcl_core:diorite", "mcl_core:andesite", "mcl_core:granite", "mcl_core:stone_with_coal", "mcl_core:dirt", "mcl_core:gravel"}) if #nodes >= 100 then -- >= 80% - mcl_structures.call_struct(p1, "fossil") + mcl_structures.call_struct(p1, "fossil", nil, pr) end end end @@ -1308,7 +1359,7 @@ local function generate_structures(minp, maxp, seed, biomemap) -- Witch hut if ground_y <= 0 and nn == "mcl_core:dirt" then local prob = minecraft_chunk_probability(48, minp, maxp) - if math.random(1, prob) == 1 then + if pr:next(1, prob) == 1 then local swampland = minetest.get_biome_id("Swampland") local swampland_shore = minetest.get_biome_id("Swampland_shore") @@ -1330,7 +1381,7 @@ local function generate_structures(minp, maxp, seed, biomemap) end if here_be_witches then - local r = tostring(math.random(0, 3) * 90) -- "0", "90", "180" or 270" + local r = tostring(pr:next(0, 3) * 90) -- "0", "90", "180" or 270" local p1 = {x=p.x-1, y=WITCH_HUT_HEIGHT+2, z=p.z-1} local size if r == "0" or r == "180" then @@ -1349,11 +1400,11 @@ local function generate_structures(minp, maxp, seed, biomemap) -- FIXME: For some mysterious reason (black magic?) this -- function does sometimes NOT spawn the witch hut. One can only see the -- oak wood nodes in the water, but no hut. :-/ - mcl_structures.call_struct(place, "witch_hut", r) + mcl_structures.call_struct(place, "witch_hut", r, pr) -- TODO: Spawn witch in or around hut when the mob sucks less. - local place_tree_if_free = function(pos, prev_result) + local function place_tree_if_free(pos, prev_result) local nn = minetest.get_node(pos).name if nn == "mcl_flowers:waterlily" or nn == "mcl_core:water_source" or nn == "mcl_core:water_flowing" or nn == "air" then minetest.set_node(pos, {name="mcl_core:tree", param2=0}) @@ -1411,7 +1462,7 @@ local function generate_structures(minp, maxp, seed, biomemap) -- Ice spikes in v6 -- In other mapgens, ice spikes are generated as decorations. if mg_name == "v6" and not chunk_has_igloo and nn == "mcl_core:snowblock" then - local spike = math.random(1, 58000) + local spike = pr:next(1,58000) if spike < 3 then -- Check surface local floor = {x=p.x+4, y=p.y-1, z=p.z+4} @@ -1420,7 +1471,7 @@ local function generate_structures(minp, maxp, seed, biomemap) local spruce_collisions = minetest.find_nodes_in_area({x=p.x+1,y=p.y+2,z=p.z+1}, {x=p.x+4, y=p.y+6, z=p.z+4}, {"mcl_core:sprucetree", "mcl_core:spruceleaves"}) if #surface >= 9 and #spruce_collisions == 0 then - mcl_structures.call_struct(p, "ice_spike_large") + mcl_structures.call_struct(p, "ice_spike_large", nil, pr) end elseif spike < 100 then -- Check surface @@ -1431,7 +1482,7 @@ local function generate_structures(minp, maxp, seed, biomemap) local spruce_collisions = minetest.find_nodes_in_area({x=p.x+1,y=p.y+1,z=p.z+1}, {x=p.x+6, y=p.y+6, z=p.z+6}, {"mcl_core:sprucetree", "mcl_core:spruceleaves"}) if #surface >= 25 and #spruce_collisions == 0 then - mcl_structures.call_struct(p, "ice_spike_small") + mcl_structures.call_struct(p, "ice_spike_small", nil, pr) end end end @@ -1439,36 +1490,31 @@ local function generate_structures(minp, maxp, seed, biomemap) end end - end - end + end end -- End exit portal - elseif minp.y <= END_EXIT_PORTAL_POS.y and maxp.y >= END_EXIT_PORTAL_POS.y and - minp.x <= END_EXIT_PORTAL_POS.x and maxp.x >= END_EXIT_PORTAL_POS.x and - minp.z <= END_EXIT_PORTAL_POS.z and maxp.z >= END_EXIT_PORTAL_POS.z then - local built = false + elseif minp.y <= END_EXIT_PORTAL_POS.y and maxp.y >= END_EXIT_PORTAL_POS.y and + minp.x <= END_EXIT_PORTAL_POS.x and maxp.x >= END_EXIT_PORTAL_POS.x and + minp.z <= END_EXIT_PORTAL_POS.z and maxp.z >= END_EXIT_PORTAL_POS.z then for y=maxp.y, minp.y, -1 do local p = {x=END_EXIT_PORTAL_POS.x, y=y, z=END_EXIT_PORTAL_POS.z} if minetest.get_node(p).name == "mcl_end:end_stone" then - mcl_structures.call_struct(p, "end_exit_portal") - built = true - break + generate_end_exit_portal(p) + return end end - if not built then - mcl_structures.call_struct(END_EXIT_PORTAL_POS, "end_exit_portal") - end + generate_end_exit_portal(END_EXIT_PORTAL_POS) end end -- Buffers for LuaVoxelManip -local lvm_buffer = {} -local lvm_buffer_param2 = {} +-- local lvm_buffer = {} +-- local lvm_buffer_param2 = {} -- Generate tree decorations in the bounding box. This adds: -- * Cocoa at jungle trees -- * Jungle tree vines -- * Oak vines in swamplands -local function generate_tree_decorations(minp, maxp, seed, data, param2_data, area, biomemap, lvm_used) +local function generate_tree_decorations(minp, maxp, seed, data, param2_data, area, biomemap, lvm_used, pr) if maxp.y < 0 then return lvm_used end @@ -1536,7 +1582,7 @@ local function generate_tree_decorations(minp, maxp, seed, data, param2_data, ar if minetest.find_node_near(pos, 1, {"mcl_core:jungleleaves"}) then - dir = math.random(1, cocoachance) + dir = pr:next(1, cocoachance) if dir == 1 then pos.z = pos.z + 1 @@ -1553,8 +1599,8 @@ local function generate_tree_decorations(minp, maxp, seed, data, param2_data, ar if dir < 5 and data[p_pos] == c_air - and l ~= nil and l > 12 then - local c = math.random(1, 3) + and l and l > 12 then + local c = pr:next(1, 3) if c == 1 then data[p_pos] = c_cocoa_1 elseif c == 2 then @@ -1672,10 +1718,10 @@ local function generate_tree_decorations(minp, maxp, seed, data, param2_data, ar return lvm_used end -local pr_shroom = PseudoRandom(os.time()-24359) -- Generate mushrooms in caves manually. -- Minetest's API does not support decorations in caves yet. :-( -local generate_underground_mushrooms = function(minp, maxp, seed) +local function generate_underground_mushrooms(minp, maxp, seed) + local pr_shroom = PseudoRandom(seed-24359) -- Generate rare underground mushrooms -- TODO: Make them appear in groups, use Perlin noise local min, max = mcl_vars.mg_lava_overworld_max + 4, 0 @@ -1690,7 +1736,7 @@ local generate_underground_mushrooms = function(minp, maxp, seed) bpos = {x = stone[n].x, y = stone[n].y + 1, z = stone[n].z } local l = minetest.get_node_light(bpos, 0.5) - if bpos.y >= min and bpos.y <= max and l ~= nil and l <= 12 and pr_shroom:next(1,1000) < 4 then + if bpos.y >= min and bpos.y <= max and l and l <= 12 and pr_shroom:next(1,1000) < 4 then if pr_shroom:next(1,2) == 1 then minetest.set_node(bpos, {name = "mcl_mushrooms:mushroom_brown"}) else @@ -1700,7 +1746,6 @@ local generate_underground_mushrooms = function(minp, maxp, seed) end end -local pr_nether = PseudoRandom(os.time()+667) local nether_wart_chance if mg_name == "v6" then nether_wart_chance = 85 @@ -1709,11 +1754,15 @@ else end -- Generate Nether decorations manually: Eternal fire, mushrooms, nether wart -- Minetest's API does not support decorations in caves yet. :-( -local generate_nether_decorations = function(minp, maxp, seed) +local function generate_nether_decorations(minp, maxp, seed) + local pr_nether = PseudoRandom(seed+667) + if minp.y > mcl_vars.mg_nether_max or maxp.y < mcl_vars.mg_nether_min then return end + minetest.log("action", "[mcl_mapgen_core] Nether decorations " .. minetest.pos_to_string(minp) .. " ... " .. minetest.pos_to_string(maxp)) + -- TODO: Generate everything based on Perlin noise instead of PseudoRandom local bpos @@ -1722,7 +1771,7 @@ local generate_nether_decorations = function(minp, maxp, seed) local ssand = minetest.find_nodes_in_area_under_air(minp, maxp, {"mcl_nether:soul_sand"}) -- Helper function to spawn “fake” decoration - local special_deco = function(nodes, spawn_func) + local function special_deco(nodes, spawn_func) for n = 1, #nodes do bpos = {x = nodes[n].x, y = nodes[n].y + 1, z = nodes[n].z } @@ -1750,7 +1799,7 @@ local generate_nether_decorations = function(minp, maxp, seed) -- Note: Spawned *after* the fire because of light level checks special_deco(rack, function(bpos) local l = minetest.get_node_light(bpos, 0.5) - if bpos.y > mcl_vars.mg_lava_nether_max + 6 and l ~= nil and l <= 12 and pr_nether:next(1,1000) <= 4 then + if bpos.y > mcl_vars.mg_lava_nether_max + 6 and l and l <= 12 and pr_nether:next(1,1000) <= 4 then -- TODO: Make mushrooms appear in groups, use Perlin noise if pr_nether:next(1,2) == 1 then minetest.set_node(bpos, {name = "mcl_mushrooms:mushroom_brown"}) @@ -1770,125 +1819,215 @@ local generate_nether_decorations = function(minp, maxp, seed) end --- Below the bedrock, generate air/void -minetest.register_on_generated(function(minp, maxp, seed) - local vm, emin, emax = minetest.get_mapgen_object("voxelmanip") - local data = vm:get_data(lvm_buffer) - local param2_data = vm:get_param2_data(lvm_buffer_param2) - local area = VoxelArea:new({MinEdge=emin, MaxEdge=emax}) - local aream = VoxelArea:new({MinEdge={x=minp.x, y=0, z=minp.z}, MaxEdge={x=maxp.x, y=0, z=maxp.z}}) - local lvm_used = false - local biomemap +minetest.register_on_generated(function(minp, maxp, blockseed) + minetest.log("action", "[mcl_mapgen_core] Generating chunk " .. minetest.pos_to_string(minp) .. " ... " .. minetest.pos_to_string(maxp)) + local p1, p2 = {x=minp.x, y=minp.y, z=minp.z}, {x=maxp.x, y=maxp.y, z=maxp.z} + if lvm > 0 then + local lvm_used, shadow = false, false + local lb2 = {} -- param2 + local vm, emin, emax = minetest.get_mapgen_object("voxelmanip") + local e1, e2 = {x=emin.x, y=emin.y, z=emin.z}, {x=emax.x, y=emax.y, z=emax.z} + local data2 + local data = vm:get_data(lvm_buffer) + if param2 > 0 then + data2 = vm:get_param2_data(lb2) + end + local area = VoxelArea:new({MinEdge=e1, MaxEdge=e2}) - local ymin, ymax + for _, rec in pairs(registered_generators) do + if rec.vf then + local lvm_used0, shadow0 = rec.vf(vm, data, data2, e1, e2, area, p1, p2, blockseed) + if lvm_used0 then + lvm_used = true + end + if shadow0 then + shadow = true + end + end + end - -- Generate basic layer-based nodes: void, bedrock, realm barrier, lava seas, etc. - -- Also perform some basic node replacements. + if lvm_used then + -- Write stuff + vm:set_data(data) + if param2 > 0 then + vm:set_param2_data(data2) + end + vm:calc_lighting(p1, p2, shadow) + vm:write_to_map() + vm:update_liquids() + end + end - -- Helper function to set all nodes in the layers between min and max. - -- content_id: Node to set - -- check: optional. - -- If content_id, node will be set only if it is equal to check. - -- If function(pos_to_check, content_id_at_this_pos), will set node only if returns true. - -- min, max: Minimum and maximum Y levels of the layers to set - -- minp, maxp: minp, maxp of the on_generated - -- lvm_used: Set to true if any node in this on_generated has been set before. - -- - -- returns true if any node was set and lvm_used otherwise - local function set_layers(content_id, check, min, max, minp, maxp, lvm_used) - if (maxp.y >= min and minp.y <= max) then - for y = math.max(min, minp.y), math.min(max, maxp.y) do - for x = minp.x, maxp.x do - for z = minp.z, maxp.z do - local p_pos = area:index(x, y, z) - if check then - if type(check) == "function" and check({x=x,y=y,z=z}, data[p_pos]) then - data[p_pos] = content_id - lvm_used = true - elseif check == data[p_pos] then - data[p_pos] = content_id - lvm_used = true - end - else + if nodes > 0 then + for _, rec in pairs(registered_generators) do + if rec.nf then + rec.nf(p1, p2, blockseed) + end + end + end + + mcl_vars.add_chunk(minp) +end) + +function minetest.register_on_generated(node_function) + mcl_mapgen_core.register_generator("mod_"..tostring(#registered_generators+1), nil, node_function) +end + +function mcl_mapgen_core.register_generator(id, lvm_function, node_function, priority, needs_param2) + if not id then return end + + local priority = priority or 5000 + + if lvm_function then lvm = lvm + 1 end + if lvm_function then nodes = nodes + 1 end + if needs_param2 then param2 = param2 + 1 end + + local new_record = { + i = priority, + vf = lvm_function, + nf = node_function, + needs_param2 = needs_param2, + } + + registered_generators[id] = new_record + table.sort(registered_generators, function(a, b) + return (a.i < b.i) or ((a.i == b.i) and a.vf and (b.vf == nil)) + end) +end + +function mcl_mapgen_core.unregister_generator(id) + if not registered_generators[id] then return end + local rec = registered_generators[id] + registered_generators[id] = nil + if rec.vf then lvm = lvm - 1 end + if rec.nf then nodes = nodes - 1 end + if rec.needs_param2 then param2 = param2 - 1 end + --if rec.needs_level0 then level0 = level0 - 1 end +end + +-- Generate basic layer-based nodes: void, bedrock, realm barrier, lava seas, etc. +-- Also perform some basic node replacements. + +local bedrock_check +if mcl_vars.mg_bedrock_is_rough then + function bedrock_check(pos, _, pr) + local y = pos.y + -- Bedrock layers with increasing levels of roughness, until a perfecly flat bedrock later at the bottom layer + -- This code assumes a bedrock height of 5 layers. + + local diff = mcl_vars.mg_bedrock_overworld_max - y -- Overworld bedrock + local ndiff1 = mcl_vars.mg_bedrock_nether_bottom_max - y -- Nether bedrock, bottom + local ndiff2 = mcl_vars.mg_bedrock_nether_top_max - y -- Nether bedrock, ceiling + + local top + if diff == 0 or ndiff1 == 0 or ndiff2 == 4 then + -- 50% bedrock chance + top = 2 + elseif diff == 1 or ndiff1 == 1 or ndiff2 == 3 then + -- 66.666...% + top = 3 + elseif diff == 2 or ndiff1 == 2 or ndiff2 == 2 then + -- 75% + top = 4 + elseif diff == 3 or ndiff1 == 3 or ndiff2 == 1 then + -- 90% + top = 10 + elseif diff == 4 or ndiff1 == 4 or ndiff2 == 0 then + -- 100% + return true + else + -- Not in bedrock layer + return false + end + + return pr:next(1, top) <= top-1 + end +end + + +-- Helper function to set all nodes in the layers between min and max. +-- content_id: Node to set +-- check: optional. +-- If content_id, node will be set only if it is equal to check. +-- If function(pos_to_check, content_id_at_this_pos), will set node only if returns true. +-- min, max: Minimum and maximum Y levels of the layers to set +-- minp, maxp: minp, maxp of the on_generated +-- lvm_used: Set to true if any node in this on_generated has been set before. +-- +-- returns true if any node was set and lvm_used otherwise +local function set_layers(data, area, content_id, check, min, max, minp, maxp, lvm_used, pr) + if (maxp.y >= min and minp.y <= max) then + for y = math.max(min, minp.y), math.min(max, maxp.y) do + for x = minp.x, maxp.x do + for z = minp.z, maxp.z do + local p_pos = area:index(x, y, z) + if check then + if type(check) == "function" and check({x=x,y=y,z=z}, data[p_pos], pr) then + data[p_pos] = content_id + lvm_used = true + elseif check == data[p_pos] then data[p_pos] = content_id lvm_used = true end + else + data[p_pos] = content_id + lvm_used = true end end end end - return lvm_used end + return lvm_used +end - -- The Void - lvm_used = set_layers(c_void, nil, -31000, mcl_vars.mg_nether_min-1, minp, maxp, lvm_used) - lvm_used = set_layers(c_void, nil, mcl_vars.mg_nether_max+1, mcl_vars.mg_end_min-1, minp, maxp, lvm_used) - lvm_used = set_layers(c_void, nil, mcl_vars.mg_end_max+1, mcl_vars.mg_realm_barrier_overworld_end_min-1, minp, maxp, lvm_used) - lvm_used = set_layers(c_void, nil, mcl_vars.mg_realm_barrier_overworld_end_max+1, mcl_vars.mg_overworld_min-1, minp, maxp, lvm_used) +-- Below the bedrock, generate air/void +local function basic(vm, data, data2, emin, emax, area, minp, maxp, blockseed) + local biomemap --ymin, ymax + local lvm_used = false + local pr = PseudoRandom(blockseed) + -- The Void below the Nether: + lvm_used = set_layers(data, area, c_void , nil, mcl_vars.mapgen_edge_min , mcl_vars.mg_nether_min -1, minp, maxp, lvm_used, pr) + + -- [[ THE NETHER: mcl_vars.mg_nether_min mcl_vars.mg_nether_max ]] + + -- The Air on the Nether roof, https://git.minetest.land/MineClone2/MineClone2/issues/1186 + lvm_used = set_layers(data, area, c_air , nil, mcl_vars.mg_nether_max +1, mcl_vars.mg_nether_max + 128 , minp, maxp, lvm_used, pr) + -- The Void above the Nether below the End: + lvm_used = set_layers(data, area, c_void , nil, mcl_vars.mg_nether_max + 128 +1, mcl_vars.mg_end_min -1, minp, maxp, lvm_used, pr) + + -- [[ THE END: mcl_vars.mg_end_min mcl_vars.mg_end_max ]] + + -- The Void above the End below the Realm barrier: + lvm_used = set_layers(data, area, c_void , nil, mcl_vars.mg_end_max +1, mcl_vars.mg_realm_barrier_overworld_end_min-1, minp, maxp, lvm_used, pr) -- Realm barrier between the Overworld void and the End - lvm_used = set_layers(c_realm_barrier, nil, mcl_vars.mg_realm_barrier_overworld_end_min, mcl_vars.mg_realm_barrier_overworld_end_max, minp, maxp, lvm_used) + lvm_used = set_layers(data, area, c_realm_barrier, nil, mcl_vars.mg_realm_barrier_overworld_end_min , mcl_vars.mg_realm_barrier_overworld_end_max , minp, maxp, lvm_used, pr) + -- The Void above Realm barrier below the Overworld: + lvm_used = set_layers(data, area, c_void , nil, mcl_vars.mg_realm_barrier_overworld_end_max+1, mcl_vars.mg_overworld_min -1, minp, maxp, lvm_used, pr) + if mg_name ~= "singlenode" then -- Bedrock - local bedrock_check - if mcl_vars.mg_bedrock_is_rough then - bedrock_check = function(pos) - local y = pos.y - -- Bedrock layers with increasing levels of roughness, until a perfecly flat bedrock later at the bottom layer - -- This code assumes a bedrock height of 5 layers. - - local diff = mcl_vars.mg_bedrock_overworld_max - y -- Overworld bedrock - local ndiff1 = mcl_vars.mg_bedrock_nether_bottom_max - y -- Nether bedrock, bottom - local ndiff2 = mcl_vars.mg_bedrock_nether_top_max - y -- Nether bedrock, ceiling - - local top - if diff == 0 or ndiff1 == 0 or ndiff2 == 4 then - -- 50% bedrock chance - top = 2 - elseif diff == 1 or ndiff1 == 1 or ndiff2 == 3 then - -- 66.666...% - top = 3 - elseif diff == 2 or ndiff1 == 2 or ndiff2 == 2 then - -- 75% - top = 4 - elseif diff == 3 or ndiff1 == 3 or ndiff2 == 1 then - -- 90% - top = 10 - elseif diff == 4 or ndiff1 == 4 or ndiff2 == 0 then - -- 100% - return true - else - -- Not in bedrock layer - return false - end - - return math.random(1, top) <= top-1 - end - else - bedrock_check = nil - end - - lvm_used = set_layers(c_bedrock, bedrock_check, mcl_vars.mg_bedrock_overworld_min, mcl_vars.mg_bedrock_overworld_max, minp, maxp, lvm_used) - lvm_used = set_layers(c_bedrock, bedrock_check, mcl_vars.mg_bedrock_nether_bottom_min, mcl_vars.mg_bedrock_nether_bottom_max, minp, maxp, lvm_used) - lvm_used = set_layers(c_bedrock, bedrock_check, mcl_vars.mg_bedrock_nether_top_min, mcl_vars.mg_bedrock_nether_top_max, minp, maxp, lvm_used) + lvm_used = set_layers(data, area, c_bedrock, bedrock_check, mcl_vars.mg_bedrock_overworld_min, mcl_vars.mg_bedrock_overworld_max, minp, maxp, lvm_used, pr) + lvm_used = set_layers(data, area, c_bedrock, bedrock_check, mcl_vars.mg_bedrock_nether_bottom_min, mcl_vars.mg_bedrock_nether_bottom_max, minp, maxp, lvm_used, pr) + lvm_used = set_layers(data, area, c_bedrock, bedrock_check, mcl_vars.mg_bedrock_nether_top_min, mcl_vars.mg_bedrock_nether_top_max, minp, maxp, lvm_used, pr) -- Flat Nether if mg_name == "flat" then - lvm_used = set_layers(c_air, nil, mcl_vars.mg_flat_nether_floor, mcl_vars.mg_flat_nether_ceiling, minp, maxp, lvm_used) + lvm_used = set_layers(data, area, c_air, nil, mcl_vars.mg_flat_nether_floor, mcl_vars.mg_flat_nether_ceiling, minp, maxp, lvm_used, pr) end -- Big lava seas by replacing air below a certain height if mcl_vars.mg_lava then - lvm_used = set_layers(c_lava, c_air, mcl_vars.mg_overworld_min, mcl_vars.mg_lava_overworld_max, emin, emax, lvm_used) - lvm_used = set_layers(c_nether_lava, c_air, mcl_vars.mg_nether_min, mcl_vars.mg_lava_nether_max, emin, emax, lvm_used) + lvm_used = set_layers(data, area, c_lava, c_air, mcl_vars.mg_overworld_min, mcl_vars.mg_lava_overworld_max, minp, maxp, lvm_used, pr) + lvm_used = set_layers(data, area, c_nether_lava, c_air, mcl_vars.mg_nether_min, mcl_vars.mg_lava_nether_max, minp, maxp, lvm_used, pr) end -- Clay, vines, cocoas - lvm_used = generate_clay(minp, maxp, seed, data, area, lvm_used) + lvm_used = generate_clay(minp, maxp, blockseed, data, area, lvm_used) biomemap = minetest.get_mapgen_object("biomemap") - lvm_used = generate_tree_decorations(minp, maxp, seed, data, param2_data, area, biomemap, lvm_used) + lvm_used = generate_tree_decorations(minp, maxp, blockseed, data, data2, area, biomemap, lvm_used, pr) ----- Interactive block fixing section ----- ----- The section to perform basic block overrides of the core mapgen generated world. ----- @@ -1896,7 +2035,7 @@ minetest.register_on_generated(function(minp, maxp, seed) -- Snow and sand fixes. This code implements snow consistency -- and fixes floating sand and cut plants. -- A snowy grass block must be below a top snow or snow block at all times. - if emin.y <= mcl_vars.mg_overworld_max and emax.y >= mcl_vars.mg_overworld_min then + if minp.y <= mcl_vars.mg_overworld_max and maxp.y >= mcl_vars.mg_overworld_min then -- v6 mapgen: if mg_name == "v6" then @@ -1910,7 +2049,7 @@ minetest.register_on_generated(function(minp, maxp, seed) altogether if ANY of their nodes could not be placed. 2) Cavegen: Removes the bottom part, the upper part floats 3) Mudflow: Same as 2) ]] - local plants = minetest.find_nodes_in_area(emin, emax, "group:double_plant") + local plants = minetest.find_nodes_in_area(minp, maxp, "group:double_plant") for n = 1, #plants do local node = vm:get_node_at(plants[n]) local is_top = minetest.get_item_group(node.name, "double_plant") == 2 @@ -1934,19 +2073,21 @@ minetest.register_on_generated(function(minp, maxp, seed) -- Set param2 (=color) of grass blocks. -- Clear snowy grass blocks without snow above to ensure consistency. local nodes = minetest.find_nodes_in_area(minp, maxp, {"mcl_core:dirt_with_grass", "mcl_core:dirt_with_grass_snow"}) + + -- Flat area at y=0 to read biome 3 times faster than 5.3.0.get_biome_data(pos).biome: 43us vs 125us per iteration: + local aream = VoxelArea:new({MinEdge={x=minp.x, y=0, z=minp.z}, MaxEdge={x=maxp.x, y=0, z=maxp.z}}) for n=1, #nodes do - local p_pos = area:index(nodes[n].x, nodes[n].y, nodes[n].z) - local p_pos_above = area:index(nodes[n].x, nodes[n].y+1, nodes[n].z) - local p_pos_below = area:index(nodes[n].x, nodes[n].y-1, nodes[n].z) - local b_pos = aream:index(nodes[n].x, 0, nodes[n].z) + local n = nodes[n] + local p_pos = area:index(n.x, n.y, n.z) + local p_pos_above = area:index(n.x, n.y+1, n.z) + --local p_pos_below = area:index(n.x, n.y-1, n.z) + local b_pos = aream:index(n.x, 0, n.z) local bn = minetest.get_biome_name(biomemap[b_pos]) if bn then local biome = minetest.registered_biomes[bn] - if biome then - if biome._mcl_biome_type then - param2_data[p_pos] = biome._mcl_palette_index - lvm_used = true - end + if biome and biome._mcl_biome_type then + data2[p_pos] = biome._mcl_palette_index + lvm_used = true end end if data[p_pos] == c_dirt_with_grass_snow and p_pos_above and data[p_pos_above] ~= c_top_snow and data[p_pos_above] ~= c_snow_block then @@ -1954,29 +2095,32 @@ minetest.register_on_generated(function(minp, maxp, seed) lvm_used = true end end + end -- Nether block fixes: -- * Replace water with Nether lava. -- * Replace stone, sand dirt in v6 so the Nether works in v6. elseif emin.y <= mcl_vars.mg_nether_max and emax.y >= mcl_vars.mg_nether_min then - local nodes if mg_name == "v6" then - nodes = minetest.find_nodes_in_area(emin, emax, {"mcl_core:water_source", "mcl_core:stone", "mcl_core:sand", "mcl_core:dirt"}) + local nodes = minetest.find_nodes_in_area(emin, emax, {"mcl_core:water_source", "mcl_core:stone", "mcl_core:sand", "mcl_core:dirt"}) + for n=1, #nodes do + local p_pos = area:index(nodes[n].x, nodes[n].y, nodes[n].z) + if data[p_pos] == c_water then + data[p_pos] = c_nether_lava + lvm_used = true + elseif data[p_pos] == c_stone then + data[p_pos] = c_netherrack + lvm_used = true + elseif data[p_pos] == c_sand or data[p_pos] == c_dirt then + data[p_pos] = c_soul_sand + lvm_used = true + end + end else - nodes = minetest.find_nodes_in_area(emin, emax, {"mcl_core:water_source"}) - end - for n=1, #nodes do - local p_pos = area:index(nodes[n].x, nodes[n].y, nodes[n].z) - if data[p_pos] == c_water then - data[p_pos] = c_nether_lava - lvm_used = true - elseif data[p_pos] == c_stone then - data[p_pos] = c_netherrack - lvm_used = true - elseif data[p_pos] == c_sand or data[p_pos] == c_dirt then - data[p_pos] = c_soul_sand - lvm_used = true + local nodes = minetest.find_nodes_in_area(emin, emax, {"group:water"}) + for _, n in pairs(nodes) do + data[area:index(n.x, n.y, n.z)] = c_nether_lava end end @@ -1984,28 +2128,28 @@ minetest.register_on_generated(function(minp, maxp, seed) -- * Replace water with end stone or air (depending on height). -- * Remove stone, sand, dirt in v6 so our End map generator works in v6. -- * Generate spawn platform (End portal destination) - elseif emin.y <= mcl_vars.mg_end_max and emax.y >= mcl_vars.mg_end_min then + elseif minp.y <= mcl_vars.mg_end_max and maxp.y >= mcl_vars.mg_end_min then local nodes if mg_name == "v6" then nodes = minetest.find_nodes_in_area(emin, emax, {"mcl_core:water_source", "mcl_core:stone", "mcl_core:sand", "mcl_core:dirt"}) else nodes = minetest.find_nodes_in_area(emin, emax, {"mcl_core:water_source"}) end - for n=1, #nodes do - local y = nodes[n].y - local p_pos = area:index(nodes[n].x, y, nodes[n].z) - - if data[p_pos] == c_water or data[p_pos] == c_stone or data[p_pos] == c_dirt or data[p_pos] == c_sand then - data[p_pos] = c_air - lvm_used = true + if #nodes > 0 then + lvm_used = true + for _,n in pairs(nodes) do + data[area:index(n.x, n.y, n.z)] = c_air end - end -- Obsidian spawn platform if minp.y <= mcl_vars.mg_end_platform_pos.y and maxp.y >= mcl_vars.mg_end_platform_pos.y and - minp.x <= mcl_vars.mg_end_platform_pos.x and maxp.x >= mcl_vars.mg_end_platform_pos.z and - minp.z <= mcl_vars.mg_end_platform_pos.z and maxp.z >= mcl_vars.mg_end_platform_pos.z then + minp.x <= mcl_vars.mg_end_platform_pos.x and maxp.x >= mcl_vars.mg_end_platform_pos.z and + minp.z <= mcl_vars.mg_end_platform_pos.z and maxp.z >= mcl_vars.mg_end_platform_pos.z then + + --local pos1 = {x = math.max(minp.x, mcl_vars.mg_end_platform_pos.x-2), y = math.max(minp.y, mcl_vars.mg_end_platform_pos.y), z = math.max(minp.z, mcl_vars.mg_end_platform_pos.z-2)} + --local pos2 = {x = math.min(maxp.x, mcl_vars.mg_end_platform_pos.x+2), y = math.min(maxp.y, mcl_vars.mg_end_platform_pos.y+2), z = math.min(maxp.z, mcl_vars.mg_end_platform_pos.z+2)} + for x=math.max(minp.x, mcl_vars.mg_end_platform_pos.x-2), math.min(maxp.x, mcl_vars.mg_end_platform_pos.x+2) do for z=math.max(minp.z, mcl_vars.mg_end_platform_pos.z-2), math.min(maxp.z, mcl_vars.mg_end_platform_pos.z+2) do for y=math.max(minp.y, mcl_vars.mg_end_platform_pos.y), math.min(maxp.y, mcl_vars.mg_end_platform_pos.y+2) do @@ -2025,7 +2169,7 @@ minetest.register_on_generated(function(minp, maxp, seed) -- Final hackery: Set sun light level in the End. -- -26912 is at a mapchunk border. - local shadow + local shadow = true if minp.y >= -26912 and maxp.y <= mcl_vars.mg_end_max then vm:set_lighting({day=15, night=15}) lvm_used = true @@ -2035,21 +2179,15 @@ minetest.register_on_generated(function(minp, maxp, seed) lvm_used = true end - -- Write stuff - if lvm_used then - vm:set_data(data) - vm:set_param2_data(param2_data) - vm:calc_lighting(nil, nil, shadow) - vm:write_to_map() - vm:update_liquids() - end - if mg_name ~= "singlenode" then -- Generate special decorations - generate_underground_mushrooms(minp, maxp, seed) - generate_nether_decorations(minp, maxp, seed) - generate_structures(minp, maxp, seed, biomemap) + generate_underground_mushrooms(minp, maxp, blockseed) + generate_nether_decorations(minp, maxp, blockseed) + generate_structures(minp, maxp, blockseed, biomemap) end -end) + return lvm_used, shadow +end + +mcl_mapgen_core.register_generator("main", basic, nil, 1, true) diff --git a/mods/MAPGEN/mcl_mapgen_core/mod.conf b/mods/MAPGEN/mcl_mapgen_core/mod.conf index 5b5419c32..9f7d9ebaa 100644 --- a/mods/MAPGEN/mcl_mapgen_core/mod.conf +++ b/mods/MAPGEN/mcl_mapgen_core/mod.conf @@ -1 +1,5 @@ name = mcl_mapgen_core +author = Wuzzy +description = The core of the MCL2 mapgen +depends = mcl_init, mcl_core, biomeinfo, mcl_worlds, mcl_cocoas, mcl_sponges, mcl_ocean, mcl_stairs, mcl_monster_eggs, mcl_structures +optional_depends = mclx_core diff --git a/mods/MAPGEN/mcl_strongholds/depends.txt b/mods/MAPGEN/mcl_strongholds/depends.txt deleted file mode 100644 index 76570fa33..000000000 --- a/mods/MAPGEN/mcl_strongholds/depends.txt +++ /dev/null @@ -1,3 +0,0 @@ -mcl_init -mcl_structures -mcl_mapgen_core diff --git a/mods/MAPGEN/mcl_strongholds/description.txt b/mods/MAPGEN/mcl_strongholds/description.txt deleted file mode 100644 index 2f761edbe..000000000 --- a/mods/MAPGEN/mcl_strongholds/description.txt +++ /dev/null @@ -1 +0,0 @@ -Generates strongholds with end portals in the Overworld diff --git a/mods/MAPGEN/mcl_strongholds/init.lua b/mods/MAPGEN/mcl_strongholds/init.lua index 92313bee7..083172a3c 100644 --- a/mods/MAPGEN/mcl_strongholds/init.lua +++ b/mods/MAPGEN/mcl_strongholds/init.lua @@ -25,7 +25,7 @@ local superflat = mg_name == "flat" and minetest.get_mapgen_setting("mcl_superfl -- The stronghold positions are based on the world seed. -- The actual position might be offset by a few blocks because it might be shifted -- to make sure the end portal room is completely within the boundaries of a mapchunk. -local init_strongholds = function() +local function init_strongholds() if strongholds_inited then return end @@ -67,7 +67,8 @@ local init_strongholds = function() end -- Stronghold generation for register_on_generated. -local generate_strongholds = function(minp, maxp) +local function generate_strongholds(minp, maxp, blockseed) + local pr = PseudoRandom(blockseed) for s=1, #strongholds do if not strongholds[s].generated then local pos = strongholds[s].pos @@ -80,6 +81,12 @@ local generate_strongholds = function(minp, maxp) if pos.x + 6 > maxp.x then pos.x = maxp.x - 7 end + if pos.y - 4 < minp.y then + pos.y = minp.y + 5 + end + if pos.y + 4 > maxp.y then + pos.y = maxp.y - 5 + end if pos.z - 6 < minp.z then pos.z = minp.z + 7 end @@ -87,7 +94,7 @@ local generate_strongholds = function(minp, maxp) pos.z = maxp.z - 7 end - mcl_structures.call_struct(pos, "end_portal_shrine") + mcl_structures.call_struct(pos, "end_portal_shrine", nil, pr) strongholds[s].generated = true end end @@ -96,9 +103,4 @@ end init_strongholds() ---[[ Note this mod depends on mcl_mapgen_core to make sure the core mapgen runs FIRST. -This is important because we need this to make sure the stronghold isn't instantly -overwritten by the core mapgen (since it uses LuaVoxelManip). ]] -minetest.register_on_generated(function(minp, maxp, blockseed) - generate_strongholds(minp, maxp) -end) +mcl_mapgen_core.register_generator("strongholds", nil, generate_strongholds, 999999) diff --git a/mods/MAPGEN/mcl_strongholds/mod.conf b/mods/MAPGEN/mcl_strongholds/mod.conf index 22c99de4f..8edec9a51 100644 --- a/mods/MAPGEN/mcl_strongholds/mod.conf +++ b/mods/MAPGEN/mcl_strongholds/mod.conf @@ -1 +1,4 @@ name = mcl_strongholds +author = Wuzzy +description = Generates strongholds with end portals in the Overworld +depends = mcl_init, mcl_structures, mcl_mapgen_core diff --git a/mods/MAPGEN/mcl_structures/depends.txt b/mods/MAPGEN/mcl_structures/depends.txt deleted file mode 100644 index dc513fc7b..000000000 --- a/mods/MAPGEN/mcl_structures/depends.txt +++ /dev/null @@ -1 +0,0 @@ -mcl_loot diff --git a/mods/MAPGEN/mcl_structures/init.lua b/mods/MAPGEN/mcl_structures/init.lua index bc3b1b1a7..533c9cab0 100644 --- a/mods/MAPGEN/mcl_structures/init.lua +++ b/mods/MAPGEN/mcl_structures/init.lua @@ -1,27 +1,64 @@ -local S = minetest.get_translator("mcl_structures") -mcl_structures ={} +local modname = minetest.get_current_modname() +local S = minetest.get_translator(modname) +local modpath = minetest.get_modpath(modname) -mcl_structures.get_struct = function(file) - local localfile = minetest.get_modpath("mcl_structures").."/schematics/"..file - local file, errorload = io.open(localfile, "rb") - if errorload ~= nil then - minetest.log("error", '[mcl_structures] Could not open this struct: ' .. localfile) - return nil +mcl_structures = {} + +local rotations = { + "0", + "90", + "180", + "270" +} + +local function ecb_place(blockpos, action, calls_remaining, param) + if calls_remaining >= 1 then return end + minetest.place_schematic(param.pos, param.schematic, param.rotation, param.replacements, param.force_placement, param.flags) + if param.after_placement_callback and param.p1 and param.p2 then + param.after_placement_callback(param.p1, param.p2, param.size, param.rotation, param.pr, param.callback_param) end - - local allnode = file:read("*a") - file:close() - - return allnode end -local mapseed = tonumber(minetest.get_mapgen_setting("seed")) --- Random number generator for all generated structures -local pr = PseudoRandom(mapseed) +function mcl_structures.place_schematic(pos, schematic, rotation, replacements, force_placement, flags, after_placement_callback, pr, callback_param) + local s = loadstring(minetest.serialize_schematic(schematic, "lua", {lua_use_comments = false, lua_num_indent_spaces = 0}) .. " return schematic")() + if s and s.size then + local x, z = s.size.x, s.size.z + if rotation then + if rotation == "random" and pr then + rotation = rotations[pr:next(1,#rotations)] + end + if rotation == "random" then + x = math.max(x, z) + z = x + elseif rotation == "90" or rotation == "270" then + x, z = z, x + end + end + local p1 = {x=pos.x , y=pos.y , z=pos.z } + local p2 = {x=pos.x+x-1, y=pos.y+s.size.y-1, z=pos.z+z-1} + minetest.log("verbose", "[mcl_structures] size=" ..minetest.pos_to_string(s.size) .. ", rotation=" .. tostring(rotation) .. ", emerge from "..minetest.pos_to_string(p1) .. " to " .. minetest.pos_to_string(p2)) + local param = {pos=vector.new(pos), schematic=s, rotation=rotation, replacements=replacements, force_placement=force_placement, flags=flags, p1=p1, p2=p2, after_placement_callback = after_placement_callback, size=vector.new(s.size), pr=pr, callback_param=callback_param} + minetest.emerge_area(p1, p2, ecb_place, param) + end +end + +function mcl_structures.get_struct(file) + local localfile = modpath.."/schematics/"..file + local file, errorload = io.open(localfile, "rb") + if errorload then + minetest.log("error", "[mcl_structures] Could not open this struct: "..localfile) + return nil + end + + local allnode = file:read("*a") + file:close() + + return allnode +end -- Call on_construct on pos. -- Useful to init chests from formspec. -local init_node_construct = function(pos) +local function init_node_construct(pos) local node = minetest.get_node(pos) local def = minetest.registered_nodes[node.name] if def and def.on_construct then @@ -32,16 +69,17 @@ local init_node_construct = function(pos) end -- The call of Struct -mcl_structures.call_struct = function(pos, struct_style, rotation) +function mcl_structures.call_struct(pos, struct_style, rotation, pr) + minetest.log("action","[mcl_structures] call_struct " .. struct_style.." at "..minetest.pos_to_string(pos)) if not rotation then rotation = "random" end if struct_style == "desert_temple" then - return mcl_structures.generate_desert_temple(pos, rotation) + return mcl_structures.generate_desert_temple(pos, rotation, pr) elseif struct_style == "desert_well" then return mcl_structures.generate_desert_well(pos, rotation) elseif struct_style == "igloo" then - return mcl_structures.generate_igloo(pos, rotation) + return mcl_structures.generate_igloo(pos, rotation, pr) elseif struct_style == "witch_hut" then return mcl_structures.generate_witch_hut(pos, rotation) elseif struct_style == "ice_spike_small" then @@ -49,31 +87,36 @@ mcl_structures.call_struct = function(pos, struct_style, rotation) elseif struct_style == "ice_spike_large" then return mcl_structures.generate_ice_spike_large(pos, rotation) elseif struct_style == "boulder" then - return mcl_structures.generate_boulder(pos, rotation) + return mcl_structures.generate_boulder(pos, rotation, pr) elseif struct_style == "fossil" then - return mcl_structures.generate_fossil(pos, rotation) + return mcl_structures.generate_fossil(pos, rotation, pr) elseif struct_style == "end_exit_portal" then return mcl_structures.generate_end_exit_portal(pos, rotation) + elseif struct_style == "end_exit_portal_open" then + return mcl_structures.generate_end_exit_portal_open(pos, rotation) + elseif struct_style == "end_gateway_portal" then + return mcl_structures.generate_end_gateway_portal(pos, rotation) elseif struct_style == "end_portal_shrine" then - return mcl_structures.generate_end_portal_shrine(pos, rotation) + return mcl_structures.generate_end_portal_shrine(pos, rotation, pr) end end -mcl_structures.generate_desert_well = function(pos) +function mcl_structures.generate_desert_well(pos, rot) local newpos = {x=pos.x,y=pos.y-2,z=pos.z} - local path = minetest.get_modpath("mcl_structures").."/schematics/mcl_structures_desert_well.mts" - return minetest.place_schematic(newpos, path, "0", nil, true) + local path = modpath.."/schematics/mcl_structures_desert_well.mts" + return mcl_structures.place_schematic(newpos, path, rot or "0", nil, true) end -mcl_structures.generate_igloo = function(pos) +function mcl_structures.generate_igloo(pos, rotation, pr) -- Place igloo - local success, rotation = mcl_structures.generate_igloo_top(pos) + local success, rotation = mcl_structures.generate_igloo_top(pos, pr) -- Place igloo basement with 50% chance - local r = math.random(1,2) - if success and r == 1 then + local r = pr:next(1,2) + if r == 1 then -- Select basement depth local dim = mcl_worlds.pos_to_dimension(pos) - local buffer = pos.y - (mcl_vars.mg_lava_overworld_max + 10) + --local buffer = pos.y - (mcl_vars.mg_lava_overworld_max + 10) + local buffer if dim == "nether" then buffer = pos.y - (mcl_vars.mg_lava_nether_max + 10) elseif dim == "end" then @@ -86,7 +129,7 @@ mcl_structures.generate_igloo = function(pos) if buffer <= 19 then return success end - local depth = math.random(19, buffer) + local depth = pr:next(19, buffer) local bpos = {x=pos.x, y=pos.y-depth, z=pos.z} -- trapdoor position local tpos @@ -110,9 +153,9 @@ mcl_structures.generate_igloo = function(pos) else return success end - local set_brick = function(pos) - local c = math.random(1, 3) -- cracked chance - local m = math.random(1, 10) -- chance for monster egg + local function set_brick(pos) + local c = pr:next(1, 3) -- cracked chance + local m = pr:next(1, 10) -- chance for monster egg local brick if m == 1 then if c == 1 then @@ -144,8 +187,6 @@ mcl_structures.generate_igloo = function(pos) if real_depth <= 6 then return success end - -- Place hidden trapdoor - minetest.set_node(tpos, {name="mcl_doors:trapdoor", param2=20+minetest.dir_to_facedir(dir)}) -- TODO: more reliable param2 -- Generate ladder to basement for y=1, real_depth-1 do set_brick({x=tpos.x-1,y=tpos.y-y,z=tpos.z }) @@ -155,102 +196,117 @@ mcl_structures.generate_igloo = function(pos) minetest.set_node({x=tpos.x,y=tpos.y-y,z=tpos.z}, {name="mcl_core:ladder", param2=ladder_param2}) end -- Place basement - mcl_structures.generate_igloo_basement(bpos, rotation) + mcl_structures.generate_igloo_basement(bpos, rotation, pr) + -- Place hidden trapdoor + minetest.after(5, function(tpos, dir) + minetest.set_node(tpos, {name="mcl_doors:trapdoor", param2=20+minetest.dir_to_facedir(dir)}) -- TODO: more reliable param2 + end, tpos, dir) end return success end -mcl_structures.generate_igloo_top = function(pos) +function mcl_structures.generate_igloo_top(pos, pr) -- FIXME: This spawns bookshelf instead of furnace. Fix this! -- Furnace does ot work atm because apparently meta is not set. :-( local newpos = {x=pos.x,y=pos.y-1,z=pos.z} - local path = minetest.get_modpath("mcl_structures").."/schematics/mcl_structures_igloo_top.mts" - local rotation = tostring(math.random(0,3)*90) - return minetest.place_schematic(newpos, path, rotation, nil, true), rotation + local path = modpath.."/schematics/mcl_structures_igloo_top.mts" + local rotation = tostring(pr:next(0,3)*90) + return mcl_structures.place_schematic(newpos, path, rotation, nil, true), rotation end -mcl_structures.generate_igloo_basement = function(pos, orientation) +local function igloo_placement_callback(p1, p2, size, orientation, pr) + local chest_offset + if orientation == "0" then + chest_offset = {x=5, y=1, z=5} + elseif orientation == "90" then + chest_offset = {x=5, y=1, z=3} + elseif orientation == "180" then + chest_offset = {x=3, y=1, z=1} + elseif orientation == "270" then + chest_offset = {x=1, y=1, z=5} + else + return + end + --local size = {x=9,y=5,z=7} + local lootitems = mcl_loot.get_multi_loot({ + { + stacks_min = 1, + stacks_max = 1, + items = { + { itemstring = "mcl_core:apple_gold", weight = 1 }, + } + }, + { + stacks_min = 2, + stacks_max = 8, + items = { + { itemstring = "mcl_core:coal_lump", weight = 15, amount_min = 1, amount_max = 4 }, + { itemstring = "mcl_core:apple", weight = 15, amount_min = 1, amount_max = 3 }, + { itemstring = "mcl_farming:wheat_item", weight = 10, amount_min = 2, amount_max = 3 }, + { itemstring = "mcl_core:gold_nugget", weight = 10, amount_min = 1, amount_max = 3 }, + { itemstring = "mcl_mobitems:rotten_flesh", weight = 10 }, + { itemstring = "mcl_tools:axe_stone", weight = 2 }, + { itemstring = "mcl_core:emerald", weight = 1 }, + } + }}, pr) + + local chest_pos = vector.add(p1, chest_offset) + init_node_construct(chest_pos) + local meta = minetest.get_meta(chest_pos) + local inv = meta:get_inventory() + mcl_loot.fill_inventory(inv, "main", lootitems, pr) +end + +function mcl_structures.generate_igloo_basement(pos, orientation, pr) -- TODO: Add brewing stand -- TODO: Add monster eggs -- TODO: Spawn villager and zombie villager - local path = minetest.get_modpath("mcl_structures").."/schematics/mcl_structures_igloo_basement.mts" - - local success = minetest.place_schematic(pos, path, orientation, nil, true) - if success then - local chest_offset - if orientation == "0" then - chest_offset = {x=5, y=1, z=5} - elseif orientation == "90" then - chest_offset = {x=5, y=1, z=3} - elseif orientation == "180" then - chest_offset = {x=3, y=1, z=1} - elseif orientation == "270" then - chest_offset = {x=1, y=1, z=5} - else - return success - end - local size = {x=9,y=5,z=7} - local lootitems = mcl_loot.get_multi_loot({ - { - stacks_min = 1, - stacks_max = 1, - items = { - { itemstring = "mcl_core:apple_gold", weight = 1 }, - } - }, - { - stacks_min = 2, - stacks_max = 8, - items = { - { itemstring = "mcl_core:coal_lump", weight = 15, amount_min = 1, amount_max = 4 }, - { itemstring = "mcl_core:apple", weight = 15, amount_min = 1, amount_max = 3 }, - { itemstring = "mcl_farming:wheat_item", weight = 10, amount_min = 2, amount_max = 3 }, - { itemstring = "mcl_core:gold_nugget", weight = 10, amount_min = 1, amount_max = 3 }, - { itemstring = "mcl_mobitems:rotten_flesh", weight = 10 }, - { itemstring = "mcl_tools:axe_stone", weight = 2 }, - { itemstring = "mcl_core:emerald", weight = 1 }, - } - }}, pr) - - local chest_pos = vector.add(pos, chest_offset) - init_node_construct(chest_pos) - local meta = minetest.get_meta(chest_pos) - local inv = meta:get_inventory() - mcl_loot.fill_inventory(inv, "main", lootitems) - end - return success + local path = modpath.."/schematics/mcl_structures_igloo_basement.mts" + mcl_structures.place_schematic(pos, path, orientation, nil, true, nil, igloo_placement_callback, pr) end -mcl_structures.generate_boulder = function(pos) +function mcl_structures.generate_boulder(pos, rotation, pr) -- Choose between 2 boulder sizes (2×2×2 or 3×3×3) - local r = math.random(1, 10) + local r = pr:next(1, 10) local path if r <= 3 then - path = minetest.get_modpath("mcl_structures").."/schematics/mcl_structures_boulder_small.mts" + path = modpath.."/schematics/mcl_structures_boulder_small.mts" else - path = minetest.get_modpath("mcl_structures").."/schematics/mcl_structures_boulder.mts" + path = modpath.."/schematics/mcl_structures_boulder.mts" end local newpos = {x=pos.x,y=pos.y-1,z=pos.z} - return minetest.place_schematic(newpos, path) + + return minetest.place_schematic(newpos, path, rotation) -- don't serialize schematics for registered biome decorations, for MT 5.4.0, https://github.com/minetest/minetest/issues/10995 end -mcl_structures.generate_witch_hut = function(pos, rotation) - local path = minetest.get_modpath("mcl_structures").."/schematics/mcl_structures_witch_hut.mts" - return minetest.place_schematic(pos, path, rotation, nil, true) +local function hut_placement_callback(p1, p2, size, orientation, pr) + if not p1 or not p2 then return end + local legs = minetest.find_nodes_in_area(p1, p2, "mcl_core:tree") + for i = 1, #legs do + while minetest.get_item_group(mcl_vars.get_node({x=legs[i].x, y=legs[i].y-1, z=legs[i].z}, true, 333333).name, "water") ~= 0 do + legs[i].y = legs[i].y - 1 + minetest.swap_node(legs[i], {name = "mcl_core:tree", param2 = 2}) + end + end end -mcl_structures.generate_ice_spike_small = function(pos) - local path = minetest.get_modpath("mcl_structures").."/schematics/mcl_structures_ice_spike_small.mts" - return minetest.place_schematic(pos, path, "random", nil, false) +function mcl_structures.generate_witch_hut(pos, rotation, pr) + local path = modpath.."/schematics/mcl_structures_witch_hut.mts" + mcl_structures.place_schematic(pos, path, rotation, nil, true, nil, hut_placement_callback, pr) end -mcl_structures.generate_ice_spike_large = function(pos) - local path = minetest.get_modpath("mcl_structures").."/schematics/mcl_structures_ice_spike_large.mts" - return minetest.place_schematic(pos, path, "random", nil, false) +function mcl_structures.generate_ice_spike_small(pos, rotation) + local path = modpath.."/schematics/mcl_structures_ice_spike_small.mts" + return minetest.place_schematic(pos, path, rotation or "random", nil, false) -- don't serialize schematics for registered biome decorations, for MT 5.4.0 end -mcl_structures.generate_fossil = function(pos) +function mcl_structures.generate_ice_spike_large(pos, rotation) + local path = modpath.."/schematics/mcl_structures_ice_spike_large.mts" + return minetest.place_schematic(pos, path, rotation or "random", nil, false) -- don't serialize schematics for registered biome decorations, for MT 5.4.0 +end + +function mcl_structures.generate_fossil(pos, rotation, pr) -- Generates one out of 8 possible fossil pieces local newpos = {x=pos.x,y=pos.y-1,z=pos.z} local fossils = { @@ -263,34 +319,36 @@ mcl_structures.generate_fossil = function(pos) "mcl_structures_fossil_spine_3.mts", -- 7×4×13 "mcl_structures_fossil_spine_4.mts", -- 8×5×13 } - local r = math.random(1, #fossils) - local path = minetest.get_modpath("mcl_structures").."/schematics/"..fossils[r] - return minetest.place_schematic(newpos, path, "random", nil, true) + local r = pr:next(1, #fossils) + local path = modpath.."/schematics/"..fossils[r] + return mcl_structures.place_schematic(newpos, path, rotation or "random", nil, true) end -mcl_structures.generate_end_exit_portal = function(pos) - local path = minetest.get_modpath("mcl_structures").."/schematics/mcl_structures_end_exit_portal.mts" - return minetest.place_schematic(pos, path, "0", nil, true) +function mcl_structures.generate_end_exit_portal(pos, rot) + local path = modpath.."/schematics/mcl_structures_end_exit_portal.mts" + return mcl_structures.place_schematic(pos, path, rot or "0", {["mcl_portals:portal_end"] = "air"}, true) end -local generate_end_portal_shrine_no_delay = function(newpos) - local path = minetest.get_modpath("mcl_structures").."/schematics/mcl_structures_end_portal_room_simple.mts" - local size = {x=13, y=8, z=13} - local ret = minetest.place_schematic(newpos, path, "0", nil, true) - if ret == nil then - return ret - end +function mcl_structures.generate_end_exit_portal_open(pos, rot) + local path = modpath.."/schematics/mcl_structures_end_exit_portal.mts" + return mcl_structures.place_schematic(pos, path, rot or "0", nil, true) +end - local area_start, area_end = newpos, vector.add(newpos, size) +function mcl_structures.generate_end_gateway_portal(pos, rot) + local path = modpath.."/schematics/mcl_structures_end_gateway_portal.mts" + return mcl_structures.place_schematic(pos, path, rot or "0", nil, true) +end + +local function shrine_placement_callback(p1, p2, size, rotation, pr) -- Find and setup spawner with silverfish - local spawners = minetest.find_nodes_in_area(area_start, area_end, "mcl_mobspawners:spawner") + local spawners = minetest.find_nodes_in_area(p1, p2, "mcl_mobspawners:spawner") for s=1, #spawners do - local meta = minetest.get_meta(spawners[s]) + --local meta = minetest.get_meta(spawners[s]) mcl_mobspawners.setup_spawner(spawners[s], "mobs_mc:silverfish") end -- Shuffle stone brick types - local bricks = minetest.find_nodes_in_area(area_start, area_end, "mcl_core:stonebrick") + local bricks = minetest.find_nodes_in_area(p1, p2, "mcl_core:stonebrick") for b=1, #bricks do local r_bricktype = pr:next(1, 100) local r_infested = pr:next(1, 100) @@ -311,13 +369,13 @@ local generate_end_portal_shrine_no_delay = function(newpos) end -- 50% stonebrick (no change necessary) end - if bricktype ~= nil then + if bricktype then minetest.set_node(bricks[b], { name = bricktype }) end end -- Also replace stairs - local stairs = minetest.find_nodes_in_area(area_start, area_end, {"mcl_stairs:stair_stonebrick", "mcl_stairs:stair_stonebrick_outer", "mcl_stairs:stair_stonebrick_inner"}) + local stairs = minetest.find_nodes_in_area(p1, p2, {"mcl_stairs:stair_stonebrick", "mcl_stairs:stair_stonebrick_outer", "mcl_stairs:stair_stonebrick_inner"}) for s=1, #stairs do local stair = minetest.get_node(stairs[s]) local r_type = pr:next(1, 100) @@ -344,7 +402,7 @@ local generate_end_portal_shrine_no_delay = function(newpos) end -- Randomly add ender eyes into end portal frames, but never fill the entire frame - local frames = minetest.find_nodes_in_area(area_start, area_end, "mcl_portals:end_portal_frame") + local frames = minetest.find_nodes_in_area(p1, p2, "mcl_portals:end_portal_frame") local eyes = 0 for f=1, #frames do local r_eye = pr:next(1, 10) @@ -357,40 +415,34 @@ local generate_end_portal_shrine_no_delay = function(newpos) end end end - - return ret end -local function ecb_generate_end_portal_shrine(blockpos, action, calls_remaining, param) - if calls_remaining <= 0 then - generate_end_portal_shrine_no_delay({x=param.x, y=param.y, z=param.z}) - end -end - -mcl_structures.generate_end_portal_shrine = function(pos) - local offset = {x=6, y=8, z=6} - local size = {x=13, y=8, z=13} +function mcl_structures.generate_end_portal_shrine(pos, rotation, pr) + local offset = {x=6, y=4, z=6} + --local size = {x=13, y=8, z=13} local newpos = { x = pos.x - offset.x, y = pos.y, z = pos.z - offset.z } - minetest.emerge_area(vector.subtract(newpos,10), vector.add(vector.add(newpos, size),10), ecb_generate_end_portal_shrine, {x=newpos.x, y=newpos.y, z=newpos.z}) + + local path = modpath.."/schematics/mcl_structures_end_portal_room_simple.mts" + mcl_structures.place_schematic(newpos, path, rotation or "0", nil, true, nil, shrine_placement_callback, pr) end -mcl_structures.generate_desert_temple = function(pos) - -- No Generating for the temple ... Why using it ? No Change - local path = minetest.get_modpath("mcl_structures").."/schematics/mcl_structures_desert_temple.mts" - local newpos = {x=pos.x,y=pos.y-12,z=pos.z} - local size = {x=22, y=24, z=22} - if newpos == nil then - return - end - local ret = minetest.place_schematic(newpos, path, "random", nil, true) - if ret == nil then - return ret +local function temple_placement_callback(p1, p2, size, rotation, pr) + + -- Delete cacti leftovers: + local cactus_nodes = minetest.find_nodes_in_area_under_air(p1, p2, "mcl_core:cactus") + if cactus_nodes and #cactus_nodes > 0 then + for _, pos in pairs(cactus_nodes) do + local node_below = minetest.get_node({x=pos.x, y=pos.y-1, z=pos.z}) + if node_below and node_below.name == "mcl_core:sandstone" then + minetest.swap_node(pos, {name="air"}) + end + end end -- Find chests. -- FIXME: Searching this large area just for the chets is not efficient. Need a better way to find the chests; -- probably let's just infer it from newpos because the schematic always the same. - local chests = minetest.find_nodes_in_area({x=newpos.x-size.x, y=newpos.y, z=newpos.z-size.z}, vector.add(newpos, size), "mcl_chests:chest") + local chests = minetest.find_nodes_in_area(p1, p2, "mcl_chests:chest") -- Add desert temple loot into chests for c=1, #chests do @@ -402,7 +454,7 @@ mcl_structures.generate_desert_temple = function(pos) { itemstring = "mcl_mobitems:bone", weight = 25, amount_min = 4, amount_max=6 }, { itemstring = "mcl_mobitems:rotten_flesh", weight = 25, amount_min = 3, amount_max=7 }, { itemstring = "mcl_mobitems:spider_eye", weight = 25, amount_min = 1, amount_max=3 }, - { itemstack = mcl_enchanting.get_uniform_randomly_enchanted_book({"soul_speed"}), weight = 20, }, + { itemstack = mcl_enchanting.get_uniform_randomly_enchanted_book({"soul_speed"}, pr), weight = 20, }, { itemstring = "mcl_mobitems:saddle", weight = 20, }, { itemstring = "mcl_core:apple_gold", weight = 20, }, { itemstring = "mcl_core:gold_ingot", weight = 15, amount_min = 2, amount_max = 7 }, @@ -427,16 +479,14 @@ mcl_structures.generate_desert_temple = function(pos) { itemstring = "mcl_mobitems:string", weight = 10, amount_min = 1, amount_max = 8 }, } }}, pr) - - local meta = minetest.get_meta(chests[c]) init_node_construct(chests[c]) local meta = minetest.get_meta(chests[c]) local inv = meta:get_inventory() - mcl_loot.fill_inventory(inv, "main", lootitems) + mcl_loot.fill_inventory(inv, "main", lootitems, pr) end -- Initialize pressure plates and randomly remove up to 5 plates - local pplates = minetest.find_nodes_in_area({x=newpos.x-size.x, y=newpos.y, z=newpos.z-size.z}, vector.add(newpos, size), "mesecons_pressureplates:pressure_plate_stone_off") + local pplates = minetest.find_nodes_in_area(p1, p2, "mesecons_pressureplates:pressure_plate_stone_off") local pplates_remove = 5 for p=1, #pplates do if pplates_remove > 0 and pr:next(1, 100) >= 50 then @@ -448,8 +498,17 @@ mcl_structures.generate_desert_temple = function(pos) minetest.registered_nodes["mesecons_pressureplates:pressure_plate_stone_off"].on_construct(pplates[p]) end end +end - return ret +function mcl_structures.generate_desert_temple(pos, rotation, pr) + -- No Generating for the temple ... Why using it ? No Change + local path = modpath.."/schematics/mcl_structures_desert_temple.mts" + local newpos = {x=pos.x,y=pos.y-12,z=pos.z} + --local size = {x=22, y=24, z=22} + if newpos == nil then + return + end + mcl_structures.place_schematic(newpos, path, rotation or "random", nil, true, nil, temple_placement_callback, pr) end local registered_structures = {} @@ -465,7 +524,7 @@ Format of return value: TODO: Implement this function for all other structure types as well. ]] -mcl_structures.get_registered_structures = function(structure_type) +function mcl_structures.get_registered_structures(structure_type) if registered_structures[structure_type] then return table.copy(registered_structures[structure_type]) else @@ -475,43 +534,68 @@ end -- Register a structures table for the given type. The table format is the same as for -- mcl_structures.get_registered_structures. -mcl_structures.register_structures = function(structure_type, structures) +function mcl_structures.register_structures(structure_type, structures) registered_structures[structure_type] = structures end +local function dir_to_rotation(dir) + local ax, az = math.abs(dir.x), math.abs(dir.z) + if ax > az then + if dir.x < 0 then + return "270" + end + return "90" + end + if dir.z < 0 then + return "180" + end + return "0" +end + -- Debug command minetest.register_chatcommand("spawnstruct", { - params = "desert_temple | desert_well | igloo | witch_hut | boulder | ice_spike_small | ice_spike_large | fossil | end_exit_portal | end_portal_shrine", + params = "desert_temple | desert_well | igloo | witch_hut | boulder | ice_spike_small | ice_spike_large | fossil | end_exit_portal | end_exit_portal_open | end_gateway_portal | end_portal_shrine | nether_portal | dungeon", description = S("Generate a pre-defined structure near your position."), privs = {debug = true}, func = function(name, param) - local pos = minetest.get_player_by_name(name):get_pos() - if not pos then - return - end + local player = minetest.get_player_by_name(name) + if not player then return end + local pos = player:get_pos() + if not pos then return end pos = vector.round(pos) + local dir = minetest.yaw_to_dir(player:get_look_horizontal()) + local rot = dir_to_rotation(dir) + local pr = PseudoRandom(pos.x+pos.y+pos.z) local errord = false local message = S("Structure placed.") if param == "desert_temple" then - mcl_structures.generate_desert_temple(pos) + mcl_structures.generate_desert_temple(pos, rot, pr) elseif param == "desert_well" then - mcl_structures.generate_desert_well(pos) + mcl_structures.generate_desert_well(pos, rot) elseif param == "igloo" then - mcl_structures.generate_igloo(pos) + mcl_structures.generate_igloo(pos, rot, pr) elseif param == "witch_hut" then - mcl_structures.generate_witch_hut(pos) + mcl_structures.generate_witch_hut(pos, rot, pr) elseif param == "boulder" then - mcl_structures.generate_boulder(pos) + mcl_structures.generate_boulder(pos, rot, pr) elseif param == "fossil" then - mcl_structures.generate_fossil(pos) + mcl_structures.generate_fossil(pos, rot, pr) elseif param == "ice_spike_small" then - mcl_structures.generate_ice_spike_small(pos) + mcl_structures.generate_ice_spike_small(pos, rot, pr) elseif param == "ice_spike_large" then - mcl_structures.generate_ice_spike_large(pos) + mcl_structures.generate_ice_spike_large(pos, rot, pr) elseif param == "end_exit_portal" then - mcl_structures.generate_end_exit_portal(pos) + mcl_structures.generate_end_exit_portal(pos, rot, pr) + elseif param == "end_exit_portal_open" then + mcl_structures.generate_end_exit_portal_open(pos, rot, pr) + elseif param == "end_gateway_portal" then + mcl_structures.generate_end_gateway_portal(pos, rot, pr) elseif param == "end_portal_shrine" then - mcl_structures.generate_end_portal_shrine(pos) + mcl_structures.generate_end_portal_shrine(pos, rot, pr) + elseif param == "dungeon" and mcl_dungeons and mcl_dungeons.spawn_dungeon then + mcl_dungeons.spawn_dungeon(pos, rot, pr) + elseif param == "nether_portal" and mcl_portals and mcl_portals.spawn_nether_portal then + mcl_portals.spawn_nether_portal(pos, rot, pr, name) elseif param == "" then message = S("Error: No structure type given. Please use “/spawnstruct ”.") errord = true diff --git a/mods/MAPGEN/mcl_structures/locale/mcl_structures.pl.tr b/mods/MAPGEN/mcl_structures/locale/mcl_structures.pl.tr new file mode 100644 index 000000000..a0a1c69f2 --- /dev/null +++ b/mods/MAPGEN/mcl_structures/locale/mcl_structures.pl.tr @@ -0,0 +1,8 @@ +# textdomain: mcl_structures +Generate a pre-defined structure near your position.=Wygeneruj predefiniowaną strukturę nieopodal twojej pozycji. +Structure placed.=Struktura postawiona. +Village built. WARNING: Villages are experimental and might have bugs.=Wioska zbudowana. UWAGA: Wioski są eksperymentalne i mogą występować błędy. +Error: No structure type given. Please use “/spawnstruct ”.=Błąd: Nie podano typu struktury. Użyj "/spawnstruct ". +Error: Unknown structure type. Please use “/spawnstruct ”.=Błąd: Nieznany typ struktury. Użyj "/spawnstruct ". +Use /help spawnstruct to see a list of avaiable types.=Użyj /help spawnstruct aby zobaczyć listę dostępnych typów. + diff --git a/mods/MAPGEN/mcl_structures/mod.conf b/mods/MAPGEN/mcl_structures/mod.conf index 862441905..3150c7cec 100644 --- a/mods/MAPGEN/mcl_structures/mod.conf +++ b/mods/MAPGEN/mcl_structures/mod.conf @@ -1 +1,4 @@ name = mcl_structures +author = Wuzzy +description = Structures for MCL2 +depends = mcl_loot diff --git a/mods/MAPGEN/mcl_structures/schematics/mcl_structures_end_gateway_portal.mts b/mods/MAPGEN/mcl_structures/schematics/mcl_structures_end_gateway_portal.mts new file mode 100644 index 0000000000000000000000000000000000000000..24b06a1c8feb879c7480ccaacebb07c0fa405ac6 GIT binary patch literal 109 zcmeYb3HD`RVPIxpWniuc0U(n(F|&w4AU8QDJ~_WA)ha19r6@l+n?VXBQjlL%l9*F$ z1)<~96H8Ld6Dup`Bqua5xv{Z0q#HLWGBXPcNzbpcSmCbt`t|FFD!X(v85s6$WNQKd D{xKuw literal 0 HcmV?d00001 diff --git a/mods/MAPGEN/mcl_villages/buildings.lua b/mods/MAPGEN/mcl_villages/buildings.lua index 0d58739ed..a69029063 100644 --- a/mods/MAPGEN/mcl_villages/buildings.lua +++ b/mods/MAPGEN/mcl_villages/buildings.lua @@ -4,27 +4,27 @@ ------------------------------------------------------------------------------- function settlements.build_schematic(vm, data, va, pos, building, replace_wall, name) -- get building node material for better integration to surrounding - local platform_material = mcl_util.get_far_node(pos, true) - if not platform_material then + local platform_material = mcl_vars.get_node(pos) + if not platform_material or (platform_material.name == "air" or platform_material.name == "ignore") then return end platform_material = platform_material.name -- pick random material local material = wallmaterial[math.random(1,#wallmaterial)] -- schematic conversion to lua - local schem_lua = minetest.serialize_schematic(building, - "lua", - {lua_use_comments = false, lua_num_indent_spaces = 0}).." return(schematic)" + local schem_lua = minetest.serialize_schematic(building, + "lua", + {lua_use_comments = false, lua_num_indent_spaces = 0}).." return schematic" -- replace material if replace_wall == "y" then schem_lua = schem_lua:gsub("mcl_core:cobble", material) end - schem_lua = schem_lua:gsub("mcl_core:dirt_with_grass", + schem_lua = schem_lua:gsub("mcl_core:dirt_with_grass", platform_material) -- Disable special junglewood for now. -- special material for spawning npcs - -- schem_lua = schem_lua:gsub("mcl_core:junglewood", + -- schem_lua = schem_lua:gsub("mcl_core:junglewood", -- "settlements:junglewood") -- @@ -37,25 +37,25 @@ function settlements.build_schematic(vm, data, va, pos, building, replace_wall, local possible_rotations = {"0", "90", "180", "270"} local rotation = possible_rotations[ math.random( #possible_rotations ) ] settlements.foundation( - pos, - width, - depth, - height, + pos, + width, + depth, + height, rotation) vm:set_data(data) -- place schematic minetest.place_schematic_on_vmanip( - vm, - pos, - schematic, - rotation, - nil, + vm, + pos, + schematic, + rotation, + nil, true) vm:write_to_map(true) end]] ------------------------------------------------------------------------------- --- initialize settlement_info +-- initialize settlement_info ------------------------------------------------------------------------------- function settlements.initialize_settlement_info(pr) local count_buildings = {} @@ -81,12 +81,15 @@ function settlements.create_site_plan(maxp, minp, pr) local possible_rotations = {"0", "90", "180", "270"} -- find center of chunk local center = { - x=maxp.x-half_map_chunk_size, - y=maxp.y, - z=maxp.z-half_map_chunk_size - } + x=math.floor((minp.x+maxp.x)/2), + y=maxp.y, + z=math.floor((minp.z+maxp.z)/2) + } -- find center_surface of chunk - local center_surface , surface_material = settlements.find_surface(center) + local center_surface , surface_material = settlements.find_surface(center, true) + local chunks = {} + chunks[mcl_vars.get_chunk_number(center)] = true + -- go build settlement around center if not center_surface then return false end @@ -102,8 +105,8 @@ function settlements.create_site_plan(maxp, minp, pr) -- add to settlement info table local index = 1 settlement_info[index] = { - pos = center_surface, - name = building_all_info["name"], + pos = center_surface, + name = building_all_info["name"], hsize = building_all_info["hsize"], rotat = rotation, surface_mat = surface_material @@ -114,49 +117,57 @@ function settlements.create_site_plan(maxp, minp, pr) local x, z, r = center_surface.x, center_surface.z, building_all_info["hsize"] -- draw j circles around center and increase radius by math.random(2,5) for j = 1,20 do - if number_built < number_of_buildings then - -- set position on imaginary circle - for j = 0, 360, 15 do - local angle = j * math.pi / 180 - local ptx, ptz = x + r * math.cos( angle ), z + r * math.sin( angle ) - ptx = settlements.round(ptx, 0) - ptz = settlements.round(ptz, 0) - local pos1 = { x=ptx, y=center_surface.y+50, z=ptz} - local pos_surface, surface_material = settlements.find_surface(pos1) - if not pos_surface then break end + -- set position on imaginary circle + for j = 0, 360, 15 do + local angle = j * math.pi / 180 + local ptx, ptz = x + r * math.cos( angle ), z + r * math.sin( angle ) + ptx = settlements.round(ptx, 0) + ptz = settlements.round(ptz, 0) + local pos1 = { x=ptx, y=center_surface.y+50, z=ptz} + local chunk_number = mcl_vars.get_chunk_number(pos1) + local pos_surface, surface_material + if chunks[chunk_number] then + pos_surface, surface_material = settlements.find_surface(pos1) + else + chunks[chunk_number] = true + pos_surface, surface_material = settlements.find_surface(pos1, true) + end + if not pos_surface then break end - local randomized_schematic_table = shuffle(settlements.schematic_table, pr) - -- pick schematic - local size = #randomized_schematic_table - for i = size, 1, -1 do - -- already enough buildings of that type? - if count_buildings[randomized_schematic_table[i]["name"]] < randomized_schematic_table[i]["max_num"]*number_of_buildings then - building_all_info = randomized_schematic_table[i] - -- check distance to other buildings - local distance_to_other_buildings_ok = settlements.check_distance(settlement_info, pos_surface, building_all_info["hsize"]) - if distance_to_other_buildings_ok then - -- count built houses - count_buildings[building_all_info["name"]] = count_buildings[building_all_info["name"]] +1 - rotation = possible_rotations[ pr:next(1, #possible_rotations ) ] - number_built = number_built + 1 - settlement_info[index] = { - pos = pos_surface, - name = building_all_info["name"], - hsize = building_all_info["hsize"], - rotat = rotation, - surface_mat = surface_material - } - index = index + 1 - break - end + local randomized_schematic_table = shuffle(settlements.schematic_table, pr) + -- pick schematic + local size = #randomized_schematic_table + for i = size, 1, -1 do + -- already enough buildings of that type? + if count_buildings[randomized_schematic_table[i]["name"]] < randomized_schematic_table[i]["max_num"]*number_of_buildings then + building_all_info = randomized_schematic_table[i] + -- check distance to other buildings + local distance_to_other_buildings_ok = settlements.check_distance(settlement_info, pos_surface, building_all_info["hsize"]) + if distance_to_other_buildings_ok then + -- count built houses + count_buildings[building_all_info["name"]] = count_buildings[building_all_info["name"]] +1 + rotation = possible_rotations[ pr:next(1, #possible_rotations ) ] + number_built = number_built + 1 + settlement_info[index] = { + pos = pos_surface, + name = building_all_info["name"], + hsize = building_all_info["hsize"], + rotat = rotation, + surface_mat = surface_material + } + index = index + 1 + break end end - if number_of_buildings == number_built then - break - end end - r = r + pr:next(2,5) + if number_of_buildings == number_built then + break + end end + if number_built >= number_of_buildings then + break + end + r = r + pr:next(2,5) end settlements.debug("really ".. number_built) return settlement_info @@ -164,6 +175,36 @@ end ------------------------------------------------------------------------------- -- evaluate settlement_info and place schematics ------------------------------------------------------------------------------- +-- Initialize node +local function construct_node(p1, p2, name) + local r = minetest.registered_nodes[name] + if r then + if r.on_construct then + local nodes = minetest.find_nodes_in_area(p1, p2, name) + for p=1, #nodes do + local pos = nodes[p] + r.on_construct(pos) + end + return nodes + end + minetest.log("warning", "[mcl_villages] No on_construct defined for node name " .. name) + return + end + minetest.log("warning", "[mcl_villages] Attempt to 'construct' inexistant nodes: " .. name) +end +local function init_nodes(p1, p2, size, rotation, pr) + construct_node(p1, p2, "mcl_itemframes:item_frame") + construct_node(p1, p2, "mcl_furnaces:furnace") + construct_node(p1, p2, "mcl_anvils:anvil") + + local nodes = construct_node(p1, p2, "mcl_chests:chest") + if nodes and #nodes > 0 then + for p=1, #nodes do + local pos = nodes[p] + settlements.fill_chest(pos, pr) + end + end +end function settlements.place_schematics(settlement_info, pr) local building_all_info for i, built_house in ipairs(settlement_info) do @@ -174,10 +215,10 @@ function settlements.place_schematics(settlement_info, pr) end end - local pos = settlement_info[i]["pos"] - local rotation = settlement_info[i]["rotat"] + local pos = settlement_info[i]["pos"] + local rotation = settlement_info[i]["rotat"] -- get building node material for better integration to surrounding - local platform_material = settlement_info[i]["surface_mat"] + local platform_material = settlement_info[i]["surface_mat"] --platform_material_name = minetest.get_name_from_content_id(platform_material) -- pick random material --local material = wallmaterial[pr:next(1,#wallmaterial)] @@ -185,9 +226,9 @@ function settlements.place_schematics(settlement_info, pr) local building = building_all_info["mts"] local replace_wall = building_all_info["rplc"] -- schematic conversion to lua - local schem_lua = minetest.serialize_schematic(building, - "lua", - {lua_use_comments = false, lua_num_indent_spaces = 0}).." return(schematic)" + local schem_lua = minetest.serialize_schematic(building, + "lua", + {lua_use_comments = false, lua_num_indent_spaces = 0}).." return schematic" schem_lua = schem_lua:gsub("mcl_core:stonebrickcarved", "mcl_villages:stonebrickcarved") -- replace material if replace_wall then @@ -227,11 +268,15 @@ function settlements.place_schematics(settlement_info, pr) local schematic = loadstring(schem_lua)() -- build foundation for the building an make room above -- place schematic - minetest.place_schematic( - pos, - schematic, - rotation, - nil, - true) + mcl_structures.place_schematic( + pos, + schematic, + rotation, + nil, + true, + nil, + init_nodes, + pr + ) end end diff --git a/mods/MAPGEN/mcl_villages/const.lua b/mods/MAPGEN/mcl_villages/const.lua index 4e2b39136..eb7806209 100644 --- a/mods/MAPGEN/mcl_villages/const.lua +++ b/mods/MAPGEN/mcl_villages/const.lua @@ -1,5 +1,5 @@ -- switch for debugging -settlements.debug = function(message) +function settlements.debug(message) -- minetest.chat_send_all(message) -- minetest.log("warning", "[mcl_villages] "..message) minetest.log("verbose", "[mcl_villages] "..message) @@ -7,16 +7,16 @@ end --[[ Manually set in 'buildings.lua' -- material to replace cobblestone with -wallmaterial = { - "mcl_core:junglewood", - "mcl_core:sprucewood", - "mcl_core:wood", - "mcl_core:birchwood", - "mcl_core:acaciawood", - "mcl_core:stonebrick", - "mcl_core:cobble", - "mcl_core:sandstonecarved", - "mcl_core:sandstone", +local wallmaterial = { + "mcl_core:junglewood", + "mcl_core:sprucewood", + "mcl_core:wood", + "mcl_core:birchwood", + "mcl_core:acaciawood", + "mcl_core:stonebrick", + "mcl_core:cobble", + "mcl_core:sandstonecarved", + "mcl_core:sandstone", "mcl_core:sandstonesmooth2" } --]] @@ -78,4 +78,4 @@ max_height_difference = 56 -- -- half_map_chunk_size = 40 -quarter_map_chunk_size = 20 +--quarter_map_chunk_size = 20 diff --git a/mods/MAPGEN/mcl_villages/depends.txt b/mods/MAPGEN/mcl_villages/depends.txt deleted file mode 100644 index e9d14ad9b..000000000 --- a/mods/MAPGEN/mcl_villages/depends.txt +++ /dev/null @@ -1,5 +0,0 @@ -mcl_util -mcl_core -mcl_loot -mcl_farming? -mobs_mc? diff --git a/mods/MAPGEN/mcl_villages/foundation.lua b/mods/MAPGEN/mcl_villages/foundation.lua index 98726966c..71c5cfdda 100644 --- a/mods/MAPGEN/mcl_villages/foundation.lua +++ b/mods/MAPGEN/mcl_villages/foundation.lua @@ -9,15 +9,15 @@ function settlements.ground(pos, pr) -- role model: Wendelsteinkircherl, Brannen while true do cnt = cnt+1 if cnt > 20 then break end - if cnt>pr:next(2,4) then - mat = "mcl_core:stone" + if cnt>pr:next(2,4) then + mat = "mcl_core:stone" end minetest.swap_node(p2, {name=mat}) p2.y = p2.y-1 end end ------------------------------------------------------------------------------- --- function clear space above baseplate +-- function clear space above baseplate ------------------------------------------------------------------------------- function settlements.terraform(settlement_info, pr) local fheight, fwidth, fdepth, schematic_data @@ -30,7 +30,7 @@ function settlements.terraform(settlement_info, pr) break end end - local pos = settlement_info[i]["pos"] + local pos = settlement_info[i]["pos"] if settlement_info[i]["rotat"] == "0" or settlement_info[i]["rotat"] == "180" then fwidth = schematic_data["hwidth"] fdepth = schematic_data["hdepth"] @@ -51,11 +51,12 @@ function settlements.terraform(settlement_info, pr) settlements.ground(p, pr) else -- write ground - local p = {x=pos.x+xi, y=pos.y+yi, z=pos.z+zi} - local node = mcl_util.get_far_node(p, true) - if node and node.name ~= "air" then - minetest.swap_node(p,{name="air"}) - end +-- local p = {x=pos.x+xi, y=pos.y+yi, z=pos.z+zi} +-- local node = mcl_vars.get_node(p) +-- if node and node.name ~= "air" then +-- minetest.swap_node(p,{name="air"}) +-- end + minetest.swap_node({x=pos.x+xi, y=pos.y+yi, z=pos.z+zi},{name="air"}) end end end diff --git a/mods/MAPGEN/mcl_villages/init.lua b/mods/MAPGEN/mcl_villages/init.lua index 287b4c9be..7e460990e 100644 --- a/mods/MAPGEN/mcl_villages/init.lua +++ b/mods/MAPGEN/mcl_villages/init.lua @@ -1,5 +1,5 @@ settlements = {} -settlements.modpath = minetest.get_modpath("mcl_villages") +settlements.modpath = minetest.get_modpath(minetest.get_current_modname()) dofile(settlements.modpath.."/const.lua") dofile(settlements.modpath.."/utils.lua") @@ -37,7 +37,7 @@ minetest.register_node("mcl_villages:stonebrickcarved", { -- -- register inhabitants -- -if minetest.get_modpath("mobs_mc") ~= nil then +if minetest.get_modpath("mobs_mc") then mobs:register_spawn("mobs_mc:villager", --name {"mcl_core:stonebrickcarved"}, --nodes 15, --max_light @@ -46,13 +46,13 @@ if minetest.get_modpath("mobs_mc") ~= nil then 7, --active_object_count 31000, --max_height nil) --day_toggle -end +end --]] -- -- on map generation, try to build a settlement -- -local function build_a_settlement_no_delay(minp, maxp, blockseed) +local function build_a_settlement(minp, maxp, blockseed) local pr = PseudoRandom(blockseed) -- fill settlement_info with buildings and their data @@ -67,35 +67,30 @@ local function build_a_settlement_no_delay(minp, maxp, blockseed) -- evaluate settlement_info and place schematics settlements.place_schematics(settlement_info, pr) - - -- evaluate settlement_info and initialize furnaces and chests - settlements.initialize_nodes(settlement_info, pr) end -local function ecb_build_a_settlement(blockpos, action, calls_remaining, param) - if calls_remaining <= 0 then - build_a_settlement_no_delay(param.minp, param.maxp, param.blockseed) - end +local function ecb_village(blockpos, action, calls_remaining, param) + if calls_remaining >= 1 then return end + local minp, maxp, blockseed = param.minp, param.maxp, param.blockseed + build_a_settlement(minp, maxp, blockseed) end -- Disable natural generation in singlenode. local mg_name = minetest.get_mapgen_setting("mg_name") if mg_name ~= "singlenode" then - minetest.register_on_generated(function(minp, maxp, blockseed) - -- needed for manual and automated settlement building - local heightmap = minetest.get_mapgen_object("heightmap") - - -- randomly try to build settlements - if blockseed % 77 ~= 17 then return end - + mcl_mapgen_core.register_generator("villages", nil, function(minp, maxp, blockseed) -- don't build settlement underground if maxp.y < 0 then return end - + -- randomly try to build settlements + if blockseed % 77 ~= 17 then return end + -- needed for manual and automated settlement building -- don't build settlements on (too) uneven terrain - local height_difference = settlements.evaluate_heightmap(minp, maxp) + --local heightmap = minetest.get_mapgen_object("heightmap") + local height_difference = settlements.evaluate_heightmap() if height_difference > max_height_difference then return end - -- we need 'minetest.after' here to exit from emerging thread we probably currently in: - minetest.after(0.1, build_a_settlement_no_delay, vector.new(minp), vector.new(maxp), blockseed) + + local param={minp=vector.new(minp), maxp=vector.new(maxp), blockseed=blockseed} + minetest.emerge_area(minp, maxp, ecb_village, param) end) end -- manually place villages @@ -108,7 +103,8 @@ if minetest.is_creative_enabled("") then if not pointed_thing.under then return end local minp = vector.subtract( pointed_thing.under, half_map_chunk_size) local maxp = vector.add( pointed_thing.under, half_map_chunk_size) - build_a_settlement_no_delay(minp, maxp, math.random(0,32767)) + build_a_settlement(minp, maxp, math.random(0,32767)) end }) + mcl_wip.register_experimental_item("mcl_villages:tool") end diff --git a/mods/MAPGEN/mcl_villages/mod.conf b/mods/MAPGEN/mcl_villages/mod.conf new file mode 100644 index 000000000..d8e2aa7d4 --- /dev/null +++ b/mods/MAPGEN/mcl_villages/mod.conf @@ -0,0 +1,5 @@ +name = mcl_villages +author = Rochambeau +description = This mod adds settlements on world generation. +depends = mcl_util, mcl_mapgen_core, mcl_structures, mcl_core, mcl_loot +optional_depends = mcl_farming, mobs_mc diff --git a/mods/MAPGEN/mcl_villages/paths.lua b/mods/MAPGEN/mcl_villages/paths.lua index 4973171a6..63f2ba146 100644 --- a/mods/MAPGEN/mcl_villages/paths.lua +++ b/mods/MAPGEN/mcl_villages/paths.lua @@ -6,10 +6,10 @@ function settlements.paths(settlement_info) local end_point local distance --for k,v in pairs(settlement_info) do - starting_point = settlement_info[1]["pos"] + starting_point = settlement_info[1]["pos"] for o,p in pairs(settlement_info) do - end_point = settlement_info[o]["pos"] + end_point = settlement_info[o]["pos"] if starting_point ~= end_point then -- loop until end_point is reched (distance == 0) @@ -40,35 +40,35 @@ function settlements.paths(settlement_info) -- evaluate which pos is closer to the end_point if dist_north_p_to_end <= dist_south_p_to_end and dist_north_p_to_end <= dist_west_p_to_end and - dist_north_p_to_end <= dist_east_p_to_end + dist_north_p_to_end <= dist_east_p_to_end then starting_point = north_p distance = dist_north_p_to_end elseif dist_south_p_to_end <= dist_north_p_to_end and dist_south_p_to_end <= dist_west_p_to_end and - dist_south_p_to_end <= dist_east_p_to_end + dist_south_p_to_end <= dist_east_p_to_end then starting_point = south_p distance = dist_south_p_to_end elseif dist_west_p_to_end <= dist_north_p_to_end and dist_west_p_to_end <= dist_south_p_to_end and - dist_west_p_to_end <= dist_east_p_to_end + dist_west_p_to_end <= dist_east_p_to_end then starting_point = west_p distance = dist_west_p_to_end elseif dist_east_p_to_end <= dist_north_p_to_end and dist_east_p_to_end <= dist_south_p_to_end and - dist_east_p_to_end <= dist_west_p_to_end + dist_east_p_to_end <= dist_west_p_to_end then starting_point = east_p distance = dist_east_p_to_end end -- find surface of new starting point local surface_point, surface_mat = settlements.find_surface(starting_point) - -- replace surface node with mcl_core:grass_path + -- replace surface node with mcl_core:grass_path if surface_point then if surface_mat == "mcl_core:sand" or surface_mat == "mcl_core:redsand" then diff --git a/mods/MAPGEN/mcl_villages/utils.lua b/mods/MAPGEN/mcl_villages/utils.lua index c539e7dc1..993de11c4 100644 --- a/mods/MAPGEN/mcl_villages/utils.lua +++ b/mods/MAPGEN/mcl_villages/utils.lua @@ -1,28 +1,5 @@ -local c_dirt_with_grass = minetest.get_content_id("mcl_core:dirt_with_grass") -local c_dirt_with_snow = minetest.get_content_id("mcl_core:dirt_with_grass_snow") ---local c_dirt_with_dry_grass = minetest.get_content_id("mcl_core:dirt_with_dry_grass") -local c_podzol = minetest.get_content_id("mcl_core:podzol") -local c_sand = minetest.get_content_id("mcl_core:sand") -local c_desert_sand = minetest.get_content_id("mcl_core:redsand") ---local c_silver_sand = minetest.get_content_id("mcl_core:silver_sand") --- -local c_air = minetest.get_content_id("air") -local c_snow = minetest.get_content_id("mcl_core:snow") -local c_fern_1 = minetest.get_content_id("mcl_flowers:fern") -local c_fern_2 = minetest.get_content_id("mcl_flowers:fern") -local c_fern_3 = minetest.get_content_id("mcl_flowers:fern") -local c_rose = minetest.get_content_id("mcl_flowers:poppy") -local c_viola = minetest.get_content_id("mcl_flowers:blue_orchid") -local c_geranium = minetest.get_content_id("mcl_flowers:allium") -local c_tulip = minetest.get_content_id("mcl_flowers:tulip_orange") -local c_dandelion_y = minetest.get_content_id("mcl_flowers:dandelion") -local c_dandelion_w = minetest.get_content_id("mcl_flowers:oxeye_daisy") -local c_bush_leaves = minetest.get_content_id("mcl_core:leaves") -local c_bush_stem = minetest.get_content_id("mcl_core:tree") -local c_a_bush_leaves = minetest.get_content_id("mcl_core:acacialeaves") -local c_a_bush_stem = minetest.get_content_id("mcl_core:acaciatree") -local c_water_source = minetest.get_content_id("mcl_core:water_source") -local c_water_flowing = minetest.get_content_id("mcl_core:water_flowing") +local get_node = mcl_vars.get_node + ------------------------------------------------------------------------------- -- function to copy tables ------------------------------------------------------------------------------- @@ -45,31 +22,27 @@ end -- function to find surface block y coordinate -- returns surface postion ------------------------------------------------------------------------------- -function settlements.find_surface(pos) +function settlements.find_surface(pos, wait) local p6 = vector.new(pos) local cnt = 0 - local itter -- count up or down + local itter = 1 -- count up or down local cnt_max = 200 -- check, in which direction to look for surface - local surface_node = mcl_util.get_far_node(p6, true) - if surface_node and string.find(surface_node.name,"air") then - itter = -1 + local surface_node + if wait then + surface_node = get_node(p6, true, 10000000) else - itter = 1 + surface_node = get_node(p6) + end + if surface_node.name=="air" or surface_node.name=="ignore" then + itter = -1 end -- go through nodes an find surface while cnt < cnt_max do - cnt = cnt+1 - surface_node = mcl_util.get_far_node(p6, true) - if surface_node.name == "ignore" then - settlements.debug("find_surface1: nil or ignore") - return nil - end - -- Check Surface_node and Node above -- if settlements.surface_mat[surface_node.name] then - local surface_node_plus_1 = mcl_util.get_far_node({ x=p6.x, y=p6.y+1, z=p6.z}, true) + local surface_node_plus_1 = get_node({ x=p6.x, y=p6.y+1, z=p6.z}) if surface_node_plus_1 and surface_node and (string.find(surface_node_plus_1.name,"air") or string.find(surface_node_plus_1.name,"snow") or @@ -93,6 +66,8 @@ function settlements.find_surface(pos) settlements.debug("find_surface4: y<0") return nil end + cnt = cnt+1 + surface_node = get_node(p6) end settlements.debug("find_surface5: cnt_max overflow") return nil @@ -151,7 +126,7 @@ function settlements.fill_chest(pos, pr) -- fill chest local inv = minetest.get_inventory( {type="node", pos=pos} ) - local function get_treasures(pr) + local function get_treasures(prand) local loottable = {{ stacks_min = 3, stacks_max = 8, @@ -175,12 +150,12 @@ function settlements.fill_chest(pos, pr) { itemstring = "mobs_mc:diamond_horse_armor", weight = 1 }, } }} - local items = mcl_loot.get_multi_loot(loottable, pr) + local items = mcl_loot.get_multi_loot(loottable, prand) return items end local items = get_treasures(pr) - mcl_loot.fill_inventory(inv, "main", items) + mcl_loot.fill_inventory(inv, "main", items, pr) end ------------------------------------------------------------------------------- @@ -188,14 +163,14 @@ end ------------------------------------------------------------------------------- function settlements.initialize_furnace(pos) -- find chests within radius - local furnacepos = minetest.find_node_near(pos, + local furnacepos = minetest.find_node_near(pos, 7, --radius {"mcl_furnaces:furnace"}) -- initialize furnacepos (mts furnacepos don't have meta) - if furnacepos + if furnacepos then local meta = minetest.get_meta(furnacepos) - if meta:get_string("infotext") ~= "furnace" + if meta:get_string("infotext") ~= "furnace" then minetest.registered_nodes["mcl_furnaces:furnace"].on_construct(furnacepos) end @@ -206,57 +181,20 @@ end ------------------------------------------------------------------------------- function settlements.initialize_anvil(pos) -- find chests within radius - local anvilpos = minetest.find_node_near(pos, + local anvilpos = minetest.find_node_near(pos, 7, --radius {"mcl_anvils:anvil"}) -- initialize anvilpos (mts anvilpos don't have meta) - if anvilpos + if anvilpos then local meta = minetest.get_meta(anvilpos) - if meta:get_string("infotext") ~= "anvil" + if meta:get_string("infotext") ~= "anvil" then minetest.registered_nodes["mcl_anvils:anvil"].on_construct(anvilpos) end end end ------------------------------------------------------------------------------- --- initialize furnace, chests, anvil -------------------------------------------------------------------------------- -local building_all_info -function settlements.initialize_nodes(settlement_info, pr) - for i, built_house in ipairs(settlement_info) do - for j, schem in ipairs(settlements.schematic_table) do - if settlement_info[i]["name"] == schem["name"] then - building_all_info = schem - break - end - end - - local width = building_all_info["hwidth"] - local depth = building_all_info["hdepth"] - local height = building_all_info["hheight"] - - local p = settlement_info[i]["pos"] - for yi = 1,height do - for xi = 0,width do - for zi = 0,depth do - local ptemp = {x=p.x+xi, y=p.y+yi, z=p.z+zi} - local node = mcl_util.get_far_node(ptemp, true) - if node.name == "mcl_furnaces:furnace" or - node.name == "mcl_chests:chest" or - node.name == "mcl_anvils:anvil" then - minetest.registered_nodes[node.name].on_construct(ptemp) - end - -- when chest is found -> fill with stuff - if node.name == "mcl_chests:chest" then - minetest.after(3, settlements.fill_chest, ptemp, pr) - end - end - end - end - end -end -------------------------------------------------------------------------------- -- randomize table ------------------------------------------------------------------------------- function shuffle(tbl, pr) @@ -272,44 +210,39 @@ end -- evaluate heightmap ------------------------------------------------------------------------------- function settlements.evaluate_heightmap() - local heightmap = minetest.get_mapgen_object("heightmap") - -- max height and min height, initialize with impossible values for easier first time setting - local max_y = -50000 - local min_y = 50000 - -- only evaluate the center square of heightmap 40 x 40 - local square_start = 1621 - local square_end = 1661 - for j = 1 , 40, 1 do - for i = square_start, square_end, 1 do - -- skip buggy heightmaps, return high value - if heightmap[i] == -31000 or - heightmap[i] == 31000 - then - return max_height_difference + 1 - end - if heightmap[i] < min_y - then - min_y = heightmap[i] - end - if heightmap[i] > max_y - then - max_y = heightmap[i] - end - end - -- set next line - square_start = square_start + 80 - square_end = square_end + 80 - end - -- return the difference between highest and lowest pos in chunk - local height_diff = max_y - min_y - -- filter buggy heightmaps - if height_diff <= 1 - then - return max_height_difference + 1 - end - -- debug info - settlements.debug("heightdiff ".. height_diff) - return height_diff + local heightmap = minetest.get_mapgen_object("heightmap") + -- max height and min height, initialize with impossible values for easier first time setting + local max_y = -50000 + local min_y = 50000 + -- only evaluate the center square of heightmap 40 x 40 + local square_start = 1621 + local square_end = 1661 + for j = 1 , 40, 1 do + for i = square_start, square_end, 1 do + -- skip buggy heightmaps, return high value + if heightmap[i] == -31000 or heightmap[i] == 31000 then + return max_height_difference + 1 + end + if heightmap[i] < min_y then + min_y = heightmap[i] + end + if heightmap[i] > max_y then + max_y = heightmap[i] + end + end + -- set next line + square_start = square_start + 80 + square_end = square_end + 80 + end + -- return the difference between highest and lowest pos in chunk + local height_diff = max_y - min_y + -- filter buggy heightmaps + if height_diff <= 1 then + return max_height_difference + 1 + end + -- debug info + settlements.debug("heightdiff ".. height_diff) + return height_diff end ------------------------------------------------------------------------------- -- Set array to list diff --git a/mods/MAPGEN/tsm_railcorridors/depends.txt b/mods/MAPGEN/tsm_railcorridors/depends.txt deleted file mode 100644 index a22565d76..000000000 --- a/mods/MAPGEN/tsm_railcorridors/depends.txt +++ /dev/null @@ -1,8 +0,0 @@ -mcl_init -mcl_worlds -mcl_core -mcl_loot -mcl_tnt -mcl_farming -mcl_mobspawners -mcl_minecarts diff --git a/mods/MAPGEN/tsm_railcorridors/description.txt b/mods/MAPGEN/tsm_railcorridors/description.txt deleted file mode 100644 index 33bfd506a..000000000 --- a/mods/MAPGEN/tsm_railcorridors/description.txt +++ /dev/null @@ -1 +0,0 @@ -Adds simple underground mines with railways and occasional treasure chests. diff --git a/mods/MAPGEN/tsm_railcorridors/gameconfig.lua b/mods/MAPGEN/tsm_railcorridors/gameconfig.lua index 00e2af687..168ecf535 100644 --- a/mods/MAPGEN/tsm_railcorridors/gameconfig.lua +++ b/mods/MAPGEN/tsm_railcorridors/gameconfig.lua @@ -27,7 +27,7 @@ if mg_name == "v6" then } else -- This generates dark oak wood in mesa biomes and oak wood everywhere else. - tsm_railcorridors.nodes.corridor_woods_function = function(pos, node) + function tsm_railcorridors.nodes.corridor_woods_function(pos, node) if minetest.get_item_group(node.name, "hardened_clay") ~= 0 then return "mcl_core:darkwood", "mcl_fences:dark_oak_fence" else @@ -66,7 +66,7 @@ function tsm_railcorridors.get_treasures(pr) items = { { itemstring = "mcl_mobs:nametag", weight = 30 }, { itemstring = "mcl_core:apple_gold", weight = 20 }, - { itemstack = mcl_enchanting.get_uniform_randomly_enchanted_book({"soul_speed"}), weight = 10 }, + { itemstack = mcl_enchanting.get_uniform_randomly_enchanted_book({"soul_speed"}, pr), weight = 10 }, { itemstring = "", weight = 5}, { itemstring = "mcl_core:pick_iron", weight = 5 }, { itemstring = "mcl_core:apple_gold_enchanted", weight = 1 }, diff --git a/mods/MAPGEN/tsm_railcorridors/init.lua b/mods/MAPGEN/tsm_railcorridors/init.lua index f2e02d997..65a7d6a69 100644 --- a/mods/MAPGEN/tsm_railcorridors/init.lua +++ b/mods/MAPGEN/tsm_railcorridors/init.lua @@ -1,3 +1,6 @@ +local pairs = pairs +local tonumber = tonumber + tsm_railcorridors = {} -- Load node names @@ -8,7 +11,7 @@ local setting -- Probability function -- TODO: Check if this is correct -local P = function (float) +local function P(float) return math.floor(32767 * float) end @@ -80,14 +83,14 @@ end -- Enable cobwebs local place_cobwebs = true setting = minetest.settings:get_bool("tsm_railcorridors_place_cobwebs") -if setting ~= nil then +if setting then place_cobwebs = setting end -- Enable mob spawners local place_mob_spawners = true setting = minetest.settings:get_bool("tsm_railcorridors_place_mob_spawners") -if setting ~= nil then +if setting then place_mob_spawners = setting end @@ -114,7 +117,8 @@ if not tsm_railcorridors.nodes.corridor_woods_function then end -- Random Perlin noise generators -local pr, pr_carts, pr_treasures, pr_deco, webperlin_major, webperlin_minor +local pr, pr_carts, pr_deco, webperlin_major, webperlin_minor +--local pr_treasures local function InitRandomizer(seed) -- Mostly used for corridor gen. @@ -124,7 +128,7 @@ local function InitRandomizer(seed) -- Separate randomizer for carts because spawning carts is very timing-dependent pr_carts = PseudoRandom(seed-654) -- Chest contents randomizer - pr_treasures = PseudoRandom(seed+777) + --pr_treasures = PseudoRandom(seed+777) -- Used for cobweb generation, both noises have to reach a high value for cobwebs to appear webperlin_major = PerlinNoise(934, 3, 0.6, 500) webperlin_minor = PerlinNoise(834, 3, 0.6, 50) @@ -174,7 +178,7 @@ end -- Tries to place a rail, taking the damage chance into account local function PlaceRail(pos, damage_chance) - if damage_chance ~= nil and damage_chance > 0 then + if damage_chance and damage_chance > 0 then local x = pr:next(0,100) if x <= damage_chance then return false @@ -380,7 +384,7 @@ local function PlaceChest(pos, param2) local meta = minetest.get_meta(pos) local inv = meta:get_inventory() local items = tsm_railcorridors.get_treasures(pr) - mcl_loot.fill_inventory(inv, "main", items) + mcl_loot.fill_inventory(inv, "main", items, pr) end end @@ -393,8 +397,8 @@ local function RecheckCartHack(params) local pos = params[1] local cart_id = params[2] -- Find cart - for _, obj in ipairs(minetest.get_objects_inside_radius(pos, 1)) do - if obj ~= nil and obj:get_luaentity().name == cart_id then + for _, obj in pairs(minetest.get_objects_inside_radius(pos, 1)) do + if obj and obj:get_luaentity().name == cart_id then -- Cart found! We can now safely call the callback func. -- (calling it earlier has the danger of failing) minetest.log("info", "[tsm_railcorridors] Cart spawn succeeded: "..minetest.pos_to_string(pos)) @@ -680,11 +684,11 @@ local function create_corridor_section(waypoint, axis, sign, up_or_down, up_or_d railsegcount = segcount end for i=1,railsegcount do - local p = {x=waypoint.x+vek.x*i, y=waypoint.y+vek.y*i-1, z=waypoint.z+vek.z*i} + local p = {x = waypoint.x + vek.x * i, y = waypoint.y + vek.y * i-1, z = waypoint.z + vek.z * i} -- Randomly returns either the left or right side of the main rail. -- Also returns offset as second return value. - local left_or_right = function(pos, vek) + local function left_or_right(pos, vek) local off if pr:next(1, 2) == 1 then -- left @@ -764,7 +768,7 @@ local function create_corridor_section(waypoint, axis, sign, up_or_down, up_or_d -- Place cobwebs left and right in the corridor if place_cobwebs and tsm_railcorridors.nodes.cobweb then -- Helper function to place a cobweb at the side (based on chance an Perlin noise) - local cobweb_at_side = function(basepos, vek) + local function cobweb_at_side(basepos, vek) if pr:next(1,5) == 1 then local h = pr:next(0, 2) -- 3 possible cobweb heights local cpos = {x=basepos.x+vek.x, y=basepos.y+h, z=basepos.z+vek.z} @@ -823,7 +827,7 @@ local function create_corridor_line(waypoint, axis, sign, length, wood, post, da local s = sign local ud = false -- Up or down local udn = false -- Up or down is next - local udp = false -- Up or down was previous + local udp -- Up or down was previous local up = false -- true if going up local upp = false -- true if was going up previously for i=1,length do @@ -911,7 +915,7 @@ local function create_corridor_line(waypoint, axis, sign, length, wood, post, da a="z" elseif a=="z" then a="x" - end; + end; s = pr:next(1, 2) == 1 end end @@ -1089,7 +1093,7 @@ local function create_corridor_system(main_cave_coords) end -- The rail corridor algorithm starts here -minetest.register_on_generated(function(minp, maxp, blockseed) +mcl_mapgen_core.register_generator("railcorridors", nil, function(minp, maxp, blockseed, _pr) -- We re-init the randomizer for every mapchunk as we start generating in the middle of each mapchunk. -- We can't use the mapgen seed as this would make the algorithm depending on the order the mapchunk generate. InitRandomizer(blockseed) @@ -1115,4 +1119,4 @@ minetest.register_on_generated(function(minp, maxp, blockseed) end end end -end) +end, 10) diff --git a/mods/MAPGEN/tsm_railcorridors/mod.conf b/mods/MAPGEN/tsm_railcorridors/mod.conf index db3b9740b..c846cff19 100644 --- a/mods/MAPGEN/tsm_railcorridors/mod.conf +++ b/mods/MAPGEN/tsm_railcorridors/mod.conf @@ -1 +1,4 @@ name = tsm_railcorridors +author = UgnilJoZ +description = Adds simple underground mines with railways and occasional treasure chests. +depends = mcl_init, mcl_worlds, mcl_core, mcl_mapgen_core, mcl_loot, mcl_tnt, mcl_farming, mcl_mobspawners, mcl_minecarts diff --git a/mods/MISC/findbiome/init.lua b/mods/MISC/findbiome/init.lua index ce7fd9799..8560d1607 100644 --- a/mods/MISC/findbiome/init.lua +++ b/mods/MISC/findbiome/init.lua @@ -1,6 +1,6 @@ -local S = minetest.get_translator("findbiome") +local S = minetest.get_translator(minetest.get_current_modname()) -local mod_biomeinfo = minetest.get_modpath("biomeinfo") ~= nil +local mod_biomeinfo = minetest.get_modpath("biomeinfo") local mg_name = minetest.get_mapgen_setting("mg_name") local water_level = tonumber(minetest.get_mapgen_setting("water_level")) @@ -119,7 +119,7 @@ local function find_biome(pos, biomes) local edge_dist = 0 local dir_step = 0 local dir_ind = 1 - local success = false + local success local spawn_pos local biome_ids @@ -166,7 +166,7 @@ local function find_biome(pos, biomes) spawn_pos = {x = spos.x, y = spos.y, z = spos.z} end if spawn_pos then - local adjusted_pos, outside = adjust_pos_to_biome_limits(spawn_pos, biome_id) + local _,outside = adjust_pos_to_biome_limits(spawn_pos, biome_id) if is_in_world(spawn_pos) and not outside then return true end diff --git a/mods/MISC/findbiome/locale/findbiome.pl.tr b/mods/MISC/findbiome/locale/findbiome.pl.tr new file mode 100644 index 000000000..bc25b5758 --- /dev/null +++ b/mods/MISC/findbiome/locale/findbiome.pl.tr @@ -0,0 +1,10 @@ +# textdomain: findbiome +Find and teleport to biome=Znajdź i teleportuj do biomu += +No player.=Brak gracza. +Biome does not exist!=Biom nie istnieje! +Biome found at @1.=Nie znaleziono biomu w @1. +No biome found!=Nie znaleziono biomu! +List all biomes=Lista biomów. +No biomes.=Brak biomów. +Not supported. The “biomeinfo” mod is required for v6 mapgen support!=Nie wspierane. Aby wspierać generator map v6 wymagany jest mod "biomeinfo"! diff --git a/mods/MISC/findbiome/mod.conf b/mods/MISC/findbiome/mod.conf index a8ab4e3c1..918f18436 100644 --- a/mods/MISC/findbiome/mod.conf +++ b/mods/MISC/findbiome/mod.conf @@ -1,3 +1,4 @@ -name=findbiome -description=Add commands to list and find biomes -optional_depends=biomeinfo +name = findbiome +author = paramat +description = Add commands to list and find biomes +optional_depends = biomeinfo diff --git a/mods/MISC/mcl_commands/alias.lua b/mods/MISC/mcl_commands/alias.lua new file mode 100644 index 000000000..5c9ee9f3c --- /dev/null +++ b/mods/MISC/mcl_commands/alias.lua @@ -0,0 +1,30 @@ +local S = minetest.get_translator(minetest.get_current_modname()) + +local function register_chatcommand_alias(alias, cmd) + local def = minetest.chatcommands[cmd] + minetest.register_chatcommand(alias, def) +end + +local function rename_chatcommand(newname, cmd) + local def = minetest.chatcommands[cmd] + minetest.register_chatcommand(newname, def) + minetest.unregister_chatcommand(cmd) +end + +if minetest.settings:get_bool("mcl_builtin_commands_overide", true) then + register_chatcommand_alias("?", "help") + register_chatcommand_alias("pardon", "unban") + rename_chatcommand("stop", "shutdown") + register_chatcommand_alias("tell", "msg") + register_chatcommand_alias("w", "msg") + register_chatcommand_alias("tp", "teleport") + rename_chatcommand("clear", "clearinv") + + minetest.register_chatcommand("banlist", { + description = S("List bans"), + privs = minetest.chatcommands["ban"].privs, + func = function(name) + return true, S("Ban list: @1", minetest.get_ban_list()) + end, + }) +end \ No newline at end of file diff --git a/mods/MISC/mcl_commands/depends.txt b/mods/MISC/mcl_commands/depends.txt deleted file mode 100644 index 6e14ff130..000000000 --- a/mods/MISC/mcl_commands/depends.txt +++ /dev/null @@ -1 +0,0 @@ -mcl_death_messages? diff --git a/mods/MISC/mcl_commands/init.lua b/mods/MISC/mcl_commands/init.lua index 8b931d0b8..a287c2926 100644 --- a/mods/MISC/mcl_commands/init.lua +++ b/mods/MISC/mcl_commands/init.lua @@ -1,163 +1,11 @@ -local minecraftaliases = true +local modpath = minetest.get_modpath(minetest.get_current_modname()) -local S = minetest.get_translator("mcl_commands") - -local mod_death_messages = minetest.get_modpath("mcl_death_messages") - -local function handle_kill_command(suspect, victim) - if minetest.settings:get_bool("enable_damage") == false then - return false, S("Players can't be killed right now, damage has been disabled.") - end - local victimref = minetest.get_player_by_name(victim) - if victimref == nil then - return false, S("Player @1 does not exist.", victim) - elseif victimref:get_hp() <= 0 then - if suspect == victim then - return false, S("You are already dead") - else - return false, S("@1 is already dead", victim) - end - end - -- If player holds a totem of undying, destroy it before killing, - -- so it doesn't rescue the player. - local wield = victimref:get_wielded_item() - if wield:get_name() == "mobs_mc:totem" then - victimref:set_wielded_item("") - end - if mod_death_messages then - local msg - if suspect == victim then - msg = S("@1 committed suicide.", victim) - else - msg = S("@1 was killed by @2.", victim, suspect) - end - mcl_death_messages.player_damage(victimref, msg) - end - -- DIE! - victimref:set_hp(0) - -- Log - if not suspect == victim then - minetest.log("action", string.format("%s killed %s using /kill", suspect, victim)) - else - minetest.log("action", string.format("%s committed suicide using /kill", victim)) - end - return true -end - -if minetest.registered_chatcommands["kill"] then - minetest.unregister_chatcommand("kill") -end -minetest.register_chatcommand("kill", { - params = S("[]"), - description = S("Kill player or yourself"), - privs = {server=true}, - func = function(name, param) - if(param == "") then - -- Selfkill - return handle_kill_command(name, name) - else - return handle_kill_command(name, param) - end - end, -}) - -minetest.register_privilege("announce", { - description = S("Can use /say"), - give_to_singleplayer = false, -}) -minetest.register_chatcommand("say", { - params = S(""), - description = S("Send a message to every player"), - privs = {announce=true}, - func = function(name, param) - if not param then - return false, S("Invalid usage, see /help say.") - end - minetest.chat_send_all(("["..name.."] "..param)) - return true - end, -}) - -minetest.register_chatcommand("setblock", { - params = S(",, "), - description = S("Set node at given position"), - privs = {give=true, interact=true}, - func = function(name, param) - local p = {} - local nodestring = nil - p.x, p.y, p.z, nodestring = param:match("^([%d.-]+)[, ] *([%d.-]+)[, ] *([%d.-]+) +(.+)$") - p.x, p.y, p.z = tonumber(p.x), tonumber(p.y), tonumber(p.z) - if p.x and p.y and p.z and nodestring then - local itemstack = ItemStack(nodestring) - if itemstack:is_empty() or not minetest.registered_nodes[itemstack:get_name()] then - return false, S("Invalid node") - end - minetest.set_node(p, {name=nodestring}) - return true, S("@1 spawned.", nodestring) - end - return false, S("Invalid parameters (see /help setblock)") - end, -}) - -minetest.register_chatcommand("list", { - description = S("Show who is logged on"), - params = "", - privs = {}, - func = function(name) - local players = "" - for _, player in ipairs(minetest.get_connected_players()) do - players = players..player:get_player_name().."\n" - end - minetest.chat_send_player(name, players) - end -}) - -minetest.register_chatcommand("seed", { - description = S("Displays the world seed"), - params = "", - privs = {}, - func = function(name) - minetest.chat_send_player(name, minetest.get_mapgen_setting("seed")) - end -}) - -local function register_chatcommand_alias(alias, cmd) - local def = minetest.chatcommands[cmd] - minetest.register_chatcommand(alias, def) -end - --- Replace spawnentity cmd to disallow spawning of hostile mobs if disabled -local orig_func = minetest.registered_chatcommands["spawnentity"].func -local cmd = table.copy(minetest.registered_chatcommands["spawnentity"]) -cmd.func = function(name, param) - local ent = minetest.registered_entities[param] - if minetest.settings:get_bool("only_peaceful_mobs", false) and ent and ent._cmi_is_mob and ent.type == "monster" then - return false, S("Only peaceful mobs allowed!") - else - local bool, msg = orig_func(name, param) - return bool, msg - end -end -minetest.unregister_chatcommand("spawnentity") -minetest.register_chatcommand("spawnentity", cmd) - -if minecraftaliases then - register_chatcommand_alias("?", "help") - register_chatcommand_alias("who", "list") - register_chatcommand_alias("pardon", "unban") - register_chatcommand_alias("stop", "shutdown") - register_chatcommand_alias("summon", "spawnentity") - register_chatcommand_alias("tell", "msg") - register_chatcommand_alias("w", "msg") - register_chatcommand_alias("tp", "teleport") - register_chatcommand_alias("clear", "clearinv") - - minetest.register_chatcommand("banlist", { - description = S("List bans"), - privs = minetest.chatcommands["ban"].privs, - func = function(name) - return true, S("Ban list: @1", minetest.get_ban_list()) - end, - }) -end +dofile(modpath.."/kill.lua") +dofile(modpath.."/setblock.lua") +dofile(modpath.."/seed.lua") +dofile(modpath.."/summon.lua") +dofile(modpath.."/say.lua") +dofile(modpath.."/list.lua") +dofile(modpath.."/sound.lua") +dofile(modpath.."/alias.lua") \ No newline at end of file diff --git a/mods/MISC/mcl_commands/kill.lua b/mods/MISC/mcl_commands/kill.lua new file mode 100644 index 000000000..becd42917 --- /dev/null +++ b/mods/MISC/mcl_commands/kill.lua @@ -0,0 +1,49 @@ +local S = minetest.get_translator(minetest.get_current_modname()) + +local function handle_kill_command(suspect, victim) + if minetest.settings:get_bool("enable_damage") == false then + return false, S("Players can't be killed right now, damage has been disabled.") + end + local victimref = minetest.get_player_by_name(victim) + if victimref == nil then + return false, S("Player @1 does not exist.", victim) + elseif victimref:get_hp() <= 0 then + if suspect == victim then + return false, S("You are already dead") + else + return false, S("@1 is already dead", victim) + end + end + -- If player holds a totem of undying, destroy it before killing, + -- so it doesn't rescue the player. + local wield = victimref:get_wielded_item() + if wield:get_name() == "mobs_mc:totem" then + victimref:set_wielded_item("") + end + -- DIE! + victimref:set_hp(0, {_mcl_type = "out_of_world"}) + -- Log + if not suspect == victim then + minetest.log("action", string.format("%s killed %s using /kill", suspect, victim)) + else + minetest.log("action", string.format("%s committed suicide using /kill", victim)) + end + return true +end + +if minetest.registered_chatcommands["kill"] then + minetest.unregister_chatcommand("kill") +end +minetest.register_chatcommand("kill", { + params = S("[]"), + description = S("Kill player or yourself"), + privs = {server=true}, + func = function(name, param) + if(param == "") then + -- Selfkill + return handle_kill_command(name, name) + else + return handle_kill_command(name, param) + end + end, +}) diff --git a/mods/MISC/mcl_commands/list.lua b/mods/MISC/mcl_commands/list.lua new file mode 100644 index 000000000..5661454b4 --- /dev/null +++ b/mods/MISC/mcl_commands/list.lua @@ -0,0 +1,14 @@ +local S = minetest.get_translator(minetest.get_current_modname()) + +minetest.register_chatcommand("list", { + description = S("Show who is logged on"), + params = "", + privs = {}, + func = function(name) + local players = "" + for _, player in ipairs(minetest.get_connected_players()) do + players = players..player:get_player_name().."\n" + end + minetest.chat_send_player(name, players) + end +}) \ No newline at end of file diff --git a/mods/MISC/mcl_commands/locale/mcl_commands.pl.tr b/mods/MISC/mcl_commands/locale/mcl_commands.pl.tr new file mode 100644 index 000000000..4a3ad181c --- /dev/null +++ b/mods/MISC/mcl_commands/locale/mcl_commands.pl.tr @@ -0,0 +1,23 @@ +# textdomain: mcl_commands +Players can't be killed right now, damage has been disabled.=Gracze nie mogą się zabić, obrażenia zostały wyłączone. +Player @1 does not exist.=Gracz @1 nie istnieje. +You are already dead=Już nie żyjesz +@1 is already dead=@1 już nie żyje +@1 committed suicide.=@1 popełniła samobójstwo. +@1 was killed by @2.=@1 została zabita przez @2. +[]=[] +Kill player or yourself=Zabij gracza lub siebie +Can use /say=Może używać /say += +Send a message to every player=Wyślij wiadomość do każdego gracza +Invalid usage, see /help say.=Niepoprawne użyciu, zobacz /help say. +,, =,, +Set node at given position=Ustaw node w danej pozycji +Invalid node=Niepoprawny node +@1 spawned.=@1 przywołany. +Invalid parameters (see /help setblock)=Niepoprawne parametry (zobacz /help setblock) +List bans=Pokaż zbanowanych +Ban list: @1=Lista zbanowanych: @1 +Show who is logged on=Pokaż zalogowanych +Displays the world seed=Wyświetl ziarno świata +Only peaceful mobs allowed!=Tylko pokojowe moby dozwolone! diff --git a/mods/MISC/mcl_commands/mod.conf b/mods/MISC/mcl_commands/mod.conf new file mode 100644 index 000000000..00d707098 --- /dev/null +++ b/mods/MISC/mcl_commands/mod.conf @@ -0,0 +1,3 @@ +name = mcl_commands +author = Wuzzy +description = MCL2 commands diff --git a/mods/MISC/mcl_commands/say.lua b/mods/MISC/mcl_commands/say.lua new file mode 100644 index 000000000..9fd53c174 --- /dev/null +++ b/mods/MISC/mcl_commands/say.lua @@ -0,0 +1,18 @@ +local S = minetest.get_translator(minetest.get_current_modname()) + +minetest.register_privilege("announce", { + description = S("Can use /say"), + give_to_singleplayer = false, +}) +minetest.register_chatcommand("say", { + params = S(""), + description = S("Send a message to every player"), + privs = {announce=true}, + func = function(name, param) + if not param then + return false, S("Invalid usage, see /help say.") + end + minetest.chat_send_all(("["..name.."] "..param)) + return true + end, +}) \ No newline at end of file diff --git a/mods/MISC/mcl_commands/seed.lua b/mods/MISC/mcl_commands/seed.lua new file mode 100644 index 000000000..6a99d53cb --- /dev/null +++ b/mods/MISC/mcl_commands/seed.lua @@ -0,0 +1,10 @@ +local S = minetest.get_translator(minetest.get_current_modname()) + +minetest.register_chatcommand("seed", { + description = S("Displays the world seed"), + params = "", + privs = {}, + func = function(name) + minetest.chat_send_player(name, "Seed: "..minetest.get_mapgen_setting("seed")) + end +}) \ No newline at end of file diff --git a/mods/MISC/mcl_commands/setblock.lua b/mods/MISC/mcl_commands/setblock.lua new file mode 100644 index 000000000..95acdd35d --- /dev/null +++ b/mods/MISC/mcl_commands/setblock.lua @@ -0,0 +1,22 @@ +local S = minetest.get_translator(minetest.get_current_modname()) + +minetest.register_chatcommand("setblock", { + params = S(",, "), + description = S("Set node at given position"), + privs = {give=true, interact=true}, + func = function(name, param) + local p = {} + local nodestring + p.x, p.y, p.z, nodestring = param:match("^([%d.-]+)[, ] *([%d.-]+)[, ] *([%d.-]+) +(.+)$") + p.x, p.y, p.z = tonumber(p.x), tonumber(p.y), tonumber(p.z) + if p.x and p.y and p.z and nodestring then + local itemstack = ItemStack(nodestring) + if itemstack:is_empty() or not minetest.registered_nodes[itemstack:get_name()] then + return false, S("Invalid node") + end + minetest.set_node(p, {name=nodestring}) + return true, S("@1 spawned.", nodestring) + end + return false, S("Invalid parameters (see /help setblock)") + end, +}) \ No newline at end of file diff --git a/mods/MISC/mcl_commands/sound.lua b/mods/MISC/mcl_commands/sound.lua new file mode 100644 index 000000000..5833676f3 --- /dev/null +++ b/mods/MISC/mcl_commands/sound.lua @@ -0,0 +1,43 @@ +local S = minetest.get_translator(minetest.get_current_modname()) + +minetest.register_chatcommand("playsound",{ + params = S(" "), --TODO:add source + description = S("Play a sound. Arguments: : name of the sound. : Target."), + privs = {server = true}, + func = function(name, rawparams) + local P = {} + local i = 0 + for str in string.gmatch(rawparams, "([^ ]+)") do + i = i + 1 + P[i] = str + end + local params = {} + if P[1] == tostring(P[1]) then + params.name = P[1] + else + return false, S("Sound name is invalid!") --TODO: add mc chat message + end + if P[2] == tostring(P[2]) and minetest.player_exists(P[2]) then + params.target = P[2] + else + return false, S("Target is invalid!!") + end + -- if P[3] then + -- params.pos = nil --TODO:position + -- else + -- params.pos = nil + -- end + -- if P[4] == tonumber(P[4]) then + -- params.gain = P[4] + -- else + -- params.gain = 1.0 + -- end + -- if P[5] == tonumber(P[5]) then + -- params.pitch = P[5] + -- else + -- params.pitch = 1.0 + -- end + minetest.sound_play({name = params.name}, {to_player = params.target}, true) --TODO: /stopsound + return true + end, +}) \ No newline at end of file diff --git a/mods/MISC/mcl_commands/summon.lua b/mods/MISC/mcl_commands/summon.lua new file mode 100644 index 000000000..69da0a66c --- /dev/null +++ b/mods/MISC/mcl_commands/summon.lua @@ -0,0 +1,15 @@ +local S = minetest.get_translator(minetest.get_current_modname()) + +local orig_func = minetest.registered_chatcommands["spawnentity"].func +local cmd = table.copy(minetest.registered_chatcommands["spawnentity"]) +cmd.func = function(name, param) + local ent = minetest.registered_entities[param] + if minetest.settings:get_bool("only_peaceful_mobs", false) and ent and ent._cmi_is_mob and ent.type == "monster" then + return false, S("Only peaceful mobs allowed!") + else + local bool, msg = orig_func(name, param) + return bool, msg + end +end +minetest.unregister_chatcommand("spawnentity") +minetest.register_chatcommand("summon", cmd) \ No newline at end of file diff --git a/mods/MISC/mcl_privs/description.txt b/mods/MISC/mcl_privs/description.txt deleted file mode 100644 index 23beb168b..000000000 --- a/mods/MISC/mcl_privs/description.txt +++ /dev/null @@ -1 +0,0 @@ -Shared privileges in MineClone 2 diff --git a/mods/MISC/mcl_privs/init.lua b/mods/MISC/mcl_privs/init.lua index 00670db1c..f06ff3582 100644 --- a/mods/MISC/mcl_privs/init.lua +++ b/mods/MISC/mcl_privs/init.lua @@ -1,5 +1,29 @@ -local S = minetest.get_translator("mcl_privs") +local S = minetest.get_translator(minetest.get_current_modname()) minetest.register_privilege("maphack", { description = S("Can place and use advanced blocks like mob spawners, command blocks and barriers."), }) + +minetest.register_on_joinplayer(function(player) + local name = player:get_player_name() + local meta = player:get_meta() + if meta:get_int("fly_changed") == 1 then return end + + local fly = nil + if minetest.is_creative_enabled(name) then + fly = true + end + local player_privs = minetest.get_player_privs(name) + player_privs.fly = fly + minetest.set_player_privs(name, player_privs) +end) + +for _, action in pairs({"grant", "revoke"}) do + minetest["register_on_priv_" .. action](function(name, _, priv) + if priv == "fly" then + local player = minetest.get_player_by_name(name) + local meta = player:get_meta() + meta:set_int("fly_changed", 1) + end + end) +end \ No newline at end of file diff --git a/mods/MISC/mcl_privs/locale/mcl_privs.pl.tr b/mods/MISC/mcl_privs/locale/mcl_privs.pl.tr new file mode 100644 index 000000000..10984ef54 --- /dev/null +++ b/mods/MISC/mcl_privs/locale/mcl_privs.pl.tr @@ -0,0 +1,2 @@ +# textdomain: mcl_privs +Can place and use advanced blocks like mob spawners, command blocks and barriers.=Może kłaść i używać zaawansowane bloki takie jak spawnery, bloki poleceń czy bariery. diff --git a/mods/MISC/mcl_privs/mod.conf b/mods/MISC/mcl_privs/mod.conf new file mode 100644 index 000000000..ab1f61877 --- /dev/null +++ b/mods/MISC/mcl_privs/mod.conf @@ -0,0 +1,4 @@ +name = mcl_privs +author = Wuzzy +description = Shared privileges in MineClone 2 + diff --git a/mods/MISC/mcl_temp_helper_recipes/depends.txt b/mods/MISC/mcl_temp_helper_recipes/depends.txt deleted file mode 100644 index 71556b9ae..000000000 --- a/mods/MISC/mcl_temp_helper_recipes/depends.txt +++ /dev/null @@ -1,7 +0,0 @@ -mcl_core -mcl_mobitems -mcl_end -mcl_nether -mcl_ocean -mcl_stairs -xpanes diff --git a/mods/MISC/mcl_temp_helper_recipes/init.lua b/mods/MISC/mcl_temp_helper_recipes/init.lua index d1262cb2c..b7607946d 100644 --- a/mods/MISC/mcl_temp_helper_recipes/init.lua +++ b/mods/MISC/mcl_temp_helper_recipes/init.lua @@ -4,7 +4,7 @@ minetest.register_craft({ type = "shapeless", - output = 'mcl_chests:trapped_chest', + output = "mcl_chests:trapped_chest", recipe = {"mcl_core:iron_ingot", "mcl_core:stick", "group:wood", "mcl_chests:chest"}, }) @@ -27,41 +27,12 @@ minetest.register_craft({ minetest.register_craft({ type = "shapeless", output = "mcl_ocean:prismarine_crystals", - recipe = { "mcl_ocean:prismarine_shard", "mcl_ocean:prismarine_shard", "mcl_ocean:prismarine_shard", "mcl_core:gold_ingot" }, -}) - -minetest.register_craft({ - output = "mcl_armor:helmet_chain", recipe = { - { "xpanes:bar_flat", "mcl_core:iron_ingot", "xpanes:bar_flat" }, - { "xpanes:bar_flat", "", "xpanes:bar_flat" }, - } -}) - -minetest.register_craft({ - output = "mcl_armor:leggings_chain", - recipe = { - { "xpanes:bar_flat", "mcl_core:iron_ingot", "xpanes:bar_flat" }, - { "xpanes:bar_flat", "", "xpanes:bar_flat" }, - { "xpanes:bar_flat", "", "xpanes:bar_flat" }, - } -}) - -minetest.register_craft({ - output = "mcl_armor:boots_chain", - recipe = { - { "xpanes:bar_flat", "", "xpanes:bar_flat" }, - { "xpanes:bar_flat", "", "xpanes:bar_flat" }, - } -}) - -minetest.register_craft({ - output = "mcl_armor:chestplate_chain", - recipe = { - { "xpanes:bar_flat", "", "xpanes:bar_flat" }, - { "xpanes:bar_flat", "mcl_core:iron_ingot", "xpanes:bar_flat" }, - { "xpanes:bar_flat", "xpanes:bar_flat", "xpanes:bar_flat" }, - } + "mcl_ocean:prismarine_shard", + "mcl_ocean:prismarine_shard", + "mcl_ocean:prismarine_shard", + "mcl_core:gold_ingot", + }, }) -- Make red sand, red sandstone and more craftable in v6 diff --git a/mods/MISC/mcl_temp_helper_recipes/mod.conf b/mods/MISC/mcl_temp_helper_recipes/mod.conf new file mode 100644 index 000000000..8fff70ece --- /dev/null +++ b/mods/MISC/mcl_temp_helper_recipes/mod.conf @@ -0,0 +1,5 @@ +name = mcl_temp_helper_recipes +author = Wuzzy +description = Temporary helper recipes. +depends = mcl_core, mcl_mobitems, mcl_end, mcl_nether, mcl_ocean, mcl_stairs, xpanes + diff --git a/mods/MISC/mcl_wip/API.md b/mods/MISC/mcl_wip/API.md new file mode 100644 index 000000000..e3439af77 --- /dev/null +++ b/mods/MISC/mcl_wip/API.md @@ -0,0 +1,16 @@ +# mcl_wip +Used to mark items or nodes as WIP. + +## mcl_wip.register_wip_item(itemname) +Register as a WIP item. +If isn't a valid itemname, an error will be shown after mods loaded. + +## mcl_wip.register_experimental_item(itemname) +Register as a experimental item. +If isn't a valid itemname, an error will be shown after mods loaded. + +## mcl_wip.registered_wip_items +Table containing WIP items names. + +## mcl_wip.registered_experimental_items +Table containing experimental items names. \ No newline at end of file diff --git a/mods/MISC/mcl_wip/depends.txt b/mods/MISC/mcl_wip/depends.txt deleted file mode 100644 index 4f2001472..000000000 --- a/mods/MISC/mcl_wip/depends.txt +++ /dev/null @@ -1,10 +0,0 @@ -mcl_core -mcl_fishing -mcl_maps -mcl_minecarts -doc_identifier -mobs_mc -mcl_comparators -mcl_minecarts -mcl_paintings -mcl_potions diff --git a/mods/MISC/mcl_wip/description.txt b/mods/MISC/mcl_wip/description.txt deleted file mode 100644 index d90115acf..000000000 --- a/mods/MISC/mcl_wip/description.txt +++ /dev/null @@ -1 +0,0 @@ -Development mod for MineClone 2 which add a “WIP” (Work In Progress) comment to items which are considered to be very unfinished. diff --git a/mods/MISC/mcl_wip/init.lua b/mods/MISC/mcl_wip/init.lua index 22785d85a..54fd81c1d 100644 --- a/mods/MISC/mcl_wip/init.lua +++ b/mods/MISC/mcl_wip/init.lua @@ -1,69 +1,45 @@ --- Mod to mark WIP (Work In Progress) content +-- Allow items or nodes to be marked as WIP (Work In Progress) or Experimental -local S = minetest.get_translator("mcl_wip") +local S = minetest.get_translator(minetest.get_current_modname()) -local wip_items = { - "mcl_maps:empty_map", - "mcl_comparators:comparator_off_comp", - "mcl_minecarts:hopper_minecart", - "mcl_minecarts:command_block_minecart", - "mcl_minecarts:chest_minecart", - "mcl_minecarts:furnace_minecart", - "mobs_mc:enderdragon", - "mobs_mc:wither", - "mobs_mc:witch", - "screwdriver:screwdriver", - "mcl_paintings:painting", - "mcl_potions:night_vision", - "mcl_potions:night_vision_plus", - -- "mcl_potions:weakness", - -- "mcl_potions:weakness_plus", - -- "mcl_potions:strength", - -- "mcl_potions:strength_plus", - -- "mcl_potions:strength_2", - "mcl_potions:night_vision_splash", - "mcl_potions:night_vision_plus_splash", - -- "mcl_potions:weakness_splash", - -- "mcl_potions:weakness_plus_splash", - -- "mcl_potions:strength_splash", - -- "mcl_potions:strength_plus_splash", - -- "mcl_potions:strength_2_splash", - "mcl_potions:night_vision_lingering", - "mcl_potions:night_vision_plus_lingering", - -- "mcl_potions:weakness_lingering", - -- "mcl_potions:weakness_plus_lingering", - -- "mcl_potions:strength_lingering", - -- "mcl_potions:strength_plus_lingering", - -- "mcl_potions:strength_2_lingering", - "mcl_potions:night_vision_arrow", - "mcl_potions:night_vision_plus_arrow", -} -local experimental_items = { -} +mcl_wip = {} +mcl_wip.registered_wip_items = {} +mcl_wip.registered_experimental_items = {} -for i=1,#wip_items do - local def = minetest.registered_items[wip_items[i]] - if not def then - minetest.log("error", "[mcl_wip] Unknown item: "..wip_items[i]) - break - end - local new_description = def.description - local new_groups = table.copy(def.groups) - if new_description == "" then - new_description = wip_items[i] - end - new_description = new_description .. "\n"..core.colorize("#FF0000", S("(WIP)")) - --new_groups.not_in_craft_guide = 1 - minetest.override_item(wip_items[i], { description = new_description, groups = new_groups }) +function mcl_wip.register_wip_item(itemname) + table.insert(mcl_wip.registered_wip_items, itemname) --Only check for valid node name after mods loaded end -for i=1,#experimental_items do - local def = minetest.registered_items[experimental_items[i]] - if not def then - minetest.log("error", "[mcl_wip] Unknown item: "..experimental_items[i]) - break - end - local new_description = def.description - new_description = new_description .. "\n"..core.colorize("#FFFF00", S("(Temporary)")) - minetest.override_item(experimental_items[i], { description = new_description }) +function mcl_wip.register_experimental_item(itemname) + table.insert(mcl_wip.registered_experimental_items, itemname) end + +minetest.register_on_mods_loaded(function() + for _,name in pairs(mcl_wip.registered_wip_items) do + local def = minetest.registered_items[name] + if not def then + minetest.log("error", "[mcl_wip] Unknown item: "..name) + break + end + local new_description = def.description + if new_description == "" then + new_description = name + end + new_description = new_description .. "\n"..minetest.colorize(mcl_colors.RED, S("(WIP)")) + minetest.override_item(name, {description = new_description}) + end + + for _,name in pairs(mcl_wip.registered_experimental_items) do + local def = minetest.registered_items[name] + if not def then + minetest.log("error", "[mcl_wip] Unknown item: "..name) + break + end + local new_description = def.description + if new_description == "" then + new_description = name + end + new_description = new_description .. "\n"..minetest.colorize(mcl_colors.YELLOW, S("(Temporary)")) + minetest.override_item(name, {description = new_description}) + end +end) diff --git a/mods/MISC/mcl_wip/locale/mcl_wip.pl.tr b/mods/MISC/mcl_wip/locale/mcl_wip.pl.tr new file mode 100644 index 000000000..83c273a96 --- /dev/null +++ b/mods/MISC/mcl_wip/locale/mcl_wip.pl.tr @@ -0,0 +1,4 @@ +# textdomain: mcl_wip +# WIP means “Work in Progress” +(WIP)=(Niedokończone) +(Temporary)=(Tymczasowe) diff --git a/mods/MISC/mcl_wip/mod.conf b/mods/MISC/mcl_wip/mod.conf index 2af1d4592..e705379a1 100644 --- a/mods/MISC/mcl_wip/mod.conf +++ b/mods/MISC/mcl_wip/mod.conf @@ -1 +1,4 @@ name = mcl_wip +author = Wuzzy +description = Development mod for MineClone 2 which add a “WIP” (Work In Progress) comment to items which are considered to be very unfinished. +depends = mcl_colors diff --git a/mods/PLAYER/mcl_criticals/init.lua b/mods/PLAYER/mcl_criticals/init.lua new file mode 100644 index 000000000..27d09abb2 --- /dev/null +++ b/mods/PLAYER/mcl_criticals/init.lua @@ -0,0 +1,30 @@ +mcl_damage.register_modifier(function(obj, damage, reason) + if reason.type == "player" then + local hitter = reason.direct + if mcl_sprint.is_sprinting(hitter) then + obj:add_velocity(hitter:get_velocity()) + elseif (hitter:get_velocity() or hitter:get_player_velocity()).y < 0 then + local pos = mcl_util.get_object_center(obj) + minetest.add_particlespawner({ + amount = 15, + time = 0.1, + minpos = {x=pos.x-0.5, y=pos.y-0.5, z=pos.z-0.5}, + maxpos = {x=pos.x+0.5, y=pos.y+0.5, z=pos.z+0.5}, + minvel = {x=-0.1, y=-0.1, z=-0.1}, + maxvel = {x=0.1, y=0.1, z=0.1}, + minacc = {x=0, y=0, z=0}, + maxacc = {x=0, y=0, z=0}, + minexptime = 1, + maxexptime = 2, + minsize = 1.5, + maxsize = 1.5, + collisiondetection = false, + vertical = false, + texture = "mcl_particles_crit.png^[colorize:#bc7a57:127", + }) + minetest.sound_play("mcl_criticals_hit", {object = obj}) + -- the minecraft wiki is actually wrong about a crit dealing 150% damage, see minecraft source code + return damage + math.random(0, math.floor(damage * 1.5 + 2)) + end + end +end, -100) diff --git a/mods/PLAYER/mcl_criticals/mod.conf b/mods/PLAYER/mcl_criticals/mod.conf new file mode 100644 index 000000000..5b0b91330 --- /dev/null +++ b/mods/PLAYER/mcl_criticals/mod.conf @@ -0,0 +1,2 @@ +name = mcl_criticals +depends = mcl_damage diff --git a/mods/PLAYER/mcl_criticals/sounds/mcl_criticals_hit.0.ogg b/mods/PLAYER/mcl_criticals/sounds/mcl_criticals_hit.0.ogg new file mode 100644 index 0000000000000000000000000000000000000000..8184d10768996a9faac5fcf83e29dc0f5c7445b9 GIT binary patch literal 10932 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 literal 0 HcmV?d00001 diff --git a/mods/PLAYER/mcl_criticals/sounds/mcl_criticals_hit.1.ogg b/mods/PLAYER/mcl_criticals/sounds/mcl_criticals_hit.1.ogg new file mode 100644 index 0000000000000000000000000000000000000000..aed998162308c4764cb2998cf700cf4abe1ae2b5 GIT binary patch literal 12936 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 R9JjpLI<;hq0oMP}{tuJDua5u# literal 0 HcmV?d00001 diff --git a/mods/PLAYER/mcl_death_drop/API.md b/mods/PLAYER/mcl_death_drop/API.md new file mode 100644 index 000000000..3fc5163e5 --- /dev/null +++ b/mods/PLAYER/mcl_death_drop/API.md @@ -0,0 +1,14 @@ +# mcl_death_drop +Drop registered inventories on player death. + +## mcl_death_drop.register_dropped_list(inv, listname, drop) +* inv: can be: + * "PLAYER": will be interpreted like player inventory (to avoid multiple calling to get_inventory()) + * function(player): must return inventory +* listname: string +* drop: bool + * true: the list will be dropped + * false: the list will only be cleared + +## mcl_death_drop.registered_dropped_lists +Table containing dropped list inventory, name and drop state. \ No newline at end of file diff --git a/mods/PLAYER/mcl_death_drop/depends.txt b/mods/PLAYER/mcl_death_drop/depends.txt deleted file mode 100644 index 4c2d1c21f..000000000 --- a/mods/PLAYER/mcl_death_drop/depends.txt +++ /dev/null @@ -1,2 +0,0 @@ -mcl_armor -mcl_enchanting diff --git a/mods/PLAYER/mcl_death_drop/description.txt b/mods/PLAYER/mcl_death_drop/description.txt deleted file mode 100644 index 761832f6e..000000000 --- a/mods/PLAYER/mcl_death_drop/description.txt +++ /dev/null @@ -1 +0,0 @@ -Makes all items in inventory drop after player death. diff --git a/mods/PLAYER/mcl_death_drop/init.lua b/mods/PLAYER/mcl_death_drop/init.lua index 56e6ea522..bfeee0c3e 100644 --- a/mods/PLAYER/mcl_death_drop/init.lua +++ b/mods/PLAYER/mcl_death_drop/init.lua @@ -1,26 +1,41 @@ +local random = math.random + +local ipairs = ipairs + +mcl_death_drop = {} + +mcl_death_drop.registered_dropped_lists = {} + +function mcl_death_drop.register_dropped_list(inv, listname, drop) + table.insert(mcl_death_drop.registered_dropped_lists, {inv = inv, listname = listname, drop = drop}) +end + +mcl_death_drop.register_dropped_list("PLAYER", "main", true) +mcl_death_drop.register_dropped_list("PLAYER", "craft", true) +mcl_death_drop.register_dropped_list("PLAYER", "armor", true) + minetest.register_on_dieplayer(function(player) local keep = minetest.settings:get_bool("mcl_keepInventory", false) if keep == false then -- Drop inventory, crafting grid and armor - local inv = player:get_inventory() + local playerinv = player:get_inventory() local pos = player:get_pos() - local name, player_armor_inv, armor_armor_inv, pos = armor:get_valid_player(player, "[on_dieplayer]") -- No item drop if in deep void - local void, void_deadly = mcl_worlds.is_in_void(pos) - local lists = { - { inv = inv, listname = "main", drop = true }, - { inv = inv, listname = "craft", drop = true }, - { inv = player_armor_inv, listname = "armor", drop = true }, - { inv = armor_armor_inv, listname = "armor", drop = false }, - } - for l=1,#lists do - local inv = lists[l].inv - local listname = lists[l].listname - local drop = lists[l].drop - if inv ~= nil then + local _, void_deadly = mcl_worlds.is_in_void(pos) + + for l=1,#mcl_death_drop.registered_dropped_lists do + local inv = mcl_death_drop.registered_dropped_lists[l].inv + if inv == "PLAYER" then + inv = playerinv + elseif type(inv) == "function" then + inv = inv(player) + end + local listname = mcl_death_drop.registered_dropped_lists[l].listname + local drop = mcl_death_drop.registered_dropped_lists[l].drop + if inv then for i, stack in ipairs(inv:get_list(listname)) do - local x = math.random(0, 9)/3 - local z = math.random(0, 9)/3 + local x = random(0, 9)/3 + local z = random(0, 9)/3 pos.x = pos.x + x pos.z = pos.z + z if not void_deadly and drop and not mcl_enchanting.has_enchantment(stack, "curse_of_vanishing") then @@ -36,7 +51,6 @@ minetest.register_on_dieplayer(function(player) inv:set_list(listname, {}) end end - armor:set_player_armor(player) - armor:update_inventory(player) + mcl_armor.update(player) end end) diff --git a/mods/PLAYER/mcl_death_drop/mod.conf b/mods/PLAYER/mcl_death_drop/mod.conf index 93ed70ad4..09a8c61fa 100644 --- a/mods/PLAYER/mcl_death_drop/mod.conf +++ b/mods/PLAYER/mcl_death_drop/mod.conf @@ -1 +1,4 @@ name = mcl_death_drop +author = Wuzzy +description = Makes all items in inventory drop after player death. +depends = mcl_armor, mcl_enchanting diff --git a/mods/PLAYER/mcl_hunger/api.lua b/mods/PLAYER/mcl_hunger/api.lua index 55153b9bf..20937023a 100644 --- a/mods/PLAYER/mcl_hunger/api.lua +++ b/mods/PLAYER/mcl_hunger/api.lua @@ -76,7 +76,7 @@ if mcl_hunger.active then satuchanged = true end if satuchanged then - if h ~= nil then h = h end + if h then h = h end mcl_hunger.update_saturation_hud(player, mcl_hunger.get_saturation(player), h) end end @@ -86,7 +86,8 @@ if mcl_hunger.active then function mcl_hunger.saturate(playername, increase, update_hudbar) local player = minetest.get_player_by_name(playername) - local ok = mcl_hunger.set_saturation(player, math.min(mcl_hunger.get_saturation(player) + increase, mcl_hunger.get_hunger(player))) + local ok = mcl_hunger.set_saturation(player, + math.min(mcl_hunger.get_saturation(player) + increase, mcl_hunger.get_hunger(player))) if update_hudbar ~= false then mcl_hunger.update_saturation_hud(player, mcl_hunger.get_saturation(player), mcl_hunger.get_hunger(player)) end @@ -105,7 +106,7 @@ if mcl_hunger.active then -- otherwise the following poison/exhaust fields are ignored food[name].poison = poison -- poison damage per tick for poisonous food food[name].exhaust = exhaust -- exhaustion per tick for poisonous food - food[name].poisonchance = poisonchance -- chance percentage that this item poisons the player (default: 100% if poisoning is enabled) + food[name].poisonchance = poisonchance -- chance percentage that this item poisons the player (default: 100%) food[name].sound = sound -- special sound that is played when eating end diff --git a/mods/PLAYER/mcl_hunger/depends.txt b/mods/PLAYER/mcl_hunger/depends.txt deleted file mode 100644 index ed8cc4236..000000000 --- a/mods/PLAYER/mcl_hunger/depends.txt +++ /dev/null @@ -1,2 +0,0 @@ -hudbars -mcl_death_messages? diff --git a/mods/PLAYER/mcl_hunger/description.txt b/mods/PLAYER/mcl_hunger/description.txt deleted file mode 100644 index 77e6159d5..000000000 --- a/mods/PLAYER/mcl_hunger/description.txt +++ /dev/null @@ -1 +0,0 @@ -Adds a simple hunger meachanic with satiation, food poisoning and different healing. diff --git a/mods/PLAYER/mcl_hunger/hunger.lua b/mods/PLAYER/mcl_hunger/hunger.lua index 393bdc9a9..d9a6fd5fe 100644 --- a/mods/PLAYER/mcl_hunger/hunger.lua +++ b/mods/PLAYER/mcl_hunger/hunger.lua @@ -1,10 +1,7 @@ -local S = minetest.get_translator("mcl_hunger") -local mod_death_messages = minetest.get_modpath("mcl_death_messages") +--local S = minetest.get_translator(minetest.get_current_modname()) -- wrapper for minetest.item_eat (this way we make sure other mods can't break this one) -local org_eat = minetest.do_item_eat -minetest.do_item_eat = function(hp_change, replace_with_item, itemstack, user, pointed_thing) - +function minetest.do_item_eat(hp_change, replace_with_item, itemstack, user, pointed_thing) if not user or user:is_player() == false then return itemstack end @@ -38,7 +35,8 @@ minetest.do_item_eat = function(hp_change, replace_with_item, itemstack, user, p -- FIXME: In singleplayer, there's a cheat to circumvent this, simply by pausing the game between eats. -- This is because os.time() obviously does not care about the pause. A fix needs a different timer mechanism. if no_eat_delay or (mcl_hunger.last_eat[name] < 0) or (os.difftime(os.time(), mcl_hunger.last_eat[name]) >= 2) then - local can_eat_when_full = creative or (mcl_hunger.active == false) or minetest.get_item_group(itemstack:get_name(), "can_eat_when_full") == 1 + local can_eat_when_full = creative or (mcl_hunger.active == false) + or minetest.get_item_group(itemstack:get_name(), "can_eat_when_full") == 1 -- Don't allow eating when player has full hunger bar (some exceptional items apply) if can_eat_when_full or (mcl_hunger.get_hunger(user) < 20) then itemstack = mcl_hunger.eat(hp_change, replace_with_item, itemstack, user, pointed_thing) @@ -67,7 +65,8 @@ function mcl_hunger.eat(hp_change, replace_with_item, itemstack, user, pointed_t def.saturation = hp_change def.replace = replace_with_item end - local func = mcl_hunger.item_eat(def.saturation, def.replace, def.poisontime, def.poison, def.exhaust, def.poisonchance, def.sound) + local func = mcl_hunger.item_eat(def.saturation, def.replace, def.poisontime, + def.poison, def.exhaust, def.poisonchance, def.sound) return func(itemstack, user, pointed_thing) end @@ -90,7 +89,6 @@ local function poisonp(tick, time, time_left, damage, exhaustion, name) if not player then return end - local name = player:get_player_name() -- Abort if food poisonings have been stopped if mcl_hunger.poison_hunger[name] == 0 then return @@ -110,10 +108,7 @@ local function poisonp(tick, time, time_left, damage, exhaustion, name) -- Deal damage and exhaust player -- TODO: Introduce fatal poison at higher difficulties if player:get_hp()-damage > 0 then - if mod_death_messages then - mcl_death_messages.player_damage(player, S("@1 succumbed to the poison.", name)) - end - player:set_hp(player:get_hp()-damage) + mcl_util.deal_damage(player, damage, {type = "hunger"}) end mcl_hunger.exhaust(name, exhaustion) @@ -126,12 +121,12 @@ function mcl_hunger.item_eat(hunger_change, replace_with_item, poisontime, poiso return function(itemstack, user, pointed_thing) local itemname = itemstack:get_name() local creative = minetest.is_creative_enabled(user:get_player_name()) - if itemstack:peek_item() ~= nil and user ~= nil then + if itemstack:peek_item() and user then if not creative then itemstack:take_item() end local name = user:get_player_name() - local hp = user:get_hp() + --local hp = user:get_hp() local pos = user:get_pos() -- player height @@ -157,26 +152,18 @@ function mcl_hunger.item_eat(hunger_change, replace_with_item, poisontime, poiso -- If false, force item to not spawn any food partiles when eaten if def._food_particles ~= false and texture and texture ~= "" then local v = user:get_velocity() or user:get_player_velocity() - local minvel = vector.add(v, {x=-1, y=1, z=-1}) - local maxvel = vector.add(v, {x=1, y=2, z=1}) - - minetest.add_particlespawner({ - amount = math.min(math.max(8, hunger_change*2), 25), - time = 0.1, - minpos = {x=pos.x, y=pos.y, z=pos.z}, - maxpos = {x=pos.x, y=pos.y, z=pos.z}, - minvel = minvel, - maxvel = maxvel, - minacc = {x=0, y=-5, z=0}, - maxacc = {x=0, y=-9, z=0}, - minexptime = 1, - maxexptime = 1, - minsize = 1, - maxsize = 2, - collisiondetection = true, - vertical = false, - texture = texture, - }) + for i = 0, math.min(math.max(8, hunger_change*2), 25) do + minetest.add_particle({ + pos = { x = pos.x, y = pos.y, z = pos.z }, + velocity = vector.add(v, { x = math.random(-1, 1), y = math.random(1, 2), z = math.random(-1, 1) }), + acceleration = { x = 0, y = math.random(-9, -5), z = 0 }, + expirationtime = 1, + size = math.random(1, 2), + collisiondetection = true, + vertical = false, + texture = "[combine:3x3:" .. -i .. "," .. -i .. "=" .. texture, + }) + end end minetest.sound_play("mcl_hunger_bite", { max_hear_distance = 12, diff --git a/mods/PLAYER/mcl_hunger/init.lua b/mods/PLAYER/mcl_hunger/init.lua index 01d74a80d..8c154700a 100644 --- a/mods/PLAYER/mcl_hunger/init.lua +++ b/mods/PLAYER/mcl_hunger/init.lua @@ -1,5 +1,7 @@ -local S = minetest.get_translator("mcl_hunger") -local mod_death_messages = minetest.get_modpath("mcl_death_messages") +local modname = minetest.get_current_modname() +local modpath = minetest.get_modpath(modname) + +local S = minetest.get_translator(modname) mcl_hunger = {} @@ -37,9 +39,9 @@ mcl_hunger.debug = false -- Cooldown timers for each player, to force a short delay between consuming 2 food items mcl_hunger.last_eat = {} -dofile(minetest.get_modpath("mcl_hunger").."/api.lua") -dofile(minetest.get_modpath("mcl_hunger").."/hunger.lua") -dofile(minetest.get_modpath("mcl_hunger").."/register_foods.lua") +dofile(modpath.."/api.lua") +dofile(modpath.."/hunger.lua") +dofile(modpath.."/register_foods.lua") --[[ IF HUNGER IS ENABLED ]] if mcl_hunger.active == true then @@ -65,9 +67,7 @@ end -- Count number of poisonings a player has at once mcl_hunger.poison_hunger = {} -- food poisoning, increasing hunger --- HUD item ids -local hunger_hud = {} - +-- HUD local function init_hud(player) hb.init_hudbar(player, "hunger", mcl_hunger.get_hunger(player)) if mcl_hunger.debug then @@ -89,10 +89,10 @@ function mcl_hunger.update_exhaustion_hud(player, exhaustion) end -- register saturation hudbar -hb.register_hudbar("hunger", 0xFFFFFF, S("Food"), { icon = "hbhunger_icon.png", bgicon = "hbhunger_bgicon.png", bar = "hbhunger_bar.png" }, 20, 20, false) +hb.register_hudbar("hunger", 0xFFFFFF, S("Food"), { icon = "hbhunger_icon.png", bgicon = "hbhunger_bgicon.png", bar = "hbhunger_bar.png" }, 1, 20, 20, false) if mcl_hunger.debug then - hb.register_hudbar("saturation", 0xFFFFFF, S("Saturation"), { icon = "mcl_hunger_icon_saturation.png", bgicon = "mcl_hunger_bgicon_saturation.png", bar = "mcl_hunger_bar_saturation.png" }, mcl_hunger.SATURATION_INIT, 200, false, S("%s: %.1f/%d")) - hb.register_hudbar("exhaustion", 0xFFFFFF, S("Exhaust."), { icon = "mcl_hunger_icon_exhaustion.png", bgicon = "mcl_hunger_bgicon_exhaustion.png", bar = "mcl_hunger_bar_exhaustion.png" }, 0, mcl_hunger.EXHAUST_LVL, false, S("%s: %d/%d")) + hb.register_hudbar("saturation", 0xFFFFFF, S("Saturation"), { icon = "mcl_hunger_icon_saturation.png", bgicon = "mcl_hunger_bgicon_saturation.png", bar = "mcl_hunger_bar_saturation.png" }, 1, mcl_hunger.SATURATION_INIT, 200, false, S("%s: %.1f/%d")) + hb.register_hudbar("exhaustion", 0xFFFFFF, S("Exhaust."), { icon = "mcl_hunger_icon_exhaustion.png", bgicon = "mcl_hunger_bgicon_exhaustion.png", bar = "mcl_hunger_bar_exhaustion.png" }, 1, 0, mcl_hunger.EXHAUST_LVL, false, S("%s: %d/%d")) end minetest.register_on_joinplayer(function(player) @@ -140,14 +140,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 ipairs(minetest.get_connected_players()) do + 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. @@ -161,10 +161,7 @@ minetest.register_globalstep(function(dtime) -- Damage hungry player down to 1 HP -- TODO: Allow starvation at higher difficulty levels if hp-1 > 0 then - if mod_death_messages then - mcl_death_messages.player_damage(player, S("@1 starved to death.", name)) - end - player:set_hp(hp-1) + mcl_util.deal_damage(player, 1, {type = "starve"}) end end end @@ -172,9 +169,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 diff --git a/mods/PLAYER/mcl_hunger/locale/mcl_hunger.pl.tr b/mods/PLAYER/mcl_hunger/locale/mcl_hunger.pl.tr new file mode 100644 index 000000000..be20c6d85 --- /dev/null +++ b/mods/PLAYER/mcl_hunger/locale/mcl_hunger.pl.tr @@ -0,0 +1,9 @@ +# textdomain: mcl_hunger +@1 succumbed to the poison.=@1 uległa truciźnie. +Food=Jedzenie +Saturation=Nasycenie +%s: %.1f/%d=%s: %.1f/%d +Exhaust.=Wyczerpanie. +%s: %d/%d=%s: %d/%d +@1 starved to death.=@1 umarła z wygłodzenia. + diff --git a/mods/PLAYER/mcl_hunger/mod.conf b/mods/PLAYER/mcl_hunger/mod.conf index a1a3d1cc2..99ab71ff3 100644 --- a/mods/PLAYER/mcl_hunger/mod.conf +++ b/mods/PLAYER/mcl_hunger/mod.conf @@ -1 +1,4 @@ name = mcl_hunger +author = BlockMen +description = Adds a simple hunger meachanic with satiation, food poisoning and different healing. +depends = hudbars 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 zcmX|H1y~eO*G3fFC3h*8-X#dK?$ivN~BY1M39nN zLO{Bt`4_+M|Mq!yXXebzz305|x%a%!z57~QQ<|L;AQvN&7rzw5ZoIiivyLn z%0kt7Q%07|Pfd??8xOnqvy6eww*zabZa3AJ>Y9Xw?QF+?9+|B(-H9@L^4jUj)RWg! zK@Cr!wdYx*M~!^y?Zp24>T4GJp@}UjmQ^$=5GV@uUPJ{#`&zqHCIm(W04fe>{DBC0 zX)Vf<2MX+iD8%VF!APb5+>wAwX3GPYFUH(oDJDa41c8??;4MYOKt%v6lmi5{ZNa6^ zRr+-&<^*C|HZ<%u9K(E#fyDa<^0emPql+|LHcaMX!zy})L7?_?LMVpUYP(Ph_=a~% zfh$+u5q4V`g8HBU7(KCWnDI3rX8&I=P!yCSh(lX8{Ic8Dr{LflqJK>?OOpTdeh~8m ziPF0Uc>mYTjQ10Y>4k9ryA4rAqTDUP1Y&&Lct_DNNkM>$tL|Swm|Rj0@CDmtK-aoo zYkLI!dkT*O9+B>F^bivNhAvy>?8Vfe;-)>X8U%`wfpwpF8FNbGGA|)0fPkOeID;r6 z(bsO@;yv-DzC`7T5||mbv$S0L)LDTpGLP#PKkBge+T}7@NmJp>&&|7c6 zy6i+R5AO{j-oJ!qRIbRsvws-tGW>J+U$Cl3Xt57rkpvJ5`DcvBzha{!0sHSW@$!o# z9H6N3e;B)L4Re+KlF*f5E<9lg#LS3Ga8)3S_X?Q)gDlnMLsRhoHNX&sM@B6Kk5Kn( z*ulxxIBN=m1KpVeYWskBq?L*(JIrMNh?gLm;EN7aWXFSZ$-4)IiL_6KW(*ZTWuGWt z3v8AtUFKK*83P)*s( z>sqLOxvhu5LtHX_RyP%>y>eCOGM%le056LY*{0$+K88uI*b@=m`2>|) zlvg!~z~@@n!alji-O^C-dXnpDb^Lv&u68wYXXtdYHb1AoH*oZj-%IBBB)ae6VNcn_ zCv3owh^Uz6q3D3>wCTIRqI&VBSzJqnoJYrTd-+S3bqk&N40Ch$TLO0vhSNpsdp>CE zZ`2;ntsCv6S9|uiCrtGPHHIcr4-oD9JhQ<2NUpTH$G}Z$^i)uay4OR?I`9xXPilOs zQGLR5;Mnv|31&ViTO_h+8*NdOI`t>UJO5|9mN|)qh{vXYY*QWM1qV!-}!>EQY*(yVtU7^>XSdUDf+G zn5^=uta2m$7&Un7XP%3)-mOA23f~b}J_FL{On#Y?f4?)(NX(-xj%Zx0n(|{|7wstj zJ>FEpt3BVDMM?>8?FYg0jAM5DJEkO9o1Uq>?dsQZF&8SVFLwWZXoz{<(a_qf&Rt$n z*L$+(@@MJe@Y8)4iy8nF>*w^JRJ~ws%~$G$C1nrsvZn139zqe*+#A<#7$Lr6=mvgg zOFsWPq2Dm>a6ut>&h(>v>8HS5|G#8U!ow)=9_uTBRs?hl61LVT!??gp*qwRIl$*ZiAoFO+13D2-_~VlcgM4WD(10 ztyM|6pZ8VDjjTrUND;b@q!MjTNmNi%Fz|G5Oc@$B_e;+2Cdq%$1@pvWvu3F2lo}t} zO(s)LEB3#hdHeU7(P|E=+-GSv%an!0_^#WxIUdeELaDiSoEFb zy`#J@Ydh^$)gD}>E~7q|XrPB2SuIO_P2LM4+N8`f9yW7ZOQ`PLZL~6klJ?ox+vqwP zrTp0zRrV72g9{S87&l`Sf9XQ_|R_p~5!b zM(_1ykT|uDE@8nu?eNXRry7DlMx60@{1L8I7ljJznzF)h8{MSb3w$Y)h>Z{bIs2Z)#*tZVxv`1Q$m~#-d^+=QDy?!0DtGKoJ zYh)~}E7XepP$zYJq4^c`sX|P`U%Z&uteAQ=9`aUqw=Pqvx~%duEI_>_G57hEtiX|2 zr}Lbh#uNP|RDuo?RVmi$MB017pQaq1Yce&S&QBKR#y)M0Y&l`>`^@h#7E&b_m{(gV z_(>+@s;Ibg`eL!eRpmHWqs0;P3X%g&S!ic*=O96+7d9|%wK>oKTlG_|A$j#!m<7(Y za;PHr&Bibva+pV+P$raJwfg7%Z}-g zO;DBPpmw(#ZiflBTp*dX;Y zA4ksmGdAl!x4Uon)#>xx9fm;MLKEz-&2^#CNO=Z04{>{6UV0uMC(+U}KO4GcKnsS_GE44F{wW(MwP0P{oc@xi*Ccyz z8$u~3<$p{VbxZ|>D{*z*$t1R#?_>yS3!BOkRFHX=^2N>WTV%vmqaarmVs0^ve0Q{% zyUs`7Oz+yhbot}@Birw#X0+qu@4&Zc*D8NsGf?7$RoZ#a+<=ZP8gYlsZN4+I6t{b#SKWQ$Cnl@BM2i)qvTp8Phd(HVt0 z^Ug|23k5oM*@k`Zu;VezlA!TmGCm(v!*UJNM1q(ggqs2;dC!+|IUX^go)c zDRUaO&wKl0sobVVU5!HY>3fH_DJirJU*4NHY_9&Cx|oj(6?0}PFy4JLw;W1plCMGE zGxqq(TuFr;^%r;O>Ew)PvmN+|dFm4kMv~foGK-h-c_49t-5_c}C zx%Xl)Me7jh4UZKvWzW8Mi#$x(c_dE2@n1Q%V!{izXtD>6qhWq&tjsd8E_ zcFK3CfySYjz4z}!2wNE&e4|)#FRb@hEl@}Gf2XH1qo6UEw)_Im)>^*eN zRr-KBcxycM zEvk@UQIf8&uvWE!*kH78SJ&w8{)}Fu_S~Wuqs6r^4qb;F%gmk*B0XDzKRJ%tic6T0 zko7{y(w%i?Q~;wyW}zqj4|icq&V|otp3(zjPagg(=I-t<<+}aFb5-x78d2TJ74d8P zyF9(!w|jbeCb6heg^;Mp>cr#(j=C=|z#8RPUT&_>$r%|-3y-g14%fJtoFcVo7Kw-) z`m2Tu-6XlV1Y{bdZ{;Iz+Nwv<$)aEU81ksAEx{IS8sld)CpbIV?`F09k|WZ5uKn{! zf)I;hxjrML&07THKuQ+craU0S^~j3NMm`BPI< z4ImChqlNKuh*JB|nw(ojl!PIEL_tTwE6+I1!r(=EzlL=48{@M6ju-*sf|Gkq;iOS2 z#mXx*>`^f6V2MS>MKPo= zeg^Hcq@UakzPm;Jh?s;(EOsAD)|4RDDfX&ojC6+hP%m2%k7S<`kQ-vG$WM-Bp z5Tj)J3*;+XY;&Mg(&6EuVmO6@C%)w(C?FzyPcsN8nVto)56s}QVlZ_(hiiAna2;$VL5IA$v+Q&T3?`wF3v z>sI-i8K!1t*D07HR4MhcWeS4GphcEglDnA`gc5Fp*$QI>l#p_N3yeG`i!LsRjTb3w z)JYClNc(_lYlN&+r)B~sxY_p(K|Zxvb-Xm>Gwqg7`6y&Rg-(pY8F(YHnyc7B|=)25%t22L?w1FGjz zVL?IH?gevXFXKQ$(m{d%k3T=jEr6@{Ak&}k=&jzS(Wu9AuSMJ)BX(kcA(qiPLogiD zmLcWI2K;q?kU-sLYA(gdn)CPXt7L6x(Ozqjmg7nIM?3ZC-Rp{0aifZm#QGr9JBM!# z_kgu6_g?}yTMyFhEGoq{*i+X;)ixbV0$+)-Hq0y+WsS$hd0h_Sbi8lb->ruPJ9C*b zz62<;heiCr$#s+-Kk&^`oc9{&C8-w#kvaBM1ksjOV`Px|`FWHBk6Lys{3)(t2~l`5 z$`tnq%a>i}EYInJR2`$9gFB^S_;d@?^7$C6I>I1USrqsWDd|HY01-t9h~EU^+iO2k2a*fw%D^^g6DKELSeWoXRo7SW0!(6`M#aFKFB;j2 zZ?yLDGXG$(=@7fo&9)J21y;JYdbsv8BCwt1`sO`(nR@0L}@czsZCzBQR~nFM8KXju&usR38L(O zOi9KMrX3yZb|Mtz0-!d2Wr5aP`t?do!c%FMTjV=!n$t>ZpciQet|RLCZv$E26pI8w z>{Iq@K@nKxI2J*=P#NEqp$}egQwfL;QaNIGX|^ORJp5}%2lqA1Mr^4m7`O2U)W$$K zd%@onrOlsxe4w3Gxlw|erAJh4LZG;(h>(!(Bd}!pyjOdS6$4K?HHz9?%rGyBoBO%_ zgzSV}x_~cq;)RxpR}A;{@I-Tz;5HSW1Al%UqgWV`fdqK^PdgSd0@90+Hl6zWDkw;; z{FF_rLI^PmKuD;IJH_CIQytp^p_8YE7q`byhlb#5TK(kTeL z?dY_Z(^xHSkj-q{8&PKG8ncmM(dkuV>`zvQGA-k~Ub&c5?F!OQw94^*Y20QCYlTM& z=!}tIYHBSVvapdq>~c(nd8;WF@Mu$_{2qg0VSrGAYbSm|9Xz-+-auuh zydgo!(e!Fic3_|7M6&?(Q!H>?MdmX*tyGA&tAlmSDc5(jyi{+>9B-{mztAHSmH;E8 zAheb@Tx)j8&EjyFUbZ1D+)Ic&i`?dMC)p-HJ%EVCD_yS{8D+?(u{mhXh%W}R#F$L^ zSXcav6A2XD!s>!nR#tek0X5j)-|x4q}W%i zQZ_$6`XqAYl1e*APCaJx^H%g)srqBrp zX5pZ{2L2)@9+~iy#Vp6m^|keEbI|FX!vndSBFw13P7OW1gnGztO@?f`#Ib^Xe3OqN z@J+wcZWRE_nSuHWmhip<<$}7Xzn;z$OI2ZrerAh-uJfKBQ%}aFUGQA;;r){;ZmKYk zc5OcC6D)>v1q@OLgr>cQ9AUC6Eu=7vs?a;Wxj&mmaN`Y(S2gb0EBaO|*t7fUqAI7v z_9L6303Yx$`SRx!ff3ph;TMm1 zUAHy#zfT4CuQLQ5_sczykb2sk5fsl}xfB3wGdj;y%7#@^wqnUpS+i`7S?GbVJ3AbA zw+#<=UJFTI5|LO4p)6y3%CSWiiXT4FDiS~$O6Fn`cV7|34!|HTv^&*$11aS!b94SC z^PVmaqo>AkT4~&*nC~)~u-g=vq9PvU&vpYW^N{8Z<7iV<6vK9G-D_olvWl`hMLwAcb%0V%U1*dyyC%^-|1VKDRWvTZ?9pvF{|UcOzO6A z*Fduwr!VmYkRHM&ue2Q;8kchwf$_n<~oFsqX?|8JM(KA{FT$fvh5O32nx3`~D z5tuhlvZ4zL%PT8go5eLOm~AWqlcqhpdpUBw6@5T)6!m6~xcf5N8jgESf6snk4!_rj z-vq=Loh<=qC?SI){sREPAt4x+cn(+7qmyvBjaX52hhTxJ-5D2F6Zy>k0BKa z3(;tV+h3K#P#GxL_^ryil8kZ>ifePBCI}m5YwQ~-ho_jsb7x`UeX_E$H{!r?l>D2O zHwan%8>o7bqB@Q%=`4&VKVxax6L^{vF)HJW0!m!I&Cd(XnPSpQ!!LCnC&cO=3FHbv zcMD-p3!o654S9cbbi_A8SD+lJJ#`sE-YC-j(t)mEq>nRy$7C z)eFYSF654aUjd=^6R7@e+U(H3P{_-s@G&Kn(uXbBAKd`Nj5;kMFBc5}z zR5qvVgQ5C)2-2}hmpj36XsLU`%hx$y(c5JZ+PZo$(ikmc`0SxBHKD;Zr_Y}q&iaTz z8wQ0FoPi*s(;c(ZhID?xT^LCtwO=FkjJPZ#MK$qe`ZcQ7)mLarwU?w@1YQ~L_zoTS z4OU7q nKuAkKL#$w2e4>XySOX`6;dbM$1x|I*3_#%N>gTe~DWM4f%^Vz6 diff --git a/mods/PLAYER/mcl_hunger/textures/hbhunger_icon.png b/mods/PLAYER/mcl_hunger/textures/hbhunger_icon.png index 9c1bb63e48bb6b84c273202e9b4c8688a6aa1c70..3830fdfc3cf99855334cccf433ebcdb0859ac689 100644 GIT binary patch delta 192 zcmeBUyvR5~vYw5Bf#JbKHUS{TS>O>_%)r1c48n{Iv*t(u1)Dux977~7C#NJNB)sU` z@b^3e>r!n#W1|I()8291{y)v^7LU=YB7=?pUvSO5P}-_iwP?nf13+*Hh(A1eD7}MW zQfI*dj^fE{)>t(6?BQVcx%~LJ{=;|8(cgc3^cJxcHuPy?Oxb><^ov1<_6%dA2h8Gq qI{*HEI(YKGgj!;-hUVg93=FDKx?dB+w>|;7hr!d;&t;ucLK6VU%upWy delta 124 zcmcb}*vB|QvXqH|fg%6%M0X&?RubeF45Wb|ZyEbUAm!}o;uuoFnC!rOS8$s^i|eC< z=gbtWj8vIVxJ^Hx$u7vcNOY;9gPs%9iQ`ioP8?JXcoJu4(fQ1&O>_%)r1c48n{Iv*t(u1$#VQ977~7C#NJNByfBX z{C%E*ReIZ=q!b5c9Y(vP|DsoyN~&CqNJ#pBQPgPR>rJ1gx*N`H1cFu|et7pYKMxNN z6A<&9P&>q^e8%@r%^e=6Ndm3!=hY|t`0-NP=}v9IYrDE%T&5ElcY7K%yqUI1LY-}O xhiDJaj{~bX?f&<#?fB83C}h@ZBxJ+GaJWu1qNLJLp=fS?83{1OV&@BHI7} diff --git a/mods/PLAYER/mcl_meshhand/depends.txt b/mods/PLAYER/mcl_meshhand/depends.txt deleted file mode 100644 index c86b5f93b..000000000 --- a/mods/PLAYER/mcl_meshhand/depends.txt +++ /dev/null @@ -1,2 +0,0 @@ -mcl_tools -mcl_skins? diff --git a/mods/PLAYER/mcl_meshhand/description.txt b/mods/PLAYER/mcl_meshhand/description.txt deleted file mode 100644 index 7a4daae59..000000000 --- a/mods/PLAYER/mcl_meshhand/description.txt +++ /dev/null @@ -1 +0,0 @@ -Applies the player skin texture to the hand. diff --git a/mods/PLAYER/mcl_meshhand/init.lua b/mods/PLAYER/mcl_meshhand/init.lua index 14bf10090..93f22c325 100644 --- a/mods/PLAYER/mcl_meshhand/init.lua +++ b/mods/PLAYER/mcl_meshhand/init.lua @@ -16,6 +16,7 @@ for _,texture in pairs(list) do minetest.register_node("mcl_meshhand:"..texture, { description = "", tiles = {texture..".png"}, + use_texture_alpha = minetest.features.use_texture_alpha_string_modes and "opaque" or false, visual_scale = 1, wield_scale = {x=1,y=1,z=1}, paramtype = "light", @@ -33,14 +34,43 @@ 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 = "", + tiles = {texture..".png"}, + use_texture_alpha = minetest.features.use_texture_alpha_string_modes and "opaque" or false, + visual_scale = 1, + wield_scale = {x=1,y=1,z=1}, + paramtype = "light", + drawtype = "mesh", + mesh = "mcl_meshhand_female.b3d", + -- Prevent construction + node_placement_prediction = "", + on_construct = function(pos) + minetest.log("error", "[mcl_meshhand] Trying to construct mcl_meshhand:"..texture.." at "..minetest.pos_to_string(pos)) + minetest.remove_node(pos) + end, + drop = "", + on_drop = function() + return "" + 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 --change the player's hand to their skin mcl_skins.register_on_set_skin(function(player, skin) - local name = player:get_player_name() - player:get_inventory():set_stack("hand", 1, "mcl_meshhand:"..skin) + local meta = mcl_skins.meta[skin] + if meta.gender == "female" then + player:get_inventory():set_stack("hand", 1, "mcl_meshhand:"..skin.."_female") + else + player:get_inventory():set_stack("hand", 1, "mcl_meshhand:"..skin) + end end) else minetest.register_on_joinplayer(function(player) diff --git a/mods/PLAYER/mcl_meshhand/mod.conf b/mods/PLAYER/mcl_meshhand/mod.conf index 6b57f4a49..6a988417f 100644 --- a/mods/PLAYER/mcl_meshhand/mod.conf +++ b/mods/PLAYER/mcl_meshhand/mod.conf @@ -1 +1,6 @@ name = mcl_meshhand +author = jordan4ibanez +description = Applies the player skin texture to the hand. +depends = mcl_tools +optional_depends = mcl_skins + diff --git a/mods/PLAYER/mcl_meshhand/models/mcl_meshhand_female.b3d b/mods/PLAYER/mcl_meshhand/models/mcl_meshhand_female.b3d new file mode 100644 index 0000000000000000000000000000000000000000..b2ec6efcf8a0723b7b2f768de5680ea31867f857 GIT binary patch literal 789 zcmZ>AGIrr*W?*1sU|?_x3Jul+(jc~TMq*K7a!G0t!`U-F_At!A&|nXg1giki|AD~I z-^KMb69Yp)PGTicIVu1tN5%+QU)NxdDL`!?Bf^40g5Q8_1p*KS6lPenq-Vd~2M7BF zpJah%H~_JN{Waab{Y8pA_G)HlfcyZk*de>e`%P>Q*k!aI1B*2oaM(}T`fz{DTM>JO zsX{<82YZm1MQGW+J^q>p_Fc{ciWz|Q9^lT}$0s9mz#!ggFU*ePOH%e9l2Jd9TMURrfmj5H#i4u<8vtk*!;t_0 literal 0 HcmV?d00001 diff --git a/mods/PLAYER/mcl_meshhand/models/mcl_meshhand_female.blend b/mods/PLAYER/mcl_meshhand/models/mcl_meshhand_female.blend new file mode 100644 index 0000000000000000000000000000000000000000..be642496f1b3f711be2c23e5801a301039be2ba7 GIT binary patch literal 649436 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

|v=7NSnj!Y)qyEtH5+F7i~8 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

9j__Z6;s(=J1_Ij?N#_cmE3Vew6G$eNJd!V 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 end) @@ -156,45 +188,56 @@ minetest.register_globalstep(function(dtime) animation_speed_mod = animation_speed_mod / 2 end - -- ask if player is in a place which he should crawl - local node_in_feet = minetest.registered_nodes[mcl_playerinfo[name].node_feet] - -- ask if player is swiming - local standing_on_water = minetest.get_item_group(mcl_playerinfo[name].node_feet, "water") ~= 0 + + -- ask if player is swiming + local head_in_water = minetest.get_item_group(mcl_playerinfo[name].node_head, "water") ~= 0 + -- ask if player is sprinting local is_sprinting = mcl_sprint.is_sprinting(name) + local velocity = player:get_velocity() or player:get_player_velocity() + -- Apply animations based on what the player is doing if player:get_hp() == 0 then - player_set_animation(player, "lay") - elseif walking then + player_set_animation(player, "die") + elseif walking and velocity.x > 0.35 + or walking and velocity.x < -0.35 + or walking and velocity.z > 0.35 + or walking and velocity.z < -0.35 then if player_sneak[name] ~= controls.sneak then player_anim[name] = nil player_sneak[name] = controls.sneak end - if controls.LMB and not controls.sneak and standing_on_water and is_sprinting == true then + if get_mouse_button(player) == true and not controls.sneak and head_in_water and is_sprinting == true then player_set_animation(player, "swim_walk_mine", animation_speed_mod) - elseif not controls.sneak and standing_on_water and is_sprinting == true then + elseif not controls.sneak and head_in_water and is_sprinting == true then player_set_animation(player, "swim_walk", animation_speed_mod) - elseif is_sprinting == true and controls.LMB and not controls.sneak and not standing_on_water then + elseif string.find(player:get_wielded_item():get_name(), "mcl_bows:bow") and controls.RMB and controls.sneak then + player_set_animation(player, "bow_sneak", animation_speed_mod) + elseif string.find(player:get_wielded_item():get_name(), "mcl_bows:bow") and controls.RMB then + player_set_animation(player, "bow_walk", animation_speed_mod) + elseif is_sprinting == true and get_mouse_button(player) == true and not controls.sneak and not head_in_water then player_set_animation(player, "run_walk_mine", animation_speed_mod) - elseif controls.LMB and not controls.sneak then + elseif get_mouse_button(player) == true and not controls.sneak then player_set_animation(player, "walk_mine", animation_speed_mod) - elseif controls.LMB and controls.sneak and is_sprinting ~= true then + elseif get_mouse_button(player) == true and controls.sneak and is_sprinting ~= true then player_set_animation(player, "sneak_walk_mine", animation_speed_mod) - elseif is_sprinting == true and not controls.sneak and not standing_on_water then + elseif is_sprinting == true and not controls.sneak and not head_in_water then player_set_animation(player, "run_walk", animation_speed_mod) - elseif controls.sneak and not controls.LMB then + elseif controls.sneak and not get_mouse_button(player) == true then player_set_animation(player, "sneak_walk", animation_speed_mod) else player_set_animation(player, "walk", animation_speed_mod) end - elseif controls.LMB and not controls.sneak and standing_on_water and is_sprinting == true then + elseif get_mouse_button(player) == true and not controls.sneak and head_in_water and is_sprinting == true then player_set_animation(player, "swim_mine") - elseif controls.LMB and not controls.sneak then + elseif not get_mouse_button(player) == true and not controls.sneak and head_in_water and is_sprinting == true then + player_set_animation(player, "swim_stand") + elseif get_mouse_button(player) == true and not controls.sneak then player_set_animation(player, "mine") - elseif controls.LMB and controls.sneak then + elseif get_mouse_button(player) == true and controls.sneak then player_set_animation(player, "sneak_mine") - elseif not controls.sneak and standing_on_water and is_sprinting == true then + elseif not controls.sneak and head_in_water and is_sprinting == true then player_set_animation(player, "swim_stand", animation_speed_mod) elseif not controls.sneak then player_set_animation(player, "stand", animation_speed_mod) @@ -204,37 +247,3 @@ minetest.register_globalstep(function(dtime) end end end) - --- Don't change HP if the player falls in the water or through End Portal: -minetest.register_on_player_hpchange(function(player, hp_change, reason) - if reason and reason.type == "fall" and player then - local pos = player:get_pos() - local node = minetest.get_node(pos) - local velocity = player:get_velocity() or player:get_player_velocity() or {x=0,y=-10,z=0} - local v_axis_max = math.max(math.abs(velocity.x), math.abs(velocity.y), math.abs(velocity.z)) - local step = {x = velocity.x / v_axis_max, y = velocity.y / v_axis_max, z = velocity.z / v_axis_max} - for i = 1, math.ceil(v_axis_max/5)+1 do -- trace at least 1/5 of the way per second - if not node or node.name == "ignore" then - minetest.get_voxel_manip():read_from_map(pos, pos) - node = minetest.get_node(pos) - end - if node then - if minetest.registered_nodes[node.name].walkable then - return hp_change - end - if minetest.get_item_group(node.name, "water") ~= 0 then - return 0 - end - if node.name == "mcl_portals:portal_end" then - if mcl_portals and mcl_portals.end_teleport then - mcl_portals.end_teleport(player) - end - return 0 - end - end - pos = vector.add(pos, step) - node = minetest.get_node(pos) - end - end - return hp_change -end, true) diff --git a/mods/PLAYER/mcl_player/mod.conf b/mods/PLAYER/mcl_player/mod.conf new file mode 100644 index 000000000..97ccce8e6 --- /dev/null +++ b/mods/PLAYER/mcl_player/mod.conf @@ -0,0 +1,3 @@ +name = mcl_player +author = celeron55 +description = Adds the 3D player model, taken from Minetest Game 0.4.16. diff --git a/mods/PLAYER/mcl_player_init/mod.conf b/mods/PLAYER/mcl_player_init/mod.conf index 8d559910c..d7a86c438 100644 --- a/mods/PLAYER/mcl_player_init/mod.conf +++ b/mods/PLAYER/mcl_player_init/mod.conf @@ -1,2 +1,3 @@ name = mcl_player_init +author = Wuzzy description = Initialize player gameplay stuff that are neither model nor HUD-related diff --git a/mods/PLAYER/mcl_playerinfo/depends.txt b/mods/PLAYER/mcl_playerinfo/depends.txt deleted file mode 100644 index d0334ff54..000000000 --- a/mods/PLAYER/mcl_playerinfo/depends.txt +++ /dev/null @@ -1,4 +0,0 @@ -mcl_init -mcl_core -mcl_particles -mcl_death_messages diff --git a/mods/PLAYER/mcl_playerinfo/init.lua b/mods/PLAYER/mcl_playerinfo/init.lua index 31dad39a6..9c5d1433f 100644 --- a/mods/PLAYER/mcl_playerinfo/init.lua +++ b/mods/PLAYER/mcl_playerinfo/init.lua @@ -1,91 +1,93 @@ --- Player state for public API -mcl_playerinfo = {} - --- Get node but use fallback for nil or unknown -local function node_ok(pos, fallback) - - fallback = fallback or "air" - - local node = minetest.get_node_or_nil(pos) - - if not node then - return fallback - end - - if minetest.registered_nodes[node.name] then - return node.name - end - - return fallback -end - -local time = 0 - -local get_player_nodes = function(player_pos) - local work_pos = table.copy(player_pos) - - -- what is around me? - work_pos.y = work_pos.y - 0.1 -- standing on - local node_stand = node_ok(work_pos) - local node_stand_below = node_ok({x=work_pos.x, y=work_pos.y-1, z=work_pos.z}) - - work_pos.y = work_pos.y + 1.5 -- head level - local node_head = node_ok(work_pos) - - work_pos.y = work_pos.y - 1.2 -- feet level - local node_feet = node_ok(work_pos) - - return node_stand, node_stand_below, node_head, node_feet -end - -minetest.register_globalstep(function(dtime) - - time = time + dtime - - -- Run the rest of the code every 0.5 seconds - if time < 0.5 then - return - end - - -- reset time for next check - -- FIXME: Make sure a regular check interval applies - time = 0 - - -- check players - for _,player in pairs(minetest.get_connected_players()) do - -- who am I? - local name = player:get_player_name() - - -- where am I? - local pos = player:get_pos() - - -- what is around me? - local node_stand, node_stand_below, node_head, node_feet = get_player_nodes(pos) - mcl_playerinfo[name].node_stand = node_stand - mcl_playerinfo[name].node_stand_below = node_stand_below - mcl_playerinfo[name].node_head = node_head - mcl_playerinfo[name].node_feet = node_feet - - end - -end) - --- set to blank on join (for 3rd party mods) -minetest.register_on_joinplayer(function(player) - local name = player:get_player_name() - - mcl_playerinfo[name] = { - node_head = "", - node_feet = "", - node_stand = "", - node_stand_below = "", - } - -end) - --- clear when player leaves -minetest.register_on_leaveplayer(function(player) - local name = player:get_player_name() - - mcl_playerinfo[name] = nil -end) +local table = table + +-- Player state for public API +mcl_playerinfo = {} + +-- Get node but use fallback for nil or unknown +local function node_ok(pos, fallback) + + fallback = fallback or "air" + + local node = minetest.get_node_or_nil(pos) + + if not node then + return fallback + end + + if minetest.registered_nodes[node.name] then + return node.name + end + + return fallback +end + +local time = 0 + +local function get_player_nodes(player_pos) + local work_pos = table.copy(player_pos) + + -- what is around me? + work_pos.y = work_pos.y - 0.1 -- standing on + local node_stand = node_ok(work_pos) + local node_stand_below = node_ok({x=work_pos.x, y=work_pos.y-1, z=work_pos.z}) + + work_pos.y = work_pos.y + 1.5 -- head level + local node_head = node_ok(work_pos) + + work_pos.y = work_pos.y - 1.2 -- feet level + local node_feet = node_ok(work_pos) + + return node_stand, node_stand_below, node_head, node_feet +end + +minetest.register_globalstep(function(dtime) + + time = time + dtime + + -- Run the rest of the code every 0.5 seconds + if time < 0.5 then + return + end + + -- reset time for next check + -- FIXME: Make sure a regular check interval applies + time = 0 + + -- check players + for _,player in pairs(minetest.get_connected_players()) do + -- who am I? + local name = player:get_player_name() + + -- where am I? + local pos = player:get_pos() + + -- what is around me? + local node_stand, node_stand_below, node_head, node_feet = get_player_nodes(pos) + mcl_playerinfo[name].node_stand = node_stand + mcl_playerinfo[name].node_stand_below = node_stand_below + mcl_playerinfo[name].node_head = node_head + mcl_playerinfo[name].node_feet = node_feet + + end + +end) + +-- set to blank on join (for 3rd party mods) +minetest.register_on_joinplayer(function(player) + local name = player:get_player_name() + + mcl_playerinfo[name] = { + node_head = "", + node_feet = "", + node_stand = "", + node_stand_below = "", + } + +end) + +-- clear when player leaves +minetest.register_on_leaveplayer(function(player) + local name = player:get_player_name() + + mcl_playerinfo[name] = nil +end) diff --git a/mods/PLAYER/mcl_playerinfo/mod.conf b/mods/PLAYER/mcl_playerinfo/mod.conf index ee2b80e7e..25c05f03e 100644 --- a/mods/PLAYER/mcl_playerinfo/mod.conf +++ b/mods/PLAYER/mcl_playerinfo/mod.conf @@ -1 +1,4 @@ name = mcl_playerinfo +author = TenPlus1 +description = This is a helper mod for other mod to query the nodes around the player. +depends = mcl_init, mcl_core, mcl_particles diff --git a/mods/PLAYER/mcl_playerplus/depends.txt b/mods/PLAYER/mcl_playerplus/depends.txt deleted file mode 100644 index 7a259f8c1..000000000 --- a/mods/PLAYER/mcl_playerplus/depends.txt +++ /dev/null @@ -1,10 +0,0 @@ -mcl_init -mcl_core -mcl_particles -mcl_hunger -mcl_death_messages -playerphysics -mcl_playerinfo -mcl_weather -mcl_spawn -mcl_enchanting diff --git a/mods/PLAYER/mcl_playerplus/description.txt b/mods/PLAYER/mcl_playerplus/description.txt deleted file mode 100644 index 4664d5f8c..000000000 --- a/mods/PLAYER/mcl_playerplus/description.txt +++ /dev/null @@ -1 +0,0 @@ -Adds some simple player-related gameplay effects: Hurt by touching a cactus, suffocation and more. diff --git a/mods/PLAYER/mcl_playerplus/init.lua b/mods/PLAYER/mcl_playerplus/init.lua index 119e55e5a..1f881d2b6 100644 --- a/mods/PLAYER/mcl_playerplus/init.lua +++ b/mods/PLAYER/mcl_playerplus/init.lua @@ -1,80 +1,294 @@ -local S = minetest.get_translator("mcl_playerplus") +mcl_playerplus = { + elytra = {}, +} +local player_velocity_old = {x=0, y=0, z=0} +local get_connected_players = minetest.get_connected_players +local dir_to_yaw = minetest.dir_to_yaw +local get_item_group = minetest.get_item_group +local check_player_privs = minetest.check_player_privs +local find_node_near = minetest.find_node_near +local get_name_from_content_id = minetest.get_name_from_content_id +local get_voxel_manip = minetest.get_voxel_manip +local add_particle = minetest.add_particle +local add_particlespawner = minetest.add_particlespawner + +local is_sprinting = mcl_sprint.is_sprinting +local exhaust = mcl_hunger.exhaust +local playerphysics = playerphysics + +local vector = vector +local math = math -- Internal player state local mcl_playerplus_internal = {} -local def = {} local time = 0 +local look_pitch = 0 + +local function player_collision(player) + + local pos = player:get_pos() + --local vel = player:get_velocity() + local x = 0 + local z = 0 + local width = .75 + + for _,object in pairs(minetest.get_objects_inside_radius(pos, width)) do + + if object and (object:is_player() + or (object:get_luaentity()._cmi_is_mob == true and object ~= player)) then + + local pos2 = object:get_pos() + local vec = {x = pos.x - pos2.x, z = pos.z - pos2.z} + local force = (width + 0.5) - vector.distance( + {x = pos.x, y = 0, z = pos.z}, + {x = pos2.x, y = 0, z = pos2.z}) + + x = x + (vec.x * force) + z = z + (vec.z * force) + end + end + return {x,z} +end + +local function walking_player(player, control) + if control.up or control.down or control.left or control.right then + return true + else + return false + end +end + -- converts yaw to degrees local function degrees(rad) return rad * 180.0 / math.pi end -local pitch, name, node_stand, node_stand_below, node_head, node_feet, pos +local function dir_to_pitch(dir) + --local dir2 = vector.normalize(dir) + local xz = math.abs(dir.x) + math.abs(dir.z) + return -math.atan2(-dir.y, xz) +end + +local player_vel_yaws = {} + +function limit_vel_yaw(player_vel_yaw, yaw) + if player_vel_yaw < 0 then + player_vel_yaw = player_vel_yaw + 360 + end + + if yaw < 0 then + yaw = yaw + 360 + end + + if math.abs(player_vel_yaw - yaw) > 40 then + local player_vel_yaw_nm, yaw_nm = player_vel_yaw, yaw + if player_vel_yaw > yaw then + player_vel_yaw_nm = player_vel_yaw - 360 + else + yaw_nm = yaw - 360 + end + if math.abs(player_vel_yaw_nm - yaw_nm) > 40 then + local diff = math.abs(player_vel_yaw - yaw) + if diff > 180 and diff < 185 or diff < 180 and diff > 175 then + player_vel_yaw = yaw + elseif diff < 180 then + if player_vel_yaw < yaw then + player_vel_yaw = yaw - 40 + else + player_vel_yaw = yaw + 40 + end + else + if player_vel_yaw < yaw then + player_vel_yaw = yaw + 40 + else + player_vel_yaw = yaw - 40 + end + end + end + end + + if player_vel_yaw < 0 then + player_vel_yaw = player_vel_yaw + 360 + elseif player_vel_yaw > 360 then + player_vel_yaw = player_vel_yaw - 360 + end + + return player_vel_yaw +end + +local node_stand, node_stand_below, node_head, node_feet minetest.register_globalstep(function(dtime) time = time + dtime - -- Update jump status immediately since we need this info in real time. - -- WARNING: This section is HACKY as hell since it is all just based on heuristics. - for _,player in pairs(minetest.get_connected_players()) do - local controls = player:get_player_control() - name = player:get_player_name() + for _,player in pairs(get_connected_players()) do - -- controls head bone - local pitch = degrees(player:get_look_vertical()) * -1 + --[[ + _ _ _ + __ _ _ __ (_)_ __ ___ __ _| |_(_) ___ _ __ ___ + / _` | '_ \| | '_ ` _ \ / _` | __| |/ _ \| '_ \/ __| + | (_| | | | | | | | | | | (_| | |_| | (_) | | | \__ \ + \__,_|_| |_|_|_| |_| |_|\__,_|\__|_|\___/|_| |_|___/ - if string.find(player:get_wielded_item():get_name(), "mcl_bows:crossbow") and controls.RMB then - playerphysics.add_physics_factor(player, "speed", "mcl_playerplus:crossbow_walking", tonumber(minetest.settings:get("movement_speed_crouch")) / tonumber(minetest.settings:get("movement_speed_walk"))) - else - playerphysics.remove_physics_factor(player, "speed", "mcl_playerplus:crossbow_walking") + ]]-- + + local control = player:get_player_control() + local name = player:get_player_name() + --local meta = player:get_meta() + local parent = player:get_attach() + local wielded = player:get_wielded_item() + local player_velocity = player:get_velocity() or player:get_player_velocity() + local wielded_def = wielded:get_definition() + + local c_x, c_y = unpack(player_collision(player)) + + if player_velocity.x + player_velocity.y < .5 and c_x + c_y > 0 then + local add_velocity = player.add_player_velocity or player.add_velocity + add_velocity(player, {x = c_x, y = 0, z = c_y}) + player_velocity = player:get_velocity() or player:get_player_velocity() end - -- controls right and left arms pitch when shooting a bow or punching - if string.find(player:get_wielded_item():get_name(), "mcl_bows:bow") and controls.RMB and not controls.up and not controls.down and not controls.left and not controls.right and not minetest.get_item_group(mcl_playerinfo[name].node_stand, "water") ~= 0 then + -- control head bone + local pitch = - degrees(player:get_look_vertical()) + local yaw = degrees(player:get_look_horizontal()) + + local player_vel_yaw = degrees(dir_to_yaw(player_velocity)) + if player_vel_yaw == 0 then + player_vel_yaw = player_vel_yaws[name] or yaw + end + player_vel_yaw = limit_vel_yaw(player_vel_yaw, yaw) + player_vel_yaws[name] = player_vel_yaw + + local fly_pos = player:get_pos() + local fly_node = minetest.get_node({x = fly_pos.x, y = fly_pos.y - 0.5, z = fly_pos.z}).name + local elytra = mcl_playerplus.elytra[player] + + elytra.active = player:get_inventory():get_stack("armor", 3):get_name() == "mcl_armor:elytra" + and not player:get_attach() + and (elytra.active or control.jump and player_velocity.y < -6) + and (fly_node == "air" or fly_node == "ignore") + + if elytra.active then + if player_velocity.x < (player_velocity_old.x - 10) or player_velocity.x > (player_velocity_old.x + 10) and fly_node ~= "ignore" then + mcl_util.deal_damage(player, math.abs(player_velocity_old.x) * 0.2, {type = "fly_into_wall"}) + end + if player_velocity.z < (player_velocity_old.z - 10) or player_velocity.z > (player_velocity_old.z + 10) and fly_node ~= "ignore" then + mcl_util.deal_damage(player, math.abs(player_velocity_old.z) * 0.2, {type = "fly_into_wall"}) + end + mcl_player.player_set_animation(player, "fly") + if player_velocity.y < -1.5 then + player:add_velocity({x=0, y=0.17, z=0}) + end + if math.abs(player_velocity.x) + math.abs(player_velocity.z) < 20 then + local dir = minetest.yaw_to_dir(player:get_look_horizontal()) + if degrees(player:get_look_vertical()) * -.01 < .1 then + look_pitch = degrees(player:get_look_vertical()) * -.01 + else + look_pitch = .1 + end + player:add_velocity({x=dir.x, y=look_pitch, z=dir.z}) + end + playerphysics.add_physics_factor(player, "gravity", "mcl_playerplus:elytra", 0.1) + + if elytra.rocketing > 0 then + elytra.rocketing = elytra.rocketing - dtime + if vector.length(player_velocity) < 40 then + local add_velocity = player.add_velocity or player.add_player_velocity + add_velocity(player, vector.multiply(player:get_look_dir(), 4)) + add_particle({ + pos = fly_pos, + velocity = {x = 0, y = 0, z = 0}, + acceleration = {x = 0, y = 0, z = 0}, + expirationtime = math.random(0.3, 0.5), + size = math.random(1, 2), + collisiondetection = false, + vertical = false, + texture = "mcl_particles_bonemeal.png^[colorize:#bc7a57:127", + glow = 5, + }) + end + end + else + elytra.rocketing = 0 + playerphysics.remove_physics_factor(player, "gravity", "mcl_playerplus:elytra") + end + + if wielded_def and wielded_def._mcl_toollike_wield then + player:set_bone_position("Wield_Item", vector.new(0,3.9,1.3), vector.new(90,0,0)) + elseif string.find(wielded:get_name(), "mcl_bows:bow") then + player:set_bone_position("Wield_Item", vector.new(.5,4.5,-1.6), vector.new(90,0,20)) + else + player:set_bone_position("Wield_Item", vector.new(-1.5,4.9,1.8), vector.new(135,0,90)) + end + + player_velocity_old = player:get_velocity() or player:get_player_velocity() + + + -- controls right and left arms pitch when shooting a bow + if string.find(wielded:get_name(), "mcl_bows:bow") and control.RMB then player:set_bone_position("Arm_Right_Pitch_Control", vector.new(-3,5.785,0), vector.new(pitch+90,-30,pitch * -1 * .35)) player:set_bone_position("Arm_Left_Pitch_Control", vector.new(3.5,5.785,0), vector.new(pitch+90,43,pitch * .35)) - elseif string.find(player:get_wielded_item():get_name(), "mcl_bows:crossbow") and controls.RMB and not controls.up and not controls.down and not controls.left and not controls.right and not minetest.get_item_group(mcl_playerinfo[name].node_stand, "water") ~= 0 then - player:set_bone_position("Arm_Right_Pitch_Control", vector.new(-3,5.785,0), vector.new(20,0,30)) - player:set_bone_position("Arm_Left_Pitch_Control", vector.new(3,5.785,0), vector.new(40,0,-40)) - elseif string.find(player:get_wielded_item():get_name(), "mcl_bows:loaded_crossbow") and not controls.up and not controls.down and not controls.left and not controls.right and not minetest.get_item_group(mcl_playerinfo[name].node_stand, "water") ~= 0 then - player:set_bone_position("Arm_Right_Pitch_Control", vector.new(-3,5.785,0), vector.new(pitch+90,-15,pitch * -1 * .35)) - player:set_bone_position("Arm_Left_Pitch_Control", vector.new(3.5,5.785,0), vector.new(pitch+90,55,pitch * .35)) - elseif controls.LMB then + -- when punching + elseif control.LMB and not parent then player:set_bone_position("Arm_Right_Pitch_Control", vector.new(-3,5.785,0), vector.new(pitch,0,0)) player:set_bone_position("Arm_Left_Pitch_Control", vector.new(3,5.785,0), vector.new(0,0,0)) + -- when holding an item. + elseif wielded:get_name() ~= "" then + player:set_bone_position("Arm_Right_Pitch_Control", vector.new(-3,5.785,0), vector.new(20,0,0)) + player:set_bone_position("Arm_Left_Pitch_Control", vector.new(3,5.785,0), vector.new(0,0,0)) + -- resets arms pitch else player:set_bone_position("Arm_Left_Pitch_Control", vector.new(3,5.785,0), vector.new(0,0,0)) player:set_bone_position("Arm_Right_Pitch_Control", vector.new(-3,5.785,0), vector.new(0,0,0)) end - if controls.sneak and player:get_attach() == nil then + if elytra.active then + -- set head pitch and yaw when flying + player:set_bone_position("Head_Control", vector.new(0,6.3,0), vector.new(pitch-degrees(dir_to_pitch(player_velocity)),player_vel_yaw - yaw,0)) + -- sets eye height, and nametag color accordingly + player:set_properties({collisionbox = {-0.35,0,-0.35,0.35,0.8,0.35}, eye_height = 0.5, nametag_color = { r = 225, b = 225, a = 225, g = 225 }}) + -- control body bone when flying + player:set_bone_position("Body_Control", vector.new(0,6.3,0), vector.new(degrees(dir_to_pitch(player_velocity)) - 90,-player_vel_yaw + yaw + 180,0)) + elseif parent then + local parent_yaw = degrees(parent:get_yaw()) + player:set_properties({collisionbox = {-0.312,0,-0.312,0.312,1.8,0.312}, eye_height = 1.5, nametag_color = { r = 225, b = 225, a = 225, g = 225 }}) + player:set_bone_position("Head_Control", vector.new(0,6.3,0), vector.new(pitch, -limit_vel_yaw(yaw, parent_yaw) + parent_yaw, 0)) + player:set_bone_position("Body_Control", vector.new(0,6.3,0), vector.new(0,0,0)) + elseif control.sneak then -- controls head pitch when sneaking - player:set_bone_position("Head", vector.new(0,6.3,0), vector.new(pitch+36,0,0)) + player:set_bone_position("Head_Control", vector.new(0,6.3,0), vector.new(pitch, player_vel_yaw - yaw, player_vel_yaw - yaw)) -- sets eye height, and nametag color accordingly - player:set_properties({collisionbox = {-0.35,0,-0.35,0.35,1.8,0.35}, eye_height = 1.35, nametag_color = { r = 225, b = 225, a = 0, g = 225 }}) - - elseif minetest.get_item_group(mcl_playerinfo[name].node_feet, "water") ~= 0 and player:get_attach() == nil and mcl_sprint.is_sprinting(name) == true then - -- controls head pitch when swiming - player:set_bone_position("Head", vector.new(0,6.3,0), vector.new(pitch+90,0,0)) + player:set_properties({collisionbox = {-0.312,0,-0.312,0.312,1.8,0.312}, eye_height = 1.35, nametag_color = { r = 225, b = 225, a = 0, g = 225 }}) + -- sneaking body conrols + player:set_bone_position("Body_Control", vector.new(0,6.3,0), vector.new(0, -player_vel_yaw + yaw, 0)) + elseif get_item_group(mcl_playerinfo[name].node_head, "water") ~= 0 and is_sprinting(name) == true then + -- set head pitch and yaw when swimming + player:set_bone_position("Head_Control", vector.new(0,6.3,0), vector.new(pitch-degrees(dir_to_pitch(player_velocity)),player_vel_yaw - yaw,0)) -- sets eye height, and nametag color accordingly - player:set_properties({collisionbox = {-0.35,0,-0.35,0.35,0.8,0.35}, eye_height = 0.65, nametag_color = { r = 225, b = 225, a = 225, g = 225 }}) - + player:set_properties({collisionbox = {-0.312,0,-0.312,0.312,0.8,0.312}, eye_height = 0.5, nametag_color = { r = 225, b = 225, a = 225, g = 225 }}) + -- control body bone when swimming + player:set_bone_position("Body_Control", vector.new(0,6.3,0), vector.new(degrees(dir_to_pitch(player_velocity)) - 90,-player_vel_yaw + yaw + 180,0)) else - -- controls head pitch when not sneaking - player:set_bone_position("Head", vector.new(0,6.3,0), vector.new(pitch,0,0)) -- sets eye height, and nametag color accordingly - player:set_properties({collisionbox = {-0.35,0,-0.35,0.35,1.8,0.35}, eye_height = 1.65, nametag_color = { r = 225, b = 225, a = 225, g = 225 }}) + player:set_properties({collisionbox = {-0.312,0,-0.312,0.312,1.8,0.312}, eye_height = 1.5, nametag_color = { r = 225, b = 225, a = 225, g = 225 }}) + + player:set_bone_position("Head_Control", vector.new(0,6.3,0), vector.new(pitch, player_vel_yaw - yaw, 0)) + player:set_bone_position("Body_Control", vector.new(0,6.3,0), vector.new(0, -player_vel_yaw + yaw, 0)) end + -- Update jump status immediately since we need this info in real time. + -- WARNING: This section is HACKY as hell since it is all just based on heuristics. + if mcl_playerplus_internal[name].jump_cooldown > 0 then mcl_playerplus_internal[name].jump_cooldown = mcl_playerplus_internal[name].jump_cooldown - dtime end - if player:get_player_control().jump and mcl_playerplus_internal[name].jump_cooldown <= 0 then - pos = player:get_pos() + if control.jump and mcl_playerplus_internal[name].jump_cooldown <= 0 then + + --pos = player:get_pos() node_stand = mcl_playerinfo[name].node_stand node_stand_below = mcl_playerinfo[name].node_stand_below @@ -100,18 +314,18 @@ minetest.register_globalstep(function(dtime) as of 0.4.15. ]] - if minetest.get_item_group(node_feet, "liquid") == 0 and - minetest.get_item_group(node_stand, "liquid") == 0 and + if get_item_group(node_feet, "liquid") == 0 and + get_item_group(node_stand, "liquid") == 0 and not minetest.registered_nodes[node_feet].climbable and not minetest.registered_nodes[node_stand].climbable and (minetest.registered_nodes[node_stand].walkable or minetest.registered_nodes[node_stand_below].walkable) - and minetest.get_item_group(node_stand, "disable_jump") == 0 - and minetest.get_item_group(node_stand_below, "disable_jump") == 0 then + and get_item_group(node_stand, "disable_jump") == 0 + and get_item_group(node_stand_below, "disable_jump") == 0 then -- Cause exhaustion for jumping - if mcl_sprint.is_sprinting(name) then - mcl_hunger.exhaust(name, mcl_hunger.EXHAUST_SPRINT_JUMP) + if is_sprinting(name) then + exhaust(name, mcl_hunger.EXHAUST_SPRINT_JUMP) else - mcl_hunger.exhaust(name, mcl_hunger.EXHAUST_JUMP) + exhaust(name, mcl_hunger.EXHAUST_JUMP) end -- Reset cooldown timer @@ -130,7 +344,7 @@ minetest.register_globalstep(function(dtime) time = 0 -- check players - for _,player in pairs(minetest.get_connected_players()) do + for _,player in pairs(get_connected_players()) do -- who am I? local name = player:get_player_name() @@ -146,9 +360,6 @@ minetest.register_globalstep(function(dtime) return end - -- set defaults - def.speed = 1 - -- Standing on soul sand? If so, walk slower (unless player wears Soul Speed boots) if node_stand == "mcl_nether:soul_sand" then -- TODO: Tweak walk speed @@ -165,8 +376,14 @@ minetest.register_globalstep(function(dtime) playerphysics.add_physics_factor(player, "speed", "mcl_playerplus:surface", 0.4) end end + elseif get_item_group(node_feet, "liquid") ~= 0 and mcl_enchanting.get_enchantment(player:get_inventory():get_stack("armor", 5), "depth_strider") then + local boots = player:get_inventory():get_stack("armor", 5) + local depth_strider = mcl_enchanting.get_enchantment(boots, "depth_strider") + + if depth_strider > 0 then + playerphysics.add_physics_factor(player, "speed", "mcl_playerplus:surface", (depth_strider / 3) + 0.75) + end else - -- Reset speed decrease playerphysics.remove_physics_factor(player, "speed", "mcl_playerplus:surface") end @@ -181,17 +398,16 @@ minetest.register_globalstep(function(dtime) and (ndef.groups.opaque == 1) and (node_head ~= "ignore") -- Check privilege, too - and (not minetest.check_player_privs(name, {noclip = true})) then + and (not check_player_privs(name, {noclip = true})) then if player:get_hp() > 0 then - mcl_death_messages.player_damage(player, S("@1 suffocated to death.", name)) - player:set_hp(player:get_hp() - 1) + mcl_util.deal_damage(player, 1, {type = "in_wall"}) end end -- Am I near a cactus? - local near = minetest.find_node_near(pos, 1, "mcl_core:cactus") + local near = find_node_near(pos, 1, "mcl_core:cactus") if not near then - near = minetest.find_node_near({x=pos.x, y=pos.y-1, z=pos.z}, 1, "mcl_core:cactus") + near = find_node_near({x=pos.x, y=pos.y-1, z=pos.z}, 1, "mcl_core:cactus") end if near then -- Am I touching the cactus? If so, it hurts @@ -199,8 +415,7 @@ minetest.register_globalstep(function(dtime) local dist_feet = vector.distance({x=pos.x, y=pos.y-1, z=pos.z}, near) if dist < 1.1 or dist_feet < 1.1 then if player:get_hp() > 0 then - mcl_death_messages.player_damage(player, S("@1 was prickled to death by a cactus.", name)) - player:set_hp(player:get_hp() - 1, { type = "punch", from = "mod" }) + mcl_util.deal_damage(player, 1, {type = "cactus"}) end end end @@ -208,15 +423,15 @@ minetest.register_globalstep(function(dtime) --[[ Swimming: Cause exhaustion. NOTE: As of 0.4.15, it only counts as swimming when you are with the feet inside the liquid! Head alone does not count. We respect that for now. ]] - if minetest.get_item_group(node_feet, "liquid") ~= 0 or - minetest.get_item_group(node_stand, "liquid") ~= 0 then + if not player:get_attach() and (get_item_group(node_feet, "liquid") ~= 0 or + get_item_group(node_stand, "liquid") ~= 0) then local lastPos = mcl_playerplus_internal[name].lastPos if lastPos then local dist = vector.distance(lastPos, pos) mcl_playerplus_internal[name].swimDistance = mcl_playerplus_internal[name].swimDistance + dist if mcl_playerplus_internal[name].swimDistance >= 1 then local superficial = math.floor(mcl_playerplus_internal[name].swimDistance) - mcl_hunger.exhaust(name, mcl_hunger.EXHAUST_SWIM * superficial) + exhaust(name, mcl_hunger.EXHAUST_SWIM * superficial) mcl_playerplus_internal[name].swimDistance = mcl_playerplus_internal[name].swimDistance - superficial end end @@ -224,9 +439,8 @@ minetest.register_globalstep(function(dtime) end -- Underwater: Spawn bubble particles - if minetest.get_item_group(node_head, "water") ~= 0 then - - minetest.add_particlespawner({ + if get_item_group(node_head, "water") ~= 0 then + add_particlespawner({ amount = 10, time = 0.15, minpos = { x = -0.25, y = 0.3, z = -0.25 }, @@ -249,7 +463,7 @@ minetest.register_globalstep(function(dtime) if wi == "mcl_core:barrier" or wi == "mcl_core:realm_barrier" then local pos = vector.round(player:get_pos()) local r = 8 - local vm = minetest.get_voxel_manip() + local vm = get_voxel_manip() local emin, emax = vm:read_from_map({x=pos.x-r, y=pos.y-r, z=pos.z-r}, {x=pos.x+r, y=pos.y+r, z=pos.z+r}) local area = VoxelArea:new{ MinEdge = emin, @@ -260,7 +474,7 @@ minetest.register_globalstep(function(dtime) for y=pos.y-r, pos.y+r do for z=pos.z-r, pos.z+r do local vi = area:indexp({x=x, y=y, z=z}) - local nodename = minetest.get_name_from_content_id(data[vi]) + local nodename = get_name_from_content_id(data[vi]) local tex if nodename == "mcl_core:barrier" then tex = "mcl_core_barrier.png" @@ -268,7 +482,7 @@ minetest.register_globalstep(function(dtime) tex = "mcl_core_barrier.png^[colorize:#FF00FF:127^[transformFX" end if tex then - minetest.add_particle({ + add_particle({ pos = {x=x, y=y, z=z}, expirationtime = 1, size = 8, @@ -298,6 +512,7 @@ minetest.register_on_joinplayer(function(player) swimDistance = 0, jump_cooldown = -1, -- Cooldown timer for jumping, we need this to prevent the jump exhaustion to increase rapidly } + mcl_playerplus.elytra[player] = {active = false, rocketing = 0} end) -- clear when player leaves @@ -305,4 +520,69 @@ minetest.register_on_leaveplayer(function(player) local name = player:get_player_name() mcl_playerplus_internal[name] = nil + mcl_playerplus.elytra[player] = nil +end) + +-- Don't change HP if the player falls in the water or through End Portal: +mcl_damage.register_modifier(function(obj, damage, reason) + if reason.type == "fall" then + local pos = obj:get_pos() + local node = minetest.get_node(pos) + local velocity = obj:get_velocity() or obj:get_player_velocity() or {x=0,y=-10,z=0} + local v_axis_max = math.max(math.abs(velocity.x), math.abs(velocity.y), math.abs(velocity.z)) + local step = {x = velocity.x / v_axis_max, y = velocity.y / v_axis_max, z = velocity.z / v_axis_max} + for i = 1, math.ceil(v_axis_max/5)+1 do -- trace at least 1/5 of the way per second + if not node or node.name == "ignore" then + minetest.get_voxel_manip():read_from_map(pos, pos) + node = minetest.get_node(pos) + end + if node then + if minetest.registered_nodes[node.name].walkable then + return + end + if minetest.get_item_group(node.name, "water") ~= 0 then + return 0 + end + if node.name == "mcl_portals:portal_end" then + if mcl_portals and mcl_portals.end_teleport then + mcl_portals.end_teleport(obj) + end + return 0 + end + if node.name == "mcl_core:cobweb" then + return 0 + end + if node.name == "mcl_core:vine" then + return 0 + end + end + pos = vector.add(pos, step) + node = minetest.get_node(pos) + end + end +end, -200) + +minetest.register_on_respawnplayer(function(player) + local pos = player:get_pos() + minetest.add_particlespawner({ + amount = 50, + time = 0.001, + minpos = vector.add(pos, 0), + maxpos = vector.add(pos, 0), + minvel = vector.new(-5,-5,-5), + maxvel = vector.new(5,5,5), + minexptime = 1.1, + maxexptime = 1.5, + minsize = 1, + maxsize = 2, + collisiondetection = false, + vertical = false, + texture = "mcl_particles_mob_death.png^[colorize:#000000:255", + }) + + minetest.sound_play("mcl_mobs_mob_poof", { + pos = pos, + gain = 1.0, + max_hear_distance = 8, + }, true) end) diff --git a/mods/PLAYER/mcl_playerplus/locale/mcl_playerplus.de.tr b/mods/PLAYER/mcl_playerplus/locale/mcl_playerplus.de.tr deleted file mode 100644 index 44d486d08..000000000 --- a/mods/PLAYER/mcl_playerplus/locale/mcl_playerplus.de.tr +++ /dev/null @@ -1,3 +0,0 @@ -# textdomain: mcl_playerplus -@1 suffocated to death.=@1 erstickte zu Tode. -@1 was prickled to death by a cactus.=@1 wurde von einem Kaktus zu Tode gepiekst. diff --git a/mods/PLAYER/mcl_playerplus/locale/mcl_playerplus.es.tr b/mods/PLAYER/mcl_playerplus/locale/mcl_playerplus.es.tr deleted file mode 100644 index ef7705bce..000000000 --- a/mods/PLAYER/mcl_playerplus/locale/mcl_playerplus.es.tr +++ /dev/null @@ -1,3 +0,0 @@ -# textdomain: mcl_playerplus -@1 suffocated to death.=@1 ahogado hasta la muerte. -@1 was prickled to death by a cactus.=@1 fue herido de muerte por un cactus. diff --git a/mods/PLAYER/mcl_playerplus/locale/mcl_playerplus.fr.tr b/mods/PLAYER/mcl_playerplus/locale/mcl_playerplus.fr.tr deleted file mode 100644 index 6482bd736..000000000 --- a/mods/PLAYER/mcl_playerplus/locale/mcl_playerplus.fr.tr +++ /dev/null @@ -1,3 +0,0 @@ -# textdomain: mcl_playerplus -@1 suffocated to death.=@1 étouffé à mort. -@1 was prickled to death by a cactus.=@1 a été piqué à mort par un cactus. diff --git a/mods/PLAYER/mcl_playerplus/locale/mcl_playerplus.pl.tr b/mods/PLAYER/mcl_playerplus/locale/mcl_playerplus.pl.tr new file mode 100644 index 000000000..67a82d95d --- /dev/null +++ b/mods/PLAYER/mcl_playerplus/locale/mcl_playerplus.pl.tr @@ -0,0 +1,3 @@ +# textdomain: mcl_playerplus +@1 suffocated to death.=@1 udusiła się na śmierć. +@1 was prickled to death by a cactus.=@1 została zakłuta na śmierć przez kaktusa. diff --git a/mods/PLAYER/mcl_playerplus/locale/mcl_playerplus.ru.tr b/mods/PLAYER/mcl_playerplus/locale/mcl_playerplus.ru.tr deleted file mode 100644 index a75bd4bd6..000000000 --- a/mods/PLAYER/mcl_playerplus/locale/mcl_playerplus.ru.tr +++ /dev/null @@ -1,3 +0,0 @@ -# textdomain: mcl_playerplus -@1 suffocated to death.=@1 задохнулся(ась). -@1 was prickled to death by a cactus.=@1 был(а) до смерти заколот(а) кактусом. diff --git a/mods/PLAYER/mcl_playerplus/locale/template.txt b/mods/PLAYER/mcl_playerplus/locale/template.txt deleted file mode 100644 index 49b1f96ac..000000000 --- a/mods/PLAYER/mcl_playerplus/locale/template.txt +++ /dev/null @@ -1,3 +0,0 @@ -# textdomain: mcl_playerplus -@1 suffocated to death.= -@1 was prickled to death by a cactus.= diff --git a/mods/PLAYER/mcl_playerplus/mod.conf b/mods/PLAYER/mcl_playerplus/mod.conf index 660def45e..b77c9e2e5 100644 --- a/mods/PLAYER/mcl_playerplus/mod.conf +++ b/mods/PLAYER/mcl_playerplus/mod.conf @@ -1 +1,5 @@ name = mcl_playerplus +author = TenPlus1 +description = Adds some simple player-related gameplay effects: Hurt by touching a cactus, suffocation and more. +depends = mcl_init, mcl_core, mcl_particles, mcl_hunger, playerphysics, mcl_playerinfo, mcl_weather, mcl_spawn, mcl_enchanting, mcl_damage, mcl_sprint + diff --git a/mods/PLAYER/mcl_skins/depends.txt b/mods/PLAYER/mcl_skins/depends.txt deleted file mode 100644 index 09bdf5205..000000000 --- a/mods/PLAYER/mcl_skins/depends.txt +++ /dev/null @@ -1,4 +0,0 @@ -mcl_player -mcl_inventory? -intllib? -mcl_armor? diff --git a/mods/PLAYER/mcl_skins/description.txt b/mods/PLAYER/mcl_skins/description.txt deleted file mode 100644 index 61c7bff64..000000000 --- a/mods/PLAYER/mcl_skins/description.txt +++ /dev/null @@ -1 +0,0 @@ -Mod that allows players to set their individual skins. \ No newline at end of file diff --git a/mods/PLAYER/mcl_skins/init.lua b/mods/PLAYER/mcl_skins/init.lua index b1d1feef8..6d5461a98 100644 --- a/mods/PLAYER/mcl_skins/init.lua +++ b/mods/PLAYER/mcl_skins/init.lua @@ -1,12 +1,15 @@ -- Skins for MineClone 2 +local modname = minetest.get_current_modname() + mcl_skins = { skins = {}, list = {}, previews = {}, meta = {}, has_preview = {}, - modpath = minetest.get_modpath("mcl_skins"), + modpath = minetest.get_modpath(modname), skin_count = 0, -- counter of _custom_ skins (all skins except character.png) } -local S = minetest.get_translator("mcl_skins") +local S = minetest.get_translator(modname) +local has_mcl_inventory = minetest.get_modpath("mcl_inventory") -- load skin list and metadata local id, f, data, skin = 0 @@ -52,7 +55,7 @@ while true do data = nil if f then - data = minetest.deserialize("return {" .. f:read('*all') .. "}") + data = minetest.deserialize("return {" .. f:read("*all") .. "}") f:close() end @@ -60,6 +63,7 @@ while true do mcl_skins.meta[skin] = { name = data and data.name or "", author = data and data.author or "", + gender = data and data.gender or "", } if id > 0 then @@ -68,7 +72,7 @@ while true do id = id + 1 end -mcl_skins.cycle_skin = function(player) +function mcl_skins.cycle_skin(player) local skin_id = tonumber(player:get_meta():get_string("mcl_skins:skin_id")) if not skin_id then skin_id = 0 @@ -80,19 +84,26 @@ mcl_skins.cycle_skin = function(player) mcl_skins.set_player_skin(player, skin_id) end -mcl_skins.set_player_skin = function(player, skin_id) +function mcl_skins.set_player_skin(player, skin_id) if not player then return false end local playername = player:get_player_name() - local skin, skin_file, preview + local skin, preview if skin_id == nil or type(skin_id) ~= "number" or skin_id < 0 or skin_id > mcl_skins.skin_count then return false elseif skin_id == 0 then skin = "character" preview = "player" + mcl_player.player_set_model(player, "mcl_armor_character.b3d") else skin = "mcl_skins_character_" .. tostring(skin_id) + local meta = mcl_skins.meta[skin] + if meta.gender == "female" then + mcl_player.player_set_model(player, "mcl_armor_character_female.b3d") + else + mcl_player.player_set_model(player, "mcl_armor_character.b3d") + end if mcl_skins.has_preview[skin_id] then preview = "mcl_skins_player_" .. tostring(skin_id) else @@ -100,16 +111,12 @@ mcl_skins.set_player_skin = function(player, skin_id) preview = "mcl_skins_player_dummy" end end - skin_file = skin .. ".png" + --local skin_file = skin .. ".png" mcl_skins.skins[playername] = skin mcl_skins.previews[playername] = preview player:get_meta():set_string("mcl_skins:skin_id", tostring(skin_id)) mcl_skins.update_player_skin(player) - if minetest.get_modpath("mcl_armor") then - armor.textures[playername].skin = skin_file - armor:update_player_visuals(player) - end - if minetest.get_modpath("mcl_inventory") then + if has_mcl_inventory then mcl_inventory.update_inventory_formspec(player) end for i=1, #mcl_skins.registered_on_set_skins do @@ -119,22 +126,21 @@ mcl_skins.set_player_skin = function(player, skin_id) return true end -mcl_skins.update_player_skin = function(player) +function mcl_skins.update_player_skin(player) if not player then return end local playername = player:get_player_name() - mcl_player.player_set_textures(player, { mcl_skins.skins[playername] .. ".png" }, mcl_skins.previews[playername] .. ".png" ) + mcl_player.player_set_skin(player, mcl_skins.skins[playername] .. ".png", mcl_skins.previews[playername] .. ".png") end -- load player skin on join minetest.register_on_joinplayer(function(player) - local name = player:get_player_name() local skin_id = player:get_meta():get_string("mcl_skins:skin_id") local set_skin -- do we already have a skin in player attributes? - if skin_id ~= nil and skin_id ~= "" then + if skin_id and skin_id ~= "" then set_skin = tonumber(skin_id) -- otherwise use random skin if not set end @@ -151,7 +157,7 @@ end) mcl_skins.registered_on_set_skins = {} -mcl_skins.register_on_set_skin = function(func) +function mcl_skins.register_on_set_skin(func) table.insert(mcl_skins.registered_on_set_skins, func) end @@ -188,7 +194,6 @@ minetest.register_chatcommand("setskin", { end end - local skin local ok = mcl_skins.set_player_skin(player, skin_id) if not ok then return false, S("Invalid skin number! Valid numbers: 0 to @1", mcl_skins.skin_count) @@ -217,6 +222,9 @@ minetest.register_on_player_receive_fields(function(player, formname, fields) if mcl_skins.skin_count <= 6 then -- Change skin immediately if there are not many skins mcl_skins.cycle_skin(player) + if player:get_attach() then + mcl_player.player_set_animation(player, "sit") + end else -- Show skin selection formspec otherwise mcl_skins.show_formspec(player:get_player_name()) @@ -224,7 +232,7 @@ minetest.register_on_player_receive_fields(function(player, formname, fields) end end) -mcl_skins.show_formspec = function(playername) +function mcl_skins.show_formspec(playername) local formspec = "size[7,8.5]" formspec = formspec .. "label[2,2;" .. minetest.formspec_escape(minetest.colorize("#383838", S("Select player skin:"))) .. "]" @@ -284,4 +292,3 @@ minetest.register_on_player_receive_fields(function(player, formname, fields) end) minetest.log("action", "[mcl_skins] Mod initialized with "..mcl_skins.skin_count.." custom skin(s)") - diff --git a/mods/PLAYER/mcl_skins/intllib.lua b/mods/PLAYER/mcl_skins/intllib.lua deleted file mode 100644 index 6669d7202..000000000 --- a/mods/PLAYER/mcl_skins/intllib.lua +++ /dev/null @@ -1,45 +0,0 @@ - --- Fallback functions for when `intllib` is not installed. --- Code released under Unlicense . - --- Get the latest version of this file at: --- https://raw.githubusercontent.com/minetest-mods/intllib/master/lib/intllib.lua - -local function format(str, ...) - local args = { ... } - local function repl(escape, open, num, close) - if escape == "" then - local replacement = tostring(args[tonumber(num)]) - if open == "" then - replacement = replacement..close - end - return replacement - else - return "@"..open..num..close - end - end - return (str:gsub("(@?)@(%(?)(%d+)(%)?)", repl)) -end - -local gettext, ngettext -if minetest.get_modpath("intllib") then - if intllib.make_gettext_pair then - -- New method using gettext. - gettext, ngettext = intllib.make_gettext_pair() - else - -- Old method using text files. - gettext = intllib.Getter() - end -end - --- Fill in missing functions. - -gettext = gettext or function(msgid, ...) - return format(msgid, ...) -end - -ngettext = ngettext or function(msgid, msgid_plural, n, ...) - return format(n==1 and msgid or msgid_plural, ...) -end - -return gettext, ngettext diff --git a/mods/PLAYER/mcl_skins/locale/mcl_skins.pl.tr b/mods/PLAYER/mcl_skins/locale/mcl_skins.pl.tr new file mode 100644 index 000000000..9b07cea2c --- /dev/null +++ b/mods/PLAYER/mcl_skins/locale/mcl_skins.pl.tr @@ -0,0 +1,13 @@ +# textdomain: mcl_skins +[] []=[] [] +Select player skin of yourself or another player=Wybierz skin gracza dla siebie lub innego gracza +Insufficient or wrong parameters=Niewystarczające lub złe parametry +Player @1 not online!=Gracz @1 nie jest online! +You need the “server” privilege to change the skin of other players!=Potrzebujesz uprawnienia "serwer", aby zmieniać skiny innych graczy! +Invalid skin number! Valid numbers: 0 to @1=Niepoprawny numer skina! Poprawne numery: od 0 do @1 +Your skin has been set to: @1=Twój skin został ustawiony na: @1 +Your skin has been set to: @1 (@2)=Twój skin został ustawiony na: @1 (@2) +Skin of @1 set to: @2 (@3)=Skin gracza @1 ustawiony na @2 (@3) +Select player skin:=Wybierz skin gracza: +@1 (@2)=@1 (@2) +Name: @1=Nazwa: @1 diff --git a/mods/PLAYER/mcl_skins/meta/mcl_skins_character.txt b/mods/PLAYER/mcl_skins/meta/mcl_skins_character.txt index 00061a654..c31bd7168 100644 --- a/mods/PLAYER/mcl_skins/meta/mcl_skins_character.txt +++ b/mods/PLAYER/mcl_skins/meta/mcl_skins_character.txt @@ -1,2 +1,3 @@ name = "Steve", author = "%TEXTURE_PACK_AUTHOR%", +gender = "male", diff --git a/mods/PLAYER/mcl_skins/meta/mcl_skins_character_1.txt b/mods/PLAYER/mcl_skins/meta/mcl_skins_character_1.txt index f96b13f68..e6c90dc0f 100644 --- a/mods/PLAYER/mcl_skins/meta/mcl_skins_character_1.txt +++ b/mods/PLAYER/mcl_skins/meta/mcl_skins_character_1.txt @@ -1,2 +1,3 @@ name = "Alex", author = "%TEXTURE_PACK_AUTHOR%", +gender = "female", diff --git a/mods/PLAYER/mcl_skins/mod.conf b/mods/PLAYER/mcl_skins/mod.conf index 96f827646..657d3cc0e 100644 --- a/mods/PLAYER/mcl_skins/mod.conf +++ b/mods/PLAYER/mcl_skins/mod.conf @@ -1 +1,5 @@ name = mcl_skins +author = TenPlus1 +description = Mod that allows players to set their individual skins. +depends = mcl_player +optional_depends = mcl_inventory, intllib diff --git a/mods/PLAYER/mcl_spawn/depends.txt b/mods/PLAYER/mcl_spawn/depends.txt deleted file mode 100644 index 3b355984e..000000000 --- a/mods/PLAYER/mcl_spawn/depends.txt +++ /dev/null @@ -1 +0,0 @@ -mcl_init diff --git a/mods/PLAYER/mcl_spawn/description.txt b/mods/PLAYER/mcl_spawn/description.txt deleted file mode 100644 index 6712e4432..000000000 --- a/mods/PLAYER/mcl_spawn/description.txt +++ /dev/null @@ -1 +0,0 @@ -Set and get the player's respawn position diff --git a/mods/PLAYER/mcl_spawn/init.lua b/mods/PLAYER/mcl_spawn/init.lua index 5a4f3d634..113a4d27f 100644 --- a/mods/PLAYER/mcl_spawn/init.lua +++ b/mods/PLAYER/mcl_spawn/init.lua @@ -1,6 +1,6 @@ mcl_spawn = {} -local S = minetest.get_translator("mcl_spawn") +local S = minetest.get_translator(minetest.get_current_modname()) local mg_name = minetest.get_mapgen_setting("mg_name") local storage = minetest.get_mod_storage() @@ -81,13 +81,7 @@ local dir_step = storage:get_int("mcl_spawn_dir_step") or 0 local dir_ind = storage:get_int("mcl_spawn_dir_ind") or 1 local emerge_pos1, emerge_pos2 --- Get world 'mapgen_limit' and 'chunksize' to calculate 'spawn_limit'. --- This accounts for how mapchunks are not generated if they or their shell exceed --- 'mapgen_limit'. - -local mapgen_limit = tonumber(minetest.get_mapgen_setting("mapgen_limit")) -local chunksize = tonumber(minetest.get_mapgen_setting("chunksize")) -local spawn_limit = math.max(mapgen_limit - (chunksize + 1) * 16, 0) +local spawn_limit = mcl_vars.mapgen_edge_max --Functions @@ -385,7 +379,11 @@ function mcl_spawn.search() end -mcl_spawn.get_world_spawn_pos = function() +function mcl_spawn.get_world_spawn_pos() + local ssp = minetest.setting_get_pos("static_spawnpoint") + if ssp then + return ssp + end if success then return wsp end @@ -397,11 +395,11 @@ end -- If player is nil or not a player, a world spawn point is returned. -- The second return value is true if returned spawn point is player-chosen, -- false otherwise. -mcl_spawn.get_bed_spawn_pos = function(player) +function mcl_spawn.get_bed_spawn_pos(player) local spawn, custom_spawn = nil, false - if player ~= nil and player:is_player() then + if player and player:is_player() then local attr = player:get_meta():get_string("mcl_beds:spawn") - if attr ~= nil and attr ~= "" then + if attr and attr ~= "" then spawn = minetest.string_to_pos(attr) custom_spawn = true end @@ -417,7 +415,7 @@ end -- Set pos to nil to clear the spawn position. -- If message is set, informs the player with a chat message when the spawn position -- changed. -mcl_spawn.set_spawn_pos = function(player, pos, message) +function mcl_spawn.set_spawn_pos(player, pos, message) local spawn_changed = false local meta = player:get_meta() if pos == nil then @@ -445,7 +443,7 @@ mcl_spawn.set_spawn_pos = function(player, pos, message) return spawn_changed end -mcl_spawn.get_player_spawn_pos = function(player) +function mcl_spawn.get_player_spawn_pos(player) local pos, custom_spawn = mcl_spawn.get_bed_spawn_pos(player) if pos and custom_spawn then -- Check if bed is still there @@ -453,7 +451,7 @@ mcl_spawn.get_player_spawn_pos = function(player) local bgroup = minetest.get_item_group(node_bed.name, "bed") if bgroup ~= 1 and bgroup ~= 2 then -- Bed is destroyed: - if player ~= nil and player:is_player() then + if player and player:is_player() then player:get_meta():set_string("mcl_beds:spawn", "") end minetest.chat_send_player(player:get_player_name(), S("Your spawn bed was missing or blocked.")) @@ -484,7 +482,7 @@ mcl_spawn.get_player_spawn_pos = function(player) return mcl_spawn.get_world_spawn_pos(), false end -mcl_spawn.spawn = function(player) +function mcl_spawn.spawn(player) local pos, in_bed = mcl_spawn.get_player_spawn_pos(player) player:set_pos(pos) return in_bed or success @@ -499,10 +497,15 @@ function mcl_spawn.shadow_worker() mcl_spawn.search() minetest.log("action", "[mcl_spawn] Started world spawn point search") end - if success and ((not good_for_respawn(wsp)) or (not can_find_tree(wsp))) then - success = false - minetest.log("action", "[mcl_spawn] World spawn position isn't safe anymore: "..minetest.pos_to_string(wsp)) - mcl_spawn.search() + + if success then + local wsp_node = minetest.get_node(wsp) + if not (wsp_node and wsp_node.name == "ignore") + and ((not good_for_respawn(wsp)) or ((no_trees_area_counter >= 0) and not can_find_tree(wsp))) then + success = false + minetest.log("action", "[mcl_spawn] World spawn position isn't safe anymore: "..minetest.pos_to_string(wsp)) + mcl_spawn.search() + end end minetest.after(respawn_search_interval, mcl_spawn.shadow_worker) diff --git a/mods/PLAYER/mcl_spawn/locale/mcl_spawn.pl.tr b/mods/PLAYER/mcl_spawn/locale/mcl_spawn.pl.tr new file mode 100644 index 000000000..df97a3d72 --- /dev/null +++ b/mods/PLAYER/mcl_spawn/locale/mcl_spawn.pl.tr @@ -0,0 +1,5 @@ +# textdomain: mcl_spawn +New respawn position set!=Ustawiono nową pozycję odradzania! +Respawn position cleared!=Usunięto pozycję odradzania! +Your spawn bed was missing or blocked.=Twoje łóżko odradzania zginęło lub zostało zablokowane. + diff --git a/mods/PLAYER/mcl_spawn/mod.conf b/mods/PLAYER/mcl_spawn/mod.conf index ff54191b2..954f831db 100644 --- a/mods/PLAYER/mcl_spawn/mod.conf +++ b/mods/PLAYER/mcl_spawn/mod.conf @@ -1 +1,4 @@ name = mcl_spawn +author = Wuzzy +description = Set and get the player's respawn position +depends = mcl_init diff --git a/mods/PLAYER/mcl_sprint/depends.txt b/mods/PLAYER/mcl_sprint/depends.txt deleted file mode 100644 index aa6711ef0..000000000 --- a/mods/PLAYER/mcl_sprint/depends.txt +++ /dev/null @@ -1,3 +0,0 @@ -mcl_playerinfo -playerphysics -mcl_hunger diff --git a/mods/PLAYER/mcl_sprint/init.lua b/mods/PLAYER/mcl_sprint/init.lua index 9e7690f4b..4c0d609c9 100644 --- a/mods/PLAYER/mcl_sprint/init.lua +++ b/mods/PLAYER/mcl_sprint/init.lua @@ -7,6 +7,22 @@ to this software to the public domain worldwide. This software is distributed without any warranty. ]] +local math = math +local vector = vector + +local pairs = pairs + +local get_node = minetest.get_node +local get_gametime = minetest.get_gametime +local add_particlespawner = minetest.add_particlespawner +local get_player_by_name = minetest.get_player_by_name + +local registered_nodes = minetest.registered_nodes + +local get_hunger = mcl_hunger.get_hunger +local exhaust = mcl_hunger.exhaust + + --Configuration variables, these are all explained in README.md mcl_sprint = {} @@ -16,7 +32,7 @@ local players = {} -- Returns true if the player with the given name is sprinting, false if not. -- Returns nil if player does not exist. -mcl_sprint.is_sprinting = function(playername) +function mcl_sprint.is_sprinting(playername) if players[playername] then return players[playername].sprinting else @@ -31,9 +47,11 @@ minetest.register_on_joinplayer(function(player) sprinting = false, timeOut = 0, shouldSprint = false, + clientSprint = false, lastPos = player:get_pos(), sprintDistance = 0, - fov = 1.0 + fov = 1.0, + channel = minetest.mod_channel_join("mcl_sprint:" .. playerName), } end) minetest.register_on_leaveplayer(function(player) @@ -41,18 +59,44 @@ minetest.register_on_leaveplayer(function(player) players[playerName] = nil end) +local function cancelClientSprinting(name) + players[name].channel:send_all("") + players[name].clientSprint = false +end + local function setSprinting(playerName, sprinting) --Sets the state of a player (0=stopped/moving, 1=sprinting) local player = minetest.get_player_by_name(playerName) + local controls = player:get_player_control() if players[playerName] then players[playerName].sprinting = sprinting - if sprinting == true then - players[playerName].fov = math.min(players[playerName].fov + 0.05, 1.2) - player:set_fov(players[playerName].fov, true, 0.15) - playerphysics.add_physics_factor(player, "speed", "mcl_sprint:sprint", mcl_sprint.SPEED) - elseif sprinting == false then - players[playerName].fov = math.max(players[playerName].fov - 0.05, 1.0) - player:set_fov(players[playerName].fov, true, 0.15) - playerphysics.remove_physics_factor(player, "speed", "mcl_sprint:sprint") + local fov_old = players[playerName].fov + local fov_new = fov_old + local fade_time = .15 + if sprinting == true + or controls.RMB + and string.find(player:get_wielded_item():get_name(), "mcl_bows:bow") + and player:get_wielded_item():get_name() ~= "mcl_bows:bow" then + if sprinting == true then + fov_new = math.min(players[playerName].fov + 0.05, 1.2) + else + fov_new = .7 + players[playerName].fade_time = .3 + end + if sprinting == true then + playerphysics.add_physics_factor(player, "speed", "mcl_sprint:sprint", mcl_sprint.SPEED) + end + elseif sprinting == false + and player:get_wielded_item():get_name() ~= "mcl_bows:bow_0" + and player:get_wielded_item():get_name() ~= "mcl_bows:bow_1" + and player:get_wielded_item():get_name() ~= "mcl_bows:bow_2" then + fov_new = math.max(players[playerName].fov - 0.05, 1.0) + if sprinting == false then + playerphysics.remove_physics_factor(player, "speed", "mcl_sprint:sprint") + end + end + if fov_new ~= fov_old then + players[playerName].fov = fov_new + player:set_fov(fov_new, true, fade_time) end return true end @@ -97,17 +141,27 @@ local function get_top_node_tile(param2, paramtype2) end end +minetest.register_on_modchannel_message(function(channel_name, sender, message) + if channel_name == "mcl_sprint:" .. sender then + players[sender].clientSprint = minetest.is_yes(message) + end +end) + +minetest.register_on_respawnplayer(function(player) + cancelClientSprinting(player:get_player_name()) +end) + minetest.register_globalstep(function(dtime) --Get the gametime - local gameTime = minetest.get_gametime() + local gameTime = get_gametime() --Loop through all connected players - for playerName,playerInfo in pairs(players) do - local player = minetest.get_player_by_name(playerName) - if player ~= nil then + for playerName, playerInfo in pairs(players) do + local player = get_player_by_name(playerName) + if player then local ctrl = player:get_player_control() --Check if the player should be sprinting - if ctrl.aux1 and ctrl.up and not ctrl.sneak then + if players[playerName]["clientSprint"] or ctrl.aux1 and ctrl.up and not ctrl.sneak then players[playerName]["shouldSprint"] = true else players[playerName]["shouldSprint"] = false @@ -115,23 +169,22 @@ minetest.register_globalstep(function(dtime) local playerPos = player:get_pos() --If the player is sprinting, create particles behind and cause exhaustion - if playerInfo["sprinting"] == true and gameTime % 0.1 == 0 then - + if playerInfo["sprinting"] == true and not player:get_attach() and gameTime % 0.1 == 0 then -- Exhaust player for sprinting local lastPos = players[playerName].lastPos local dist = vector.distance({x=lastPos.x, y=0, z=lastPos.z}, {x=playerPos.x, y=0, z=playerPos.z}) players[playerName].sprintDistance = players[playerName].sprintDistance + dist if players[playerName].sprintDistance >= 1 then local superficial = math.floor(players[playerName].sprintDistance) - mcl_hunger.exhaust(playerName, mcl_hunger.EXHAUST_SPRINT * superficial) + exhaust(playerName, mcl_hunger.EXHAUST_SPRINT * superficial) players[playerName].sprintDistance = players[playerName].sprintDistance - superficial end -- Sprint node particles - local playerNode = minetest.get_node({x=playerPos["x"], y=playerPos["y"]-1, z=playerPos["z"]}) - local def = minetest.registered_nodes[playerNode.name] + local playerNode = get_node({x=playerPos["x"], y=playerPos["y"]-1, z=playerPos["z"]}) + local def = registered_nodes[playerNode.name] if def and def.walkable then - minetest.add_particlespawner({ + add_particlespawner({ amount = math.random(1, 2), time = 1, minpos = {x=-0.5, y=0.1, z=-0.5}, @@ -158,8 +211,10 @@ minetest.register_globalstep(function(dtime) if players[playerName]["shouldSprint"] == true then --Stopped local sprinting -- Prevent sprinting if hungry or sleeping - if (mcl_hunger.active and mcl_hunger.get_hunger(player) <= 6) or (player:get_meta():get_string("mcl_beds:sleeping") == "true")then + if (mcl_hunger.active and get_hunger(player) <= 6) + or (player:get_meta():get_string("mcl_beds:sleeping") == "true") then sprinting = false + cancelClientSprinting(playerName) else sprinting = true end diff --git a/mods/PLAYER/mcl_sprint/mod.conf b/mods/PLAYER/mcl_sprint/mod.conf index 7a3692459..0d20f80a3 100644 --- a/mods/PLAYER/mcl_sprint/mod.conf +++ b/mods/PLAYER/mcl_sprint/mod.conf @@ -1 +1,4 @@ name = mcl_sprint +author = GunshipPenguin +description = Allows the player to sprint by pressing the “Use” key (default: E). +depends = mcl_playerinfo, playerphysics, mcl_hunger diff --git a/mods/PLAYER/wieldview/LICENSE.txt b/mods/PLAYER/mcl_wieldview/LICENSE.txt similarity index 100% rename from mods/PLAYER/wieldview/LICENSE.txt rename to mods/PLAYER/mcl_wieldview/LICENSE.txt diff --git a/mods/PLAYER/wieldview/README.txt b/mods/PLAYER/mcl_wieldview/README.txt similarity index 100% rename from mods/PLAYER/wieldview/README.txt rename to mods/PLAYER/mcl_wieldview/README.txt diff --git a/mods/PLAYER/mcl_wieldview/init.lua b/mods/PLAYER/mcl_wieldview/init.lua new file mode 100644 index 000000000..7200f6186 --- /dev/null +++ b/mods/PLAYER/mcl_wieldview/init.lua @@ -0,0 +1,122 @@ +local get_connected_players = minetest.get_connected_players +local get_item_group = minetest.get_item_group + +mcl_wieldview = { + players = {} +} + +function mcl_wieldview.get_item_texture(itemname) + if itemname == "" then + return + end + + local def = minetest.registered_items[itemname] + if not def then + return + end + + local inv_image = def.inventory_image + if inv_image == "" then + return + end + + local texture = inv_image + + local transform = get_item_group(itemname, "wieldview_transform") + if transform then + -- This actually works with groups ratings because transform1, transform2, etc. + -- have meaning and transform0 is used for identidy, so it can be ignored + texture = texture .. "^[transform" .. transform + end + + return texture +end + +function mcl_wieldview.update_wielded_item(player) + if not player then + return + end + local itemstack = player:get_wielded_item() + local itemname = itemstack:get_name() + + local def = mcl_wieldview.players[player] + + if def.item == itemname then + return + end + + def.item = itemname + def.texture = mcl_wieldview.get_item_texture(itemname) or "blank.png" + + mcl_player.player_set_wielditem(player, def.texture) +end + +minetest.register_on_joinplayer(function(player) + mcl_wieldview.players[player] = {item = "", texture = "blank.png"} + + minetest.after(0, function() + if not player:is_player() then + return + end + + mcl_wieldview.update_wielded_item(player) + + local itementity = minetest.add_entity(player:get_pos(), "mcl_wieldview:wieldnode") + itementity:set_attach(player, "Hand_Right", vector.new(0, 1, 0), vector.new(90, 0, 45)) + itementity:get_luaentity().wielder = player + end) +end) + +minetest.register_on_leaveplayer(function(player) + mcl_wieldview.players[player] = nil +end) + +minetest.register_globalstep(function() + local players = get_connected_players() + for i = 1, #players do + mcl_wieldview.update_wielded_item(players[i]) + end +end) + +minetest.register_entity("mcl_wieldview:wieldnode", { + initial_properties = { + hp_max = 1, + visual = "wielditem", + physical = false, + textures = {""}, + automatic_rotate = 1.5, + is_visible = true, + pointable = false, + collide_with_objects = false, + static_save = false, + collisionbox = {-0.21, -0.21, -0.21, 0.21, 0.21, 0.21}, + selectionbox = {-0.21, -0.21, -0.21, 0.21, 0.21, 0.21}, + visual_size = {x = 0.21, y = 0.21}, + }, + + itemstring = "", + + on_step = function(self) + if self.wielder:is_player() then + local def = mcl_wieldview.players[self.wielder] + local itemstring = def.item + + if self.itemstring ~= itemstring then + local itemdef = minetest.registered_items[itemstring] + self.object:set_properties({glow = itemdef and itemdef.light_source or 0}) + + -- wield item as cubic + if def.texture == "blank.png" then + self.object:set_properties({textures = {itemstring}}) + -- wield item as flat + else + self.object:set_properties({textures = {""}}) + end + + self.itemstring = itemstring + end + else + self.object:remove() + end + end, +}) diff --git a/mods/PLAYER/mcl_wieldview/mod.conf b/mods/PLAYER/mcl_wieldview/mod.conf new file mode 100644 index 000000000..4b3097876 --- /dev/null +++ b/mods/PLAYER/mcl_wieldview/mod.conf @@ -0,0 +1,4 @@ +name = mcl_wieldview +author = stujones11 +description = Makes hand wielded items visible to other players. +depends = mcl_player diff --git a/mods/PLAYER/playerphysics/description.txt b/mods/PLAYER/playerphysics/description.txt deleted file mode 100644 index c692c5cdb..000000000 --- a/mods/PLAYER/playerphysics/description.txt +++ /dev/null @@ -1 +0,0 @@ -This mod makes it possible for multiple mods to modify player physics (speed, jumping strength, gravity) without conflict. diff --git a/mods/PLAYER/playerphysics/mod.conf b/mods/PLAYER/playerphysics/mod.conf index da01bf07e..1c2f2fa07 100644 --- a/mods/PLAYER/playerphysics/mod.conf +++ b/mods/PLAYER/playerphysics/mod.conf @@ -1 +1,3 @@ name = playerphysics +author = Wuzzy +description = This mod makes it possible for multiple mods to modify player physics (speed, jumping strength, gravity) without conflict. diff --git a/mods/PLAYER/wieldview/depends.txt b/mods/PLAYER/wieldview/depends.txt deleted file mode 100644 index 2bbf820fd..000000000 --- a/mods/PLAYER/wieldview/depends.txt +++ /dev/null @@ -1 +0,0 @@ -mcl_armor diff --git a/mods/PLAYER/wieldview/description.txt b/mods/PLAYER/wieldview/description.txt deleted file mode 100644 index 0d51ad954..000000000 --- a/mods/PLAYER/wieldview/description.txt +++ /dev/null @@ -1 +0,0 @@ -Makes hand wielded items visible to other players. diff --git a/mods/PLAYER/wieldview/init.lua b/mods/PLAYER/wieldview/init.lua deleted file mode 100644 index dab577fa8..000000000 --- a/mods/PLAYER/wieldview/init.lua +++ /dev/null @@ -1,82 +0,0 @@ -local time = 0 -local update_time = tonumber(minetest.settings:get("wieldview_update_time")) -if not update_time then - update_time = 2 - minetest.settings:set("wieldview_update_time", tostring(update_time)) -end -local node_tiles = minetest.settings:get_bool("wieldview_node_tiles") -if not node_tiles then - node_tiles = false - minetest.settings:set("wieldview_node_tiles", "false") -end - -wieldview = { - wielded_item = {}, - transform = {}, -} - -dofile(minetest.get_modpath(minetest.get_current_modname()).."/transform.lua") - -wieldview.get_item_texture = function(self, item) - local texture = "blank.png" - if item ~= "" then - if minetest.registered_items[item] then - if minetest.registered_items[item].inventory_image ~= "" then - texture = minetest.registered_items[item].inventory_image - elseif node_tiles == true and minetest.registered_items[item].tiles - and type(minetest.registered_items[item].tiles[1]) == "string" - and minetest.registered_items[item].tiles[1] ~= "" then - texture = minetest.inventorycube(minetest.registered_items[item].tiles[1]) - end - end - -- Get item image transformation, first from group, then from transform.lua - local transform = minetest.get_item_group(item, "wieldview_transform") - if transform == 0 then - transform = wieldview.transform[item] - end - if transform then - -- This actually works with groups ratings because transform1, transform2, etc. - -- have meaning and transform0 is used for identidy, so it can be ignored - texture = texture.."^[transform"..tostring(transform) - end - end - return texture -end - -wieldview.update_wielded_item = function(self, player) - if not player then - return - end - local name = player:get_player_name() - local stack = player:get_wielded_item() - local item = stack:get_name() - if not item then - return - end - if self.wielded_item[name] then - if self.wielded_item[name] == item then - return - end - if not armor.textures[name] then - return - end - armor.textures[name].wielditem = self:get_item_texture(item) - armor:update_player_visuals(player) - end - self.wielded_item[name] = item -end - -minetest.register_on_joinplayer(function(player) - local name = player:get_player_name() - wieldview.wielded_item[name] = "" - minetest.after(0, function(player) - wieldview:update_wielded_item(player) - end, player) -end) - -minetest.register_globalstep(function() - for _,player in ipairs(minetest.get_connected_players()) do - wieldview:update_wielded_item(player) - end -end) - diff --git a/mods/PLAYER/wieldview/transform.lua b/mods/PLAYER/wieldview/transform.lua deleted file mode 100644 index 0b0145c7f..000000000 --- a/mods/PLAYER/wieldview/transform.lua +++ /dev/null @@ -1,42 +0,0 @@ --- Wielded Item Transformations - http://dev.minetest.net/texture - -wieldview.transform = { - ["mcl_core:torch"]="R270", - ["mesecons_torch:mesecon_torch_on"]="R270", - ["mcl_core:sapling"]="R270", - ["mcl_core:junglesapling"]="R270", - ["mcl_core:darksapling"]="R270", - ["mcl_core:acaciasapling"]="R270", - ["mcl_core:birchsapling"]="R270", - ["mcl_core:sprucesapling"]="R270", - ["mcl_core:deadbush"]="R270", - ["mcl_flowers:dandelion"]="R270", - ["mcl_flowers:tulip_orange"]="R270", - ["mcl_flowers:tulip_white"]="R270", - ["mcl_flowers:tulip_pink"]="R270", - ["mcl_flowers:tulip_red"]="R270", - ["mcl_flowers:allium"]="R270", - ["mcl_flowers:azure_bluet"]="R270", - ["mcl_flowers:poppy"]="R270", - ["mcl_flowers:blue_orchid"]="R270", - ["mcl_flowers:oxeye_daisy"]="R270", - ["mcl_flowers:fern"]="R270", - ["mcl_flowers:tallgrass"]="R270", - ["mcl_buckets:bucket_empty"]="R270", - ["mcl_buckets:bucket_water"]="R270", - ["mcl_buckets:bucket_river_water"]="R270", - ["mcl_buckets:bucket_lava"]="R270", - ["mcl_mobitems:milk_bucket"]="R270", - ["mcl_potions:glass_bottle"]="R270", - ["mcl_potions:water"]="R270", - ["mcl_potions:awkward"]="R270", - ["mcl_potions:thick"]="R270", - ["mcl_potions:mundane"]="R270", - - ["screwdriver:screwdriver"]="R270", - ["screwdriver:screwdriver1"]="R270", - ["screwdriver:screwdriver2"]="R270", - ["screwdriver:screwdriver3"]="R270", - ["screwdriver:screwdriver4"]="R270", -} - diff --git a/settingtypes.txt b/settingtypes.txt index 264757db8..542711675 100644 --- a/settingtypes.txt +++ b/settingtypes.txt @@ -1,4 +1,4 @@ -# This file contains settings of MineClone 2that can be changed in +# This file contains settings of MineClone 2 that can be changed in # minetest.conf [World] @@ -33,9 +33,12 @@ mcl_tnt_griefing (TNT destroys blocks) bool true # This setting is only read at startup. enable_bed_respawn (Respawn at bed) bool true -# If enabled, the night can be skipped if all players are in bed. -# This setting is only read at startup. -enable_bed_night_skip (Skip night when sleeping) bool true +# How many players have to sleep to skip the night, in percent. +# Setting to 0 will mean 1 player is always enough to skip the night. Setting above 100 will prevent skipping the night. +# 100 by default. +# The setting can be changed ingame using `/set mcl_playersSleepingPercentage ` +mcl_playersSleepingPercentage (Players Sleeping Percentage) int 100 + # Normally, players drop all their items when they die. Enable this # setting, so players always keep their inventory on death. mcl_keepInventory (Keep inventory on death) bool false @@ -95,7 +98,10 @@ fire_animation_frames (Fire Animation Frames) int 8 animated_chests (Animated chests) bool true # Whether to preview the player in inventory in 3D (requires Minetest 5.4) -3d_player_preview (3D Player preview) bool false +3d_player_preview (3D Player preview) bool true + +# The maximum number of boss bars to simultaniously display on the screen +max_bossbars (Maximum Boss bars) int 5 [Experimental] # Whether ice is translucent. If disabled, ice is fully opaque. @@ -126,6 +132,12 @@ mcl_generate_fallen_logs (Generate fallen logs) bool false # But creating new flat worlds after changing this setting should be safe. mcl_superflat_classic (Classic superflat map generation) bool false +# If disabled, no ores will be generated. +mcl_generate_ores (Generate Ores) bool true + +# If disabled, command blocks will be unusuable (but still present). +mcl_enable_commandblocks (Enable Command Blocks) bool true + # Make some blocks emit decorative particles like flames. This setting # specifies the detail level of particles, with higher levels being # more CPU demanding. @@ -133,8 +145,18 @@ mcl_superflat_classic (Classic superflat map generation) bool false # game by a lot. mcl_node_particles (Block particles detail level) enum none high,medium,low,none +# Enable hard overiding of builtin commands. +mcl_builtin_commands_overide (Enable hard overiding of builtin commands.) bool true + # If enabled, this will substitute a few blocks in village schematics so they blend into normal, snowy, and sandy areas. Defaults to true. basic_pseudobiome_villages (Enables very basic, and experimental "pseudobiome-based" villages) bool true # 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 + +[Debugging] +# If enabled, this will show the itemstring of an item in the description. +mcl_item_id_debug (Item ID Debug) bool false \ No newline at end of file diff --git a/tools/README.md b/tools/README.md index abcc73ae3..4dc378bc1 100644 --- a/tools/README.md +++ b/tools/README.md @@ -27,3 +27,17 @@ Usage: - Convert the textures - Put the new texture directory in the Minetest texture pack directory, just like any other Minetest texture pack + +## Luacheck Globals Generators +This is a Python script which list every single global tables in mineclone2 source code. +It outputs a list to be used in luacheck conf files. + +Modes of operation: +- List global tables + +Requirements: +- Know how to use the console +- Python 3 + +Usage: +- In the console, run `python3 ./tools/create_luacheck.py` in the MineClone2 directory diff --git a/tools/Texture_Converter.py b/tools/Texture_Converter.py index c23bc9fce..820fa9c08 100755 --- a/tools/Texture_Converter.py +++ b/tools/Texture_Converter.py @@ -196,6 +196,11 @@ def convert_textures(): if verbose: print(src_file + " → " + dst_file) + # Convert map background + map_background_file = tex_dir + "/map/map_background.png" + if os.path.isfile(map_background_file): + os.system("convert " + map_background_file + " -interpolate Integer -filter point -resize \"140x140\" " + target_dir("/mods/ITEMS/mcl_maps/textures") + "/mcl_maps_map_background.png") + # Convert armor textures (requires ImageMagick) armor_files = [ [ tex_dir + "/models/armor/leather_layer_1.png", tex_dir + "/models/armor/leather_layer_2.png", target_dir("/mods/ITEMS/mcl_armor/textures"), "mcl_armor_helmet_leather.png", "mcl_armor_chestplate_leather.png", "mcl_armor_leggings_leather.png", "mcl_armor_boots_leather.png" ], diff --git a/tools/create_luacheck.py b/tools/create_luacheck.py new file mode 100755 index 000000000..8b55c1376 --- /dev/null +++ b/tools/create_luacheck.py @@ -0,0 +1,44 @@ +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[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: + local_vars = [] + for i, line in enumerate(f.readlines()): + m = pattern.match(line) + if m: + 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: + local_vars.append(n.group('local_var')) + + if not found: + nb_varloc = len(variables_locales) + #print(path_in_str, ": -", "({} variables locales)".format(nb_varloc) if nb_varloc > 0 else '') + +print(', '.join(['"{}"'.format(v) for v in global_vars])) diff --git a/tools/create_map_color_file.py b/tools/create_map_color_file.py new file mode 100644 index 000000000..b6486b8e3 --- /dev/null +++ b/tools/create_map_color_file.py @@ -0,0 +1,59 @@ +import 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)) + diff --git a/tools/dicts/polish.dic b/tools/dicts/polish.dic new file mode 100644 index 000000000..952ae57eb --- /dev/null +++ b/tools/dicts/polish.dic @@ -0,0 +1,176 @@ +1s +1f +Badlandach +biomeinfo +creeper +Creeper +creepera +czerwienit +czerwienitem +czerwienitowych +czerwienitu +czerwienitowa +czerwienitowe +czerwienitowej +czerwienitowego +czerwienitową +czerwienitowy +czerwienitowym +czerwienitowymi +enchant +Enderman +Endermit +endermitom +forceenchant +Ghast +ghasta +Ghasta +kresomysz +kresomyszę +przywoływacza +endermana +pigmana +szlama +enable +disable +awards +Dozuj +wskazywalne +zderzalne +Zderzalne +zderzalnego +Minetest +doc_basics +doc_identifier +help_reveal +doc_items +doc_encyclopedia +F1 +shout +Minetesta +voxelach +InfiniMinera +F10 +F9 +celeron55 +F2 +Ahola +debug +Perttu +F8 +F3 +F7 +F5 +F12 +noclip +F6 +https +viewforum +php +minetest +Houstonia +houstonią +wskazywalna +MineClone +voxeli +niewskazywalne +wskazywalnych +github +Wuzzy2 +MineClone2 +Minetestem +freenode +irc +Bugs +viewtopic +forums +iskrzyłuda +Spawnowanie +Griefowanie +PvP +enable_pvp +creative_mode +msg +enable_damage +boats +privs +give +tekst3 +tekst1 +tekst2 +słowo1 +słowo2 +słowo3 +slesz +slesza +mcl_core +giveme +spawnentity +spawnowaniem +grantme +interact +spawnuje +revoke +spawnują +jasnogłazu +Netherowego +Netherowych +Netherowy +jasnogłazy +Iskrzyłuda +iskrzyłudzie +jasnogłazie +Jasnogłaz +Kolcze +Kolczy +Łuczarz +maphack +międzywymiarowego +międzywymiarowych +moba +Muuuchomor +Nether +netherowej +Netherowa +Netherowe +Netheru +Netherze +półbloku +Prastrażnik +pryzmaryn +pryzmarynowe +pryzmarynowa +Pryzmaryn +Pryzmarynowa +Pryzmarynowe +Przywoływacz +setblock +Shulker +shulkera +shulkerów +shulkerowa +Shulkerowa +shulkerową +Shulkerowe +shulkerowej +shulkerowych +shulkerowymi +spawner +spawnowania +spawnery +spawnerze +spawnstruct +szkieleta +v6 +Wielostrzał +Wither +witherowego +withera +Witherowy +zakłuta +refrenusu +refrenusowych +thunder +clear +snow +rain diff --git a/tools/remove_end.py b/tools/remove_end.py new file mode 100644 index 000000000..3b73e5575 --- /dev/null +++ b/tools/remove_end.py @@ -0,0 +1,46 @@ +world_name = "world" +path_to_map_sqlite = "../../../worlds/" + world_name + "/map.sqlite" + +import sqlite3, sys + +try: + conn = sqlite3.connect(path_to_map_sqlite) +except Error as e: + print(e) + sys.exit() + +def unsignedToSigned(i, max_positive): + if i < max_positive: + return i + else: + return i - 2*max_positive + +cursor = conn.cursor() +cursor.execute("SELECT pos FROM blocks") +poses = cursor.fetchall() +end_blocks = [] +for i0 in (poses): + i = int(i0[0]) + blockpos = i + x = unsignedToSigned(i % 4096, 2048) + i = int((i - x) / 4096) + y = unsignedToSigned(i % 4096, 2048) + i = int((i - y) / 4096) + z = unsignedToSigned(i % 4096, 2048) + + node_pos_y = y * 16 + if node_pos_y > -28811 and node_pos_y + 15 < -67: + end_blocks.append(blockpos) + +if len(end_blocks) < 1: + print ("End blocks not found") + sys.exit() + +counter = 0 +for blockpos in end_blocks: + print("Deleting ", blockpos) + cursor.execute("DELETE FROM blocks WHERE pos=" + str(blockpos)) + counter += 1 +conn.commit() + +print(counter, " block(s) deleted") diff --git a/tools/spell_check_translate_files.py b/tools/spell_check_translate_files.py new file mode 100644 index 000000000..6b3cc85b0 --- /dev/null +++ b/tools/spell_check_translate_files.py @@ -0,0 +1,60 @@ +# Output indicator +# >> Spell checking error +# !> Indicates a text line with too many '=' in translate file (.tr) + +import os +import argparse +import hunspell +import re + +parser = argparse.ArgumentParser(description='Check translation file using pyhunspell for a given language.') +parser.add_argument("language", help='language code') +parser.add_argument("dic_file", help='path to .dic file') +parser.add_argument("aff_file", help='path to .aff file') +parser.add_argument('-a', "--add", help='path to file with additional words', default=None) +parser.add_argument('-s', "--suggestions", action="store_true", help='display spelling suggestions for incorrectly spelled words') +args = parser.parse_args() + +PATH = "../mods/" +code_lang = args.language +hs = hunspell.HunSpell(args.dic_file, args.aff_file) +if args.add is not None: + with open(args.add, 'r') as file: + for word in file: + hs.add(word.strip()) + +def get_errors(file): + result = set() + for line in file: + line = line.strip() + if line.startswith('#') or line == '': + continue + if '=' in line: + try: + _, translated = re.split(r'[^@]=', line) + except: + print("!> Too many '='s in line:", line) + continue + for word in re.split(r'\@.|[\W ]',translated): + if not hs.spell(word): + result.add(word) + + return result + +def spell_check(filename): + with open(filename, 'r', encoding="utf-8") as file: + errors = get_errors(file) + if len(errors) > 0: + print("Spell checking errors in '", filename[len(PATH):], "':", sep='') + for word in errors: + print('>>', word) + if args.suggestions: + print(">> Did you mean:", ", ".join(hs.suggest(word)), "?") + + +for root, _, _ in os.walk(PATH): + if root.endswith('locale'): + translated_file = os.path.join(root, os.path.basename(os.path.dirname(root))) + "." + code_lang + ".tr" + + if os.path.exists(translated_file) and os.path.isfile(translated_file): + spell_check(translated_file)

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 WgjKK_J=dViS{r`BuyYWW^V<#i=?WbH diff --git a/mods/ITEMS/mcl_armor/models/mcl_armor_character_female.b3d b/mods/ITEMS/mcl_armor/models/mcl_armor_character_female.b3d new file mode 100644 index 0000000000000000000000000000000000000000..4e17ee34105e5fd7028051e7509ae0ae9d2dcae1 GIT binary patch literal 554680 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

;N@xa$ZQENj-TjrE^_bcUD)9HWikv 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 B;1B=+ diff --git a/mods/ENTITIES/mobs_mc/models/mobs_mc_slime.b3d b/mods/ENTITIES/mobs_mc/models/mobs_mc_slime.b3d index 18cc3d6294d8911689a88435d94eb4d5cf94adb8..b426ee23da764a0c2e45caafa5105f7781b743eb 100644 GIT binary patch literal 6346 zcmeI0U5Hgx6vwwVm6n-~Q(9T6sacuLXdkBDd-OVEjyiYj&Zv#1`3VMtscA%D-5{z5 zLjyx7AJT`2-h2rm><)tXPzDj?!-Ty=rYJrY_0qI{d#`=(IoEZ22!a9+{O7;cI&1B{ z_PT4GbC^P5PW!0|&JAJBoWS)6S?o5;32t+ z-R&LwWRX&LcQ3Zog>xFUTLk?)#<|6NH*c$1y_60JyG4htj-I7IjSRc4F7@{8zd76? z<>7*(7n&>0mp(~8zR)ZiFU&jFitKIN3pSUCoT#7J267VWW3X{A*nDi#|K5gt&9>3> z%dSUGt$rP1*&mB@8|!QXl3%c;axro~ShZ;`vK}^{OC@Xb`+8fb0e<0ZwR2FHP=i{2 zp;mH^R4g{1pH)*|zgk@y)~YVQkh9iV&k=Ig8c6LM=W_9jVHG$3?PSEOGm~jYzR8_9 zb1e6Z+Gc;yRJCn=^Ylslunlf`-}`M>8?kBI_d_%Mdf28O8J)NMto5)F8}}f#k*z)# zD`#wRJ+3oTDE(M_W9Hm5UW?)zqqiwTG3TbvA1cE0^+>FLUwt?VP*b|8DQ9 zjXFnL|3#O?n(jDodI5b9ZT!AzTdWHI|ajjr0h zD*ced58L3DP2Mlsh)vs;{9egNTT3y?H}bRABR1|4V=Y^Ktd%pi7|YpM&$3a2m~-?a z=V;?>jdHPKt(rEfLH!<9e%9HnJ*-@MOPxLKyolw3crSC^AW*ZrN#q*^O#)uu=*YJS zg*!6?D)sv|cG#tP&c!i`fM`A)$df)>Ge)sgQO+$E3?6?c#7$oC2E z6-*S|uR8J+!DPWC!2<$x?4X7R(jQR~?y`IUg_!1oHCqI&wjc~YwmtcjUTXp1;;90>+L67Rls|BkBy@EBWBd-*s^uEoIm}+8012CvBP(uU!I?aon zMuur(c!Dxbj7~$tG&4L=nPx_(v0<7To}@fkd5SX4&3&2}rnzAn9j3`)ni;0aVHzH$ z+2NVWG&?$t57YE8%?;D^FarS7{4h-p)BG@l05b$I%?>jJFarTI3@}X(GYl|;0W%cv zLS=>moq>QE4wxZ;84j31ff*8*VSpJDn1O*A7MP)c85Wqqff*W@;eZ($m;r(r9+)A4 z86KEHf*B&1VSyPUn1O;BCYYgt877#)f*C4!c}HK*9%**^In017b0=KVf7$sd6T`hQ zCt2TD&b=)6soj$bB^lf5sS;YVKf6B>;Gy6^7Fq2u|*A9PX`i8m9`j&Q{ zHGRWuXMK;hoi}~M{AYc~76(n=@Qld%<~Dz4`iAF7*0+EE8PhjBYqGuaF^*Do{w4IwyS-nZ+M1gecu|t z%=8V<*{tvOmF=c)cot`U^J~|czTtVD^=&jmytvj%v+>^!|38&l(<3oRY1HoWACE&a zf&8C^|9D*1$%Poq-o0Iw*N>e_*6i(K4SD93^CEj2_kzv)CF)m^IR9)U2AlXvEH)pT zd_Hp7yqeAVwd?)3AJ+@nmh;$%W&dDve(jWveY`CdE4KQa2VyQ2%|+J3=5wjqhK4HM zPxke;Py_GhkZb2C6HBeUjr{%`dc%nIe&pxt7uLfT>QY~W>>iFis8uz;bj}*9=kT?< zW{>PSG#B}zK1A|z@q6pf|DX7xZuEt=tLYznp$%|CfBk>I(5}B>ul*vp{)P=Tx&DR? Kb@;d5uzvxzrA2T6 literal 4732 zcma)=$#axd6vdyKC_)efRGfnY5{DST0f%(QkZ90^U^;*^D4;|^lq9%qsgiXpSh!Lw z{S(|-l`lKXDsf@C@{iDkR=E;A=MJxLC++vqRj2yi@Auxh_YLV(_wew}k+}^iU6oQA zp4#8&$GgO*=Vy=i4-9Na-mJGvM*yUM@!C5%GP(l}jT18`j~zNSKQ}vb^cZ0}^7RB} zrgZ72@w#jLkN(H_OdV627;TLGb)z~Rn3`_%tW$UPa5ePZ?u)gwbmseCE`L^RyRzM&8_TxfXbx?vYd@ecrf|S!gaE>#s{+)R*#Ce zE=>J5XCC~?tv-2E=2!75|FAz^zes6)TYcL+Amd{R!v8{;+oPRIXTc2Js-}m;#K}(f4qL7_p6!f+x~fdBQqkTT)`w{vx zPXFd$8d|+;;fqwP`}VB#)%W?PVrw@)U%J5YzXAOG_D>i8{8>3zonw?Q2v6sli@jft z`usY_=>1pz!*D7Njwz=%<{MZ4&Yb-z@9a;$P@C#%)&gg5R=+3n;7?}t$uG+MDqiIu z_D5>#{_uRXzp%fuckDsWN9$MdGXE<%pWx567h1n{zG3~s^nAEK&654$`jiL%W$V-P z4?NUwoloceRe!E8aL$)K*87LEuehJQAEo=3nm7xU{q4&==4Y>chLdxx@|>To9H$)h zbuPI)H;$aI%rQQ5`WTo05oDb>$3V)$eAaQs`Wz$j+RB&6oEJ7f_m~p7_;YR*uksg< zP@jIw>&v<^hVRDP>X-2{e|kC39$1^#Cl`5btxqoXo!0}0pX?8Ys5jrieGE9)$5-aL zw)&Hc+@Cy4{e{y@Wd5uX{W;&c*Fc`UzH|5Hd^{s>^UrgY3&WTpj8*Zu3;hkIbQpDn z$-6Q0Cm)Dho?{H(@tm*B3-~xMT0HxA;7jN&bJp?s=1(sE!i)=3e|+||xcg@hem0vw z=T~v5;cM&QFCKx@Z+ZQ~INy!S`eZJ9DB)%P^m3j(^!(cPU+S{9)^9ss@o>gIbbk_k z#hdSZZe#ci>uclmbzUehtKW7$Qpe^?o#0O|=UxLj`hVFT!~7jo*v;x(2ex=~~3yP#1I^#GLVJ=z3@sw8nDAH$ZEl9tdBzC1;E;@d;nW z(|Ty5<&1BJZh|&Jw^+{jHt1GpGjzM2bRYD9 z<%}PM`k-ylLzXk#oLO2}B84p9xK||1Ph&kiup;2fAdcktWFG72uG3X`B8SjNApmAu@a>i58%g{ck zVL9Ui(0*tdI%qlL*PvISSD@D|XZ#lQCiDh$$a2Q-KyO2bp(7A;#_vM>#pWpVp5=_+ phi0JT&{?<#*=FHTTTiGrN;}S(w_jLteQ# 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 lJE$$?ptiJw+AmEge*xxa8(IJW literal 33648 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 dixA2E`Q79Tp8HK;j-B+@5y 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½dNt^gx@*18rsxv{^jRX7xau%>!+A541Tv(B||& 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 Q?_H^NP}^cA#pRm)ACock_5c6? diff --git a/mods/ENTITIES/mobs_mc/models/mobs_mc_zombie.b3d b/mods/ENTITIES/mobs_mc/models/mobs_mc_zombie.b3d index f357f68b52f596e166b11c623684ea57b0d78980..deacf31b6ba8ee6c4d5ab55729977c6d3b2330f7 100644 GIT binary patch literal 114629 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 STi=HEGaK3lHna_GX#Wp$A797- literal 38539 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 Ji01k2e*ka)4%`3$ diff --git a/mods/ENTITIES/mobs_mc/ocelot.lua b/mods/ENTITIES/mobs_mc/ocelot.lua index eca74d3ba..aea543895 100644 --- a/mods/ENTITIES/mobs_mc/ocelot.lua +++ b/mods/ENTITIES/mobs_mc/ocelot.lua @@ -3,7 +3,7 @@ --made for MC like Survival game --License for code WTFPL and otherwise stated in readmes -local S = minetest.get_translator("mobs_mc") +local S = minetest.get_translator(minetest.get_current_modname()) --################### --################### OCELOT AND CAT @@ -27,9 +27,12 @@ end -- Ocelot local ocelot = { + description = S("Ocelot"), type = "animal", spawn_class = "passive", can_despawn = true, + rotate = 270, + skittish = true, hp_min = 10, hp_max = 10, xp_min = 1, @@ -42,7 +45,7 @@ local ocelot = { makes_footstep_sound = true, walk_chance = default_walk_chance, walk_velocity = 1, - run_velocity = 3, + run_velocity = 10, follow_velocity = 1, floats = 1, runaway = true, @@ -56,7 +59,7 @@ local ocelot = { }, animation = { speed_normal = 25, - run_speed = 50, + run_speed = 150, stand_start = 0, stand_end = 0, walk_start = 0, @@ -102,6 +105,7 @@ mobs:register_mob("mobs_mc:ocelot", ocelot) -- Cat local cat = table.copy(ocelot) +cat.description = S("Cat") cat.textures = {{"mobs_mc_cat_black.png"}, {"mobs_mc_cat_red.png"}, {"mobs_mc_cat_siamese.png"}} cat.can_despawn = false cat.owner = "" @@ -121,8 +125,6 @@ cat.sounds = { } cat.on_rightclick = function(self, clicker) if mobs:feed_tame(self, clicker, 1, true, false) then return end - if mobs:capture_mob(self, clicker, 0, 60, 5, false, nil) then return end - if mobs:protect(self, clicker) then return end if self.child then return end @@ -149,9 +151,28 @@ end mobs:register_mob("mobs_mc:cat", cat) -local base_spawn_chance = 5000 +--local base_spawn_chance = 5000 -- Spawn ocelot +--they get the same as the llama because I'm trying to rework so much of this code right now -j4i +mobs:spawn_specific( +"mobs_mc:ocelot", +"overworld", +"ground", +{ +"Jungle", +"JungleEdgeM", +"JungleM", +"JungleEdge", +}, +0, +minetest.LIGHT_MAX+1, +30, +15000, +5, +mobs_mc.spawn_height.water+15, +mobs_mc.spawn_height.overworld_max) +--[[ mobs:spawn({ name = "mobs_mc:ocelot", nodes = mobs_mc.spawn.jungle, @@ -163,8 +184,8 @@ mobs:spawn({ min_height = mobs_mc.spawn_height.water+1, -- Right above ocean level max_height = mobs_mc.spawn_height.overworld_max, on_spawn = function(self, pos) - --[[ Note: Minecraft has a 1/3 spawn failure rate. - In this mod it is emulated by reducing the spawn rate accordingly (see above). ]] + Note: Minecraft has a 1/3 spawn failure rate. + In this mod it is emulated by reducing the spawn rate accordingly (see above). -- 1/7 chance to spawn 2 ocelot kittens if pr:next(1,7) == 1 then @@ -207,6 +228,7 @@ mobs:spawn({ end end, }) +]]-- -- spawn eggs -- FIXME: The spawn icon shows a cat texture, not an ocelot texture diff --git a/mods/ENTITIES/mobs_mc/parrot.lua b/mods/ENTITIES/mobs_mc/parrot.lua index 407cb4466..affcac496 100644 --- a/mods/ENTITIES/mobs_mc/parrot.lua +++ b/mods/ENTITIES/mobs_mc/parrot.lua @@ -3,7 +3,7 @@ --made for MC like Survival game --License for code WTFPL and otherwise stated in readmes -local S = minetest.get_translator("mobs_mc") +local S = minetest.get_translator(minetest.get_current_modname()) --################### --################### PARROT @@ -12,6 +12,7 @@ local S = minetest.get_translator("mobs_mc") mobs:register_mob("mobs_mc:parrot", { + description = S("Parrot"), type = "npc", spawn_class = "passive", pathfinding = 1, @@ -19,11 +20,14 @@ mobs:register_mob("mobs_mc:parrot", { hp_max = 6, xp_min = 1, xp_max = 3, - collisionbox = {-0.25, -0.01, -0.25, 0.25, 0.89, 0.25}, + tilt_fly = true, + collisionbox = {-0.25, 0, -0.25, 0.25, 0.9, 0.25}, + eye_height = 0.45, visual = "mesh", mesh = "mobs_mc_parrot.b3d", textures = {{"mobs_mc_parrot_blue.png"},{"mobs_mc_parrot_green.png"},{"mobs_mc_parrot_grey.png"},{"mobs_mc_parrot_red_blue.png"},{"mobs_mc_parrot_yellow_blue.png"}}, visual_size = {x=3, y=3}, + rotate = 270, walk_velocity = 3, run_velocity = 5, sounds = { @@ -40,7 +44,7 @@ mobs:register_mob("mobs_mc:parrot", { max = 2, looting = "common",}, }, - animation = { + animation = { stand_speed = 50, walk_speed = 50, fly_speed = 50, @@ -84,14 +88,28 @@ mobs:register_mob("mobs_mc:parrot", { -- Feed to tame, but not breed if mobs:feed_tame(self, clicker, 1, false, true) then return end - if mobs:protect(self, clicker) then return end - if mobs:capture_mob(self, clicker, 0, 50, 80, false, nil) then return end end, }) --- Parrots spawn rarely in jungles. TODO: Also check for jungle *biome* -mobs:spawn_specific("mobs_mc:parrot", {"mcl_core:jungletree", "mcl_core:jungleleaves"}, {"air"}, 0, minetest.LIGHT_MAX+1, 7, 30000, 1, mobs_mc.spawn_height.water+7, mobs_mc.spawn_height.overworld_max) +-- Parrots spawn rarely in jungles. TODO: Also check for jungle *biome* <- I'll get to this eventually -j4i +mobs:spawn_specific( +"mobs_mc:parrot", +"overworld", +"ground", +{ +"Jungle", +"JungleEdgeM", +"JungleM", +"JungleEdge", +}, +0, +minetest.LIGHT_MAX+1, +7, +30000, +1, +mobs_mc.spawn_height.water+7, +mobs_mc.spawn_height.overworld_max) -- spawn eggs mobs:register_egg("mobs_mc:parrot", S("Parrot"), "mobs_mc_spawn_icon_parrot.png", 0) diff --git a/mods/ENTITIES/mobs_mc/pig.lua b/mods/ENTITIES/mobs_mc/pig.lua index 38700b6ca..84ff996f2 100644 --- a/mods/ENTITIES/mobs_mc/pig.lua +++ b/mods/ENTITIES/mobs_mc/pig.lua @@ -1,11 +1,13 @@ --License for code WTFPL and otherwise stated in readmes -local S = minetest.get_translator("mobs_mc") +local S = minetest.get_translator(minetest.get_current_modname()) mobs:register_mob("mobs_mc:pig", { + description = S("Pig"), type = "animal", spawn_class = "passive", - runaway = true, + skittish = true, + rotate = 270, hp_min = 10, hp_max = 10, xp_min = 1, @@ -18,11 +20,30 @@ mobs:register_mob("mobs_mc:pig", { "mobs_mc_pig.png", -- base "blank.png", -- saddle }}, + + --head code + has_head = true, + head_bone = "head", + + swap_y_with_x = false, + reverse_head_yaw = false, + + head_bone_pos_y = 2.4, + head_bone_pos_z = 0, + + head_height_offset = 1.1, + head_direction_offset = 0, + head_pitch_modifier = 0, + --end head code + visual_size = {x=2.5, y=2.5}, makes_footstep_sound = true, walk_velocity = 1, run_velocity = 3, follow_velocity = 3.4, + breed_distance = 1.5, + baby_size = 0.5, + follow_distance = 2, drops = { {name = mobs_mc.items.porkchop_raw, chance = 1, @@ -49,7 +70,7 @@ mobs:register_mob("mobs_mc:pig", { run_start = 0, run_end = 40, }, - follow = mobs_mc.follow.pig, + follow = "mcl_farming:carrot_item", view_range = 8, do_custom = function(self, dtime) @@ -90,12 +111,17 @@ mobs:register_mob("mobs_mc:pig", { return end - local wielditem = clicker:get_wielded_item() - -- Feed pig - if wielditem:get_name() ~= mobs_mc.items.carrot_on_a_stick then - if mobs:feed_tame(self, clicker, 1, true, true) then return end + --attempt to enter breed state + if mobs.enter_breed_state(self,clicker) then + return + end + + --ignore other logic + --make baby grow faster + if self.baby then + mobs.make_baby_grow_faster(self,clicker) + return end - if mobs:protect(self, clicker) then return end if self.child then return @@ -103,6 +129,8 @@ mobs:register_mob("mobs_mc:pig", { -- Put saddle on pig local item = clicker:get_wielded_item() + local wielditem = item + if item:get_name() == mobs_mc.items.saddle and self.saddle ~= "yes" then self.base_texture = { "blank.png", -- baby @@ -135,7 +163,7 @@ mobs:register_mob("mobs_mc:pig", { end -- Mount or detach player - local name = clicker:get_player_name() + --local name = clicker:get_player_name() if self.driver and clicker == self.driver then -- Detach if already attached mobs.detach(clicker, {x=1, y=0, z=0}) @@ -163,10 +191,6 @@ mobs:register_mob("mobs_mc:pig", { inv:set_stack("main",self.driver:get_wield_index(), wielditem) end return - - -- Capture pig - elseif not self.driver and clicker:get_wielded_item():get_name() ~= "" then - mobs:capture_mob(self, clicker, 0, 5, 60, false, nil) end end, @@ -182,7 +206,66 @@ mobs:register_mob("mobs_mc:pig", { end, }) -mobs:spawn_specific("mobs_mc:pig", mobs_mc.spawn.grassland, {"air"}, 9, minetest.LIGHT_MAX+1, 30, 15000, 8, mobs_mc.spawn_height.overworld_min, mobs_mc.spawn_height.overworld_max) +mobs:spawn_specific( +"mobs_mc:pig", +"overworld", +"ground", +{ + "FlowerForest_beach", + "Forest_beach", + "StoneBeach", + "ColdTaiga_beach_water", + "Taiga_beach", + "Savanna_beach", + "Plains_beach", + "ExtremeHills_beach", + "ColdTaiga_beach", + "Swampland_shore", + "JungleM_shore", + "Jungle_shore", + "MesaPlateauFM_sandlevel", + "MesaPlateauF_sandlevel", + "MesaBryce_sandlevel", + "Mesa_sandlevel", + "Mesa", + "FlowerForest", + "Swampland", + "Taiga", + "ExtremeHills", + "Jungle", + "Savanna", + "BirchForest", + "MegaSpruceTaiga", + "MegaTaiga", + "ExtremeHills+", + "Forest", + "Plains", + "Desert", + "ColdTaiga", + "IcePlainsSpikes", + "SunflowerPlains", + "IcePlains", + "RoofedForest", + "ExtremeHills+_snowtop", + "MesaPlateauFM_grasstop", + "JungleEdgeM", + "ExtremeHillsM", + "JungleM", + "BirchForestM", + "MesaPlateauF", + "MesaPlateauFM", + "MesaPlateauF_grasstop", + "MesaBryce", + "JungleEdge", + "SavannaM", +}, +9, +minetest.LIGHT_MAX+1, +30, +15000, +8, +mobs_mc.spawn_height.overworld_min, +mobs_mc.spawn_height.overworld_max) -- spawn eggs mobs:register_egg("mobs_mc:pig", S("Pig"), "mobs_mc_spawn_icon_pig.png", 0) diff --git a/mods/ENTITIES/mobs_mc/polar_bear.lua b/mods/ENTITIES/mobs_mc/polar_bear.lua index 459ca29b4..0f5296d35 100644 --- a/mods/ENTITIES/mobs_mc/polar_bear.lua +++ b/mods/ENTITIES/mobs_mc/polar_bear.lua @@ -1,6 +1,6 @@ --License for code WTFPL and otherwise stated in readmes -local S = minetest.get_translator("mobs_mc") +local S = minetest.get_translator(minetest.get_current_modname()) --################### --################### POLARBEAR @@ -8,6 +8,7 @@ local S = minetest.get_translator("mobs_mc") mobs:register_mob("mobs_mc:polar_bear", { + description = S("Polar Bear"), type = "animal", spawn_class = "passive", runaway = false, @@ -30,14 +31,14 @@ mobs:register_mob("mobs_mc:polar_bear", { walk_velocity = 1.2, run_velocity = 2.4, group_attack = true, - attack_type = "dogfight", + attack_type = "punch", drops = { -- 3/4 chance to drop raw fish (poor approximation) {name = mobs_mc.items.fish_raw, chance = 2, min = 0, max = 2, - looting = "common",}, + looting = "common",}, -- 1/4 to drop raw salmon {name = mobs_mc.items.salmon_raw, chance = 4, @@ -67,7 +68,23 @@ mobs:register_mob("mobs_mc:polar_bear", { }) -mobs:spawn_specific("mobs_mc:polar_bear", mobs_mc.spawn.snow, {"air"}, 0, minetest.LIGHT_MAX+1, 30, 7000, 3, mobs_mc.spawn_height.overworld_min, mobs_mc.spawn_height.overworld_max) +mobs:spawn_specific( +"mobs_mc:polar_bear", +"overworld", +"ground", +{ +"ColdTaiga", +"IcePlainsSpikes", +"IcePlains", +"ExtremeHills+_snowtop", +}, +0, +minetest.LIGHT_MAX+1, +30, +7000, +3, +mobs_mc.spawn_height.overworld_min, +mobs_mc.spawn_height.overworld_max) -- spawn egg mobs:register_egg("mobs_mc:polar_bear", S("Polar Bear"), "mobs_mc_spawn_icon_polarbear.png", 0) diff --git a/mods/ENTITIES/mobs_mc/rabbit.lua b/mods/ENTITIES/mobs_mc/rabbit.lua index e167649f6..51235a3f9 100644 --- a/mods/ENTITIES/mobs_mc/rabbit.lua +++ b/mods/ENTITIES/mobs_mc/rabbit.lua @@ -1,13 +1,14 @@ --License for code WTFPL and otherwise stated in readmes -local S = minetest.get_translator("mobs_mc") +local S = minetest.get_translator(minetest.get_current_modname()) local rabbit = { + description = S("Rabbit"), type = "animal", spawn_class = "passive", passive = true, reach = 1, - + rotate = 270, hp_min = 3, hp_max = 3, xp_min = 1, @@ -61,8 +62,6 @@ local rabbit = { on_rightclick = function(self, clicker) -- Feed, tame protect or capture if mobs:feed_tame(self, clicker, 1, true, true) then return end - if mobs:protect(self, clicker) then return end - if mobs:capture_mob(self, clicker, 0, 50, 80, false, nil) then return end end, do_custom = function(self) -- Easter egg: Change texture if rabbit is named “Toast” @@ -83,6 +82,7 @@ mobs:register_mob("mobs_mc:rabbit", rabbit) -- The killer bunny (Only with spawn egg) local killer_bunny = table.copy(rabbit) +killer_bunny.description = S("Killer Bunny") killer_bunny.type = "monster" killer_bunny.spawn_class = "hostile" killer_bunny.attack_type = "dogfight" @@ -99,7 +99,7 @@ killer_bunny.on_rightclick = nil killer_bunny.run_velocity = 6 killer_bunny.do_custom = function(self) if not self._killer_bunny_nametag_set then - self.nametag = "The Killer Bunny" + self.nametag = S("The Killer Bunny") self._killer_bunny_nametag_set = true end end @@ -107,8 +107,70 @@ end mobs:register_mob("mobs_mc:killer_bunny", killer_bunny) -- Mob spawning rules. --- Different skins depending on spawn location +-- Different skins depending on spawn location <- we'll get to this when the spawning algorithm is fleshed out +mobs:spawn_specific( +"mobs_mc:rabbit", +"overworld", +"ground", +{ + "FlowerForest_beach", + "Forest_beach", + "StoneBeach", + "ColdTaiga_beach_water", + "Taiga_beach", + "Savanna_beach", + "Plains_beach", + "ExtremeHills_beach", + "ColdTaiga_beach", + "Swampland_shore", + "JungleM_shore", + "Jungle_shore", + "MesaPlateauFM_sandlevel", + "MesaPlateauF_sandlevel", + "MesaBryce_sandlevel", + "Mesa_sandlevel", + "Mesa", + "FlowerForest", + "Swampland", + "Taiga", + "ExtremeHills", + "Jungle", + "Savanna", + "BirchForest", + "MegaSpruceTaiga", + "MegaTaiga", + "ExtremeHills+", + "Forest", + "Plains", + "Desert", + "ColdTaiga", + "IcePlainsSpikes", + "SunflowerPlains", + "IcePlains", + "RoofedForest", + "ExtremeHills+_snowtop", + "MesaPlateauFM_grasstop", + "JungleEdgeM", + "ExtremeHillsM", + "JungleM", + "BirchForestM", + "MesaPlateauF", + "MesaPlateauFM", + "MesaPlateauF_grasstop", + "MesaBryce", + "JungleEdge", + "SavannaM", +}, +9, +minetest.LIGHT_MAX+1, +30, +15000, +8, +mobs_mc.spawn_height.overworld_min, +mobs_mc.spawn_height.overworld_max) + +--[[ local spawn = { name = "mobs_mc:rabbit", neighbors = {"air"}, @@ -165,9 +227,10 @@ spawn_grass.on_spawn = function(self, pos) self.object:set_properties({textures = self.base_texture}) end mobs:spawn(spawn_grass) +]]-- -- Spawn egg mobs:register_egg("mobs_mc:rabbit", S("Rabbit"), "mobs_mc_spawn_icon_rabbit.png", 0) -- Note: This spawn egg does not exist in Minecraft -mobs:register_egg("mobs_mc:killer_bunny", S("Killer Bunny"), "mobs_mc_spawn_icon_rabbit.png^[colorize:#FF0000:192", 0) -- TODO: Update inventory image +mobs:register_egg("mobs_mc:killer_bunny", S("Killer Bunny"), "mobs_mc_spawn_icon_rabbit_caerbannog.png", 0) diff --git a/mods/ENTITIES/mobs_mc/sheep.lua b/mods/ENTITIES/mobs_mc/sheep.lua index 681c68e1b..76f933a6b 100644 --- a/mods/ENTITIES/mobs_mc/sheep.lua +++ b/mods/ENTITIES/mobs_mc/sheep.lua @@ -1,6 +1,6 @@ --License for code WTFPL and otherwise stated in readmes -local S = minetest.get_translator("mobs_mc") +local S = minetest.get_translator(minetest.get_current_modname()) --################### --################### SHEEP @@ -25,7 +25,20 @@ local colors = { unicolor_black = { mobs_mc.items.wool_black, "#000000D0" }, } -if minetest.get_modpath("mcl_wool") ~= nil then +local rainbow_colors = { + "unicolor_light_red", + "unicolor_red", + "unicolor_orange", + "unicolor_yellow", + "unicolor_green", + "unicolor_dark_green", + "unicolor_light_blue", + "unicolor_blue", + "unicolor_violet", + "unicolor_red_violet" +} + +if minetest.get_modpath("mcl_wool") then colors["unicolor_light_blue"] = { mobs_mc.items.wool_light_blue, "#5050FFD0" } end @@ -43,14 +56,20 @@ local gotten_texture = { "blank.png", "mobs_mc_sheep.png" } --mcsheep mobs:register_mob("mobs_mc:sheep", { + description = S("Sheep"), type = "animal", spawn_class = "passive", hp_min = 8, hp_max = 8, xp_min = 1, xp_max = 3, + skittish = true, + breed_distance = 1.5, + baby_size = 0.5, + follow_distance = 2, + follow = mobs_mc.items.wheat, collisionbox = {-0.45, -0.01, -0.45, 0.45, 1.29, 0.45}, - + rotate = 270, visual = "mesh", visual_size = {x=3, y=3}, mesh = "mobs_mc_sheepfur.b3d", @@ -59,6 +78,23 @@ mobs:register_mob("mobs_mc:sheep", { color = "unicolor_white", makes_footstep_sound = true, walk_velocity = 1, + run_velocity = 3, + + --head code + has_head = true, + head_bone = "head", + + swap_y_with_x = false, + reverse_head_yaw = false, + + head_bone_pos_y = 3.6, + head_bone_pos_z = -0.6, + + head_height_offset = 1.0525, + head_direction_offset = 0.5, + head_pitch_modifier = 0, + --end head code + drops = { {name = mobs_mc.items.mutton_raw, chance = 1, @@ -85,7 +121,6 @@ mobs:register_mob("mobs_mc:sheep", { walk_start = 0, walk_end = 40, run_start = 0, run_end = 40, }, - follow = mobs_mc.follow.sheep, view_range = 12, -- Eat grass @@ -112,10 +147,9 @@ mobs:register_mob("mobs_mc:sheep", { end, -- Set random color on spawn - do_custom = function(self) + do_custom = function(self, dtime) if not self.initial_color_set then local r = math.random(0,100000) - local textures if r <= 81836 then -- 81.836% self.color = "unicolor_white" @@ -149,13 +183,48 @@ mobs:register_mob("mobs_mc:sheep", { } self.initial_color_set = true end + + local is_kay27 = self.nametag == "kay27" + + if self.color_change_timer then + local old_color = self.color + if is_kay27 then + self.color_change_timer = self.color_change_timer - dtime + if self.color_change_timer < 0 then + self.color_change_timer = 0.5 + self.color_index = (self.color_index + 1) % #rainbow_colors + self.color = rainbow_colors[self.color_index + 1] + end + else + self.color_change_timer = nil + self.color_index = nil + self.color = self.initial_color + end + + if old_color ~= self.color then + self.base_texture = sheep_texture(self.color) + self.object:set_properties({textures = self.base_texture}) + end + elseif is_kay27 then + self.initial_color = self.color + self.color_change_timer = 0 + self.color_index = -1 + end end, - + on_rightclick = function(self, clicker) local item = clicker:get_wielded_item() - if mobs:feed_tame(self, clicker, 1, true, true) then return end - if mobs:protect(self, clicker) then return end + --attempt to enter breed state + if mobs.enter_breed_state(self,clicker) then + return + end + + --make baby grow faster + if self.baby then + mobs.make_baby_grow_faster(self,clicker) + return + end if item:get_name() == mobs_mc.items.shears and not self.gotten and not self.child then self.gotten = true @@ -211,7 +280,6 @@ mobs:register_mob("mobs_mc:sheep", { end return end - if mobs:capture_mob(self, clicker, 0, 5, 70, false, nil) then return end end, on_breed = function(parent1, parent2) -- Breed sheep and choose a fur color for the child. @@ -263,7 +331,67 @@ mobs:register_mob("mobs_mc:sheep", { end end, }) -mobs:spawn_specific("mobs_mc:sheep", mobs_mc.spawn.grassland, {"air"}, 0, minetest.LIGHT_MAX+1, 30, 15000, 3, mobs_mc.spawn_height.overworld_min, mobs_mc.spawn_height.overworld_max) +mobs:spawn_specific( +"mobs_mc:sheep", +"overworld", +"ground", +{ + "FlowerForest_beach", + "Forest_beach", + "StoneBeach", + "ColdTaiga_beach_water", + "Taiga_beach", + "Savanna_beach", + "Plains_beach", + "ExtremeHills_beach", + "ColdTaiga_beach", + "Swampland_shore", + "JungleM_shore", + "Jungle_shore", + "MesaPlateauFM_sandlevel", + "MesaPlateauF_sandlevel", + "MesaBryce_sandlevel", + "Mesa_sandlevel", + "Mesa", + "FlowerForest", + "Swampland", + "Taiga", + "ExtremeHills", + "Jungle", + "Savanna", + "BirchForest", + "MegaSpruceTaiga", + "MegaTaiga", + "ExtremeHills+", + "Forest", + "Plains", + "Desert", + "ColdTaiga", + "IcePlainsSpikes", + "SunflowerPlains", + "IcePlains", + "RoofedForest", + "ExtremeHills+_snowtop", + "MesaPlateauFM_grasstop", + "JungleEdgeM", + "ExtremeHillsM", + "JungleM", + "BirchForestM", + "MesaPlateauF", + "MesaPlateauFM", + "MesaPlateauF_grasstop", + "MesaBryce", + "JungleEdge", + "SavannaM", +}, +0, +minetest.LIGHT_MAX+1, +30, +15000, +3, +mobs_mc.spawn_height.overworld_min, +mobs_mc.spawn_height.overworld_max) -- spawn eggs mobs:register_egg("mobs_mc:sheep", S("Sheep"), "mobs_mc_spawn_icon_sheep.png", 0) + diff --git a/mods/ENTITIES/mobs_mc/shulker.lua b/mods/ENTITIES/mobs_mc/shulker.lua index faaf2ac40..1a5c4ec84 100644 --- a/mods/ENTITIES/mobs_mc/shulker.lua +++ b/mods/ENTITIES/mobs_mc/shulker.lua @@ -3,18 +3,19 @@ --made for MC like Survival game --License for code WTFPL and otherwise stated in readmes -local S = minetest.get_translator("mobs_mc") +local S = minetest.get_translator(minetest.get_current_modname()) --################### --################### SHULKER --################### -- animation 45-80 is transition between passive and attack stance - + mobs:register_mob("mobs_mc:shulker", { + description = S("Shulker"), type = "monster", spawn_class = "hostile", - attack_type = "shoot", + attack_type = "projectile", shoot_interval = 0.5, arrow = "mobs_mc:shulkerbullet", shoot_offset = 0.5, @@ -81,4 +82,17 @@ mobs:register_arrow("mobs_mc:shulkerbullet", { mobs:register_egg("mobs_mc:shulker", S("Shulker"), "mobs_mc_spawn_icon_shulker.png", 0) -mobs:spawn_specific("mobs_mc:shulker", mobs_mc.spawn.end_city, {"air"}, 0, minetest.LIGHT_MAX+1, 30, 5000, 2, mobs_mc.spawn_height.end_min, mobs_mc.spawn_height.end_max) +mobs:spawn_specific( +"mobs_mc:shulker", +"end", +"ground", +{ +"End" +}, +0, +minetest.LIGHT_MAX+1, +30, +5000, +2, +mobs_mc.spawn_height.end_min, +mobs_mc.spawn_height.end_max) diff --git a/mods/ENTITIES/mobs_mc/silverfish.lua b/mods/ENTITIES/mobs_mc/silverfish.lua index 433211503..ac3991ad1 100644 --- a/mods/ENTITIES/mobs_mc/silverfish.lua +++ b/mods/ENTITIES/mobs_mc/silverfish.lua @@ -2,9 +2,10 @@ --################### SILVERFISH --################### -local S = minetest.get_translator("mobs_mc") +local S = minetest.get_translator(minetest.get_current_modname()) mobs:register_mob("mobs_mc:silverfish", { + description = S("Silverfish"), type = "monster", spawn_class = "hostile", passive = false, @@ -43,9 +44,8 @@ mobs:register_mob("mobs_mc:silverfish", { run_start = 0, run_end = 20, }, view_range = 16, - attack_type = "dogfight", + attack_type = "punch", damage = 1, - reach = 1, }) mobs:register_egg("mobs_mc:silverfish", S("Silverfish"), "mobs_mc_spawn_icon_silverfish.png", 0) @@ -61,7 +61,7 @@ if minetest.get_modpath("default") and mobs_mc.create_monster_egg_nodes then description = "Stone Monster Egg", tiles = {"default_stone.png"}, groups = {oddly_breakable_by_hand = 2, spawns_silverfish = 1}, - drop = '', + drop = "", is_ground_content = true, sounds = default.node_sound_stone_defaults(), after_dig_node = spawn_silverfish, @@ -72,7 +72,7 @@ if minetest.get_modpath("default") and mobs_mc.create_monster_egg_nodes then tiles = {"default_cobble.png"}, is_ground_content = false, groups = {oddly_breakable_by_hand = 2, spawns_silverfish = 1}, - drop = '', + drop = "", sounds = default.node_sound_stone_defaults(), after_dig_node = spawn_silverfish, }) @@ -82,7 +82,7 @@ if minetest.get_modpath("default") and mobs_mc.create_monster_egg_nodes then tiles = {"default_mossycobble.png"}, is_ground_content = false, groups = {oddly_breakable_by_hand = 2, spawns_silverfish = 1}, - drop = '', + drop = "", sounds = default.node_sound_stone_defaults(), after_dig_node = spawn_silverfish, }) @@ -94,7 +94,7 @@ if minetest.get_modpath("default") and mobs_mc.create_monster_egg_nodes then tiles = {"default_stone_brick.png"}, is_ground_content = false, groups = {oddly_breakable_by_hand = 2, spawns_silverfish = 1}, - drop = '', + drop = "", sounds = default.node_sound_stone_defaults(), after_dig_node = spawn_silverfish, }) @@ -104,7 +104,7 @@ if minetest.get_modpath("default") and mobs_mc.create_monster_egg_nodes then tiles = {"default_stone_block.png"}, is_ground_content = false, groups = {oddly_breakable_by_hand = 2, spawns_silverfish = 1}, - drop = '', + drop = "", sounds = default.node_sound_stone_defaults(), after_dig_node = spawn_silverfish, }) diff --git a/mods/ENTITIES/mobs_mc/skeleton+stray.lua b/mods/ENTITIES/mobs_mc/skeleton+stray.lua index cb12e905d..f0e728e08 100644 --- a/mods/ENTITIES/mobs_mc/skeleton+stray.lua +++ b/mods/ENTITIES/mobs_mc/skeleton+stray.lua @@ -3,8 +3,8 @@ --made for MC like Survival game --License for code WTFPL and otherwise stated in readmes -local S = minetest.get_translator("mobs_mc") -local mod_bows = minetest.get_modpath("mcl_bows") ~= nil +local S = minetest.get_translator(minetest.get_current_modname()) +local mod_bows = minetest.get_modpath("mcl_bows") --################### --################### SKELETON @@ -13,35 +13,53 @@ local mod_bows = minetest.get_modpath("mcl_bows") ~= nil local skeleton = { + description = S("Skeleton"), type = "monster", spawn_class = "hostile", + hostile = true, + rotate = 270, hp_min = 20, hp_max = 20, xp_min = 6, xp_max = 6, breath_max = -1, + eye_height = 1.5, + projectile_cooldown = 1.5, armor = {undead = 100, fleshy = 100}, collisionbox = {-0.3, -0.01, -0.3, 0.3, 1.98, 0.3}, pathfinding = 1, group_attack = true, visual = "mesh", mesh = "mobs_mc_skeleton.b3d", - textures = { { - "mcl_bows_bow_0.png", -- bow - "mobs_mc_skeleton.png", -- skeleton - } }, - visual_size = {x=3, y=3}, + + --head code + has_head = false, + head_bone = "head", + + swap_y_with_x = true, + reverse_head_yaw = true, + + head_bone_pos_y = 2.4, + head_bone_pos_z = 0, + + head_height_offset = 1.1, + head_direction_offset = 0, + head_pitch_modifier = 0, + --end head code + + visual_size = {x=1, y=1}, makes_footstep_sound = true, - sounds = { - random = "mobs_mc_skeleton_random", - death = "mobs_mc_skeleton_death", - damage = "mobs_mc_skeleton_hurt", - distance = 16, + textures = { + { + "mobs_mc_empty.png", -- armor + "mobs_mc_skeleton.png", -- texture + "mcl_bows_bow_0.png", -- wielded_item + } }, walk_velocity = 1.2, run_velocity = 2.4, damage = 2, - reach = 2, + reach = 3, drops = { {name = mobs_mc.items.arrow, chance = 1, @@ -73,6 +91,8 @@ local skeleton = { walk_speed = 15, walk_start = 40, walk_end = 60, + run_start = 40, + run_end = 60, run_speed = 30, shoot_start = 70, shoot_end = 90, @@ -84,13 +104,13 @@ local skeleton = { ignited_by_sunlight = true, view_range = 16, fear_height = 4, - attack_type = "dogshoot", + attack_type = "projectile", arrow = "mcl_bows:arrow_entity", shoot_arrow = function(self, pos, dir) if mod_bows then -- 2-4 damage per arrow - local dmg = math.max(4, math.random(2, 8)) - mcl_bows.shoot_arrow("mcl_bows:arrow", pos, dir, self.object:get_yaw(), self.object, nil, dmg) + local dmg = math.random(2,4) + mobs.shoot_projectile_handling("mcl_bows:arrow", pos, dir, self.object:get_yaw(), self.object, nil, dmg) end end, shoot_interval = 2, @@ -108,12 +128,13 @@ mobs:register_mob("mobs_mc:skeleton", skeleton) --################### local stray = table.copy(skeleton) -stray.mesh = "mobs_mc_stray.b3d" +stray.description = S("Stray") +stray.mesh = "mobs_mc_skeleton.b3d" stray.textures = { { - "mcl_bows_bow_0.png", - "mobs_mc_stray.png", "mobs_mc_stray_overlay.png", + "mobs_mc_stray.png", + "mcl_bows_bow_0.png", }, } -- TODO: different sound (w/ echo) @@ -139,13 +160,195 @@ table.insert(stray.drops, { mobs:register_mob("mobs_mc:stray", stray) -- Overworld spawn -mobs:spawn_specific("mobs_mc:skeleton", mobs_mc.spawn.solid, {"air"}, 0, 7, 20, 17000, 2, mobs_mc.spawn_height.overworld_min, mobs_mc.spawn_height.overworld_max) +mobs:spawn_specific( +"mobs_mc:skeleton", +"overworld", +"ground", +{ +"Mesa", +"FlowerForest", +"Swampland", +"Taiga", +"ExtremeHills", +"Jungle", +"Savanna", +"BirchForest", +"MegaSpruceTaiga", +"MegaTaiga", +"ExtremeHills+", +"Forest", +"Plains", +"Desert", +"ColdTaiga", +"MushroomIsland", +"IcePlainsSpikes", +"SunflowerPlains", +"IcePlains", +"RoofedForest", +"ExtremeHills+_snowtop", +"MesaPlateauFM_grasstop", +"JungleEdgeM", +"ExtremeHillsM", +"JungleM", +"BirchForestM", +"MesaPlateauF", +"MesaPlateauFM", +"MesaPlateauF_grasstop", +"MesaBryce", +"JungleEdge", +"SavannaM", +"FlowerForest_beach", +"Forest_beach", +"StoneBeach", +"ColdTaiga_beach_water", +"Taiga_beach", +"Savanna_beach", +"Plains_beach", +"ExtremeHills_beach", +"ColdTaiga_beach", +"Swampland_shore", +"MushroomIslandShore", +"JungleM_shore", +"Jungle_shore", +"MesaPlateauFM_sandlevel", +"MesaPlateauF_sandlevel", +"MesaBryce_sandlevel", +"Mesa_sandlevel", +"RoofedForest_ocean", +"JungleEdgeM_ocean", +"BirchForestM_ocean", +"BirchForest_ocean", +"IcePlains_deep_ocean", +"Jungle_deep_ocean", +"Savanna_ocean", +"MesaPlateauF_ocean", +"ExtremeHillsM_deep_ocean", +"Savanna_deep_ocean", +"SunflowerPlains_ocean", +"Swampland_deep_ocean", +"Swampland_ocean", +"MegaSpruceTaiga_deep_ocean", +"ExtremeHillsM_ocean", +"JungleEdgeM_deep_ocean", +"SunflowerPlains_deep_ocean", +"BirchForest_deep_ocean", +"IcePlainsSpikes_ocean", +"Mesa_ocean", +"StoneBeach_ocean", +"Plains_deep_ocean", +"JungleEdge_deep_ocean", +"SavannaM_deep_ocean", +"Desert_deep_ocean", +"Mesa_deep_ocean", +"ColdTaiga_deep_ocean", +"Plains_ocean", +"MesaPlateauFM_ocean", +"Forest_deep_ocean", +"JungleM_deep_ocean", +"FlowerForest_deep_ocean", +"MushroomIsland_ocean", +"MegaTaiga_ocean", +"StoneBeach_deep_ocean", +"IcePlainsSpikes_deep_ocean", +"ColdTaiga_ocean", +"SavannaM_ocean", +"MesaPlateauF_deep_ocean", +"MesaBryce_deep_ocean", +"ExtremeHills+_deep_ocean", +"ExtremeHills_ocean", +"MushroomIsland_deep_ocean", +"Forest_ocean", +"MegaTaiga_deep_ocean", +"JungleEdge_ocean", +"MesaBryce_ocean", +"MegaSpruceTaiga_ocean", +"ExtremeHills+_ocean", +"Jungle_ocean", +"RoofedForest_deep_ocean", +"IcePlains_ocean", +"FlowerForest_ocean", +"ExtremeHills_deep_ocean", +"MesaPlateauFM_deep_ocean", +"Desert_ocean", +"Taiga_ocean", +"BirchForestM_deep_ocean", +"Taiga_deep_ocean", +"JungleM_ocean", +"FlowerForest_underground", +"JungleEdge_underground", +"StoneBeach_underground", +"MesaBryce_underground", +"Mesa_underground", +"RoofedForest_underground", +"Jungle_underground", +"Swampland_underground", +"MushroomIsland_underground", +"BirchForest_underground", +"Plains_underground", +"MesaPlateauF_underground", +"ExtremeHills_underground", +"MegaSpruceTaiga_underground", +"BirchForestM_underground", +"SavannaM_underground", +"MesaPlateauFM_underground", +"Desert_underground", +"Savanna_underground", +"Forest_underground", +"SunflowerPlains_underground", +"ColdTaiga_underground", +"IcePlains_underground", +"IcePlainsSpikes_underground", +"MegaTaiga_underground", +"Taiga_underground", +"ExtremeHills+_underground", +"JungleM_underground", +"ExtremeHillsM_underground", +"JungleEdgeM_underground", +}, +0, +7, +20, +17000, +2, +mobs_mc.spawn_height.overworld_min, +mobs_mc.spawn_height.overworld_max) + + -- Nether spawn -mobs:spawn_specific("mobs_mc:skeleton", mobs_mc.spawn.nether_fortress, {"air"}, 0, 7, 30, 10000, 3, mobs_mc.spawn_height.nether_min, mobs_mc.spawn_height.nether_max) +mobs:spawn_specific( +"mobs_mc:skeleton", +"nether", +"ground", +{ +"Nether" +}, +0, +7, +30, +10000, +3, +mobs_mc.spawn_height.nether_min, +mobs_mc.spawn_height.nether_max) -- Stray spawn -- TODO: Spawn directly under the sky -mobs:spawn_specific("mobs_mc:stray", mobs_mc.spawn.snow, {"air"}, 0, 7, 20, 19000, 2, mobs_mc.spawn_height.water, mobs_mc.spawn_height.overworld_max) +mobs:spawn_specific( +"mobs_mc:stray", +"overworld", +"ground", +{ +"ColdTaiga", +"IcePlainsSpikes", +"IcePlains", +"ExtremeHills+_snowtop", +}, +0, +7, +20, +19000, +2, +mobs_mc.spawn_height.water, +mobs_mc.spawn_height.overworld_max) -- spawn eggs diff --git a/mods/ENTITIES/mobs_mc/skeleton_wither.lua b/mods/ENTITIES/mobs_mc/skeleton_wither.lua index e4a1f86fc..a6b48d428 100644 --- a/mods/ENTITIES/mobs_mc/skeleton_wither.lua +++ b/mods/ENTITIES/mobs_mc/skeleton_wither.lua @@ -3,13 +3,14 @@ --made for MC like Survival game --License for code WTFPL and otherwise stated in readmes -local S = minetest.get_translator("mobs_mc") +local S = minetest.get_translator(minetest.get_current_modname()) --################### --################### WITHER SKELETON --################### mobs:register_mob("mobs_mc:witherskeleton", { + description = S("Wither Skeleton"), type = "monster", spawn_class = "hostile", hp_min = 20, @@ -25,11 +26,12 @@ mobs:register_mob("mobs_mc:witherskeleton", { mesh = "mobs_mc_witherskeleton.b3d", textures = { { - "default_tool_stonesword.png", -- sword + "mobs_mc_empty.png", -- armor "mobs_mc_wither_skeleton.png", -- wither skeleton + "default_tool_stonesword.png", -- sword } }, - visual_size = {x=3.6, y=3.6}, + visual_size = {x=1.2, y=1.2}, makes_footstep_sound = true, sounds = { random = "mobs_mc_skeleton_random", @@ -85,7 +87,7 @@ mobs:register_mob("mobs_mc:witherskeleton", { fire_damage = 0, light_damage = 0, view_range = 16, - attack_type = "dogfight", + attack_type = "punch", dogshoot_switch = 1, dogshoot_count_max =0.5, fear_height = 4, @@ -94,7 +96,20 @@ mobs:register_mob("mobs_mc:witherskeleton", { }) --spawn -mobs:spawn_specific("mobs_mc:witherskeleton", mobs_mc.spawn.nether_fortress, {"air"}, 0, 7, 30, 5000, 5, mobs_mc.spawn_height.nether_min, mobs_mc.spawn_height.nether_max) +mobs:spawn_specific( +"mobs_mc:witherskeleton", +"nether", +"ground", +{ +"Nether" +}, +0, +7, +30, +5000, +5, +mobs_mc.spawn_height.nether_min, +mobs_mc.spawn_height.nether_max) -- spawn eggs mobs:register_egg("mobs_mc:witherskeleton", S("Wither Skeleton"), "mobs_mc_spawn_icon_witherskeleton.png", 0) diff --git a/mods/ENTITIES/mobs_mc/slime+magma_cube.lua b/mods/ENTITIES/mobs_mc/slime+magma_cube.lua index 98c29870c..48aacfcce 100644 --- a/mods/ENTITIES/mobs_mc/slime+magma_cube.lua +++ b/mods/ENTITIES/mobs_mc/slime+magma_cube.lua @@ -1,6 +1,6 @@ --License for code WTFPL and otherwise stated in readmes -local S = minetest.get_translator("mobs_mc") +local S = minetest.get_translator(minetest.get_current_modname()) -- Returns a function that spawns children in a circle around pos. -- To be used as on_die callback. @@ -41,33 +41,33 @@ local spawn_children_on_die = function(child_mob, children_count, spawn_distance -- If mother was murdered, children attack the killer after 1 second if self.state == "attack" then minetest.after(1.0, function(children, enemy) - for c=1, #children do + for c = 1, #children do local child = children[c] local le = child:get_luaentity() - if le ~= nil then + if le then le.state = "attack" le.attack = enemy end end end, children, self.attack) end - return true end end -- Slime local slime_big = { + description = S("Slime"), type = "monster", spawn_class = "hostile", - pathfinding = 1, group_attack = { "mobs_mc:slime_big", "mobs_mc:slime_small", "mobs_mc:slime_tiny" }, hp_min = 16, hp_max = 16, xp_min = 4, xp_max = 4, + rotate = 270, collisionbox = {-1.02, -0.01, -1.02, 1.02, 2.03, 1.02}, visual_size = {x=12.5, y=12.5}, - textures = {{"mobs_mc_slime.png"}}, + textures = {{"mobs_mc_slime.png", "mobs_mc_slime.png"}}, visual = "mesh", mesh = "mobs_mc_slime.b3d", makes_footstep_sound = true, @@ -84,23 +84,21 @@ local slime_big = { drops = {}, -- TODO: Fix animations animation = { - speed_normal = 24, - speed_run = 48, - stand_start = 0, - stand_end = 23, - walk_start = 24, - walk_end = 47, - run_start = 48, - run_end = 62, - hurt_start = 64, - hurt_end = 86, - death_start = 88, - death_end = 118, + jump_speed = 17, + stand_speed = 17, + walk_speed = 17, + jump_start = 1, + jump_end = 20, + stand_start = 1, + stand_end = 20, + walk_start = 1, + walk_end = 20, }, fall_damage = 0, view_range = 16, - attack_type = "dogfight", + attack_type = "jump_punch", passive = false, + jump_only = true, jump = true, walk_velocity = 2.5, run_velocity = 2.5, @@ -109,7 +107,7 @@ local slime_big = { fear_height = 0, spawn_small_alternative = "mobs_mc:slime_small", on_die = spawn_children_on_die("mobs_mc:slime_small", 4, 1.0, 1.5), - fire_resistant = true, + use_texture_alpha = true, } mobs:register_mob("mobs_mc:slime_big", slime_big) @@ -158,12 +156,141 @@ mobs:register_mob("mobs_mc:slime_tiny", slime_tiny) local smin = mobs_mc.spawn_height.overworld_min local smax = mobs_mc.spawn_height.water - 23 -mobs:spawn_specific("mobs_mc:slime_tiny", mobs_mc.spawn.solid, {"air"}, 0, minetest.LIGHT_MAX+1, 30, 12000, 4, smin, smax) -mobs:spawn_specific("mobs_mc:slime_small", mobs_mc.spawn.solid, {"air"}, 0, minetest.LIGHT_MAX+1, 30, 8500, 4, smin, smax) -mobs:spawn_specific("mobs_mc:slime_big", mobs_mc.spawn.solid, {"air"}, 0, minetest.LIGHT_MAX+1, 30, 10000, 4, smin, smax) +mobs:spawn_specific( +"mobs_mc:slime_tiny", +"overworld", +"ground", +{ +"FlowerForest_underground", +"JungleEdge_underground", +"StoneBeach_underground", +"MesaBryce_underground", +"Mesa_underground", +"RoofedForest_underground", +"Jungle_underground", +"Swampland_underground", +"MushroomIsland_underground", +"BirchForest_underground", +"Plains_underground", +"MesaPlateauF_underground", +"ExtremeHills_underground", +"MegaSpruceTaiga_underground", +"BirchForestM_underground", +"SavannaM_underground", +"MesaPlateauFM_underground", +"Desert_underground", +"Savanna_underground", +"Forest_underground", +"SunflowerPlains_underground", +"ColdTaiga_underground", +"IcePlains_underground", +"IcePlainsSpikes_underground", +"MegaTaiga_underground", +"Taiga_underground", +"ExtremeHills+_underground", +"JungleM_underground", +"ExtremeHillsM_underground", +"JungleEdgeM_underground", +}, +0, +minetest.LIGHT_MAX+1, +30, +12000, +4, +smin, +smax) + +mobs:spawn_specific( +"mobs_mc:slime_small", +"overworld", +"ground", +{ +"FlowerForest_underground", +"JungleEdge_underground", +"StoneBeach_underground", +"MesaBryce_underground", +"Mesa_underground", +"RoofedForest_underground", +"Jungle_underground", +"Swampland_underground", +"MushroomIsland_underground", +"BirchForest_underground", +"Plains_underground", +"MesaPlateauF_underground", +"ExtremeHills_underground", +"MegaSpruceTaiga_underground", +"BirchForestM_underground", +"SavannaM_underground", +"MesaPlateauFM_underground", +"Desert_underground", +"Savanna_underground", +"Forest_underground", +"SunflowerPlains_underground", +"ColdTaiga_underground", +"IcePlains_underground", +"IcePlainsSpikes_underground", +"MegaTaiga_underground", +"Taiga_underground", +"ExtremeHills+_underground", +"JungleM_underground", +"ExtremeHillsM_underground", +"JungleEdgeM_underground", +}, +0, +minetest.LIGHT_MAX+1, +30, +8500, +4, +smin, +smax) + +mobs:spawn_specific( +"mobs_mc:slime_big", +"overworld", +"ground", +{ +"FlowerForest_underground", +"JungleEdge_underground", +"StoneBeach_underground", +"MesaBryce_underground", +"Mesa_underground", +"RoofedForest_underground", +"Jungle_underground", +"Swampland_underground", +"MushroomIsland_underground", +"BirchForest_underground", +"Plains_underground", +"MesaPlateauF_underground", +"ExtremeHills_underground", +"MegaSpruceTaiga_underground", +"BirchForestM_underground", +"SavannaM_underground", +"MesaPlateauFM_underground", +"Desert_underground", +"Savanna_underground", +"Forest_underground", +"SunflowerPlains_underground", +"ColdTaiga_underground", +"IcePlains_underground", +"IcePlainsSpikes_underground", +"MegaTaiga_underground", +"Taiga_underground", +"ExtremeHills+_underground", +"JungleM_underground", +"ExtremeHillsM_underground", +"JungleEdgeM_underground", +}, +0, +minetest.LIGHT_MAX+1, +30, +10000, +4, +smin, +smax) -- Magma cube local magma_cube_big = { + description = S("Magma Cube"), type = "monster", spawn_class = "hostile", hp_min = 16, @@ -172,7 +299,7 @@ local magma_cube_big = { xp_max = 4, collisionbox = {-1.02, -0.01, -1.02, 1.02, 2.03, 1.02}, visual_size = {x=12.5, y=12.5}, - textures = {{ "mobs_mc_magmacube.png" }}, + textures = {{ "mobs_mc_magmacube.png", "mobs_mc_magmacube.png" }}, visual = "mesh", mesh = "mobs_mc_magmacube.b3d", makes_footstep_sound = true, @@ -184,6 +311,7 @@ local magma_cube_big = { }, walk_velocity = 4, run_velocity = 4, + rotate = 270, damage = 6, reach = 3, armor = 53, @@ -195,27 +323,25 @@ local magma_cube_big = { }, -- TODO: Fix animations animation = { - speed_normal = 24, - speed_run = 48, - stand_start = 0, - stand_end = 23, - walk_start = 24, - walk_end = 47, - run_start = 48, - run_end = 62, - hurt_start = 64, - hurt_end = 86, - death_start = 88, - death_end = 118, + jump_speed = 20, + stand_speed = 20, + walk_speed = 20, + jump_start = 1, + jump_end = 40, + stand_start = 1, + stand_end = 1, + walk_start = 1, + walk_end = 40, }, water_damage = 0, lava_damage = 0, - fire_damage = 0, + fire_damage = 0, light_damage = 0, fall_damage = 0, view_range = 16, - attack_type = "dogfight", + attack_type = "jump_punch", passive = false, + jump_only = true, jump = true, jump_height = 8, walk_chance = 0, @@ -273,13 +399,55 @@ mobs:register_mob("mobs_mc:magma_cube_tiny", magma_cube_tiny) local mmin = mobs_mc.spawn_height.nether_min local mmax = mobs_mc.spawn_height.nether_max -mobs:spawn_specific("mobs_mc:magma_cube_tiny", mobs_mc.spawn.nether, {"air"}, 0, minetest.LIGHT_MAX+1, 30, 15000, 4, mmin, mmax) -mobs:spawn_specific("mobs_mc:magma_cube_small", mobs_mc.spawn.nether, {"air"}, 0, minetest.LIGHT_MAX+1, 30, 15500, 4, mmin, mmax) -mobs:spawn_specific("mobs_mc:magma_cube_big", mobs_mc.spawn.nether, {"air"}, 0, minetest.LIGHT_MAX+1, 30, 16000, 4, mmin, mmax) +mobs:spawn_specific( +"mobs_mc:magma_cube_tiny", +"nether", +"ground", +{ +"Nether" +}, +0, +minetest.LIGHT_MAX+1, +30, +15000, +4, +mmin, +mmax) -mobs:spawn_specific("mobs_mc:magma_cube_tiny", mobs_mc.spawn.nether_fortress, {"air"}, 0, minetest.LIGHT_MAX+1, 30, 11000, 4, mmin, mmax) -mobs:spawn_specific("mobs_mc:magma_cube_small", mobs_mc.spawn.nether_fortress, {"air"}, 0, minetest.LIGHT_MAX+1, 30, 11100, 4, mmin, mmax) -mobs:spawn_specific("mobs_mc:magma_cube_big", mobs_mc.spawn.nether_fortress, {"air"}, 0, minetest.LIGHT_MAX+1, 30, 11200, 4, mmin, mmax) + +mobs:spawn_specific( +"mobs_mc:magma_cube_small", +"nether", +"ground", +{ +"Nether" +}, +0, +minetest.LIGHT_MAX+1, +30, +15500, +4, +mmin, +mmax) + +mobs:spawn_specific( +"mobs_mc:magma_cube_big", +"nether", +"ground", +{ +"Nether" +}, +0, +minetest.LIGHT_MAX+1, +30, +16000, +4, +mmin, +mmax) + +--mobs:spawn_specific("mobs_mc:magma_cube_tiny", mobs_mc.spawn.nether_fortress, {"air"}, 0, minetest.LIGHT_MAX+1, 30, 11000, 4, mmin, mmax) +--mobs:spawn_specific("mobs_mc:magma_cube_small", mobs_mc.spawn.nether_fortress, {"air"}, 0, minetest.LIGHT_MAX+1, 30, 11100, 4, mmin, mmax) +--mobs:spawn_specific("mobs_mc:magma_cube_big", mobs_mc.spawn.nether_fortress, {"air"}, 0, minetest.LIGHT_MAX+1, 30, 11200, 4, mmin, mmax) -- spawn eggs diff --git a/mods/ENTITIES/mobs_mc/snowman.lua b/mods/ENTITIES/mobs_mc/snowman.lua index 1ee88b362..0726b8da0 100644 --- a/mods/ENTITIES/mobs_mc/snowman.lua +++ b/mods/ENTITIES/mobs_mc/snowman.lua @@ -3,12 +3,12 @@ --made for MC like Survival game --License for code WTFPL and otherwise stated in readmes -local S = minetest.get_translator("mobs_mc") +local S = minetest.get_translator(minetest.get_current_modname()) local snow_trail_frequency = 0.5 -- Time in seconds for checking to add a new snow trail local mobs_griefing = minetest.settings:get_bool("mobs_griefing") ~= false -local mod_throwing = minetest.get_modpath("mcl_throwing") ~= nil +local mod_throwing = minetest.get_modpath("mcl_throwing") local gotten_texture = { "mobs_mc_snowman.png", @@ -21,6 +21,7 @@ local gotten_texture = { } mobs:register_mob("mobs_mc:snowman", { + description = S("Snow Golem"), type = "npc", spawn_class = "passive", passive = true, @@ -178,9 +179,9 @@ mobs_mc.tools.check_snow_golem_summon = function(pos) minetest.remove_node(pos) minetest.remove_node(b1) minetest.remove_node(b2) - core.check_for_falling(pos) - core.check_for_falling(b1) - core.check_for_falling(b2) + minetest.check_for_falling(pos) + minetest.check_for_falling(b1) + minetest.check_for_falling(b2) local obj = minetest.add_entity(place, "mobs_mc:snowman") if obj then summon_particles(obj) diff --git a/mods/ENTITIES/mobs_mc/sounds/mobs_mc_villager.1.ogg b/mods/ENTITIES/mobs_mc/sounds/mobs_mc_villager.1.ogg new file mode 100644 index 0000000000000000000000000000000000000000..9c56b0f65bc367e060329fee2843eb9ccc5c9753 GIT binary patch literal 14734 zcmeIYcUV(d*Ef99AV9zbk{FtXfEYqh0)zo{oKQjs2_!KDbRZOI7EmlRmJo^|fFd9w zpkn9&G(mz`CzK!xqErDJW5qUN8T-I@qI1uCfA{-b@AF;PbAA84o1McxyREa`c!n$I|05lQeV>X7_TVLMPFS`&Z9Oq1QNaC1faphbu&2@OY4&s?`F=&#KiNhz zJp}Q6tc`~!7Xl!`8d@MxExb|40RS`rL|NGw6vzA7)Rvqe?<_0v)s)osxn(7}YC=pt zt@mFSqEjpm0N{X-th2xRv0u`l>w3b{{b^OMiNP-QL~RLc+Eu6PPwSYCb!~OY8wYKc zAoar$AmaeT*CHDms<{Zn7C8j)vd=87&!WCEO_$P8CDL{1BW4CVJgq4Xc6-`Tz2EH_ zx$TCBo?Y9pe;{p)8*}oa*4kZL23?<2{(aH;#s?9677s1sShNRHGricRt}G3l>N{IR zKnSu4_#DLgDX{$tvui_EtKU#rM)V;^W*9q&1E%z~YqrJR+?IZG+wSnP?1+xt;T_o# z6WMD&WJeQn{>~qF-}|7+-&iL?fGSJZ(g!wDl8N-bs}z=%(+mY-H6kJE6p?I-s{QKX zlTId9v?nyRZ|HBO_P3(Gbpaq?7fq^4EU)|Da(sAc+<%`L34IiR0m|}ns@dgKD`u$G zZ*sp>Q*pDj+8x2y!S&sMK1C4tx81upp4B50N!02nkgb*kAFP#U3j zBWd(CTYkK`CFmw73XMem&ne@ZzJQEa9E~qc5+WT7qrZto2u@2lf%HUurv!EopLj?t zzfu17nyW$iqpC)1#Ykr^yJG3t#x`dN8uS`RgZ&bR%e5OPdEnUa8|9B1&SJq*Zb`*bwYa88Lb*ylJ>bw!)m)mp2i=~_yV0H~ z8mProI;h13%E!mHoOJa~u2qinZEH(H{cUQ$TNJpc#MnZ2E#q%Sl2ev;)utY_ihp0Y zS*z<9^Pzvs*I%2l43~g;$iXhm@kb7uvu4|d@Wbi1&SbBhNWXV;_r041KQGMrPsRGj zasbe1vcB15i6EbLxiT}@L+ASf|I2bxv6l~;T{&nK&}tPlOuhETY4uyDAtNTsDJTrL zb_ka~f{zPxUOPgM8{x!_ZHt?1kBd07JG}jGgZXYY_im>Do8@Rsgyg#afo~D~e_2iy zdH;Qv{g!@3R^dg~J4@H+mNy*e`t_KpBi)`>R!8RV zE41|Xdub6ifQBo}Zun(mNAL5K%(t-f3R+@)-R;_YLoFUPXoK4x5;$QD7+i*!1;NY$ zV4&q`lHUjrgoRu)(s&OrsfL^wMn5u)nBQ;zXIGGr6AKRJzo!8S4Y46ZPJhz^si+*8 z3@6Z&{Lj;WL5oF)to}Dz45uIlJLrE->Hp5~e z+hM}MLNuMBnx`{$T7uUmJH;*m&v^G)Nmr4y7@j4g>f}mWI6IjF? zd$O}m=lWZaZ?Z(12nF2>D0YNK?9K`PRD+O&K7W8{1*m>^DSfn4N|u25Np>}r+W*#z zg$)YhtUdgISNbGZN-nRHom&PHy8g{Yf#5Eo{GV#4AS}2GgS+wCh2@WPH8aR$C-uOd zBThkJ&zlHoLU~=I4D=+7Zym?d*De%m>SUmIfoeK&*4{i6Crkv#ojXZ|vA^FNSIK10 z&YiUF2S5Ndc_=PiYg%*H3PSX06$BuvkZxBRT9Kwf9kT$|q?H7SL0!m?_NUdNVhlZW zPeccL_*%qg);oRT6Mh?9f;uatpxOKW4newD?cZeX1O z2spNaU1~}~J!UGmfcWDm*aZSGzDrw@5^QhC{w8i5pqkb!*RiFbxc!Rib{<;_;?|_1 zn(sB`E3f}8{hi1DmT}rza5Xf7TGFpsqehub7rYw*1(mJAyE57Hu6B+5Z>C4z(g^?g zITa}P^f==Vjr*qR0l@0b06>vPr)L#Q6)MotK{fs|i-xoTF_)G_4cf!kCcE(et^N=p zI7W#6`-I}0AN_YJRrlXdE&uEM^8aUPf}h-?L_l%)h)?gOruw!HH0monh~=!C$Spj zw+43*UV>|89P_V+6In%}SHTgQ29Vs6+R^VL$QmT<-}p~MZAnS!x3S1?5E(p*YLKcS zsJkVh;J9p%#&_%t3PcyA@vXrhJhEavbiOx~6oLI}|84*Yf%E^}01^VH`91 z2xNS-S@490)>gEQ^PBS1uKM}4czT;WuBw^v)3#9Z0^*47SN;5tijX#1joJB>+OpzO zkN&byl)#p@HJ|3=`iSjunE-CtA^?D49E^}yMn(n-aAEisLIGVplzBIk!B}Qdt*Y7_ z=(6;vGXS`Y2hh16thtoS z53|KnBqZ|F2SHTglCC4~H||~(f z1`npIg*m?7pH#eN6?AhVx1SV!ytWF~wwrz{ZCmefbrbc2>F~Y7Z(@lFNg1#2Hf$>0 zr{6XGp!2X1Fc;_4p$_+6FI^4&**i0$GH$E&XRFOEu@mN)da)}KSz}LgbW{M2jv!)C z$prhN1-u?E%?<@q#s`=-n{f3<@Z*7)WNU5^-42CGrjRJ(%>+Ct$0El+qs8dQ20lj_ z1&jaP?fue#qBJdxWdcNzo4D$?rz7_fAHF;z?)P|nt-&?QnJndvJ!5YG&~NM@G*Z=& zxIrcxnn9SV za^SAdU#II9we`wa91gQ^yKc2ew)(dZzS>$hTCYrNZ|eZ&;sYBIj<%xp^ETRAck^wO zQSr>#7e75xsg!yz_D>w-Njk)l48}llnND%p5eBHHs-!Y}_uUZtAU*s@7q-dSWV{E@ zMbVlkqtx;%@qtR2L~OxDp}OsZMr4F>l%A)B-SO-yvLt~8fty~And%rG*MI#mc~V9u zLM7goCTW)vNr*lanb(9vSQ5w9W|oaUG3qYog`rI00I0d{cC;SZR8(R$|Fk_-jpdBA zwaFT8@*sYp{obmn`|UYh?J(e0uPgz};3&x^YP=UW)NO}#?R{M|K=r1JdDT~Dci%Hi zUFPz0ih$OxjNglCqPGg%O7PvH#7_Ac`U{jTp<1kva+~>( z=9n=pTP+IS+B!-w=7x99tZlHUeCWFz>(wNPxkdbI^-BG8c3~gOnU*pM4GB~sp?CrBv^?HIz*joyHwmihNXLE;A4|kwm}t4B zds@`;Q{^0`|+tM;@4|+GqC7E zz0ExP$)^The^{}2o6lJa;^Vcgb&SBMQ7jWc$#v-n;hAd!zDZS*1xdFGQZ{D3=At5j&5`%wX@k&UPvoCi;cWQAP`fqH zmfu3y9aH_n+ID^DAOJar8G&#t0Kzuo$*7m@el@L1dagU zinjRZwagw9U|sCKle%yxDVa~@A~r_!yFI9=7=s3}0#5#-C-Fw(aR{e542~%v zNeno)!YU>v6W_^(@$(f21SyOSS8Ti9H$qC7Uf{lo{z8 zVP>Ju3apPK&M4lWB8V3Vw4nmLsKD`4F+=ek69Y($D(jyh>+Qs&exvOrlj zkt-FGCmQ$)@yYGOR;u1RLwT%=`qMUDAeHBKt*{@L9|lQDOZY51;I0 zRNqTp$E9L%C`>nc_qF<8=(~r~x&cw5+Iz&B9_Zx>!1L%b=~PvfqF2@+MKA+7{YpQi zu=e)N-zf88?j%Ff;PB2yi?Vw|KLpX`ZEe^9WnGd9cdM=xlbk={Onf(}r*g>v(9E7L zHpi4ol?kZ)YNEaJ;j(3+vdQppoO>RG-D1G34^EatAm}pH6REJK zMSxb?*->qWnZ71={jWd5E`TrVI$(2GZl85~apT+{j$i*g51aUUqVL21UZZt&DhUfX zw!GYAVB@-4+s7cVOfNK-M$53Q*T7(612dnWsZ8SaB;oQd9=$k*U(qce@_t?_h~g`g z5(R2q{+OsGDP870y{_Kz>DThoK0m-6ca*O-IV#h?17JDLB1m$<31OaoECTgVz^V?tP_EmKjtNrI~%4MpPYY)(LO9gcQG1Sjh9 z^AMf7GiaKLyZdH0gL))DT(|Sp`P;GML*#0fcSPYDK`c6s;DesMt_5gT6^Xx$|r-C}nu&+qH(htHd&BX0^-~UgR6Suv_UWh$OP}H`^+xC%L}TTpTnxHc zBOo*)7OmtW6f*9pn8i{ip%r9q5KMUnmnYJth%TsHZk)Wo?^}Gl#7M|Ai3+{F@VsW%N%pDB|Or%pnoPJjc z89+l|YOkJiZ~m~T@kALRnlmMh5&~|BXD=ZAh0k2f_;LExo>ryz!H-zrF7jxrvZI4P zyncTBWy$a@7sWaULy+mUK#BTX(UgF-HV73vq|gu8NQh2@VCqGnRZ(E7@9* zLEuuGO=U6)QPLotGO-g&36GsI-QL}xFXxx#5O$5+%&f_{*VE-j$dL&t1XhnpkBs8| zyH^`8pCs8(5X{MoDj);BLF?XQpEkrWjPABY?=JU4df{*N|y-rV{EkNW^_#nWnRwy{OB9V9H7riALN%nAg zV4oe|9bn+57XW{U6MoSs05}i~Cum-U-ObynXEtv(Z!oVnZ#WN|*O~|B<{|Ui^N4xa z*LlR(kBgp0ZV9_~iauWQVd#wDi_gP_|5@=tD}2+z5+$O-{`_*@G&ycze;5WS{<3wm z7eU9&S3@jc0MC;sqLi3Clcb4o=1WylkR5dc9A(RG*5mPi@RAF}xiTA~R-G&{QE&~5 zi>hA8Y$1)K0+J<5wvJRBn)H@|K024|onmS!B6C^HrIH>QX4=&OddQ(Ym%s^a(m=_fg!B@naj5C@%nR@&dsr#Qd)iA*8gsKW+&fl8kwX{9N z7TF--cp(6EGTTlf4a+3U3>e@u=iWH8Jfl}8wVcA*n!pvZ39|pj7CqFLCt40qPeUg5 z51IgXKduz5OF3z`?yuj<-sXK;eAe{1&yBomN_Erx!YzAf^Ohg9Nzd`va3;&zuyx~) zPcOhK^g_)-H&iZ<%D|?&x};GuV9}ab4;s@Gg`kTt?2u-f0A8JxTwa%9F5oCnPc)44 zA@HM;7CI82ldeY{r2y11nSir(M&8@bjcr-E^H+n}wYMMMPV%HmF&v;p{2l^`DU>9! zjUXt9#@EC5h*i6PF3}ST8%VuT`gJx9COKvJ((xcVo4UcCY6oDcWb#M-IS>%B3px`v z6p$rC9F7gVTdwMjz9W$}LaRXEV({#@5<}N^QesmA+BQnXt0uOCAGJ)AAMF^fN%7gb zj(h|P-0ir{w|l_(eeC$%%K3qL`T5kdN`7xsSJO`yUFVO?M}Ig?q$m+d4iI3+nq=Dy z2K=3{1nXl{9Ozjd&d?RR&RXTe_iMC;K^3S-5_dXG2(@ew630zgJ-u8wgb`#K*zNst zY;b&#vW<&sDkC07qZb_xO_Y*WrZ)5UQ6yp+uyOpdV-#~AF3(%9V=Q5>AwE_#ZgNXT zhyeMNCa{@aF-wI6wBERww^fWwZl?6&UuPy~3W;3Ckc}{X1WVQTVgwmkPkBIhBcV}E zf)>)%!`@5>yIyZ=AKOF#NW8OWAr$b2V~29bs|dGb-b(Bw0K6309bXQpz2TVTmu4Qo zrH%_W^or-qxtTi^r`7L$IulcOh9x=Q%=FAs=D764UsS-uX>uaNfwz$gi7 z1?oj@N@cyED^?(YbomlOG2gs8wlFH6g|-|wNp4|5d>aT#9tVd(p-E;2hgTc>#&i%@ zcHv@mI_{fYT|z3!AmE*=rBZ>&Ch`vf%q_*MT8z{+x9uOL5@jtMpt@l~+>(S#Nk-@b zfoMJDMrN~dgFykA55cIWL%Ki%Xc9BQK%Jmb%A+@j^A*eRZn&0UcMJ>5f}b@9qBmb# zki0a?k_G@+MS#7|JD^jjWs5f=Ui+MG z4ywilSxjoG@s4+sh~4z|y_87P!)wy1%a*|otU6zHs`vfs?B|)=5{@Jli3ZLc8rXHS z(dG)u7o`)t8iT&&s_#yXg3tuph&q`t%`Q!j+N5x_W5dBs~<57$M>vwC(Jaqz^(w@_cL$*jB;Pr^``ykLS3wlo*AaM zAh3Iir|KC93^dH~(;(j}596-K>veLfzOeXvc-VzTJ^O}bmg|f~l`0N8uDu^}_=UJMyOtC%654YP6u#tA>fPw)LA?33J4ICylV`4@0r-red$pJd^u93YJL%pg z73mZFS}cXNSNZ4OUcIxzqI31df^{~)q6V{;4Yb(Cp}kE{x6t1FHevps72hHLtqsEj z;YgU7V&qC>{*hcAv5sXl=t?#GHxw2E#N-_HT{#P;pkaUQPHGVA)a4Sk2`JN>8w(53 z*}y(eW7aIWcBMbr_DZ$DurPkC6iJduwHW%VEqi5TnfDM8czV2`9RG_>GtXC{sz6ZrT}T=UBo_z@Sb5?G0LgyA*#P3yCdtHoBis~A()D)o-&M>N*VJGXsRnHwXSQd0y-`nmwgZrIg{ESeK{SMMqhci zZCG*(YPEDZLhC6Sb-^)sN+FJg&g?Qfb!G8LZd8Q5Fg1k@tSgJmy*Lq@oOh|eexKp( z_a9t%dd0Sig%v3qhPHot7b3bfw@CZ>Vvxn@L*WZ0UOM&5HaGyejEX_$ zC_<@VlQUIkHDrd^bh-Yj!=u0upnu0ClMtjv+T;g#yLfJg%iGm`G52B*~h ziN*9VuRuB0Q!W>nGg%0us1EaE?kE(!*;Hae96Egfy(pZ)Zi&jPB729Zc`+Co!vrNG zYa*OZ!{J>8omwi;MU2g0BgT04B*3@rZusx|mU^G@{Ra~_#||A4=PzAbQ!#IP05zF( z@rPx)H-5Og_O;vXR3l*>w|e-G6tzi@0FuSiCuJA|cehuHM}RuSy+>j9athFkT>ms* zdf!Qy*tz}F=$UBCET3S|9|FSDK;^Q>#8UsjNWBU7feb{Mke4q6fsznP1cc2mT5`tl zO2rRBN`(=eS8BQJ3K++DVjoF6Mr7=Smn`pLc$MjfZ$(POEJ+CrMVmVuJf65FPd~nX z^Vi7>8$VoV%+Gd_lCR#!ow#}MhX*gdA`}9(Ov)Vbb#T$`-px8KKc<@JyH?tRA{^rwb4%^h2nS48Hp z-ScD(M9DMl>|xU~?!XhwxiOt7&o1AjU%NYffV=A}`{--p^>;nLpTVSwn(yrH&5hg= zH?BIfY!MG@**EnU3_vnU4~G9hS?_5QynVCPH$jw@mF23-%*%v2AV{k6@X*f}H;}w( zN$d?&=emZ(i82wd#Fxbl6opVcj7!D7Nlr3K6m5phvI|NEgh)w3)zNi>jVb5M=dRpu zKwyl{61t=%2OXG2}a z0uybsS7N5$4sM4$_yRf`3S3&BGBbcP>RcVUQl48tME}~GGZ;z3eC<)gDkhN7 z*WV%?>uEp2coTq&i(y4&y*v|^hjF|Tr~kjKT*ph$9UFcc+nw_qZkw>O-1gqDFYu$E&8N={Tyo)&T!g=) zjR!a&?=Pm?;OLQ(i$DFc+qCtsf(gfMoB2?2;?=v0FJ980ob&z)0DW+eA33S0>N-hD zE0VP2P)AQ_>anh#9;){M)w&n1IWi;xPR1-2#~#mWR`ga8VhZ?~hS8-sOl=m%Dzenm zg>*4CJuoIB25s3JYPzP9;w<69dl)sgm6?B@)TJdc6&uxXPmG0iIg+pn;lyLx5i&48 z-y0O1H3Mh2mx{f6%IUV;(Q~z&i1P6u+i^Iji3Gl#{(7pmd*_E#)5Ra2&(B>b+q=58 z`)#dp|DIv_*04*b@1|)_?wwD6le7`0y?#fq%0&(JHryTC*LM8&$|a0iAzZbW$kPTb zATqah-Bsw5g}cow{;0d&VHj|+1Tnb$vzzmsYfDLE#TL*wFQ^CpnZy?MqnVkRt4m?x z`2fCZpwUbWhI!OtKhQ;MaF2wa&$slZCLuD#CV59WUYsCS$|yX7x^0{2V!@b7-d(O! z2Lf72bYcxP>Bbx)+~%!^(m$m5Wb_&9gdGjsW+_Kb&M9IV=ro8LHuqorGWUU3<7s#t zj69&+*jt~eWYPS~SZv7e`5$a_lBXj^`wxHK%6#UsK3a)ZwcC-UC&>Oru&p}A+tXYq z>N^G%a8>lp^Q9L9f_$J~&$FH!N%V8Gue^btP=aB0i-q3PmB6}$+pUcQLB>U2GQ&E( zwXr5=QYc%(avsi2v*kmO53%J3RW2WXm51hnZ`er-+T*gZ@idx1`#xJh^=4=y!tb}? z*~|?=zk;E@ZtMu&-d?TMEuT1o@AM8_L8orZiI%7blbA2rfxjxt_&6q-)e~jMgK<#; z^zjU;&l8>DD?cmG=Km%!*@C_OQebO-q(?QxFVnQ*8ZAy^%^ufz^Zwb>ulHtd5$D!N z-dXo>(tqM6zcl>gyz!bd3wO2~zE_sU;paBR1~KDpU}(}QJdrtYkf$4cd!anD44_5F z3hG4wI2nW0q?JjCVO7fn%iG)EOQJbVW4+_!gLudaxh$8zCQQY~=!FG_Rhw{ngamB< z?!B+qr>?tLFz+!#ZExYzq!cl8U;BB7$jRT%7!!#mLnf?&H2kiG3Vt6D!fxS7d0|cB z=xdZ5UKkxUimrfj^Z>}rs`K#hBZz&(o~IY4Rm8!n&^`BUGkwP;T#PMG$*kH{I^-aG za3Jw9oH$$hX96DWx}#kz6M3^k^aGPuf|ii7$JDF(<0_Zqt)$QS*EVG)VDD)^3FG!$ z#7C9gHp{K`e_~OllPC_i`1o>`&?gbBq75KnlDpt8^)@IffXt9LYBqJ9Xq(njx>Y zBbZysc=!%&onaFOkSXBQCq-XVm5QP>5)%_mz*n`Ic4`@fECJ3h-4nfvzoOl?>E&$e zlRMW0&do21UxyLH3$5N2h1os|Ubf|{;qmh;%)=FiE#t8Uhrd*8IyTO1^H@b+biijp z6tG}AOAlDJKL0)n`|)Jo)dAyb7Z~D_ZL7n91ejk|IWm;)a)(9PS8`>it|F5_%LD%$ zqd`Tfv*Fr0C#e^W${nl3A`GsX$6pu*SN6E^c*-}#w7(uZ*msNc1?XFRa~_o_X%QWF zhxY$<=1YthM-uJ@?vVwAA?T8I7zDyej6snEm?4>jm#u3F*c16oTpkmA)5b3&HJlKT zD7+^3CLZ{8kj^OSH=h@}`?9Rz!c}p7zklr8dFJd&l;Ns3-p_`d>7&0tAm|*3v2s<+ zq@|Zxrny{cHM3L|wQl=d6ufBA+jCAy{eFm=IhWV^TzJ?w&a*oqf zTFM)$}i(*v_>#MS4ius^^xx? zJNWjm7Kn;^*SV)k?&p4$ zX8F_GzRtr>LHios>^5qBjmI$q^_rY{$}91DrY(~RYFU{O3e1{iIRZ!`o~bSA6p<1z zDhZvU1<5cAoQ|>Z#(dfy@F@N0Xx+KwQ$6^qM+_BQx}5Fhv{T8oc#yxdDPU4(hhZ5M zgq#vWDSjNBG_zp58I0^gRdK_2p201(a$sa&0RdR#bDJ5k7}eIPvP|t++xD)LVTxLr zwh0>bXFP?bC}9VJK6}7sphpm>$^sEQPj2+9XJ9urPq!T(5oU+yj3g;elef7!NeV>d zgsl`4W}X%k;Aj&q`!W{M;vaqk#0RE<5nkwS${J?wH(@{mCuyxz*c%56u_X z9|T|A!5P+eFMgQ%DTzd^d;SXke8I6@``dmg-P3tcl|0VSb}lSl*n~&C7zpmmtVU+@%Rv5u=(<*cVA@lpI%ZU_q@9~OtMbj z_=o8U*-Mw>r-C4Iz2Wvdlqb&hFLgi6e|~jladAcasn52J5c0qUbCXXWepqQ$yT<6( zqf3XS^Zo9p)-`0cvS%RR$3&5jN^DHpAcrp)uW^l&Xl+m}*}ei&r(coj=`R5kWo0n% z(IDB|mc2NxT&OCjD_{NVg1OjV~3?j8>6)O+X0Yv+nT1 zoGVF@E&X{nTQXN3;Q^N3H$sf?3aF{!P_=hDz82DB2KgkgI Fe*pY9T<8D* literal 0 HcmV?d00001 diff --git a/mods/ENTITIES/mobs_mc/sounds/mobs_mc_villager.2.ogg b/mods/ENTITIES/mobs_mc/sounds/mobs_mc_villager.2.ogg new file mode 100644 index 0000000000000000000000000000000000000000..bafc77b7eab6f58d17dbd56ddc2f4c1da53d86db GIT binary patch literal 14564 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 ZUU0tu;-eYfb3&=*j_1BOjmEXW{|EX3(7*ry literal 0 HcmV?d00001 diff --git a/mods/ENTITIES/mobs_mc/sounds/mobs_mc_villager.4.ogg b/mods/ENTITIES/mobs_mc/sounds/mobs_mc_villager.4.ogg new file mode 100644 index 0000000000000000000000000000000000000000..acb236445e2b530640a1c98a54c81d20a9a3672a GIT binary patch literal 14731 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 literal 0 HcmV?d00001 diff --git a/mods/ENTITIES/mobs_mc/sounds/mobs_mc_villager.5.ogg b/mods/ENTITIES/mobs_mc/sounds/mobs_mc_villager.5.ogg new file mode 100644 index 0000000000000000000000000000000000000000..1ef7a522744a727da6082e2a3a1f2bf36fc77604 GIT binary patch literal 11187 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 literal 0 HcmV?d00001 diff --git a/mods/ENTITIES/mobs_mc/sounds/mobs_mc_villager.6.ogg b/mods/ENTITIES/mobs_mc/sounds/mobs_mc_villager.6.ogg new file mode 100644 index 0000000000000000000000000000000000000000..c2743fbcc640651eedc1529bbed4e3c209552fc1 GIT binary patch literal 11068 zcmeHtcT|%}+xLVTstF_^AYkYr1|>jPKy*V1hAIgJLjWbANVOrX-B1kyEP#j<7eWyt zQ6dBtcNLHzh#*K2u`D($h-=wZS=)OD+X=Do%5XUzjw|s%v^KLT=!gM<~IXt zHf#t23gBBhA9tB1uO>}S&%lgfX`8lk<5T1W1P4u6zgqWS6q$XQCdus*JQT2rNy~2Y*ap}=g$J? z5RC>v3Gnc02WqCh69%0(V66^pt#XbJa5{lg70{=g)w+JSjM`Y=TA#Ra(Aom76{-v^ z98hQ`*(ip*;POp!uu!qzaBHv0iHfc2godgNb-P|%rk~xj+M)oLXALz6T%O}whuk%6 zT5tIHk;X!zPW`MBu{&kZ`ANmMLT!E>IOtp4RrI3~?r{0^eCztstX#S}44bccL!|4HhwZ6B!TwArrADkxi@BMWdNXZLXlZuXxjmuhvco2_Bi?6o zusPrIhdsZ%m*@GV<6xl5%(>*Dwb0Z+_`q4Hn3dC{0HWn8!KoFRS{K%M*T*KDiZ5@A zJK2`pe}>q9MsuD8z#tZRs){eG|G#oaaS+;Yx}tlvi)_>?`&g_|0$8pGJ_I9RLc+P`1Ue57Gw1W@IaQZOY1< zDgHMhRme5+Kd1D0e}NWaQW;y4z=PW#;>@ds2ThBuhI?o(NP-yn)sJvxLuGFVoVCjy zS2d!_M>=zZ%dO5gmX^<3FlkW#A!JMItH)$j$A-#M2E8@Q>K1A{bjnr5jW-~g{*wyr z9(@kP7k{Hnwec1U8XG!PHr;R@1=Vtk%dMp6gBRxe<`#|XDh4~9??WSUC(9Ght3^Py zx#)_Q18Q>GKi!7{*^M)S?WxSb?Kz;rMVZu_6d7+js9jV=>b0≦!)j)0i2^(6_4F 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⪼8)D-TJ`->@>Uw(8fCdv}Jn*&O4Gn>9R&mbhvv@|5CwbLtc zT+Cv#3`9_)uRYtkD#uzl*1!*`QQ&9q{K3jO=+~DCVyXK5Nwr6Jz1JP#%{V^kRk?WK zk1wAdXUG%)Uo=b*VVkj(it<5m*jbmmFMI|soRp3ewj4R&hvv_;U7I_@W6{w}I&?nG zLNkqDeRBQBOBYUs;7Egg+2OG#H{KP6UGYwtXixpBZ+GjCdh_|;wK^{TaqIK$WBy*> T_m77=o*i6O^uzS|W#GR6*1vMu literal 0 HcmV?d00001 diff --git a/mods/ENTITIES/mobs_mc/sounds/mobs_mc_villager_hurt.1.ogg b/mods/ENTITIES/mobs_mc/sounds/mobs_mc_villager_hurt.1.ogg new file mode 100644 index 0000000000000000000000000000000000000000..5c9ee492ba4d2315ab820b8149dcb5b73cfc62f6 GIT binary patch literal 10341 zcmeHscUaR&x9}to2z3)oVhE@qfItXJBp_f5B}i2gNDPT3gdzcKAa>nIGlU`_vh;<} zLI9U2SXZS5J4!WT0ekQ3ik15dxclz+e)qZed!GAz|J`|pVdk7ObAEH$oS7_NyEX*C z!H;5{d043F-mr}Ehs}g-*^nRw1Boi}wOlp;C;$XjcE$&y{p@NBs%*Cx75Hj;D#whXf(#WtB8%GdS3{&lVgb+w zVq3kO>PLRDy>4sqHaQ8EZlYzb^+a7MbIeVz^TX_j^>wXvaqD~StdT}x2x#Mg?rV{T zVQCtn#3CIJHT%pH&Rf)%CFqmomC5?^&J$At=RK`Cu+06bygJAInQiMePXmY6e*Zw~ z5GUf$X`NNO5_{bqm;Gq;Cig*vzQt3=G!o^B)GRNtt1C)?mYUiY5s0B}f~9#FKPBdp z()>!F)$(@~<}~L%Cq_tU5F085hb#m)O7^t*#E4*(fBN1fx++s>1OW>1%X%o2>j_UC1}(R0G(>C+GKtKk_O9RAi;S>;-c$`LDwNs zXe9Dqm%Wqr0&T>iJi0JejC9HkpA?H2S{7f0^fH{{1QAH89uP~emAt>=W?b^HvH?>% z(2)^ZYICBYsB}_;@x7+^Azj*CELK$(Un@!M^)oD~o$75jDb;Om=!amYkIRgEOv52M zQGbbU!woJpH|$!;Bl!so)XOL+wP`yMIGZ+xJVdfu*PW_FH`e?v+z%haZJbMoZQ zi2$UcCaw6dX3~_Wthgp$O1@}&X{NQJDJ;tW}FcH5(h#6xbr zakXv3Jp0-LmcL!?lt)2IB}V3Y=$KAANqSMjMZ0>)EB>jtH&$2CGy48fuf8>Bnpi`% zZ=OSl(;{{#d&QP@VZS8ZJeIafoiuuV_vrQPHPh4o-LU@l8~`~@>ZDH=2(zf?%2Jkj z>P;#5FVES8IhSXCAXT) z5_RKf6#v-nu%ka5X3A|wuP6P(b2KhOa?82zo3H&Z&#AP{x#yZ=>6dR6mOp!Y;o6Ln zhT@8+4Kn?I^PCuIeUY?YB7H2$vCSwHWt1pR$l@;^dVcc1t$%yY(gZ80LY~7&u=P#G{tWK1YuxTrfE(OsI>Rd z=+hR_r!l66|FafiL}O}0^~W+0qrOmBAMFP(h)cT@gHD4^lK*-6Pk1q%Vaxx)i%tuo zhX(!6IsNYn|0{w2RsxWT!;GOnoM)AVJzVSx1N-jN^ND_MXyS;lHw(8B0;i2}aSMMc z(H;29JD>yh9c|mpg+JBl<`a3fO#O)BG0wVU+ARc%8W!KP$ya}9Er`MMn z3tu>pD(a+#EB^D369XWI=>jpBc9H(~H&y$Z0N|P*83yGSzWGrwAdU*F&;=krYWvLp ze3}1u=)W<9iERPcC*$HanqPwFM1;}vDF%Wt5Tvz@K*zu|#Bj~mnbE9qy0)}PYk)$4 zv5lBZ{WRtS*TPzn?EEH5z<_sN6qE#IkZ4dBUGaE(o!-^=(7tV@G7%g)ULdg}G-7v& z@uwIE$DH>EL@UsK*R}BBcA2dd%AXV$H&HIV_hw>(LfET*xz8pdfu~%I`7$p`#^G+V3XoXIVO)C|OXD1KYUjk49b>m=En9i7HbQns}$J$|l z*p76+AU}*W3p)M=U>0ZYVBU;Xitt^#6Hl`PcpB|7TCl zi)(J<0DNzn7CkIA+o{Q_9Gjyvop9I$AoU=vdq}8HtP1k|{jr`|ZnoA33whFJPYD%S zTQkUur{b=<=~mSg@T7J}??DQJV9-{0D-A4a3wW6hNAacc7LeBBAXtQxe;WjYwh~A2 zKLNp%Dtufv!?u*K!NxT^+dWJSP!91Tn%ZVpXXR^PO>M)Z0@l19ObFB~NpvKZ zKIR=T=^URK;s6oHLAGESncdLCgA7M6Dl6Mzs35Ty0qBcd0o@w!VPne1g;(oMpDCVH z%n9fY37KAx#=_F^TYpuB;eOy(vUN zK15gh0|7CD*8hQk7(vTS&44~7n z4)oBb7IsuO5A-B@0T>6smnD`+Vjj7=FI-Ib^!D-f4_p=ug*VvbNk|7UBy#G)sTm`Y zQ!gF##gp@a=A}b(ES81EzcpL<`rCx@gxLgcf&jH<6DAXO6R-)b?;l^kGsiv+x&Lk< zxnX-nHEDP3%8I4d&Q}wOba+G-%ogVBuP-&RNPl?ehy!7Ul(_qI_xCklzpE(S_eHx` z075iv(}@T|8Igi?Dmi|OYP1Z6+vOeBz#p_#43$W-V#|X$evv-$b`9n@B+8(Mgi91e zLq!LAUQzlO3bWDnICP^BIOF1s;_!tyb>(cFA~rTSX(UG5qYZ)17AKQjI;UOz^^BsD zEGJY`Wh76ok%RxaaJ0cTo*{zS)hfKw5-k$1+3dC#mL9RwAC&k<3z8TL2~lRr(K<@u?`q4ayyW}$IH$N2f4c_#jAd~6;Or)TYtr&w0C zZdhhhVIT?7t8rA~4J1@2C&-q>*}?-?>VohtVaJj!T;vW-VO%a3&xyCFV`I&lOof%4 z_y%E7VO<(2*;dN6)aNi8>qK%kwzMfjT%g#n_tRis-Re=gBOvSa0b$%abVssUjv(Vn zYH=;Wan|?ct>4z2O-q9*8BFb)?&Y6x?ROFyHkXl(oN|IQu#b?%oL#D}>F%oEh^OR!BUtW=(}*7i*5SB?teL z=-ZzsyO-ZH*pJBCo2GZiIrKdG&ZoP_&W2N?eGVT>KfK*9Kow)5|OGC#|aAXYLcfJahi&U4dZl# z$yLeNK5`7kUMlqNKK=VjhoB)IpaT?>mQ3QdDN52#8_+EUDO~XC3kT^DI_jH$C+*zu z{BQFOa(@f0{k@?|N|Z6_2!Wj_g(lk&NR3Bz_iKluX22yx;n3Kq*i>7r5H-}XpAS2z zI^|)#serz)SrW4usRrp-Wxj-+?I6c7(C9u3T(-=Xgueh_Fukh@^%F+V`DPixr;EQ_ zzrRNI7-rIh0Lx$t!5!z;0y6T&&gQpg$L~fs?z*}ENL-8^8>RlpyZ`gsu5*I%qq82v zcAWnHDu-o`?%CyDV`ACgU<|jrY$vpWg%e@G(IHm3BJ;FeY{Xj2I(FmH7RPuKY*#A{ zt*nJU*}GY2A(T`pi0NE`rR>(X9Z$cV#yd)Mw6!Tjd5=P7VVPMmzoGsCS@@jBt5zsT zg1hl>l7fT9rjW@5`{CdaG)CK_1E`7I6h>Pc+=XbVn>{)bm(j#+kt}0-Xa(O{ijky# z)d2+6Z-c??#&ntR3QowAsd;?pHBtPz{&Tw3UD#0pHiDmt%@$(KVBX%}Cqf12OV0+^ zGZ&ao;%UQLzizdO5*{{LCRtW^=PTEWX7li0Of4^7&MflvEkQ*eoH-JkVxMU~QKO;K{gj(UELL z<=UI4dty+i_zo8tw;t!=43|qt?!gGdL}oP0#+mr?7)%?@*w;)pdHQisxvtB?H!K~m zlnCP-c+CelB=Q1Q=%i-jg+o$&C2pA7WO{6QR2K%fD=N zoTq<{Z_c`L_uH#yck6e%;!P1xW{AJ9cB3l_it}Uj1988EK(1pVfSG6q!hxVoDkdnl zAnO{qftf{h87g|SP7yxcximi9z^tXU?_@SfMvfIH1%!YhZfIi+<*1jlU|R5Ii6Yj! z178QH=}VLj$;KXtR-v~CiqF_A1ll$5cB!)zVX6P^n;%53rJ7C_GtaC)^=;T0N+pd&{f zYl9gQMz_9%qf{i@lIe#-t0{pC;=6g7v8bwJG*Eu%wWXLr_m0!HhMA`)`u+Uy6Zq~L z*%o~|_w%JM9|Q8TtrXk$dvW514I0k={_|PP4PRNw)`6KfbVmLxgVj(rS{3>SwxbuA zY=yz<7i=V(Xuk*rz}rx%92tpFhjkBgP^b`Wydi&QrmE%Ge4{~a3NAC-$fr*dOO;o4 z$YffAvZ4Kc61=G2j+8$~mC>{fXUJA$}abfTKn! z54T?rdHdx}-dEn_PZ*0u1se~A>Akf+vwGX_2YmD%mmEZ`x%WKn+)j^1)d{RPrKlRw zz(UsxWr!OG?w#+OJ$rT!Q2yN{YaZ|h!5pj0~G;v!4wCycJn+F>mwyVK(sLvVe(|KXZj zxC*#cqS%_hPiUk7IFKHmLD?6xSzn4kH;O|5hTFtoGZ2Wrz0O))WT^$7RF@<1g``nE?$hyi#Or1pjs|v$2End_~hN}wb-@fXr&<2NOpohH}Sw>omsiY z6Sc+|G^4e0M1i$>A7l@cEZkSzuqDhhfX47>6|Q( zED)zT1Z6CqC+d9Qh*rv_aGd=xLAx0n+N6J;+MYbBH+cE_X%LEG2J+>CY!VNW48`Nt z(wD(mG1v}ndoE(#gC&;2EB#V=GNG>J>B3)Hu7{zp3@sU!A-<`L^?tlKnHky)*XL!X zJSYc_tQF}-%YpHjH2`})Mc#4}x!;{X>(U0rk)nx*2R2=;d73)9i*mN1SNMIdM8=vg zA(-;X^$R4muC56JSf_6w#YNQ(;JT1wfw*S2GdD#VuA2QEC*=uMll87sfurs9LMqZ3i29;?woE(tgvI)8M)9$pwq&XAhc0KN9 zIZ4Oxwb1MqKYhsDeV8r;XPE$3`-fSLB;5M=e2H+=7 zT`>Twx2KLRSm^QDddZ%KW$*&>e$=jgHoj*coSQr3C+@$}dc;T#S;#{=KEw^Rz%eg1 zPmlE{W|J;bq6b-sSYV@Wz$0-x`CTm`&Vg-grIUk8iA%AZXFKfRFxao)c+|%@D->KM zx+A73hJjWRk=y2KW3#F5hBEH@cb`0Ys}feP2pPwGWv_nfuH8Wx;x+3i$MSjanIr5o z2Vt{7?;qnuH($P<`^VkX-~G)O(+mh(+V%Du>B|K}C`V-vLc9IYpMUC|eBLwgnpjy$ zl}e=YT){<$IF?w3>K4FA6)wgXtX%f)maf4z?5UvEh1P9CZhTE_O2nt7AeX zqtu`8SKsX_n`0gQ0Y|{z+j@C)JZ9XnJ|H9P^aeT0`*yOgNq-?(mB%IP!gO(hN0_C; zRJ68sARc-%>#me^NS%cnNVtLaSP74UYfLgQV;gq2(uPiA?bD4zF+&2QWSM@9v)IR; zl-`y4e21#C(xWW~t&G^*)%o=>JieOgpb&VVjIfAq4o&XP?&dYeY^2thjs@->oC#00 zpQX>~#%B+cY4wDq{Ezz$lAq20O1M990V&K(cHn5Q>veF+IBz-fjIt~L%!$|VcS$n% zFi`00JCvbv^VTTE3PH0EyS;4>92{@U)s_b) z4b#GIYEed4KL}6Vupmb-b;a_M-CMIwTwdQl@QY5oaAycM6R+fA%B82{#OjWNLCrIC zK;5Y}beO=T-5q>A&VO-ElmUVPSR7+@cLSpA!7uqM)@H8N$+r61EI#m+_3l~x+so@d z1m+p#uAGsmo%tFV|I z%i}SX(H1&|3Tc|e83QSl(S$a$r1Duiq2x(L8kVxV>m$qi_*)}yuRn8j#tPJanE-~eqF-OZ3g1}ke z%m`{x)~W@TI7zLMP#UD}mqOP8wl^id)o)0;*Oo{1X_6?2@-#aE_Xx&IJJq6TI=iny zE3Q=|g$#)O!0xlGyp`v;B(EMii>em%YUG<}} zk-LwcEM8kPJ~Od!yg#?Pt1R!{&dXu<0=#mJzqr8~%*|QmtfCp+Ma3D##l_G(JZ{hj zC8zr_|5af={Y2tB&YhJ0AS z2&Rguu@3Rzxh$65EU3n|tv4_;3>kFnkT#?vX2*t$)U2R3ZD;hgDq#xZ=BUfMw!`oH zvlXxBb_?nDwm9t2S1d7u9TAbO;I)6|^+xfT@01*Z{fqNar%081SX!B4vUD9o8MFDr z(28TU)_3DEHRirn_W~w%_-}h7P_@q7zi-9xr(L{*rT(kkvTrgI_o$<8-AQ2%YuS@cUv{Nj~QI$n*9 z<&xSPiny2e78Ms27ekN0fXrE7$mh2m6BH>pL$fKWPK8JvsVb?><~Rg(MTZ&%8U(gU z1?m`iQISre>_gF)Z6{iPt1RC=@~r&#m=%M^#|aj>=HlnSsez9!5?T8F=JK6Pz(zDn z)U($-x?R$hf%XRAntp%QlbtOm&J*(cj_?Lga^5TZ@xnV<0YucfDz#PJH-nG<=>wPc zKSnPdSnx-WC_C~t@H}3!3jbMDzWFZc4M}J2oBpe+J#?74D_9*pn6STL_6I_2)n)m^ znIS>XoCiD8{Nj!68dz?Q%Ayo4CryElA3Cm>&e_@(M1PrasxJF1> z2}?8|BZ)j`eZF-5XTP~svtkJ~eidl#zNgjiEwjd_#jIYuHdC6Lvoh%-{LR9s@&g}_ zZ5Uk_mT+g{d;If_^p~<-C%$%m^4Zdl{cYaQ=K~#yzg)^X6O)(p^|MtBTpOH;8jQ~v zy0>{t)rc0~=Sm^hVcFX0ibXB2jg5^P%+U*6Q42JWWlm0102~7YwD?lz0jX#RUK-dG z&gC7u(c0Iq6R(#(5~J#8HQAClq2A4W3APb;)KS?I9QvlBu|~qG>5NKMc&HLvv}UhN zs$J=R?jRZ)TK(*rK$ZH04C~c};k6q{3T~6?WQ(m?s_mY3yNF#ym*0~thTh?5H=FL9 z*s%D{?9yAUg(=<_+RZloR{ZBO(@p0xzO^mKeOPgA$HzXCYpa4?_qLMphwkslT_Rc4 z>N-aIh|tZ&h)uxE=y=&uN!?1TZC01n-uqEOCw$+WkFtVd6^o^ZTHxwx5;0rjdPK-D z)!Y{j>9BNFvK)^~myC3FwqoMy*nFO{HjOJSDdec&0d4L5n1Pewx9JFMmv$(#RcHwa zmi-Us7(e|mf!rB3gCs#@N)QfBb;fLOW;53NS``Dir1Uwz$^FF?Gt4=>M5!n^B zH6uqt^h!qAe-d)$Ec`i7JN{+I7eqTe37!LA9KG<*5B{BbeolkW>}qmM_wPQPzcI4k zux*Ea!}LFruUM!&AP2mGc7jo-IXY>AFILHGIY!{{yIR$}BDhd=;ED^kO=yR68R_(~ zSESoXMBzhHw!OQvLZV<|Efq3yZDPfPn`IUW#SS=og%6to5`JA`5IA<~)Tu@`Y1;Q! z?hSMJ#~zivXG1^6^`2RO>BHh_q{laJ_OH41I1p@g+Ilp$@beJw>;gt36MDenK3+Zh z+Skuzdath*zp-vAr#~p$aH%=>#0~b*^{21?`YC_A!4dYS%NOF4T;?BJAC>r=V^ewp F{0E)bG4}uf literal 0 HcmV?d00001 diff --git a/mods/ENTITIES/mobs_mc/spider.lua b/mods/ENTITIES/mobs_mc/spider.lua index 0bb03a9c7..e1be9c3ed 100644 --- a/mods/ENTITIES/mobs_mc/spider.lua +++ b/mods/ENTITIES/mobs_mc/spider.lua @@ -3,7 +3,7 @@ --made for MC like Survival game --License for code WTFPL and otherwise stated in readmes -local S = minetest.get_translator("mobs_mc") +local S = minetest.get_translator(minetest.get_current_modname()) --################### --################### SPIDER @@ -13,20 +13,26 @@ local S = minetest.get_translator("mobs_mc") -- Spider by AspireMint (fishyWET (CC-BY-SA 3.0 license for texture) local spider = { + description = S("Spider"), type = "monster", spawn_class = "hostile", passive = false, + hostile = true, + always_climb = true, docile_by_day = true, - attack_type = "dogfight", - pathfinding = 1, + attack_type = "punch", + punch_timer_cooloff = 0.5, + rotate = 270, damage = 2, reach = 2, hp_min = 16, hp_max = 16, + ignores_cobwebs = true, xp_min = 5, xp_max = 5, + eye_height = 0.475, armor = {fleshy = 100, arthropod = 100}, - collisionbox = {-0.7, -0.01, -0.7, 0.7, 0.89, 0.7}, + collisionbox = {-0.45, 0, -0.45, 0.45, 0.9, 0.45}, visual = "mesh", mesh = "mobs_mc_spider.b3d", textures = { @@ -43,7 +49,7 @@ local spider = { distance = 16, }, walk_velocity = 1.3, - run_velocity = 2.8, + run_velocity = 2.75, --spider can become extremely difficult if any higher jump = true, jump_height = 4, view_range = 16, @@ -72,6 +78,7 @@ mobs:register_mob("mobs_mc:spider", spider) -- Cave spider local cave_spider = table.copy(spider) +cave_spider.description = S("Cave Spider") cave_spider.textures = { {"mobs_mc_cave_spider.png^(mobs_mc_spider_eyes.png^[makealpha:0,0,0)"} } -- TODO: Poison damage -- TODO: Revert damage to 2 @@ -87,7 +94,158 @@ cave_spider.sounds.base_pitch = 1.25 mobs:register_mob("mobs_mc:cave_spider", cave_spider) -mobs:spawn_specific("mobs_mc:spider", mobs_mc.spawn.solid, {"air"}, 0, 7, 30, 17000, 2, mobs_mc.spawn_height.overworld_min, mobs_mc.spawn_height.overworld_max) +mobs:spawn_specific( +"mobs_mc:spider", +"overworld", +"ground", +{ +"Mesa", +"FlowerForest", +"Swampland", +"Taiga", +"ExtremeHills", +"Jungle", +"Savanna", +"BirchForest", +"MegaSpruceTaiga", +"MegaTaiga", +"ExtremeHills+", +"Forest", +"Plains", +"Desert", +"ColdTaiga", +"MushroomIsland", +"IcePlainsSpikes", +"SunflowerPlains", +"IcePlains", +"RoofedForest", +"ExtremeHills+_snowtop", +"MesaPlateauFM_grasstop", +"JungleEdgeM", +"ExtremeHillsM", +"JungleM", +"BirchForestM", +"MesaPlateauF", +"MesaPlateauFM", +"MesaPlateauF_grasstop", +"MesaBryce", +"JungleEdge", +"SavannaM", +"FlowerForest_beach", +"Forest_beach", +"StoneBeach", +"ColdTaiga_beach_water", +"Taiga_beach", +"Savanna_beach", +"Plains_beach", +"ExtremeHills_beach", +"ColdTaiga_beach", +"Swampland_shore", +"MushroomIslandShore", +"JungleM_shore", +"Jungle_shore", +"MesaPlateauFM_sandlevel", +"MesaPlateauF_sandlevel", +"MesaBryce_sandlevel", +"Mesa_sandlevel", +"RoofedForest_ocean", +"JungleEdgeM_ocean", +"BirchForestM_ocean", +"BirchForest_ocean", +"IcePlains_deep_ocean", +"Jungle_deep_ocean", +"Savanna_ocean", +"MesaPlateauF_ocean", +"ExtremeHillsM_deep_ocean", +"Savanna_deep_ocean", +"SunflowerPlains_ocean", +"Swampland_deep_ocean", +"Swampland_ocean", +"MegaSpruceTaiga_deep_ocean", +"ExtremeHillsM_ocean", +"JungleEdgeM_deep_ocean", +"SunflowerPlains_deep_ocean", +"BirchForest_deep_ocean", +"IcePlainsSpikes_ocean", +"Mesa_ocean", +"StoneBeach_ocean", +"Plains_deep_ocean", +"JungleEdge_deep_ocean", +"SavannaM_deep_ocean", +"Desert_deep_ocean", +"Mesa_deep_ocean", +"ColdTaiga_deep_ocean", +"Plains_ocean", +"MesaPlateauFM_ocean", +"Forest_deep_ocean", +"JungleM_deep_ocean", +"FlowerForest_deep_ocean", +"MushroomIsland_ocean", +"MegaTaiga_ocean", +"StoneBeach_deep_ocean", +"IcePlainsSpikes_deep_ocean", +"ColdTaiga_ocean", +"SavannaM_ocean", +"MesaPlateauF_deep_ocean", +"MesaBryce_deep_ocean", +"ExtremeHills+_deep_ocean", +"ExtremeHills_ocean", +"MushroomIsland_deep_ocean", +"Forest_ocean", +"MegaTaiga_deep_ocean", +"JungleEdge_ocean", +"MesaBryce_ocean", +"MegaSpruceTaiga_ocean", +"ExtremeHills+_ocean", +"Jungle_ocean", +"RoofedForest_deep_ocean", +"IcePlains_ocean", +"FlowerForest_ocean", +"ExtremeHills_deep_ocean", +"MesaPlateauFM_deep_ocean", +"Desert_ocean", +"Taiga_ocean", +"BirchForestM_deep_ocean", +"Taiga_deep_ocean", +"JungleM_ocean", +"FlowerForest_underground", +"JungleEdge_underground", +"StoneBeach_underground", +"MesaBryce_underground", +"Mesa_underground", +"RoofedForest_underground", +"Jungle_underground", +"Swampland_underground", +"MushroomIsland_underground", +"BirchForest_underground", +"Plains_underground", +"MesaPlateauF_underground", +"ExtremeHills_underground", +"MegaSpruceTaiga_underground", +"BirchForestM_underground", +"SavannaM_underground", +"MesaPlateauFM_underground", +"Desert_underground", +"Savanna_underground", +"Forest_underground", +"SunflowerPlains_underground", +"ColdTaiga_underground", +"IcePlains_underground", +"IcePlainsSpikes_underground", +"MegaTaiga_underground", +"Taiga_underground", +"ExtremeHills+_underground", +"JungleM_underground", +"ExtremeHillsM_underground", +"JungleEdgeM_underground", +}, +0, +7, +30, +17000, +2, +mobs_mc.spawn_height.overworld_min, +mobs_mc.spawn_height.overworld_max) -- spawn eggs mobs:register_egg("mobs_mc:spider", S("Spider"), "mobs_mc_spawn_icon_spider.png", 0) diff --git a/mods/ENTITIES/mobs_mc/squid.lua b/mods/ENTITIES/mobs_mc/squid.lua index 1877a2104..ccd73296a 100644 --- a/mods/ENTITIES/mobs_mc/squid.lua +++ b/mods/ENTITIES/mobs_mc/squid.lua @@ -4,9 +4,10 @@ --################### SQUID --################### -local S = minetest.get_translator("mobs_mc") +local S = minetest.get_translator(minetest.get_current_modname()) mobs:register_mob("mobs_mc:squid", { + description = S("Squid"), type = "animal", spawn_class = "water", can_despawn = true, @@ -16,6 +17,8 @@ mobs:register_mob("mobs_mc:squid", { xp_min = 1, xp_max = 3, armor = 100, + rotate = 270, + tilt_swim = true, -- FIXME: If the squid is near the floor, it turns black collisionbox = {-0.4, 0.0, -0.4, 0.4, 0.9, 0.4}, visual = "mesh", @@ -47,8 +50,7 @@ mobs:register_mob("mobs_mc:squid", { }, visual_size = {x=3, y=3}, makes_footstep_sound = false, - fly = true, - fly_in = { mobs_mc.items.water_source, mobs_mc.items.river_water_source }, + swim = true, breathes_in_water = true, jump = false, view_range = 16, @@ -62,7 +64,158 @@ mobs:register_mob("mobs_mc:squid", { local water = mobs_mc.spawn_height.water --name, nodes, neighbours, minlight, maxlight, interval, chance, active_object_count, min_height, max_height -mobs:spawn_specific("mobs_mc:squid", mobs_mc.spawn.water, {mobs_mc.items.water_source}, 0, minetest.LIGHT_MAX+1, 30, 5500, 3, water-16, water) +mobs:spawn_specific( +"mobs_mc:squid", +"overworld", +"water", +{ +"Mesa", +"FlowerForest", +"Swampland", +"Taiga", +"ExtremeHills", +"Jungle", +"Savanna", +"BirchForest", +"MegaSpruceTaiga", +"MegaTaiga", +"ExtremeHills+", +"Forest", +"Plains", +"Desert", +"ColdTaiga", +"MushroomIsland", +"IcePlainsSpikes", +"SunflowerPlains", +"IcePlains", +"RoofedForest", +"ExtremeHills+_snowtop", +"MesaPlateauFM_grasstop", +"JungleEdgeM", +"ExtremeHillsM", +"JungleM", +"BirchForestM", +"MesaPlateauF", +"MesaPlateauFM", +"MesaPlateauF_grasstop", +"MesaBryce", +"JungleEdge", +"SavannaM", +"FlowerForest_beach", +"Forest_beach", +"StoneBeach", +"ColdTaiga_beach_water", +"Taiga_beach", +"Savanna_beach", +"Plains_beach", +"ExtremeHills_beach", +"ColdTaiga_beach", +"Swampland_shore", +"MushroomIslandShore", +"JungleM_shore", +"Jungle_shore", +"MesaPlateauFM_sandlevel", +"MesaPlateauF_sandlevel", +"MesaBryce_sandlevel", +"Mesa_sandlevel", +"RoofedForest_ocean", +"JungleEdgeM_ocean", +"BirchForestM_ocean", +"BirchForest_ocean", +"IcePlains_deep_ocean", +"Jungle_deep_ocean", +"Savanna_ocean", +"MesaPlateauF_ocean", +"ExtremeHillsM_deep_ocean", +"Savanna_deep_ocean", +"SunflowerPlains_ocean", +"Swampland_deep_ocean", +"Swampland_ocean", +"MegaSpruceTaiga_deep_ocean", +"ExtremeHillsM_ocean", +"JungleEdgeM_deep_ocean", +"SunflowerPlains_deep_ocean", +"BirchForest_deep_ocean", +"IcePlainsSpikes_ocean", +"Mesa_ocean", +"StoneBeach_ocean", +"Plains_deep_ocean", +"JungleEdge_deep_ocean", +"SavannaM_deep_ocean", +"Desert_deep_ocean", +"Mesa_deep_ocean", +"ColdTaiga_deep_ocean", +"Plains_ocean", +"MesaPlateauFM_ocean", +"Forest_deep_ocean", +"JungleM_deep_ocean", +"FlowerForest_deep_ocean", +"MushroomIsland_ocean", +"MegaTaiga_ocean", +"StoneBeach_deep_ocean", +"IcePlainsSpikes_deep_ocean", +"ColdTaiga_ocean", +"SavannaM_ocean", +"MesaPlateauF_deep_ocean", +"MesaBryce_deep_ocean", +"ExtremeHills+_deep_ocean", +"ExtremeHills_ocean", +"MushroomIsland_deep_ocean", +"Forest_ocean", +"MegaTaiga_deep_ocean", +"JungleEdge_ocean", +"MesaBryce_ocean", +"MegaSpruceTaiga_ocean", +"ExtremeHills+_ocean", +"Jungle_ocean", +"RoofedForest_deep_ocean", +"IcePlains_ocean", +"FlowerForest_ocean", +"ExtremeHills_deep_ocean", +"MesaPlateauFM_deep_ocean", +"Desert_ocean", +"Taiga_ocean", +"BirchForestM_deep_ocean", +"Taiga_deep_ocean", +"JungleM_ocean", +"FlowerForest_underground", +"JungleEdge_underground", +"StoneBeach_underground", +"MesaBryce_underground", +"Mesa_underground", +"RoofedForest_underground", +"Jungle_underground", +"Swampland_underground", +"MushroomIsland_underground", +"BirchForest_underground", +"Plains_underground", +"MesaPlateauF_underground", +"ExtremeHills_underground", +"MegaSpruceTaiga_underground", +"BirchForestM_underground", +"SavannaM_underground", +"MesaPlateauFM_underground", +"Desert_underground", +"Savanna_underground", +"Forest_underground", +"SunflowerPlains_underground", +"ColdTaiga_underground", +"IcePlains_underground", +"IcePlainsSpikes_underground", +"MegaTaiga_underground", +"Taiga_underground", +"ExtremeHills+_underground", +"JungleM_underground", +"ExtremeHillsM_underground", +"JungleEdgeM_underground", +}, +0, +minetest.LIGHT_MAX+1, +30, +5500, +3, +water-16, +water+1) -- spawn eggs mobs:register_egg("mobs_mc:squid", S("Squid"), "mobs_mc_spawn_icon_squid.png", 0) diff --git a/mods/ENTITIES/mobs_mc/textures/mobs_mc_ghast_firing.png b/mods/ENTITIES/mobs_mc/textures/mobs_mc_ghast_firing.png new file mode 100644 index 0000000000000000000000000000000000000000..3e5b41c32710a811ff75aa6a349bf4944294aaf0 GIT binary patch literal 1532 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 N9UWusdQF$O{{h^3qk{kd literal 5972 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 diff --git a/mods/ENTITIES/mobs_mc/textures/mobs_mc_horse_zombie.png b/mods/ENTITIES/mobs_mc/textures/mobs_mc_horse_zombie.png deleted file mode 100644 index 846769e2378b7eae0114ce99f2e5654daa364b45..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 11350 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 literal 0 HcmV?d00001 diff --git a/mods/ENTITIES/mobs_mc/textures/mobs_mc_llama_decor_cyan.png b/mods/ENTITIES/mobs_mc/textures/mobs_mc_llama_decor_cyan.png new file mode 100644 index 0000000000000000000000000000000000000000..83f7a8faa17d54d5e7402e7d6e94e18f50e27401 GIT binary patch literal 7612 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 literal 0 HcmV?d00001 diff --git a/mods/ENTITIES/mobs_mc/textures/mobs_mc_llama_decor_green.png b/mods/ENTITIES/mobs_mc/textures/mobs_mc_llama_decor_green.png new file mode 100644 index 0000000000000000000000000000000000000000..c3297ce9424cbcc9d6f40928e2c1f6ad9e6f13a2 GIT binary patch literal 5809 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 literal 0 HcmV?d00001 diff --git a/mods/ENTITIES/mobs_mc/textures/mobs_mc_llama_decor_light_blue.png b/mods/ENTITIES/mobs_mc/textures/mobs_mc_llama_decor_light_blue.png new file mode 100644 index 0000000000000000000000000000000000000000..71eabea5365dd02619695bfe447b7a327758b534 GIT binary patch literal 7643 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 literal 0 HcmV?d00001 diff --git a/mods/ENTITIES/mobs_mc/textures/mobs_mc_llama_decor_light_gray.png b/mods/ENTITIES/mobs_mc/textures/mobs_mc_llama_decor_light_gray.png new file mode 100644 index 0000000000000000000000000000000000000000..929a6095072b637a445ab8dc122209208b262619 GIT binary patch literal 6354 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 DvSSw9 literal 0 HcmV?d00001 diff --git a/mods/ENTITIES/mobs_mc/textures/mobs_mc_llama_decor_lime.png b/mods/ENTITIES/mobs_mc/textures/mobs_mc_llama_decor_lime.png new file mode 100644 index 0000000000000000000000000000000000000000..1507d6d7956e15fe5190684a3a34df54e1db2444 GIT binary patch literal 7388 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 Lid3zHX~_QoDQo#C literal 0 HcmV?d00001 diff --git a/mods/ENTITIES/mobs_mc/textures/mobs_mc_llama_decor_magenta.png b/mods/ENTITIES/mobs_mc/textures/mobs_mc_llama_decor_magenta.png new file mode 100644 index 0000000000000000000000000000000000000000..809e645fb6a872106d5ffdd1a731c564bc79756a GIT binary patch literal 7352 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 Ls>)PKnfU!5Wd#{H literal 0 HcmV?d00001 diff --git a/mods/ENTITIES/mobs_mc/textures/mobs_mc_llama_decor_orange.png b/mods/ENTITIES/mobs_mc/textures/mobs_mc_llama_decor_orange.png new file mode 100644 index 0000000000000000000000000000000000000000..ff17ff67c3f1903f27f80c44224f283c98803e23 GIT binary patch literal 7396 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 MtALdo6(O+y1O7G#1ONa4 literal 0 HcmV?d00001 diff --git a/mods/ENTITIES/mobs_mc/textures/mobs_mc_llama_decor_pink.png b/mods/ENTITIES/mobs_mc/textures/mobs_mc_llama_decor_pink.png new file mode 100644 index 0000000000000000000000000000000000000000..7009e6efc5d29ab14705578dab4f9cfbc481f759 GIT binary patch literal 7732 zcmb7{WltPVw8nRFDGL-Ywz#{yyKAu)hvII<7h0@9`9pCpy128ryF+oeMT=Xp%YAV_ zz|G{GNuEq{GLz?=%r8n)T>%T@0|o#9z*16_)qdMU-a--$2bdcWhtz zz-1opsoj`8#;W4;&yIgx-M~Y)pI!nE&Rn#Ev9DjYExS&57}ig!Vs-<*X2qZV3OBD3 zaPoX;nM?aTcvG|ca+!}aBk4*-iRuNbQ50sN(RxuG(#`vw? zF|GFcR)vQIG_}X?Tm@iF`AEI^5(WJTdX+m*?5G-&=&NnF?91qUqMq*ry0;|^;idO9*|b)UaP?aK+Mhhdvv8yB zET7c}{gbganv|j;v+3EVGKG5$)0bhI%$=Ip>98f!8jDZEEGgE$`%k~h6ct6!+WwGk z#t(`-Pp0(b>kgZ>oBwsx%z5}=F@ImtcscH|-!gLXEt=S>6BR5w_Q_Cn%xcq)YhiJl zhDqs1Uri#|dM_?k3B{tqu5L(|I~}xr*_Lr*Y{!N{XX+E<4L9rIfgrqI1j|s!dbeLBqSG;D$DasAwg`dJ7$;JmQNJA1w=L+tJ1B$q$O^ThljI|x- z=umGH76jBM~w=VMoF*S0tvI|sOhr!&rt@J2S!gkXlr@6L$Z zKdP8;$!$k7{1-pJa<#^v7K-R<%6=R}lKmyphIk!qvX}%=?w`cbx)v&7>7sKblVpLy zVYBxUYUgXaeR7U2B!B7$4yl!weD~42?aUW=nfA76{Mxl^|0|ut!1Vs` z(wt4$e+VM6tp~Z6K$S^bwxD*NP(l^m71q{Ci>n7&x$HT*a&*qoFJlIYU(8gBdTU_z z1>E2YZ$reVEPjv|Pp#fmr=@dS&j%f)-w6wca;`Ety=2F35bL_~171dl6I-Lqq*gh$ zx~6gY(!u#I)s;b-MCdIK13n@4J3FDpek?~pWOqR=5k9oxrWzD~Fk3OhY9&Ta4@R(>6+sMl=n>N+t;HF1bqLisgY9>S7{?qN%jfU?cgj(Ew(xB|dE~kN z-Eh(+8Wl~cvd3z6MgsX_3`E24Rt&EVT{jbIH~nfTa<#ATzR}2(pkKenX61T)ja54R z{o(wJnax}X%N8N?pfIVjWm5;^9W}z_{IsR6rSD&`qtklu%0{lB z&oW?I^@ie>pY+w2Jb$PG8>fxC=ErJsVrf_pJ8hLrXE^&GM}mTeIHcr-S`>S)%kTZP z9R5J21`FYrpX=WX!z=(tp;HJT)t=lCWMIi;o54zY=sYeM0-5_%Y#{{5@T2Y`zM@$w zmKv^Djq5U@w=XZnvEy`8!FgZb{Q1Tt{8HRGT;YXb#Tg9a-9G6R5q-rdf{-LB%jIe0I;+ z>?}4xP1hmm&)^U(@RD6f&^bo>*6MxQTHP3{+TZhPG?xJpJ55UthR{uiO zWzQ}_D(m<|{9ib24Y&jYEuYaqO=+*$FqKM=$`mufO5zYLphDfEoKVMyKBeXCKjFLX zOumzmqU0Lv@eJpp3Y=)MbsIYY2M=o;G=~`R@5XA8Y?&?jbw6XAjP&S#E&B*8wg6w3 zd9|xz4jsB!q@6tC)WW#=CVv|bA-)hC6LcplStHc|jE$xuJ(XWX=MZ)bmq)3BR8YDfdB0CLm~Q5>W8z%oSQm$WX@6Jn z_^$GY?}xO$Uy5v;Y00FahV5q69diiAh&{6-nbU)(=dsk}xm9`62PEACWxsiwTMiPw zmDD&yb{L{hYie$XlP(e_>2=cZ(G*Ha)MCPecDePWl1=yZ#86MQr0@ zMMlyQb&S;b14)Pu4hN>}CYNlpamc-yTX>JT0UHjDu)c-)c&ctB0meuH7%?HRe%f

PHw0gB&16YXKQq@u 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