Compare commits

...

971 Commits

Author SHA1 Message Date
Thndr 7f0ddeb977 Upload files to 'tools' 2019-03-10 17:15:01 +00:00
Thndr 1bd68ed5e9 Upload files to 'tools' 2019-03-10 14:36:07 +00:00
Thndr 5bc542df78 Upload files to 'tools' 2019-03-10 06:15:21 +00:00
Thndr ab996632c4 Upload files to 'tools' 2019-03-10 06:12:31 +00:00
Thndr f3ccef05c5 Upload files to 'tools' 2019-03-08 22:19:54 +00:00
Thndr 09eaa443d7 Update conversion_table.csv
Added in Source/Target game columns. At the moment using GAMENAME(game/mod name) eg Minecraft(base) Minetest(MineClone2)
2019-03-08 19:56:39 +00:00
Thndr 31b7e406d2 Updating conversion CSV with unique names per line
In order to prepare the dataset for being used in a more comprehensive conversion tool, the CSV must have a unique name per object/line to ensure that every object that needs a texture, even if a duplicate from already existing textures, is accounted for.
2019-03-08 01:11:22 +00:00
Wuzzy 3cfdb85926 New translation system, part 11: Redstone 2019-03-08 01:07:41 +01:00
Wuzzy 44fcf6eb34 New translation system, part 10: Armor 2019-03-08 00:51:45 +01:00
Wuzzy f9b557c2ba New translation system, part 9: Items, part 5 2019-03-08 00:46:35 +01:00
Wuzzy 47c817d75a New translation system, part 8: Items, part 4 2019-03-08 00:22:28 +01:00
Wuzzy a29626881f New translation system, part 7: Items, part 3 2019-03-08 00:00:09 +01:00
Wuzzy e4fbbeddb2 New translation system, part 6: Items, part 2 2019-03-07 23:40:57 +01:00
Wuzzy 1df3d0e42b Fix some PseudRandom weirdness in mcl_structures 2019-03-07 22:03:34 +01:00
Wuzzy 1cb142ec5f Fix crasher in mcl_inventory 2019-03-07 22:01:45 +01:00
Wuzzy 342202c979 New translation system, part 5: Items, part 1 2019-03-07 21:36:21 +01:00
Wuzzy 0cc038c545 New translation system, part 4: Misc/Player 2019-03-07 21:36:06 +01:00
Wuzzy 0d6610dcee New translation system, part 3: HUD 2019-03-07 21:36:06 +01:00
Wuzzy d691490016 New translation system, part 2: Environment, help 2019-03-07 21:36:00 +01:00
Wuzzy 1217d9fa88 New translation system, part 1: entities 2019-03-07 20:43:39 +01:00
Wuzzy e0418553a6 Version 0.49.0 2019-03-07 13:51:21 +01:00
Wuzzy 3edf880301 Add minimal formspec prepend 2019-03-07 13:05:26 +01:00
Wuzzy a84f7935fa Revert "Utilize formspec prepend"
This reverts commit ea0c2e9568.
2019-03-07 12:42:08 +01:00
Wuzzy 26c9150591 Revert "Use formspec prepend for real"
This reverts commit 3ca01c3149.
2019-03-07 12:42:06 +01:00
Wuzzy 720bc6a56f Revert "Move mcl_formspec_prepend"
This reverts commit 581f0fa2dd.
2019-03-07 12:41:59 +01:00
Wuzzy dcba7e2325 Del. unneeded doc_identifier support 4 armorstand 2019-03-07 04:04:21 +01:00
Wuzzy 66c6b373a5 Make many entities non-pointable 2019-03-07 03:53:06 +01:00
Wuzzy 7ca999626d Restrict v6 generation of ice spikes to snow block 2019-03-06 23:17:06 +01:00
Wuzzy 5e5dcfaaa3 Tweak scrollbar in creative inventory 2019-03-06 08:40:04 +01:00
Wuzzy 05e3a616b4 Fix broken skin init 2019-03-06 07:49:14 +01:00
Wuzzy cfac33a94f Fix settable hand 2019-03-06 07:32:22 +01:00
Wuzzy 581f0fa2dd Move mcl_formspec_prepend 2019-03-06 07:32:13 +01:00
Wuzzy 0b9c0d177c Fix bug in mcl_player.player.get_preview 2019-03-06 07:15:53 +01:00
Wuzzy 3ca01c3149 Use formspec prepend for real 2019-03-06 06:38:25 +01:00
Wuzzy ea0c2e9568 Utilize formspec prepend 2019-03-06 06:35:24 +01:00
Wuzzy 98b3003e07 Fix mcl_meshhand race condition 2019-03-06 06:25:03 +01:00
Wuzzy c4558a31ab Update modpack meta files (MT 5.0.0) 2019-03-06 05:52:31 +01:00
Wuzzy 2b3922c972 Replace deprecated player attribute calls 2019-03-06 05:45:16 +01:00
Wuzzy 4c8433b41c Fix clouds speed parameter (MT 5.0.0) 2019-03-06 05:21:05 +01:00
Wuzzy 149d1450ef Remove console spam from mcl_loot 2019-03-06 05:14:31 +01:00
Wuzzy a9776814a6 Fix player attachment offsets 2019-03-06 05:11:49 +01:00
Wuzzy 4f8377b161 Fix warning in tsm_railcorridors 2019-03-06 05:07:42 +01:00
Wuzzy 2f74aea6f5 Replace deprecated functions 2019-03-06 04:38:57 +01:00
Wuzzy b31a717410 Fix player model for MT 5.0.0 2019-03-06 04:10:40 +01:00
Wuzzy 08d3df10d4 Version 0.48.0 2019-03-06 03:41:03 +01:00
Wuzzy a1c0a1f82f Harden mcl_skins against missing metadata 2019-03-05 14:46:19 +01:00
Wuzzy 918c408e4d mcl_skins now obeys file name conventions 2019-03-05 14:26:44 +01:00
Wuzzy 9e84763478 mcl_skins: USe fallback if no preview img 2019-03-05 14:19:57 +01:00
Wuzzy 35bafb2aeb Skin button cycle skins if low skin count 2019-03-05 14:00:15 +01:00
Wuzzy c84656f85a Add fancy GUI to select skin 2019-03-05 13:50:35 +01:00
Wuzzy 9a54383a23 Add mesh hand 2019-03-05 11:45:54 +01:00
Wuzzy 62eaf60938 mcl_skins: Add fallback code if skin was missing 2019-03-05 10:57:57 +01:00
Wuzzy 5601f8e0b7 Rename some files 2019-03-05 10:45:14 +01:00
Wuzzy b2c19d9ec6 mcl_skins: Fix attribute name 2019-03-05 10:44:10 +01:00
Wuzzy 788ecbf178 Update mcl_skins readme 2019-03-05 10:40:37 +01:00
Wuzzy aae30bba39 Rename simple_skins to mcl_skins 2019-03-05 10:36:53 +01:00
Wuzzy e47bd634d4 Player skins: Update inventory preview (part 2) 2019-03-05 10:30:34 +01:00
Wuzzy 2c5038ad05 Player skins: Adjust inventory preview image, too 2019-03-05 01:50:51 +01:00
Wuzzy a4d40560c3 Replace damage sound to something gender-neutral 2019-03-05 00:15:48 +01:00
Wuzzy 62e3a8b9ff Add player skin support, add female skin 2019-03-05 00:11:43 +01:00
Wuzzy c19e3f455c Version 0.47.1 2019-03-04 06:08:44 +01:00
Wuzzy 94591c8b52 Fix crash when dig banner in protected area 2019-03-04 06:07:44 +01:00
Wuzzy 47389902bc Version 0.47.0 2019-03-01 18:33:56 +01:00
Wuzzy d367a8dbad Update banner comment 2019-03-01 18:32:10 +01:00
Wuzzy 477aa07822 Add experimental setting: fallen logs 2019-03-01 18:08:28 +01:00
Wuzzy 03c6beb971 Remove mcl_imitation_mode 2019-03-01 18:04:43 +01:00
Wuzzy ab91971398 Increase pattern layer limit to 12 2019-03-01 17:53:21 +01:00
Wuzzy dca095171c Restrict banner layers to 3 if has a gradient 2019-03-01 17:48:00 +01:00
Wuzzy c6111039ab Fix annoying drops when digging banner in creative 2019-03-01 17:31:31 +01:00
Wuzzy a711c7bdb7 handle_node_drops no longer destroys metadata 2019-03-01 17:30:21 +01:00
Wuzzy 19b1cf5986 More robust initialization of chests of structs 2019-02-28 18:19:57 +01:00
Wuzzy 1daf9b7a59 Put treasure loot into random inventory slots 2019-02-28 18:00:17 +01:00
Wuzzy 7851cee45e Fix exhauston for attacking and taking dmg 2019-02-28 16:43:52 +01:00
nickolas360 6497916ade Fix spawning at bed when chunk is unloaded 2019-02-28 15:35:18 +01:00
Wuzzy 1044e96909 Add tool groups (pickaxe, shovel, ...) 2019-02-25 17:46:49 +01:00
Wuzzy 1556e6cb3e Ice: Use after_dig_node instead of after_destruct 2019-02-22 06:13:31 +01:00
Wuzzy 6e8be2a2c3 Fix vine not dropping all vines when dug w/ shears 2019-02-22 06:08:48 +01:00
Wuzzy e614f9228a Version 0.46.0 2019-02-21 23:08:51 +01:00
Wuzzy 236ef99359 Add hard limits to book title and book text length 2019-02-21 18:08:30 +01:00
Wuzzy 93c087997f Add /lightning command 2019-02-21 03:36:02 +01:00
Wuzzy 31668cdde5 Add brown mooshroom 2019-02-21 02:38:33 +01:00
Wuzzy 0085122028 Slightly rewrite a bed formspec string 2019-02-20 21:09:04 +01:00
Wuzzy 99741f3d2a Beds: Update formspecs when player leaves/joins 2019-02-20 21:03:25 +01:00
Wuzzy 686b575f81 Beds: Fix player model offset when laying down 2019-02-20 20:59:01 +01:00
Wuzzy 7678a1a95f Beds: Fix kick_players_afeter_destruct 2019-02-20 20:52:06 +01:00
Wuzzy 8c672fa3b2 Tweak messages in mcl_beds 2019-02-20 20:45:55 +01:00
Wuzzy 88872c8ce2 Can't sleep in occupied beds 2019-02-20 20:40:06 +01:00
Wuzzy 079b09c80f Explicit msgs when respawn pos changed due to bed 2019-02-20 19:43:02 +01:00
Wuzzy ec53db9352 Beds can save spawn pos at daytime, too 2019-02-20 19:22:24 +01:00
Wuzzy 0cc8962258 Fix stuck player if server shuts down during sleep 2019-02-20 18:21:08 +01:00
Wuzzy f18b1bd52a Kick player out of bed when bed destroyed 2019-02-20 18:01:21 +01:00
Wuzzy 942b9468ff Simplify bed help a bit 2019-02-20 17:45:35 +01:00
Wuzzy b481eadafd Beds: Show message when night skip is disabled 2019-02-20 17:32:22 +01:00
Wuzzy cb2978470c Improve bed formspec 2019-02-20 17:11:45 +01:00
Wuzzy 3b8fe6039e Don't skip night if not all players are asleep 2019-02-20 16:18:13 +01:00
Wuzzy 8982e368ec Abort sleep if taking damage 2019-02-20 16:09:39 +01:00
Wuzzy 38f6804a79 Update tsm_railcorridors to 0.14.0 2019-02-19 20:16:12 +01:00
Wuzzy c1bc7a8fae Chorus fruit keeps u safe from damaging blocks 2019-02-19 03:42:50 +01:00
Wuzzy a1ce94eee5 Add comment to mcl_itemframes 2019-02-19 00:06:47 +01:00
Wuzzy e5c78973b0 Respawn mobspawner doll on load, if gone mobspawner doll on load, if gone mobspawner doll on load, if gone mobspawner doll on load, if gone 2019-02-19 00:06:14 +01:00
Wuzzy e332c64d2a Respawn armor entity of armor stand on load 2019-02-18 23:56:11 +01:00
Wuzzy 267a697fab Banners: Respawn entity if it got lost
Entity is respawned on load (in an LBM) or when the banner node is punched.
Also, the banner drop is now handled in the node instead of the entity.
2019-02-18 23:32:18 +01:00
Wuzzy eb7c8371ac Respawn itemframe entities on load 2019-02-18 21:58:31 +01:00
Wuzzy 198adcc740 Respawn sign text on load 2019-02-18 21:58:17 +01:00
Wuzzy 37b9a8f6bf Fix incorrect text rotation when sign text updates 2019-02-18 20:59:25 +01:00
Wuzzy d0e3862356 Fix bad wall sign text update after punch 2019-02-18 20:52:44 +01:00
Wuzzy 46a6d9bb8e Signs: Remove dead code 2019-02-18 20:14:30 +01:00
Wuzzy aa3739528b Fix weird arguments given to is_protected 2019-02-11 21:27:17 +01:00
Wuzzy dee5f3bda6 Version 0.45.1 2019-02-11 20:04:30 +01:00
Wuzzy 0f134426e8 Fix protection-related crash when taking liquid 2019-02-11 20:03:56 +01:00
Wuzzy f985aab191 Version 0.45.0 2019-02-11 18:58:14 +01:00
Wuzzy 2d721a98cb Call on_drop for dropped items on player death
Fixes charged bow dropping on death
2019-02-11 18:55:48 +01:00
Wuzzy 2ffd16377b Update playerphysics README 2019-02-11 17:48:49 +01:00
Wuzzy 1cbbe8f4b1 Refactor playerphysics init 2019-02-11 17:45:42 +01:00
Wuzzy 49949e2f36 Don't allow to go to bed while player moves 2019-02-11 16:14:08 +01:00
Wuzzy 5a7952bf92 Set mob spawn chance to 2.5 and fix player respawn msg 2019-02-11 15:51:30 +01:00
Wuzzy 9e57828958 Add tileable_vertical to covered dirt nodes 2019-02-09 21:28:53 +01:00
Wuzzy e28f213f9a Add workaround to fix broken double plants in v6 2019-02-09 06:08:35 +01:00
Wuzzy e89a01630b Remove misunderstood replacements from decorations
I thought it would replace nodes on the map, but it turned it it replaces nodes from the schematic definition.
2019-02-09 04:32:55 +01:00
Wuzzy d50ff26118 Rename setting: mob_spawn_multiplier → mobs_spawn_chance 2019-02-09 03:11:15 +01:00
Wuzzy 3ec7914962 Allow to use Minetest's original flat mapgen again 2019-02-09 03:07:18 +01:00
Wuzzy 3ba4aabbcf Check for protection when using anvil formspec 2019-02-09 00:17:25 +01:00
Wuzzy 986871f2b5 No replace empty bottle if used on src in creative 2019-02-09 00:05:00 +01:00
Wuzzy 5b0945b88c Don't change water bottles when using in creative 2019-02-08 23:55:49 +01:00
Wuzzy 46c7413337 Bucket dispensers now ignore protection
Otherwise, it bucket dispensers would not work on your own property.
2019-02-08 23:29:12 +01:00
Wuzzy b729ffc604 Spawning fire now respects protection 2019-02-08 23:17:20 +01:00
Wuzzy 9817b38904 Fix bucket crash 2019-02-08 23:17:08 +01:00
Wuzzy a7d429a017 Fix several "undeclared global" errors 2019-02-08 22:44:26 +01:00
Wuzzy fb3db5077c Fix slime code using nil arguments 2019-02-08 22:27:45 +01:00
Wuzzy 79e5a6dfa3 Fix typo in 3d_armor_stand 2019-02-08 22:23:26 +01:00
Wuzzy c141f4ece5 Mobspawners: Remove unused function 2019-02-08 22:20:58 +01:00
Wuzzy 9a3c6a3fd7 Protect: add bottles, mobspawner, fix repeater 2019-02-08 22:17:51 +01:00
Wuzzy 312b17a958 Check protection for most nodes 2019-02-08 21:59:01 +01:00
Wuzzy bcf7125f9d Fix mob items not working without maphack priv 2019-02-08 17:55:14 +01:00
Wuzzy cb8e3fcf82 Fix bone meal failing to grow crops when it's dark 2019-02-08 05:36:43 +01:00
Wuzzy 7d0c647e8b Comment on beetroot seed probability 2019-02-08 05:30:05 +01:00
Wuzzy 36060dfb6a Converter: Add preview image, use proper folder name 2019-02-07 22:40:11 +01:00
Wuzzy 729c176ff4 Texture Converter: Add description.txt 2019-02-07 21:24:19 +01:00
Wuzzy 058cb2f1ee Rename farmland textures because of MTG clash 2019-02-07 20:06:02 +01:00
Wuzzy 5897d07435 Don't show bed msg if player respawns w/o bed 2019-02-07 19:54:12 +01:00
Wuzzy cfdcd63f3c Change dye texture names of "special" dyes 2019-02-07 07:10:10 +01:00
Wuzzy 77709c8076 Disable fish achievement 2019-02-07 06:35:32 +01:00
Wuzzy d59d789c80 Put boat/minecart in inv when punched in creative 2019-02-06 21:56:52 +01:00
Wuzzy 4bd9be22e0 Apply eat effect when hunger disabled 2019-02-06 21:23:05 +01:00
Wuzzy 93c86207d9 Fix crash when using milk if damage is disabled 2019-02-06 20:04:45 +01:00
Wuzzy 371bc0cb76 Creative categories: book, chorusfruit, endpearl 2019-02-06 12:04:58 +01:00
Wuzzy 3976c7c4b9 Add doors and trapdoors to decoration blocks 2019-02-06 11:40:51 +01:00
Wuzzy 069f3591e2 Add mobs page in creative inventory 2019-02-06 11:31:04 +01:00
Wuzzy 27fa2c2e66 Clean up item categorization in creative inv. 2019-02-06 11:15:53 +01:00
Wuzzy 66c99efb2f Hide "useless" items from creative and craft guide 2019-02-06 10:57:23 +01:00
Wuzzy 37b9b6fbfc If mob jumped against wall 4 times, turn around 2019-02-06 08:51:09 +01:00
Wuzzy d4fe313077 Mobs: Fix line-of-sight handling (thanks, chon!) 2019-02-06 08:27:14 +01:00
Wuzzy b6c21ee841 Make in-water color less opaque 2019-02-06 08:08:51 +01:00
Wuzzy 62159b0aa0 Core mapgen: Extend some stuff to emin,emax 2019-02-06 04:32:20 +01:00
Wuzzy da625b569a Spawn minecarts in railcorridor chests 2019-02-06 03:00:45 +01:00
Wuzzy 9105f248b4 More secure igloo generation 2019-02-06 02:23:51 +01:00
Wuzzy 6ff637ec69 Add more igloo generation code 2019-02-06 02:02:18 +01:00
Wuzzy 0876e76b40 Fix crash when using chorus fruit on cake 2019-02-05 22:05:56 +01:00
Wuzzy 9ed83bd196 Drop food eating limits in Creative Mode 2019-02-05 21:51:40 +01:00
Wuzzy d9b6bae320 mcl_hunger: core.* → minetest.* 2019-02-05 21:14:28 +01:00
Wuzzy 0068508968 Don't add weapon wear in Creative Mode 2019-02-05 21:11:37 +01:00
Wuzzy 3563b5448c Slime: Don't add speed if mother was stuck 2019-02-05 21:02:36 +01:00
Wuzzy 958989c80d If slime/mcube was killd, smaller m. att. attacker
Previously, if you killed a big slime, the smaller slimes that spawn are neutral.
2019-02-05 20:49:34 +01:00
Wuzzy ca484cfa1a Improve child spawn on slime/magmacube death
No longer do children spawn in walls
2019-02-05 20:19:06 +01:00
Wuzzy 1c35828fa2 Fix stupid mob spawn height 2019-02-05 19:24:02 +01:00
Wuzzy cfd5615548 Spawn smaller slime/magmacube if it doesn't fit 2019-02-05 19:12:28 +01:00
Wuzzy b7a2fba1ce Fix spawn ABM check that prevented squid spawn 2019-02-05 17:43:18 +01:00
Wuzzy 64457b151c Improve free space checks on mob spawn 2019-02-05 17:05:40 +01:00
Wuzzy f63342ec72 Rename seed textures 2019-02-05 04:06:28 +01:00
Wuzzy 7437d3945b Forget spawn if bed was destroyed 2019-02-05 00:07:39 +01:00
Wuzzy 6faac04f0d Prevent sleeping if solid or damage block over bed 2019-02-04 17:53:30 +01:00
Wuzzy a11f6ffaac Don't respawn on bed if bed is missing or blocked 2019-02-04 16:58:28 +01:00
Wuzzy a285827980 Change powered rail texture names to fix MTG clash 2019-02-04 12:38:36 +01:00
Wuzzy 4f2cd559da Rename textures that clash with MTG
cactus, hotbar, some wools
2019-02-04 12:21:58 +01:00
Wuzzy f23fa236dd Update deprecated function call in mesecons_mvps 2019-02-02 00:13:18 +01:00
Wuzzy 6fbefaef09 Version 0.44.0 2019-02-01 22:18:47 +01:00
Wuzzy a918696509 Revert "Update fire help"
This reverts commit 954125f6e2.
2019-02-01 22:17:42 +01:00
Wuzzy 954125f6e2 Update fire help 2019-02-01 08:42:23 +01:00
Wuzzy 0586c0ea18 Destroy items in fire 2019-02-01 08:31:17 +01:00
Wuzzy 29040f9352 Add magma cube sounds 2019-02-01 08:13:45 +01:00
Wuzzy e789801662 Replace getpos() with get_pos() 2019-02-01 06:33:07 +01:00
Wuzzy 1f1361d179 Add paramtype="light" to lava ... 2019-02-01 06:23:12 +01:00
Wuzzy e64518dd24 Fix crash when creating Nether portal 2019-02-01 01:21:08 +01:00
Wuzzy 8ff69dda0c Despawn animals, too 2019-01-31 22:00:43 +01:00
Wuzzy 0a803400fe Mobs: Disable war_cry sound for now 2019-01-31 07:57:03 +01:00
Wuzzy 27823dbbb3 Remove frustration mob sound 2019-01-31 07:45:42 +01:00
Wuzzy 139b1000ff Implement mob suffocation 2019-01-31 07:23:35 +01:00
Wuzzy c9fb060ea0 Tweak zombie growl sound occurence 2019-01-31 07:20:51 +01:00
Wuzzy e1e7d5215e Add more mob sound cooloffs 2019-01-31 06:31:04 +01:00
Wuzzy 626f7f6e97 Delete senseless argument in minetest.remove_node 2019-01-31 05:32:10 +01:00
Wuzzy a2b39ed943 Mobs: Prevent jump sound spam 2019-01-31 02:44:05 +01:00
Wuzzy 7465d7a107 Fix stained glass not propagating sunlight 2019-01-30 04:54:30 +01:00
Wuzzy d34c48cb59 Insta-drop minecart when its rail is destroyed 2019-01-30 03:37:47 +01:00
Wuzzy 6748576f8e Increase minecart floating check timer 2019-01-30 03:37:23 +01:00
Wuzzy 1966d18586 Drop minecart as item if its not on a rail anymore 2019-01-30 03:16:59 +01:00
Wuzzy e42945a4e1 Minecarts: Reset eye offset when detaching player 2019-01-30 02:41:24 +01:00
Wuzzy 5a1cafa5dd Minecarts: Save _railtype in staticdata 2019-01-30 02:04:12 +01:00
Wuzzy b9c197565a Minecarts: Init _railtype on placement 2019-01-30 01:58:26 +01:00
Wuzzy b23b9a9395 Add silverfish sounds (thanks, Inocodum!) 2019-01-28 22:13:35 +01:00
Wuzzy c40cd5dbb7 Clarify official version support 2019-01-28 21:06:56 +01:00
Wuzzy 3bcc2c2693 Make mob knockback weaker 2019-01-28 00:55:41 +01:00
Wuzzy 8f7303d540 Lookup tool opens help page when using it on mobs 2019-01-28 00:04:12 +01:00
Wuzzy 2402507808 Restructure settingtypes.txt, add mob settings 2019-01-20 20:57:46 +01:00
Wuzzy 56ff8fbad5 Hide repair recipes if disable_repair=1 is set 2019-01-12 05:41:36 +01:00
Wuzzy 68c373d2b8 Add a couple of modpack.conf files 2019-01-07 00:52:05 +01:00
Wuzzy 907476fa86 Add game description 2019-01-07 00:44:26 +01:00
Wuzzy fa3fd68c8c Turn enderman to monster, but reduce view range 2018-12-22 14:29:45 +01:00
Wuzzy e1870c2808 Fix typo: Diamond Leggins 2018-12-17 01:57:25 +01:00
Wuzzy 037a8333a0 Version 0.43.0 2018-12-07 21:46:28 +01:00
Wuzzy 68eea10597 Update mcl_walls API docs 2018-12-07 21:43:12 +01:00
Wuzzy e38fadd863 Remove packed ice crafting recipe for now
Ice cannot be obtained legally yet (missing silk touch).
2018-12-07 21:37:52 +01:00
Wuzzy 502be105ac Apply disable_repair group 2018-12-07 21:25:15 +01:00
Wuzzy af3785021b Describe purpur_block group 2018-12-07 21:20:15 +01:00
Wuzzy 2ff1372b1e Fix nether brick fence crafting 2018-12-03 17:38:32 +01:00
Wuzzy 367469cf90 Simplify wall registration 2018-12-03 17:30:09 +01:00
Wuzzy 6fdf57d44f Move stuff from mclx_stairs to mcl_stairs 2018-12-03 17:24:44 +01:00
Wuzzy ff9032754a Add many more walls 2018-12-03 17:15:16 +01:00
Wuzzy c988665b5c Use word "Stairs" instead of "Stair" consistently 2018-12-03 16:50:12 +01:00
Wuzzy 5b6ae370e2 Make smooth stone cookable 2018-12-03 16:47:11 +01:00
Wuzzy b60c762ac3 Add more stairs/slabs
- andesite/diorite/granite
- stone (real stone texture)
- smooth sandstone/red sandstone/quartz
2018-12-03 16:43:23 +01:00
Wuzzy e4c5a78592 Use group:purpur to craft purpur stair/slab 2018-12-03 16:15:22 +01:00
Wuzzy ec8d43b4a3 Make packed ice craftable 2018-12-03 16:06:22 +01:00
Wuzzy 25b65e4b7d Remove tsm_railcorridors_probability_cart for now 2018-11-17 15:59:01 +01:00
Wuzzy 4703ca9ae6 Tweak inventory image of internal comparator items 2018-10-24 18:22:48 +02:00
Wuzzy b5f9a755b3 Tweak item names and images of farming plants 2018-10-24 18:16:39 +02:00
Wuzzy 001b0cc49f Update doc_items (fake items) 2018-10-24 01:46:43 +02:00
Wuzzy e09955f0fb Add description.txt for playerphysics 2018-10-23 18:58:23 +02:00
Wuzzy 45ce08b147 Mention playerphysics in API.md 2018-10-23 18:56:10 +02:00
Wuzzy 2ff543a7bc Add playerphysics version number 2018-10-23 18:53:36 +02:00
Wuzzy b076bafaa7 Rename mcl_playerphysics to playerphysics 2018-10-23 18:51:19 +02:00
Wuzzy e0fe5b2c66 Disable zombie war_cry sound for now 2018-10-23 17:34:01 +02:00
Wuzzy a88429a78e Fix missing zombie growl 2018-10-23 17:13:22 +02:00
Wuzzy 22f0cf1866 Version 0.42.1 2018-10-23 17:04:37 +02:00
Wuzzy d1fb01c2ff Fix crash if trading with cleric in non-v6 mapgen 2018-10-23 17:03:42 +02:00
Wuzzy 26838fb2d6 Version 0.42.0 2018-09-18 22:27:24 +02:00
Wuzzy 6dbbca4bec Fix mobs_mc_vex_death.ogg being stereo 2018-09-18 21:39:03 +02:00
Wuzzy 92dca4850a Add new cat/ocelot sounds 2018-09-18 21:21:05 +02:00
Wuzzy a3d798ca13 Fix mobs playing damage sound when they healed 2018-09-18 20:08:03 +02:00
Wuzzy 5d6d1cf790 Add bat sound 2018-09-18 19:46:44 +02:00
Wuzzy fd33d9d2ec Add creeper and vex sounds 2018-09-18 16:14:55 +02:00
Wuzzy 8b38a169e6 Add basic horse sounds 2018-09-18 14:49:28 +02:00
Wuzzy e422e47ada Add crazy coo hurt/death sounds 2018-09-14 17:37:24 +02:00
Wuzzy 900625b17b Add ghast shoot/death sound, add many sound TODOs 2018-09-14 16:27:58 +02:00
Wuzzy 7d66d5f2d3 Remove unused arrow code for wither skeleton 2018-09-14 16:08:32 +02:00
Wuzzy 26a5059cc0 Add bow shooting sound when mob fires an arrow 2018-09-14 16:07:22 +02:00
Wuzzy 077cd14f4f Add skeleton sounds 2018-09-14 15:58:31 +02:00
Wuzzy ad2fbb0008 Add some despawning logic (but do not enable despawning yet) 2018-09-14 14:48:48 +02:00
MysticTempest 67ebf3366f Make player sit in minecarts 2018-07-09 23:45:54 +02:00
MysticTempest 5d4b4b099c Fix snowman's head texture 2018-07-09 23:33:32 +02:00
Wuzzy 5e31db04d7 Version 0.41.3 2018-07-04 01:53:37 +02:00
Wuzzy ce04c81482 Fix another crash in mcl_mobs 2018-07-04 01:53:08 +02:00
Wuzzy 675185ac02 Version 0.41.2 2018-07-02 23:40:45 +02:00
Wuzzy f7227de6fa Local variable fix in mcl_mobs 2018-07-02 23:34:40 +02:00
Wuzzy 61c5c61e00 Fix crash when using nametag 2018-07-02 23:27:11 +02:00
Wuzzy b2fa90cae7 Update bug tracker URL (git.minetest.land) 2018-06-22 13:05:07 +02:00
Wuzzy a88f644001 Update deprecated settings syntax 2018-06-20 19:02:52 +02:00
Wuzzy 94d4ad99f4 Version 0.41.1 2018-06-18 13:13:34 +02:00
Wuzzy d34d368306 Disable double doors because of bug on place 2018-06-15 21:26:15 +02:00
Wuzzy fe60b2c8bb More Nether portal generating refactor stuff 2018-06-15 19:15:39 +02:00
Wuzzy c1614dabc5 Rewrite emerge algorithm of Netherportal gen. 2018-06-15 19:07:20 +02:00
Wuzzy f68e835087 Fix Nether portal not teleporting players anymore 2018-06-15 18:26:59 +02:00
Wuzzy 801e6fb1c4 Mesecons: Stop using deprecated settings syntax 2018-06-13 19:41:57 +02:00
Wuzzy 5c2dd37528 Fix crash if dropping charged bow 2018-06-13 17:20:10 +02:00
Wuzzy 857dddab3b Version 0.41.0 2018-06-12 16:20:00 +02:00
Wuzzy 2bb8b2c4e2 Fix undeclared global fail in villager.lua 2018-06-11 14:47:41 +02:00
Wuzzy a6bb31f2a6 Fix explo mobs destroy land if mobs_griefing=false 2018-06-10 16:09:28 +02:00
Wuzzy 45add3cedd Add creamy horse texture 2018-06-10 15:51:03 +02:00
Wuzzy fe0f4df958 Remove WIP mark from villagers 2018-06-10 15:32:50 +02:00
Wuzzy e051eae5bc Lightning no longer turns villagers to witches
Because witches are incomplete.
Also add villager TODOs.
2018-06-10 15:27:01 +02:00
Wuzzy a804144ed4 Trading: Make iron helmet cheaper 2018-06-10 15:09:52 +02:00
Wuzzy 9faa3099a4 Trader: Close trade formspec + return items on die 2018-06-10 15:01:44 +02:00
Wuzzy aa3d3969aa Make villager stand still if there is near player 2018-06-10 14:24:00 +02:00
Wuzzy dbed565197 Fix unlock_stuff being always false in villager 2018-06-10 13:53:26 +02:00
Wuzzy 51ff6b1725 Villager: Prevent locking of all trades
This is done by adding an "emergency unlock" which unlocks
everything else when the last trade was locked.
2018-06-10 13:49:35 +02:00
Wuzzy ed52e49408 Heal trader for unlocking trades 2018-06-10 13:20:19 +02:00
Wuzzy 3e8ca5a1ca Trading: Hide left/right button if end of list 2018-06-10 13:06:28 +02:00
Wuzzy cca841e459 Villager trading: Use per-player trading inventory 2018-06-10 12:15:09 +02:00
Wuzzy 9f2460c263 Make red sandstone trade earlier 2018-06-06 21:29:44 +02:00
Wuzzy ce7ac37e85 Add a few v6-exclusive trades to villagers 2018-06-06 21:28:23 +02:00
Wuzzy 5faed5d7f0 Add 2 crosses in trading formspec 2018-06-06 19:50:17 +02:00
Wuzzy 4d4374730e Trading: Allow to sell compass 2018-06-06 19:37:31 +02:00
Wuzzy 3823a6ba11 Add trade locking for villagers 2018-06-06 17:33:14 +02:00
Wuzzy 8b95871682 Implement trading tier unlocking 2018-06-06 16:34:44 +02:00
Wuzzy 1db3b079c6 Add disabled trade image 2018-06-06 14:39:16 +02:00
Wuzzy 2c55daa3e2 Change nitwit villager texture 2018-06-06 14:12:27 +02:00
Wuzzy 829ca1f1c1 Villager profession depends on clothes, add nitwit 2018-06-06 13:55:19 +02:00
Wuzzy f545af54c1 Disable buggy compass trade 2018-06-06 01:08:57 +02:00
Wuzzy 1c0e026259 Villager: Fix taking output sometimes destroy item 2018-06-06 00:45:30 +02:00
Wuzzy 3c4a1013b8 Villager: Prevent taking partial track from output 2018-06-06 00:16:25 +02:00
Wuzzy 7a080ac308 Fix up/down observers dropping themselves 2018-06-05 19:27:18 +02:00
Wuzzy 1e72dd6b33 More Texture Converter clarification 2018-06-05 02:03:07 +02:00
Wuzzy 58df62ec8c Add encoding definition to Texture Converter 2018-06-05 01:58:40 +02:00
Wuzzy 1752e29f2d Update Texture Converter README again 2018-06-05 01:58:23 +02:00
Wuzzy 309dc40484 Fix typos in Texture Converter 2018-06-05 01:53:59 +02:00
Wuzzy 0e00c85f99 Add README into tools directory 2018-06-05 01:44:57 +02:00
Wuzzy 64fe90257d Version 0.40.0 2018-06-04 22:27:03 +02:00
Wuzzy b504e8c317 Make trader warning less bright 2018-06-04 22:23:46 +02:00
Wuzzy 6e32d23d56 Add warnings and notes about trading implementation 2018-06-04 22:21:10 +02:00
Wuzzy a58a01040d Show villager name in trading formspec 2018-06-04 22:13:24 +02:00
Wuzzy 9bfa116794 Allow to select different trades 2018-06-04 21:46:13 +02:00
Wuzzy e9bcbe1ead Store available trades in villager entity 2018-06-04 21:07:12 +02:00
Wuzzy cc1fe2f14f Fix bread trade 2018-06-04 15:21:59 +02:00
Wuzzy 10e2c174d4 Pick random villager profession on spawn 2018-06-04 14:59:10 +02:00
Wuzzy f1dc75f097 Add lots of random trades for villagers 2018-06-04 14:36:06 +02:00
Wuzzy 7109db24c2 Trading: Reset inventory when closing formspec 2018-06-04 12:50:31 +02:00
Wuzzy a9cf744c0b Disable villager trading again 2018-06-04 01:20:24 +02:00
Wuzzy e5c7e50202 More villager fixing 2018-06-04 01:19:23 +02:00
Wuzzy 883568add4 Implement basic villager trading formspec 2018-06-03 18:37:53 +02:00
Wuzzy 2dbda44a93 Add some global spawn restrictions
- no monsters on mycelium
- nothing on non-opaque blocks, except air
2018-06-03 17:48:32 +02:00
Wuzzy f022b747b0 Harden a number of minetest.after player checks 2018-06-03 16:44:37 +02:00
Wuzzy 2132cdacc5 Improve minetest.after checks 2018-06-03 16:17:55 +02:00
Wuzzy 201c2bf170 Fix minetest.after crashes in mcl_mobs 2018-06-03 16:13:46 +02:00
Wuzzy 9c6f5b3573 Remove dead code in mcl_mobs 2018-06-03 00:56:29 +02:00
Wuzzy 1d04b52b5a Name tag: Update texture conversion and add alias 2018-05-31 18:40:02 +02:00
Wuzzy 34e92a361b Rename mobs mod to mcl_mobs 2018-05-31 18:32:26 +02:00
Wuzzy dafba9a07c Update global API.md wrt MRM 2018-05-31 18:04:07 +02:00
Wuzzy 4be664ab49 Rebranding of the mobs redo mod 2018-05-31 17:54:35 +02:00
Wuzzy 9afe5da7b4 Make sure bred pig and sheep stay tamed and owned 2018-05-31 17:32:13 +02:00
Wuzzy c55714ea0c Reduce dependencies of mcl_anvils 2018-05-31 15:18:48 +02:00
Wuzzy 2f0987b529 Move mcl_void_damage to ENVIRONMENT 2018-05-31 15:13:16 +02:00
Wuzzy d5729b8a32 Fix load-crash if _magnet_timer of item entity is uninizialized 2018-05-31 14:34:19 +02:00
Wuzzy 73dcf1e697 Randomly mutate foal fur/mark with 1/9 chance each 2018-05-31 14:05:45 +02:00
Wuzzy aeee941b2c Breeding sheep now mixes wool colors like dyes 2018-05-31 05:45:57 +02:00
Wuzzy e246b5d0bb Fix breeding giving weird childs 2018-05-31 04:38:37 +02:00
Wuzzy 97e550bb9f Can't shear lambs 2018-05-31 03:45:38 +02:00
Wuzzy 55beefa6c7 Fix wool regrow for sheep 2018-05-31 03:43:48 +02:00
Wuzzy 91b41885d5 Tweak blaze animation 2018-05-31 03:17:41 +02:00
Wuzzy 4513c6c35d Undead mobs take light damage only in sunlight 2018-05-31 03:09:27 +02:00
Wuzzy b73e05d64a Fix light_damage damaging mobs in rain/snow 2018-05-31 02:47:37 +02:00
Wuzzy eefd065726 New horse texturing (thanks to 22i) 2018-05-30 19:51:40 +02:00
Wuzzy 293caa511f Fix broken zombie villager texture conversion 2018-05-30 18:55:37 +02:00
Wuzzy 050987bead Add illagers to Conversion Table 2018-05-30 18:48:07 +02:00
Wuzzy 8b6f5d3dec Redo sheep texturing
Thanks to 22i
2018-05-30 18:05:49 +02:00
Wuzzy c10f4311f7 Update death animations of some mobs 2018-05-30 17:34:38 +02:00
Wuzzy 895d06d28a Update (wither) skeleton mesh and anim (thx 2 22i) 2018-05-30 17:11:07 +02:00
Wuzzy 5d92c04a36 Update Conversion Table 2018-05-30 17:02:28 +02:00
Wuzzy 328eb883ec Redo skeleton stray vex zombiepig meshes/textures
Thanks, 22i!
2018-05-30 16:59:27 +02:00
Wuzzy 6619cf159f New zombie pigman mesh by 22i 2018-05-30 16:41:28 +02:00
Wuzzy 635a9c45bd Enable wolf-on-sheep attack 2018-05-30 16:16:44 +02:00
Wuzzy 222f6880cb Protect doors from screwdriver rotation 2018-05-30 14:24:37 +02:00
Wuzzy 76c1c10a9b Tweak snowman animation params 2018-05-30 13:33:19 +02:00
Wuzzy 17b9bd27de Redo snowman texturing (thanks, 22i!) 2018-05-30 13:29:33 +02:00
Wuzzy b2d9c119ac Add mobs:spawn_child 2018-05-30 12:58:50 +02:00
Wuzzy 940b3748fb Fix horse child keeping horse armor of parent 2018-05-30 12:34:16 +02:00
Wuzzy 806e392d31 Fix child of saddled pigs getting saddle, too 2018-05-30 12:25:10 +02:00
Wuzzy d575cf07b7 Kill snow golems in rain 2018-05-30 12:01:53 +02:00
Wuzzy 69b3e19c1b Name tags now name all mobs (except ender dragon) 2018-05-30 11:34:17 +02:00
Wuzzy d0cdb0f390 Add fake_liquid group to cobweb 2018-05-29 20:11:27 +02:00
Wuzzy c1cc790d9d Update Mobs Redo (1.41) 2018-05-29 17:00:30 +02:00
Wuzzy 34292ece10 Fix minor texture fail for woodlike corner stair 2018-05-29 16:03:10 +02:00
Wuzzy f3b0cf6f3e Document API mcl_stairs, declare mcl_stairs usable 2018-05-29 15:17:15 +02:00
Wuzzy d3f5942d7d Improve corner stair texturing 2018-05-29 14:28:26 +02:00
Wuzzy 85975a2d26 mcl_stairs: Add woodlike cornerstair mode 2018-05-29 13:46:39 +02:00
Wuzzy 644387c0ad Remove redundant wood stair register 2018-05-29 13:30:23 +02:00
Wuzzy cf8415f87a Merge mcstair into mcl_stairs 2018-05-29 13:25:25 +02:00
Wuzzy eb02e9f3e1 Version 0.39.0 2018-05-28 19:18:12 +02:00
Wuzzy f8362e798f Make v6 ice spikes much rarer 2018-05-28 16:32:15 +02:00
Wuzzy c4ced1fbdf Fix arrows being punchable to death 2018-05-28 15:49:04 +02:00
Wuzzy 187e6b7e58 Remove water damage from creeper 2018-05-27 10:41:50 +02:00
Wuzzy fc94f50e6a Fix another logic fail in arrow mob detect code 2018-05-27 10:33:49 +02:00
Wuzzy 6f24a44e53 Merge branch 'master' of https://repo.or.cz/MineClone/MineClone2 2018-05-25 13:47:29 +02:00
Wuzzy 48b7191af2 Regularily damage and delete entities in void 2018-05-25 13:45:41 +02:00
Wuzzy 12b0954523 Fix possible crash in mcl_mapgen_core 2018-05-20 15:25:57 +02:00
Wuzzy ab38d55646 Dispenser craft no longer needs bow to be intact 2018-05-20 03:02:31 +02:00
Wuzzy b852e56df3 Change clock texture usage and implement conversion 2018-05-20 01:50:53 +02:00
Wuzzy 4db935e91e Update falling nodes after being moved by piston 2018-05-19 02:30:23 +02:00
Wuzzy 4733355851 Texture converter: Convert banner overlays 2018-05-18 23:51:17 +02:00
Wuzzy c882f46eb6 Fix head node texture bugs 2018-05-18 22:13:56 +02:00
Wuzzy d59717b5d8 Convert large chest textures 2018-05-18 20:48:39 +02:00
Wuzzy b1122c5cda Fix bad side chest conversion 2018-05-18 19:51:37 +02:00
Wuzzy da39d76310 Implement conversion of single chests 2018-05-18 19:34:23 +02:00
Wuzzy 1082c995fe Rework end portal node
- Add 1/16 high collisionbox on bottom
- Make walkable
- Disable jump
2018-05-16 19:25:55 +02:00
Wuzzy fceee430b3 Remove minetest.inventorycube call from rs lamps 2018-05-16 18:27:19 +02:00
Wuzzy 7c434d85ed Also save cmd block on enter key 2018-05-16 18:16:17 +02:00
Wuzzy 689aa84c28 Make cmd block errors red 2018-05-16 18:02:37 +02:00
Wuzzy b1154be71b Command blocks now use 2-letter placeholders 2018-05-16 17:58:32 +02:00
Wuzzy dd380963ce Add “@@” placeholder to cmd blocks 2018-05-16 17:31:01 +02:00
Wuzzy a91e0cc537 Add @commander placeholder to command blocks 2018-05-16 17:07:11 +02:00
Wuzzy 51b6d07d0c Make cmd blocks execute cmds on behalf of placer 2018-05-16 16:55:52 +02:00
Wuzzy 88ca7c9a7e Red v6 sand must now be crafted with nether wart 2018-05-16 15:53:00 +02:00
Wuzzy ad69aa20ce Release 0.38.0 2018-05-15 02:05:00 +02:00
Wuzzy fcc53f4151 Remove inventory images of some internal nodes 2018-05-14 16:31:17 +02:00
Wuzzy 6894721e8d Fix trunk of balloon oak 1 not being force-placed 2018-05-13 18:53:42 +02:00
Wuzzy d5d65f4a84 Tweaking of the new tree schematics 2018-05-13 18:39:47 +02:00
Wuzzy b992100106 More variations of mega spruces and large oaks 2018-05-13 18:03:57 +02:00
Wuzzy f62f627443 Add end portal frame with eye into creative inv. 2018-05-13 05:23:38 +02:00
Wuzzy bf37c06de4 Add inner nodeboxes for banner nodes 2018-05-13 01:52:38 +02:00
Wuzzy 91fad8072d Register itemframe alias 2018-05-13 00:57:32 +02:00
Wuzzy a62b5de79e Cake+cauldron+endportalfr. put signal 4 comparator 2018-05-13 00:33:26 +02:00
Wuzzy acd58f6fe5 Fix jukeboxes destroying music disc metadata 2018-05-12 23:57:49 +02:00
Wuzzy 44dc8d10bb Comparators now detect itemframes as container 2018-05-12 23:50:17 +02:00
Wuzzy bae1fa072c Remove dead code 2018-05-12 22:53:21 +02:00
Wuzzy e38f19b5f3 Comparator now detects jukebox as container 2018-05-12 22:48:49 +02:00
Wuzzy 1ce9ab22bf Turn jukebox into a container (part 1) 2018-05-12 21:50:56 +02:00
Wuzzy a14ba4d9ff Change jukebox top texture 2018-05-12 21:04:29 +02:00
Wuzzy 7f24912a35 Increase arrow hit range from 2 to 3 2018-05-12 19:52:40 +02:00
Wuzzy 8fd2097526 Itemframes: Show item name as info text 2018-05-12 19:21:41 +02:00
Wuzzy 1a786bc64f Itemframes: Refactor entity 2018-05-12 19:13:15 +02:00
Wuzzy 35b1f72559 Add minimal itemframe LBM for compatability 2018-05-12 18:50:44 +02:00
Wuzzy d8ff91e089 Rename itemframes mod to mcl_itemframes 2018-05-12 18:18:17 +02:00
Wuzzy b0fa20df75 List incomplete items in README 2018-05-12 17:08:01 +02:00
Wuzzy 007b1c9b5d Version 0.37.0 2018-05-12 15:21:40 +02:00
Wuzzy 0ec411b868 Fix arrows getting stuck in impossible ways 2018-05-12 15:10:34 +02:00
Wuzzy c7949bf703 Arrows: Fix reverse flying arrows after long fly 2018-05-12 07:00:16 +02:00
Wuzzy fab5d17a5d Remove help button from furnace formspec 2018-05-09 19:58:22 +02:00
Wuzzy f0b732d7e0 Place boats in the placer direction 2018-05-09 18:43:07 +02:00
Wuzzy 294be0f302 Players must be closer to grab arrows 2018-05-09 18:19:42 +02:00
Wuzzy 7ca61b7185 Fix button pushed by arrows from wrong direction 2018-05-09 18:04:34 +02:00
Wuzzy 1823aba35a Merge branch 'stuck_arrow' 2018-05-09 17:39:22 +02:00
Wuzzy 1bef0775ce Implement stuck arrow timeout properly 2018-05-09 17:31:04 +02:00
Wuzzy f6c5117bf7 Update arrow help 2018-05-09 17:04:13 +02:00
Wuzzy e783ab17dc Force stuck arrows to be rechecked after punch 2018-05-09 16:49:37 +02:00
Wuzzy b61576e529 Tweak arrow collisionbox 2018-05-09 16:37:13 +02:00
Wuzzy 50eaaa15fa Rework arrow box appearance 2018-05-09 16:29:57 +02:00
Wuzzy 763d9458bf Fix arrows not getting stuck when flying up 2018-05-09 15:17:19 +02:00
Wuzzy af8515b6e4 Stuck arrows: Deflection, check stuck state, yaw 2018-05-09 15:10:56 +02:00
Wuzzy 0d60b5218a Destroy arrow if inside solid node 2018-05-09 02:00:34 +02:00
Wuzzy 76356ed1e5 Merge branch 'stuck_arrow' of http://repo.or.cz/MineClone/MineClone2 into stuck_arrow 2018-05-09 00:06:29 +02:00
Wuzzy 19dd11dfb8 Fix mesecons crash caused by arrow 2018-05-08 18:30:57 +02:00
Wuzzy c43b8baff4 Refactor arrow→button hit 2018-05-08 18:22:08 +02:00
Wuzzy f392e23719 Implement staticdata for arrow entities 2018-05-08 17:16:11 +02:00
Wuzzy fff3eb1ee7 Rename mcl_autogroup to _mcl_autogroup
This should fix some autogroup-related issues due to loading order.
2018-05-08 16:43:25 +02:00
Wuzzy 5ca5811bc8 Refactor how the misc creative category works 2018-05-08 15:58:26 +02:00
Wuzzy 4339c80fd8 Make arrows stick in solid nodes propery, trigger wooden buttons 2018-05-08 14:35:15 +02:00
Wuzzy af0025debc Wooden buttons stay pushed by arrow 2018-05-08 13:46:39 +02:00
Wuzzy 467018128a Merge branch 'master' into stuck_arrow 2018-05-08 13:08:04 +02:00
Wuzzy b95dbaf3d7 Add game description and screenshot 2018-05-08 03:56:45 +02:00
Wuzzy 83829ec358 Hide a couple of very incomplete items in Creative 2018-05-08 01:40:31 +02:00
Wuzzy 64f7e0a076 Fix active buttons staying on after restart 2018-05-08 00:48:07 +02:00
Wuzzy 47d067d9ec Make arrow stuck when they hit solid node (WIP) 2018-05-08 00:38:00 +02:00
Wuzzy fb8c5300cd Slow down arrows in liquids
This is a rought first implementation, very basic.
2018-05-08 00:10:20 +02:00
Wuzzy 32f612469f Re-colorize bow entity textures 2018-05-07 23:30:20 +02:00
Wuzzy 39e34b8f4e Fix charged bows being placable in itemframes 2018-05-07 23:22:54 +02:00
Wuzzy 62ed722088 Update bow texture paths in conversion table 2018-05-07 23:14:56 +02:00
Wuzzy 4be5f89829 Move bow/arrow logic into new mod mcl_bows 2018-05-07 23:10:49 +02:00
Wuzzy e55a1a6211 Play sound when hitting other player with arrow 2018-05-07 22:23:15 +02:00
Wuzzy 254a12b8af Use sneak speed when using bow 2018-05-07 20:37:45 +02:00
Wuzzy fc9b57950f Slow player down when using bow 2018-05-07 20:31:40 +02:00
Wuzzy 2c4eae353c Use mcl_playerphysics to handle player physics
This fixes some issues with speed overrides and gets rid of ugly workarounds.
2018-05-07 20:10:53 +02:00
Wuzzy da03b6af6a Add playerphysics framework 2018-05-07 19:56:48 +02:00
Wuzzy 7a208e3cd8 Drop charging bows as uncharged bow 2018-05-07 17:59:53 +02:00
Wuzzy adc86232ee Also reset charging bows after shoot 2018-05-07 17:46:52 +02:00
Wuzzy 9a5f4e41cb Bow: Fix broken bow charging when switching bows during charge 2018-05-07 17:43:39 +02:00
Wuzzy b19b1f5a2d Rewrite bow/arrow help texts 2018-05-07 17:06:00 +02:00
Wuzzy db755036c3 Just some sanity checks for bow charging 2018-05-07 16:45:12 +02:00
Wuzzy 88ef857fb4 Increase arrow damage smooth dmg/speed increase
Currently using linear increase.
2018-05-07 16:25:46 +02:00
Wuzzy 90363edd59 Charge bow faster and with higher time precision 2018-05-07 15:53:16 +02:00
Wuzzy 72d4940bf2 Remove unused code in mcl_throwing 2018-05-07 15:39:08 +02:00
Wuzzy 3f5079d2b9 Update mcl_throwing license 2018-05-07 15:34:16 +02:00
Wuzzy 33bdad095b Refactor bow code in mcl_throwing 2018-05-07 15:29:17 +02:00
Wuzzy b477d35cdc Implement smooth bow charging, based on [bows]
[bows] mod by Arcelmi:

https://github.com/Arcelmi/minetest-bows
2018-05-07 15:25:41 +02:00
Wuzzy 9b47ec2797 Add controls mod by arcelmi 2018-05-07 14:52:53 +02:00
Wuzzy 531e620c0f Version 0.36.3 2018-04-12 13:57:28 +02:00
Wuzzy 9376edeeda Re-add nametags which were removed accidentally 2018-03-31 21:58:52 +02:00
Wuzzy 11be72e635 Disable mob health display 2018-03-31 03:54:55 +02:00
Wuzzy 8060928237 Fix some creeper issues
- Fix fuse sound sometimes not playing
- Timer = 1.5s
- Distance behaviour like in MC
2018-03-31 03:53:11 +02:00
Wuzzy d6228145c6 Fix random mob teleportations once and for all! 2018-03-31 00:21:55 +02:00
Wuzzy 7be5914463 Update Mobs Redo 2018-03-31 00:18:40 +02:00
Wuzzy bcc87ded12 Version 0.36.2 2018-03-27 15:09:20 +02:00
Wuzzy 2606c264b9 Update doc modpack (1.2.2) 2018-03-27 15:08:31 +02:00
Wuzzy ed63c32f07 Rename “subgame” to “game” in mcl_doc_basics 2018-03-25 22:28:41 +02:00
Wuzzy 318415307c Update mobs_mc 2018-03-25 22:27:06 +02:00
Wuzzy bb6f2f7770 Rename “subgame” to “game” (partial fix) 2018-03-25 22:20:32 +02:00
Wuzzy 7821a69226 Make saplings break when pushed by piston 2018-03-13 02:47:54 +01:00
Bu-Gee d2f01c68f5 Pistons: When pushing a dropper node, dig it
Instead of calling handle_node_drops, etc.
2018-03-13 02:46:21 +01:00
Wuzzy e19271398d Make pumpkins and melons opaque again 2018-03-13 02:38:57 +01:00
Yukitty d73651424c Updated TNT fuse particles.
Fixed quirky integer math.random which was clearly intended to be floating point.
2018-03-12 00:05:43 +01:00
Wuzzy 33aa193289 Version 0.36.1 2018-03-05 14:36:35 +01:00
Wuzzy 1fa141d972 Custom node drops now ignore Creative Mode 2018-03-05 13:35:14 +01:00
Bu-Gee 3ae8119498 Fix crash when pushing pumpkin by piston 2018-03-05 12:53:16 +01:00
Wuzzy 34333c6b54 Add prismarine and prismarine brick stairs/slabs 2018-02-18 00:50:09 +01:00
Wuzzy 91cc3a2bd1 Version 0.36.0 2018-02-05 20:30:00 +01:00
Wuzzy 30be3e742f Damage anvil after falling 2018-02-05 19:58:31 +01:00
Wuzzy 32561ec658 Deal anvil falling damage more reliably 2018-02-05 19:20:14 +01:00
Wuzzy e4a1134d4f More anvil smashing fixes 2018-02-05 19:17:16 +01:00
Wuzzy c71bd9588d Generalize anvil damage 2018-02-05 19:03:56 +01:00
Wuzzy 584ef08266 Fix anvil repair sometimes destroying items 2018-02-05 18:35:12 +01:00
Wuzzy 0d4bb1a723 Falling nodes: Workaround for inv crash (MT#7020) 2018-02-05 17:26:36 +01:00
Wuzzy d713cd193c Move falling anvil handling to other mod 2018-02-05 17:18:28 +01:00
Wuzzy eef6c44e4a Anvils: Allow to use up to 4 materials at once 2018-02-05 16:09:29 +01:00
Wuzzy 42cf5b38d2 Remove player privilege 2018-02-05 03:02:25 +01:00
Wuzzy 2f88529d41 Don't allow anvil repair if already at max health 2018-02-04 07:36:47 +01:00
Wuzzy 146458112c Renamed spawn eggs spawn mob with name 2018-02-04 07:11:44 +01:00
Wuzzy 4608a2f98d Generalize some anvil attributes in help 2018-02-04 07:00:26 +01:00
Wuzzy 197afa664b Use color for named items 2018-02-04 06:39:10 +01:00
Wuzzy 8ff92fcb7f Fix anvil not updating after removing input slot 2018-02-04 06:13:12 +01:00
Wuzzy 9ca97d6f4a Fix naming of banner copies 2018-02-04 06:11:08 +01:00
Wuzzy 2c0eee27fc Fix restore of banner desc after anvil rename 2018-02-04 05:52:10 +01:00
Wuzzy a7f0d8c82c Fix wrong banner name when patterncrafting 2018-02-04 05:08:02 +01:00
Wuzzy d594b7b62f Fix anvil may destroy items when taking output 2018-02-03 05:50:59 +01:00
Wuzzy 256dd1e26a Fix some anvil renaming issues 2018-02-03 05:42:19 +01:00
Wuzzy fda5ed9e1c Allow to confirm anvil name with enter key 2018-02-03 05:34:20 +01:00
Wuzzy 64ddd07066 Increase effectiveness of tool+tool repair on anvil 2018-02-03 05:16:51 +01:00
Wuzzy dfb941cf90 Add anvil-related factoids 2018-02-03 04:40:31 +01:00
Wuzzy ef471a67fa Anvils: Don't allow rename if name is unchanged 2018-02-03 03:53:31 +01:00
Wuzzy 0b80b60cf1 Fix damaging anvil too aggressively 2018-02-03 03:43:28 +01:00
Wuzzy 9277bf4552 Remove duplicate code in mcl_anvil 2018-02-03 03:34:32 +01:00
Wuzzy ef7781e12e Add help for anvil 2018-02-03 03:33:48 +01:00
Wuzzy 8e0f8bbf43 Remove anvils from WIP 2018-02-03 02:51:12 +01:00
Wuzzy 41cebe13bf Chance to damage anvil with each step 2018-02-03 02:40:49 +01:00
Wuzzy 32ed701f0a Drop anvil item on dig 2018-02-03 01:43:07 +01:00
Wuzzy e42c5641b2 Anvils: Fix destruction of whole material stack 2018-02-03 01:03:36 +01:00
Wuzzy eb1711c2e7 Implement tool+material repair at anvil 2018-02-03 00:55:52 +01:00
Wuzzy dbd1fb46f9 Allow simple tool+tool repairs with anvil 2018-02-03 00:17:29 +01:00
Wuzzy 6c1a4ec911 Disable mob capture 2018-02-02 22:13:02 +01:00
Wuzzy 300b0545b4 Fix crash in w/ falling nodes 2018-02-02 22:12:45 +01:00
Wuzzy fff0e572aa Don't allow to use empty nametag 2018-02-02 17:35:36 +01:00
Wuzzy 15d7764c65 Require naming of name tag before it's usable 2018-02-02 17:33:52 +01:00
Wuzzy 449fc046dd Tweak anvil middle 2018-02-02 17:22:39 +01:00
Wuzzy f1057c0542 Enforce anvil name length more strictly 2018-02-02 05:42:35 +01:00
Wuzzy 7c1e625451 Allow to clear name with anvil 2018-02-02 05:40:22 +01:00
Wuzzy 86b7f537d5 Copying banners now clears name 2018-02-02 05:29:35 +01:00
Wuzzy 40163aed91 Forbid renaming of written books 2018-02-02 05:13:26 +01:00
Wuzzy 06c9b2c3f6 Handle item naming of banners 2018-02-02 05:07:58 +01:00
Wuzzy 87ef954409 Double save anvil-given name 2018-02-02 04:19:40 +01:00
Wuzzy a7190a3693 Implement renaming with anvils 2018-02-02 04:14:11 +01:00
Wuzzy e754eec3f7 Fix some global issues with rs repeater code 2018-02-02 03:46:27 +01:00
Wuzzy 043165ced2 Implement anvil inventory slot restrictions 2018-02-02 02:56:34 +01:00
Wuzzy e97fe05acc Specify the repair material of tools and armor 2018-02-02 02:33:10 +01:00
Wuzzy 40f468f18f Add non-functional anvil formspec 2018-02-02 02:07:09 +01:00
Wuzzy e649f37bc8 Add comment in minecart code 2018-02-02 01:21:19 +01:00
Wuzzy 4207f88266 Add dispenser API docs 2018-02-01 23:00:50 +01:00
Wuzzy fa10dc93ae Add _on_dispense callback for dispenser; refactor 2018-02-01 22:49:41 +01:00
Wuzzy 8774e7674d Add hoppers in README 2018-01-31 21:24:35 +01:00
Wuzzy 3e7ad08db0 Set is_ground_content=false for some nodes 2018-01-31 19:36:27 +01:00
Wuzzy a84a0a0db6 Change anvil nodebox 2018-01-31 19:23:37 +01:00
Wuzzy dfafa6c969 Fix rotation of falling anvils 2018-01-31 19:10:14 +01:00
Wuzzy b7b6f356fa Redstone: Add basic blastnode handling 2018-01-30 06:01:36 +01:00
Wuzzy d750e7f6d4 No longer hide observers 2018-01-30 05:56:30 +01:00
Wuzzy ca987e1255 Reorganize some commands 2018-01-30 03:33:30 +01:00
Wuzzy c22a5cba43 Fix falling nodes falling forever on walls 2018-01-29 03:18:02 +01:00
Wuzzy 7196485294 Remove sunlight propagation for various nodes 2018-01-28 20:21:02 +01:00
Wuzzy 31f545202a Declare chests to be transparent to sunlight 2018-01-28 19:30:52 +01:00
Wuzzy 093e9b0b08 Declare observers not opaque 2018-01-28 19:25:05 +01:00
Wuzzy 32f60c4fee Add README/credits for the lever mod 2018-01-27 19:48:44 +01:00
Wuzzy 50a1bb5ea5 Repeaters: Fix output if placed in lock + on state 2018-01-27 17:04:00 +01:00
Wuzzy 01bd264b2b Repeater: Fix sometimes bad lock on place 2018-01-27 16:44:30 +01:00
Wuzzy 2788cad59c Minor repeater refactor 2018-01-27 16:25:38 +01:00
Wuzzy 3229f2a902 Move the lock bar of repeaters 2018-01-27 16:22:59 +01:00
Wuzzy e1606eeb0c Repeaters: Use set_node instead of swap_node 2018-01-27 16:10:29 +01:00
Wuzzy a2ab52c705 Repeaters: Remember delay when locked 2018-01-27 16:07:59 +01:00
Wuzzy 28b24168e0 Rewrite redstone repeater help again 2018-01-27 15:41:51 +01:00
Wuzzy 42f5426fe9 Update repeater help (locking feature) 2018-01-27 15:41:01 +01:00
Wuzzy bca5a9f584 Update repeater help (locking feature) 2018-01-27 15:26:34 +01:00
Wuzzy 781caa1187 Repeaters: Do not unlock if locked from other side 2018-01-27 15:00:58 +01:00
Wuzzy 719e5193d8 Restrict is_powered call in mesecons_delayer 2018-01-27 14:34:50 +01:00
Wuzzy 878743cee5 Repeaters: Set correct lock state on placement 2018-01-27 14:32:21 +01:00
Wuzzy b3d069b53a Update repeater lock after dig 2018-01-27 06:01:49 +01:00
Wuzzy db94d1c601 Locked repeaters: Update receptor after unlock 2018-01-27 05:43:05 +01:00
Wuzzy a8c2b37175 Fix some bad repeater textures 2018-01-27 05:23:40 +01:00
Wuzzy 6b1354cd3b Lock and unlock repeaters (WIP) 2018-01-27 05:17:22 +01:00
Wuzzy bc1f3cd651 Add locked repeaters (nodes only) 2018-01-27 04:36:17 +01:00
Wuzzy 8950455026 Fix crash when dispensing spawn egg 2018-01-27 03:55:59 +01:00
Wuzzy c54019a8ab Change chorus-related recipes 2018-01-27 03:45:43 +01:00
Wuzzy d972fbfee8 Replace clear command with alias to clearinv 2018-01-27 03:19:59 +01:00
Wuzzy 91143ced4e Version 0.35.0 2018-01-27 02:35:45 +01:00
Wuzzy 1924940935 Update chest / trapped chest / ender chest help 2018-01-27 00:58:53 +01:00
Wuzzy 5e397d8611 Fix wrong redstone rules of trapped chest 2018-01-27 00:50:04 +01:00
Wuzzy 7953d8d1a6 Lift WIP status of trapped chests 2018-01-27 00:44:45 +01:00
Wuzzy a16746faf3 Simplify storage of players having an open chest 2018-01-27 00:44:07 +01:00
Wuzzy 2400ca5be0 Partially fix bad player counting of trapped chest 2018-01-26 23:44:03 +01:00
Wuzzy b1fcbbf68f New texture for trapped chest 2018-01-26 23:13:44 +01:00
Wuzzy 16bb9b8901 Localize various unneeded global variables 2018-01-26 22:37:42 +01:00
Wuzzy a40dec6da9 Add missing sounds for active repeater 2018-01-26 22:05:47 +01:00
Wuzzy dc13cf04dd Fix repeater stopping after rejoining world 2018-01-26 22:01:37 +01:00
Wuzzy 930ecf9be1 Fix rs not turnoff if rtorch is hor. behind opaque 2018-01-26 21:53:27 +01:00
Wuzzy e8ebc537f0 Fix door closing if dig opaque block next to it 2018-01-26 21:11:49 +01:00
Wuzzy 03b6c17f51 Fix door closing if only 1 segment loses power 2018-01-26 19:54:48 +01:00
Wuzzy c2d0414255 Fix crash when obj tele's Nether→Overworld @ rain 2018-01-26 19:37:00 +01:00
Wuzzy 58b9c3dbf5 Make creepers run away from cats/ocelots 2018-01-26 18:50:28 +01:00
Wuzzy fb1fb50bd3 Add new mob settings in settingtypes.txt 2018-01-26 18:31:19 +01:00
Wuzzy 0e88453a85 Update Mobs Redo, fix crash 2018-01-26 18:06:45 +01:00
Wuzzy dd4008ea73 Add totem of undying into combat category 2018-01-25 22:01:19 +01:00
Wuzzy 138005e40f /kill destroys totem of undying 2018-01-25 21:50:59 +01:00
Wuzzy 38478ee7e3 Fix broken kill command 2018-01-25 21:08:25 +01:00
Wuzzy e3cea04f12 Update mobs_mc, properly implement totem 2018-01-25 21:03:58 +01:00
Wuzzy ed5c2c2019 Tweak initial speed of TNT entitiy 2018-01-25 16:23:54 +01:00
Wuzzy 9a8e47bb02 Fix some bonus stairs being not properly diggable 2018-01-25 09:04:34 +01:00
Wuzzy cc32c54d87 Draw full set of activator rail textures 2018-01-25 05:18:35 +01:00
Wuzzy 70ea7d71ad Add setting to disable mob spawning 2018-01-25 04:57:31 +01:00
Wuzzy b9686c2d9f Allow to disable weather changes 2018-01-25 03:55:08 +01:00
Wuzzy a3388e5288 Add duration parameter to weather command 2018-01-24 06:50:28 +01:00
Wuzzy c6a56ed430 Simplify clear command 2018-01-23 23:48:26 +01:00
Wuzzy f7b0702457 Nerf zombie/husk/zvillager drops 2018-01-23 23:13:55 +01:00
Wuzzy c9812c5acf Minor vines help change 2018-01-23 06:42:46 +01:00
Wuzzy 647524f503 Rework the overly weird vine growth algorithm 2018-01-23 06:40:07 +01:00
Wuzzy 0405b2aa2c Fix some Lua warnings 2018-01-23 05:19:05 +01:00
Wuzzy f3a3681e7b Make chorus flower craftable 2018-01-23 04:30:59 +01:00
Wuzzy 101285d04d Fix chorus fruit not working with damage on 2018-01-23 04:24:05 +01:00
Wuzzy 232dbca783 Add sound for chorus fruit teleport 2018-01-23 04:18:19 +01:00
Wuzzy 064858ff59 “Still <Liquid>” → “<Liquid> Source” 2018-01-23 04:12:44 +01:00
Wuzzy d36ec8ee17 Update chorus fruit help 2018-01-23 04:01:59 +01:00
Wuzzy e3c207c312 Fix no placement sound of chorus flower 2018-01-23 02:56:46 +01:00
Wuzzy 92a595e9e7 Copy-editing of chorus plant help 2018-01-23 02:51:58 +01:00
Wuzzy 3399f3b0c2 Add chorus plant help 2018-01-23 02:44:05 +01:00
Wuzzy 88d1570f5b Drop TODO in chorus_plant.lua 2018-01-23 02:03:57 +01:00
Wuzzy 223729864f Remove chorus plant and flowers from WIP status 2018-01-23 02:00:51 +01:00
Wuzzy 3136c0f119 More mcl_end refactoring 2018-01-23 01:57:32 +01:00
Wuzzy af1465ab0c Tweak chorus flower aging 2018-01-23 01:54:59 +01:00
Wuzzy 5e47bce74e Refactor mcl_end 2018-01-23 01:53:43 +01:00
Wuzzy bdaaf912ab Implement basic chorus plant growth 2018-01-23 01:46:00 +01:00
Wuzzy fd4797c0e7 Add basic placement rules for chorus flower 2018-01-23 00:39:21 +01:00
Wuzzy 65c4d6af1a Fix chorus plant drops 2018-01-23 00:21:05 +01:00
Wuzzy fd3498aeec Merge branch 'master' of https://repo.or.cz/MineClone/MineClone2 2018-01-22 23:54:11 +01:00
Wuzzy da2fbed4c2 Burnout rs torch if it changes state too often 2018-01-22 23:52:04 +01:00
Wuzzy eacda330eb Remove mesecons/VERSION 2018-01-22 22:40:31 +01:00
Wuzzy a160d8411a Update redstone torch help 2018-01-22 22:40:16 +01:00
Wuzzy 31e8e7e374 Update redstone torch help 2018-01-22 22:19:45 +01:00
Wuzzy c9b731b8f9 Fix redstone torch state with block above 2018-01-22 21:49:20 +01:00
Wuzzy db4c860aa8 More work on redstone torch state 2018-01-22 21:32:07 +01:00
Wuzzy 8019cfd591 Faster updating of redstone torches 2018-01-22 21:11:10 +01:00
Wuzzy 94dfd63e14 Redstone torch: Use set_node instead of swap_node 2018-01-22 20:04:19 +01:00
Wuzzy 29d034ad09 Fix torches unplacable on disabled hoppers 2018-01-22 20:01:38 +01:00
Wuzzy d47af14d4d Implement basic redstone torch rules 2018-01-22 19:58:38 +01:00
Wuzzy 254a3093eb Fix inconsistent hopper texture 2018-01-22 18:06:12 +01:00
Wuzzy 53ca167eb1 Merge branch 'mesecons_updates' 2018-01-22 17:46:38 +01:00
Wuzzy b62075afcb Fix rail rules (kinda) 2018-01-22 17:33:06 +01:00
Wuzzy 01952b56fd Fix bad repeater updates when next to opaque block 2018-01-22 16:53:44 +01:00
Wuzzy a97f118805 Version 0.34.0 2018-01-21 06:42:12 +01:00
Wuzzy ca93a0e50f Remove experimental painting completely 2018-01-21 06:32:13 +01:00
Wuzzy e65d7c7ff4 Rename painting item 2018-01-21 06:29:43 +01:00
Wuzzy 8334b68111 Remove gemalde mod 2018-01-21 06:28:19 +01:00
Wuzzy f4657f79f5 Redstone: Propagate turnoff through opaque blocks 2018-01-20 20:42:53 +01:00
Wuzzy 33d978de06 Propagate redstone power through opaque blocks 2018-01-20 19:04:53 +01:00
Wuzzy aaf68793fe More redstone rule consistency 2018-01-19 03:34:30 +01:00
Wuzzy d5a72d240f Tweak redstone wire rules 2018-01-18 20:00:41 +01:00
Wuzzy aec2fb8309 Remove legacy mesecons code 2018-01-18 19:22:52 +01:00
Wuzzy 9d409927bc Make nether wart more common in v6 2018-01-17 22:56:20 +01:00
Wuzzy 92aa0114a2 Fix redstone having 2 help entries 2018-01-17 22:36:48 +01:00
Wuzzy b04e555635 Update help text of comparators 2018-01-17 22:30:27 +01:00
Wuzzy c9ef3f8536 Use default redstone rules for rails again 2018-01-17 21:01:26 +01:00
Wuzzy 5d913b6d29 Refactor some redstone internal code 2018-01-17 20:23:43 +01:00
Wuzzy e85a16f70a Redstone: Make is_powered respect spread 2018-01-17 20:20:08 +01:00
Wuzzy ec49459eb4 Update desert temple schematic 2018-01-17 19:53:20 +01:00
Wuzzy dba463ca6d Fix broken direct_source in mesecon.is_powered 2018-01-17 17:18:06 +01:00
Wuzzy f009e958f5 Redstone: Fix internal logic a bit 2018-01-17 05:49:11 +01:00
Wuzzy af3db1ae21 Fix opaque block placement propagate power too far 2018-01-17 03:54:51 +01:00
Wuzzy 2cf6332b57 Conductors no longer power themselves 2018-01-17 03:21:36 +01:00
Wuzzy 1522c875ae Code opaque block redstone power rule (part 1) 2018-01-17 02:44:00 +01:00
Wuzzy 2d5b519830 Fix weird fence mesecon behaviour 2018-01-17 01:45:12 +01:00
Wuzzy d61da938f4 Fix /seed giving wrong seed 2018-01-16 20:58:54 +01:00
Wuzzy 81d5d8b942 Update comparator help 2018-01-13 05:00:47 +01:00
Wuzzy 483d6d088c Make redstone wire transmit power vertically, too 2018-01-13 04:45:04 +01:00
Wuzzy 4f9be58871 Fix incorrect power transmission of buttons 2018-01-13 04:08:40 +01:00
Wuzzy f612d1b584 Rework core rules of most redstone components 2018-01-13 03:37:41 +01:00
Wuzzy 7626102bdb Fix dispenser inventory not getting set if up/down 2018-01-13 03:15:32 +01:00
Wuzzy f72717e8de Support powering of opaque blocks (WIP) 2018-01-13 02:20:07 +01:00
Wuzzy c4ec520986 Fix redstone torch rules 2018-01-13 02:19:52 +01:00
Wuzzy 1b5875582e Make redstone block an alldirs block 2018-01-13 01:49:28 +01:00
Wuzzy 3980beff1d Fix incorrect node drops of powered rails 2018-01-13 01:39:18 +01:00
Wuzzy 2f32c76013 Make v6 sapling treasures more common 2018-01-12 19:02:06 +01:00
Wuzzy 6f8b524d07 Update emerald help text 2018-01-12 17:56:02 +01:00
Wuzzy 30517ecb98 Add lava place sound 2018-01-12 02:26:12 +01:00
Wuzzy e4ab20509f Clean up the redstone rules 2018-01-12 01:37:32 +01:00
Wuzzy 54c0d1d750 Add banners to material_wood group 2018-01-11 02:42:43 +01:00
Wuzzy 24a523baa4 Easier orientation of dispenser/dropper placement 2018-01-11 01:28:36 +01:00
Wuzzy a2f1122405 Remove get_look_pitch in mesecons_pistons 2018-01-10 21:39:22 +01:00
Wuzzy a399bc4a80 Tweak piston footstep sound effects 2018-01-10 21:35:22 +01:00
Wuzzy 5eb805594e Add help text for observer 2018-01-10 21:26:39 +01:00
Wuzzy dfc721860e Add vertical observers (dummies, currently unused) 2018-01-10 21:11:27 +01:00
Wuzzy acb38db08d Reverse arrow direction of observer 2018-01-10 19:44:24 +01:00
Wuzzy d900279e1d Implement basic node scan of observers 2018-01-10 19:31:35 +01:00
Wuzzy 85c40daf8a Implement the redstone pulse of observers 2018-01-10 18:46:35 +01:00
Wuzzy 4bf7649027 Fix bad item name override in mcl_wip 2018-01-10 18:41:07 +01:00
Wuzzy 916627c6b6 Add on state for observers 2018-01-10 18:27:47 +01:00
Wuzzy 3627b03b2e Set rules for observer 2018-01-10 18:12:27 +01:00
Wuzzy b96974e253 Fix biome ores being generated in all biomes 2018-01-10 17:57:15 +01:00
Wuzzy 6e7e780af9 Fix ores spawning in non-existing biomes 2018-01-10 17:23:58 +01:00
Wuzzy 990a9a8b46 Update on_place callbacks when placing hopper 2018-01-10 16:57:57 +01:00
Wuzzy 8b15e41b12 Set hopper redstone rules 2018-01-10 16:35:26 +01:00
Wuzzy bf5e4f0788 Allow to disable hoppers with redstone power 2018-01-10 16:18:42 +01:00
Wuzzy 54bb6b707a Force-call on_place callbacks when placing door 2018-01-10 03:06:15 +01:00
Wuzzy 22fe1945ef Fix indentation in mcl_doors 2018-01-10 02:55:46 +01:00
Wuzzy aa99ea70ab More redstone/door tweaks 2018-01-10 02:49:29 +01:00
Wuzzy 3830e5d24c Change redstone open/close rules of doors etc. 2018-01-10 02:25:20 +01:00
Wuzzy 10c2097ac1 Prepare dummy code for unsticky nodes (glazed terracotta) 2018-01-10 01:33:56 +01:00
Wuzzy e3559e1de8 Increase hear distance of piston push sound 2018-01-09 20:39:00 +01:00
Wuzzy 9bf25214be Doors register redstone signal on top part, too 2018-01-09 17:44:54 +01:00
Wuzzy bb31415670 Remove facedir, add sounds to redstone wires 2018-01-09 17:31:23 +01:00
Wuzzy 3e3b447132 Add opaque group to lit redstone lamp 2018-01-09 15:19:10 +01:00
Wuzzy 31cd23291a Make carpets non-walkable 2018-01-09 15:05:15 +01:00
Wuzzy b852eb9d87 Mark several mobs as WIP 2018-01-09 14:32:58 +01:00
Wuzzy b959baa9d6 Update lever help 2018-01-08 21:20:53 +01:00
Wuzzy 71e663efe6 Merge branch 'lever' 2018-01-08 21:00:36 +01:00
Wuzzy 68a9a9bc40 Fix normals of wall levers and remove unused face 2018-01-08 20:46:44 +01:00
Wuzzy d4d03526db Cocoas now use attached_node_facedir
This fixes some annoying bugs when removing jungle trees nearby
2018-01-08 20:19:33 +01:00
Wuzzy 33386b19ca Drop lever when attached node is destroyed 2018-01-08 20:11:33 +01:00
Wuzzy 1505290e24 New way to attach node: attached_node_facedir 2018-01-08 20:10:44 +01:00
Wuzzy dfc0d52372 Implement correct lever orientations 2018-01-08 17:45:30 +01:00
Wuzzy b133dd6d5b Mob spawner: Fix mob sometimes not set correctly 2018-01-08 16:10:42 +01:00
Wuzzy f71cff0468 Can't sprint and sneak at the same time 2018-01-08 04:03:28 +01:00
Wuzzy afc55f8139 Remove unused "Force night skip" button in beds 2018-01-08 03:53:15 +01:00
Wuzzy f5010ec32a Sleep takes 5 seconds instead of 2 2018-01-08 03:49:34 +01:00
Wuzzy a46064bd92 Always clear weather after sleep 2018-01-08 03:42:51 +01:00
Wuzzy c9dc405531 Beds: First check distance 2018-01-08 03:19:19 +01:00
Wuzzy 84c099b234 Refine monster sleep prevention exceptions 2018-01-08 03:16:27 +01:00
Wuzzy 299bb332dc Prevent player from sleeping if monsters or too far from bed 2018-01-08 02:49:41 +01:00
Wuzzy 2b3a2e67b5 Remove escape pearls from mcl_wip 2018-01-08 02:29:14 +01:00
Wuzzy a7425b37b5 Extend mobspawner help 2018-01-08 02:19:00 +01:00
Wuzzy 20457fa2bd Remove end escape pearl 2018-01-08 02:12:15 +01:00
Wuzzy a89b9e9c45 Update Mobs Redo 2018-01-08 02:03:31 +01:00
Wuzzy a818995d2a Generated mob spawners generate mobs in darkness (except silverfish) 2018-01-08 00:41:57 +01:00
Wuzzy fa51fdbdb5 Freeze water in snowtop biome 2018-01-08 00:19:53 +01:00
Wuzzy dff88c70b3 Optimize top snow level 8 rendering 2018-01-07 23:43:23 +01:00
Wuzzy c26c6e012b Update top snow and ice help 2018-01-07 23:37:02 +01:00
Wuzzy 86c24532f9 Implement 8 top snow layers 2018-01-07 23:21:47 +01:00
Wuzzy 20baacb1fe Fix typo in GROUPS.md 2018-01-07 21:53:46 +01:00
Wuzzy d19bfb3406 Implement snow placement restriction 2018-01-07 21:34:42 +01:00
Wuzzy fc0516cb71 Melt ice and top snow @ light >= 12 2018-01-07 21:01:34 +01:00
Wuzzy ba0bc7a47d Squids and guardians no longer get stranded all the time 2018-01-07 18:03:03 +01:00
Wuzzy c2161b59f4 Fix witch doll size in mob spawner 2018-01-07 17:54:40 +01:00
Wuzzy ac8d284fab Fix broken mobspawner doll textures for 4 mobs 2018-01-07 17:50:50 +01:00
Wuzzy 777d8403e8 Mobspawner: Fix overlarge dolls for large mobs 2018-01-07 17:29:56 +01:00
Wuzzy 3cf6656df2 Rename "Monster Spawner" to "Mob Spawner" 2018-01-07 16:58:44 +01:00
Wuzzy cc411efe4c Move mob spawner change code to mobs mod 2018-01-07 16:53:25 +01:00
Wuzzy 1a96ef137a Allow to change monster spawner mob with spawn egg 2018-01-07 16:37:41 +01:00
Wuzzy 479ed1c12a Fix generated vines sometimes horizontal in air 2018-01-07 16:00:21 +01:00
Wuzzy 8322869e0f Update the saddle help 2018-01-02 15:18:56 +01:00
Wuzzy 8c9c51a4c2 Version 0.33.1 2018-01-02 14:59:44 +01:00
Wuzzy 74a7770a7c Tweak command block formspec 2018-01-02 14:32:40 +01:00
Wuzzy cd86148c70 Improve command block help 2018-01-02 14:25:31 +01:00
Wuzzy b2fecffb43 Fix piston not activate when powered from +X 2017-12-29 02:28:18 +01:00
Wuzzy 6bece82970 Fix spruce doors being mirrored wrong 2017-12-23 03:15:52 +01:00
Wuzzy 9e44f96793 Version 0.33.0 2017-12-19 15:20:57 +01:00
Wuzzy 0c9b28c92e Fix missing decorations in v6 2017-12-13 21:01:04 +01:00
Wuzzy 0e53c6e4c1 Can't add commands into command blocks if you have not the privs 2017-12-13 20:16:32 +01:00
Wuzzy b0c8c64bbe Add proper error msg when using kill w/o dmg 2017-12-13 19:42:30 +01:00
Wuzzy 55c714ec48 Warn player about the incomplete End dimension 2017-12-13 02:55:23 +01:00
Wuzzy 89ef81b4c5 Remove buggy chests and furnaces from villages 2017-12-13 00:50:13 +01:00
Wuzzy 3b9b34a0de Add warning when building a village 2017-12-13 00:50:03 +01:00
Wuzzy 3f0bfa0aa8 Add maphack privilege for advanced blocks like command blocks 2017-12-13 00:30:23 +01:00
Wuzzy 5d2df6db4c Fix broken huge mushroom caps generating 2017-12-12 23:59:35 +01:00
Wuzzy 6a9a00b387 Add death message if player killed by lightning 2017-12-12 23:53:54 +01:00
Wuzzy 40d22d2173 Fix crash when using eye of ender in singlenode 2017-12-11 19:33:58 +01:00
Wuzzy 96c7df9b45 Add basic help for huge mushroom stems 2017-12-11 18:15:40 +01:00
Wuzzy 666d56e11c Update mushroom README files 2017-12-11 18:04:54 +01:00
Wuzzy cd20cbbb92 Update huge mushroom schematics 2017-12-11 18:02:42 +01:00
Wuzzy 260e15aca7 Experimental legacy support for old mushroom block 2017-12-11 17:12:12 +01:00
Wuzzy a82610fef1 Allow pores on each side of huge mushroom caps
Also automatically create porse when placing cap blocks next to each other.
Node names are changed.
2017-12-11 16:28:28 +01:00
Wuzzy 759a9524fc Add bark stairs and slabs 2017-12-11 06:53:00 +01:00
Wuzzy f38f1ec061 Rewrite help of riverwaterlogged sponge 2017-12-11 04:57:40 +01:00
Wuzzy b433bb2f4b Add fence sound licensing 2017-12-11 04:14:38 +01:00
Wuzzy 05c324748f Slightly shift search field in Creative inventory 2017-12-11 04:04:32 +01:00
Wuzzy 972c00e944 Version 0.32.0 2017-12-11 01:57:15 +01:00
Wuzzy 7d00c008d0 Fixed height of end portal shrines in flat worlds 2017-12-11 01:56:50 +01:00
Wuzzy 0290511578 Infested blocks now break instantly 2017-12-11 01:43:01 +01:00
Wuzzy 2c9b686885 Rename monster egg to “infested” blocks 2017-12-11 01:28:53 +01:00
Wuzzy ea649b7e71 Update Conversion Table WRT river water 2017-12-11 01:05:18 +01:00
Wuzzy c4dbbc9147 Item frames no longer have an owner 2017-12-10 23:06:03 +01:00
Wuzzy a79c2ade05 Fix dependency mess of mcl_structures 2017-12-10 22:49:49 +01:00
Wuzzy a50f714400 Tweak eye of ender behaviour 2017-12-10 22:40:45 +01:00
Wuzzy 810357f81a Rename end portal room to end portal shrine 2017-12-10 22:22:37 +01:00
Wuzzy 664c24ce7d Eyes of ender now fly to End portal shrines! 2017-12-10 22:20:48 +01:00
Wuzzy 55778ab375 Add function to query stronghold positions 2017-12-10 18:48:34 +01:00
Wuzzy 2d8ad7ebf0 Generate end portal rooms in the world 2017-12-10 18:39:02 +01:00
Wuzzy aff2020731 Remove redundant code in mcl_core 2017-12-10 18:38:37 +01:00
Wuzzy fdae9711f8 Randomize stonebrick stairs in end portal room 2017-12-09 16:50:32 +01:00
Wuzzy eae8b782a8 64 nodes above the Nether are non-deadly void 2017-12-09 15:39:27 +01:00
Wuzzy 53511b69fd Teleport player to spawn if in deep void w/o dmg 2017-12-09 15:25:57 +01:00
Wuzzy d2a7bd1a53 Disallow screwdriver rotation of end portal frame 2017-12-09 15:01:41 +01:00
Wuzzy 5f4d73143e Destroy end portal if end portal frame with eye is removed 2017-12-09 14:58:06 +01:00
Wuzzy 206bd3d29f Fix hole in end portal room schematic 2017-12-09 14:16:53 +01:00
Wuzzy 1537ae276e Tweak stone brick chances of end portal rooms 2017-12-09 14:08:36 +01:00
Wuzzy c4dbbda9fd Add end portal room structure 2017-12-09 02:05:41 +01:00
Wuzzy 957f19a427 Fix missing sounds of new stairs and slabs 2017-12-08 19:03:20 +01:00
Wuzzy 282b7e0025 Fix double slab not working if no craft for slab 2017-12-08 18:41:59 +01:00
Wuzzy f32eeed2cf Fix invalid screwdriver rotation of ender chest 2017-12-08 17:33:45 +01:00
Wuzzy 8d70823331 Add double slab descriptions for mclx_stairs 2017-12-08 17:21:07 +01:00
Wuzzy b7518bcbcc Fix some mcl_weather crashes 2017-12-08 17:16:49 +01:00
Wuzzy 4ad7147123 Restore weather state when restarting server 2017-12-08 16:54:49 +01:00
Wuzzy 3443e68b76 Railcorridors: Use dark oak wood in terracotta 2017-12-08 16:13:02 +01:00
Wuzzy da8729a7a1 Increase pointing range in Creative Mode 2017-12-08 14:00:44 +01:00
Wuzzy 85442e7ce5 Draw proper trapdoor side textures 2017-12-08 13:38:38 +01:00
Wuzzy 681c2950fd Fix mirrored trapdoor top/bottom texture when open 2017-12-08 13:07:24 +01:00
Wuzzy faafaadc54 Fix memory leak in mcl_craftguide 2017-12-08 11:29:25 +01:00
Wuzzy d9a8403e11 Use red sand as river bed in Mesa and MesaPlateauF 2017-12-07 14:35:12 +01:00
Wuzzy 5851bf5a0e Increase in-water opacity 2017-12-06 01:01:58 +01:00
Wuzzy 5f4f22bddd Update conversion table 2017-12-06 00:26:54 +01:00
Wuzzy ff1996c708 Merge branch 'river_water' 2017-12-05 23:01:05 +01:00
Wuzzy 51e9d7cd93 Add mcl_supplemental fence aliases 2017-12-05 17:35:10 +01:00
Wuzzy 931da727bc Add new slab side textures for mclx slabs 2017-12-05 17:22:35 +01:00
Wuzzy 5f1c4f77bb Add a ton of non-MC slabs and stairs 2017-12-05 16:21:49 +01:00
Wuzzy c96d97671a Add nether brick fence gate + red nb fence (+gate)
This is the first commit in master which officially breaks the block strictness.
2017-12-05 15:52:35 +01:00
Wuzzy 83f7655f31 Don't rotate ladder and vine 2017-12-05 14:17:07 +01:00
Wuzzy 320567e1f2 Add basic screwdriver support 2017-12-05 14:09:39 +01:00
Wuzzy 2b9f37b3e8 Add death messages for kill from baby mobs 2017-12-03 11:23:37 +01:00
Wuzzy e227470474 Fix falling node falling forever on fences (hacky) 2017-12-01 22:22:00 +01:00
Wuzzy 312652552e Delete un-initialized item entities on first step
Due to data corruption, item entities in a world may be loaded with
empty staticdata. These items are now deleted on their first on_step.
This commit also should fix all dropped hand bugs.
2017-12-01 18:50:15 +01:00
Wuzzy a5b213968c Fix failure to clear snow weather correctly 2017-12-01 16:02:29 +01:00
Wuzzy 785b4a2ef7 Dispensers dispense water buckets into cauldrons 2017-11-30 21:08:28 +01:00
Wuzzy 74d5da78a1 Simplify water mixing rules in cauldron 2017-11-30 20:35:21 +01:00
Wuzzy e2a441fed1 Fix banner washing off on river water cauldron 2017-11-30 19:59:50 +01:00
Wuzzy 2a78471ef1 Fix cauldrons and rain 2017-11-30 19:57:06 +01:00
Wuzzy c12e07d8c7 Remove brewing references from help 2017-11-30 19:41:30 +01:00
Wuzzy 142317c65a Add river water support for bottles and cauldrons 2017-11-30 19:27:57 +01:00
Wuzzy 99af7618ee Fix mcl_sponges dependencies 2017-11-30 17:46:47 +01:00
Wuzzy 443fb284cb Add riverwaterlogged sponge, rename wet sponge 2017-11-30 17:36:08 +01:00
Wuzzy 2093a6b5c2 Water mobs now swim in river water 2017-11-30 15:39:19 +01:00
Wuzzy 135a214213 Make river water non-renewable 2017-11-30 15:01:33 +01:00
Wuzzy c47a762766 Fix river water bucket wieldview transform 2017-11-30 14:59:13 +01:00
Wuzzy be51523459 Add water_bucket group 2017-11-30 14:57:40 +01:00
Wuzzy 438039f3fb Add river water bucket 2017-11-30 14:50:37 +01:00
Wuzzy b4bb986d61 Add river water 2017-11-30 14:19:00 +01:00
Wuzzy 9c80f8d970 Remove mcl_dungeons unused code 2017-11-30 10:21:54 +01:00
Wuzzy 5fb9b8bad7 Version 0.31.0 2017-11-29 02:12:17 +01:00
Wuzzy 26c5e048d0 Write help entry for hunger 2017-11-28 16:48:01 +01:00
Wuzzy 479a811c86 Add basic mob and animal help entries 2017-11-28 15:20:55 +01:00
Wuzzy 5ccb5ee71e Help: Add Creative Mode 2017-11-28 13:47:34 +01:00
Wuzzy abfe009246 Change emerald-related crafts 2017-11-28 12:54:30 +01:00
Wuzzy 6d6999bcea Creepers drop all music discs now; remove crafts 2017-11-28 12:45:39 +01:00
Wuzzy 83a3cce932 Fix pumpkin pie crafting 2017-11-28 08:31:22 +01:00
Wuzzy 72684f36ff Remove faceless pumpkins from survival again
The top face rotates when you use shears on the pumpkin.
2017-11-27 12:40:07 +01:00
Wuzzy 060a853840 Add end escape pearl 2017-11-27 12:17:26 +01:00
Wuzzy 6b10633332 Insta-harden concrete powder if placed in water 2017-11-27 11:38:30 +01:00
Wuzzy f9a2607200 Make falling anvils crush some nodes 2017-11-27 07:57:02 +01:00
Wuzzy c6016c2053 Add MC-like falling nodes 2017-11-26 15:05:45 +01:00
Wuzzy f0b5f10c90 Update mcl_spawn 2017-11-26 15:04:31 +01:00
Wuzzy 6eab8e213c Add 5 wood trapdoors, change oak trapdoor texture 2017-11-24 12:07:16 +01:00
Wuzzy de04fbc062 Fix respawn bugs 2017-11-24 07:24:13 +01:00
Wuzzy 9faef59f53 Reduce player liquid sinking speed 2017-11-24 07:07:21 +01:00
Wuzzy 351f1834a3 Add Spawn API 2017-11-24 07:04:03 +01:00
Wuzzy 124e1aac94 Update API.md 2017-11-24 06:47:19 +01:00
Wuzzy a5107bc38e Add temporary recipes for the new smooth blocks 2017-11-24 05:06:32 +01:00
Wuzzy b221ca379c Make bark craftable 2017-11-24 04:55:02 +01:00
Wuzzy f8d5c23291 Fix another rain sound update bug 2017-11-24 04:21:10 +01:00
Wuzzy 2858fbb54a Update rain particles faster when teleporting 2017-11-24 04:05:12 +01:00
Wuzzy 6d609be8c7 Instant rain sound updates when changing dimension 2017-11-24 04:00:30 +01:00
Wuzzy b1d15fb667 Update sky instant if teleport between dimensions 2017-11-24 03:48:32 +01:00
Wuzzy b0c87f74fe Move world-related functions to mcl_worlds 2017-11-24 03:10:02 +01:00
Wuzzy 06ef86ddd3 Move entire sky color code into mcl_weather 2017-11-24 01:39:52 +01:00
Wuzzy d55928fe95 Fix lightnings in the End 2017-11-23 22:31:39 +01:00
Wuzzy 2e6aa37ca4 Remove piston base when piston head got destroyed 2017-11-23 21:15:42 +01:00
Wuzzy 5c98a01fb1 Generalize piston arm destruction 2017-11-23 20:52:33 +01:00
Wuzzy 390bbf628f Fix broken MVPS stoppers 2017-11-23 20:49:05 +01:00
Wuzzy f55025be17 Add end portal frames as portal stoppers 2017-11-23 20:11:03 +01:00
Wuzzy 219e6ff146 Fix incomplete door destruction code
This fixes doors being destroyed by activating an End portal
2017-11-23 19:36:55 +01:00
Wuzzy 62364a65ca Add smooth quartz 2017-11-23 03:24:39 +01:00
Wuzzy 35407a8b31 Fix pumpkin face group 2017-11-23 01:24:47 +01:00
Wuzzy ab0de78151 More accurate hopper selection box 2017-11-23 00:41:26 +01:00
Wuzzy f5de6db4aa Add grass path and farmland to creative inventory 2017-11-23 00:32:51 +01:00
Wuzzy 8826cafa7c Allow to carve pumpkins 2017-11-23 00:20:49 +01:00
Wuzzy ce544cce6e Add faceless pumpkin 2017-11-23 00:05:31 +01:00
Wuzzy a66df6bc9a Add polished stone and smoother sandstone 2017-11-22 23:42:39 +01:00
Wuzzy 7cc6b9eada Add 6 bark blocks 2017-11-22 22:58:45 +01:00
Wuzzy bc3190d5a9 Change pressure_plate group 2017-11-22 22:42:00 +01:00
Wuzzy 7fab1ada00 Add buttons for all woods 2017-11-22 22:41:43 +01:00
Wuzzy a2fefb264b Refactor button registration 2017-11-22 22:24:05 +01:00
Wuzzy 6efddc833c Add pressure plates for each wood type 2017-11-22 22:08:09 +01:00
Wuzzy aa8507f94a Fix End portal platform sometimes not spawning 2017-11-22 06:18:08 +01:00
Wuzzy 768c97205a Reduce fire extinguish sound 2017-11-22 03:10:01 +01:00
Wuzzy 6d727137c2 Rain puts out fire faster 2017-11-22 03:04:20 +01:00
Wuzzy 91c06fd77a Tweak snow sky 2017-11-22 02:59:09 +01:00
Wuzzy 1332ae683f Lightnings light up the surroundings as well 2017-11-22 02:19:04 +01:00
Wuzzy 89ab761fa5 Fix day/night ratio override in dimensions 2017-11-22 02:08:39 +01:00
Wuzzy bbb6900d4a Fix rain sound failure when moving very fast 2017-11-22 02:01:40 +01:00
Wuzzy 3df64d9426 Tweak day/night ratio issues 2017-11-22 01:56:41 +01:00
Wuzzy dd17e5ca9d Tweak rain sky color 2017-11-22 01:45:59 +01:00
Wuzzy bccc7fa957 Merge branch 'master' into day_night_ratio 2017-11-22 01:41:23 +01:00
Wuzzy c434a41dec Refactor and tweak sky light overwrite 2017-11-22 01:09:41 +01:00
Wuzzy ae8b7550ac Play damage sound when player dies 2017-11-21 23:38:20 +01:00
Wuzzy eed223b3fe Tweak tab positions in Creative 2017-11-21 23:23:56 +01:00
Wuzzy 7a8dad991b Refactor mcl_portals 2017-11-21 22:58:11 +01:00
Wuzzy 7920707ca4 Don't allow to use bed while sleeping 2017-11-21 20:23:34 +01:00
Wuzzy a575124924 Don't suffocate in ignore 2017-11-21 20:20:17 +01:00
Wuzzy f1ac073cb1 Implement end portal frame 2017-11-21 09:54:45 +01:00
Wuzzy cb898ddbfa Update End portal help 2017-11-21 07:39:56 +01:00
Wuzzy 8982dd82ca Tweak end portal compat code 2017-11-21 07:26:45 +01:00
Wuzzy fc17303b1e Generate end exit portal near the spawn in the End 2017-11-21 07:24:56 +01:00
Wuzzy 71be25f44a Only play tele sound for players 2017-11-21 06:03:07 +01:00
Wuzzy 3abf2355e6 Fix exit portal teleporting back in flat mapgen 2017-11-21 05:57:08 +01:00
Wuzzy 7c15d5f9ac More MC-like end portal block (WIP) 2017-11-21 05:39:27 +01:00
Wuzzy 526217a21b Disable Nether portals in the End 2017-11-21 02:05:52 +01:00
Wuzzy 69ade14509 Rename weather_pack mod to mcl_weather 2017-11-21 01:35:31 +01:00
Wuzzy 37668eb1f9 Remove dependency on Pillow library 2017-11-20 20:51:58 +01:00
Wuzzy 06edeba5d0 Version 0.30.0 2017-11-20 19:24:06 +01:00
Wuzzy 07219b96b1 Fix shears not wear off if dig tallgrass etc. 2017-11-20 09:35:08 +01:00
Wuzzy 45c385628a Fix crash when piston got pushed next to redstone 2017-11-20 08:04:09 +01:00
Wuzzy 899acaab0e Hide WIP items from craft guide, more cleanup
- Make fishing rod uncraftable (too overpowered)
- Lift WIP status from golden apple
- Lift Experimental status from lookup tool
2017-11-20 07:52:24 +01:00
Wuzzy a1e53fa129 Use dry grass blocks in the Nether 2017-11-20 05:37:04 +01:00
Wuzzy f3919cace9 Beds now allow to skip thunderstorms 2017-11-20 05:06:58 +01:00
Wuzzy 547eb893af Refactor weather change code 2017-11-20 04:26:43 +01:00
Wuzzy fd32ee0318 Fix placing stairs = crash 2017-11-20 03:26:34 +01:00
Wuzzy cbc122836d Rotate spawned record of juke boxes 2017-11-18 22:12:36 +01:00
Wuzzy d549dc0752 Add missing nil check for minetest.get_node_light 2017-11-18 21:39:00 +01:00
Wuzzy 79ca0b2ab9 Workaround for crash if place stair/slab/trapdoor inside a buildable_to node 2017-11-18 20:57:41 +01:00
Wuzzy 34d4c19855 Update texture converter comments 2017-11-18 20:31:56 +01:00
Wuzzy 6a8cf24100 Converter: Add mcl_supplemental support 2017-11-18 20:30:21 +01:00
Wuzzy 14578baec1 Fix button inv. image breaking if use texture pack 2017-11-18 20:00:36 +01:00
Wuzzy 6a9d3fe55e Converter: Generate crossings and junctions 2017-11-18 19:38:59 +01:00
Wuzzy 620d8a7804 Fix previous creative inventory button not working after death 2017-11-18 09:03:49 +01:00
Wuzzy 28fe2ae184 Update texture conversions 2017-11-18 07:57:51 +01:00
Wuzzy ca833e0d5e Refactor texture converter 2017-11-18 07:39:02 +01:00
Wuzzy cc0e3452df Converter: Tweak foliage color 2017-11-18 07:16:06 +01:00
Wuzzy 2cf712a0be Fix broken alpha in texture converter 2017-11-18 06:13:08 +01:00
Wuzzy 1319271fd4 Texture converter: refactor convert_alphatex 2017-11-18 05:52:40 +01:00
Wuzzy e2daac4c33 Fix fern being gray in flower pot 2017-11-18 04:47:16 +01:00
Wuzzy 5519f6b7a3 Remove annoying nodes.lua in flowerpots mod 2017-11-18 04:44:23 +01:00
Wuzzy c9c5c43010 Converter: Blacklist a couple of textures 2017-11-18 04:42:42 +01:00
Wuzzy 608571cfa7 Clean up Texture Converter stuff 2017-11-18 03:42:44 +01:00
Wuzzy a7507482a6 Fix some texture conversions, add -p to Texture Converter 2017-11-18 03:40:29 +01:00
Wuzzy a19549d77e Add options to the texture converter 2017-11-18 02:33:43 +01:00
Wuzzy 7913a93969 Relicence texture converter under MIT 2017-11-18 01:25:55 +01:00
Wuzzy c8e1379196 More orange in orange glazed terracotta texture 2017-11-17 23:52:06 +01:00
Wuzzy cbd3061d1b Change allium texture 2017-11-17 23:51:50 +01:00
Wuzzy e79384f906 Retexturize door sides 2017-11-17 22:46:42 +01:00
Wuzzy cf1b999ab6 Generalize grass color check 2017-11-16 07:48:55 +01:00
Wuzzy a9d95dea23 Use hardware coloring for tallgrass and friends 2017-11-16 03:13:19 +01:00
Wuzzy 8db574d30e Clean up grass block group stuff 2017-11-15 20:27:29 +01:00
Wuzzy 54ae1190d6 Allow spruces at Y=1 2017-11-15 06:23:46 +01:00
Wuzzy 06d109e86b Fix can place flower podzol and coarse dirt
Also fix help entries
2017-11-15 05:02:37 +01:00
Wuzzy 192a440745 Tweak selection boxes of plantlike nodes 2017-11-15 04:40:29 +01:00
Wuzzy 9507aa6a90 Make grass block dry when placed next to dry grass 2017-11-15 03:47:08 +01:00
Wuzzy 74e1a7d326 Take grass block when enderman took dry grass b. 2017-11-15 03:12:31 +01:00
Wuzzy f53cf859c2 Fix mob spawning in savannas 2017-11-15 02:36:56 +01:00
Wuzzy c79b1062cc Add small beach to plains biomes 2017-11-15 02:30:30 +01:00
Wuzzy 6b2c06934a Autom. make grass/fern dry if placed on dry grass 2017-11-15 01:29:17 +01:00
Wuzzy 4083432770 Bone meal spawns less floer species on dry grass 2017-11-14 23:52:03 +01:00
Wuzzy 72f5591400 Add dry-colored grass/fern variants 2017-11-14 23:44:53 +01:00
Wuzzy 3bc9918370 Update texture conversion table 2017-11-14 18:30:25 +01:00
Wuzzy c698714d95 Convert jukebox tracks to mono 2017-11-13 01:30:47 +01:00
Wuzzy aaef558909 Convert all sounds (except music) to mono 2017-11-13 01:24:24 +01:00
Wuzzy 1c085b5467 Mobs_mc: Convert mob sounds to mono 2017-11-13 00:46:52 +01:00
Wuzzy f0e0e754b0 Implement more logical weather transitions 2017-11-12 06:57:11 +01:00
Wuzzy 15b96ff7cf Fix very loud snow footstep sound 2017-11-12 06:08:09 +01:00
Wuzzy e1d362d215 Increase weather duration 2017-11-12 05:27:18 +01:00
Wuzzy b220a07877 Fix more weather length issues 2017-11-12 05:14:25 +01:00
Wuzzy de6096f47a Fix pig→zombiepig lightning transform 2017-11-12 05:11:21 +01:00
Wuzzy f052f147b5 Tweak weather durations to be more MC-like 2017-11-12 05:03:26 +01:00
Wuzzy b7880529a8 Make everything dark for player when in weather (WIP) 2017-11-12 04:36:26 +01:00
Wuzzy 562bd6cd5a Reduce raindrop count in thunderstorms 2017-11-12 03:28:53 +01:00
Wuzzy 4f639b024d Lightnings cause damage, change pigs and villagers 2017-11-12 03:24:46 +01:00
Wuzzy c09ca3363d Rarely spawn skeletons (+s. horse) on lightning 2017-11-12 02:48:18 +01:00
Wuzzy b3ad5c7927 Generate more raindrops in thunderstorms 2017-11-12 02:10:22 +01:00
Wuzzy de45af5e79 Tweak sky color on rain and thunderstorm 2017-11-12 01:36:37 +01:00
Wuzzy 10a0819790 Fix hearable rain in Nether and End dimensions 2017-11-11 21:14:03 +01:00
Wuzzy b4f1d2c521 Move eternal fire ignition code to the actual node 2017-11-11 19:52:11 +01:00
Wuzzy c6a471e5a7 Weather_pack: os.time → minetest.get_gametime 2017-11-11 17:18:53 +01:00
Wuzzy 53f231a576 Fix biomemap being screwed up in mcl_mapgen_core 2017-11-07 20:16:25 +01:00
Wuzzy d4708c804a Don't generate bedrock and lava in singlenode 2017-11-07 05:29:39 +01:00
Wuzzy 44e756cc8d Change glazed terracotta textures to 16×16
Thanks, MysticTempest!
2017-11-06 15:24:32 +01:00
Wuzzy e157db0c49 Version 0.29.2 2017-11-05 05:10:23 +01:00
Wuzzy 6ff1be07cb Fix crash on join w/ compass + static_spawnpoint set in bracket format 2017-11-05 02:50:31 +01:00
Wuzzy 5403a97a56 Fix ocelots being aggressive to players 2017-11-04 00:37:02 +01:00
Wuzzy c2684d0eac Update Mobs Redo to version 1.40 2017-11-04 00:22:43 +01:00
Wuzzy 088bb40908 Update mobs_mc 2017-11-03 22:14:27 +01:00
Wuzzy 7055b68f6b Fix armor stand repairing damaged armor 2017-11-03 00:01:15 +01:00
Wuzzy d66de5adfb Reduce frequency of vines ABM to reduce load 2017-11-02 23:52:09 +01:00
Wuzzy 2a8fcd119b Fix vines destruction not destoying hanging vines 2017-11-02 23:42:20 +01:00
Wuzzy 1e2343d649 Make floating vines decay
Also destroy them immediately with leafdecay and when try try to grow but notice they have been floating the whole time.
2017-11-02 23:21:04 +01:00
Wuzzy 71f9250fcf Fix possible item duplication with item frames 2017-11-02 20:52:14 +01:00
Wuzzy 664499313e Generalize Nether portal achievement description 2017-09-19 20:06:57 +02:00
Wuzzy df19ff0a72 Version 0.29.1 2017-09-19 19:53:38 +02:00
Wuzzy b091186421 Revert "Make carpets non-attached"
This reverts commit 10a1379b64.
2017-09-19 19:50:07 +02:00
Wuzzy 10a1379b64 Make carpets non-attached 2017-09-19 19:45:23 +02:00
Wuzzy d9602eb3bc Close chest formspec if chest is destroyed 2017-09-19 19:40:54 +02:00
Wuzzy 0267fc98ab Update desert temple schematic 2017-09-19 19:29:12 +02:00
Wuzzy 0228f77cb2 Show v6 icon for unique red sand recipe 2017-09-19 19:19:07 +02:00
Wuzzy f51c8c75ba Update hudbars mod to 1.10.0 2017-09-19 17:20:47 +02:00
Wuzzy 487281d76b Update hbarmor to 0.4.0 2017-09-19 17:19:39 +02:00
Wuzzy b66c1268d7 Blaze fireball / fire charge: Take fly dir into account when spawning fire 2017-09-19 17:16:04 +02:00
Wuzzy 1d37bec032 Update obsidian help 2017-09-19 15:47:00 +02:00
Wuzzy 70198eb50b Allow to light Nether portal with any fire 2017-09-19 15:45:23 +02:00
Wuzzy 3857ff43ef Fix creation of broken Nether portals 2017-09-19 15:08:46 +02:00
Wuzzy e9b2a26cd4 No double-check of air in portal_nether.lua 2017-09-19 14:15:31 +02:00
Wuzzy 486b84c7c8 Increase sugar canes spread in non-v6 mapgens 2017-09-19 13:51:09 +02:00
Wuzzy d4b7e2f1d6 Update sugar canes swampland biomes 2017-09-19 13:50:07 +02:00
Wuzzy e03a2ee9a2 Make sugar canes less common in v6 2017-09-19 13:47:04 +02:00
Wuzzy 2f0450a0c3 Fix crash and outdated Mesecons API code in mcl_comparators 2017-09-18 23:34:08 +02:00
Wuzzy 39ad79dbe8 Fix Nether portals sometimes being generated out of range 2017-09-15 22:00:03 +02:00
Wuzzy 0af350b439 Make red sand craftable in v6 2017-09-15 21:08:46 +02:00
Wuzzy 4548f2d19e Add new lever model by Gerold55 2017-07-31 05:35:55 +02:00
921 changed files with 24491 additions and 11815 deletions

35
API.md
View File

@ -9,10 +9,19 @@ Mods mods in MineClone 2 follow a simple naming convention: Mods with the prefix
## Adding items
### Special fields
Items can have these fields:
* `_mcl_generate_description(itemstack)`: Required for any items which manipulate their
description in any way. This function takes an itemstack of its own type and must set
the proper advanced description for this itemstack. If you don't do this, anvils will
fail at properly restoring the description when their custom name gets cleared at an
anvil.
See `mcl_banners` for an example.
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
* `_mcl_blast_resistance`: How well this block blocks and resistst explosions. Default: 0
* `_mcl_blast_resistance`: How well this block blocks and resists explosions. Default: 0
* `_mcl_after_falling(pos)`: Called after a falling node finished falling and turned into a node.
Use the `mcl_sounds` mod for the sounds.
@ -22,17 +31,26 @@ A lot of things are possible by using one of the APIs in the mods. Note that not
### Items
* Doors: `ITEMS/mcl_doors`
* Fences and fence gates: `ITEMS/mcl_fences`
* Stairs and slabs: `ITEM/mcl_stairs`
* Walls: `ITEMS/mcl_walls`
* Beds: `ITEMS/mcl_beds`
* Buckets: `ITEMS/mcl_buckets`
* Dispenser support: `ITEMS/REDSTONE/mcl_dispensers`
## Mobs
* Mobs: `ENTITIES/mods`
* Mobs: `ENTITIES/mcl_mods`
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.
MineClone 2 uses Mobs Redo [`mobs`] by TenPlus1, a very powerful mod for adding mods of various types.
There are modificiations from the original mod for MineClone 2 compability. Some items have been removed or moved to other mods, but the API is identical.
You can add your own mobs, spawn eggs and spawning rules with this mod.
API documnetation is included in `ENTITIES/mobs/api.txt`.
API documnetation is included in `ENTITIES/mcl_mobs/api.txt`.
This mod includes modificiations from the original Mobs Redo. Some items have been removed or moved to other mods.
The API is mostly identical, but a few features have been added. Compability is not really a goal,
but function and attribute names of Mobs Redo 1.41 are kept.
If you have code for a mod which works fine under Mobs Redo, it should be easy to make it work in MineClone 2,
chances are good that it works out of the box.
### Help
* Item help texts: `HELP/doc/doc_items`
@ -43,19 +61,20 @@ API documnetation is included in `ENTITIES/mobs/api.txt`.
* Statbars: `HUD/hudbars`
### Utility APIs
* Change player physics: `PLAYER/playerphysics`
* Select random treasures: `CORE/mcl_loot`
* 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`
### Unstable APIs
These 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!
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!
* Panes (like glass panes and iron bars): `ITEMS/xpanes`
* Slabs and stairs: `ITEM/mcl_stairs` **and** `ITEMS/mcstair`
* `_on_ignite` callback: `ITEMS/mcl_fire`
* Farming: `ITEMS/mcl_farming`
* Other mods not listed above
* Anything related to redstone: Don't touch (yet)
* Any other mod not explicitly mentioned above
### Planned APIs

View File

@ -14,7 +14,7 @@ channel on irc.freenode.net. And finally, you can send e-mails to
There is **no** guarantee I will accept anything from anybody.
By sending me patches or asking me to include your changes in this subgame,
By sending me patches or asking me 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.
@ -70,4 +70,4 @@ Depending on what you add, the chances for inclusion vary:
## Reporting bugs
Report all bugs and missing Minecraft features here:
<https://github.com/Wuzzy2/MineClone2-Bugs>
<https://git.minetest.land/Wuzzy/MineClone2-Bugs>

View File

@ -1,5 +1,5 @@
## Groups
This document explains all the groups used in this subgame.
This document explains all the groups used in this game.
### Special groups
@ -29,6 +29,8 @@ Please read <http://minecraft.gamepedia.com/Breaking> to learn how digging times
### Groups for interactions
* `crush_after_fall=1`: For falling nodes. These will crush whatever they hit after falling, not dropping as an item
* `falling_node_damage=1`: For falling nodes. Hurts any objects it hits while falling. Damage is based on anvils
* `dig_by_water=1`: Blocks with this group will drop when they are near flowing water
* `destroy_by_lava_flow=1`: Blocks with this group will be destroyed by flowing lava
* `dig_by_piston=1`: Blocks which will drop as an item when pushed by a piston. They also cannot be pulled by sticky pistons
@ -36,7 +38,8 @@ Please read <http://minecraft.gamepedia.com/Breaking> to learn how digging times
* `cultivatable=1`: Block will be turned into Dirt by using a hoe on it
* `flammable`: Block helps spreading fire and gets destroyed by nearby fire (rating doesn't matter)
* `spreading_dirt_type=1`: A dirt-type block with a cover (e.g. grass) which may spread to neighbor dirt blocks
* `dirtifies_below_solid=1`: This node turns into dirt immediately when a solid node is placed on top
* `dirtifies_below_solid=1`: This node turns into dirt immediately when a solid or dirtifier node is placed on top
* `dirtifier=1`: This node turns nodes the above group into dirt when placed above
* `non_mycelium_plant=1`: A plant which can't grow on mycelium. Placing it on mycelium fails and if mycelium spreads below it, it uproots
* `soil=1`: Saplings and other small plants can grow on it
* `soil_sapling=2`: Soil for saplings. Intended to be natural soil. All saplings will grow on this
@ -48,6 +51,11 @@ Please read <http://minecraft.gamepedia.com/Breaking> to learn how digging times
* `destroys_items=1`: If an item happens to be *inside* this node, the item will be destroyed
* `no_eat_delay=1`: Only for foodstuffs. When eating this, all eating delays are ignored.
* `can_eat_when_full=1`: Only for foodstuffs. This item can be eaten when the user has a full hunger bar
* `attached_node_facedir=1`: Like `attached_node`, but for facedir nodes
* `cauldron`: Cauldron. 1: Empty. 2-4: Water height
* `anvil`: Anvil. 1: No damage. 2-3: Higher damage levels
* `no_rename=1`: Item cannot be renamed by anvil
* `comparator_signal=X`: If set, this node outputs a constant (!) comparator signal output of strength X.
#### Footnotes
@ -71,6 +79,7 @@ Please read <http://minecraft.gamepedia.com/Breaking> to learn how digging times
* `wool=1`: Wool (only full blocks)
* `carpet=1:` (Wool) carpet
* `stick=1`: Stick
* `water_bucket=1`: Bucket containing a liquid of group “water”
### Material groups
@ -89,10 +98,12 @@ These groups are used mostly for informational purposes
* `solid=1`: Solid full-cube block (automatically assigned)
* `opaque=1`: Opaque block (automatically assigned)
* `not_solid=1`: Block is sold (only assign this group for nodes which are automatically detected as “solid” in error
* `not_solid=1`: Block is not solid (only assign this group for nodes which are automatically detected as “solid” in error
* `not_opaque=1`: Block is not opaque (only assign this group for nodes which are automatically detected as “opaque” in error
* `fire=1`: Fire
* `water=1`: Water
* `lava=1`: Lava
* `top_snow=X`: Top snow with X layers (1-8)
* `torch`: Torch or torch-like node
* `torch=1`: Torch on floor
* `torch=2`: Torch at wall
@ -109,6 +120,7 @@ These groups are used mostly for informational purposes
* `flower_pot=2`: Flower pot with a plant or flower
* `flower=1`: Flower
* `place_flowerlike=1`: Node has placement rules like that of a flower
* `place_flowerlike=2`: Node has placement rules like tall grass
* `cake`: Cake (rating = slices left)
* `book=1`: Book
* `pane=1`: Node is a “pane”-like node glass pane or iron bars
@ -140,12 +152,27 @@ These groups are used mostly for informational purposes
* `container=5`: Left part of a 2-part horizontal connected container. Both parts have a `"main"` inventory
list. Both inventories are considered to belong together. This is used for large chests.
* `container=6`: Same as above, but for the right part.
* `container=7`: Has inventory list "`main`", no movement allowed
* `container=1`: Other/unspecified container type
* `spawn_egg=1`: Spawn egg
* `pressure_plate=1`: Pressure plate (off)
* `pressure_plate=2`: Wooden pressure (on)
* `button=1`: Button (off)
* `button=2`: Button (on)
* `redstone_torch=1`: Redstone Torch (lit)
* `redstone_torch=2`: Redstone Torch (unlit)
* `plant=1`: Plant or part of a plant
* `double_plant`: Part of a double-sized plant. 1 = lower part, 2 = upper part
* `pickaxe=1`: Pickaxe
* `shovel=1`: Shovel
* `axe=1`: Axe
* `sword=1`: Sword
* `hoe=1`: Hoe (farming tool)
* `shears=1`: Shears
* `weapon=1`: Item is primarily (!) a weapon
* `tool=1`: Item is primarily (!) a tool
* `craftitem=1`: Item is primarily (!) used for crafting

View File

@ -2,7 +2,7 @@
An unofficial Minecraft-like game for Minetest. Forked from MineClone by daredevils.
Developed by Wuzzy and contributors. Not developed or endorsed by Mojang AB.
Version: 0.29.0
Version: 0.49.0
### Gameplay
You start in a randomly-generated world made entirely of cubes. You can explore
@ -60,21 +60,29 @@ The following items are interesting for Creative Mode and for adventure
map builders. They can not be obtained in-game or in the creative inventory.
* Barrier: `mcl_core:barrier`
* Command Block: `mesecons_commandblock:commandblock_off`
* Monster Spawner: `mcl_mobspawners:spawner`
* Huge mushroom blocks: See `mods/ITEMS/mcl_mushrooms/README.md`
* Minecart with Command Block: `mcl_minecarts:command_block_minecart`
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:
* Fishing Rod: `mcl_fishing:fishing_rod`
* Activator Rail: `mcl_minecarts:activator_rail`
* 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) 0.4.16 (or later) to run,
so you need to install Minetest first. Only stable versions of Minetest are
officially supported. There is no support whatsoever for running MineClone 2
in development versions of Minetest.
To install MineClone 2, move this directory into the “games” directory of
your Minetest data directory. Consult the help of Minetest to learn more.
This game requires [Minetest](http://minetest.net) to run (version 5.0.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.
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.
## Project description
The main goal of **MineClone 2** is to be a clone of Minecraft and to be released as free software.
@ -89,15 +97,17 @@ The main goal of **MineClone 2** is to be a clone of Minecraft and to be release
## Completion status
This game is currently in **alpha** stage.
It is playable, but very unfinished, many bugs are to be expected.
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).
The following main features are available:
* Tools, weapons and armor
* Tools, weapons
* Armor (unbalanced)
* Crafting system: 2×2 grid, crafting table (3×3 grid), furnace, including a crafting guide
* Chests, large chests, ender chests, shulker boxes
* Furnaces, hoppers
* Hunger
* Most monsters and animals
* All ores from Minecraft
@ -106,7 +116,7 @@ The following main features are available:
* Weather
* 28 biomes
* The Nether, a fiery underworld in another dimension
* Redstone circuits (partially): Redstone ore, redstone, redstone repeater, levers, buttons, redstone blocks, redstone lamps
* Redstone circuits (partially)
* Minecarts (partial)
* Boats
* Fire
@ -125,14 +135,13 @@ The following main features are available:
* Inventory menu
* Creative inventory
* Farming
* Bookshelves (deco only)
* Writable books
* A few server commands
* And more!
The following features are incomplete:
* Generated structures
* Generated structures (especially villages)
* NPCs
* Some monsters and animals
* Redstone-related things
@ -141,7 +150,7 @@ The following features are incomplete:
* Experience
* Status effects
* Brewing, potions, tipped arrows
* Anvil
* Special minecarts
* A couple of non-trivial blocks and items
Bonus features (not found in Minecraft 1.11):
@ -149,24 +158,33 @@ Bonus features (not found in Minecraft 1.11):
* 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
* Temporary crafting recipes. They only exist to make some otherwise unaccessible items available when you're not in creative mode. These recipes will be removed as development goes on an more features become available
* Saplings in chests in mapgen v6
* Fully moddable (thanks to Minetest's powerful Lua API)
* New blocks and items:
* Lookup tool, shows you the help for whatever it touches
* More slabs and stairs
* Nether Brick Fence Gate
* Red Nether Brick Fence
* Red Nether Brick Fence Gate
Technical differences from Minecraft:
* Height limit of ca. 31000 blocks (much higher than in Minecraft)
* Horizontal world size is ca. 62000×62000 blocks (much smaller than in Minecraft, but it is still very large)
* Still very, very incomplete and buggy
* Still very incomplete and buggy
* Blocks, items, enemies and other features are missing
* A few items have slightly different names to make them easier to distinguish
* Different music for jukebox
* Different textures (Pixel Perfection)
* Different sounds (various sources)
* Different engine (Minetest)
* Free software (“free” as in freedom *and* free beer)
… and finally, MineClone 2 is free software (“free” as in “freedom”)!
## Reporting bugs
Please report all bugs and missing Minecraft features here:
<https://github.com/Wuzzy2/MineClone2-Bugs>
<https://git.minetest.land/Wuzzy/MineClone2-Bugs>
## Other readme files
@ -219,7 +237,7 @@ This project is currently mostly a one-person project.
This is a fan game, not developed or endorsed by Mojang AB.
Copying is an act of love. Please copy and share! <3
But, oh well, if you insist, here is the legalese for you:
Here's the detailed legalese for those who need it:
### License of source code
MineClone 2 is a clean-room implementation of Minecraft
@ -238,18 +256,14 @@ 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: <https://www.planetminecraft.com/texture_pack/131pixel-perfection/>
License: [CC BY-SA 4.0](http://creativecommons.org/licenses/by-sa/4.0/)
MineClone 2 is currently in the processs of changing all the textures.
The textures for the glazed terracotta come from Faithful Vanilla.
(authored by Vattic, xMrVizzy and many others).
Source: <https://minecraft.curseforge.com/projects/faithful-vanilla>
License of all main menu images: WTFPL
The main menu images are release under: [CC0](https://creativecommons.org/publicdomain/zero/1.0/)
All other files, unless mentioned otherwise, fall under:
Attribution-ShareAlike 3.0 Unported (CC BY-SA 4.0)
Creative Commons Attribution-ShareAlike 3.0 Unported (CC BY-SA 4.0)
http://creativecommons.org/licenses/by-sa/4.0/
See README.txt in each mod directory for detailed information about other authors.

1
description.txt Normal file
View File

@ -0,0 +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!

View File

@ -1 +1,2 @@
name = MineClone 2
description = A survival sandbox game. Survive, gather, hunt, build, explore, and do much more.

View File

@ -16,7 +16,7 @@ movement_speed_climb = 2.35
movement_liquid_fluidity = 1.13
movement_liquid_fluidity_smooth = 0.5
movement_liquid_sink = 31
movement_liquid_sink = 23
movement_gravity = 10.4

View File

@ -0,0 +1,10 @@
This mod automatically adds groups to items based on item metadata.
Specifically, this mod has 2 purposes:
1) Automatically adding the group “solid” for blocks considered “solid” in Minecraft.
2) Generating digging time group for all nodes based on node metadata (it's complicated)
See init.lua for more infos.
The leading underscore in the name “_mcl_autogroup” was added to force Minetest to load this mod as late as possible.
As of 0.4.16, Minetest loads mods in reverse alphabetical order.

View File

@ -0,0 +1 @@
MineClone 2 core mod which automatically adds groups to all items. Very important for digging times.

View File

@ -1,11 +1,3 @@
--[[ This mod automatically adds groups to items based on item metadata.
Specifically, this mod has 2 purposes:
1) Automatically adding the group solid for blocks considered solid in Minecraft.
2) Generating digging time group for all nodes based on node metadata (it's complicated)
]]
--[[ Mining times. Yeah, mining times … Alright, this is going to be FUN!
This mod does include a HACK to make 100% sure the digging times of all tools match Minecraft's perfectly.
@ -82,7 +74,8 @@ local overwrite = function()
groups_changed = true
end
-- Automatically assign the “opaque” group for opaque nodes
if not (ndef.paramtype == "light" or ndef.sunlight_propagates) then
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

View File

@ -0,0 +1 @@
name = _mcl_autogroup

504
mods/CORE/controls/LICENSE Normal file
View File

@ -0,0 +1,504 @@
GNU LESSER GENERAL PUBLIC LICENSE
Version 2.1, February 1999
Copyright (C) 1991, 1999 Free Software Foundation, Inc.
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
Everyone is permitted to copy and distribute verbatim copies
of this license document, but changing it is not allowed.
[This is the first released version of the Lesser GPL. It also counts
as the successor of the GNU Library Public License, version 2, hence
the version number 2.1.]
Preamble
The licenses for most software are designed to take away your
freedom to share and change it. By contrast, the GNU General Public
Licenses are intended to guarantee your freedom to share and change
free software--to make sure the software is free for all its users.
This license, the Lesser General Public License, applies to some
specially designated software packages--typically libraries--of the
Free Software Foundation and other authors who decide to use it. You
can use it too, but we suggest you first think carefully about whether
this license or the ordinary General Public License is the better
strategy to use in any particular case, based on the explanations below.
When we speak of free software, we are referring to freedom of use,
not price. Our General Public Licenses are designed to make sure that
you have the freedom to distribute copies of free software (and charge
for this service if you wish); that you receive source code or can get
it if you want it; that you can change the software and use pieces of
it in new free programs; and that you are informed that you can do
these things.
To protect your rights, we need to make restrictions that forbid
distributors to deny you these rights or to ask you to surrender these
rights. These restrictions translate to certain responsibilities for
you if you distribute copies of the library or if you modify it.
For example, if you distribute copies of the library, whether gratis
or for a fee, you must give the recipients all the rights that we gave
you. You must make sure that they, too, receive or can get the source
code. If you link other code with the library, you must provide
complete object files to the recipients, so that they can relink them
with the library after making changes to the library and recompiling
it. And you must show them these terms so they know their rights.
We protect your rights with a two-step method: (1) we copyright the
library, and (2) we offer you this license, which gives you legal
permission to copy, distribute and/or modify the library.
To protect each distributor, we want to make it very clear that
there is no warranty for the free library. Also, if the library is
modified by someone else and passed on, the recipients should know
that what they have is not the original version, so that the original
author's reputation will not be affected by problems that might be
introduced by others.
Finally, software patents pose a constant threat to the existence of
any free program. We wish to make sure that a company cannot
effectively restrict the users of a free program by obtaining a
restrictive license from a patent holder. Therefore, we insist that
any patent license obtained for a version of the library must be
consistent with the full freedom of use specified in this license.
Most GNU software, including some libraries, is covered by the
ordinary GNU General Public License. This license, the GNU Lesser
General Public License, applies to certain designated libraries, and
is quite different from the ordinary General Public License. We use
this license for certain libraries in order to permit linking those
libraries into non-free programs.
When a program is linked with a library, whether statically or using
a shared library, the combination of the two is legally speaking a
combined work, a derivative of the original library. The ordinary
General Public License therefore permits such linking only if the
entire combination fits its criteria of freedom. The Lesser General
Public License permits more lax criteria for linking other code with
the library.
We call this license the "Lesser" General Public License because it
does Less to protect the user's freedom than the ordinary General
Public License. It also provides other free software developers Less
of an advantage over competing non-free programs. These disadvantages
are the reason we use the ordinary General Public License for many
libraries. However, the Lesser license provides advantages in certain
special circumstances.
For example, on rare occasions, there may be a special need to
encourage the widest possible use of a certain library, so that it becomes
a de-facto standard. To achieve this, non-free programs must be
allowed to use the library. A more frequent case is that a free
library does the same job as widely used non-free libraries. In this
case, there is little to gain by limiting the free library to free
software only, so we use the Lesser General Public License.
In other cases, permission to use a particular library in non-free
programs enables a greater number of people to use a large body of
free software. For example, permission to use the GNU C Library in
non-free programs enables many more people to use the whole GNU
operating system, as well as its variant, the GNU/Linux operating
system.
Although the Lesser General Public License is Less protective of the
users' freedom, it does ensure that the user of a program that is
linked with the Library has the freedom and the wherewithal to run
that program using a modified version of the Library.
The precise terms and conditions for copying, distribution and
modification follow. Pay close attention to the difference between a
"work based on the library" and a "work that uses the library". The
former contains code derived from the library, whereas the latter must
be combined with the library in order to run.
GNU LESSER GENERAL PUBLIC LICENSE
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
0. This License Agreement applies to any software library or other
program which contains a notice placed by the copyright holder or
other authorized party saying it may be distributed under the terms of
this Lesser General Public License (also called "this License").
Each licensee is addressed as "you".
A "library" means a collection of software functions and/or data
prepared so as to be conveniently linked with application programs
(which use some of those functions and data) to form executables.
The "Library", below, refers to any such software library or work
which has been distributed under these terms. A "work based on the
Library" means either the Library or any derivative work under
copyright law: that is to say, a work containing the Library or a
portion of it, either verbatim or with modifications and/or translated
straightforwardly into another language. (Hereinafter, translation is
included without limitation in the term "modification".)
"Source code" for a work means the preferred form of the work for
making modifications to it. For a library, complete source code means
all the source code for all modules it contains, plus any associated
interface definition files, plus the scripts used to control compilation
and installation of the library.
Activities other than copying, distribution and modification are not
covered by this License; they are outside its scope. The act of
running a program using the Library is not restricted, and output from
such a program is covered only if its contents constitute a work based
on the Library (independent of the use of the Library in a tool for
writing it). Whether that is true depends on what the Library does
and what the program that uses the Library does.
1. You may copy and distribute verbatim copies of the Library's
complete source code as you receive it, in any medium, provided that
you conspicuously and appropriately publish on each copy an
appropriate copyright notice and disclaimer of warranty; keep intact
all the notices that refer to this License and to the absence of any
warranty; and distribute a copy of this License along with the
Library.
You may charge a fee for the physical act of transferring a copy,
and you may at your option offer warranty protection in exchange for a
fee.
2. You may modify your copy or copies of the Library or any portion
of it, thus forming a work based on the Library, and copy and
distribute such modifications or work under the terms of Section 1
above, provided that you also meet all of these conditions:
a) The modified work must itself be a software library.
b) You must cause the files modified to carry prominent notices
stating that you changed the files and the date of any change.
c) You must cause the whole of the work to be licensed at no
charge to all third parties under the terms of this License.
d) If a facility in the modified Library refers to a function or a
table of data to be supplied by an application program that uses
the facility, other than as an argument passed when the facility
is invoked, then you must make a good faith effort to ensure that,
in the event an application does not supply such function or
table, the facility still operates, and performs whatever part of
its purpose remains meaningful.
(For example, a function in a library to compute square roots has
a purpose that is entirely well-defined independent of the
application. Therefore, Subsection 2d requires that any
application-supplied function or table used by this function must
be optional: if the application does not supply it, the square
root function must still compute square roots.)
These requirements apply to the modified work as a whole. If
identifiable sections of that work are not derived from the Library,
and can be reasonably considered independent and separate works in
themselves, then this License, and its terms, do not apply to those
sections when you distribute them as separate works. But when you
distribute the same sections as part of a whole which is a work based
on the Library, the distribution of the whole must be on the terms of
this License, whose permissions for other licensees extend to the
entire whole, and thus to each and every part regardless of who wrote
it.
Thus, it is not the intent of this section to claim rights or contest
your rights to work written entirely by you; rather, the intent is to
exercise the right to control the distribution of derivative or
collective works based on the Library.
In addition, mere aggregation of another work not based on the Library
with the Library (or with a work based on the Library) on a volume of
a storage or distribution medium does not bring the other work under
the scope of this License.
3. You may opt to apply the terms of the ordinary GNU General Public
License instead of this License to a given copy of the Library. To do
this, you must alter all the notices that refer to this License, so
that they refer to the ordinary GNU General Public License, version 2,
instead of to this License. (If a newer version than version 2 of the
ordinary GNU General Public License has appeared, then you can specify
that version instead if you wish.) Do not make any other change in
these notices.
Once this change is made in a given copy, it is irreversible for
that copy, so the ordinary GNU General Public License applies to all
subsequent copies and derivative works made from that copy.
This option is useful when you wish to copy part of the code of
the Library into a program that is not a library.
4. You may copy and distribute the Library (or a portion or
derivative of it, under Section 2) in object code or executable form
under the terms of Sections 1 and 2 above provided that you accompany
it with the complete corresponding machine-readable source code, which
must be distributed under the terms of Sections 1 and 2 above on a
medium customarily used for software interchange.
If distribution of object code is made by offering access to copy
from a designated place, then offering equivalent access to copy the
source code from the same place satisfies the requirement to
distribute the source code, even though third parties are not
compelled to copy the source along with the object code.
5. A program that contains no derivative of any portion of the
Library, but is designed to work with the Library by being compiled or
linked with it, is called a "work that uses the Library". Such a
work, in isolation, is not a derivative work of the Library, and
therefore falls outside the scope of this License.
However, linking a "work that uses the Library" with the Library
creates an executable that is a derivative of the Library (because it
contains portions of the Library), rather than a "work that uses the
library". The executable is therefore covered by this License.
Section 6 states terms for distribution of such executables.
When a "work that uses the Library" uses material from a header file
that is part of the Library, the object code for the work may be a
derivative work of the Library even though the source code is not.
Whether this is true is especially significant if the work can be
linked without the Library, or if the work is itself a library. The
threshold for this to be true is not precisely defined by law.
If such an object file uses only numerical parameters, data
structure layouts and accessors, and small macros and small inline
functions (ten lines or less in length), then the use of the object
file is unrestricted, regardless of whether it is legally a derivative
work. (Executables containing this object code plus portions of the
Library will still fall under Section 6.)
Otherwise, if the work is a derivative of the Library, you may
distribute the object code for the work under the terms of Section 6.
Any executables containing that work also fall under Section 6,
whether or not they are linked directly with the Library itself.
6. As an exception to the Sections above, you may also combine or
link a "work that uses the Library" with the Library to produce a
work containing portions of the Library, and distribute that work
under terms of your choice, provided that the terms permit
modification of the work for the customer's own use and reverse
engineering for debugging such modifications.
You must give prominent notice with each copy of the work that the
Library is used in it and that the Library and its use are covered by
this License. You must supply a copy of this License. If the work
during execution displays copyright notices, you must include the
copyright notice for the Library among them, as well as a reference
directing the user to the copy of this License. Also, you must do one
of these things:
a) Accompany the work with the complete corresponding
machine-readable source code for the Library including whatever
changes were used in the work (which must be distributed under
Sections 1 and 2 above); and, if the work is an executable linked
with the Library, with the complete machine-readable "work that
uses the Library", as object code and/or source code, so that the
user can modify the Library and then relink to produce a modified
executable containing the modified Library. (It is understood
that the user who changes the contents of definitions files in the
Library will not necessarily be able to recompile the application
to use the modified definitions.)
b) Use a suitable shared library mechanism for linking with the
Library. A suitable mechanism is one that (1) uses at run time a
copy of the library already present on the user's computer system,
rather than copying library functions into the executable, and (2)
will operate properly with a modified version of the library, if
the user installs one, as long as the modified version is
interface-compatible with the version that the work was made with.
c) Accompany the work with a written offer, valid for at
least three years, to give the same user the materials
specified in Subsection 6a, above, for a charge no more
than the cost of performing this distribution.
d) If distribution of the work is made by offering access to copy
from a designated place, offer equivalent access to copy the above
specified materials from the same place.
e) Verify that the user has already received a copy of these
materials or that you have already sent this user a copy.
For an executable, the required form of the "work that uses the
Library" must include any data and utility programs needed for
reproducing the executable from it. However, as a special exception,
the materials to be distributed need not include anything that is
normally distributed (in either source or binary form) with the major
components (compiler, kernel, and so on) of the operating system on
which the executable runs, unless that component itself accompanies
the executable.
It may happen that this requirement contradicts the license
restrictions of other proprietary libraries that do not normally
accompany the operating system. Such a contradiction means you cannot
use both them and the Library together in an executable that you
distribute.
7. You may place library facilities that are a work based on the
Library side-by-side in a single library together with other library
facilities not covered by this License, and distribute such a combined
library, provided that the separate distribution of the work based on
the Library and of the other library facilities is otherwise
permitted, and provided that you do these two things:
a) Accompany the combined library with a copy of the same work
based on the Library, uncombined with any other library
facilities. This must be distributed under the terms of the
Sections above.
b) Give prominent notice with the combined library of the fact
that part of it is a work based on the Library, and explaining
where to find the accompanying uncombined form of the same work.
8. You may not copy, modify, sublicense, link with, or distribute
the Library except as expressly provided under this License. Any
attempt otherwise to copy, modify, sublicense, link with, or
distribute the Library is void, and will automatically terminate your
rights under this License. However, parties who have received copies,
or rights, from you under this License will not have their licenses
terminated so long as such parties remain in full compliance.
9. You are not required to accept this License, since you have not
signed it. However, nothing else grants you permission to modify or
distribute the Library or its derivative works. These actions are
prohibited by law if you do not accept this License. Therefore, by
modifying or distributing the Library (or any work based on the
Library), you indicate your acceptance of this License to do so, and
all its terms and conditions for copying, distributing or modifying
the Library or works based on it.
10. Each time you redistribute the Library (or any work based on the
Library), the recipient automatically receives a license from the
original licensor to copy, distribute, link with or modify the Library
subject to these terms and conditions. You may not impose any further
restrictions on the recipients' exercise of the rights granted herein.
You are not responsible for enforcing compliance by third parties with
this License.
11. If, as a consequence of a court judgment or allegation of patent
infringement or for any other reason (not limited to patent issues),
conditions are imposed on you (whether by court order, agreement or
otherwise) that contradict the conditions of this License, they do not
excuse you from the conditions of this License. If you cannot
distribute so as to satisfy simultaneously your obligations under this
License and any other pertinent obligations, then as a consequence you
may not distribute the Library at all. For example, if a patent
license would not permit royalty-free redistribution of the Library by
all those who receive copies directly or indirectly through you, then
the only way you could satisfy both it and this License would be to
refrain entirely from distribution of the Library.
If any portion of this section is held invalid or unenforceable under any
particular circumstance, the balance of the section is intended to apply,
and the section as a whole is intended to apply in other circumstances.
It is not the purpose of this section to induce you to infringe any
patents or other property right claims or to contest validity of any
such claims; this section has the sole purpose of protecting the
integrity of the free software distribution system which is
implemented by public license practices. Many people have made
generous contributions to the wide range of software distributed
through that system in reliance on consistent application of that
system; it is up to the author/donor to decide if he or she is willing
to distribute software through any other system and a licensee cannot
impose that choice.
This section is intended to make thoroughly clear what is believed to
be a consequence of the rest of this License.
12. If the distribution and/or use of the Library is restricted in
certain countries either by patents or by copyrighted interfaces, the
original copyright holder who places the Library under this License may add
an explicit geographical distribution limitation excluding those countries,
so that distribution is permitted only in or among countries not thus
excluded. In such case, this License incorporates the limitation as if
written in the body of this License.
13. The Free Software Foundation may publish revised and/or new
versions of the Lesser General Public License from time to time.
Such new versions will be similar in spirit to the present version,
but may differ in detail to address new problems or concerns.
Each version is given a distinguishing version number. If the Library
specifies a version number of this License which applies to it and
"any later version", you have the option of following the terms and
conditions either of that version or of any later version published by
the Free Software Foundation. If the Library does not specify a
license version number, you may choose any version ever published by
the Free Software Foundation.
14. If you wish to incorporate parts of the Library into other free
programs whose distribution conditions are incompatible with these,
write to the author to ask for permission. For software which is
copyrighted by the Free Software Foundation, write to the Free
Software Foundation; we sometimes make exceptions for this. Our
decision will be guided by the two goals of preserving the free status
of all derivatives of our free software and of promoting the sharing
and reuse of software generally.
NO WARRANTY
15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY
KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE
LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU
FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
DAMAGES.
END OF TERMS AND CONDITIONS
How to Apply These Terms to Your New Libraries
If you develop a new library, and you want it to be of the greatest
possible use to the public, we recommend making it free software that
everyone can redistribute and change. You can do so by permitting
redistribution under these terms (or, alternatively, under the terms of the
ordinary General Public License).
To apply these terms, attach the following notices to the library. It is
safest to attach them to the start of each source file to most effectively
convey the exclusion of warranty; and each file should have at least the
"copyright" line and a pointer to where the full notice is found.
<one line to give the library's name and a brief idea of what it does.>
Copyright (C) <year> <name of author>
This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.
This library 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
Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public
License along with this library; if not, write to the Free Software
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301
USA
Also add information on how to contact you by electronic and paper mail.
You should also get your employer (if you work as a programmer) or your
school, if any, to sign a "copyright disclaimer" for the library, if
necessary. Here is a sample; alter the names:
Yoyodyne, Inc., hereby disclaims all copyright interest in the
library `Frob' (a library for tweaking knobs) written by James Random
Hacker.
<signature of Ty Coon>, 1 April 1990
Ty Coon, President of Vice
That's all there is to it!

View File

@ -0,0 +1,2 @@
Controls framework by Arcelmi.
https://github.com/Arcelmi/minetest-controls

View File

@ -0,0 +1,63 @@
controls = {}
controls.players = {}
controls.registered_on_press = {}
function controls.register_on_press(func)
controls.registered_on_press[#controls.registered_on_press+1] = func
end
controls.registered_on_release = {}
function controls.register_on_release(func)
controls.registered_on_release[#controls.registered_on_release+1] = func
end
controls.registered_on_hold = {}
function controls.register_on_hold(func)
controls.registered_on_hold[#controls.registered_on_hold+1]=func
end
minetest.register_on_joinplayer(function(player)
local name = player:get_player_name()
controls.players[name] = {
jump={false},
right={false},
left={false},
LMB={false},
RMB={false},
sneak={false},
aux1={false},
down={false},
up={false}
}
end)
minetest.register_on_leaveplayer(function(player)
local name = player:get_player_name()
controls.players[name] = nil
end)
minetest.register_globalstep(function(dtime)
for _, player in pairs(minetest.get_connected_players()) do
local player_name = player:get_player_name()
local player_controls = player:get_player_control()
for cname, cbool in pairs(player_controls) do
--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, 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)

View File

@ -0,0 +1 @@
name=controls

View File

@ -0,0 +1 @@
Adds additional ways for nodes to be attached.

View File

@ -0,0 +1,24 @@
local original_function = minetest.check_single_for_falling
minetest.check_single_for_falling = function(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)
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)
local drops = minetest.get_node_drops(node.name, "")
for dr=1, #drops do
minetest.add_item(pos, drops[dr])
end
ret = true
end
end
return ret_o or ret
end

View File

@ -1 +0,0 @@
name = mcl_autogroup

View File

@ -1,17 +1,24 @@
-- Some global variables (don't overwrite them!)
mcl_vars = {}
--- GUI / inventory menu colors
--- GUI / inventory menu settings
mcl_vars.gui_slots = "listcolors[#9990;#FFF7;#FFF0;#000;#FFF]"
-- nonbg is added as formspec prepend in mcl_formspec_prepend
mcl_vars.gui_nonbg = mcl_vars.gui_slots
-- Background stuff must be manually added by mods (no formspec prepend)
mcl_vars.gui_bg = "bgcolor[#080808BB;true]"
mcl_vars.gui_bg_img = ""
mcl_vars.inventory_header = mcl_vars.gui_slots .. mcl_vars.gui_bg
mcl_vars.inventory_header = mcl_vars.gui_bg
-- Mapgen variables
local mg_name = minetest.get_mapgen_setting("mg_name")
local minecraft_height_limit = 256
if mg_name ~= "flat" then
local superflat = mg_name == "flat" and minetest.get_mapgen_setting("mcl_superflat_classic") == "true"
if not superflat then
-- Normal mode
--[[ Realm stacking (h is for height)
- Overworld (h>=256)
- Void (h>=1000)
@ -32,17 +39,13 @@ if mg_name ~= "flat" then
mcl_vars.mg_bedrock_is_rough = true
else
-- Classic superflat
local ground = minetest.get_mapgen_setting("mgflat_ground_level")
ground = tonumber(ground)
if not ground then
ground = 8
end
-- 1 perfectly flat bedrock layer
if minetest.get_mapgen_setting("mcl_superflat_classic") == "false" then
mcl_vars.mg_overworld_min = -30912
else
mcl_vars.mg_overworld_min = ground - 3
end
mcl_vars.mg_overworld_min = ground - 3
mcl_vars.mg_overworld_max_official = mcl_vars.mg_overworld_min + minecraft_height_limit
mcl_vars.mg_bedrock_overworld_min = mcl_vars.mg_overworld_min
mcl_vars.mg_bedrock_overworld_max = mcl_vars.mg_bedrock_overworld_min
@ -58,20 +61,32 @@ mcl_vars.mg_nether_min = -29067 -- Carefully chosen to be at a mapchunk border
mcl_vars.mg_nether_max = mcl_vars.mg_nether_min + 128
mcl_vars.mg_bedrock_nether_bottom_min = mcl_vars.mg_nether_min
mcl_vars.mg_bedrock_nether_top_max = mcl_vars.mg_nether_max
mcl_vars.mg_lava_nether_max = mcl_vars.mg_nether_min + 31
if mg_name ~= "flat" then
if not superflat then
mcl_vars.mg_bedrock_nether_bottom_max = mcl_vars.mg_bedrock_nether_bottom_min + 4
mcl_vars.mg_bedrock_nether_top_min = mcl_vars.mg_bedrock_nether_top_max - 4
mcl_vars.mg_lava_nether_max = mcl_vars.mg_nether_min + 31
else
-- Thin bedrock in flat mapgen
-- Thin bedrock in classic superflat mapgen
mcl_vars.mg_bedrock_nether_bottom_max = mcl_vars.mg_bedrock_nether_bottom_min
mcl_vars.mg_bedrock_nether_top_min = mcl_vars.mg_bedrock_nether_top_max
mcl_vars.mg_lava_nether_max = mcl_vars.mg_nether_min + 2
end
if mg_name == "flat" then
if superflat then
mcl_vars.mg_flat_nether_floor = mcl_vars.mg_bedrock_nether_bottom_max + 4
mcl_vars.mg_flat_nether_ceiling = mcl_vars.mg_bedrock_nether_bottom_max + 52
else
mcl_vars.mg_flat_nether_floor = mcl_vars.mg_lava_nether_max + 4
mcl_vars.mg_flat_nether_ceiling = mcl_vars.mg_lava_nether_max + 52
end
end
-- The End (surface at ca. Y = -27000)
mcl_vars.mg_end_min = -27073 -- Carefully chosen to be at a mapchunk border
mcl_vars.mg_end_max_official = mcl_vars.mg_end_min + minecraft_height_limit
mcl_vars.mg_end_max = mcl_vars.mg_overworld_min - 2000
mcl_vars.mg_end_platform_pos = { x = 100, y = mcl_vars.mg_end_min + 80, z = 0 }
-- Realm barrier used to safely separate the End from the void below the Overworld
mcl_vars.mg_realm_barrier_overworld_end_max = mcl_vars.mg_end_max
mcl_vars.mg_realm_barrier_overworld_end_min = mcl_vars.mg_end_max - 11

View File

@ -98,3 +98,54 @@ function mcl_loot.get_multi_loot(multi_loot_definitions, pr)
end
return items
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 slots = {}
for s=1, max_slot do
slots[s] = s
end
local slots_out = {}
while #slots > 0 do
local r = math.random(1, #slots)
table.insert(slots_out, slots[r])
table.remove(slots, r)
end
return slots_out
end
--[[
Puts items in an inventory list into random slots.
* inv: InvRef
* listname: Inventory list name
* items: table of items to add
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)
local size = inv:get_size(listname)
local slots = get_random_slots(size)
local leftovers = {}
-- 1st pass: Add items into random slots
for i=1, math.min(#items, size) do
local item = items[i]
local slot = slots[i]
local old_item = inv:get_stack(listname, slot)
local leftover = old_item:add_item(item)
inv:set_stack(listname, slot, old_item)
if not leftover:is_empty() then
table.insert(leftovers, item)
end
end
-- 2nd pass: If some items couldn't be added in first pass,
-- try again in a non-random fashion
for l=1, math.min(#leftovers, size) do
inv:add_item(listname, leftovers[l])
end
-- If there are still items left, tough luck!
end

View File

@ -67,14 +67,21 @@ blukotek (CC0 1.0)
https://www.freesound.org/people/blukotek/sounds/251660/
default_dig_snappy.ogg
sonictechtonic (CC BY 3.0)
https://www.freesound.org/people/sonictechtonic/sounds/241872/
player_damage.ogg
Voxelands project <http://www.voxelands.com/> (CC BY-SA 3.0)
mcl_sounds_place_node_water.ogg
mcl_sounds_dug_water.ogg
player_damage.ogg
(Note: Artists from the Voxelands project include: sdzen, darkrose, sapier,
Tom Peter, Telaron, juskiddink)
Michel Baradari <https://opengameart.org/content/lava-splash> (CC BY 3.0)
default_place_node_lava.ogg
Adam_N (CC0 1.0):
player_falling_damage.ogg
Source: <https://www.freesound.org/people/Adam_N/sounds/346692/>

View File

@ -134,3 +134,21 @@ function mcl_sounds.node_sound_water_defaults(table)
mcl_sounds.node_sound_defaults(table)
return table
end
function mcl_sounds.node_sound_lava_defaults(table)
table = table or {}
-- TODO: Footstep
table.place = table.place or
{name = "default_place_node_lava", gain = 1.0}
table.dug = table.dug or
{name = "default_place_node_lava", gain = 1.0}
-- TODO: Different dug sound
mcl_sounds.node_sound_defaults(table)
return table
end
-- Player death sound
minetest.register_on_dieplayer(function(player)
-- TODO: Add separate death sound
minetest.sound_play({name="player_damage", gain = 1.0}, {pos=player:get_pos(), max_hear_distance=16})
end)

View File

@ -149,7 +149,7 @@ function mcl_util.get_eligible_transfer_item_slot(src_inventory, src_list, dst_i
return nil
end
-- Returns true if given itemstack is a shulker box
-- Returns true if itemstack is a shulker box
local is_not_shulker_box = function(itemstack)
local g = minetest.get_item_group(itemstack:get_name(), "shulker_box")
return g == 0 or g == nil
@ -205,6 +205,11 @@ function mcl_util.move_item_container(source_pos, destination_pos, source_list,
local dctype = minetest.get_item_group(dnode.name, "container")
local sctype = minetest.get_item_group(snode.name, "container")
-- Container type 7 does not allow any movement
if sctype == 7 then
return false
end
-- Normalize double container by forcing to always use the left segment first
local normalize_double_container = function(pos, node, ctype)
if ctype == 6 then
@ -235,7 +240,7 @@ function mcl_util.move_item_container(source_pos, destination_pos, source_list,
-- Default source lists
if not source_list then
-- Main inventory for most container types
if sctype == 2 or sctype == 3 or sctype == 5 or sctype == 6 then
if sctype == 2 or sctype == 3 or sctype == 5 or sctype == 6 or sctype == 7 then
source_list = "main"
-- Furnace: output
elseif sctype == 4 then
@ -281,13 +286,17 @@ function mcl_util.move_item_container(source_pos, destination_pos, source_list,
return false
end
end
-- Container type 7 does not allow any placement
if dctype == 7 then
return false
end
-- If it's a container, put it into the container
if dctype ~= 0 then
-- Automatically select a destination list if omitted
if not destination_list then
-- Main inventory for most container types
if dctype == 2 or dctype == 3 or dctype == 5 or dctype == 6 then
if dctype == 2 or dctype == 3 or dctype == 5 or dctype == 6 or dctype == 7 then
destination_list = "main"
-- Furnace source slot
elseif dctype == 4 then
@ -331,90 +340,13 @@ function mcl_util.is_fuel(item)
return minetest.get_craft_result({method="fuel", width=1, items={item}}).time ~= 0
end
-- 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_util.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_end_max and pos.y > mcl_vars.mg_end_min))
local void_deadly = false
local deadly_tolerance = 64 -- the player must be this many nodes “deep” into the void to be damaged
if void then
-- 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
void_deadly = pos.y < mcl_vars.mg_end_min - deadly_tolerance
elseif pos.y < mcl_vars.mg_nether_min then
void_deadly = pos.y < mcl_vars.mg_nether_min - deadly_tolerance
end
end
return void, void_deadly
end
-- Here come 2 simple converter functions which are important for map generators and mob spawning
-- Takes an Y coordinate as input and returns:
-- 1) The corresponding Minecraft layer (can be nil if void)
-- 2) The corresponding Minecraft dimension ("overworld", "nether" or "end") or "void" if it is in the void
-- If the Y coordinate is not located in any dimension, it will return:
-- nil, "void"
function mcl_util.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
end
-- 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_util.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
end
-- Takes a position and returns true if this position can have weather
function mcl_util.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
end
-- Takes a position (pos) and returns true if compasses are working here
function mcl_util.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_util.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
mcl_util.clock_works = mcl_util.compass_works
-- Returns a on_place function for plants
-- * condition: function(pos, node)
-- * condition: function(pos, node, itemstack)
-- * A function which is called by the on_place function to check if the node can be placed
-- * Must return true, if placement is allowed, false otherwise
-- * Must return true, if placement is allowed, false otherwise.
-- * If it returns a string, placement is allowed, but will place this itemstring as a node instead
-- * pos, node: Position and node table of plant node
-- * itemstack: Itemstack to place
function mcl_util.generate_on_place_plant_function(condition)
return function(itemstack, placer, pointed_thing)
if pointed_thing.type ~= "node" then
@ -445,9 +377,10 @@ function mcl_util.generate_on_place_plant_function(condition)
end
-- Check placement rules
if (condition(place_pos, node) == true) then
local result, param2 = condition(place_pos, node, itemstack)
if result == true then
local idef = itemstack:get_definition()
local new_itemstack, success = minetest.item_place_node(itemstack, placer, pointed_thing)
local new_itemstack, success = minetest.item_place_node(itemstack, placer, pointed_thing, param2)
if success then
if idef.sounds and idef.sounds.place then

View File

@ -0,0 +1 @@
mcl_init

View File

@ -0,0 +1 @@
Utility functions for worlds and the “dimensions”.

View File

@ -0,0 +1,140 @@
mcl_worlds = {}
-- 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_end_max and pos.y > mcl_vars.mg_end_min))
local void_deadly = false
local deadly_tolerance = 64 -- the player must be this many nodes “deep” into the void to be damaged
if void then
-- 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
-- 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)
elseif pos.y < mcl_vars.mg_nether_min then
void_deadly = pos.y < mcl_vars.mg_nether_min - deadly_tolerance
end
end
return void, void_deadly
end
-- Takes an Y coordinate as input and returns:
-- 1) The corresponding Minecraft layer (can be nil if void)
-- 2) The corresponding Minecraft dimension ("overworld", "nether" or "end") or "void" if it is in the void
-- 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
end
-- 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)
return dim
end
-- 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
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
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
end
-- Takes a position (pos) and returns true if clocks are working here
mcl_worlds.clock_works = mcl_worlds.compass_works
--------------- CALLBACKS ------------------
mcl_worlds.registered_on_dimension_change = {}
-- Register a callback function func(player, dimension).
-- It will be called whenever a player changes between dimensions.
-- The void counts as dimension.
-- * player: The player who changed the dimension
-- * dimension: The new dimension of the player ("overworld", "nether", "end", "void").
function mcl_worlds.register_on_dimension_change(func)
table.insert(mcl_worlds.registered_on_dimension_change, func)
end
-- Playername-indexed table containig the name of the last known dimension the
-- player was in.
local last_dimension = {}
-- Notifies this mod about a dimension change of a player.
-- * player: Player who changed the dimension
-- * dimension: New dimension ("overworld", "nether", "end", "void")
function mcl_worlds.dimension_change(player, dimension)
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
end
end
----------------------- INTERNAL STUFF ----------------------
-- Update the dimension callbacks every DIM_UPDATE seconds
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())
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 name = players[p]:get_player_name()
if dim ~= last_dimension[name] then
mcl_worlds.dimension_change(players[p], dim)
end
end
dimtimer = 0
end
end)

2
mods/CORE/modpack.conf Normal file
View File

@ -0,0 +1,2 @@
name = CORE
description = Meta-modpack containing the core mods for MineClone 2 for core APIs, variables and definitions

View File

View File

@ -4,7 +4,7 @@ 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:getpos()
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

View File

@ -13,6 +13,7 @@ minetest.register_entity("drippingwater:drop_water", {
physical = true,
collide_with_objects = false,
collisionbox = {0,0,0,0,0,0},
pointable = false,
visual = "cube",
visual_size = {x=0.05, y=0.1},
textures = {water_tex, water_tex, water_tex, water_tex, water_tex, water_tex},
@ -20,19 +21,19 @@ minetest.register_entity("drippingwater:drop_water", {
initial_sprite_basepos = {x=0, y=0},
on_activate = function(self, staticdata)
self.object:setsprite({x=0,y=0}, 1, 1, true)
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:getpos()
local ownpos = self.object:get_pos()
if k==1 then
self.object:setacceleration({x=0, y=-5, z=0})
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:setacceleration({x=0, y=-5, z=0})
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
@ -58,19 +59,19 @@ minetest.register_entity("drippingwater:drop_lava", {
initial_sprite_basepos = {x=0, y=0},
on_activate = function(self, staticdata)
self.object:setsprite({x=0,y=0}, 1, 0, true)
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:getpos()
local ownpos = self.object:get_pos()
if k==1 then
self.object:setacceleration({x=0, y=-5, z=0})
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:setacceleration({x=0, y=-5, z=0})
self.object:set_acceleration({x=0, y=-5, z=0})
end

View File

@ -1,3 +1,4 @@
local S = minetest.get_translator("mcl_boats")
--
-- Helper functions
--
@ -67,9 +68,9 @@ function boat.on_rightclick(self, clicker)
clicker:set_properties({visual_size = {x=1, y=1}})
mcl_player.player_attached[name] = false
mcl_player.player_set_animation(clicker, "stand" , 30)
local pos = clicker:getpos()
local pos = clicker:get_pos()
pos = {x = pos.x, y = pos.y + 0.2, z = pos.z}
clicker:setpos(pos)
clicker:set_pos(pos)
elseif not self._driver then
local attach = clicker:get_attach()
if attach and attach:get_luaentity() then
@ -82,15 +83,16 @@ function boat.on_rightclick(self, clicker)
end
self._driver = clicker
clicker:set_attach(self.object, "",
{x = 0, y = 3.75, z = -1}, {x = 0, y = 0, z = 0})
{x = 0, y = 0.42, z = -1}, {x = 0, y = 0, z = 0})
clicker:set_properties({ visual_size = driver_visual_size })
mcl_player.player_attached[name] = true
minetest.after(0.2, function(clicker)
if clicker:is_player() then
mcl_player.player_set_animation(clicker, "sit" , 30)
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, clicker)
clicker:set_look_horizontal(self.object:getyaw())
end, name)
clicker:set_look_horizontal(self.object:get_yaw())
end
end
@ -130,17 +132,22 @@ function boat.on_punch(self, puncher)
self._removed = true
-- Drop boat as item on the ground after punching
if not minetest.settings:get_bool("creative_mode") then
minetest.add_item(self.object:getpos(), self._itemstring)
minetest.add_item(self.object:get_pos(), self._itemstring)
else
local inv = puncher:get_inventory()
if not inv:contains_item("main", self._itemstring) then
inv:add_item("main", self._itemstring)
end
end
self.object:remove()
end
end
function boat.on_step(self, dtime)
self._v = get_v(self.object:getvelocity()) * get_sign(self._v)
self._v = get_v(self.object:get_velocity()) * get_sign(self._v)
if self._driver then
local ctrl = self._driver:get_player_control()
local yaw = self.object:getyaw()
local yaw = self.object:get_yaw()
if ctrl.up then
-- Forwards
self._v = self._v + 0.1
@ -168,15 +175,15 @@ function boat.on_step(self, dtime)
end
if ctrl.left then
if self._v < 0 then
self.object:setyaw(yaw - (1 + dtime) * 0.03)
self.object:set_yaw(yaw - (1 + dtime) * 0.03)
else
self.object:setyaw(yaw + (1 + dtime) * 0.03)
self.object:set_yaw(yaw + (1 + dtime) * 0.03)
end
elseif ctrl.right then
if self._v < 0 then
self.object:setyaw(yaw + (1 + dtime) * 0.03)
self.object:set_yaw(yaw + (1 + dtime) * 0.03)
else
self.object:setyaw(yaw - (1 + dtime) * 0.03)
self.object:set_yaw(yaw - (1 + dtime) * 0.03)
end
end
else
@ -186,15 +193,15 @@ function boat.on_step(self, dtime)
self._animation = 0
end
end
local velo = self.object:getvelocity()
local velo = self.object:get_velocity()
if self._v == 0 and velo.x == 0 and velo.y == 0 and velo.z == 0 then
self.object:setpos(self.object:getpos())
self.object:set_pos(self.object:get_pos())
return
end
local s = get_sign(self._v)
self._v = self._v - 0.02 * s
if s ~= get_sign(self._v) then
self.object:setvelocity({x = 0, y = 0, z = 0})
self.object:set_velocity({x = 0, y = 0, z = 0})
self._v = 0
return
end
@ -202,7 +209,7 @@ function boat.on_step(self, dtime)
self._v = 5 * get_sign(self._v)
end
local p = self.object:getpos()
local p = self.object:get_pos()
p.y = p.y - boat_y_offset
local new_velo
local new_acce = {x = 0, y = 0, z = 0}
@ -214,13 +221,13 @@ function boat.on_step(self, dtime)
else
new_acce = {x = 0, y = -9.8, z = 0}
end
new_velo = get_velocity(self._v, self.object:getyaw(),
self.object:getvelocity().y)
self.object:setpos(self.object:getpos())
new_velo = get_velocity(self._v, self.object:get_yaw(),
self.object:get_velocity().y)
self.object:set_pos(self.object:get_pos())
else
p.y = p.y + 1
if is_water(p) then
local y = self.object:getvelocity().y
local y = self.object:get_velocity().y
if y >= 5 then
y = 5
elseif y < 0 then
@ -228,31 +235,31 @@ function boat.on_step(self, dtime)
else
new_acce = {x = 0, y = 5, z = 0}
end
new_velo = get_velocity(self._v, self.object:getyaw(), y)
self.object:setpos(self.object:getpos())
new_velo = get_velocity(self._v, self.object:get_yaw(), y)
self.object:set_pos(self.object:get_pos())
else
new_acce = {x = 0, y = 0, z = 0}
if math.abs(self.object:getvelocity().y) < 1 then
local pos = self.object:getpos()
if math.abs(self.object:get_velocity().y) < 1 then
local pos = self.object:get_pos()
pos.y = math.floor(pos.y) + boat_y_offset
self.object:setpos(pos)
new_velo = get_velocity(self._v, self.object:getyaw(), 0)
self.object:set_pos(pos)
new_velo = get_velocity(self._v, self.object:get_yaw(), 0)
else
new_velo = get_velocity(self._v, self.object:getyaw(),
self.object:getvelocity().y)
self.object:setpos(self.object:getpos())
new_velo = get_velocity(self._v, self.object:get_yaw(),
self.object:get_velocity().y)
self.object:set_pos(self.object:get_pos())
end
end
end
self.object:setvelocity(new_velo)
self.object:setacceleration(new_acce)
self.object:set_velocity(new_velo)
self.object:set_acceleration(new_acce)
end
-- Register one entity for all boat types
minetest.register_entity("mcl_boats:boat", boat)
local boat_ids = { "boat", "boat_spruce", "boat_birch", "boat_jungle", "boat_acacia", "boat_dark_oak" }
local names = { "Oak Boat", "Spruce Boat", "Birch Boat", "Jungle Boat", "Acacia Boat", "Dark Oak Boat" }
local names = { S("Oak Boat"), S("Spruce Boat"), S("Birch Boat"), S("Jungle Boat"), S("Acacia Boat"), S("Dark Oak Boat") }
local craftstuffs = {}
if minetest.get_modpath("mcl_core") then
craftstuffs = { "mcl_core:wood", "mcl_core:sprucewood", "mcl_core:birchwood", "mcl_core:junglewood", "mcl_core:acaciawood", "mcl_core:darkwood" }
@ -267,9 +274,9 @@ for b=1, #boat_ids do
-- Only create one help entry for all boats
if b == 1 then
help = true
longdesc = "Boats are used to travel on the surface of water."
usagehelp = "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."
helpname = "Boat"
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.")
helpname = S("Boat")
end
minetest.register_craftitem(itemstring, {
@ -302,11 +309,22 @@ for b=1, #boat_ids do
local boat = minetest.add_entity(pointed_thing.under, "mcl_boats:boat")
boat:get_luaentity()._itemstring = itemstring
boat:set_properties({textures = { "mcl_boats_texture_"..images[b].."_boat.png" }})
boat:set_yaw(placer:get_look_horizontal())
if not minetest.settings:get_bool("creative_mode") then
itemstack:take_item()
end
return itemstack
end,
_on_dispense = function(stack, pos, droppos, dropnode, dropdir)
local below = {x=droppos.x, y=droppos.y-1, z=droppos.z}
local belownode = minetest.get_node(below)
-- Place boat as entity on or in water
if minetest.get_item_group(dropnode.name, "water") ~= 0 or (dropnode.name == "air" and minetest.get_item_group(belownode.name, "water") ~= 0) then
minetest.add_entity(droppos, "mcl_boats:boat")
else
minetest.add_item(droppos, stack)
end
end,
})
local c = craftstuffs[b]

View File

@ -0,0 +1 @@
Falling node entities, Minecraft-style

View File

@ -0,0 +1,256 @@
local dmes = minetest.get_modpath("mcl_death_messages") ~= nil
local get_falling_depth = function(self)
if not self._startpos then
-- Fallback
self._startpos = self.object:get_pos()
end
return self._startpos.y - vector.round(self.object:get_pos()).y
end
local deal_falling_damage = function(self, dtime)
if minetest.get_item_group(self.node.name, "falling_node_damage") == 0 then
return
end
-- Cause damage to any player 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
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 was smashed by a falling anvil."
else
msg = "%s was smashed by a falling block."
end
if dmes then
mcl_death_messages.player_damage(v, string.format(msg, v:get_player_name()))
end
end
v:set_hp(hp)
end
end
end
end
end
minetest.register_entity(":__builtin:falling_node", {
initial_properties = {
visual = "wielditem",
visual_size = {x = 0.667, y = 0.667},
textures = {},
physical = true,
is_visible = false,
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)
self.node = node
self.meta = meta or {}
self.object:set_properties({
is_visible = true,
textures = {node.name},
})
local def = core.registered_nodes[node.name]
-- Set correct entity yaw
if def and node.param2 ~= 0 then
if (def.paramtype2 == "facedir" or def.paramtype2 == "colorfacedir") then
self.object:set_yaw(core.dir_to_yaw(core.facedir_to_dir(node.param2)))
elseif (def.paramtype2 == "wallmounted" or def.paramtype2 == "colorwallmounted") then
self.object:set_yaw(core.dir_to_yaw(core.wallmounted_to_dir(node.param2)))
end
end
end,
get_staticdata = function(self)
local meta = self.meta
-- Workaround: Save inventory seperately from metadata.
-- Because Minetest crashes when a node with inventory gets deactivated
-- (GitHub issue #7020).
-- FIXME: Remove the _inv workaround when it is no longer needed
local inv
if meta then
inv = meta.inv
meta.inventory = nil
end
local ds = {
node = self.node,
meta = self.meta,
_inv = inv,
_startpos = self._startpos,
_hit_players = self._hit_players,
}
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
self._hit_players = ds._hit_players
if ds.node then
local meta = ds.meta
meta.inventory = ds._inv
self:set_node(ds.node, meta)
else
self:set_node(ds)
end
elseif staticdata ~= "" then
self:set_node({name = staticdata})
end
if not self._startpos then
self._startpos = self.object:get_pos()
end
self._startpos = vector.round(self._startpos)
end,
on_step = function(self, dtime)
-- Set gravity
local acceleration = self.object:get_acceleration()
if not vector.equals(acceleration, {x = 0, y = -10, z = 0}) then
self.object:set_acceleration({x = 0, y = -10, z = 0})
end
-- Turn to actual node when colliding with ground, or continue to move
local pos = self.object:get_pos()
-- Portal check
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.
self.object:remove()
return
end
-- Position of bottom center point
local bcp = {x = pos.x, y = pos.y - 0.7, z = pos.z}
-- Avoid bugs caused by an unloaded node below
local bcn = minetest.get_node_or_nil(bcp)
local bcd = bcn and minetest.registered_nodes[bcn.name]
-- TODO: At this point, we did 2 get_nodes in 1 tick.
-- Figure out how to improve that (if it is a problem).
if bcn and (not bcd or bcd.walkable or
(minetest.get_item_group(self.node.name, "float") ~= 0 and
bcd.liquidtype ~= "none")) then
if bcd and bcd.leveled and
bcn.name == self.node.name then
local addlevel = self.node.level
if not addlevel or addlevel <= 0 then
addlevel = bcd.leveled
end
if minetest.add_node_level(bcp, addlevel) == 0 then
if minetest.registered_nodes[self.node.name]._mcl_after_falling then
minetest.registered_nodes[self.node.name]._mcl_after_falling(bcp, get_falling_depth(self))
end
deal_falling_damage(self, dtime)
self.object:remove()
return
end
elseif bcd and bcd.buildable_to and
(minetest.get_item_group(self.node.name, "float") == 0 or
bcd.liquidtype == "none") then
minetest.remove_node(bcp)
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
-- Replace destination node if it's buildable to
minetest.remove_node(np)
-- Run script hook
for _, callback in pairs(minetest.registered_on_dignodes) do
callback(np, n2)
end
if minetest.registered_nodes[self.node.name] then
minetest.add_node(np, self.node)
if minetest.registered_nodes[self.node.name]._mcl_after_falling then
minetest.registered_nodes[self.node.name]._mcl_after_falling(np, get_falling_depth(self))
end
if self.meta then
local meta = minetest.get_meta(np)
meta:from_table(self.meta)
end
end
else
-- Drop the *falling node* as an item if the destination node is NOT buildable to
local drops = minetest.get_node_drops(self.node.name, "")
for _, dropped_item in pairs(drops) do
minetest.add_item(np, dropped_item)
end
end
deal_falling_damage(self, dtime)
self.object:remove()
minetest.check_for_falling(np)
return
end
local vel = self.object:get_velocity()
-- Fix position if entity does not move
if vector.equals(vel, {x = 0, y = 0, z = 0}) then
local npos = vector.round(self.object:get_pos())
local npos2 = table.copy(npos)
npos2.y = npos2.y - 2
local lownode = minetest.get_node(npos2)
-- Special check required for fences and walls, because of their overhigh collision box.
if minetest.get_item_group(lownode.name, "fence") == 1 or minetest.get_item_group(lownode.name, "wall") == 1 then
-- Instantly stop the node if it is above a fence/wall. This is needed
-- because the falling node collides early with a fence/wall node.
-- Hacky, because the falling node will teleport a short distance, instead
-- of smoothly fall on the fence post.
local npos3 = table.copy(npos)
npos3.y = npos3.y - 1
minetest.add_node(npos3, self.node)
if minetest.registered_nodes[self.node.name]._mcl_after_falling then
minetest.registered_nodes[self.node.name]._mcl_after_falling(npos3, get_falling_depth(self))
end
deal_falling_damage(self, dtime)
self.object:remove()
minetest.check_for_falling(npos3)
return
else
-- Normal position fix (expected case)
self.object:set_pos(npos)
end
end
deal_falling_damage(self, dtime)
end
})

View File

@ -0,0 +1 @@
name = mcl_falling_nodes

View File

@ -4,7 +4,7 @@ by PilzAdam
Introduction:
This mod adds Minecraft like drop/pick up of items to Minetest.
This mod has been forked from item_drop in the VoxBox subgame.
This mod has been forked from item_drop in the VoxBox game.
License:
Sourcecode: WTFPL (see below)

View File

@ -55,20 +55,20 @@ end
minetest.register_globalstep(function(dtime)
for _,player in ipairs(minetest.get_connected_players()) do
if player:get_hp() > 0 or not minetest.settings:get_bool("enable_damage") then
local pos = player:getpos()
local pos = player:get_pos()
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.radius_magnet)) do
if not object:is_player() and object:get_luaentity() and object:get_luaentity().name == "__builtin:item" and (object:get_luaentity()._insta_collect or (object:get_luaentity().age > item_drop_settings.age)) then
if not object:is_player() 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:getpos()) <= item_drop_settings.radius_collect and not object:get_luaentity()._removed then
if vector.distance(checkpos, object:get_pos()) <= item_drop_settings.radius_collect and 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", {
@ -78,20 +78,14 @@ minetest.register_globalstep(function(dtime)
})
check_pickup_achievements(object, player)
-- If this happens, itemstring was "" (=hand). This is always a bug, the hand must never drop as item.
else
-- Scream this to the error log because this is bad.
minetest.log("error", "Player "..player:get_player_name().." collected a hand at "..minetest.pos_to_string(object:getpos()).." (age="..object:get_luaentity().age..")!")
-- Destroy entity
-- This just prevents this section to be run again because object:remove() doesn't remove the item immediately.
object:get_luaentity()._removed = true
object:remove()
collected = true
end
-- Destroy entity
-- This just prevents this sectino to be run again because object:remove() doesn't remove the item immediately.
object:get_luaentity()._removed = true
object:remove()
collected = true
-- Magnet
else
@ -101,17 +95,17 @@ minetest.register_globalstep(function(dtime)
-- Move object to player
disable_physics(object, object:get_luaentity())
local opos = object:getpos()
local opos = object:get_pos()
local vec = vector.subtract(checkpos, opos)
vec = vector.add(opos, vector.divide(vec, 2))
object:moveto(vec)
object:move_to(vec)
--fix eternally falling items
minetest.after(0, function(object)
local lua = object:get_luaentity()
if lua then
object:setacceleration({x=0, y=0, z=0})
object:set_acceleration({x=0, y=0, z=0})
end
end, object)
@ -121,7 +115,8 @@ minetest.register_globalstep(function(dtime)
if object:get_luaentity().init ~= true then
object:get_luaentity().init = true
minetest.after(1, function(args)
local player = args[1]
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
@ -142,7 +137,7 @@ minetest.register_globalstep(function(dtime)
else
enable_physics(object, object:get_luaentity())
end
end, {player, object})
end, {player:get_player_name(), object})
end
end
end
@ -213,18 +208,25 @@ local check_can_drop = function(node_name, tool_capabilities)
end
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") or true
if minetest.settings:get_bool("creative_mode") or doTileDrops == false then
if (digger ~= nil and minetest.settings:get_bool("creative_mode")) 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 tool = digger:get_wielded_item()
local toolcaps = tool:get_tool_capabilities()
local toolcaps
if digger ~= nil then
local tool = digger:get_wielded_item()
toolcaps = tool:get_tool_capabilities()
if not check_can_drop(dug_node.name, toolcaps) then
return
if not check_can_drop(dug_node.name, toolcaps) then
return
end
end
--[[ Special node drops when dug by shears by reading _mcl_shears_drop
@ -234,7 +236,7 @@ function minetest.handle_node_drops(pos, drops, digger)
* table: Drop every itemstring in this table when dub by shears
]]
local nodedef = minetest.registered_nodes[dug_node.name]
if toolcaps.groupcaps and toolcaps.groupcaps.shearsy_dig and nodedef._mcl_shears_drop then
if toolcaps ~= nil and toolcaps.groupcaps and toolcaps.groupcaps.shearsy_dig and nodedef._mcl_shears_drop then
if nodedef._mcl_shears_drop == true then
drops = { dug_node.name }
else
@ -243,16 +245,16 @@ function minetest.handle_node_drops(pos, drops, digger)
end
for _,item in ipairs(drops) do
local count, name
local count
if type(item) == "string" then
count = 1
name = item
count = ItemStack(item):get_count()
else
count = item:get_count()
name = item:get_name()
end
local drop_item = ItemStack(item)
drop_item:set_count(1)
for i=1,count do
local obj = core.add_item(pos, name)
local obj = core.add_item(pos, drop_item)
if obj ~= nil then
local x = math.random(1, 5)
if math.random(1,2) == 1 then
@ -262,7 +264,7 @@ function minetest.handle_node_drops(pos, drops, digger)
if math.random(1,2) == 1 then
z = -z
end
obj:setvelocity({x=1/x, y=obj:getvelocity().y, z=1/z})
obj:set_velocity({x=1/x, y=obj:get_velocity().y, z=1/z})
end
end
end
@ -283,7 +285,7 @@ function minetest.item_drop(itemstack, dropper, pos)
v.x = v.x*4
v.y = v.y*4 + 2
v.z = v.z*4
obj:setvelocity(v)
obj:set_velocity(v)
-- Force collection delay
obj:get_luaentity()._insta_collect = false
return itemstack
@ -293,7 +295,7 @@ end
--modify builtin:item
local time_to_live = tonumber(core.setting_get("item_entity_ttl"))
local time_to_live = tonumber(minetest.settings:get("item_entity_ttl"))
if not time_to_live then
time_to_live = 300
end
@ -304,6 +306,7 @@ core.register_entity(":__builtin:item", {
physical = true,
collide_with_objects = false,
collisionbox = {-0.3, -0.3, -0.3, 0.3, 0.3, 0.3},
pointable = false,
visual = "wielditem",
visual_size = {x = 0.4, y = 0.4},
textures = {""},
@ -313,17 +316,27 @@ core.register_entity(":__builtin:item", {
infotext = "",
},
-- Itemstring of dropped item. The empty string is used when the item is not yet initialized yet.
-- 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 = '',
-- If true, item will fall
physical_state = true,
_flowing = false, -- item entity is currently flowing
-- States:
-- * "magnet": Attracted to a nearby player or item
-- * "flowing": Moving in a flowing liquid
-- * "normal": Affected by gravitiy
-- If item entity is currently flowing in water
_flowing = false,
-- Number of seconds this item entity has existed so far
age = 0,
set_item = function(self, itemstring)
self.itemstring = itemstring
if self.itemstring == "" then
-- item not yet known
return
end
local stack = ItemStack(itemstring)
local count = stack:get_count()
local max_count = stack:get_stack_max()
@ -361,7 +374,7 @@ core.register_entity(":__builtin:item", {
if not self or not self.object or not self.object:get_luaentity() then
return
end
local vel = self.object:getvelocity()
local vel = self.object:get_velocity()
if vel and vel.x == 0 and vel.z == 0 then
local x = math.random(1, 5)
if math.random(1,2) == 1 then
@ -372,7 +385,7 @@ core.register_entity(":__builtin:item", {
z = -z
end
local y = math.random(2,4)
self.object:setvelocity({x=1/x, y=y, z=1/z})
self.object:set_velocity({x=1/x, y=y, z=1/z})
end
end, self)
end
@ -432,8 +445,8 @@ core.register_entity(":__builtin:item", {
self._forcetimer = 0
self.object:set_armor_groups({immortal = 1})
self.object:setvelocity({x = 0, y = 2, z = 0})
self.object:setacceleration({x = 0, y = -get_gravity(), z = 0})
self.object:set_velocity({x = 0, y = 2, z = 0})
self.object:set_acceleration({x = 0, y = -get_gravity(), z = 0})
self:set_item(self.itemstring)
end,
@ -488,14 +501,15 @@ core.register_entity(":__builtin:item", {
self.object:remove()
return
end
-- If, for some reason, an item entity with itemstring == "" (hand) appears, this is very bad.
if not self._hand_bug_detected and self.age > 1 and self.itemstring == "" then
-- We must this scream this into the error console. The bug is rare an
minetest.log("error", "A hand item entity appeared at "..minetest.pos_to_string(self.object:getpos()).. "!")
self._hand_bug_detected = true
-- Delete corrupted item entities. The itemstring MUST be non-empty on its first step,
-- otherwise there might have some data corruption.
if self.itemstring == "" then
minetest.log("warning", "Item entity with empty itemstring found at "..minetest.pos_to_string(self.object:get_pos()).. "! Deleting it now.")
self._removed = true
self.object:remove()
end
local p = self.object:getpos()
local p = self.object:get_pos()
local node = core.get_node_or_nil(p)
local in_unloaded = (node == nil)
@ -511,13 +525,15 @@ core.register_entity(":__builtin:item", {
return
end
-- Destroy item in lava or special nodes
-- Destroy item in lava, fire or special nodes
local nn = node.name
local def = minetest.registered_nodes[nn]
if (def and def.groups and (def.groups.lava or def.groups.destroys_items == 1)) then
-- Special effect for lava
if def.groups.lava then
minetest.sound_play("builtin_item_lava", {pos = self.object:getpos(), gain = 0.5})
local lg = minetest.get_item_group(nn, "lava")
local fg = minetest.get_item_group(nn, "fire")
local dg = minetest.get_item_group(nn, "destroys_items")
if (def and (lg ~= 0 or fg ~= 0 or dg == 1)) then
if dg ~= 2 then
minetest.sound_play("builtin_item_lava", {pos = self.object:get_pos(), gain = 0.5})
end
self._removed = true
self.object:remove()
@ -574,8 +590,8 @@ core.register_entity(":__builtin:item", {
-- Set new item moving speed accordingly
local newv = vector.multiply(shootdir, 3)
self.object:setacceleration({x = 0, y = 0, z = 0})
self.object:setvelocity(newv)
self.object:set_acceleration({x = 0, y = 0, z = 0})
self.object:set_velocity(newv)
disable_physics(self.object, self, false, false)
@ -628,8 +644,8 @@ core.register_entity(":__builtin:item", {
local f = 1.39
-- Set new item moving speed into the direciton of the liquid
local newv = vector.multiply(vec, f)
self.object:setacceleration({x = 0, y = 0, z = 0})
self.object:setvelocity({x = newv.x, y = -0.22, z = newv.z})
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
@ -647,7 +663,7 @@ core.register_entity(":__builtin:item", {
-- If node is not registered or node is walkably solid and resting on nodebox
local nn = minetest.get_node({x=p.x, y=p.y-0.5, z=p.z}).name
local v = self.object:getvelocity()
local v = self.object:get_velocity()
if not core.registered_nodes[nn] or core.registered_nodes[nn].walkable and v.y == 0 then
if self.physical_state then

View File

@ -13,6 +13,10 @@ License of source code:
-----------------------
MIT License
Copyright (C) 2012-2016 PilzAdam
Copyright (C) 2014-2016 SmallJoker
Copyright (C) 2012-2016 Various Minetest developers and contributors
Authors/licenses of media files:
-----------------------

View File

@ -1,6 +1,9 @@
local S = minetest.get_translator("mcl_minecarts")
mcl_minecarts = {}
mcl_minecarts.modpath = minetest.get_modpath("mcl_minecarts")
mcl_minecarts.speed_max = 10
mcl_minecarts.check_float_time = 15
dofile(mcl_minecarts.modpath.."/functions.lua")
dofile(mcl_minecarts.modpath.."/rails.lua")
@ -23,6 +26,7 @@ local function register_entity(entity_id, mesh, textures, drop, on_rightclick)
_punched = false, -- used to re-send _velocity and position
_velocity = {x=0, y=0, z=0}, -- only used on punch
_start_pos = nil, -- Used to calculate distance for “On A Rail” achievement
_last_float_check = nil, -- timestamp of last time the cart was checked to be still on a rail
_old_dir = {x=0, y=0, z=0},
_old_pos = nil,
_old_vel = {x=0, y=0, z=0},
@ -31,11 +35,15 @@ local function register_entity(entity_id, mesh, textures, drop, on_rightclick)
}
function cart:on_activate(staticdata, dtime_s)
local data = minetest.deserialize(staticdata)
if type(data) == "table" then
self._railtype = data._railtype
end
self.object:set_armor_groups({immortal=1})
end
function cart:on_punch(puncher, time_from_last_punch, tool_capabilities, direction)
local pos = self.object:getpos()
local pos = self.object:get_pos()
if not self._railtype then
local node = minetest.get_node(vector.floor(pos)).name
self._railtype = minetest.get_item_group(node, "connect_to_raillike")
@ -55,12 +63,13 @@ local function register_entity(entity_id, mesh, textures, drop, on_rightclick)
if puncher:get_player_control().sneak then
if self._driver then
if self._old_pos then
self.object:setpos(self._old_pos)
self.object:set_pos(self._old_pos)
end
mcl_player.player_attached[self._driver] = nil
local 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
end
@ -76,7 +85,14 @@ local function register_entity(entity_id, mesh, textures, drop, on_rightclick)
-- Drop items and remove cart entity
if not minetest.settings:get_bool("creative_mode") then
for d=1, #drop do
minetest.add_item(self.object:getpos(), drop[d])
minetest.add_item(self.object:get_pos(), drop[d])
end
elseif puncher and puncher:is_player() then
local inv = puncher:get_inventory()
for d=1, #drop do
if not inv:contains_item("main", drop[d]) then
inv:add_item("main", drop[d])
end
end
end
@ -84,7 +100,7 @@ local function register_entity(entity_id, mesh, textures, drop, on_rightclick)
return
end
local vel = self.object:getvelocity()
local vel = self.object:get_velocity()
if puncher:get_player_name() == self._driver then
if math.abs(vel.x + vel.z) > 7 then
return
@ -107,18 +123,59 @@ local function register_entity(entity_id, mesh, textures, drop, on_rightclick)
end
function cart:on_step(dtime)
local vel = self.object:getvelocity()
local vel = self.object:get_velocity()
local update = {}
if self._last_float_check == nil then
self._last_float_check = 0
else
self._last_float_check = self._last_float_check + dtime
end
local pos, rou_pos, node
-- Drop minecart if it isn't on a rail anymore
if self._last_float_check >= mcl_minecarts.check_float_time then
pos = self.object:get_pos()
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
-- Detach driver
if self._driver then
if self._old_pos then
self.object:set_pos(self._old_pos)
end
mcl_player.player_attached[self._driver] = nil
local 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
end
-- Drop items and remove cart entity
if not minetest.settings:get_bool("creative_mode") then
for d=1, #drop do
minetest.add_item(self.object:get_pos(), drop[d])
end
end
self.object:remove()
return
end
self._last_float_check = 0
end
if self._punched then
vel = vector.add(vel, self._velocity)
self.object:setvelocity(vel)
self.object:set_velocity(vel)
self._old_dir.y = 0
elseif vector.equals(vel, {x=0, y=0, z=0}) then
return
end
local dir, last_switch = nil, nil
local pos = self.object:getpos()
if not pos then
pos = self.object:get_pos()
end
if self._old_pos and not self._punched then
local flo_pos = vector.floor(pos)
local flo_old = vector.floor(self._old_pos)
@ -127,12 +184,16 @@ local function register_entity(entity_id, mesh, textures, drop, on_rightclick)
-- Prevent querying the same node over and over again
end
-- Update detector rails
local rou_pos = vector.round(pos)
local rou_old = vector.round(self._old_pos)
local node = minetest.get_node(rou_pos)
if not rou_pos then
rou_pos = vector.round(pos)
end
rou_old = vector.round(self._old_pos)
if not node then
node = minetest.get_node(rou_pos)
end
local node_old = minetest.get_node(rou_old)
-- Update detector rails
if node.name == "mcl_minecarts:detector_rail" then
local newnode = {name="mcl_minecarts:detector_rail_on", param2 = node.param2}
minetest.swap_node(rou_pos, newnode)
@ -158,8 +219,8 @@ local function register_entity(entity_id, mesh, textures, drop, on_rightclick)
(self._old_vel.x * vel.x < 0 or self._old_vel.z * vel.z < 0) then
self._old_vel = {x = 0, y = 0, z = 0}
self._old_pos = pos
self.object:setvelocity(vector.new())
self.object:setacceleration(vector.new())
self.object:set_velocity(vector.new())
self.object:set_acceleration(vector.new())
return
end
self._old_vel = vector.new(vel)
@ -233,7 +294,7 @@ local function register_entity(entity_id, mesh, textures, drop, on_rightclick)
new_acc = vector.multiply(dir, acc)
end
self.object:setacceleration(new_acc)
self.object:set_acceleration(new_acc)
self._old_pos = vector.new(pos)
self._old_dir = vector.new(dir)
self._old_switch = last_switch
@ -262,7 +323,7 @@ local function register_entity(entity_id, mesh, textures, drop, on_rightclick)
elseif dir.z < 0 then
yaw = 1
end
self.object:setyaw(yaw * math.pi)
self.object:set_yaw(yaw * math.pi)
end
if self._punched then
@ -282,15 +343,15 @@ local function register_entity(entity_id, mesh, textures, drop, on_rightclick)
end
self.object:set_animation(anim, 1, 0)
self.object:setvelocity(vel)
self.object:set_velocity(vel)
if update.pos then
self.object:setpos(pos)
self.object:set_pos(pos)
end
update = nil
end
function cart:get_staticdata()
return ""
return minetest.serialize({_railtype = self._railtype})
end
minetest.register_entity(entity_id, cart)
@ -323,8 +384,12 @@ mcl_minecarts.place_minecart = function(itemstack, pointed_thing)
local entity_id = entity_mapping[itemstack:get_name()]
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
le._railtype = railtype
end
local cart_dir = mcl_minecarts:get_rail_direction(railpos, {x=1, y=0, z=0}, nil, nil, railtype)
cart:setyaw(minetest.dir_to_yaw(cart_dir))
cart:set_yaw(minetest.dir_to_yaw(cart_dir))
if not minetest.settings:get_bool("creative_mode") then
itemstack:take_item()
@ -332,6 +397,7 @@ mcl_minecarts.place_minecart = function(itemstack, pointed_thing)
return itemstack
end
local register_craftitem = function(itemstring, entity_id, description, longdesc, usagehelp, icon, creative)
entity_mapping[itemstring] = entity_id
@ -356,6 +422,19 @@ local register_craftitem = function(itemstring, entity_id, description, longdesc
return mcl_minecarts.place_minecart(itemstack, pointed_thing)
end,
_on_dispense = function(stack, pos, droppos, dropnode, dropdir)
-- Place minecart as entity on rail. If there's no rail, just drop it.
local placed
if minetest.get_item_group(dropnode.name, "rail") ~= 0 then
-- FIXME: This places minecarts even if the spot is already occupied
local pointed_thing = { under = droppos, above = { x=droppos.x, y=droppos.y+1, z=droppos.z } }
placed = mcl_minecarts.place_minecart(stack, pointed_thing)
end
if placed == nil then
-- Drop item
minetest.add_item(droppos, stack)
end
end,
groups = groups,
}
def.description = description
@ -366,7 +445,22 @@ local register_craftitem = function(itemstring, entity_id, description, longdesc
minetest.register_craftitem(itemstring, def)
end
local function register_minecart(itemstring, entity_id, description, longdesc, usagehelp, mesh, textures, icon, drop, on_rightclick, creative)
--[[
Register a minecart
* itemstring: Itemstring of minecart item
* entity_id: ID of minecart entity
* description: Item name / description
* longdesc: Long help text
* usagehelp: Usage help text
* mesh: Minecart mesh
* textures: Minecart textures table
* icon: Item icon
* drop: Dropped items after destroying minecart
* on_rightclick: Called after rightclick
* on_activate_by_rail: Called when above activator rail
* creative: If false, don't show in Creative Inventory
]]
local function register_minecart(itemstring, entity_id, description, longdesc, usagehelp, mesh, textures, icon, drop, on_rightclick, on_activate_by_rail, creative)
register_entity(entity_id, mesh, textures, drop, on_rightclick)
register_craftitem(itemstring, entity_id, description, longdesc, usagehelp, icon, creative)
if minetest.get_modpath("doc_identifier") ~= nil then
@ -378,16 +472,17 @@ end
register_minecart(
"mcl_minecarts:minecart",
"mcl_minecarts:minecart",
"Minecart",
"Minecarts can be used for a quick transportion on rails." .. "\n" ..
"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.",
"You can place the minecart on rails. Right-click it to enter it. Punch it to get it moving." .. "\n" ..
"To obtain the minecart, punch it while holding down the sneak key.",
S("Minecart"),
S("Minecarts can be used for a quick transportion on rails.") .. "\n" ..
S("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."),
S("You can place the minecart on rails. Right-click it to enter it. Punch it to get it moving.") .. "\n" ..
S("To obtain the minecart, punch it while holding down the sneak key."),
"mcl_minecarts_minecart.b3d",
{"mcl_minecarts_minecart.png"},
"mcl_minecarts_minecart_normal.png",
{"mcl_minecarts:minecart"},
function(self, clicker)
local name = clicker:get_player_name()
if not clicker or not clicker:is_player() then
return
end
@ -396,11 +491,20 @@ register_minecart(
self._driver = nil
self._start_pos = nil
clicker:set_detach()
clicker:set_eye_offset({x=0, y=0, z=0},{x=0, y=0, z=0})
elseif not self._driver then
self._driver = player_name
self._start_pos = self.object:getpos()
self._start_pos = self.object:get_pos()
mcl_player.player_attached[player_name] = true
clicker:set_attach(self.object, "", {x=0, y=3, z=0}, {x=0, y=0, z=0})
clicker:set_attach(self.object, "", {x=0, y=-1.75, z=-2}, {x=0, y=0, z=0})
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)
player:set_eye_offset({x=0, y=-5.5, z=0},{x=0, y=-4, z=0})
end
end, name)
end
end
)
@ -409,18 +513,19 @@ register_minecart(
register_minecart(
"mcl_minecarts:chest_minecart",
"mcl_minecarts:chest_minecart",
"Minecart with Chest",
S("Minecart with Chest"),
nil, nil,
"mcl_minecarts_minecart_chest.b3d",
{ "mcl_chests_normal.png", "mcl_minecarts_minecart.png" },
"mcl_minecarts_minecart_chest.png",
{"mcl_minecarts:minecart", "mcl_chests:chest"})
{"mcl_minecarts:minecart", "mcl_chests:chest"},
nil, nil, false)
-- Minecart with Furnace
register_minecart(
"mcl_minecarts:furnace_minecart",
"mcl_minecarts:furnace_minecart",
"Minecart with Furnace",
S("Minecart with Furnace"),
nil, nil,
"mcl_minecarts_minecart_block.b3d",
{
@ -456,14 +561,14 @@ register_minecart(
-- DEBUG
minetest.chat_send_player(clicker:get_player_name(), "Fuel: " .. tostring(self._fueltime))
end
end
end, nil, false
)
-- Minecart with Command Block
register_minecart(
"mcl_minecarts:command_block_minecart",
"mcl_minecarts:command_block_minecart",
"Minecart with Command Block",
S("Minecart with Command Block"),
nil, nil,
"mcl_minecarts_minecart_block.b3d",
{
@ -477,15 +582,14 @@ register_minecart(
},
"mcl_minecarts_minecart_command_block.png",
{"mcl_minecarts:minecart"},
nil,
false
nil, nil, false
)
-- Minecart with Hopper
register_minecart(
"mcl_minecarts:hopper_minecart",
"mcl_minecarts:hopper_minecart",
"Minecart with Hopper",
S("Minecart with Hopper"),
nil, nil,
"mcl_minecarts_minecart_hopper.b3d",
{
@ -495,14 +599,15 @@ register_minecart(
"mcl_hoppers_hopper_top.png",
},
"mcl_minecarts_minecart_hopper.png",
{"mcl_minecarts:minecart", "mcl_hoppers:hopper"}
{"mcl_minecarts:minecart", "mcl_hoppers:hopper"},
nil, nil, false
)
-- Minecart with TNT
register_minecart(
"mcl_minecarts:tnt_minecart",
"mcl_minecarts:tnt_minecart",
"Minecart with TNT",
S("Minecart with TNT"),
nil, nil,
"mcl_minecarts_minecart_block.b3d",
{
@ -515,7 +620,8 @@ register_minecart(
"mcl_minecarts_minecart.png",
},
"mcl_minecarts_minecart_tnt.png",
{"mcl_minecarts:minecart", "mcl_tnt:tnt"}
{"mcl_minecarts:minecart", "mcl_tnt:tnt"},
nil, nil, false
)
@ -527,6 +633,8 @@ minetest.register_craft({
},
})
-- TODO: Re-enable crafting of special minecarts when they have been implemented
if false then
minetest.register_craft({
output = "mcl_minecarts:hopper_minecart",
recipe = {
@ -558,3 +666,4 @@ minetest.register_craft({
{"mcl_minecarts:minecart"},
},
})
end

View File

@ -1,3 +1,5 @@
local S = minetest.get_translator("mcl_minecarts")
-- Template rail function
local register_rail = function(itemstring, tiles, def_extras, creative)
local groups = {handy=1,pickaxey=1, attached_node=1,rail=1,connect_to_raillike=1,dig_by_water=1,destroy_by_lava_flow=1, transport=1}
@ -21,6 +23,20 @@ local register_rail = function(itemstring, tiles, def_extras, creative)
sounds = mcl_sounds.node_sound_metal_defaults(),
_mcl_blast_resistance = 3.5,
_mcl_hardness = 0.7,
after_destruct = function(pos)
-- Scan for minecarts in this pos and force them to execute their "floating" check.
-- Normally, this will make them drop.
local objs = minetest.get_objects_inside_radius(pos, 1)
for o=1, #objs do
local le = objs[o]:get_luaentity()
if le then
-- All entities in this mod are minecarts, so this works
if string.sub(le.name, 1, 14) == "mcl_minecarts:" then
le._last_float_check = mcl_minecarts.check_float_time
end
end
end
end,
}
if def_extras then
for k,v in pairs(def_extras) do
@ -30,30 +46,52 @@ local register_rail = function(itemstring, tiles, def_extras, creative)
minetest.register_node(itemstring, ndef)
end
local railuse = "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."
-- Redstone rules
local rail_rules_long =
{{x=-1, y= 0, z= 0, spread=true},
{x= 1, y= 0, z= 0, spread=true},
{x= 0, y=-1, z= 0, spread=true},
{x= 0, y= 1, z= 0, spread=true},
{x= 0, y= 0, z=-1, spread=true},
{x= 0, y= 0, z= 1, spread=true},
{x= 1, y= 1, z= 0},
{x= 1, y=-1, z= 0},
{x=-1, y= 1, z= 0},
{x=-1, y=-1, z= 0},
{x= 0, y= 1, z= 1},
{x= 0, y=-1, z= 1},
{x= 0, y= 1, z=-1},
{x= 0, y=-1, z=-1}}
local rail_rules_short = mesecon.rules.pplate
local railuse = S("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.")
-- Normal rail
register_rail("mcl_minecarts:rail",
{"default_rail.png", "default_rail_curved.png", "default_rail_t_junction.png", "default_rail_crossing.png"},
{
description = "Rail",
_doc_items_longdesc = "Rails can be used to build transport tracks for minecarts. Normal rails slightly slow down minecarts due to friction.",
description = S("Rail"),
_doc_items_longdesc = S("Rails can be used to build transport tracks for minecarts. Normal rails slightly slow down minecarts due to friction."),
_doc_items_usagehelp = railuse,
}
)
-- Powered rail (off = brake mode)
register_rail("mcl_minecarts:golden_rail",
{"carts_rail_pwr.png", "carts_rail_curved_pwr.png", "carts_rail_t_junction_pwr.png", "carts_rail_crossing_pwr.png"},
{"mcl_minecarts_rail_golden.png", "mcl_minecarts_rail_golden_curved.png", "mcl_minecarts_rail_golden_t_junction.png", "mcl_minecarts_rail_golden_crossing.png"},
{
description = "Powered Rail",
_doc_items_longdesc = "Rails can be used to build transport tracks for minecarts. Powered rails are able to accelerate and brake minecarts.",
_doc_items_usagehelp = railuse .. "\n" .. "Without redstone power, the rail will brake minecarts. To make this rail accelerate minecarts, power it with redstone power.",
description = S("Powered Rail"),
_doc_items_longdesc = S("Rails can be used to build transport tracks for minecarts. Powered rails are able to accelerate and brake minecarts."),
_doc_items_usagehelp = railuse .. "\n" .. S("Without redstone power, the rail will brake minecarts. To make this rail accelerate minecarts, power it with redstone power."),
_rail_acceleration = -3,
mesecons = {
conductor = {
state = mesecon.state.off,
offstate = "mcl_minecarts:golden_rail",
onstate = "mcl_minecarts:golden_rail_on",
rules = rail_rules_long,
},
},
}
@ -69,40 +107,50 @@ register_rail("mcl_minecarts:golden_rail_on",
conductor = {
state = mesecon.state.on,
offstate = "mcl_minecarts:golden_rail",
onstate = "mcl_minecarts:golden_rail_on",
rules = rail_rules_long,
},
},
drop = "mcl_minecarts:golden_rail",
},
false
)
-- Activator rail (off)
register_rail("mcl_minecarts:activator_rail",
{"mcl_minecarts_rail_activator.png", "default_rail_curved.png^[colorize:#FF0000:96", "default_rail_t_junction.png^[colorize:#FF0000:96", "default_rail_crossing.png^[colorize:#FF0000:96"},
{"mcl_minecarts_rail_activator.png", "mcl_minecarts_rail_activator_curved.png", "mcl_minecarts_rail_activator_t_junction.png", "mcl_minecarts_rail_activator_crossing.png"},
{
description = "Activator Rail",
_doc_items_longdesc = "Rails can be used to build transport tracks for minecarts. Activator rails are used to activate special minecarts.",
_doc_items_usagehelp = railuse .. "\n" .. "To make this rail activate minecarts, power it with redstone power and send a minecart over this piece of rail.",
description = S("Activator Rail"),
_doc_items_longdesc = S("Rails can be used to build transport tracks for minecarts. Activator rails are used to activate special minecarts."),
_doc_items_usagehelp = railuse .. "\n" .. S("To make this rail activate minecarts, power it with redstone power and send a minecart over this piece of rail."),
mesecons = {
conductor = {
state = mesecon.state.off,
offstate = "mcl_minecarts:activator_rail",
onstate = "mcl_minecarts:activator_rail_on",
rules = rail_rules_long,
},
},
}
},
-- Hidden from creative because no cart is using this rail so far.
-- TODO: Remove this when the activator rail has become useful.
false
)
-- Activator rail (on)
register_rail("mcl_minecarts:activator_rail_on",
{"mcl_minecarts_rail_activator_powered.png", "default_rail_curved.png^[colorize:#FF0000:128", "default_rail_t_junction.png^[colorize:#FF0000:128", "default_rail_crossing.png^[colorize:#FF0000:128"},
{"mcl_minecarts_rail_activator_powered.png", "mcl_minecarts_rail_activator_curved_powered.png", "mcl_minecarts_rail_activator_t_junction_powered.png", "mcl_minecarts_rail_activator_crossing_powered.png"},
{
_doc_items_create_entry = false,
mesecons = {
conductor = {
state = mesecon.state.on,
offstate = "mcl_minecarts:activator_rail",
onstate = "mcl_minecarts:activator_rail_on",
rules = rail_rules_long,
},
},
drop = "mcl_minecarts:activator_rail",
},
false
)
@ -111,12 +159,13 @@ register_rail("mcl_minecarts:activator_rail_on",
register_rail("mcl_minecarts:detector_rail",
{"mcl_minecarts_rail_detector.png", "mcl_minecarts_rail_detector_curved.png", "mcl_minecarts_rail_detector_t_junction.png", "mcl_minecarts_rail_detector_crossing.png"},
{
description = "Detector Rail",
_doc_items_longdesc = "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.",
_doc_items_usagehelp = railuse .. "\n" .. "To detect a minecart and provide redstone power, connect it to redstone trails or redstone mechanisms and send any minecart over the rail.",
description = S("Detector Rail"),
_doc_items_longdesc = S("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."),
_doc_items_usagehelp = railuse .. "\n" .. S("To detect a minecart and provide redstone power, connect it to redstone trails or redstone mechanisms and send any minecart over the rail."),
mesecons = {
receptor = {
state = mesecon.state.off,
rules = rail_rules_short,
},
},
}
@ -130,8 +179,10 @@ register_rail("mcl_minecarts:detector_rail_on",
mesecons = {
receptor = {
state = mesecon.state.on,
rules = rail_rules_short,
},
},
drop = "mcl_minecarts:detector_rail",
},
false
)
@ -156,6 +207,9 @@ minetest.register_craft({
}
})
-- Activator rail crafting is disabled until it becomes useful.
-- TODO: Enable crafting as needed.
if false then
minetest.register_craft({
output = "mcl_minecarts:activator_rail 6",
recipe = {
@ -164,6 +218,7 @@ minetest.register_craft({
{"mcl_core:iron_ingot", "mcl_core:stick", "mcl_core:iron_ingot"},
}
})
end
minetest.register_craft({
output = "mcl_minecarts:detector_rail 6",

Binary file not shown.

After

Width:  |  Height:  |  Size: 254 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 254 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 260 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 266 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 258 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 258 B

View File

Before

Width:  |  Height:  |  Size: 256 B

After

Width:  |  Height:  |  Size: 256 B

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,733 @@
Mobs Redo: MineClone 2 Edition
API documentation
==============================
Welcome to the world of mobs in Minetest and hopefully an easy guide to defining
your own mobs and having them appear in your worlds.
Registering Mobs
----------------
To register a mob and have it ready for use requires the following function:
mobs:register_mob(name, definition)
The 'name' of a mob usually starts with the mod name it's running from followed
by it's own name e.g.
"mobs_monster:sand_monster" or "mymod:totally_awesome_beast"
... and the 'definition' is a table which holds all of the settings and
functions needed for the mob to work properly which contains the following:
'nametag' contains the name which is shown above mob.
'type' holds the type of mob that inhabits your world e.g.
"animal" usually docile and walking around.
"monster" attacks player or npc on sight.
"npc" walk around and will defend themselves if hit first, they
kill monsters.
'hp_min' has the minimum health value the mob can spawn with.
'hp_max' has the maximum health value the mob can spawn with.
'armor' holds strength of mob, 100 is normal, lower is more powerful
and needs more hits and better weapons to kill.
'passive' when true allows animals to defend themselves when hit,
otherwise they amble onwards.
'walk_velocity' is the speed that your mob can walk around.
'run_velocity' is the speed your mob can run with, usually when attacking.
'walk_chance' has a 0-100 chance value your mob will walk from standing,
set to 0 for jumping mobs only.
'jump' when true allows your mob to jump updwards.
'jump_height' holds the height your mob can jump, 0 to disable jumping.
'stepheight' height of a block that your mob can easily walk up onto,
defaults to 1.1.
'fly' when true allows your mob to fly around instead of walking.
'fly_in' holds the node name that the mob flies (or swims) around
in e.g. "air" or "default:water_source".
'runaway' if true causes animals to turn and run away when hit.
'view_range' how many nodes in distance the mob can see a player.
'damage' how many health points the mob does to a player or another
mob when melee attacking.
'knock_back' when true has mobs falling backwards when hit, the greater
the damage the more they move back.
'fear_height' is how high a cliff or edge has to be before the mob stops
walking, 0 to turn off height fear.
'fall_speed' has the maximum speed the mob can fall at, default is -10.
'fall_damage' when true causes falling to inflict damage.
'water_damage' holds the damage per second infliced to mobs when standing in
water.
'lava_damage' holds the damage per second inflicted to mobs when standing
in lava or fire.
'light_damage' holds the damage per second inflicted to mobs when it's too
bright (above 13 light).
'suffocation' when true causes mobs to suffocate inside solid blocks (2 damage per second).
'floats' when set to 1 mob will float in water, 0 has them sink.
'follow' mobs follow player when holding any of the items which appear
on this table, the same items can be fed to a mob to tame or
breed e.g. {"farming:wheat", "default:apple"}
'reach' is how far the mob can attack player when standing
nearby, default is 3 nodes.
'docile_by_day' when true has mobs wandering around during daylight
hours and only attacking player at night or when
provoked.
'attacks_monsters' when true has npc's attacking monsters or not.
'attack_animals' when true will have monsters attacking animals.
'owner_loyal' when true will have tamed mobs attack anything player
punches when nearby.
'group_attack' when true has same mob type grouping together to attack
offender.
'attack_type' tells the api what a mob does when attacking the player
or another mob:
'dogfight' is a melee attack when player is within mob reach.
'shoot' has mob shoot pre-defined arrows at player when inside
view_range.
'dogshoot' has melee attack when inside reach and shoot attack
when inside view_range.
'explode' causes mob to stop and explode when inside reach.
'explosion_radius' the radius of explosion node destruction,
defaults to 1
'explosion_damage_radius' the radius of explosion entity & player damage,
defaults to explosion_radius * 2
'explosion_timer' number of seconds before mob explodes while its target
is still inside reach or explosion_damage_radius,
defaults to 3.
'allow_fuse_reset' Allow 'explode' attack_type to reset fuse and resume
chasing if target leaves the blast radius or line of
sight. Defaults to true.
'stop_to_explode' When set to true (default), mob must stop and wait for
explosion_timer in order to explode. If false, mob will
continue chasing.
'arrow' holds the pre-defined arrow object to shoot when
attacking.
'dogshoot_switch' allows switching between attack types by using timers
(1 for shoot, 2 for dogfight)
'dogshoot_count_max' contains how many seconds before switching from
dogfight to shoot.
'dogshoot_count2_max' contains how many seconds before switching from shoot
to dogfight.
'shoot_interval' has the number of seconds between shots.
'shoot_offset' holds the y position added as to where the
arrow/fireball appears on mob.
'specific_attack' has a table of entity names that mob can also attack
e.g. {"player", "mobs_animal:chicken"}.
'runaway_from' contains a table with mob names to run away from, add
"player" to list to runaway from player also.
'blood_amount' contains the number of blood droplets to appear when
mob is hit.
'blood_texture' has the texture name to use for droplets e.g.
"mobs_blood.png", or table {"blood1.png", "blood2.png"}
'pathfinding' set to 1 for mobs to use pathfinder feature to locate
player, set to 2 so they can build/break also (only
works with dogfight attack and when 'mobs_griefing'
in minetest.conf is not false).
'immune_to' is a table that holds specific damage when being hit by
certain items e.g.
{"default:sword_wood", 0} -- causes no damage.
{"default:gold_lump", -10} -- heals by 10 health points.
{"default:coal_block", 20} -- 20 damage when hit on head with coal blocks.
'makes_footstep_sound' when true you can hear mobs walking.
'sounds' this is a table with sounds of the mob
'distance' maximum distance sounds can be heard, default is 10.
'random' played randomly from time to time.
also played for overfeeding animal.
'war_cry' what you hear when mob starts to attack player. (currently disabled)
'attack' what you hear when being attacked.
'shoot_attack' sound played when mob shoots.
'damage' sound heard when mob is hurt.
'death' played when mob is killed.
'jump' played when mob jumps. There's a built-in cooloff timer to avoid sound spam
'fuse' sound played when mob explode timer starts.
'explode' sound played when mob explodes.
'drops' table of items that are dropped when mob is killed, fields are:
'name' name of item to drop.
'chance' chance of drop, 1 for always, 2 for 1-in-2 chance etc.
'min' minimum number of items dropped.
'max' maximum number of items dropped.
'visual' holds the look of the mob you wish to create:
'cube' looks like a normal node
'sprite' sprite which looks same from all angles.
'upright_sprite' flat model standing upright.
'wielditem' how it looks when player holds it in hand.
'mesh' uses separate object file to define mob.
'visual_size' has the size of the mob, defaults to {x = 1, y = 1}
'collisionbox' has the box in which mob can be interacted with the
world e.g. {-0.5, -0.5, -0.5, 0.5, 0.5, 0.5}
'selectionbox' has the box in which player can interact with mob
'textures' holds a table list of textures to be used for mob, or you
could use multiple lists inside another table for random
selection e.g. { {"texture1.png"}, {"texture2.png"} }
'child_texture' holds the texture table for when baby mobs are used.
'gotten_texture' holds the texture table for when self.gotten value is
true, used for milking cows or shearing sheep.
'mesh' holds the name of the external object used for mob model
e.g. "mobs_cow.b3d"
'gotten_mesh" holds the name of the external object used for when
self.gotten is true for mobs.
'rotate' custom model rotation, 0 = front, 90 = side, 180 = back,
270 = other side.
'double_melee_attack' when true has the api choose between 'punch' and
'punch2' animations.
'animation' holds a table containing animation names and settings for use with mesh models:
'stand_start' start frame for when mob stands still.
'stand_end' end frame of stand animation.
'stand_speed' speed of animation in frames per second.
'walk_start' when mob is walking around.
'walk_end'
'walk_speed'
'run_start' when a mob runs or attacks.
'run_end'
'run_speed'
'fly_start' when a mob is flying.
'fly_end'
'fly_speed'
'punch_start' when a mob melee attacks.
'punch_end'
'punch_speed'
'punch2_start' alternative melee attack animation.
'punch2_end'
'punch2_speed'
'shoot_start' shooting animation.
'shoot_end'
'shoot_speed'
'die_start' death animation
'die_end'
'die_speed'
'die_loop' when set to false stops the animation looping.
Using '_loop = false' setting will stop any of the above animations from
looping.
'speed_normal' is used for animation speed for compatibility with some
older mobs.
MineClone 2 extensions:
'ignores_nametag' if true, mob cannot be named by nametag
'rain_damage' damage per second if mob is standing in rain (default: 0)
'sunlight_damage' holds the damage per second inflicted to mobs when they
are in direct sunlight
'spawn_small_alternative': name of a smaller mob to use as replacement if
spawning fails due to space requirements
Node Replacement
----------------
Mobs can look around for specific nodes as they walk and replace them to mimic
eating.
'replace_what' group of items to replace e.g.
{"farming:wheat_8", "farming:carrot_8"}
or you can use the specific options of what, with and
y offset by using this instead:
{
{"group:grass", "air", 0},
{"default:dirt_with_grass", "default:dirt", -1}
}
'replace_with' replace with what e.g. "air" or in chickens case "mobs:egg"
'replace_rate' how random should the replace rate be (typically 10)
'replace_offset' +/- value to check specific node to replace
'on_replace(self, pos, oldnode, newnode)' is called when mob is about to
replace a node.
'self' ObjectRef of mob
'pos' Position of node to replace
'oldnode' Current node
'newnode' What the node will become after replacing
If false is returned, the mob will not replace the node.
By default, replacing sets self.gotten to true and resets the object
properties.
Custom Definition Functions
---------------------------
Along with the above mob registry settings we can also use custom functions to
enhance mob functionality and have them do many interesting things:
'on_die' a function that is called when the mob is killed the
parameters are (self, pos)
'on_rightclick' its same as in minetest.register_entity()
'on_blast' is called when an explosion happens near mob when using TNT
functions, parameters are (object, damage) and returns
(do_damage, do_knockback, drops)
'on_spawn' is a custom function that runs on mob spawn with 'self' as
variable, return true at end of function to run only once.
'after_activate' is a custom function that runs once mob has been activated
with these paramaters (self, staticdata, def, dtime)
'on_breed' called when two similar mobs breed, paramaters are
(parent1, parent2) objects, return false to stop child from
being resized and owner/tamed flags and child textures being
applied. Function itself must spawn new child mob.
'on_grown' is called when a child mob has grown up, only paramater is
(self).
'do_punch' called when mob is punched with paramaters (self, hitter,
time_from_last_punch, tool_capabilities, direction), return
false to stop punch damage and knockback from taking place.
'custom_attack' when set this function is called instead of the normal mob
melee attack, parameters are (self, to_attack).
'on_die' a function that is called when mob is killed (self, pos)
'do_custom' a custom function that is called every tick while mob is
active and which has access to all of the self.* variables
e.g. (self.health for health or self.standing_in for node
status), return with 'false' to skip remainder of mob API.
Internal Variables
------------------
The mob api also has some preset variables and functions that it will remember
for each mob.
'self.health' contains current health of mob (cannot exceed
self.hp_max)
'self.texture_list' contains list of all mob textures
'self.child_texture' contains mob child texture when growing up
'self.base_texture' contains current skin texture which was randomly
selected from textures list
'self.gotten' this is used for obtaining milk from cow and wool from
sheep
'self.horny' when animal fed enough it is set to true and animal can
breed with same animal
'self.hornytimer' background timer that controls breeding functions and
mob childhood timings
'self.child' used for when breeding animals have child, will use
child_texture and be half size
'self.owner' string used to set owner of npc mobs, typically used for
dogs
'self.order' set to "follow" or "stand" so that npc will follow owner
or stand it's ground
'self.nametag' contains the name of the mob which it can show above
Spawning Mobs in World
----------------------
mobs:register_spawn(name, nodes, max_light, min_light, chance,
active_object_count, max_height, day_toggle)
mobs:spawn_specfic(name, nodes, neighbors, min_light, max_light, interval,
chance, active_object_count, min_height, max_height, day_toggle, on_spawn)
These functions register a spawn algorithm for the mob. Without this function
the call the mobs won't spawn.
'name' is the name of the animal/monster
'nodes' is a list of nodenames on that the animal/monster can
spawn on top of
'neighbors' is a list of nodenames on that the animal/monster will
spawn beside (default is {"air"} for
mobs:register_spawn)
'max_light' is the maximum of light
'min_light' is the minimum of light
'interval' is same as in register_abm() (default is 30 for
mobs:register_spawn)
'chance' is same as in register_abm()
'active_object_count' number of this type of mob to spawn at one time inside
map area
'min_height' is the minimum height the mob can spawn
'max_height' is the maximum height the mob can spawn
'day_toggle' true for day spawning, false for night or nil for
anytime
'on_spawn' is a custom function which runs after mob has spawned
and gives self and pos values.
A simpler way to handle mob spawns has been added with the mobs:spawn(def)
command which uses above names to make settings clearer:
mobs:spawn({name = "mobs_monster:tree_monster",
nodes = {"group:leaves"},
max_light = 7,
})
For each mob that spawns with this function is a field in mobs.spawning_mobs.
It tells if the mob should spawn or not. Default is true. So other mods can
only use the API of this mod by disabling the spawning of the default mobs in
this mod.
mobs:spawn_abm_check(pos, node, name)
This global function can be changed to contain additional checks for mobs to
spawn e.g. mobs that spawn only in specific areas and the like. By returning
true the mob will not spawn.
'pos' holds the position of the spawning mob
'node' contains the node the mob is spawning on top of
'name' is the name of the animal/monster
MineClone 2 extensions
----------------------
mobs:spawn_child(pos, mob_type)
This function spawns a mob as a child. The parameter mob_type is the
entitystring of the new mob.
This function returns the mob on success and nil otherwise.
Making Arrows
-------------
mobs:register_arrow(name, definition)
This function registers a arrow for mobs with the attack type shoot.
'name' is the name of the arrow
'definition' is a table with the following values:
'visual' same is in minetest.register_entity()
'visual_size' same is in minetest.register_entity()
'textures' same is in minetest.register_entity()
'velocity' the velocity of the arrow
'drop' if set to true any arrows hitting a node will drop as item
'hit_player' a function that is called when the arrow hits a player;
this function should hurt the player, the parameters are
(self, player)
'hit_mob' a function that is called when the arrow hits a mob;
this function should hurt the mob, the parameters are
(self, mob)
'hit_node' a function that is called when the arrow hits a node, the
parameters are (self, pos, node)
'tail' when set to 1 adds a trail or tail to mob arrows
'tail_texture' texture string used for above effect
'tail_size' has size for above texture (defaults to between 5 and 10)
'expire' contains float value for how long tail appears for
(defaults to 0.25)
'glow' has value for how brightly tail glows 1 to 10 (default is
0 for no glow)
'rotate' integer value in degrees to rotate arrow
'on_step' is a custom function when arrow is active, nil for
default.
Spawn Eggs
----------
mobs:register_egg(name, description, background, addegg, no_creative)
This function registers a spawn egg which can be used by admin to properly spawn in a mob.
'name' this is the name of your new mob to spawn e.g. "mob:sheep"
'description' the name of the new egg you are creating e.g. "Spawn Sheep"
'background' the texture displayed for the egg in inventory
'addegg' would you like an egg image in front of your texture (1 = yes,
0 = no)
'no_creative' when set to true this stops spawn egg appearing in creative
mode for destructive mobs like Dungeon Masters.
Explosion Function
------------------
mobs:explosion(pos, radius) -- DEPRECATED!!! use mobs:boom() instead
mobs:boom(self, pos, radius)
'self' mob entity
'pos' centre position of explosion
'radius' radius of explosion (typically set to 3)
This function generates an explosion which removes nodes in a specific radius
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
---------------------------
mobs:feed_tame(self, clicker, feed_count, breed, tame)
This function allows the mob to be fed the item inside self.follow be it apple,
wheat or whatever a set number of times and be tamed or bred as a result.
Will return true when mob is fed with item it likes.
'self' mob information
'clicker' player information
'feed_count' number of times mob must be fed to tame or breed
'breed' true or false stating if mob can be bred and a child created
afterwards
'tame' true or false stating if mob can be tamed so player can pick
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
-----------
Mobs can now be ridden by players and the following shows its functions and
usage:
mobs:attach(self, player)
This function attaches a player to the mob so it can be ridden.
'self' mob information
'player' player information
mobs:detach(player, offset)
This function will detach the player currently riding a mob to an offset
position.
'player' player information
'offset' position table containing offset values
mobs:drive(self, move_animation, stand_animation, can_fly, dtime)
This function allows an attached player to move the mob around and animate it at
same time.
'self' mob information
'move_animation' string containing movement animation e.g. "walk"
'stand_animation' string containing standing animation e.g. "stand"
'can_fly' if true then jump and sneak controls will allow mob to fly
up and down
'dtime' tick time used inside drive function
mobs:fly(self, dtime, speed, can_shoot, arrow_entity, move_animation, stand_animation)
This function allows an attached player to fly the mob around using directional
controls.
'self' mob information
'dtime' tick time used inside fly function
'speed' speed of flight
'can_shoot' true if mob can fire arrow (sneak and left mouse button
fires)
'arrow_entity' name of arrow entity used for firing
'move_animation' string containing name of pre-defined animation e.g. "walk"
or "fly" etc.
'stand_animation' string containing name of pre-defined animation e.g.
"stand" or "blink" etc.
Note: animation names above are from the pre-defined animation lists inside mob
registry without extensions.
mobs:set_animation(self, name)
This function sets the current animation for mob, defaulting to "stand" if not
found.
'self' mob information
'name' name of animation
Certain variables need to be set before using the above functions:
'self.v2' toggle switch used to define below values for the
first time
'self.max_speed_forward' max speed mob can move forward
'self.max_speed_reverse' max speed mob can move backwards
'self.accel' acceleration speed
'self.terrain_type' integer containing terrain mob can walk on
(1 = water, 2 or 3 = land)
'self.driver_attach_at' position offset for attaching player to mob
'self.driver_eye_offset' position offset for attached player view
'self.driver_scale' sets driver scale for mobs larger than {x=1, y=1}
External Settings for "minetest.conf"
------------------------------------
'enable_damage' if true monsters will attack players (default is true)
'only_peaceful_mobs' if true only animals will spawn in game (default is
false)
'mobs_disable_blood' if false blood effects appear when mob is hit (default
is false)
'mobs_spawn_protected' if set to false then mobs will not spawn in protected
areas (default is true)
'remove_far_mobs' if true then untamed mobs that are outside players
visual range will be removed (default is true)
'mobname' can change specific mob chance rate (0 to disable) and
spawn number e.g. mobs_animal:cow = 1000,5
'mob_difficulty' sets difficulty level (health and hit damage
multiplied by this number), defaults to 1.0.
'mob_show_health' if false then punching mob will not show health status
(true by default)
'mob_chance_multiplier' multiplies chance of all mobs spawning and can be set
to 0.5 to have mobs spawn more or 2.0 to spawn less.
e.g. 1 in 7000 * 0.5 = 1 in 3500 so better odds of
spawning.
'mobs_spawn' if false then mobs no longer spawn without spawner or
spawn egg.
'mobs_drop_items' when false mobs no longer drop items when they die.
'mobs_griefing' when false mobs cannot break blocks when using either
pathfinding level 2, replace functions or mobs:boom
function.
Players can override the spawn chance for each mob registered by adding a line
to their minetest.conf file with a new value, the lower the value the more each
mob will spawn e.g.
mobs_animal:sheep_chance 11000
mobs_monster:sand_monster_chance 100
Rideable Horse Example Mob
--------------------------
mobs:register_mob("mob_horse:horse", {
type = "animal",
visual = "mesh",
visual_size = {x = 1.20, y = 1.20},
mesh = "mobs_horse.x",
collisionbox = {-0.4, -0.01, -0.4, 0.4, 1.25, 0.4},
animation = {
speed_normal = 15,
speed_run = 30,
stand_start = 25,
stand_end = 75,
walk_start = 75,
walk_end = 100,
run_start = 75,
run_end = 100,
},
textures = {
{"mobs_horse.png"},
{"mobs_horsepeg.png"},
{"mobs_horseara.png"}
},
fear_height = 3,
runaway = true,
fly = false,
walk_chance = 60,
view_range = 5,
follow = {"farming:wheat"},
passive = true,
hp_min = 12,
hp_max = 16,
armor = 200,
lava_damage = 5,
fall_damage = 5,
water_damage = 1,
makes_footstep_sound = true,
drops = {
{name = "mobs:meat_raw", chance = 1, min = 2, max = 3}
},
sounds = {
random = "horse_neigh.ogg",
damage = "horse_whinney.ogg",
},
do_custom = function(self, dtime)
-- set needed values if not already present
if not self.v2 then
self.v2 = 0
self.max_speed_forward = 6
self.max_speed_reverse = 2
self.accel = 6
self.terrain_type = 3
self.driver_attach_at = {x = 0, y = 20, z = -2}
self.driver_eye_offset = {x = 0, y = 3, z = 0}
self.driver_scale = {x = 1, y = 1}
end
-- if driver present allow control of horse
if self.driver then
mobs.drive(self, "walk", "stand", false, dtime)
return false -- skip rest of mob functions
end
return true
end,
on_die = function(self, pos)
-- drop saddle when horse is killed while riding
-- also detach from horse properly
if self.driver then
minetest.add_item(pos, "mobs:saddle")
mobs.detach(self.driver, {x = 1, y = 0, z = 1})
end
end,
on_rightclick = function(self, clicker)
-- make sure player is clicking
if not clicker or not clicker:is_player() then
return
end
-- feed, tame or heal horse
if mobs:feed_tame(self, clicker, 10, true, true) then
return
end
-- make sure tamed horse is being clicked by owner only
if self.tamed and self.owner == clicker:get_player_name() then
local inv = clicker:get_inventory()
-- detatch player already riding horse
if self.driver and clicker == self.driver then
mobs.detach(clicker, {x = 1, y = 0, z = 1})
-- add saddle back to inventory
if inv:room_for_item("main", "mobs:saddle") then
inv:add_item("main", "mobs:saddle")
else
minetest.add_item(clicker.get_pos(), "mobs:saddle")
end
-- attach player to horse
elseif not self.driver
and clicker:get_wielded_item():get_name() == "mobs:saddle" then
self.object:set_properties({stepheight = 1.1})
mobs.attach(self, clicker)
-- take saddle from inventory
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
})

View File

@ -0,0 +1,15 @@
local S = mobs.intllib
-- name tag
minetest.register_craftitem("mcl_mobs:nametag", {
description = S("Name Tag"),
_doc_items_longdesc = S("A name tag is an item to name a mob."),
_doc_items_usagehelp = S("Before you use the name tag, you need to set a name at an anvil. Now you can use the name tag to name a mob with a rightclick. This uses up the name tag."),
inventory_image = "mobs_nametag.png",
wield_image = "mobs_nametag.png",
stack_max = 64,
groups = { tool=1 },
})
minetest.register_alias("mobs:nametag", "mcl_mobs:nametag")

View File

@ -1,6 +1,9 @@
mcl_core
mcl_weather?
mcl_tnt?
mcl_hunger?
invisibility?
intllib?
lucky_block?
cmi?
doc_identifier?

View File

@ -0,0 +1 @@
Adds a mob API for mods to add animals or monsters, etc.

View File

@ -0,0 +1,13 @@
local path = minetest.get_modpath(minetest.get_current_modname())
-- Mob API
dofile(path .. "/api.lua")
-- Rideable Mobs
dofile(path .. "/mount.lua")
-- Mob Items
dofile(path .. "/crafts.lua")
minetest.log("action", "[MOD] Mobs Redo: MineClone 2 Edition loaded")

View File

@ -18,6 +18,10 @@ msgstr ""
"X-Generator: Poedit 2.0.2\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#: api.lua
msgid "** Peaceful Mode Active - No Monsters Will Spawn"
msgstr ""
#: api.lua
msgid "Mob has been protected!"
msgstr "Kreatur wurde geschützt!"
@ -42,10 +46,6 @@ msgstr "Daneben!"
msgid "Already protected!"
msgstr "Bereits geschützt!"
#: api.lua
msgid "Protected!"
msgstr "Geschützt!"
#: api.lua
msgid "@1 at full health (@2)"
msgstr "@1 bei voller Gesundheit (@2)"
@ -98,6 +98,10 @@ msgstr "Kreaturschutzrune"
msgid "Saddle"
msgstr "Sattel"
#: crafts.lua
msgid "Mob Fence"
msgstr "Kreaturen Zaun"
#: spawner.lua
msgid "Mob Spawner"
msgstr "Kreaturenspawner"
@ -124,4 +128,4 @@ msgid ""
"distance[1-20] y_offset[-10 to 10]”"
msgstr ""
"Syntax: „name min_licht[0-14] max_licht[0-14] max_mobs_im_gebiet[0 zum "
"Deaktivieren] distanz[1-20] y_versatz[-10 bis 10]“"
"Deaktivieren] distanz[1-20] y_versatz[-10 bis 10]“"

View File

@ -0,0 +1,128 @@
# Mobs Redo translation.
# Copyright (C) 2017 TenPlus1
# This file is distributed under the same license as the mobs package.
# Wuzzy <Wuzzy@mail.ru>, 2017
#
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2017-07-16 16:48+0200\n"
"PO-Revision-Date: 2017-07-16 16:48+0200\n"
"Last-Translator: Aleks <alexsinteck@icqmail.com>\n"
"Language-Team: \n"
"Language: es\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
#: api.lua
msgid "** Peaceful Mode Active - No Monsters Will Spawn"
msgstr ""
#: api.lua
msgid "Mob has been protected!"
msgstr "El mob ha sido protegido!"
#: api.lua
msgid "@1 (Tamed)"
msgstr "@1 (Domesticado)"
#: api.lua
msgid "Not tamed!"
msgstr "No domesticado!"
#: api.lua
msgid "@1 is owner!"
msgstr "@1 es el dueño!"
#: api.lua
msgid "Missed!"
msgstr "Perdido!"
#: api.lua
msgid "Already protected!"
msgstr "Ya está protegido!"
#: api.lua
msgid "@1 at full health (@2)"
msgstr "@1 con salud llena (@2)"
#: api.lua
msgid "@1 has been tamed!"
msgstr "@1 ha sido domesticado!"
#: api.lua
msgid "Enter name:"
msgstr "Ingrese nombre:"
#: api.lua
msgid "Rename"
msgstr "Renombrar"
#: crafts.lua
msgid "Name Tag"
msgstr "Nombrar etiqueta"
#: crafts.lua
msgid "Leather"
msgstr "Cuero"
#: crafts.lua
msgid "Raw Meat"
msgstr "Carne cruda"
#: crafts.lua
msgid "Meat"
msgstr "Carne"
#: crafts.lua
msgid "Lasso (right-click animal to put in inventory)"
msgstr "Lazo (click derecho en animal para colocar en inventario)"
#: crafts.lua
msgid "Net (right-click animal to put in inventory)"
msgstr "Red (click derecho en animal para colocar en inventario)"
#: crafts.lua
msgid "Steel Shears (right-click to shear)"
msgstr "Tijera de acero (click derecho para esquilar)"
#: crafts.lua
msgid "Mob Protection Rune"
msgstr "Runa de protección de Mob"
#: crafts.lua
msgid "Saddle"
msgstr "Montura"
#: crafts.lua
msgid "Mob Fence"
msgstr ""
#: spawner.lua
msgid "Mob Spawner"
msgstr "Generador de Mob"
#: spawner.lua
msgid "Mob MinLight MaxLight Amount PlayerDist"
msgstr "Mob LuzMin LuzMax Cantidad DistJugador"
#: spawner.lua
msgid "Spawner Not Active (enter settings)"
msgstr "Generador no activo (ingrese config)"
#: spawner.lua
msgid "Spawner Active (@1)"
msgstr "Generador activo (@1)"
#: spawner.lua
msgid "Mob Spawner settings failed!"
msgstr "Configuracion de generador de Mob falló!"
#: spawner.lua
msgid ""
"Syntax: “name min_light[0-14] max_light[0-14] max_mobs_in_area[0 to disable] "
"distance[1-20] y_offset[-10 to 10]”"
msgstr "Sintaxis: “nombre luz_min[0-14] luz_max[0-14] max_mobs_en_area[0 para deshabilitar] "
"distancia[1-20] compensacion[-10 a 10]”"

View File

@ -0,0 +1,129 @@
# SOME DESCRIPTIVE TITLE.
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the PACKAGE package.
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
#
msgid ""
msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2017-07-29 09:13+0200\n"
"PO-Revision-Date: 2017-07-29 09:20+0200\n"
"Language-Team: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Generator: Poedit 1.8.12\n"
"Last-Translator: fat115 <fat115@framasoft.org>\n"
"Plural-Forms: nplurals=2; plural=(n > 1);\n"
"Language: fr\n"
#: api.lua
msgid "** Peaceful Mode Active - No Monsters Will Spawn"
msgstr "** Mode pacifique activé - Aucun monstre ne sera généré"
#: api.lua
msgid "Mob has been protected!"
msgstr "L'animal a été protégé !"
#: api.lua
msgid "@1 (Tamed)"
msgstr "@1 (apprivoisé)"
#: api.lua
msgid "Not tamed!"
msgstr "Non-apprivoisé !"
#: api.lua
msgid "@1 is owner!"
msgstr "Appartient à @1 !"
#: api.lua
msgid "Missed!"
msgstr "Raté !"
#: api.lua
msgid "Already protected!"
msgstr "Déjà protégé !"
#: api.lua
msgid "@1 at full health (@2)"
msgstr "@1 est en pleine forme (@2) "
#: api.lua
msgid "@1 has been tamed!"
msgstr "@1 a été apprivoisé ! "
#: api.lua
msgid "Enter name:"
msgstr "Saisissez un nom :"
#: api.lua
msgid "Rename"
msgstr "Renommer"
#: crafts.lua
msgid "Name Tag"
msgstr "Étiquette pour collier"
#: crafts.lua
msgid "Leather"
msgstr "Cuir"
#: crafts.lua
msgid "Raw Meat"
msgstr "Viande crue"
#: crafts.lua
msgid "Meat"
msgstr "Viande"
#: crafts.lua
msgid "Lasso (right-click animal to put in inventory)"
msgstr "Lasso (clic droit sur l'animal pour le mettre dans l'inventaire)"
#: crafts.lua
msgid "Net (right-click animal to put in inventory)"
msgstr "Filet (clic droit sur l'animal pour le mettre dans l'inventaire)"
#: crafts.lua
msgid "Steel Shears (right-click to shear)"
msgstr "Ciseaux à laine (clic droit pour tondre)"
#: crafts.lua
msgid "Mob Protection Rune"
msgstr "Rune de protection des animaux"
#: crafts.lua
msgid "Saddle"
msgstr "Selle"
#: crafts.lua
msgid "Mob Fence"
msgstr "Clôture à animaux"
#: spawner.lua
msgid "Mob Spawner"
msgstr "Générateur de mob"
#: spawner.lua
msgid "Mob MinLight MaxLight Amount PlayerDist"
msgstr "Mob MinLumière MaxLumière Quantité DistanceJoueur"
#: spawner.lua
msgid "Spawner Not Active (enter settings)"
msgstr "Générateur non actif (entrez les paramètres)"
#: spawner.lua
msgid "Spawner Active (@1)"
msgstr "Générateur actif (@1)"
#: spawner.lua
msgid "Mob Spawner settings failed!"
msgstr "Echec des paramètres du générateur"
#: spawner.lua
msgid ""
"Syntax: “name min_light[0-14] max_light[0-14] max_mobs_in_area[0 to disable] "
"distance[1-20] y_offset[-10 to 10]”"
msgstr "Syntaxe : “nom min_lumière[0-14] max_lumière[0-14] max_mobs_dans_zone[0 pour désactiver] distance[1-20] décalage_y[-10 à 10]“"

View File

@ -0,0 +1,131 @@
# ITALIAN LOCALE FILE FOR THE MOBS REDO MODULE
# Copyright (c) 2014 Krupnov Pavel and 2016 TenPlus1
# This file is distributed under the same license as the MOBS REDO package.
# Hamlet <h4mlet@riseup.net>, 2017.
#
msgid ""
msgstr ""
"Project-Id-Version: Italian locale file for the Mobs Redo module\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2017-07-02 16:48+0200\n"
"PO-Revision-Date: 2017-08-18 12:18+0100\n"
"Last-Translator: H4mlet <h4mlet@riseup.net>\n"
"Language-Team: \n"
"Language: it\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Generator: Poedit 1.6.10\n"
#: api.lua
msgid "** Peaceful Mode Active - No Monsters Will Spawn"
msgstr ""
#: api.lua
msgid "Mob has been protected!"
msgstr "Il mob è stato protetto!"
#: api.lua
msgid "@1 (Tamed)"
msgstr "@1 (Addomesticat*)"
#: api.lua
msgid "Not tamed!"
msgstr "Non addomesticat*!"
#: api.lua
msgid "@1 is owner!"
msgstr "Proprietari* @1!"
#: api.lua
msgid "Missed!"
msgstr "Mancat*!"
#: api.lua
msgid "Already protected!"
msgstr "Già protett*!"
#: api.lua
msgid "@1 at full health (@2)"
msgstr "@1 in piena salute (@2)"
#: api.lua
msgid "@1 has been tamed!"
msgstr "@1 è stat* addomesticat*!"
#: api.lua
msgid "Enter name:"
msgstr "Inserire il nome:"
#: api.lua
msgid "Rename"
msgstr "Rinominare"
#: crafts.lua
msgid "Name Tag"
msgstr "Targhetta"
#: crafts.lua
msgid "Leather"
msgstr "Pelle"
#: crafts.lua
msgid "Raw Meat"
msgstr "Carne cruda"
#: crafts.lua
msgid "Meat"
msgstr "Carne"
#: crafts.lua
msgid "Lasso (right-click animal to put in inventory)"
msgstr "Lazo (click di destro per mettere l'animale nell'inventario)"
#: crafts.lua
msgid "Net (right-click animal to put in inventory)"
msgstr "Rete (click destro per mettere l'animale nell'inventario)"
#: crafts.lua
msgid "Steel Shears (right-click to shear)"
msgstr "Cesoie d'acciaio (click destro per tosare)"
#: crafts.lua
msgid "Mob Protection Rune"
msgstr "Runa di protezione per mob"
#: crafts.lua
msgid "Saddle"
msgstr "Sella"
#: crafts.lua
msgid "Mob Fence"
msgstr ""
#: spawner.lua
msgid "Mob Spawner"
msgstr "Generatore di mob"
#: spawner.lua
msgid "Mob MinLight MaxLight Amount PlayerDist"
msgstr "Mob LuceMin LuceMax Ammontare DistGiocat."
#: spawner.lua
msgid "Spawner Not Active (enter settings)"
msgstr "Generatore inattivo (inserire le impostazioni)"
#: spawner.lua
msgid "Spawner Active (@1)"
msgstr "Generatore attivo (@1)"
#: spawner.lua
msgid "Mob Spawner settings failed!"
msgstr "Impostazioni del generatore di mob fallite!"
#: spawner.lua
msgid ""
"Syntax: “name min_light[0-14] max_light[0-14] max_mobs_in_area[0 to disable] "
"distance[1-20] y_offset[-10 to 10]”"
msgstr ""
"Sintassi: “name min_light[0-14] max_light[0-14] max_mobs_in_area[0 per "
"disabilitare] distance[1-20] y_offset[-10 to 10]”"

View File

@ -0,0 +1,131 @@
# SOME DESCRIPTIVE TITLE.
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the PACKAGE package.
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
#
msgid ""
msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2018-02-05 23:40+0800\n"
"PO-Revision-Date: 2018-02-05 23:51+0800\n"
"Language-Team: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Generator: Poedit 2.0.6\n"
"Last-Translator: MuhdNurHidayat (MNH48) <mnh48mail@gmail.com>\n"
"Plural-Forms: nplurals=1; plural=0;\n"
"Language: ms\n"
#: api.lua
msgid "** Peaceful Mode Active - No Monsters Will Spawn"
msgstr "** Mod Aman Diaktifkan - Tiada Raksasa Akan Muncul"
#: api.lua
msgid "Mob has been protected!"
msgstr "Mob telah pun dilindungi!"
#: api.lua
msgid "@1 (Tamed)"
msgstr "@1 (Jinak)"
#: api.lua
msgid "Not tamed!"
msgstr "Belum dijinakkan!"
#: api.lua
msgid "@1 is owner!"
msgstr "Ini hak milik @1!"
#: api.lua
msgid "Missed!"
msgstr "Terlepas!"
#: api.lua
msgid "Already protected!"
msgstr "Telah dilindungi!"
#: api.lua
msgid "@1 at full health (@2)"
msgstr "Mata kesihatan @1 telah penuh (@2)"
#: api.lua
msgid "@1 has been tamed!"
msgstr "@1 telah dijinakkan!"
#: api.lua
msgid "Enter name:"
msgstr "Masukkan nama:"
#: api.lua
msgid "Rename"
msgstr "Namakan semula"
#: crafts.lua
msgid "Name Tag"
msgstr "Tanda Nama"
#: crafts.lua
msgid "Leather"
msgstr "Kulit"
#: crafts.lua
msgid "Raw Meat"
msgstr "Daging Mentah"
#: crafts.lua
msgid "Meat"
msgstr "Daging Bakar"
#: crafts.lua
msgid "Lasso (right-click animal to put in inventory)"
msgstr "Tanjul (klik-kanan haiwan untuk masukkan ke inventori)"
#: crafts.lua
msgid "Net (right-click animal to put in inventory)"
msgstr "Jaring (klik-kanan haiwan untuk masukkan ke inventori)"
#: crafts.lua
msgid "Steel Shears (right-click to shear)"
msgstr "Ketam Keluli (klik-kanan untuk mengetam bulu biri-biri)"
#: crafts.lua
msgid "Mob Protection Rune"
msgstr "Rune Perlindungan Mob"
#: crafts.lua
msgid "Saddle"
msgstr "Pelana"
#: crafts.lua
msgid "Mob Fence"
msgstr "Pagar Mob"
#: spawner.lua
msgid "Mob Spawner"
msgstr "Pewujud Mob"
#: spawner.lua
msgid "Mob MinLight MaxLight Amount PlayerDist"
msgstr "Mob CahayaMin CahayaMax Amaun JarakPemain"
#: spawner.lua
msgid "Spawner Not Active (enter settings)"
msgstr "Pewujud Mob Tidak Aktif (masukkan tetapan)"
#: spawner.lua
msgid "Spawner Active (@1)"
msgstr "Pewujud Mob Aktif (@1)"
#: spawner.lua
msgid "Mob Spawner settings failed!"
msgstr "Penetapan Pewujud Mob gagal!"
#: spawner.lua
msgid ""
"Syntax: “name min_light[0-14] max_light[0-14] max_mobs_in_area[0 to disable] "
"distance[1-20] y_offset[-10 to 10]”"
msgstr ""
"Sintaks: \"nama cahaya_minimum[0-14] cahaya_maksimum[0-14] "
"amaun_mob_maksimum[0 untuk lumpuhkan] jarak[1-20] ketinggian[-10 hingga 10]\""

View File

@ -18,6 +18,10 @@ msgstr ""
"X-Generator: Poedit 2.0.2\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#: api.lua
msgid "** Peaceful Mode Active - No Monsters Will Spawn"
msgstr ""
#: api.lua
msgid "Mob has been protected!"
msgstr ""
@ -42,10 +46,6 @@ msgstr "Faltou!"
msgid "Already protected!"
msgstr ""
#: api.lua
msgid "Protected!"
msgstr ""
#: api.lua
msgid "@1 at full health (@2)"
msgstr "@1 em plena saude (@2)"
@ -99,6 +99,10 @@ msgstr ""
msgid "Saddle"
msgstr ""
#: crafts.lua
msgid "Mob Fence"
msgstr ""
#: spawner.lua
msgid "Mob Spawner"
msgstr "Spawnador de Mob"
@ -126,4 +130,4 @@ msgid ""
"distance[1-20] y_offset[-10 to 10]”"
msgstr ""
"> nome luz_min[0-14] luz_max[0-14] max_mobs_na_area[0 para desabilitar] "
"distancia[1-20] y_offset[-10 a 10]"
"distancia[1-20] y_offset[-10 a 10]"

View File

@ -0,0 +1,129 @@
# Russian translation for the mobs_redo mod.
# Copyright (C) 2018 TenPlus1
# This file is distributed under the same license as the mobs_redo package.
# Oleg720 <olegsiriak@yandex.ru>, 2017.
# CodeXP <codexp@gmx.net>, 2018.
#
#, fuzzy
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2017-08-13 15:47+0200\n"
"PO-Revision-Date: 2018-03-23 22:22+0100\n"
"Last-Translator: CodeXP <codexp@gmx.net>\n"
"Language-Team: \n"
"Language: ru\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
#: api.lua
msgid "** Peaceful Mode Active - No Monsters Will Spawn"
msgstr "** Мирный модус активирован - монстры не спаунятся"
#: api.lua
msgid "Mob has been protected!"
msgstr "Моб защищен!"
#: api.lua
msgid "@1 (Tamed)"
msgstr "@1 (Прирученный)"
#: api.lua
msgid "Not tamed!"
msgstr "Не прирученный"
#: api.lua
msgid "@1 is owner!"
msgstr "@1 владелец"
#: api.lua
msgid "Missed!"
msgstr "Промазал!"
#: api.lua
msgid "Already protected!"
msgstr "Уже защищен!"
#: api.lua
msgid "@1 at full health (@2)"
msgstr "@1 при полном здоровье (@2)"
#: api.lua
msgid "@1 has been tamed!"
msgstr "@1 приручен"
#: api.lua
msgid "Enter name:"
msgstr "Введите имя:"
#: api.lua
msgid "Rename"
msgstr "Переименовать"
#: crafts.lua
msgid "Name Tag"
msgstr "Новый тэг"
#: crafts.lua
msgid "Leather"
msgstr "Кожа"
#: crafts.lua
msgid "Raw Meat"
msgstr "Сырое мясо"
#: crafts.lua
msgid "Meat"
msgstr "Мясо"
#: crafts.lua
msgid "Lasso (right-click animal to put in inventory)"
msgstr "Лассо (Правый клик - положить животное в инвентарь)"
#: crafts.lua
msgid "Net (right-click animal to put in inventory)"
msgstr "Сеть (Правый клик - положить животное в инвентарь)"
#: crafts.lua
msgid "Steel Shears (right-click to shear)"
msgstr "Ножницы (Правый клик - подстричь)"
#: crafts.lua
msgid "Mob Protection Rune"
msgstr "Защитная руна мобов"
#: crafts.lua
msgid "Saddle"
msgstr "Седло"
#: crafts.lua
msgid "Mob Fence"
msgstr "Забор от мобов"
#: spawner.lua
msgid "Mob Spawner"
msgstr "Спаунер моба"
#: spawner.lua
msgid "Mob MinLight MaxLight Amount PlayerDist"
msgstr ""
#: spawner.lua
msgid "Spawner Not Active (enter settings)"
msgstr "Спаунер не активен (введите настройки)"
#: spawner.lua
msgid "Spawner Active (@1)"
msgstr "Активные спаунер (@1)"
#: spawner.lua
msgid "Mob Spawner settings failed!"
msgstr "Настройки спаунера моба провалились"
#: spawner.lua
msgid ""
"Syntax: “name min_light[0-14] max_light[0-14] max_mobs_in_area[0 to disable] "
"distance[1-20] y_offset[-10 to 10]”"
msgstr ""

View File

@ -17,6 +17,10 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
#: api.lua
msgid "** Peaceful Mode Active - No Monsters Will Spawn"
msgstr ""
#: api.lua
msgid "Mob has been protected!"
msgstr ""
@ -41,10 +45,6 @@ msgstr ""
msgid "Already protected!"
msgstr ""
#: api.lua
msgid "Protected!"
msgstr ""
#: api.lua
msgid "@1 at full health (@2)"
msgstr ""
@ -97,6 +97,10 @@ msgstr ""
msgid "Saddle"
msgstr ""
#: crafts.lua
msgid "Mob Fence"
msgstr ""
#: spawner.lua
msgid "Mob Spawner"
msgstr ""
@ -121,4 +125,4 @@ msgstr ""
msgid ""
"Syntax: “name min_light[0-14] max_light[0-14] max_mobs_in_area[0 to disable] "
"distance[1-20] y_offset[-10 to 10]”"
msgstr ""
msgstr ""

View File

@ -18,6 +18,10 @@ msgstr ""
"X-Generator: Poedit 2.0.2\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#: api.lua
msgid "** Peaceful Mode Active - No Monsters Will Spawn"
msgstr ""
#: api.lua
msgid "Mob has been protected!"
msgstr ""
@ -42,10 +46,6 @@ msgstr "Kaçırdın!"
msgid "Already protected!"
msgstr ""
#: api.lua
msgid "Protected!"
msgstr ""
#: api.lua
msgid "@1 at full health (@2)"
msgstr "@1 tam canında (@2)"
@ -99,6 +99,10 @@ msgstr ""
msgid "Saddle"
msgstr ""
#: crafts.lua
msgid "Mob Fence"
msgstr "Canavar Yaratıcı"
#: spawner.lua
msgid "Mob Spawner"
msgstr "Canavar Yaratıcı"
@ -126,4 +130,4 @@ msgid ""
"distance[1-20] y_offset[-10 to 10]”"
msgstr ""
"> isim min_isik[0-14] max_isik[0-14] alandaki_max_canavar_sayisi[kapatmak "
"icin 0] mesafe[1-20] y_cikinti[-10 ve 10 arası]"
"icin 0] mesafe[1-20] y_cikinti[-10 ve 10 arası]"

View File

@ -0,0 +1,8 @@
if minetest.get_modpath("lucky_block") then
lucky_block:add_blocks({
{"dro", {"mcl_mobs:nametag"}, 1},
{"lig"},
})
end

View File

@ -0,0 +1 @@
name = mcl_mobs

View File

@ -151,12 +151,14 @@ function mobs.attach(entity, player)
}
})
minetest.after(0.2, function()
mcl_player.player_set_animation(player, "sit" , 30)
end)
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, player:get_player_name())
--player:set_look_yaw(entity.object:getyaw() - rot_view)
player:set_look_horizontal(entity.object:getyaw() - rot_view)
player:set_look_horizontal(entity.object:get_yaw() - rot_view)
end
@ -166,13 +168,16 @@ function mobs.detach(player, offset)
mcl_player.player_set_animation(player, "stand" , 30)
local pos = player:getpos()
local pos = player:get_pos()
pos = {x = pos.x + offset.x, y = pos.y + 0.2 + offset.y, z = pos.z + offset.z}
minetest.after(0.1, function()
player:setpos(pos)
end)
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
@ -185,15 +190,13 @@ function mobs.drive(entity, moving_anim, stand_anim, can_fly, dtime)
end
local acce_y = 0
local velo = entity.object:getvelocity()
local velo = entity.object:get_velocity()
entity.v = get_v(velo) * get_sign(entity.v)
-- process controls
if entity.driver then
--print ("---velo", get_v(velo))
local ctrl = entity.driver:get_player_control()
-- move forwards
@ -212,8 +215,7 @@ function mobs.drive(entity, moving_anim, stand_anim, can_fly, dtime)
end
-- fix mob rotation
-- entity.object:setyaw(entity.driver:get_look_yaw() - entity.rotate)
entity.object:setyaw(entity.driver:get_look_horizontal() - entity.rotate)
entity.object:set_yaw(entity.driver:get_look_horizontal() - entity.rotate)
if can_fly then
@ -273,7 +275,7 @@ function mobs.drive(entity, moving_anim, stand_anim, can_fly, dtime)
if s ~= get_sign(entity.v) then
entity.object:setvelocity({x = 0, y = 0, z = 0})
entity.object:set_velocity({x = 0, y = 0, z = 0})
entity.v = 0
return
end
@ -290,7 +292,7 @@ function mobs.drive(entity, moving_anim, stand_anim, can_fly, dtime)
end
-- Set position, velocity and acceleration
local p = entity.object:getpos()
local p = entity.object:get_pos()
local new_velo = {x = 0, y = 0, z = 0}
local new_acce = {x = 0, y = -9.8, z = 0}
@ -344,9 +346,9 @@ function mobs.drive(entity, moving_anim, stand_anim, can_fly, dtime)
end
else
if math.abs(velo.y) < 1 then
local pos = entity.object:getpos()
local pos = entity.object:get_pos()
pos.y = math.floor(pos.y) + 0.5
entity.object:setpos(pos)
entity.object:set_pos(pos)
velo.y = 0
end
end
@ -355,11 +357,11 @@ function mobs.drive(entity, moving_anim, stand_anim, can_fly, dtime)
end
end
new_velo = get_velocity(v, entity.object:getyaw() - rot_view, velo.y)
new_velo = get_velocity(v, entity.object:get_yaw() - rot_view, velo.y)
new_acce.y = new_acce.y + acce_y
entity.object:setvelocity(new_velo)
entity.object:setacceleration(new_acce)
entity.object:set_velocity(new_velo)
entity.object:set_acceleration(new_acce)
-- CRASH!
if enable_crash then
@ -368,8 +370,6 @@ function mobs.drive(entity, moving_anim, stand_anim, can_fly, dtime)
if intensity >= crash_threshold then
--print("----------- crash", intensity)
entity.object:punch(entity.object, 1.0, {
full_punch_interval = 1.0,
damage_groups = {fleshy = intensity}
@ -387,9 +387,8 @@ end
function mobs.fly(entity, dtime, speed, shoots, arrow, moving_anim, stand_anim)
local ctrl = entity.driver:get_player_control()
local velo = entity.object:getvelocity()
local velo = entity.object:get_velocity()
local dir = entity.driver:get_look_dir()
-- local yaw = entity.driver:get_look_yaw()
local yaw = entity.driver:get_look_horizontal() + 1.57 -- offset fix between old and new commands
local rot_steer, rot_view = math.pi / 2, 0
@ -398,29 +397,29 @@ function mobs.fly(entity, dtime, speed, shoots, arrow, moving_anim, stand_anim)
end
if ctrl.up then
entity.object:setvelocity({
entity.object:set_velocity({
x = dir.x * speed,
y = dir.y * speed + 2,
z = dir.z * speed
})
elseif ctrl.down then
entity.object:setvelocity({
entity.object:set_velocity({
x = -dir.x * speed,
y = dir.y * speed + 2,
z = -dir.z * speed
})
elseif not ctrl.down or ctrl.up or ctrl.jump then
entity.object:setvelocity({x = 0, y = -2, z = 0})
entity.object:set_velocity({x = 0, y = -2, z = 0})
end
entity.object:setyaw(yaw + math.pi + math.pi / 2 - entity.rotate)
entity.object:set_yaw(yaw + math.pi + math.pi / 2 - entity.rotate)
-- firing arrows
if ctrl.LMB and ctrl.sneak and shoots then
local pos = entity.object:getpos()
local pos = entity.object:get_pos()
local obj = minetest.add_entity({
x = pos.x + 0 + dir.x * 2.5,
y = pos.y + 1.5 + dir.y,
@ -431,10 +430,9 @@ function mobs.fly(entity, dtime, speed, shoots, arrow, moving_anim, stand_anim)
ent.switch = 1 -- for mob specific arrows
ent.owner_id = tostring(entity.object) -- so arrows dont hurt entity you are riding
local vec = {x = dir.x * 6, y = dir.y * 6, z = dir.z * 6}
-- local yaw = entity.driver:get_look_yaw()
local yaw = entity.driver:get_look_horizontal()
obj:setyaw(yaw + math.pi / 2)
obj:setvelocity(vec)
obj:set_yaw(yaw + math.pi / 2)
obj:set_velocity(vec)
else
obj:remove()
end

View File

@ -1,6 +1,7 @@
MOBS REDO for MINETEST
Mobs Redo: MineClone 2 Edition
Based on Mobs Redo from TenPlus1
Built from PilzAdam's original Simple Mobs with additional mobs by KrupnoPavel, Zeg9, ExeterDad and AspireMint.
@ -10,18 +11,18 @@ This mod contains the API only for adding your own mobs into the world, so pleas
https://forum.minetest.net/viewtopic.php?f=11&t=9917
Crafts:
Items:
- Nametag (paper, black dye, string) can be used right-click on a tamed mob to give them a name.
- Nets can be used to right-click tamed mobs to pick them up and place inside inventory as a spawn egg.
- Magic Lasso is similar to nets but with a better chance of picking up larger mobs.
- Shears are used to right-click sheep and return 1-3 wool.
- Protection Rune lets you protect tamed mobs from harm by other players
- Nametag (paper, black dye, string) can be used right-click on a tamed mob to give them a name.
Lucky Blocks: 9
Lucky Block items: 1
Changelog:
Changelog from original Mobs Redo mod:
- 1.41- Mob pathfinding has been updated thanks to Elkien3
- 1.40- Updated to use newer functions, requires Minetest 0.4.16+ to work.
- 1.39- Added 'on_breed', 'on_grown' and 'do_punch' custom functions per mob
- 1.38- Better entity checking, nametag setting and on_spawn function added to mob registry, tweaked light damage
- 1.37- Added support for Raymoo's CMI (common mob interface) mod: https://forum.minetest.net/viewtopic.php?f=9&t=15448
- 1.36- Death check added, if mob dies in fire/lava/with lava pick then drops are cooked
- 1.35- Added owner_loyal flag for owned mobs to attack player enemies, also fixed group_attack

View File

Before

Width:  |  Height:  |  Size: 895 B

After

Width:  |  Height:  |  Size: 895 B

View File

Before

Width:  |  Height:  |  Size: 211 B

After

Width:  |  Height:  |  Size: 211 B

View File

@ -1 +0,0 @@
mcl_core?

View File

@ -1 +0,0 @@
Decorative paintings which you can placed on walls.

View File

@ -1,151 +0,0 @@
-- TODO: Move all textures to mcl_paintings when finished
-- Intllib
local MP = minetest.get_modpath(minetest.get_current_modname())
local S, NS = dofile(MP .. "/intllib.lua")
minetest.register_craftitem("mcl_paintings:painting", {
description = S("Next-Gen Painting"),
_doc_items_longdesc = S("Paintings are decorations which can be placed on walls. THIS ITEM IS INCOMPLETE."),
wield_image = "gemalde_node.png",
inventory_image = "gemalde_node.png",
on_place = function(itemstack, placer, pointed_thing)
if pointed_thing.type ~= "node" then
return
end
local under = pointed_thing.under
local above = pointed_thing.above
-- Use pointed node's on_rightclick function first, if present
local node_under = minetest.get_node(under)
if placer and not placer:get_player_control().sneak then
if minetest.registered_nodes[node_under.name] and minetest.registered_nodes[node_under.name].on_rightclick then
return minetest.registered_nodes[node_under.name].on_rightclick(under, node_under, placer, itemstack) or itemstack
end
end
-- Can only be placed on side
if under.y ~= above.y then
return itemstack
end
-- Can only be placed on solid nodes
if minetest.get_item_group(node_under.name, "solid") == 0 then
return itemstack
end
-- Spawn painting and rotate
local painting = minetest.add_entity(above, "mcl_paintings:painting")
local yaw = minetest.dir_to_yaw(vector.direction(under, above))
painting:set_yaw(yaw)
if not minetest.settings:get_bool("creative_mode") then
itemstack:take_item()
end
return itemstack
end,
})
-- List of painting IDs, indexed by size.
-- Outer index: Width in node lengths
-- Inner index: Height in node lengths
local paintings = {
[1] = {
[1] = { 1, 2, 3, 4, 5, 6, 7 }, -- 1×1
[2] = { 8, 9, 10, 11, 12 }, -- 1×2
},
[2] = {
[1] = { 13, 14}, -- 2×1
[2] = { 15, 16, 17, 18, 19, 20 }, -- 2×2
},
[3] = {
[4] = { 25, 26 }, -- 3×4
},
[4] = {
[2] = { 21 }, -- 4×2
[4] = { 22, 23, 24 }, -- 4×4
},
}
-- Returns a random painting ID for the given size.
-- x: Width in node lenghts
-- y: Height in node lengths
local function select_painting(x, y)
if paintings[x] then
local pool = paintings[x][y]
if paintings[x][y] then
local p = math.random(1, #pool)
return p
end
end
return nil
end
-- Returns the texture table for the given painting ID
local get_textures = function(painting_id)
return {
"gemalde_bg.png",
"gemalde_bg.png",
"gemalde_bg.png",
"gemalde_bg.png",
"gemalde_"..tostring(painting_id)..".png",
"gemalde_bg.png"
}
end
-- Painting entitty.
-- Can be killed.
-- Breaks and drops as item if punched.
--
minetest.register_entity("mcl_paintings:painting", {
physical = false,
collide_with_objects = true,
hp_max = 1,
-- TODO: Fix visual
visual = "cube",
visual_size = { x=1, y=1 },
textures = get_textures(1),
_painting = nil, -- Holds the current painting ID. Initially nil for random painting
get_staticdata = function(self)
local out = { _painting = self._painting }
return minetest.serialize(out)
end,
on_activate = function(self, staticdata)
if staticdata and staticdata ~= "" then
local inp = minetest.deserialize(staticdata)
self._painting = inp._painting
end
-- Initial spawn. Select random painting
if not self._painting then
self._painting = select_painting(1, 1)
end
self.object:set_properties({textures = get_textures(self._painting)})
end,
on_punch = function(self, puncher)
if not puncher or not puncher:is_player() or self._removed then
return
end
-- Drop painting as item on ground
if not minetest.settings:get_bool("creative_mode") then
minetest.add_item(self.object:getpos(), "mcl_paintings:painting")
end
self._removed = true
self.object:remove()
end
})
--[[
-- TODO: Add crafting when this mod works better
if minetest.get_modpath("mcl_core") then
minetest.register_craft({
output = "mcl_paintings:painting",
recipe = {
{"mcl_core:stick", "mcl_core:stick", "mcl_core:stick"},
{"mcl_core:stick", "group:wool", "mcl_core:stick"},
{"mcl_core:stick", "mcl_core:stick", "mcl_core:stick"},
}
})
end
]]

View File

@ -1 +0,0 @@
name = mcl_paintings

View File

@ -1,462 +0,0 @@
MOB API (13th July 2017)
The mob api is a function that can be called on by other mods to add new animals or monsters into minetest.
minetest.conf settings*
'enable_damage' if true monsters will attack players (default is true)
'only_peaceful_mobs' if true only animals will spawn in game (default is false)
'mobs_disable_blood' if false blood effects appear when mob is hit (default is false)
'mobs_spawn_protected' if set to false then mobs will not spawn in protected areas (default is true)
'remove_far_mobs' if true then mobs that are outside players visual range will be removed (default is false)
'mobname' can change specific mob chance rate (0 to disable) and spawn number e.g. mobs_animal:cow = 1000,5
'mob_difficulty' sets difficulty level (health and hit damage multiplied by this number), defaults to 1.0.
'mob_show_health' if false then punching mob will not show health status (true by default)
mobs:register_mob(name, definition)
This functions registers a new mob as a Minetest entity.
'name' is the name of the mob (e.g. "mobs:dirt_monster")
definition is a table with the following fields
'type' the type of the mob ("monster", "animal" or "npc") where monsters attack players and npc's, animals and npc's tend to wander around and can attack when hit 1st.
'passive' will mob defend itself, set to false to attack
'docile_by_day' when true, mob will not attack during daylight hours unless provoked
'attacks_monsters' usually for npc's to attack monsters in area
'group_attack' true to defend same kind of mobs from attack in area
'owner_loyal' when true owned mobs will attack any monsters you punch
'attack_animals' true for monster to attack animals as well as player and npc's
'specific_attack' has a table of entity names that monsters can attack {"player", "mobs_animal:chicken"}
'hp_min' minimum health
'hp_max' maximum health (mob health is randomly selected between both)
'physical' same is in minetest.register_entity()
'collisionbox' same is in minetest.register_entity()
'visual' same is in minetest.register_entity()
'visual_size' same is in minetest.register_entity()
'textures' same is in minetest.register_entity()
although you can add multiple lines for random textures {{"texture1.png"},{"texture2.png"}},
'gotten_texture' alt. texture for when self.gotten value is set to true (used for shearing sheep)
'child_texture' texture of mod for when self.child is set to true
'mesh' same is in minetest.register_entity()
'gotten_mesh' alternative mesh for when self.gotten is true (used for sheep)
'makes_footstep_sound' same is in minetest.register_entity()
'follow' item when held will cause mob to follow player, can be single string "default:apple" or table {"default:apple", "default:diamond"}. These are also items that are used to feed and tame mob.
'view_range' the range in which the mob will follow or attack player
'walk_chance' chance of mob walking around (0 to 100), set to 0 for jumping mob only
'walk_velocity' the velocity when the monster is walking around
'run_velocity' the velocity when the monster is attacking a player
'runaway' when true mob will turn and run away when punched
'stepheight' minimum node height mob can walk onto without jumping (default: 0.6)
'jump' can mob jump, true or false
'jump_height' height mob can jump, default is 6 (0 to disable jump)
'fly' can mob fly, true or false (used for swimming mobs also)
'fly_in' node name that mob flys inside, e.g "air", "default:water_source" for fish
'damage' the damage mobs inflict per melee attack.
'recovery_time' how much time from when mob is hit to recovery (default: 0.5 seconds)
'knock_back' strength of knock-back when mob hit (default: 3)
'immune_to' table holding special tool/item names and damage the incur e.g.
{"default:sword_wood", 0}, {"default:gold_lump", -10} immune to sword, gold lump heals
'blood_amount' number of droplets that appear when hit
'blood_texture' texture of blood droplets (default: "mobs_blood.png")
'drops' is list of tables with the following fields:
'name' itemname e.g. default:stone
'chance' the inverted chance (same as in abm) to get the item
'min' the minimum number of items
'max' the maximum number of items
'armor' this integer holds armor strength with 100 being normal, with lower numbers hardening the armor and higher numbers making it weaker (weird I know but compatible with simple mobs)
'drawtype' "front" or "side" (DEPRECATED, replaced with below)
'rotate' set mob rotation, 0=front, 90=side, 180=back, 270=other side
'water_damage' the damage per second if the mob is in water
'lava_damage' the damage per second if the mob is in lava
'light_damage' the damage per second if the mob is in light
'suffocation' health value mob loses when inside a solid node
'fall_damage' will mob be hurt when falling from height
'fall_speed' maximum falling velocity of mob (default is -10 and must be below -2)
'fear_height' when mob walks near a drop then anything over this value makes it stop and turn back (default is 0 to disable)
'on_die' a function that is called when the mob is killed the parameters are (self, pos)
'floats' 1 to float in water, 0 to sink
'on_rightclick' its same as in minetest.register_entity()
'pathfinding' set to 1 for mobs to use pathfinder feature to locate player, set to 2 so they can build/break also (only works with dogfight attack)
'attack_type' the attack type of a monster
'dogfight' follows player in range and attacks when in reach
'shoot' shoots defined arrows when player is within range
'explode' follows player in range and will flash and explode when in reach
'dogshoot' shoots arrows when in range and one on one attack when in reach
'dogshoot_switch' allows switching between shoot and dogfight modes inside dogshoot using timer (1 = shoot, 2 = dogfight)
'dogshoot_count_max' number of seconds before switching to dogfight mode.
'dogshoot_count2_max' number of seconds before switching back to shoot mode.
'custom_attack' when set this function is called instead of the normal mob melee attack, parameters are (self, to_attack)
'double_melee_attack' if false then api will choose randomly between 'punch' and 'punch2' attack animations
'on_blast' is called when an explosion happens near mob when using TNT functions, parameters are (object, damage) and returns (do_damage, do_knockback, drops)
'explosion_radius' radius of explosion attack (defaults to 1)
'arrow' if the attack_type is "shoot" or "dogshoot" then the entity name of a pre-defined arrow is required, see below for arrow definition.
'shoot_interval' the minimum shoot interval
'shoot_offset' +/- value to position arrow/fireball when fired
'reach' how far a reach this mob has, default is 3
'sounds' this is a table with sounds of the mob
'random' random sounds during gameplay
'war_cry' sound when starting to attack player
'attack' sound when attacking player
'shoot_attack' sound when attacking player by shooting arrow/entity
'damage' sound when being hit
'death' sound when killed
'jump' sound when jumping
'explode' sound when exploding
'distance' maximum distance sounds are heard from (default is 10)
Mobs can look for specific nodes as they walk and replace them to mimic eating.
'replace_what' group if items to replace e.g. {"farming:wheat_8", "farming:carrot_8"}
'replace_with' replace with what e.g. "air" or in chickens case "mobs:egg"
'replace_rate' how random should the replace rate be (typically 10)
'replace_offset' +/- value to check specific node to replace
'on_replace(self, pos, oldnode, newnode)' gets called when mob is about to replace a node
self: ObjectRef of mob
pos: Position of node to replace
oldnode: Current node
newnode: What the node will become after replacing
If false is returned, the mob will not replace the node.
By default, replacing sets self.gotten to true and resets the object properties.
The 'replace_what' has been updated to use tables for what, with and y_offset e.g.
replace_what = { {"group:grass", "air", 0}, {"default:dirt_with_grass", "default:dirt", -1} }
Mob animation comes in three parts, start_frame, end_frame and frame_speed which
can be added to the mob definition under pre-defined mob animation names like:
'animation' a table with the animation ranges and speed of the model
'stand_start', 'stand_end', 'stand_speed' when mob stands still
'walk_start', 'walk_end', 'walk_speed' when mob walks
'run_start', 'run_end', 'run_speed' when mob runs
'fly_start', 'fly_end', 'fly_speed' when mob flies
'punch_start', 'punch_end', 'punch_speed' when mob attacks
'punch2_start', 'punch2_end', 'punch2_speed' when mob attacks (alternative)
'die_start', 'die_end', 'die_speed' when mob dies
'*_loop' bool value to determine if any set animation loops e.g (die_loop = false)
defaults to true if not set
also 'speed_normal' for compatibility with older mobs for animation speed (deprecated)
The mob api also has some preset variables and functions that it will remember for each mob
'self.health' contains current health of mob (cannot exceed self.hp_max)
'self.texture_list' contains list of all mob textures
'self.child_texture' contains mob child texture when growing up
'self.base_texture' contains current skin texture which was randomly selected from textures list
'self.gotten' this is used for obtaining milk from cow and wool from sheep
'self.horny' when animal fed enough it is set to true and animal can breed with same animal
'self.hornytimer' background timer that controls breeding functions and mob childhood timings
'self.child' used for when breeding animals have child, will use child_texture and be half size
'self.owner' string used to set owner of npc mobs, typically used for dogs
'self.order' set to "follow" or "stand" so that npc will follow owner or stand it's ground
'self.nametag' contains the name of the mob which it can show above
'on_die' a function that is called when mob is killed
'do_custom' a custom function that is called every tick while mob is active and which has access to all of the self.* variables e.g. (self.health for health or self.standing_in for node status), return with 'false' to skip remainder of mob API.
mobs:register_spawn(name, nodes, max_light, min_light, chance, active_object_count, max_height, day_toggle)
mobs:spawn_specfic(name, nodes, neighbors, min_light, max_light, interval, chance, active_object_count, min_height, max_height, day_toggle, on_spawn)
These functions register a spawn algorithm for the mob. Without this function the call the mobs won't spawn.
'name' is the name of the animal/monster
'nodes' is a list of nodenames on that the animal/monster can spawn on top of
'neighbors' is a list of nodenames on that the animal/monster will spawn beside (default is {"air"} for mobs:register_spawn)
'max_light' is the maximum of light
'min_light' is the minimum of light
'interval' is same as in register_abm() (default is 30 for mobs:register_spawn)
'chance' is same as in register_abm()
'active_object_count' mob is only spawned if active_object_count_wider of ABM is <= this
'min_height' is the minimum height the mob can spawn
'max_height' is the maximum height the mob can spawn
'day_toggle' true for day spawning, false for night or nil for anytime
'on_spawn' is a custom function which runs after mob has spawned and gives self and pos values.
... also a simpler way to handle mob spawns has been added with the mobs:spawn(def) command which uses above names to make settings clearer:
mobs:spawn({name = "mobs_monster:tree_monster",
nodes = {"group:leaves"},
max_light = 7,
})
Players can override the spawn chance for each mob registered by adding a line to their minetest.conf file with a new value, the lower the value the more each mob will spawn e.g.
mobs_animal:sheep_chance 11000 or mobs_monster:sand_monster_chance 100
For each mob that spawns with this function is a field in mobs.spawning_mobs. It tells if the mob should spawn or not. Default is true. So other mods can only use the API of this mod by disabling the spawning of the default mobs in this mod.
mobs:register_arrow(name, definition)
This function registers a arrow for mobs with the attack type shoot.
'name' is the name of the arrow
-definition' is a table with the following values:
'visual' same is in minetest.register_entity()
'visual_size' same is in minetest.register_entity()
'textures' same is in minetest.register_entity()
'velocity' the velocity of the arrow
'drop' if set to true any arrows hitting a node will drop as item
'hit_player' a function that is called when the arrow hits a player; this function should hurt the player
the parameters are (self, player)
'hit_mob' a function that is called when the arrow hits a mob; this function should hurt the mob
the parameters are (self, player)
'hit_node' a function that is called when the arrow hits a node
the parameters are (self, pos, node)
'tail' when set to 1 adds a trail or tail to mob arrows
'tail_texture' texture string used for above effect
'tail_size' has size for above texture (defaults to between 5 and 10)
'expire' contains float value for how long tail appears for (defaults to 0.25)
'glow' has value for how brightly tail glows 1 to 10 (default is 0, no glow)
'rotate' integer value in degrees to rotate arrow
'on_step' is a custom function when arrow is active, nil for default.
mobs:register_egg(name, description, background, addegg, no_creative)
This function registers a spawn egg which can be used by admin to properly spawn in a mob.
'name' this is the name of your new mob to spawn e.g. "mob:sheep"
'description' the name of the new egg you are creating e.g. "Spawn Sheep"
'background' the texture displayed for the egg in inventory
'addegg' would you like an egg image in front of your texture (1=yes, 0=no)
'no_creative' when set to true this stops spawn egg appearing in creative mode for destructive mobs like Dungeon Masters
mobs:explosion(pos, radius) -- DEPRECATED!!! use mobs:boom() instead
mobs:boom(self, pos, radius)
This function generates an explosion which removes nodes in a specific radius and damages any entity caught inside the blast radius. Protection will limit node destruction but not entity damage.
'self' mob entity
'pos' centre position of explosion
'radius' radius of explosion (typically set to 3)
mobs:capture_mob(self, clicker, chance_hand, chance_net, chance_lasso, force_take, replacewith)
This function is generally called inside the on_rightclick section of the mob api code, it provides a chance of capturing the mob by hand, using the net or magic lasso items, and can also have the player take the mob by force if tamed and replace with another item entirely.
'self' mob information
'clicker' player information
'chance_hand' chance of capturing mob by hand (1 to 100) 0 to disable
'chance_net' chance of capturing mob using net (1 to 100) 0 to disable
'chance_lasso' chance of capturing mob using magic lasso (1 to 100) 0 to disable
'force_take' take mob by force, even if tamed (true or false)
'replacewith' once captured replace mob with this item instead (overrides new mob eggs with saved information)
mobs:feed_tame(self, clicker, feed_count, breed, tame)
This function allows the mob to be fed the item inside self.follow be it apple, wheat or whatever a set number of times and be tamed or bred as a result. Will return true when mob is fed with item it likes.
'self' mob information
'clicker' player information
'feed_count' number of times mob must be fed to tame or breed
'breed' true or false stating if mob can be bred and a child created afterwards
'tame' true or false stating if mob can be tamed so player can pick them up
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
Mobs can now be ridden by players and the following shows the functions and usage:
mobs:attach(self, player)
This function attaches a player to the mob so it can be ridden.
'self' mob information
'player' player information
mobs:detach(player, offset)
This function will detach the player currently riding a mob to an offset position.
'player' player information
'offset' position table containing offset values
mobs:drive(self, move_animation, stand_animation, can_fly, dtime)
This function allows an attached player to move the mob around and animate it at same time.
'self' mob information
'move_animation' string containing movement animation e.g. "walk"
'stand_animation' string containing standing animation e.g. "stand"
'can_fly' if true then jump and sneak controls will allow mob to fly up and down
'dtime' tick time used inside drive function
mobs:fly(self, dtime, speed, can_shoot, arrow_entity, move_animation, stand_animation)
This function allows an attached player to fly the mob around using directional controls.
'self' mob information
'dtime' tick time used inside fly function
'speed' speed of flight
'can_shoot' true if mob can fire arrow (sneak and left mouse button fires)
'arrow_entity' name of arrow entity used for firing
'move_animation' string containing name of pre-defined animation e.g. "walk" or "fly" etc.
'stand_animation' string containing name of pre-defined animation e.g. "stand" or "blink" etc.
Note: animation names above are from the pre-defined animation lists inside mob registry without extensions.
mobs:set_animation(self, name)
This function sets the current animation for mob, defaulting to "stand" if not found.
'self' mob information
'name' name of animation
Certain variables need to be set before using the above functions:
'self.v2' toggle switch used to define below values for the first time
'self.max_speed_forward' max speed mob can move forward
'self.max_speed_reverse' max speed mob can move backwards
'self.accel' acceleration speed
'self.terrain_type' integer containing terrain mob can walk on (1 = water, 2 or 3 = land)
'self.driver_attach_at' position offset for attaching player to mob
'self.driver_eye_offset' position offset for attached player view
'self.driver_scale' sets driver scale for mobs larger than {x=1, y=1}
Here is an example mob to show how the above functions work:
-- rideable horse
mobs:register_mob("mob_horse:horse", {
type = "animal",
visual = "mesh",
visual_size = {x = 1.20, y = 1.20},
mesh = "mobs_horse.x",
collisionbox = {-0.4, -0.01, -0.4, 0.4, 1.25, 0.4},
animation = {
speed_normal = 15,
speed_run = 30,
stand_start = 25,
stand_end = 75,
walk_start = 75,
walk_end = 100,
run_start = 75,
run_end = 100,
},
textures = {
{"mobs_horse.png"},
{"mobs_horsepeg.png"},
{"mobs_horseara.png"}
},
fear_height = 3,
runaway = true,
fly = false,
walk_chance = 60,
view_range = 5,
follow = {"farming:wheat"},
passive = true,
hp_min = 12,
hp_max = 16,
armor = 200,
lava_damage = 5,
fall_damage = 5,
water_damage = 1,
makes_footstep_sound = true,
drops = {
{name = "mobs:meat_raw", chance = 1, min = 2, max = 3}
},
do_custom = function(self, dtime)
-- set needed values if not already present
if not self.v2 then
self.v2 = 0
self.max_speed_forward = 6
self.max_speed_reverse = 2
self.accel = 6
self.terrain_type = 3
self.driver_attach_at = {x = 0, y = 20, z = -2}
self.driver_eye_offset = {x = 0, y = 3, z = 0}
self.driver_scale = {x = 1, y = 1}
end
-- if driver present allow control of horse
if self.driver then
mobs.drive(self, "walk", "stand", false, dtime)
return false -- skip rest of mob functions
end
return true
end,
on_die = function(self, pos)
-- drop saddle when horse is killed while riding
-- also detach from horse properly
if self.driver then
minetest.add_item(pos, "mobs:saddle")
mobs.detach(self.driver, {x = 1, y = 0, z = 1})
end
end,
on_rightclick = function(self, clicker)
-- make sure player is clicking
if not clicker or not clicker:is_player() then
return
end
-- feed, tame or heal horse
if mobs:feed_tame(self, clicker, 10, true, true) then
return
end
-- make sure tamed horse is being clicked by owner only
if self.tamed and self.owner == clicker:get_player_name() then
local inv = clicker:get_inventory()
-- detatch player already riding horse
if self.driver and clicker == self.driver then
mobs.detach(clicker, {x = 1, y = 0, z = 1})
-- add saddle back to inventory
if inv:room_for_item("main", "mobs:saddle") then
inv:add_item("main", "mobs:saddle")
else
minetest.add_item(clicker.getpos(), "mobs:saddle")
end
-- attach player to horse
elseif not self.driver
and clicker:get_wielded_item():get_name() == "mobs:saddle" then
self.object:set_properties({stepheight = 1.1})
mobs.attach(self, clicker)
-- take saddle from inventory
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
})

View File

@ -1,14 +0,0 @@
local S = mobs.intllib
-- name tag
minetest.register_craftitem("mobs:nametag", {
description = S("Name Tag"),
_doc_items_longdesc = S("A name tag is an item to name most animals and monsters."),
_doc_items_usagehelp = S("Rightclick an animal or monster while holding the name tag, then enter a name."),
inventory_image = "mobs_nametag.png",
wield_image = "mobs_nametag.png",
stack_max = 64,
groups = { tool=1 },
})

View File

@ -1 +0,0 @@
Adds a mob api for mods to add animals or monsters etc.

View File

@ -1,19 +0,0 @@
local path = minetest.get_modpath("mobs")
-- Mob API
dofile(path .. "/api.lua")
-- Rideable Mobs
dofile(path .. "/mount.lua")
-- Mob Items
dofile(path .. "/crafts.lua")
-- Mob Spawner
-- MCL2 has its own spawners in mcl_mobspawners
-- Lucky Blocks
dofile(path .. "/lucky_block.lua")
minetest.log("action", "[MOD] Mobs Redo loaded")

Some files were not shown because too many files have changed in this diff Show More