Compare commits

...

1579 Commits

Author SHA1 Message Date
Wuzzy eea07f0ce7 Fix incomplete dry grass replacement LBM 2020-04-27 14:05:09 +02:00
Wuzzy c81a18ac1a Refactor mcl_void_damage 2020-04-22 01:38:41 +02:00
Wuzzy 0929ce4f20 Remove fire below air 2020-04-22 01:31:30 +02:00
Wuzzy e268370452 Add fire metadata to many nodes (unused for now) 2020-04-18 23:24:42 +02:00
Wuzzy 6a77a54034 Increase z_index values to match new convention 2020-04-17 21:27:45 +02:00
Wuzzy 3803dba233 Fix invalid portal node names in spawn code 2020-04-16 12:39:18 +02:00
Wuzzy 24ab3e8f84 Fix LBM typos 2020-04-16 12:22:50 +02:00
Wuzzy 7c56cf1a64 Update README.md 2020-04-15 16:13:27 +02:00
Wuzzy 1db34821a0 Mobs: Fix crash when mob dies to fall or light dmg 2020-04-12 23:11:18 +02:00
Wuzzy 081366855d Tweak appearance of snowflakes 2020-04-11 04:06:37 +02:00
Wuzzy ab56d592ae Add snow particles on snowball impact 2020-04-11 04:06:24 +02:00
Wuzzy a2785041dd Remove mod startup debug messages 2020-04-11 02:56:46 +02:00
Wuzzy 47cda09073 Implement per-class mob cap 2020-04-11 02:46:03 +02:00
Wuzzy 8e06e4e8b2 Reduce mob_specific mob caps 2020-04-11 01:35:44 +02:00
Wuzzy a33bd015f5 Reduce max_object_per_block default to 64 2020-04-11 01:14:14 +02:00
Wuzzy 0c271a2af9 Randomize initial moon phase 2020-04-08 22:07:05 +02:00
Wuzzy 32ae6b3140 Add moon phases 2020-04-08 21:32:37 +02:00
Wuzzy 868fa04818 Version 0.63.0 2020-04-08 17:23:59 +02:00
Wuzzy 88927c8a6b Remove furnace craftguide btn cuz MT weirdness 2020-04-08 17:23:12 +02:00
Wuzzy 5fe8717fca Fix another crash in Mobs mod 2020-04-08 15:03:03 +02:00
Wuzzy 3bd1cded03 Furnace: Fix output slot image being misplaced 2020-04-08 13:29:27 +02:00
Wuzzy d9cff3ef82 Make bark nodes usable as fuel 2020-04-08 13:15:22 +02:00
Wuzzy 20eba63b94 Fix bark stairs+slabs being not flammable 2020-04-08 13:08:33 +02:00
Wuzzy 8664a5c484 Make mobs vulnerable to TNT explosions 2020-04-08 12:41:52 +02:00
Wuzzy 71c9d20fff Use larger wield scale for tools 2020-04-08 04:07:16 +02:00
Wuzzy a1ea41e760 Lava: Don't ignite 2 blocks above if 1 layer above is blocked 2020-04-08 03:17:34 +02:00
Wuzzy 21d5b93baa Remove explicit stepheight from most mobs 2020-04-08 02:35:20 +02:00
Wuzzy 31b367eb83 Fix horse-related crash 2020-04-08 02:29:12 +02:00
Wuzzy f27615d77e Add z_index to HUD elements 2020-04-07 13:03:10 +02:00
Wuzzy 17f611567c Spawn rain and snow particles higher 2020-04-07 02:41:40 +02:00
Wuzzy c9cc3651df Fix bad sky color definitions 2020-04-07 01:51:53 +02:00
Wuzzy c5e4ec5e27 Use ephemeral sounds 2020-04-07 00:55:45 +02:00
Wuzzy b2c75acd68 Use new set_sky API 2020-04-07 00:39:19 +02:00
Wuzzy ace1c6dfec Version 0.62.0 2020-04-05 21:10:36 +02:00
Wuzzy 28b1d5e8e9 Mobs: Add more nil checks 2020-04-05 21:09:27 +02:00
Wuzzy c9b464f329 Add findbiome mod 2020-04-03 12:51:01 +02:00
Wuzzy b2c8d7cff0 Update biomeinfo to 1.0.3 2020-04-03 12:50:48 +02:00
Wuzzy d8cb7a7164 Add achievement chat command 2020-03-30 21:11:45 +02:00
Wuzzy e81b5ef58a Another nil check in mcl_mobs 2020-03-30 16:52:36 +02:00
Wuzzy 600eadedea Add nil checks when mob is damaged 2020-03-29 23:24:04 +02:00
Wuzzy 02d7f20cc9 Version 0.61.0 2020-03-29 17:13:52 +02:00
Wuzzy 6ce3278dd4 Fix missing variable check in hcl_hoppers 2020-03-29 16:05:30 +02:00
Wuzzy 97ab2e7b38 Update wieldview mod (wieldview_transform group) 2020-03-29 14:52:12 +02:00
Wuzzy da1c3f635c Revert "Add dummy inventory images for backwards-compat"
This reverts commit 73d93ae969.
2020-03-29 14:38:39 +02:00
Wuzzy e9f259881f Add LBMs to update to new node formspecs of 0.60.0 2020-03-29 14:35:01 +02:00
Wuzzy ed63374480 Add missing slot images for dispenser+dropper 2020-03-29 14:15:00 +02:00
Wuzzy 73d93ae969 Add dummy inventory images for backwards-compat
In 0.60.0, the inventory rendering of nodes was changed, so images were removed. This caused missing image errors with *existing* node formspecs, however, so empty dummy images are added back.
2020-03-29 14:05:59 +02:00
Wuzzy a98dafb171 Nodeblock: Change snare sound 2020-03-28 07:54:14 +01:00
Wuzzy baa02e19e1 Add many new sounds for noteblock 2020-03-28 07:20:16 +01:00
Wuzzy 2237cf66cb Version 0.60.0 2020-03-24 20:33:33 +01:00
David McMackins II 882937a1ab Fix bug where adding items to a double chest with shift-click would not complete stacks in the right chest 2020-03-24 20:20:32 +01:00
Wuzzy b56ead7a23 Don't allow to set fire on fire 2020-03-24 19:53:08 +01:00
Wuzzy f5268ea598 Fix walls connecting to too many nodeboxes 2020-03-24 19:31:52 +01:00
Wuzzy 24832c534f Fix crash in horse code 2020-03-24 19:11:25 +01:00
Wuzzy d5111dfb66 Simplify workbench arrow img 2020-03-24 19:08:53 +01:00
Wuzzy 7243a25fe6 Generate item slot images on the fly 2020-03-24 18:48:14 +01:00
Wuzzy 3cf32c38c5 Villager: Make offered/wanted items unclickable 2020-03-19 12:32:30 +01:00
Wuzzy fb9d0f7a7c Mobs: Drop cooked item if died in fire 2020-03-15 09:07:38 +01:00
wuniversales 3772dd51cc Update Spanish translation 2020-03-15 08:32:00 +01:00
Wuzzy 2569eae5d8 Don't make sprint particles in liquids 2020-03-15 08:23:40 +01:00
Wuzzy 73dc0a64b5 Update bed formspec 2020-03-14 21:38:59 +01:00
Wuzzy 5a03ce6dac Remove pointless content ID loading in mcl_hoppers 2020-03-14 07:17:46 +01:00
Wuzzy f0ba364120 Fix crash in mcl_maps 2020-03-12 06:45:23 +01:00
Wuzzy 28b2085492 Bump golden apple hunger points to 20 2020-03-12 02:35:02 +01:00
Wuzzy 6b529e1204 Colorize some item tooltips 2020-03-12 02:29:30 +01:00
Wuzzy 7ee2340f5c Show chat message if using minimap incorrectly 2020-03-12 01:57:14 +01:00
Wuzzy 312b5aeb73 Make carpets flammable 2020-03-12 01:45:24 +01:00
Wuzzy feba60cad8 Translate all extended tooltips to German 2020-03-12 01:35:11 +01:00
Wuzzy 03a5519d01 Partial German translation of tooltip extensions 2020-03-11 01:44:23 +01:00
Wuzzy 098bc3c7c7 Fix an inconsistent German translation 2020-03-11 00:57:40 +01:00
Wuzzy 9ef313d0a1 Fix bas variable name in commandblock mod 2020-03-11 00:54:06 +01:00
Wuzzy 8adf6298a7 Update doc mod again 2020-03-10 18:29:28 +01:00
Wuzzy 070e928bf0 Merge branch 'tt' 2020-03-10 18:21:32 +01:00
Wuzzy 5053dde5f0 Update doc mod 2020-03-10 18:18:27 +01:00
Wuzzy 0fbb252af6 Update doc_items 2020-03-10 18:01:24 +01:00
Wuzzy 242b880c4f Make creative arrows white 2020-03-10 10:22:38 +01:00
Wuzzy 9422989ac6 Redraw Creative trash slot 2020-03-10 07:36:42 +01:00
Wuzzy a845f0313d Tweak craftguide icons to match colorsheme 2020-03-10 07:01:41 +01:00
Wuzzy 6761ebdae5 Fix shading of lower tabs in Creative inv. 2020-03-10 06:38:53 +01:00
Wuzzy 60effa71b4 Inventory: Translate page counter 2020-03-10 06:13:52 +01:00
Wuzzy 1e5f3ee610 Creative: Replace fake slider with page buttons 2020-03-10 06:11:49 +01:00
Wuzzy c6d6a2ce26 Craftguide: Don't display burntime for groups 2020-03-10 05:44:52 +01:00
Wuzzy 81fd3fad40 Fix hopper inventory screen 2020-03-10 05:44:37 +01:00
Wuzzy f85a6b5042 Make some labels dark-gray 2020-03-10 05:34:54 +01:00
Wuzzy 96b30b918c Tweak commandblock button position 2020-03-10 05:17:53 +01:00
Wuzzy 1ea2b09ecb Commandblock: Fix help btn not working if no priv 2020-03-10 05:15:32 +01:00
Wuzzy 3bcb868f8b Remove unused awards images 2020-03-10 05:10:48 +01:00
Wuzzy 03ad3cca29 Major default formspec style update
- Uses formspec_prepend to set e.g. button style
- Make all formspecs use the MCL2 style consistently
2020-03-10 05:01:49 +01:00
Wuzzy 0e867e5247 Fix creative tab styling for future MT 5.2.0 2020-03-10 00:15:54 +01:00
Wuzzy 4deb6eec20 Extra tooltips for mcl_chests 2020-03-08 08:50:21 +01:00
Wuzzy 2554c6d597 Display weapon damage in tooltip 2020-03-08 03:46:24 +01:00
Wuzzy cbda2ef326 Add _tt_help to many more items 2020-03-08 03:30:40 +01:00
Wuzzy 714634f4a0 Fix bug reporting link 2020-03-02 16:43:05 +01:00
Wuzzy d3d227d46b Version 0.59.2 2020-02-25 16:10:18 +01:00
Wuzzy 4cb5b26fa9 Fix crash in mcl_mobs 2020-02-25 16:09:26 +01:00
Wuzzy efb97d59a5 Version 0.59.1 2020-02-23 20:39:13 +01:00
Wuzzy 98e87fd5db mcl_attached: Check if dir is nil 2020-02-23 20:37:42 +01:00
Wuzzy a375548992 Heal horses differently depending on food 2020-02-23 17:13:52 +01:00
wuniversales f93d3a897e Update Spanish translation 2020-02-23 16:26:21 +01:00
Wuzzy fbd5374085 Don't drip water+lava thru glass 2020-02-23 16:17:04 +01:00
Wuzzy 4466383122 Version 0.59.0 2020-02-22 20:53:21 +01:00
Wuzzy 401382106f Fix crash when riding player leaves 2020-02-22 20:47:25 +01:00
Wuzzy 4ece91fde4 Make squids larger 2020-02-19 22:28:18 +01:00
Wuzzy 4926f8d443 Mobs: Respect fall_damage_add_percent 2020-02-19 17:24:35 +01:00
Wuzzy 6096b8dd9a Fix translation placeholder in mcl_hunger 2020-02-19 17:07:42 +01:00
Wuzzy 589b750d0a Add tool wear for punching mobs 2020-02-19 16:47:57 +01:00
Wuzzy e4fb7ae533 Add punch_attack_uses to weapons 2020-02-19 15:53:51 +01:00
Wuzzy ba74546d48 Add extended tooltips 2020-02-19 04:54:17 +01:00
Wuzzy 71cee9920a Heads: Add back armor def fields 2020-02-19 03:02:45 +01:00
Wuzzy 604e1c4d19 Link eating sound back to object again 2020-02-18 23:53:33 +01:00
Wuzzy 3118673116 Play sound for equipping horse armor or saddle 2020-02-18 23:49:35 +01:00
Wuzzy 565806558c Play armor equip sound when armor got dispensed 2020-02-18 22:33:58 +01:00
Wuzzy 6426e55746 Add on_secondary_use for heads and pumpkin 2020-02-18 22:17:52 +01:00
Wuzzy d88fa0c438 Can equip/swap armor with rightclick 2020-02-18 22:05:08 +01:00
Wuzzy 329452d5ce Don't show armor bar for 0 armor 2020-02-18 20:10:35 +01:00
Wuzzy 5729d70814 Add secondary rotation for heads 2020-02-18 20:04:15 +01:00
Wuzzy bfc5670f09 Can place heads at walls 2020-02-18 19:51:10 +01:00
Wuzzy 012dd0b86a Add wallmounted heads 2020-02-18 19:33:14 +01:00
Wuzzy 7ba3616c77 mcl_heads: Clean up whitespace 2020-02-18 18:13:45 +01:00
Wuzzy 460e7c0c67 3 mob heads reduce mob detection range 2020-02-18 18:12:51 +01:00
Wuzzy 364a4152ac Change fallback armor (un)equip sounds 2020-02-18 16:36:22 +01:00
Wuzzy 89afec17b1 Armor stand: Remove legacy entity 2020-02-18 16:13:37 +01:00
Wuzzy a52976a918 Rename 3d_armor_stand to mcl_armor_stand 2020-02-18 16:10:50 +01:00
Wuzzy ab4e46f97b Move armor mods 2020-02-18 15:48:21 +01:00
Wuzzy fb251db925 Rename mod: 3d_armor → mcl_armor 2020-02-18 15:44:54 +01:00
Wuzzy edab0be8f5 Play armor (un-)equip sounds on armor stand 2020-02-18 14:51:15 +01:00
Wuzzy ef077fed72 Add armor equip/unequip sounds 2020-02-18 07:33:08 +01:00
Wuzzy f700463c4f Increase FOV to 86.1 2020-02-17 21:49:23 +01:00
Wuzzy ae7615c557 Move armor factoid to nil group 2020-02-17 20:58:29 +01:00
Wuzzy 97d293f8b4 Add armor factoid 2020-02-17 20:53:31 +01:00
Wuzzy 33acd2327f Remove unused and dead code in 3d_armor mod 2020-02-17 20:41:58 +01:00
Wuzzy bef99ac211 Rename mod: hbarmor → mcl_hbarmor 2020-02-17 20:24:26 +01:00
Wuzzy e3b68c4364 Display armor points properly 2020-02-17 20:19:07 +01:00
Wuzzy 2e6610da42 Overhaul armor protection formula 2020-02-17 19:55:02 +01:00
Wuzzy 988ca6ffe7 Interpret many damage sources as punches 2020-02-17 18:37:23 +01:00
Wuzzy dcc14d1f3f Implement MC's armor durability 2020-02-17 18:19:36 +01:00
Wuzzy 023f70ee1c Remove more uses of 3d_armor_trans.png 2020-02-17 17:46:25 +01:00
Wuzzy 81ca7469d7 TNT explosions deal punch damage 2020-02-17 17:44:38 +01:00
Wuzzy 004013c3a4 Remove 3d_armor_trans.png 2020-02-17 17:31:39 +01:00
Wuzzy 113a49da41 Armor: remove "wear" value from registrations 2020-02-17 17:26:06 +01:00
Wuzzy 9499076ac8 Don't show message when armor got destroyed 2020-02-17 17:11:04 +01:00
Wuzzy 641921f4c7 Add tool stats in help 2020-02-17 16:19:17 +01:00
Wuzzy bcffcdf003 Version 0.58.1 2020-02-14 21:10:45 +01:00
Wuzzy e6133ac670 Fix TNT minecart igniting 2020-02-14 21:09:36 +01:00
Wuzzy 1ab41a494b Remove activator rail from README 2020-02-06 16:57:47 +01:00
Wuzzy c6a8cbdb59 Version 0.58.0 2020-02-05 12:46:27 +01:00
Wuzzy f4a06d6217 Remove TNT node after explode 2020-02-05 12:45:29 +01:00
Wuzzy bed0849bb0 Add setting: mcl_tnt_griefing 2020-02-05 03:11:32 +01:00
Wuzzy 2ef5f0232d Update minecart German translation 2020-02-05 03:11:07 +01:00
Wuzzy 377bf31c5d Fix crash when killing player with dispenser arrow 2020-02-05 02:40:07 +01:00
Wuzzy 3836f1b7e9 Update hudbars mod to 2.1.0 2020-02-04 22:06:31 +01:00
wuniversales 15481cb24d Add Spanish translation 2020-02-04 21:43:50 +01:00
Wuzzy 04c8a08cc4 Ignite tnt minecart by fire charge 2020-01-30 23:11:16 +01:00
Wuzzy 9f344b4307 Detach minecart driver if over activator rail 2020-01-30 22:45:29 +01:00
Wuzzy 1d2da1f01a TNT minecart and activator rail no longer WIP 2020-01-30 22:31:44 +01:00
Wuzzy 9dc9c12f29 Implement TNT minecart 2020-01-30 22:05:18 +01:00
Wuzzy 74b79d130b Add basic implementation of furnace minecart 2020-01-30 20:38:31 +01:00
Wuzzy d923f71c92 Teach mobs how to not walk into danger ... kinda 2020-01-30 18:04:50 +01:00
Wuzzy 61e148ac2e Fix mobs able to swim in plants 2020-01-30 17:05:39 +01:00
Wuzzy 834c8cbc3a Disable jump in cobweb 2020-01-30 16:36:28 +01:00
Wuzzy fcf46b3423 Remove legacy stuff in mcl_mobs 2020-01-30 16:17:29 +01:00
Wuzzy c234b273ad Introduce snowball_vulnerable armor group 2020-01-30 16:14:13 +01:00
Wuzzy be04de084b Mobs: Utilize pathfinder jumpheight properly 2020-01-30 01:36:08 +01:00
Wuzzy 8be35bae53 Make mcl_worlds dependency in mcl_mobs optional 2020-01-30 01:11:02 +01:00
Wuzzy bddb8f1136 Remove some outdated dependencies in mcl_mobs 2020-01-30 01:05:31 +01:00
Wuzzy d38e0a0b00 Remove unused jump_chance attribute from mobs 2020-01-30 00:03:53 +01:00
Wuzzy f7fb83891a Mobs: Replace name-based fence/wall check 2020-01-29 23:37:16 +01:00
Wuzzy 9326a76973 Fix mobs walking into water too often 2020-01-29 23:11:20 +01:00
Wuzzy fff1949804 Make arrows only deal damage with free lineofsight 2020-01-20 19:48:08 +01:00
Wuzzy 3788b66b47 Clean up some luacheck warnings in mcl_mobs 2020-01-20 16:08:59 +01:00
Wuzzy bc7b86b61a Fix incorrect liquid backface culling 2020-01-19 22:56:37 +01:00
Wuzzy 112574792d Version 0.57.1 2020-01-18 04:51:46 +01:00
Wuzzy 73e8ee8a68 Fix undeclared global warning in mcl_craftguide 2020-01-18 04:48:07 +01:00
Wuzzy 3dcd986863 Fix shulker box recolor craft erasing contents 2020-01-18 04:46:41 +01:00
Wuzzy 87ac0c952c Mobs: Reset texture mods on activation 2020-01-06 17:28:08 +01:00
Wuzzy e569885fab End portal frame: Bulk set nodes 2020-01-06 16:51:40 +01:00
Wuzzy 9b8d6c4cec Destroy end portal when surrounding bedrock goes 2020-01-06 16:49:22 +01:00
aldum 82f851e20d Add theoretical support for larger nether portals 2020-01-06 15:11:29 +01:00
Wuzzy 0ae2c5b25f Mention mob glitch workaround 2020-01-06 14:49:44 +01:00
Wuzzy 1210d8c9a7 Workaround for mobs glitching through walls
Thanks, MysticTempest!
2020-01-06 14:46:10 +01:00
Wuzzy 7a870d0ead Message when trying to spawn forbidden hostile mob 2020-01-06 13:46:43 +01:00
Wuzzy f2b7392a30 Use "minetest" instead of "core" table 2020-01-06 13:02:30 +01:00
Wuzzy 05152589fa Fix crash in awards mod 2020-01-06 11:24:28 +01:00
Wuzzy 01eb39b62f Remove awd and awpl commands 2020-01-06 11:20:14 +01:00
Wuzzy 1fc2ba6879 Craftguide: Show recipes hidden in creative inv. 2020-01-05 21:49:41 +01:00
Wuzzy 90298821a3 Remove mob aliases 2020-01-05 10:49:04 +01:00
Wuzzy 8c0bea7dad Implement drops of sea pickles 2019-12-27 15:32:09 +01:00
Wuzzy b77307b7ac Add sea pickles 2019-12-27 15:24:59 +01:00
Wuzzy f691b31423 Version 0.57.0 2019-12-27 01:15:07 +01:00
Wuzzy 5d8c068749 Translate mcl_ocean 2019-12-26 12:12:21 +01:00
Wuzzy 625730e040 Translate slippery help 2019-12-26 11:42:14 +01:00
Wuzzy d29c4bb795 Fix 2 undeclared global warnings in mapgen core 2019-12-22 20:22:19 +01:00
Wuzzy a03cc0604e End rods no longer fall 2019-12-22 18:08:45 +01:00
Wuzzy bbc5f2a0d9 Use sand and gravel for ocean floors 2019-12-22 01:22:05 +01:00
Wuzzy 9fdbb35f24 Look upwards when sleeping 2019-12-19 18:48:27 +01:00
Wuzzy 87449b5719 Make ice texture opaque by default
Because of glitchy translucency in Minetest
2019-12-19 17:55:43 +01:00
Wuzzy ab038ddd60 Increase drops of guardians 2019-12-18 21:55:22 +01:00
Wuzzy 305145ca1c Tweak oceangen 2019-12-18 21:04:07 +01:00
Wuzzy b7406ed3d5 Generate sponges in deep oceans in non-v6 mgs 2019-12-18 20:55:20 +01:00
Wuzzy f74a502979 Generate sponges in v6 2019-12-18 20:39:14 +01:00
Wuzzy 8b6dc30943 Generate kelp/seagrass in v6 2019-12-18 19:15:21 +01:00
Wuzzy e0e73b8ee8 Add basic seagrass/kelp mapgen 2019-12-18 18:42:04 +01:00
Wuzzy 85c058125c Add kelp growth 2019-12-18 15:06:35 +01:00
Wuzzy 286009cbd7 Can place kelp on kelp 2019-12-18 13:37:20 +01:00
Wuzzy 3658cfc0f1 Add help texts for the new ocean plants 2019-12-18 12:43:17 +01:00
Wuzzy ee5e50f139 Remove clay variant for kelp and seagrass 2019-12-18 04:28:47 +01:00
Wuzzy d1f3856de8 Implement help page for seagrass 2019-12-18 03:42:18 +01:00
Wuzzy 2e9efe51e8 Tweak drop behavior of ocean plants 2019-12-18 03:10:49 +01:00
Wuzzy 40e681a566 Add kelp and related items 2019-12-17 22:43:46 +01:00
Wuzzy 5c953b1dc0 Add more node sounds for ocean plants 2019-12-17 21:43:30 +01:00
Wuzzy b81396c03f Add falling node variants of seagrass 2019-12-17 21:24:57 +01:00
Wuzzy 40a55729ca Add seagrass on clay 2019-12-17 20:39:58 +01:00
Wuzzy 09c1f44a65 mcl_ocean: Add mcl_core depends 2019-12-17 20:27:26 +01:00
Wuzzy 5c70296e8f Fix seagrass selectionbox 2019-12-17 20:25:35 +01:00
Wuzzy a714751f8b Add seagrass on dirt 2019-12-17 19:52:19 +01:00
Wuzzy 4dcbe75e84 Allow corals placement on top of node only 2019-12-17 19:51:50 +01:00
Wuzzy cf1df56b79 Make corals dead when not near water 2019-12-17 18:40:10 +01:00
Wuzzy 8b3ecb9321 Refactor mcl_ocean 2019-12-17 17:18:10 +01:00
Wuzzy 1e3cfb6040 Add coral selection boxes 2019-12-17 17:12:21 +01:00
Wuzzy e8614d7b27 Fix a purely theoretical coral crash 2019-12-17 16:58:40 +01:00
Wuzzy b92aec71af Document coral groups 2019-12-17 16:53:18 +01:00
Wuzzy c7aaf49e22 Tweak coral sounds and placement 2019-12-17 16:50:32 +01:00
Wuzzy 39670e1f79 Add corals 2019-12-17 16:42:25 +01:00
Wuzzy 59964279b7 Version 0.56.2 2019-12-17 03:30:14 +01:00
Wuzzy 82b9c7d474 Change screenshot 2019-12-17 02:38:37 +01:00
Wuzzy 085e6f306a Use fallback grass color for unknown values 2019-12-17 02:01:34 +01:00
Wuzzy bab4529e4d Fix armor mod deleting player's immortal group 2019-12-17 01:44:11 +01:00
Wuzzy a5b4a261dc Dry grass replacement: Use fallback param2 2019-12-16 23:59:49 +01:00
Wuzzy 4cc51a55c2 Version 0.56.1 2019-12-16 00:37:29 +01:00
Wuzzy 29b20a51bc Update README 2019-12-16 00:36:48 +01:00
Wuzzy 5b956c1c47 Disallow cocoa screwdriver rotation 2019-12-15 00:27:23 +01:00
Wuzzy 862e3141d9 Add API documentation for screwdriver mod 2019-12-14 23:50:17 +01:00
Wuzzy 92ef7c3b9a Simplify rotation of pillar-like nodes 2019-12-14 23:42:17 +01:00
Wuzzy 44c95084ab Simplify lilypad rotation 2019-12-14 22:13:54 +01:00
Wuzzy 101c9b7322 Use minetest.LIGHT_MAX 2019-12-14 18:57:17 +01:00
Wuzzy f4888a42a9 Add glow to falling light source nodes 2019-12-14 18:56:59 +01:00
Wuzzy 7f70acc8a4 Make dropped items glow if light source node 2019-12-14 17:40:24 +01:00
Wuzzy 41d7e513e7 Make variable local 2019-12-14 03:38:00 +01:00
Wuzzy 741b32e8d0 Tweak grass palette 2019-12-14 03:10:16 +01:00
Wuzzy 1971b3c5a8 Update menu icon for new grass block 2019-12-14 01:59:14 +01:00
Wuzzy aaedf6517a Update grass block param2 when placing snow nodes 2019-12-14 01:52:01 +01:00
Wuzzy b9cc66d3db Remove dry grass from texture converter 2019-12-14 01:44:54 +01:00
Wuzzy 5f2cc506f0 Fix broken legacy dry grass LBM 2019-12-14 01:41:49 +01:00
Wuzzy affb984c56 Fix mapgen crash if there's unknown nodes 2019-12-14 01:30:21 +01:00
Wuzzy b3829eaf9b Fix tallgrass/fern placement color 2019-12-14 01:15:37 +01:00
Wuzzy c90f693c06 Smoother dirt texture from PP 2019-12-14 01:03:44 +01:00
Wuzzy c149f5ca3c Update PP grass textures 2019-12-14 00:45:57 +01:00
Wuzzy 40453d597b Add LBM to kill old drygrass nodes 2019-12-14 00:03:43 +01:00
Wuzzy 3e3ed630e5 Add per-biome grass coloring 2019-12-13 23:48:13 +01:00
Wuzzy d4344bbaf8 Update grass block in texture converter 2019-12-13 16:38:14 +01:00
Wuzzy 01288eff62 Enderman no longer pickup dirt-with-grass directly 2019-12-13 15:46:01 +01:00
Wuzzy 9dfe584cd1 Remove dirt with dry grass node from mobs_mc 2019-12-13 15:36:20 +01:00
Wuzzy 62096c723a Generate new grass color 2019-12-13 15:33:13 +01:00
Wuzzy 6002cd0af5 Fix tallgrass, fern, bonemeal for new grass color 2019-12-13 15:32:57 +01:00
Wuzzy 9c55b6c9c9 Update grass color after placing grass block 2019-12-13 14:18:35 +01:00
Wuzzy 325801efd7 First step towards param2-based grass color 2019-12-13 14:03:12 +01:00
Wuzzy 8e224d0bd9 Change screwdriver image to PP style 2019-12-13 11:51:13 +01:00
Wuzzy 4a7bb86803 Fix odd redstone torch on wall placement 2019-12-13 11:35:31 +01:00
Wuzzy cfa77288c1 Add screwdriver support to doors 2019-12-13 10:59:30 +01:00
Wuzzy d21e959055 Disallow torch placement on hopper 2019-12-13 10:22:38 +01:00
Wuzzy b5133c0c4a Allow torch placement on more nodes 2019-12-13 10:20:22 +01:00
Wuzzy 1a02ccd36f Add more node groups 2019-12-13 10:20:08 +01:00
Wuzzy 7df94278cf Disallow all torch rotation by screwdriver 2019-12-13 09:47:27 +01:00
Wuzzy 2393c68448 Fix torch screwdriver rotation 2019-12-13 09:41:38 +01:00
Wuzzy ec50b19fa0 Tweak screwdriver img 2019-12-13 08:56:23 +01:00
Wuzzy 5b4f33c8f1 Add dummy support for placing carpets on llamas 2019-12-11 20:03:11 +01:00
Wuzzy 506e039fc5 Add unicolor groups to wool and carpet 2019-12-11 19:54:58 +01:00
Wuzzy febcb96bb0 Hide screwdriver 2019-12-11 04:53:01 +01:00
Wuzzy 231493cb1b Merge branch 'screwdriver' 2019-12-11 04:47:53 +01:00
Wuzzy 2e09febaae Rename Moss Stone to Mossy Cobblestone 2019-12-11 04:24:32 +01:00
Wuzzy f91619cae1 New PP cobblestone and brick block textures 2019-12-11 04:17:38 +01:00
Wuzzy 753acdf272 Update sand, sandstone, TNT, iron nugget textures 2019-12-11 03:37:53 +01:00
Wuzzy 57e14b8106 Change menu icon to match new grass color 2019-12-11 02:02:34 +01:00
Wuzzy a177d3cbba More saturated grass color 2019-12-11 02:02:16 +01:00
Wuzzy 0d3b8e11c3 Hide WIP mobs in creative inventory 2019-12-11 00:46:55 +01:00
Wuzzy 2ff5bafd91 Refactor mob projectiles 2019-12-10 01:01:04 +01:00
Wuzzy 046f9ab223 Make blaze attacks a bit better 2019-12-10 00:16:09 +01:00
Wuzzy e85c999e4c Fix typo in mcl_banners mod 2019-12-09 22:34:56 +01:00
Wuzzy e09a72ed59 Tweak item appearance of internal items 2019-12-09 22:32:40 +01:00
Wuzzy 47f7b21190 Add missing translation for some redstone nodes 2019-12-09 22:02:35 +01:00
Wuzzy f04170d66b Piston heads no longer drop themselves 2019-12-09 21:25:27 +01:00
Wuzzy 28505885f2 Add on_blast handling to chorus plant 2019-12-09 21:06:17 +01:00
Wuzzy a1ab325920 Add on_blast support 2019-12-09 21:06:08 +01:00
ZedekThePD b71cf5e9c2 Boost performance of chorus plant digging 2019-12-09 20:44:55 +01:00
Wuzzy 4e08e978f5 Add screwdriver support for armor stand 2019-12-09 19:41:10 +01:00
Wuzzy 31fbe97e4e Allow axis rotation of trapdoors 2019-12-09 19:28:08 +01:00
Wuzzy 26ac17f1ad Can flip slabs with screwdriver 2019-12-09 19:12:28 +01:00
Wuzzy da47d7917c Disable rotation of corner stairs 2019-12-09 19:06:18 +01:00
Wuzzy ad13c71bf1 Add partial rotation of levers 2019-12-09 18:49:59 +01:00
Wuzzy 33ef45245c Fix incorrect return value of piston on_rotate 2019-12-09 18:34:40 +01:00
Wuzzy 2528463db6 Remove reverse sign rotation 2019-12-09 18:28:31 +01:00
Wuzzy 643b1e7933 Implement banner rotation with screwdriver 2019-12-09 18:27:30 +01:00
Wuzzy bbcab7275e Make ladders rotatable 2019-12-09 17:51:35 +01:00
Wuzzy d25922b325 Implement sign rotation 2019-12-09 17:46:55 +01:00
Wuzzy f218180eaa Disable rotation of torches and signs 2019-12-09 17:03:11 +01:00
Wuzzy d502ac3bec Add screwdriver support for itemframes 2019-12-09 16:44:10 +01:00
Wuzzy 644187e204 Add secondary screwdriver support for stairs 2019-12-09 16:27:11 +01:00
Wuzzy 5fd746710f Add rotation support for pistons 2019-12-09 16:08:24 +01:00
Wuzzy eeac1435f9 Update screwdriver mod for MT 5.0.0 2019-12-09 15:14:16 +01:00
Wuzzy 3de818d2c2 Merge branch 'master' into screwdriver 2019-12-09 15:09:49 +01:00
Wuzzy 5868790b4f Tweak parrot colors 2019-12-09 12:35:24 +01:00
Wuzzy 1e354f63c0 Add chick sounds 2019-12-09 12:18:26 +01:00
Wuzzy 1c7e350095 Add snowball and egg impact sounds 2019-12-09 11:52:19 +01:00
Wuzzy 9e31c2b62b Snow golems use mcl_throwing snowball 2019-12-09 11:03:48 +01:00
Wuzzy e2fb3a562d Add some arrow-related death messages 2019-12-09 10:11:15 +01:00
Wuzzy 84ff24f8ed Tweak mob shooting behaviour 2019-12-09 09:56:38 +01:00
Wuzzy 8a2e6d434d Mobs now shoot mcl_bows:arrow_entity 2019-12-09 09:29:19 +01:00
Wuzzy 7471836c2d Fix side hopper not collecting non-fuel items 2019-12-09 08:51:25 +01:00
Wuzzy 7175ffb975 Add workaround for broken eat sound 2019-12-09 08:36:34 +01:00
Jared Moody 89ba84a456 Fixes #583 - Eating chorus plant restores 4 HP 2019-12-09 08:24:38 +01:00
Wuzzy 5f1973aecd Mobs: Refactor distance calculation 2019-12-08 18:48:49 +01:00
Wuzzy 05e6362303 Version 0.55.1 2019-11-19 01:20:13 +01:00
Wuzzy f6f259dce0 Add some sanity checks to fishing bobber 2019-11-19 01:19:47 +01:00
Wuzzy fd089b2470 Version 0.55.0 2019-10-25 01:03:54 +02:00
Wuzzy 55171a12c6 Make dogs accept food
Thanks, emanresu!
2019-10-25 00:56:31 +02:00
Wuzzy 219b2464a1 Give llamas an appetite for hay bales 2019-10-25 00:47:30 +02:00
Wuzzy c9b642a706 Remove unused file in mcl_dispensers 2019-10-16 08:35:15 +02:00
Wuzzy 7b24ede582 Remove a couple of FIXMEs and legacy 2019-10-16 08:33:22 +02:00
Wuzzy 6d5bfacb8c Make mob_difficulty no longer experimental 2019-10-03 12:25:28 +02:00
Wuzzy c6903b48f1 Fix mobs spawn with 0 health if mob_difficulty=0 2019-10-03 12:19:54 +02:00
Wuzzy 0e733f1677 Fix outdated mob settings help 2019-10-03 12:17:45 +02:00
Wuzzy 5ed278717f Rename dmg particle setting 2019-10-03 12:05:30 +02:00
Wuzzy 8b9ac5c6a6 Remove custom damage particles 2019-10-03 12:03:36 +02:00
Wuzzy d9424ad82e Make dmg particles proportional to dmg 2019-10-03 11:53:26 +02:00
Wuzzy 5bd19c03f6 Wither no longer floats in water 2019-10-03 00:00:25 +02:00
Wuzzy 3322366457 Enable igloo basements with 50% chance 2019-10-02 22:38:35 +02:00
Wuzzy 5198f5cdec More igloo basement placement tweaks 2019-10-02 22:29:25 +02:00
Wuzzy da149d5a58 Apply more checks in igloo basement generation 2019-10-02 22:06:26 +02:00
Wuzzy b3e1df7e9b Round pos in spawnstruct chatcommand 2019-10-02 21:18:29 +02:00
Wuzzy 4a7aaa9024 Increase boat speed on land 2019-10-02 20:54:06 +02:00
Wuzzy a9ed14c4af Fix boats moving too fast backwards 2019-10-02 20:51:02 +02:00
Wuzzy 041839fd1a Update falling node when anvil got destroyed 2019-10-02 19:06:55 +02:00
Wuzzy 200cbf033a Set walk chance of agent mob to 0 2019-10-02 18:58:29 +02:00
Wuzzy aae360db4c Remove spawn icon for unused agent mob 2019-10-02 18:57:06 +02:00
Wuzzy f9e46b914d Mobs: Separate fire damage from lava damage 2019-10-02 18:45:28 +02:00
Wuzzy b71c9204ec Update drowning settings in mobs_mc 2019-10-02 18:31:16 +02:00
Wuzzy 14d4bec8a9 Implement proper drowning for mobs 2019-10-02 18:28:28 +02:00
Wuzzy 40b5c5c2a5 Version 0.54.1 2019-09-27 12:19:37 +02:00
Wuzzy d9d1e5c08c Fix crash in mcl_fishing 2019-09-27 12:09:03 +02:00
Wuzzy 5ba4f1b899 Disable valleys heat/humidity changes by default 2019-09-24 18:41:33 +02:00
Wuzzy 21317aa7c7 Fix eating/drinking sounds to user 2019-09-24 18:18:40 +02:00
Wuzzy dfe68e6820 Simplify meshhand error handling 2019-09-19 12:31:50 +02:00
Wuzzy 67f33c9256 Prevent constructing arrow boxes 2019-09-19 12:27:27 +02:00
Wuzzy 1aac4713a4 Simplify mcl_meshhand code 2019-09-19 12:20:31 +02:00
Wuzzy e64ef6e254 Prevent placement of meshhand nodes 2019-09-19 12:09:09 +02:00
Wuzzy 748b5d4a4b Localize a variable 2019-09-19 00:35:28 +02:00
Wuzzy 76ed6ff826 MGV6: Generate witch huts only in Normal biome 2019-09-11 16:06:41 +02:00
Wuzzy a8a875a7b4 Add biomeinfo mod 2019-09-11 16:06:34 +02:00
Wuzzy 31ae28e66e Add fishing rod in mob mods 2019-09-11 14:07:15 +02:00
Wuzzy 25e2bd106f Re-enable cookFish achievement 2019-09-11 13:56:52 +02:00
Wuzzy 2913acc6e9 Version 0.54.0 2019-09-11 13:45:32 +02:00
Wuzzy 30a954b874 Increase max. speed of boats 2019-09-11 13:33:31 +02:00
Wuzzy e633f15eed Fix boat behavior a bit when falling on water 2019-09-11 12:50:58 +02:00
Wuzzy df7acfc8ae Boats: Can place properly at all sides 2019-09-11 12:23:56 +02:00
Wuzzy b6c3cc0ed7 Tweak boat physics when inside water 2019-09-11 12:11:04 +02:00
Wuzzy 3cba55703a Boats: Allow very slow movement on ground 2019-09-11 11:17:42 +02:00
Wuzzy b3bbf38fd7 Add aligator to credits 2019-09-10 17:36:47 +02:00
Wuzzy e88e95d564 Merge branch 'doubledoor' of https://github.com/aligator/MineClone2 2019-09-10 17:23:11 +02:00
Wuzzy 44bd5dba6c Mobs: Don't set gotten in API anymore 2019-09-10 17:17:09 +02:00
Wuzzy 9416305fa6 Fix sheep not regrow wool if mobs_griefing=false 2019-09-10 17:09:17 +02:00
Wuzzy 8618b42bc7 Merge branch 'fix_dye' of https://github.com/Rootyjr/MineClone2 2019-09-10 16:56:48 +02:00
Wuzzy dae4dc6924 Remove legacy polished stone recipe 2019-09-10 16:27:32 +02:00
Wuzzy cf47e7de9e Add Rootyjr to credits 2019-09-10 16:13:11 +02:00
Wuzzy 719242c840 Merge branch 'fix_sitting_minecart_bug' of https://github.com/Rootyjr/MineClone2 2019-09-10 16:09:29 +02:00
Wuzzy 2fecf0336c Mobs: Stack texture mod effects 2019-09-10 16:00:41 +02:00
Wuzzy 955638bccd Harden minetest.after check 2019-09-10 15:45:26 +02:00
Wuzzy 915ac2da93 Merge branch 'fix_mob_damage_color' of https://github.com/Rootyjr/MineClone2 2019-09-10 15:32:30 +02:00
Wuzzy 18069b069c Update German fishing rod translation 2019-09-10 15:19:18 +02:00
Wuzzy 5dd002b598 Fishing: More comment cleanup 2019-09-10 15:16:49 +02:00
Wuzzy 06be98a676 Remove legacy carrot on a stick recipe 2019-09-10 15:14:46 +02:00
Wuzzy 055d6ecc96 Allow fishing in river water, too 2019-09-10 15:12:36 +02:00
Wuzzy c7908cc020 Fishing: Clean up comments 2019-09-10 15:10:12 +02:00
Wuzzy 276af8a1ea Merge branch 'fix_fishing_rod' of https://github.com/Rootyjr/MineClone2 2019-09-10 14:55:55 +02:00
Wuzzy 2423acb297 Fix slimes not jumping at all 2019-09-05 00:17:52 +02:00
Wuzzy ed336829b4 Fade out rain and fire sounds 2019-09-05 00:07:32 +02:00
Wuzzy aced401c6c Remove useless files 2019-08-30 19:42:47 +02:00
Wuzzy 2627742b36 Restore original fence collisionbox, but deeper 2019-08-30 04:43:25 +02:00
Nicholas Niro 995024b47b Teach mobs not to jump if they'd hurt their head 2019-08-30 04:31:14 +02:00
Nicholas Niro c7d111219d Make fence collisionbox larger 2019-08-30 04:30:22 +02:00
Wuzzy 2478d8817e Apply pitch to arrows 2019-08-27 22:01:51 +02:00
Wuzzy 1cbee9de18 Fix item entity force-out bias to positive dir 2019-08-27 13:08:54 +02:00
Wuzzy f67c302c3d Version 0.53.4 2019-08-27 05:35:26 +02:00
Wuzzy 02ed4b52c4 Add new sounds for mcl_tnt mod 2019-08-27 05:30:41 +02:00
Wuzzy ce7015bb35 Remove TNT sounds 2019-08-27 03:34:13 +02:00
Wuzzy 248a635749 Fix typo: daredevils → davedevils 2019-08-15 02:45:35 +02:00
Rootyjr a765d3dd4f
Update init.lua 2019-08-03 21:34:33 -05:00
Rootyjr d11b089bac
Split search distance in half. 2019-08-02 14:38:00 -05:00
Rootyjr 58d9fb874d Mobs now flash red when hurt. 2019-08-01 01:18:53 -05:00
Rootyjr 37af2dbba1 Fix fishing allowed in lava. 2019-07-31 22:34:53 -05:00
Rootyjr 48b73f5f2e Add self-credit. 2019-07-31 11:30:08 -05:00
Rootyjr c50958a640 Fix fishing depends.txt 2019-07-31 11:29:55 -05:00
Rootyjr 3da1c551a1 Remove WIP and update descriptions. 2019-07-31 11:29:42 -05:00
Rootyjr 379dd847ee Completely rework fishing rod to simulate a much more MC-like behaviour 2019-07-31 11:29:24 -05:00
Rootyjr 839d74329c Fix #534.3 (Dyeing a sheep did not remove the dye from inventory.) 2019-07-31 11:14:11 -05:00
aligator 1d5cdfe544 enable double doors (mirror) if left block is also a door of the same type 2019-07-31 14:56:24 +02:00
Rootyjr b1f201f538 Fix #530 (Players were stuck in sitting animation after being out of minecart). 2019-07-29 00:13:16 -05:00
Wuzzy d4facaf503 Add wool sound for beds 2019-06-14 23:03:12 +02:00
Wuzzy c623860af8 Add wool sounds 2019-06-14 23:01:50 +02:00
Wuzzy 36adba2e0b Add chorus plant stem to deco_block group 2019-06-13 20:44:04 +02:00
Wuzzy 6cd1fb1119 Change German translation of Jack'o lantern 2019-06-02 10:21:35 +02:00
Wuzzy 6e9d712c5e Fix ice not melting properly by non-Sun light 2019-06-02 10:12:36 +02:00
Wuzzy 23630bbac0 Version 0.53.3 2019-05-31 12:15:34 +02:00
Wuzzy 8830edfdf9 Add chorus plant stem usagehelp 2019-05-04 13:39:11 +02:00
Wuzzy 80ee8172fe Only allow placement of chorus stems on valid node 2019-05-04 13:33:37 +02:00
Wuzzy b0c457f2ec Fix chorus plant stems not break in protected land 2019-05-04 12:59:53 +02:00
Wuzzy 1ed1bdfadb Use minetest.raillike_group for rails 2019-04-11 17:03:41 +02:00
Wuzzy 6842c42625 Version 0.53.2 2019-04-09 17:05:16 +02:00
Wuzzy ab81dfb4b4 Stop fire spread if enable_fire=false 2019-04-09 15:25:27 +02:00
Wuzzy fbba40fe5c Fix item container transfer destroying item metadata 2019-04-05 15:30:32 +02:00
Wuzzy a7ceb2462a Deal ender pearl damage as fall damage 2019-04-01 15:22:44 +02:00
Wuzzy 219ec1ddcb Remove old workaround in mcl_stairs 2019-04-01 15:16:33 +02:00
Wuzzy 2203d0df53 Revert "Make item entities a bit more efficient"
This reverts commit ba97dfd02f because it broke item entities.
2019-04-01 10:59:36 +02:00
Wuzzy 8533ff0b75 Hoes and shovels now respect protection
That is, their special action do so.
2019-03-27 13:07:33 +01:00
Wuzzy c6e671376d Make lightning glow in the dark 2019-03-26 12:24:30 +01:00
Oil_boi ba97dfd02f Make item entities a bit more efficient 2019-03-26 10:23:52 +01:00
Wuzzy 719f7b5b77 Explain how characters work in mcl_signs 2019-03-25 13:30:35 +01:00
Wuzzy 42a7baf4b4 Version 0.53.0 2019-03-25 12:47:16 +01:00
Wuzzy 6188d7b528 Fix other boolean settings default fails 2019-03-25 12:42:37 +01:00
Wuzzy 7e9a9821c9 Fix progressive mode not disabable 2019-03-25 12:39:09 +01:00
Wuzzy 5b6cb0a441 Minor tweaks in commandblock help texts 2019-03-25 12:34:12 +01:00
Wuzzy d0a6244be9 Books: Move sign warning to tooltip
Done because of translation problems with the newline
2019-03-25 12:31:46 +01:00
Wuzzy 418368fbc5 Squash daylight sensor help pages to 1 page 2019-03-25 12:15:37 +01:00
Wuzzy 967905264d Make many help texts translatable and fix bugs 2019-03-25 12:05:57 +01:00
Wuzzy c5db9987c3 Fix various typos in German translation 2019-03-25 11:01:52 +01:00
Wuzzy 435ae85d68 Fix grass block crash in v6 2019-03-25 09:38:39 +01:00
Wuzzy 1b7c41fc81 Grass block: Change grass color depending on biome 2019-03-25 09:25:52 +01:00
Wuzzy 2d34a2982a Add biome type to biome metadata 2019-03-25 09:04:41 +01:00
Wuzzy 2f346cfc1d Change stained glass canonical color 2019-03-24 10:51:45 +01:00
Wuzzy 15880db548 Add new help text for stained glass panes 2019-03-24 10:40:07 +01:00
Wuzzy 5c1717971b Squash help entries for stained glass and panes 2019-03-24 10:31:58 +01:00
Wuzzy 2582350504 mcl_core: Rename locale template 2019-03-24 09:37:48 +01:00
Wuzzy 7604b77dd6 Add generic strings for stained glass 2019-03-24 09:37:15 +01:00
Wuzzy b404e8b5bd Squash help entries for shulker boxes 2019-03-24 09:30:15 +01:00
Wuzzy 25048050a0 Remove dead code in mcl_chests 2019-03-24 09:23:56 +01:00
Wuzzy 3a5df885e9 Squash help entries for wool and carpet 2019-03-24 09:23:26 +01:00
Wuzzy 5caa4b3659 Fix bed help WRT Minetest settings 2019-03-24 09:07:57 +01:00
Wuzzy 423d5f8ab8 Squash help entries of beds 2019-03-24 09:06:35 +01:00
Wuzzy 8636b94c74 Squash help entries of colorblocks 2019-03-24 08:55:42 +01:00
Wuzzy ea23f05c22 Add missing translations for huge mushroom blocks 2019-03-24 08:16:34 +01:00
Wuzzy 7df5ef097c Translate river water 2019-03-24 08:06:08 +01:00
Wuzzy a54abc7de9 Add translation for water/lava interactions 2019-03-24 08:03:50 +01:00
Wuzzy 1b24b02e31 Bone meal grows flowers matching to biome 2019-03-23 00:23:54 +01:00
Wuzzy 833f58ff4e Fix incorrect usagehelp for pumpkin (with face) 2019-03-22 22:04:22 +01:00
Wuzzy c78b1d1354 Add missing translation for pumpkin usagehelp 2019-03-22 22:02:23 +01:00
Wuzzy c49efcf9ad Fix floating vines rarely generating in jungles 2019-03-22 11:20:34 +01:00
Wuzzy 5647fbf6e0 Add German translation for mcl_cocoas 2019-03-21 20:13:35 +01:00
Wuzzy 1719c3e4e1 Add LBMs to update formspecs of 4 nodes
Dispenser, dropper, ender chest, shulker box.
2019-03-21 16:08:29 +01:00
Wuzzy b80ece51cb Signs: Add support for all Latin-1 printable chars 2019-03-21 15:45:54 +01:00
Wuzzy 65a61398b5 Add some Latin-1 characters for signs 2019-03-21 14:35:56 +01:00
Wuzzy 8019315eaa Fix character cutoff in standing signs 2019-03-21 12:52:13 +01:00
Wuzzy d12356794f Close editing formspec if sign is destroyed 2019-03-21 12:28:48 +01:00
Wuzzy 262457f240 Fix German translation of shulker box formspec 2019-03-21 12:13:18 +01:00
Wuzzy ae5f5fe3b7 Slightly change wording in sign formspec 2019-03-21 11:37:36 +01:00
Wuzzy 78fc9565c0 Make sign formspec translatable 2019-03-21 11:36:58 +01:00
Wuzzy 579e526615 Signs: Add replacement character 2019-03-21 11:25:14 +01:00
Wuzzy 267cf5c4a6 Signs: Make all chars 5 or 6 pixels wide 2019-03-21 11:00:23 +01:00
Wuzzy 52e1c9e274 Signs: Add colon and grave char, tweak more chars 2019-03-21 10:40:58 +01:00
Wuzzy 70498cf529 mcl_signs: Rename characters file 2019-03-21 10:12:20 +01:00
Wuzzy 40923f83fd Version 0.52.1 2019-03-19 08:43:38 +01:00
Wuzzy da5b2443f2 Fix crash when players kill each other 2019-03-19 08:43:11 +01:00
Wuzzy aaf8801c06 Version 0.52.0 2019-03-18 18:24:31 +01:00
Wuzzy 8dd3c9224f Fix translation of falling anvil death msg 2019-03-18 18:16:25 +01:00
Wuzzy b44f4f456d Add sound pitch for other noteblock sounds 2019-03-18 17:54:14 +01:00
Wuzzy 95d2465901 Noteblock: Higher kick sound 2019-03-18 17:40:45 +01:00
Wuzzy e2cc0e428d Remove the word “Minetest” more often 2019-03-18 17:05:00 +01:00
Wuzzy 23ccd197ee Fix some factual mistakes in mcl_doc_basics 2019-03-18 16:46:34 +01:00
Wuzzy d191c3ac48 Update German basic help translation 2019-03-18 15:17:32 +01:00
Wuzzy 6511394b69 Add some mcl_doc_basics translations 2019-03-18 14:30:25 +01:00
Wuzzy 78f4043fb9 Update mcl_doc_basics, with new translations 2019-03-18 14:28:36 +01:00
Wuzzy 2237aae6c3 Update all help mods 2019-03-18 13:20:17 +01:00
Wuzzy c3968209f6 Add missing mcl_doc translations 2019-03-18 12:20:10 +01:00
Wuzzy 058f46043f Fix minor typo 2019-03-18 12:05:33 +01:00
Wuzzy 49f447ba64 Fix missing depends in mcl_tnt 2019-03-17 09:33:44 +01:00
Wuzzy b0acd134ca Remove sand solidification code
Minetest does this now
2019-03-16 06:43:59 +01:00
Wuzzy 6fbd47cde6 Translate missing commands 2019-03-16 05:29:28 +01:00
Wuzzy 9cef74c03b Replace GUI image texts with translatable labels 2019-03-16 05:21:27 +01:00
Wuzzy 9d7f4f6544 Translate villager professions 2019-03-16 04:14:21 +01:00
Wuzzy 805fa76282 Inventory: Translate tab captions 2019-03-16 04:04:41 +01:00
Wuzzy 550fa39d86 Make achievements translatable 2019-03-16 03:36:32 +01:00
Wuzzy 522a2b9a73 Fix uneditable command block when empty 2019-03-16 03:19:54 +01:00
Wuzzy 7aaafdca03 Translate a few missing formspec elements 2019-03-16 03:18:16 +01:00
Wuzzy 8cfcbea9cb Fix commandblock crash if opening empty one 2019-03-16 03:09:51 +01:00
Wuzzy 8ee1521f14 Translation: Add support for horse armor 2019-03-16 02:44:52 +01:00
Wuzzy cf9e440019 Translation: Add support for a few missing items 2019-03-16 02:38:36 +01:00
Wuzzy d45d53e455 German translation: Redstone 2019-03-16 02:00:48 +01:00
Wuzzy 03db150175 Add missing fence translation 2019-03-16 00:27:05 +01:00
Wuzzy af4aa6c2ec Change German translation of Shulker 2019-03-16 00:21:17 +01:00
Wuzzy 9385458632 German translation: mcl_signs to xpanes 2019-03-16 00:07:44 +01:00
Wuzzy c12a4b795e Make “now playing” translatable 2019-03-15 09:52:13 +01:00
Wuzzy 1c27cbe4f6 German translation: mcl_mobitems to mcl_potions 2019-03-15 09:50:32 +01:00
Wuzzy 3f85e1c0da Fix lava/fire/magmablock death message not transl. 2019-03-15 07:23:36 +01:00
Wuzzy f5cd9e3b98 Fix malformed translations 2019-03-15 07:12:10 +01:00
Wuzzy 661e10e992 Fix crash when dying cuz fire, lava or magmablock 2019-03-15 07:10:18 +01:00
Wuzzy 81ca79e85c Open-source command blocks ;-) 2019-03-15 06:48:12 +01:00
Wuzzy 77ab44217a German transl.: mcl_fishing to mcl_maps + fixes 2019-03-15 06:12:03 +01:00
Wuzzy 86e5eb748f More fire fixes 2019-03-15 04:36:17 +01:00
Wuzzy f5c1e19781 Add help for disabled fire and translate 2019-03-15 04:25:54 +01:00
Wuzzy e764851775 German translation: Dunkeleiche → Schwarzeiche 2019-03-15 03:47:16 +01:00
Wuzzy 53eabf3737 German translation: mcl_farming 2019-03-15 03:41:24 +01:00
Wuzzy a5fb218afe German translation: mcl_colorblocks 2019-03-15 02:26:59 +01:00
Wuzzy 93e34d1d03 Make mcl_colorblocks translatable 2019-03-15 02:05:10 +01:00
Wuzzy 62e1186827 Version 0.51.1 2019-03-15 00:27:17 +01:00
Wuzzy a51bcff1b9 Fix crash if breeding sheep that spawned as child 2019-03-15 00:26:06 +01:00
Wuzzy 702755b99e Fix crash in mcl_dye when converting unicolor 2019-03-15 00:15:34 +01:00
Wuzzy daeb04485e Version 0.51.0 2019-03-14 23:37:03 +01:00
Wuzzy 0c8db3e556 Fix crash in craftguide when player leaves 2019-03-14 12:08:11 +01:00
Wuzzy 41842c73c6 Fix translations in mcl_death_messages not working 2019-03-14 08:33:28 +01:00
Wuzzy 28c0c9d196 Workaround for concrete powder hardening ABM crash 2019-03-14 08:13:54 +01:00
Wuzzy 1740ccc2b2 Fix translation file error in mcl_chests 2019-03-14 07:25:14 +01:00
Wuzzy 2cde0476c7 German translation: mcl_clock to mcl_end but ...
no mcl_colorblocks
2019-03-14 07:06:45 +01:00
Wuzzy e01ed8ab24 German translation: mcl_beds to mcl_chests 2019-03-14 06:20:05 +01:00
Wuzzy 7be98bfce0 German translation: Anvils, banners 2019-03-14 04:47:56 +01:00
Wuzzy b72afa7e62 German translation: Player and Misc 2019-03-14 02:32:35 +01:00
Wuzzy 45d09754d0 German translation: mcl_structures 2019-03-14 01:59:31 +01:00
Wuzzy 293dd036f8 German translations: HUD 2019-03-14 01:51:52 +01:00
Wuzzy 9405232fef Clean up awards mod translation 2019-03-14 01:14:39 +01:00
Wuzzy 3c8e2634c0 German translation: help (partial) 2019-03-14 01:08:32 +01:00
Wuzzy 2f1c201076 Update craftguide translations 2019-03-14 00:42:17 +01:00
Wuzzy 63d630a208 German translation: environment 2019-03-14 00:32:22 +01:00
Wuzzy 7c9126ace5 German translation: entities 2019-03-14 00:25:41 +01:00
Wuzzy 9ef6176958 Remove redundant translatability stuff in mobs_mc 2019-03-14 00:16:53 +01:00
Wuzzy 04c2da63ad mcl_mobs: Remove unused string 2019-03-14 00:00:10 +01:00
Wuzzy 5aeb4aea74 Add translation templates for most mods
Using the findtext.lua script
2019-03-13 23:40:59 +01:00
Wuzzy d7fc158073 Make mcl_spawn translatable 2019-03-13 23:27:00 +01:00
Wuzzy 2b586549cf Add translation templates for 3 mods 2019-03-13 22:52:14 +01:00
Wuzzy 550efda495 Version 0.50.1 2019-03-13 11:32:55 +01:00
Wuzzy fb389df3a0 Fix crash when clicking craftbook icon in furnace 2019-03-13 11:32:26 +01:00
Wuzzy f7af5dfa07 Version 0.50.0 2019-03-13 08:05:59 +01:00
Wuzzy 008a1b1cac Add German translation for boats 2019-03-13 05:57:43 +01:00
Wuzzy d25e9ec4cc Re-introduce the progressive mode! YESSSSS 2019-03-13 04:52:23 +01:00
Wuzzy e26f03f37e Remove some no-longer missing engine features 2019-03-13 02:45:46 +01:00
Wuzzy e77c5a3562 Craftguide: Remove call to Lua debug library 2019-03-13 00:13:04 +01:00
Wuzzy cdb6e3e3f5 Craftguide: Remove /craft command 2019-03-12 23:08:04 +01:00
Wuzzy 82d56de18e Craftguide: Remove no_prepend[] 2019-03-12 23:07:35 +01:00
Wuzzy e24a698bae Craftguide: 2×2 for shapeless recipe w/ <= 4 items 2019-03-12 23:05:03 +01:00
Wuzzy 9fc834c8db Craftguide: Restore old group support 2019-03-12 23:00:42 +01:00
Wuzzy 9ff95e7a08 Remove v6 craftguide image 2019-03-12 22:21:06 +01:00
Wuzzy ac7a16eb96 Update to latest version of craftguide 2019-03-12 22:03:21 +01:00
Wuzzy b551b144d4 Disable translator of mcl_achievements 2019-03-12 13:33:26 +01:00
Wuzzy 4ede0a1227 Fix underwater ice sheet in IcePlainsSpikes biome 2019-03-12 03:18:07 +01:00
Wuzzy e26a668b74 Add emerald ore+monster eggs in all ExtremeHills 2019-03-12 02:14:19 +01:00
Wuzzy 7935e64637 Cleanup ambigious sandstone groups, change meaning
- Change meaning of "sandstone" group to include sandstone of any color
- Add "normal_sandstone" group
- Rename "redsandstone" group to "red_sandstone"
2019-03-12 01:50:42 +01:00
Wuzzy 45a30867c3 Del. color from underground hclay in MesaPlateauFM 2019-03-12 00:56:35 +01:00
Wuzzy 2e092dc15f Shrink MesaBryce beach once more 2019-03-12 00:46:08 +01:00
Wuzzy 206293e3f9 Fix MesaBryce typo 2019-03-12 00:34:44 +01:00
Wuzzy 12581e8441 Tweak MesaBryce sandlevel: Sand beach, strata 2019-03-12 00:31:39 +01:00
Wuzzy c62658fd27 Erode strata a bit in Mesa and MesaPlateauF 2019-03-11 23:00:59 +01:00
Wuzzy f1f6dc4c48 Colorize bottom terracotta layers of MesaBryce 2019-03-11 22:08:17 +01:00
Wuzzy a16886bf17 Tweak heat and humidity points of new mesa biomes 2019-03-11 21:44:13 +01:00
Wuzzy ae513f7b53 Add MesaBryce biome 2019-03-11 21:42:55 +01:00
Wuzzy 0b9e25fd9a Add vertical blend for *_ocean biomes 2019-03-11 14:22:05 +01:00
Wuzzy 256dc9e1b5 Vertical blend for mushroomisland 2019-03-11 13:50:27 +01:00
Wuzzy 053e10f223 Update mcl_biome comments 2019-03-11 13:41:19 +01:00
Wuzzy 2c599c4a0e Refactor mobs_mc a bit 2019-03-11 13:25:06 +01:00
Wuzzy cc9b78215a Fix crash with wither projectile 2019-03-11 13:23:55 +01:00
Wuzzy f713394f6d Add vertical blend to ExtremeHills+ 2019-03-11 02:51:59 +01:00
Wuzzy 18adaef361 Eroded strata for MesaPlateauFM 2019-03-11 01:57:00 +01:00
Wuzzy f59f4d4f7c Tweak MesaPlateauFM riverbed 2019-03-11 00:17:14 +01:00
Wuzzy c868b7a767 Add MesaPlateauFM biome
Variant of MesaPlateauF, more erratic terrain, smooth transitions, has red sandstone, more red sand, fewer trees, much more dry shrubs and coarse dirt
2019-03-11 00:04:03 +01:00
Wuzzy f48019a877 Use built stratum ore type for mesa strata 2019-03-10 18:47:27 +01:00
Wuzzy b4b5cb2879 Tweak mesa-underground transition 2019-03-10 18:42:53 +01:00
Wuzzy 2a9e30b900 Also generate more gold in MesaPlateauF 2019-03-10 08:41:09 +01:00
Wuzzy f55dac38e2 Re-introduce melons in v6 mapgen 2019-03-10 06:50:15 +01:00
Wuzzy a943428b11 Simplify pumpkin map generation 2019-03-10 06:37:36 +01:00
Wuzzy aee7c4b4a2 Simplify top snow generation in v6 2019-03-10 06:06:06 +01:00
Wuzzy c8f9c3e923 Delete drippingwater entities when block unloads 2019-03-10 04:22:19 +01:00
Wuzzy 2892c45f52 Fix end portal shrine being in lava in flat mapgen 2019-03-10 03:30:18 +01:00
Wuzzy 3cdf570460 The End: Remove 2 helper recipes, update help 2019-03-10 03:22:35 +01:00
Wuzzy 022f627fd0 Drop attached chorus plant nodes if detached 2019-03-10 02:58:53 +01:00
Wuzzy 29c12439c4 Fix hand range not being applied if wielding item 2019-03-10 01:11:29 +01:00
Wuzzy 740e87cd81 Add FIXME for chorus plants 2019-03-10 01:05:06 +01:00
Wuzzy ef0b941bce Fix undeclared global bug in mcl_biomes 2019-03-10 00:35:16 +01:00
Wuzzy 655a240107 Chorus plant: Prevent double placement of flowers 2019-03-09 23:19:14 +01:00
Wuzzy 05e8cc8a2c Don't turn water into end stone anymore 2019-03-09 21:20:37 +01:00
Wuzzy 7a4aeb6625 Generate chorus plants in the End 2019-03-09 21:02:40 +01:00
Wuzzy 895b9e7e3a More End tweaks 2019-03-09 19:15:10 +01:00
Wuzzy e2fd769657 New, stratum-based end stone generation 2019-03-09 18:52:24 +01:00
Wuzzy 5dd650e921 Change wording: “decorational” → “decorative” 2019-03-09 17:01:36 +01:00
Wuzzy eff91038e8 Fix crash if item dropped in end portal in the end 2019-03-09 10:08:53 +01:00
Wuzzy 4f2baf8506 Play place sound if falling node hit the bottom 2019-03-09 08:59:09 +01:00
Wuzzy 2f88b42210 Make armor stand attached 2019-03-09 08:40:52 +01:00
Wuzzy b9377a0dbf Fix broken player init in mcl_hunger causing crash 2019-03-09 08:25:00 +01:00
Wuzzy 6d6fc3f34c Disable active trapped chests at loading time 2019-03-09 07:59:07 +01:00
Wuzzy ad8403adbd Add piston support for trapped chests 2019-03-09 07:23:10 +01:00
Wuzzy e6e9d13701 Piston support: banner, sign, armor stand, chests, daylight sensor, jukebox, noteblock 2019-03-09 07:02:02 +01:00
Wuzzy 225930a2c7 Constructing double chest part checks for neighbor
... and reverts to single chest if none found. Required for piston stuff.
2019-03-09 06:09:52 +01:00
Wuzzy c6efa8a626 Close formspecs when double chest breaks 2019-03-09 05:51:58 +01:00
Wuzzy 79a3eb23a7 Add German translation of mcl_core 2019-03-09 04:45:43 +01:00
Wuzzy a15c58a2dc Fix typos in mcl_core 2019-03-09 03:58:41 +01:00
Wuzzy 10035a64af Fix mobs not retaliating if friend died with 1 hit 2019-03-09 01:57:51 +01:00
Wuzzy 47ef78bf6a Fix group attack for slime, zombie and zombiepig 2019-03-09 01:50:00 +01:00
Wuzzy f3b4c56772 Change default mob view range to 16 2019-03-09 01:04:18 +01:00
Wuzzy 7899f6d432 Tweak height fear of all mobs 2019-03-09 00:54:49 +01:00
Wuzzy a5b20b1bf0 Modify pitch of small slimes and magma cubes 2019-03-09 00:44:24 +01:00
Wuzzy 8b44e6fb7a Mobs: Also play jump sfx if not moving horizontal 2019-03-09 00:24:53 +01:00
Wuzzy c98df597fc Fix mob detection of fences and walls 2019-03-09 00:18:21 +01:00
Wuzzy e37411dc13 Random pitch for eat/drink sounds 2019-03-09 00:10:59 +01:00
Wuzzy 6f9e178084 Baby zombies take sunlight damage 2019-03-08 23:55:27 +01:00
Wuzzy 9434baf991 High pitch for baby monsters 2019-03-08 23:52:41 +01:00
Wuzzy 793357cdfe Fix crash in mcl_hunger 2019-03-08 23:47:50 +01:00
Wuzzy f373f3a4f1 Mob spawner: Reduce spawn count for big mobs 2019-03-08 23:26:54 +01:00
Wuzzy a58b6fd3fb Fixed pitch for fuse sound 2019-03-08 23:17:42 +01:00
Wuzzy b8d3e7473b Mob sfx: Random pitch, higher pitch for children 2019-03-08 23:11:44 +01:00
Wuzzy 086b29f08c Fix minor race condition in mcl_death_messages 2019-03-08 22:51:35 +01:00
Wuzzy 636ff60c68 Don't re-damage object with arrow if already dead 2019-03-08 22:31:26 +01:00
Wuzzy 049c632276 Generalize node damage death message 2019-03-08 21:59:16 +01:00
Wuzzy 20576431e1 More death messages, more reliable 2019-03-08 20:22:01 +01:00
Wuzzy db8d7af245 Fix lightning dealing way too much damage 2019-03-08 19:09:40 +01:00
Wuzzy 9057743eb8 Tweak spawning algorithm 2019-03-08 05:12:31 +01:00
Wuzzy daed3059bf Predict water when digging ice 2019-03-08 04:42:24 +01:00
Wuzzy f40eeb4477 Make barrier particles glow in the dark 2019-03-08 03:47:14 +01:00
Wuzzy f7d9aea529 Make blazes glow in the dark 2019-03-08 03:40:46 +01:00
Wuzzy fed10e688e Tweak water/lava drips 2019-03-08 03:05:27 +01:00
Wuzzy 2e738a39a4 Disable radar mode in survival 2019-03-08 01:59:45 +01: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 2028ef40cb Add screwdriver 2019-02-22 05:29:17 +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
1753 changed files with 41815 additions and 18976 deletions

36
API.md
View File

@ -9,10 +9,20 @@ 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_falling_node_alternative`: If set to an itemstring, the node will turn into this node before it starts to fall.
* `_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 +32,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 +62,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,14 +29,21 @@ 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
* `cultivatable=2`: Block will be turned into Farmland by using a hoe on it
* `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)
* `flammable`: Block spreads fire
* `flammable>0`: Gets destroyed by fire
* `flammable=-1` Does not get destroyed by fire
* `fire_encouragement`: How quickly this block catches fire
* `fire_flammability`: How fast the block will burn away
* `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 +55,21 @@ 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.
* `piston=X`: Piston (main body) (1 = normal, 2 = sticky)
* `piston_pusher=X`: Piston pusher (1 = normal, 2 = sticky)
* `hopper=X`: Hopper (1 = downwards, 2 = sideways)
* `portal=1`: Portal (node that teleports players and things by standing inside)
* `end_portal_frame=X`: End portal frame (1 = no eye, 2 = with eye)
* `coral=X`: Coral (any type) (1 = alive, 2 = dead)
* `coral_plant=X`: Coral in the "plant" shape (1 = alive, 2 = dead)
* `coral_fan=X`: Coral fan (1 = alive, 2 = dead)
* `coral_block=X`: Coral block (1 = alive, 2 = dead)
* `coral_species=X`: Specifies the species of a coral; equal X means equal species
#### Footnotes
@ -58,8 +80,10 @@ Please read <http://minecraft.gamepedia.com/Breaking> to learn how digging times
### Groups (mostly) used for crafting recipes
* `sand=1`: Sand (any color)
* `sandstone=1`: (Yellow) sandstone and related nodes (chiseled and the like) (only full blocks)
* `redsandstone=1`: Red sandstone and related nodes (chiseled and the like) (only full blocks)
* `sandstone=1`: Sandstone (any color) and related nodes (chiseled and the like) (only full blocks)
* `normal_sandstone=1`: “Normal” (yellow) sandstone and related nodes (chiseled and the like) (only full blocks)
* `red_sandstone=1`: Red sandstone and related nodes (chiseled and the like) (only full blocks)
* `hardened_clay=1`: Terracotta (any color)
* `quartz_block=1`: Quartz Block and variants (chiseled, pillar, etc.) (only full blocks)
* `stonebrick=1`: Stone Bricks and related nodes (only full blocks)
* `shulker_box=1`: Block is a shulker box
@ -71,6 +95,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 +114,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 +136,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 +168,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

@ -8,8 +8,6 @@ For these features, no easy Lua workaround could be found.
### Lua API
#### Tools/wielded item
- Allow **much** faster liquid flowing ([#2810](https://github.com/minetest/minetest/issues/2810))
- “Lock” hotbar for a brief time after using an item, making it impossible to switch item or to attach/mine/build until the delay is over (For eating with delay)
- Tool charging: Holding down the mouse and releasing it, applying a “power level” (For bow and arrows, more charge = higher arrow range) ([issue 5212](https://github.com/minetest/minetest/issues/5212))
- [Dual Wielding](http://minecraft.gamepedia.com/Dual_wield)
@ -21,7 +19,6 @@ For these features, no easy Lua workaround could be found.
## Interface
- Inventory: Hold down right mouse button while holding an item stack to drop items into the slots as you move the mouse. Makes crafting MUCH faster
- **Much** more informative item tooltips
- Sneak+Leftclick on crafting output crafts as many items as possible and immediately puts it into the player inventory ([issue 5211](https://github.com/minetest/minetest/issues/5211))
- Sneak+click on inventory slot should be able to put items into additional “fallback inventories” if the first inventory is full. Required for large chests
- Sneak+click puts items in different inventories depending on the item type (maybe group-based)? Required for sneak-clicking to armor slots
@ -39,8 +36,5 @@ For these features, a workaround (or hack ;-)) by using Lua is theoretically pos
- Set damage frequency of `damage_per_second`. In Minecraft many things damage players every half-second rather than every second
- Possible to damage players directly when they are with the head inside. This allows to add Minecraft-like suffocation
#### Crafting
- Require tools to be intact in crafting
#### Nice-to-haye
- Utility function to rotate pillar-like nodes, requiring only 3 possible orientations (X, Y, Z). Basically this is `minetest.rotate_node` but with less orientations; the purpur pillar would mess up if a mirrored rotation would be possible. This is already implemented in MCL2, See `mcl_util` for more infos

View File

@ -1,8 +1,8 @@
# MineClone 2
An unofficial Minecraft-like game for Minetest. Forked from MineClone by daredevils.
An unofficial Minecraft-like game for Minetest. Forked from MineClone by davedevils.
Developed by Wuzzy and contributors. Not developed or endorsed by Mojang AB.
Version: 0.29.0
Version: 0.64.0
### Gameplay
You start in a randomly-generated world made entirely of cubes. You can explore
@ -60,21 +60,27 @@ 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:
* 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 +95,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 +114,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 +133,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 +148,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 +156,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/issues>
## Other readme files
@ -180,8 +196,10 @@ There are so many people to list (sorry). Check out the respective mod directori
### Coding
* [Wuzzy](https://forum.minetest.net/memberlist.php?mode=viewprofile&u=3082): Main programmer of most mods
* daredevils: Creator of MineClone on which MineClone 2 is based on
* davedevils: Creator of MineClone on which MineClone 2 is based on
* [ex-bart](https://github.com/ex-bart): Redstone comparators
* [Rootyjr](https://github.com/Rootyjr): Fishing rod and bugfixes
* [aligator](https://github.com/aligator): Improvement of doors
* Lots of other people: TO BE WRITTEN (see mod directories for details)
### Textures
@ -201,7 +219,7 @@ Various sources. See the respective mod directories for details.
### Special thanks
* daredevils for starting MineClone, the original version of this game
* davedevils for starting MineClone, the original version of this game
* celeron55 for creating Minetest
* Minetest's modding community for providing a huge selection of mods, some of which ended up in MineClone 2
* Jordach for the jukebox music compilation from Big Freaking Dig
@ -219,15 +237,15 @@ 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
and licensed under the
GNU LGPL v2.1 (Wuzzy, daredevils and countless others) (see `LICENSE.txt`).
GNU LGPL v2.1 (Wuzzy, davedevils and countless others) (see `LICENSE.txt`).
MineClone 2 is a direct continuation of the discontinued MineClone
project by daredevils which fell under the same license.
project by davedevils which fell under the same license.
Mods credit:
See `README.txt` or `README.md` in each mod directory for information about other authors.
@ -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.

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.4 KiB

After

Width:  |  Height:  |  Size: 3.9 KiB

View File

@ -1,7 +1,9 @@
# This is a game specify minetest.conf file, do not edit
# This is a game specific minetest.conf file, do not edit
# Basic game rules
time_speed = 72
# Player physics
movement_acceleration_default = 2.4
movement_acceleration_air = 1.2
#movement_acceleration_fast = 10
@ -16,8 +18,16 @@ 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
# Mapgen stuff
# altitude_chill and altitude_dry doesn't go well together with MCL2 biomes
# which already include "snowed" variants as you go higher.
# humid_rivers would cause the MushroomIsland biome to appear frequently around rivers.
mgvalleys_spflags = noaltitude_chill,noaltitude_dry,nohumid_rivers,vary_river_depth
# MCL2-specific stuff
keepInventory = false

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

View File

@ -0,0 +1,42 @@
# Biome Info API
This document explains the API of this mod.
## v6 mapgen functions
These are functions for the v6 mapgen only.
Use these functions only in worlds in which the v6 mapgen is used.
If you use these in any other mapgen, bad things might happen.
### `biomeinfo.get_v6_humidity(pos)`
Get the biome humidity at pos (for v6 mapgen).
### `biomeinfo.get_v6_heat(pos)`
Get the biome heat/temperature at pos (for v6 mapgen).
### `biomeinfo.get_v6_biome(pos)`
Get the v6 biome at pos.
Returns a string, which is the unique biome name.
Note: This function currently ignores the `biomeblend` v6 mapgen flag,
it just pretends this setting is disabled.
This is normally not a problem, but at areas where biomes blend,
the result is not perfectly accurate and just an estimate.
### `biomeinfo.get_active_v6_biomes()`
Returns a table containing the names of all v6 biomes that are actively
used in the current world, e.g. those that have been activated
by the use of the mapgen v6 flags (`mgv6_spflags`).
### `biomeinfo.all_v6_biomes`
This is a table containing all v6 biomes (as strings), even those that
might not be used in the current world.
### v6 biome names
These are the biome names used in this mod:
* Normal
* Desert
* Jungle
* Tundra
* Taiga

View File

@ -0,0 +1,11 @@
# Biome Info API [`biomeinfo`]
This is an API mod for mod developers to add a couple of missing
biome-related functions.
Currently, this mod only adds v6-related functions.
Most importantly, you can get the heat, humidity and biome in the v6 mapgen.
See `API.md` for the API documentation.
Current version: 1.0.3 (this is a [SemVer](https://semver.org/))
License: MIT License

View File

@ -0,0 +1,211 @@
biomeinfo = {}
-- Copied from mapgen_v6.h
local MGV6_FREQ_HOT = 0.4
local MGV6_FREQ_SNOW = -0.4
local MGV6_FREQ_TAIGA = 0.5
local MGV6_FREQ_JUNGLE = 0.5
-- Biome types
local BT_NORMAL = "Normal"
local BT_TUNDRA = "Tundra"
local BT_TAIGA = "Taiga"
local BT_DESERT = "Desert"
local BT_JUNGLE = "Jungle"
-- Get mapgen settings
local seed = tonumber(minetest.get_mapgen_setting("seed")) or 0
local mgv6_perlin_biome, mgv6_perlin_humidity, mgv6_np_biome
-- v6 default noiseparams are hardcoded here because Minetest doesn't give us those
local mgv6_np_biome_default = {
offset = 0,
scale = 1,
spread = { x = 500, y = 500, z = 500},
seed = 9130,
octaves = 3,
persistence = 0.50,
lacunarity = 2.0,
flags = "eased",
}
local mgv6_np_humidity_default = {
offset = 0.5,
scale = 0.5,
spread = { x = 500, y = 500, z = 500},
seed = 72384,
octaves = 3,
persistence = 0.50,
lacunarity = 2.0,
flags = "eased",
}
local v6_flags_str = minetest.get_mapgen_setting("mgv6_spflags")
if v6_flags_str == nil then
v6_flags_str = ""
end
local v6_flags = string.split(v6_flags_str)
local v6_use_snow_biomes = true
local v6_use_jungles = true
-- TODO: Implement biome blend.
-- Currently we pretend biome blend is disabled.
-- This just makes the calculations inaccurate near biome boundaries,
-- but should be fine otherwise.
local v6_use_biome_blend = false
for f=1, #v6_flags do
local flag = v6_flags[f]:trim()
if flag == "nosnowbiomes" then
v6_use_snow_biomes = false
end
if flag == "snowbiomes" then
v6_use_snow_biomes = true
end
if flag == "nojungles" then
v6_use_jungles = false
end
if flag == "jungles" then
v6_use_jungles = true
end
if flag == "nobiomeblend" then
v6_use_biome_blend = false
end
-- TODO
-- if flag == "biomeblend" then
-- v6_use_biome_blend = true
-- end
end
-- Force-enable jungles when snowbiomes flag is set
if v6_use_snow_biomes then
v6_use_jungles = true
end
local v6_freq_desert = tonumber(minetest.get_mapgen_setting("mgv6_freq_desert") or 0.45)
local NOISE_MAGIC_X = 1619
local NOISE_MAGIC_Y = 31337
local NOISE_MAGIC_Z = 52591
local NOISE_MAGIC_SEED = 1013
local noise2d = function(x, y, seed)
-- TODO: implement noise2d function for biome blend
return 0
--[[
local n = (NOISE_MAGIC_X * x + NOISE_MAGIC_Y * y
+ NOISE_MAGIC_SEED * seed) & 0x7fffffff;
n = (n >> 13) ^ n;
n = (n * (n * n * 60493 + 19990303) + 1376312589) & 0x7fffffff;
return 1.0 - n / 0x40000000;
]]
end
biomeinfo.all_v6_biomes = {
BT_NORMAL,
BT_DESERT,
BT_JUNGLE,
BT_TUNDRA,
BT_TAIGA
}
local function init_perlins()
if not mgv6_perlin_biome then
mgv6_np_biome = minetest.get_mapgen_setting_noiseparams("mgv6_np_biome")
if not mgv6_np_biome then
mgv6_np_biome = mgv6_np_biome_default
minetest.log("action", "[biomeinfo] Using hardcoded mgv6_np_biome default")
end
mgv6_perlin_biome = minetest.get_perlin(mgv6_np_biome)
end
if not mgv6_perlin_humidity then
local np_humidity = minetest.get_mapgen_setting_noiseparams("mgv6_np_humidity")
if not np_humidity then
np_humidity = mgv6_np_humidity_default
minetest.log("action", "[biomeinfo] Using hardcoded mgv6_np_humidity default")
end
mgv6_perlin_humidity = minetest.get_perlin(np_humidity)
end
end
function biomeinfo.get_active_v6_biomes()
local biomes = { BT_NORMAL, BT_DESERT }
if v6_use_jungles then
table.insert(biomes, BT_JUNGLE)
end
if v6_use_snow_biomes then
table.insert(biomes, BT_TUNDRA)
table.insert(biomes, BT_TAIGA)
end
return biomes
end
function biomeinfo.get_v6_heat(pos)
init_perlins()
if not mgv6_perlin_biome then
return nil
end
local bpos = vector.floor(pos)
-- The temperature noise needs a special offset (see calculateNoise in mapgen_v6.cpp)
return mgv6_perlin_biome:get_2d({x=bpos.x + mgv6_np_biome.spread.x*0.6, y=bpos.z + mgv6_np_biome.spread.z*0.2})
end
function biomeinfo.get_v6_humidity(pos)
init_perlins()
if not mgv6_perlin_humidity then
return nil
end
local bpos = vector.floor(pos)
return mgv6_perlin_humidity:get_2d({x=bpos.x, y=bpos.z})
end
-- Returns the v6 biome at pos.
-- Returns a string representing the biome name.
function biomeinfo.get_v6_biome(pos)
init_perlins()
local bpos = vector.floor(pos)
-- Based on the algorithm MapgenV6::getBiome in mapgen_v6.cpp
local pos2d = {x=bpos.x, y=bpos.z}
if not mgv6_perlin_biome or not mgv6_perlin_humidity then
return "???"
end
local d = biomeinfo.get_v6_heat(bpos)
local h = biomeinfo.get_v6_humidity(bpos)
if (v6_use_snow_biomes) then
local blend
if v6_use_biome_blend then
blend = noise2d(pos2d.x, pos2d.y, seed) / 40
else
blend = 0
end
if (d > MGV6_FREQ_HOT + blend) then
if (h > MGV6_FREQ_JUNGLE + blend) then
return BT_JUNGLE
end
return BT_DESERT
end
if (d < MGV6_FREQ_SNOW + blend) then
if (h > MGV6_FREQ_TAIGA + blend) then
return BT_TAIGA
end
return BT_TUNDRA
end
return BT_NORMAL
end
if (d > v6_freq_desert) then
return BT_DESERT
end
if ((v6_use_biome_blend) and (d > v6_freq_desert - 0.10) and
((noise2d(pos2d.x, pos2d.y, seed) + 1.0) > (v6_freq_desert - d) * 20.0)) then
return BT_DESERT
end
if ((v6_use_jungles) and (h > 0.75)) then
return BT_JUNGLE
end
return BT_NORMAL
end

View File

@ -0,0 +1,2 @@
name = biomeinfo
description = Simple API to get data about biomes.

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,26 @@
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)
if dir then
local cpos = vector.add(pos, dir)
local cnode = minetest.get_node(cpos)
if minetest.get_item_group(cnode.name, "solid") == 0 then
minetest.remove_node(pos)
local drops = minetest.get_node_drops(node.name, "")
for dr=1, #drops do
minetest.add_item(pos, drops[dr])
end
ret = true
end
end
end
return ret_o or ret
end

View File

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

View File

@ -1,17 +1,31 @@
-- 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]"
mcl_vars.gui_bg = "bgcolor[#080808BB;true]"
mcl_vars.gui_bg_img = ""
-- nonbg is added as formspec prepend in mcl_formspec_prepend
mcl_vars.gui_nonbg = mcl_vars.gui_slots ..
"style_type[image_button;border=false;bgimg=mcl_inventory_button9.png;bgimg_pressed=mcl_inventory_button9_pressed.png;bgimg_middle=2,2]"..
"style_type[button;border=false;bgimg=mcl_inventory_button9.png;bgimg_pressed=mcl_inventory_button9_pressed.png;bgimg_middle=2,2]"..
"style_type[field;textcolor=#323232]"..
"style_type[label;textcolor=#323232]"..
"style_type[textarea;textcolor=#323232]"..
"style_type[checkbox;textcolor=#323232]"
mcl_vars.inventory_header = mcl_vars.gui_slots .. mcl_vars.gui_bg
-- Background stuff must be manually added by mods (no formspec prepend)
mcl_vars.gui_bg_color = "bgcolor[#00000000]"
mcl_vars.gui_bg_img = "background9[1,1;1,1;mcl_base_textures_background9.png;true;7]"
-- Legacy
mcl_vars.inventory_header = ""
-- 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 +46,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 +68,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 + 74, 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

@ -4,6 +4,9 @@ Licenses of sounds
Creative Commons Attribution-ShareAlike 3.0 Unported (CC BY-SA 3.0)
http://creativecommons.org/licenses/by-sa/3.0/
Creative Commons Attribution-ShareAlike 4.0 International (CC BY-SA 4.0)
http://creativecommons.org/licenses/by-sa/4.0/
Creative Commons Attribution 3.0 Unported (CC BY-SA 3.0)
http://creativecommons.org/licenses/by/3.0/
@ -67,17 +70,28 @@ 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/>
Alecia Shepherd (CC BY-SA 4.0):
mcl_sounds_cloth.ogg
Source: SnowSong sound and music pack <https://opengameart.org/content/snowsong-sound-and-music-pack>
Unknown authors (WTFPL):
pedology_snow_soft_footstep.*.ogg

View File

@ -97,6 +97,20 @@ function mcl_sounds.node_sound_wood_defaults(table)
return table
end
function mcl_sounds.node_sound_wool_defaults(table)
table = table or {}
table.footstep = table.footstep or
{name="mcl_sounds_cloth", gain=0.5}
table.dug = table.dug or
{name="mcl_sounds_cloth", gain=1.0}
table.dig = table.dig or
{name="mcl_sounds_cloth", gain=0.9}
table.place = table.dig or
{name="mcl_sounds_cloth", gain=1.0}
mcl_sounds.node_sound_defaults(table)
return table
end
function mcl_sounds.node_sound_leaves_defaults(table)
table = table or {}
table.footstep = table.footstep or
@ -134,3 +148,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}, true)
end)

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

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
@ -174,14 +174,15 @@ function mcl_util.move_item(source_inventory, source_list, source_stack_id, dest
if not source_inventory:is_empty(source_list) then
local stack = source_inventory:get_stack(source_list, source_stack_id)
local item = stack:get_name()
if not stack:is_empty() then
if not destination_inventory:room_for_item(destination_list, item) then
local new_stack = ItemStack(stack)
new_stack:set_count(1)
if not destination_inventory:room_for_item(destination_list, new_stack) then
return false
end
stack:take_item()
source_inventory:set_stack(source_list, source_stack_id, stack)
destination_inventory:add_item(destination_list, item)
destination_inventory:add_item(destination_list, new_stack)
return true
end
end
@ -205,6 +206,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 +241,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 +287,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 +341,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,13 +378,14 @@ 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
minetest.sound_play(idef.sounds.place, {pos=pointed_thing.above, gain=1})
minetest.sound_play(idef.sounds.place, {pos=pointed_thing.above, gain=1}, true)
end
end
itemstack = new_itemstack

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

@ -12,32 +12,34 @@ minetest.register_entity("drippingwater:drop_water", {
hp_max = 1,
physical = true,
collide_with_objects = false,
collisionbox = {0,0,0,0,0,0},
collisionbox = {-0.025,-0.05,-0.025,0.025,-0.01,0.025},
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},
spritediv = {x=1, y=1},
initial_sprite_basepos = {x=0, y=0},
static_save = false,
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
self.object:remove()
minetest.sound_play({name="drippingwater_drip"}, {pos = ownpos, gain = 0.5, max_hear_distance = 8})
minetest.sound_play({name="drippingwater_drip"}, {pos = ownpos, gain = 0.5, max_hear_distance = 8}, true)
end
end,
})
@ -50,33 +52,36 @@ minetest.register_entity("drippingwater:drop_lava", {
hp_max = 1,
physical = true,
collide_with_objects = false,
collisionbox = {0,0,0,0,0,0},
collisionbox = {-0.025,-0.05,-0.025,0.025,-0.01,0.025},
glow = math.max(7, minetest.registered_nodes["mcl_core:lava_source"].light_source - 3),
pointable = false,
visual = "cube",
visual_size = {x=0.05, y=0.1},
textures = {lava_tex, lava_tex, lava_tex, lava_tex, lava_tex, lava_tex},
spritediv = {x=1, y=1},
initial_sprite_basepos = {x=0, y=0},
static_save = false,
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
if minetest.get_node({x=ownpos.x, y=ownpos.y -0.5, z=ownpos.z}).name ~= "air" then
self.object:remove()
minetest.sound_play({name="drippingwater_lavadrip"}, {pos = ownpos, gain = 0.5, max_hear_distance = 8})
minetest.sound_play({name="drippingwater_lavadrip"}, {pos = ownpos, gain = 0.5, max_hear_distance = 8}, true)
end
end,
})
@ -88,7 +93,7 @@ minetest.register_entity("drippingwater:drop_lava", {
minetest.register_abm(
{
label = "Create water drops",
nodenames = {"group:solid"},
nodenames = {"group:opaque", "group:leaves"},
neighbors = {"group:water"},
interval = 2,
chance = 22,
@ -106,7 +111,7 @@ minetest.register_abm(
minetest.register_abm(
{
label = "Create lava drops",
nodenames = {"group:solid"},
nodenames = {"group:opaque"},
neighbors = {"group:lava"},
interval = 2,
chance = 22,

View File

@ -1,3 +1,4 @@
local S = minetest.get_translator("mcl_boats")
--
-- Helper functions
--
@ -33,6 +34,8 @@ local boat_visual_size = {x = 3, y = 3}
local driver_visual_size = { x = 1/boat_visual_size.x, y = 1/boat_visual_size.y }
local paddling_speed = 22
local boat_y_offset = 0.35
local boat_y_offset_ground = boat_y_offset + 0.6
local boat_side_offset = 1.001
--
-- Boat entity
@ -67,9 +70,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 +85,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,20 +134,41 @@ 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)
local on_water = true
local in_water = false
local v_factor = 1
local v_slowdown = 0.02
local p = self.object:get_pos()
if (not is_water({x=p.x, y=p.y-boat_y_offset, z=p.z})) then
on_water = false
v_factor = 0.5
v_slowdown = 0.04
elseif (is_water({x=p.x, y=p.y-boat_y_offset+1, z=p.z})) then
on_water = false
in_water = true
v_factor = 0.75
v_slowdown = 0.05
end
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
self._v = self._v + 0.1 * v_factor
-- Paddling animation
if self._animation ~= 1 then
@ -152,7 +177,7 @@ function boat.on_step(self, dtime)
end
elseif ctrl.down then
-- Backwards
self._v = self._v - 0.1
self._v = self._v - 0.1 * v_factor
-- Paddling animation, reversed
if self._animation ~= -1 then
@ -168,15 +193,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 * v_factor)
else
self.object:setyaw(yaw + (1 + dtime) * 0.03)
self.object:set_yaw(yaw + (1 + dtime) * 0.03 * v_factor)
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 * v_factor)
else
self.object:setyaw(yaw - (1 + dtime) * 0.03)
self.object:set_yaw(yaw - (1 + dtime) * 0.03 * v_factor)
end
end
else
@ -186,73 +211,65 @@ function boat.on_step(self, dtime)
self._animation = 0
end
end
local velo = self.object:getvelocity()
if self._v == 0 and velo.x == 0 and velo.y == 0 and velo.z == 0 then
self.object:setpos(self.object:getpos())
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._v = 0
return
if not on_water and not in_water and math.abs(self._v) > 1.0 then
v_slowdown = math.min(math.abs(self._v) - 1.0, v_slowdown * 5)
elseif in_water and math.abs(self._v) > 1.5 then
v_slowdown = math.min(math.abs(self._v) - 1.5, v_slowdown * 5)
end
if math.abs(self._v) > 5 then
self._v = 5 * get_sign(self._v)
self._v = self._v - v_slowdown * s
if s ~= get_sign(self._v) then
self._v = 0
end
local p = self.object:getpos()
p.y = p.y - boat_y_offset
local new_velo
local new_acce = {x = 0, y = 0, z = 0}
if not is_water(p) then
-- Not on water or inside water: Free fall
local nodedef = minetest.registered_nodes[minetest.get_node(p).name]
if (not nodedef) or nodedef.walkable then
self._v = 0
new_acce = {x = 0, y = 1, z = 0}
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_acce = {x = 0, y = -9.8, z = 0}
new_velo = get_velocity(self._v, self.object:get_yaw(),
self.object:get_velocity().y)
else
p.y = p.y + 1
if is_water(p) then
local y = self.object:getvelocity().y
if y >= 5 then
y = 5
elseif y < 0 then
new_acce = {x = 0, y = 20, z = 0}
else
new_acce = {x = 0, y = 5, z = 0}
-- Inside water: Slowly sink
local y = self.object:get_velocity().y
y = y - 0.01
if y < -0.2 then
y = -0.2
end
new_velo = get_velocity(self._v, self.object:getyaw(), y)
self.object:setpos(self.object:getpos())
else
new_acce = {x = 0, y = 0, z = 0}
if math.abs(self.object:getvelocity().y) < 1 then
local pos = self.object:getpos()
pos.y = math.floor(pos.y) + boat_y_offset
self.object:setpos(pos)
new_velo = get_velocity(self._v, self.object:getyaw(), 0)
new_velo = get_velocity(self._v, self.object:get_yaw(), y)
else
-- On top of water
new_acce = {x = 0, y = 0, z = 0}
if math.abs(self.object:get_velocity().y) < 0 then
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)
end
end
end
self.object:setvelocity(new_velo)
self.object:setacceleration(new_acce)
-- Terminal velocity: 8 m/s per axis of travel
for _,axis in pairs({"z","y","x"}) do
if math.abs(new_velo[axis]) > 8 then
new_velo[axis] = 8 * get_sign(new_velo[axis])
end
end
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" }
@ -262,18 +279,20 @@ local images = { "oak", "spruce", "birch", "jungle", "acacia", "dark_oak" }
for b=1, #boat_ids do
local itemstring = "mcl_boats:"..boat_ids[b]
local longdesc, usagehelp, help, helpname
local longdesc, usagehelp, tt_help, help, helpname
help = false
-- 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
tt_help = S("Water vehicle")
minetest.register_craftitem(itemstring, {
description = names[b],
_tt_help = tt_help,
_doc_items_create_entry = help,
_doc_items_entry_name = helpname,
_doc_items_longdesc = longdesc,
@ -284,7 +303,7 @@ for b=1, #boat_ids do
stack_max = 1,
on_place = function(itemstack, placer, pointed_thing)
if pointed_thing.type ~= "node" then
return
return itemstack
end
-- Call on_rightclick if the pointed node defines it
@ -295,18 +314,35 @@ for b=1, #boat_ids do
end
end
if not is_water(pointed_thing.under) then
return
local pos = table.copy(pointed_thing.under)
local dir = vector.subtract(pointed_thing.above, pointed_thing.under)
if math.abs(dir.x) > 0.9 or math.abs(dir.z) > 0.9 then
pos = vector.add(pos, vector.multiply(dir, boat_side_offset))
elseif is_water(pos) then
pos = vector.add(pos, vector.multiply(dir, boat_y_offset))
else
pos = vector.add(pos, vector.multiply(dir, boat_y_offset_ground))
end
pointed_thing.under.y = pointed_thing.under.y + boat_y_offset
local boat = minetest.add_entity(pointed_thing.under, "mcl_boats:boat")
local boat = minetest.add_entity(pos, "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,11 @@
# textdomain: mcl_boats
Acacia Boat=Akazienboot
Birch Boat=Birkenboot
Boat=Boot
Boats are used to travel on the surface of water.=Boote werden benutzt, um sich auf der Wasseroberfläche zu bewegen.
Dark Oak Boat=Schwarzeichenboot
Jungle Boat=Dschungelboot
Oak Boat=Eichenboot
Rightclick on a water source to place the boat. Rightclick the boat to enter it. Use [Left] and [Right] to steer, [Forwards] to speed up and [Backwards] to slow down or move backwards. Rightclick the boat again to leave it, punch the boat to make it drop as an item.=Rechtsklicken Sie auf eine Wasserquelle, um das Boot zu platzieren. Rechtsklicken Sie auf das Boot, um es zu betreten. Mit [Links] und [Rechts] lenken, mit [Vorwärts] und [Rückwärts] Geschwindigkeit regeln oder rückwärts fahren. Rechtsklicken Sie erneut auf das Boot, um es zu verlassen, schlagen Sie das Boot, um es als Gegenstand fallen zu lassen.
Spruce Boat=Fichtenboot
Water vehicle=Wasserfahrzeug

View File

@ -0,0 +1,10 @@
# textdomain: mcl_boats
Acacia Boat=Barca de acacia
Birch Boat=Barca de abedul
Boat=Barca
Boats are used to travel on the surface of water.=Las barcas se utilizan para viajar en la superficie del agua.
Dark Oak Boat=Barca de roble oscuro
Jungle Boat=Barca de la selva
Oak Boat=Barca de roble
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.=Haga clic derecho en una fuente de agua para colocar el barco. Haga clic derecho en el barco para entrar. Utilice [Izquierda] y [Derecha] para dirigir, [Adelante] para acelerar y [Atrás] para reducir la velocidad o retroceder. Haga clic derecho en el barco nuevamente para dejarlo, golpee el barco para que se caiga como un artículo.
Spruce Boat=Barca de abeto

View File

@ -0,0 +1,11 @@
# textdomain: mcl_boats
Acacia Boat=
Birch Boat=
Boat=
Boats are used to travel on the surface of water.=
Dark Oak Boat=
Jungle Boat=
Oak Boat=
Rightclick on a water source to place the boat. Rightclick the boat to enter it. Use [Left] and [Right] to steer, [Forwards] to speed up and [Backwards] to slow down or move backwards. Rightclick the boat again to leave it, punch the boat to make it drop as an item.=
Spruce Boat=
Water vehicle=

View File

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

View File

@ -0,0 +1,276 @@
local S = minetest.get_translator("mcl_falling_nodes")
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("@1 was smashed by a falling anvil.", v:get_player_name())
else
msg = S("@1 was smashed by a falling block.", v:get_player_name())
end
if dmes then
mcl_death_messages.player_damage(v, msg)
end
end
v:set_hp(hp, { type = "punch", from = "mod" })
end
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)
local def = minetest.registered_nodes[node.name]
-- Change falling node if definition tells us to
if def and def._mcl_falling_node_alternative then
node.name = def._mcl_falling_node_alternative
end
local glow
self.node = node
self.meta = meta or {}
-- Set correct entity yaw
if def and node.param2 ~= 0 then
if (def.paramtype2 == "facedir" or def.paramtype2 == "colorfacedir") then
self.object:set_yaw(minetest.dir_to_yaw(minetest.facedir_to_dir(node.param2)))
elseif (def.paramtype2 == "wallmounted" or def.paramtype2 == "colorwallmounted") then
self.object:set_yaw(minetest.dir_to_yaw(minetest.wallmounted_to_dir(node.param2)))
end
if def.light_source then
glow = def.light_source
end
end
self.object:set_properties({
is_visible = true,
textures = {node.name},
glow = glow,
})
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
local def = minetest.registered_nodes[self.node.name]
if def then
minetest.add_node(np, self.node)
if def._mcl_after_falling then
def._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
if def.sounds and def.sounds.place and def.sounds.place.name then
minetest.sound_play(def.sounds.place, {pos = np}, true)
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)
local def = minetest.registered_nodes[self.node.name]
if def then
if def._mcl_after_falling then
def._mcl_after_falling(npos3, get_falling_depth(self))
end
if def.sounds and def.sounds.place and def.sounds.place.name then
minetest.sound_play(def.sounds.place, {pos = np}, true)
end
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,3 @@
# textdomain: mcl_falling_nodes
@1 was smashed by a falling anvil.=@1 wurde von einem fallenden Amboss zerschmettert.
@1 was smashed by a falling block.=@1 wurde von einem fallenden Block zerschmettert.

View File

@ -0,0 +1,3 @@
# textdomain: mcl_falling_nodes
@1 was smashed by a falling anvil.=@1 fue aplastado por la caída de un yunque.
@1 was smashed by a falling block.=@1 fue aplastado por la caída de un bloque.

View File

@ -0,0 +1,3 @@
# textdomain: mcl_falling_nodes
@1 was smashed by a falling anvil.=
@1 was smashed by a falling block.=

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,43 +55,37 @@ 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", {
pos = pos,
max_hear_distance = 16,
gain = 1.0,
})
}, true)
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
@ -134,7 +129,7 @@ minetest.register_globalstep(function(dtime)
pos = pos,
max_hear_distance = 16,
gain = 1.0,
})
}, true)
end
check_pickup_achievements(object, player)
object:get_luaentity()._removed = true
@ -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)
local doTileDrops = minetest.settings:get_bool("mcl_doTileDrops") or true
if minetest.settings:get_bool("creative_mode") or doTileDrops == false then
-- NOTE: This function override allows digger to be nil.
-- This means there is no digger. This is a special case which allows this function to be called
-- by hand. Creative Mode is intentionally ignored in this case.
local doTileDrops = minetest.settings:get_bool("mcl_doTileDrops", true)
if (digger ~= 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,22 @@ 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 dpos = table.copy(pos)
-- Apply offset for plantlike_rooted nodes because of their special shape
if nodedef and nodedef.drawtype == "plantlike_rooted" and nodedef.walkable then
dpos.y = dpos.y + 1
end
-- Spawn item and apply random speed
local obj = minetest.add_item(dpos, drop_item)
if obj ~= nil then
local x = math.random(1, 5)
if math.random(1,2) == 1 then
@ -262,7 +270,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
@ -278,12 +286,12 @@ function minetest.item_drop(itemstack, dropper, pos)
cs = 1
end
local item = itemstack:take_item(cs)
local obj = core.add_item(p, item)
local obj = minetest.add_item(p, item)
if obj then
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,17 +301,18 @@ 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
core.register_entity(":__builtin:item", {
minetest.register_entity(":__builtin:item", {
initial_properties = {
hp_max = 1,
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 +322,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()
@ -331,8 +350,6 @@ core.register_entity(":__builtin:item", {
count = max_count
self.itemstring = stack:get_name().." "..max_count
end
local s = 0.2 + 0.1 * (count / max_count)
local c = s
local itemtable = stack:to_table()
local itemname = nil
local description = ""
@ -341,11 +358,18 @@ core.register_entity(":__builtin:item", {
end
local item_texture = nil
local item_type = ""
if core.registered_items[itemname] then
item_texture = core.registered_items[itemname].inventory_image
item_type = core.registered_items[itemname].type
description = core.registered_items[itemname].description
local glow
local def = minetest.registered_items[itemname]
if def then
item_texture = def.inventory_image
item_type = def.type
description = def.description
glow = def.light_source
end
local s = 0.2 + 0.1 * (count / max_count)
local wield_scale = (def and def.wield_scale and def.wield_scale.x) or 1
local c = s
s = s / wield_scale
local prop = {
is_visible = true,
visual = "wielditem",
@ -354,6 +378,7 @@ core.register_entity(":__builtin:item", {
collisionbox = {-c, -c, -c, c, c, c},
automatic_rotate = math.pi * 0.5,
infotext = description,
glow = glow,
}
self.object:set_properties(prop)
if item_drop_settings.random_item_velocity == true then
@ -361,7 +386,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 +397,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
@ -380,7 +405,7 @@ core.register_entity(":__builtin:item", {
end,
get_staticdata = function(self)
return core.serialize({
return minetest.serialize({
itemstring = self.itemstring,
always_collect = self.always_collect,
age = self.age,
@ -392,7 +417,7 @@ core.register_entity(":__builtin:item", {
on_activate = function(self, staticdata, dtime_s)
if string.sub(staticdata, 1, string.len("return")) == "return" then
local data = core.deserialize(staticdata)
local data = minetest.deserialize(staticdata)
if data and type(data) == "table" then
self.itemstring = data.itemstring
self.always_collect = data.always_collect
@ -432,8 +457,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,15 +513,16 @@ 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 node = core.get_node_or_nil(p)
local p = self.object:get_pos()
local node = minetest.get_node_or_nil(p)
local in_unloaded = (node == nil)
-- If no collector was found for a long enough time, declare the magnet as disabled
@ -511,13 +537,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}, true)
end
self._removed = true
self.object:remove()
@ -527,8 +555,8 @@ core.register_entity(":__builtin:item", {
-- Push item out when stuck inside solid opaque node
if def and def.walkable and def.groups and def.groups.opaque == 1 then
local shootdir
local cx = p.x % 1
local cz = p.z % 1
local cx = (p.x % 1) - 0.5
local cz = (p.z % 1) - 0.5
local order = {}
-- First prepare the order in which the 4 sides are to be checked.
@ -536,7 +564,7 @@ core.register_entity(":__builtin:item", {
-- 2nd: other direction
-- 3rd and 4th: other axis
local cxcz = function(o, cw, one, zero)
if cw > 0 then
if cw < 0 then
table.insert(o, { [one]=1, y=0, [zero]=0 })
table.insert(o, { [one]=-1, y=0, [zero]=0 })
else
@ -545,7 +573,7 @@ core.register_entity(":__builtin:item", {
end
return o
end
if math.abs(cx) > math.abs(cz) then
if math.abs(cx) < math.abs(cz) then
order = cxcz(order, cx, "x", "z")
order = cxcz(order, cz, "z", "x")
else
@ -574,8 +602,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 +656,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,13 +675,13 @@ 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 not minetest.registered_nodes[nn] or minetest.registered_nodes[nn].walkable and v.y == 0 then
if self.physical_state then
local own_stack = ItemStack(self.object:get_luaentity().itemstring)
-- Merge with close entities of the same item
for _, object in ipairs(core.get_objects_inside_radius(p, 0.8)) do
for _, object in ipairs(minetest.get_objects_inside_radius(p, 0.8)) do
local obj = object:get_luaentity()
if obj and obj.name == "__builtin:item"
and obj.physical_state == false then
@ -673,7 +701,3 @@ core.register_entity(":__builtin:item", {
-- Note: on_punch intentionally left out. The player should *not* be able to collect items by punching
})
if minetest.settings:get_bool("log_mods") then
minetest.log("action", "mcl_item_entity loaded")
end

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,14 +1,57 @@
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")
local function detach_driver(self)
if not self._driver then
return
end
mcl_player.player_attached[self._driver] = nil
local player = minetest.get_player_by_name(self._driver)
self._driver = nil
self._start_pos = nil
if player then
player:set_detach()
player:set_eye_offset({x=0, y=0, z=0},{x=0, y=0, z=0})
mcl_player.player_set_animation(player, "stand" , 30)
end
end
local function activate_tnt_minecart(self, timer)
if self._boomtimer then
return
end
self.object:set_armor_groups({immortal=1})
if timer then
self._boomtimer = timer
else
self._boomtimer = tnt.BOOMTIMER
end
self.object:set_properties({textures = {
"mcl_tnt_blink.png",
"mcl_tnt_blink.png",
"mcl_tnt_blink.png",
"mcl_tnt_blink.png",
"mcl_tnt_blink.png",
"mcl_tnt_blink.png",
"mcl_minecarts_minecart.png",
}})
self._blinktimer = tnt.BLINKTIMER
minetest.sound_play("tnt_ignite", {pos = self.object:get_pos(), gain = 1.0, max_hear_distance = 15}, true)
end
local activate_normal_minecart = detach_driver
-- Table for item-to-entity mapping. Keys: itemstring, Values: Corresponding entity ID
local entity_mapping = {}
local function register_entity(entity_id, mesh, textures, drop, on_rightclick)
local function register_entity(entity_id, mesh, textures, drop, on_rightclick, on_activate_by_rail)
local cart = {
physical = false,
collisionbox = {-10/16., -0.5, -10/16, 10/16, 0.25, 10/16},
@ -23,6 +66,11 @@ 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
_fueltime = nil, -- how many seconds worth of fuel is left. Only used by minecart with furnace
_boomtimer = nil, -- how many seconds are left before exploding
_blinktimer = nil, -- how many seconds are left before TNT blinking
_blink = false, -- is TNT blink texture active?
_old_dir = {x=0, y=0, z=0},
_old_pos = nil,
_old_vel = {x=0, y=0, z=0},
@ -31,11 +79,25 @@ local function register_entity(entity_id, mesh, textures, drop, on_rightclick)
}
function cart:on_activate(staticdata, dtime_s)
-- Initialize
local data = minetest.deserialize(staticdata)
if type(data) == "table" then
self._railtype = data._railtype
end
self.object:set_armor_groups({immortal=1})
-- Activate cart if on activator rail
if self.on_activate_by_rail then
local pos = self.object:get_pos()
local node = minetest.get_node(vector.floor(pos))
if node.name == "mcl_minecarts:activator_rail_on" then
self:on_activate_by_rail()
end
end
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")
@ -52,16 +114,13 @@ local function register_entity(entity_id, mesh, textures, drop, on_rightclick)
return
end
if puncher:get_player_control().sneak then
-- Punch+sneak: Pick up minecart (unless TNT was ignited)
if puncher:get_player_control().sneak and not self._boomtimer then
if self._driver then
if self._old_pos then
self.object:setpos(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()
self.object:set_pos(self._old_pos)
end
detach_driver(self)
end
-- Disable detector rail
@ -76,7 +135,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 +150,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
@ -106,33 +172,150 @@ local function register_entity(entity_id, mesh, textures, drop, on_rightclick)
self._punched = true
end
cart.on_activate_by_rail = on_activate_by_rail
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
-- Explode if already ignited
if self._boomtimer then
self.object:remove()
tnt.boom(pos)
return
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
-- Update furnace stuff
if self._fueltime and self._fueltime > 0 then
self._fueltime = self._fueltime - dtime
if self._fueltime <= 0 then
self.object:set_properties({textures =
{
"default_furnace_top.png",
"default_furnace_top.png",
"default_furnace_front.png",
"default_furnace_side.png",
"default_furnace_side.png",
"default_furnace_side.png",
"mcl_minecarts_minecart.png",
}})
self._fueltime = 0
end
end
local has_fuel = self._fueltime and self._fueltime > 0
-- Update TNT stuff
if self._boomtimer then
-- Explode
self._boomtimer = self._boomtimer - dtime
local pos = self.object:get_pos()
if self._boomtimer <= 0 then
self.object:remove()
tnt.boom(pos)
return
else
tnt.smoke_step(pos)
end
end
if self._blinktimer then
self._blinktimer = self._blinktimer - dtime
if self._blinktimer <= 0 then
self._blink = not self._blink
if self._blink then
self.object:set_properties({textures =
{
"default_tnt_top.png",
"default_tnt_bottom.png",
"default_tnt_side.png",
"default_tnt_side.png",
"default_tnt_side.png",
"default_tnt_side.png",
"mcl_minecarts_minecart.png",
}})
else
self.object:set_properties({textures =
{
"mcl_tnt_blink.png",
"mcl_tnt_blink.png",
"mcl_tnt_blink.png",
"mcl_tnt_blink.png",
"mcl_tnt_blink.png",
"mcl_tnt_blink.png",
"mcl_minecarts_minecart.png",
}})
end
self._blinktimer = tnt.BLINKTIMER
end
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
elseif vector.equals(vel, {x=0, y=0, z=0}) and (not has_fuel) 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)
if vector.equals(flo_pos, flo_old) then
if vector.equals(flo_pos, flo_old) and (not has_fuel) then
return
-- 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)
@ -143,6 +326,10 @@ local function register_entity(entity_id, mesh, textures, drop, on_rightclick)
minetest.swap_node(rou_old, newnode)
mesecon.receptor_off(rou_old)
end
-- Activate minecart if on activator rail
if node_old.name == "mcl_minecarts:activator_rail_on" and self.on_activate_by_rail then
self:on_activate_by_rail()
end
end
local ctrl, player = nil, nil
@ -158,8 +345,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)
@ -196,7 +383,7 @@ local function register_entity(entity_id, mesh, textures, drop, on_rightclick)
end
local new_acc = {x=0, y=0, z=0}
if vector.equals(dir, {x=0, y=0, z=0}) then
if vector.equals(dir, {x=0, y=0, z=0}) and not has_fuel then
vel = {x=0, y=0, z=0}
update.vel = true
else
@ -224,7 +411,9 @@ local function register_entity(entity_id, mesh, textures, drop, on_rightclick)
local acc = dir.y * -1.8
local speed_mod = minetest.registered_nodes[minetest.get_node(pos).name]._rail_acceleration
if speed_mod and speed_mod ~= 0 then
if has_fuel then
acc = acc + 0.2
elseif speed_mod and speed_mod ~= 0 then
acc = acc + speed_mod
else
acc = acc - 0.4
@ -233,7 +422,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 +451,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 +471,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 +512,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,7 +525,8 @@ mcl_minecarts.place_minecart = function(itemstack, pointed_thing)
return itemstack
end
local register_craftitem = function(itemstring, entity_id, description, longdesc, usagehelp, icon, creative)
local register_craftitem = function(itemstring, entity_id, description, tt_help, longdesc, usagehelp, icon, creative)
entity_mapping[itemstring] = entity_id
local groups = { minecart = 1, transport = 1 }
@ -356,9 +550,23 @@ 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
def._tt_help = tt_help
def._doc_items_longdesc = longdesc
def._doc_items_usagehelp = usagehelp
def.inventory_image = icon
@ -366,9 +574,24 @@ 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_entity(entity_id, mesh, textures, drop, on_rightclick)
register_craftitem(itemstring, entity_id, description, longdesc, usagehelp, icon, 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, tt_help, longdesc, usagehelp, mesh, textures, icon, drop, on_rightclick, on_activate_by_rail, creative)
register_entity(entity_id, mesh, textures, drop, on_rightclick, on_activate_by_rail)
register_craftitem(itemstring, entity_id, description, tt_help, longdesc, usagehelp, icon, creative)
if minetest.get_modpath("doc_identifier") ~= nil then
doc.sub.identifier.register_object(entity_id, "craftitems", itemstring)
end
@ -378,50 +601,64 @@ 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("Vehicle for fast travel on rails"),
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.") .. "\n" ..
S("If it moves over a powered activator rail, you'll get ejected."),
"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
local player_name = clicker:get_player_name()
if self._driver and player_name == self._driver then
self._driver = nil
self._start_pos = nil
clicker:set_detach()
detach_driver(self)
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
end, activate_normal_minecart
)
-- Minecart with Chest
register_minecart(
"mcl_minecarts:chest_minecart",
"mcl_minecarts:chest_minecart",
"Minecart with Chest",
nil, nil,
S("Minecart with Chest"),
nil, 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",
nil, nil,
S("Minecart with Furnace"),
nil,
S("A minecart with furnace is a vehicle that travels on rails. It can propel itself with fuel."),
S("Place it on rails. If you give it some coal, the furnace will start burning for a long time and the minecart will be able to move itself. Punch it to get it moving.") .. "\n" ..
S("To obtain the minecart and furnace, punch them while holding down the sneak key."),
"mcl_minecarts_minecart_block.b3d",
{
"default_furnace_top.png",
@ -452,19 +689,26 @@ register_minecart(
local inv = clicker:get_inventory()
inv:set_stack("main", index, held)
end
-- DEBUG
minetest.chat_send_player(clicker:get_player_name(), "Fuel: " .. tostring(self._fueltime))
self.object:set_properties({textures =
{
"default_furnace_top.png",
"default_furnace_top.png",
"default_furnace_front_active.png",
"default_furnace_side.png",
"default_furnace_side.png",
"default_furnace_side.png",
"mcl_minecarts_minecart.png",
}})
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",
nil, nil,
S("Minecart with Command Block"),
nil, nil, nil,
"mcl_minecarts_minecart_block.b3d",
{
"jeija_commandblock_off.png^[verticalframe:2:0",
@ -477,16 +721,15 @@ 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",
nil, nil,
S("Minecart with Hopper"),
nil, nil, nil,
"mcl_minecarts_minecart_hopper.b3d",
{
"mcl_hoppers_hopper_inside.png",
@ -495,15 +738,19 @@ 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",
nil, nil,
S("Minecart with TNT"),
S("Vehicle for fast travel on rails").."\n"..S("Can be ignited by tools or powered activator rail"),
S("A minecart with TNT is an explosive vehicle that travels on rail."),
S("Place it on rails. Punch it to move it. The TNT is ignited with a flint and steel or when the minecart is on an powered activator rail.") .. "\n" ..
S("To obtain the minecart and TNT, punch them while holding down the sneak key. You can't do this if the TNT was ignited."),
"mcl_minecarts_minecart_block.b3d",
{
"default_tnt_top.png",
@ -515,8 +762,26 @@ register_minecart(
"mcl_minecarts_minecart.png",
},
"mcl_minecarts_minecart_tnt.png",
{"mcl_minecarts:minecart", "mcl_tnt:tnt"}
)
{"mcl_minecarts:minecart", "mcl_tnt:tnt"},
-- Ingite
function(self, clicker)
if not clicker or not clicker:is_player() then
return
end
if self._boomtimer then
return
end
local held = clicker:get_wielded_item()
if held:get_name() == "mcl_fire:flint_and_steel" then
if not minetest.settings:get_bool("creative_mode") then
held:add_wear(65535/65) -- 65 uses
local index = clicker:get_wield_index()
local inv = clicker:get_inventory()
inv:set_stack("main", index, held)
end
activate_tnt_minecart(self)
end
end, activate_tnt_minecart)
minetest.register_craft({
@ -527,6 +792,25 @@ minetest.register_craft({
},
})
minetest.register_craft({
output = "mcl_minecarts:tnt_minecart",
recipe = {
{"mcl_tnt:tnt"},
{"mcl_minecarts:minecart"},
},
})
-- TODO: Re-enable crafting of special minecarts when they have been implemented
if false then
minetest.register_craft({
output = "mcl_minecarts:furnace_minecart",
recipe = {
{"mcl_furnaces:furnace"},
{"mcl_minecarts:minecart"},
},
})
minetest.register_craft({
output = "mcl_minecarts:hopper_minecart",
recipe = {
@ -543,18 +827,4 @@ minetest.register_craft({
},
})
minetest.register_craft({
output = "mcl_minecarts:tnt_minecart",
recipe = {
{"mcl_tnt:tnt"},
{"mcl_minecarts:minecart"},
},
})
minetest.register_craft({
output = "mcl_minecarts:furnace_minecart",
recipe = {
{"mcl_furnaces:furnace"},
{"mcl_minecarts:minecart"},
},
})
end

View File

@ -0,0 +1,35 @@
# textdomain: mcl_minecarts
Minecart=Lore
Minecarts can be used for a quick transportion on rails.=Loren können für eine schnelle Fahrt auf Schienen benutzt werden.
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.=Loren fahren nur auf Schienen und bleiben immer auf der Strecke. An einer Einmündung ohne einem Weg nach vorne fahren sie nach links. Die Geschwindigkeit hängt vom Schienentyp ab.
You can place the minecart on rails. Right-click it to enter it. Punch it to get it moving.=Sie können die Lore auf Schienen platzieren. Rechtsklicken, um einzusteigen.
To obtain the minecart, punch it while holding down the sneak key.=Um die Lore aufzusammeln, schlagen Sie sie, während Sie die Schleichen-Taste gedrückt halten.
A minecart with TNT is an explosive vehicle that travels on rail.=Eine Lore mit TNT ist ein explosives Fahrzeug, das auf Schienen fährt.
Place it on rails. Punch it to move it. The TNT is ignited with a flint and steel or when the minecart is on an powered activator rail.=Auf Schienen platzieren. Zuschlagen zum Bewegen. Das TNT wird mit einem Feuerzeug angezündet, oder, wenn die Lore sich auf einer bestromten Aktivierungsschiene befindet.
To obtain the minecart and TNT, punch them while holding down the sneak key. You can't do this if the TNT was ignited.=Um die Lore und das TNT zu erhalten, schlagen Sie sie, während Sie die Schleichtaste drücken. Das ist nicht möglich, wenn das TNT bereits gezündet wurde.
A minecart with furnace is a vehicle that travels on rails. It can propel itself with fuel.=Eine Lore mit Ofen ist ein Fahrzeug, das auf Rädern fährt. Sie kann mit Brennstoff angetrieben werden.
Place it on rails. If you give it some coal, the furnace will start burning for a long time and the minecart will be able to move itself. Punch it to get it moving.=Auf Schienen platzieren. Wird Kohle eingefügt, wird der Ofen für eine lange Zeit brennen und die Lore wird fähig sein, sich selbst anzutreiben. Zuschlagen, um die Bewegung einzuläuten.
To obtain the minecart and furnace, punch them while holding down the sneak key.=Um die Lore und den Ofen zu erhalten, schlagen Sie zu, während Sie die Schleichtaste drücken.
Minecart with Chest=Lore mit Truhe
Minecart with Furnace=Lore mit Ofen
Minecart with Command Block=Lore mit Befehlsblock
Minecart with Hopper=Lore mit Trichter
Minecart with TNT=Lore mit TNT
Place them on the ground to build your railway, the rails will automatically connect to each other and will turn into curves, T-junctions, crossings and slopes as needed.=Bauen Sie sie auf den Boden, um Ihr Schienennetzwerk zu errichten, die Schienen werden sich automatisch verbinden und sich nach Bedarf in Kurven, Einmündungen, Kreuzungen und Steigungen verwandeln.
Rail=Schiene
Rails can be used to build transport tracks for minecarts. Normal rails slightly slow down minecarts due to friction.=Schienen können benutzt werden, um Strecken für Loren zu bauen. Normale Schienen werden Loren aufgrund von Reibung leicht verlangsamen.
Powered Rail=Antriebsschiene
Rails can be used to build transport tracks for minecarts. Powered rails are able to accelerate and brake minecarts.=Schienen können benutzt werden, um Strecken für Loren zu bauen. Antriebsschienen können Loren beschleunigen und abbremsen.
Without redstone power, the rail will brake minecarts. To make this rail accelerate minecarts, power it with redstone power.=Ohne Redstone-Energie wird die Schiene Loren abbremsen. Mit Redstone-Energie wird sie sie beschleunigen.
Activator Rail=Aktivierungsschiene
Rails can be used to build transport tracks for minecarts. Activator rails are used to activate special minecarts.=Schienen können benutzt werden, um Strecken für Loren zu bauen. Aktivierungsschienen werden benutzt, um besondere Loren zu aktivieren.
To make this rail activate minecarts, power it with redstone power and send a minecart over this piece of rail.=Wenn diese Schiene mit Redstone-Energie versorgt wird, werden alle Loren, die sie passieren, aktiviert.
Detector Rail=Sensorschiene
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.=Schienen können benutzt werden, um Strecken für Loren zu bauen. Eine Sensorschiene kann eine Lore erkennen und versorgt Redstone-Mechanismen.
To detect a minecart and provide redstone power, connect it to redstone trails or redstone mechanisms and send any minecart over the rail.=Um eine Lore zu erkennen und die Redstone-Energie zu aktivieren, verbinden Sie die Schiene mit Redstonestaub oder Redstone-Mechanismen und schicken Sie eine beliebige Lore über die Schiene.
Track for minecarts=Strecke für Loren
Speed up when powered, slow down when not powered=Beschleunigt, wenn bestromt, sonst verlangsamt es
Activates minecarts when powered=Aktiviert Loren, wenn bestromt
Emits redstone power when a minecart is detected=Gibt ein Redstonesignal aus, wenn eine Lore erfasst wird
Vehicle for fast travel on rails=Fahrzeug zum schnellen Transport auf Schienen
Can be ignited by tools or powered activator rail=Kann mit Werkzeugen oder bestromten Aktivierungsschienen angezündet werden

View File

@ -0,0 +1,23 @@
# textdomain: mcl_minecarts
Minecart=Vagoneta
Minecarts can be used for a quick transportion on rails.=Las vagonetas se pueden usar para transportarse rápido en los rieles.
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.=Las vagonetas solo viajan en rieles y siempre siguen las pistas. En un cruce en T sin camino recto, giran a la izquierda. La velocidad se ve afectada por el tipo de riel.
You can place the minecart on rails. Right-click it to enter it. Punch it to get it moving.=Puedes colocar el vagoneta en los rieles. Haga clic derecho para insertarlo. Golpea para que se mueva.
To obtain the minecart, punch it while holding down the sneak key.=Para obtener el vagoneta, golpéalo mientras mantienes presionada la tecla.
Minecart with Chest=Vagoneta con cofre
Minecart with Furnace=Vagoneta con horno
Minecart with Command Block=Vagoneta con bloque de comandos
Minecart with Hopper=Vagoneta con tolva
Minecart with TNT=Vagoneta con dinamita
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.=Colóquelos en el suelo para construir su ferrocarril, los rieles se conectarán automáticamente entre sí y se convertirán en curvas, uniones en T, cruces y pendientes según sea necesario.
Rail=Raíl
Rails can be used to build transport tracks for minecarts. Normal rails slightly slow down minecarts due to friction.=Los rieles se pueden usar para construir vías de transporte para vagonetas. Los rieles normales ralentizan ligeramente las vagonetas debido a la fricción.
Powered Rail=Raíl propulsor
Rails can be used to build transport tracks for minecarts. Powered rails are able to accelerate and brake minecarts.=Los rieles se pueden usar para construir vías de transporte para vagonetas. Los railes propulsores pueden acelerar y frenar las vagonetas.
Without redstone power, the rail will brake minecarts. To make this rail accelerate minecarts, power it with redstone power.=Sin energía de redstone, el riel frenará las vagonetas. Para hacer que este riel acelere las vagonetas, aliméntalo con redstone.
Activator Rail=Raíl activador
Rails can be used to build transport tracks for minecarts. Activator rails are used to activate special minecarts.=Los rieles se pueden usar para construir vías de transporte para vagonetas. Los railes activador se utilizan para activar una vagoneta especial.
To make this rail activate minecarts, power it with redstone power and send a minecart over this piece of rail.=Para hacer que este riel active las vagonetas, enciéndelo con energía de redstone y envía una vagoneta sobre este pedazo de riel.
Detector Rail=Raíl detector
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.=Los rieles se pueden usar para construir vías de transporte para vagonetas. Un raíl detector puede detectar una vagoneta sobre él y alimenta los mecanismos de redstone.
To detect a minecart and provide redstone power, connect it to redstone trails or redstone mechanisms and send any minecart over the rail.=Para detectar una vagoneta y proporcionar energía de redstone, conéctelo a los senderos de redstone o mecanismos de redstone y envíe cualquier vagoneta sobre el riel.

View File

@ -0,0 +1,35 @@
# textdomain: mcl_minecarts
Minecart=
Minecarts can be used for a quick transportion on rails.=
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.=
To obtain the minecart, punch it while holding down the sneak key.=
A minecart with TNT is an explosive vehicle that travels on rail.=
Place it on rails. Punch it to move it. The TNT is ignited with a flint and steel or when the minecart is on an powered activator rail.=
To obtain the minecart and TNT, punch them while holding down the sneak key. You can't do this if the TNT was ignited.=
A minecart with furnace is a vehicle that travels on rails. It can propel itself with fuel.=
Place it on rails. If you give it some coal, the furnace will start burning for a long time and the minecart will be able to move itself. Punch it to get it moving.=
To obtain the minecart and furnace, punch them while holding down the sneak key.=
Minecart with Chest=
Minecart with Furnace=
Minecart with Command Block=
Minecart with Hopper=
Minecart with TNT=
Place them on the ground to build your railway, the rails will automatically connect to each other and will turn into curves, T-junctions, crossings and slopes as needed.=
Rail=
Rails can be used to build transport tracks for minecarts. Normal rails slightly slow down minecarts due to friction.=
Powered Rail=
Rails can be used to build transport tracks for minecarts. Powered rails are able to accelerate and brake minecarts.=
Without redstone power, the rail will brake minecarts. To make this rail accelerate minecarts, power it with redstone power.=
Activator Rail=
Rails can be used to build transport tracks for minecarts. Activator rails are used to activate special minecarts.=
To make this rail activate minecarts, power it with redstone power and send a minecart over this piece of rail.=
Detector Rail=
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.=
To detect a minecart and provide redstone power, connect it to redstone trails or redstone mechanisms and send any minecart over the rail.=
Track for minecarts=
Speed up when powered, slow down when not powered=
Activates minecarts when powered=
Emits redstone power when a minecart is detected=
Vehicle for fast travel on rails=
Can be ignited by tools or powered activator rail=

View File

@ -1,6 +1,8 @@
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}
local groups = {handy=1,pickaxey=1, attached_node=1,rail=1,connect_to_raillike=minetest.raillike_group("rail"),dig_by_water=1,destroy_by_lava_flow=1, transport=1}
if creative == false then
groups.not_in_creative_inventory = 1
end
@ -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,54 @@ 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"),
_tt_help = S("Track for minecarts"),
_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"),
_tt_help = S("Track for minecarts").."\n"..S("Speed up when powered, slow down when not powered"),
_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,24 +109,30 @@ 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"),
_tt_help = S("Track for minecarts").."\n"..S("Activates minecarts when powered"),
_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,
},
},
}
@ -94,15 +140,32 @@ register_rail("mcl_minecarts:activator_rail",
-- 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,
},
effector = {
-- Activate minecarts
action_on = function(pos, node)
local pos2 = { x = pos.x, y =pos.y + 1, z = pos.z }
local objs = minetest.get_objects_inside_radius(pos2, 1)
for _, o in pairs(objs) do
local l = o:get_luaentity()
if l and string.sub(l.name, 1, 14) == "mcl_minecarts:" and l.on_activate_by_rail then
l:on_activate_by_rail()
end
end
end,
},
},
drop = "mcl_minecarts:activator_rail",
},
false
)
@ -111,12 +174,14 @@ 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"),
_tt_help = S("Track for minecarts").."\n"..S("Emits redstone power when a minecart is detected"),
_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 +195,10 @@ register_rail("mcl_minecarts:detector_rail_on",
mesecons = {
receptor = {
state = mesecon.state.on,
rules = rail_rules_short,
},
},
drop = "mcl_minecarts:detector_rail",
},
false
)

Binary file not shown.

Before

Width:  |  Height:  |  Size: 249 B

After

Width:  |  Height:  |  Size: 257 B

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,762 @@
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' the minimum health value the mob can spawn with.
'hp_max' the maximum health value the mob can spawn with.
'breath_max' The maximum breath value the mob can spawn with and can have.
If -1 (default), mob does not take drowning damage.
'breathes_in_water' If true, mob loses breath when not in water. Otherwise,
mob loses breath when inside a node with `drowning` attribute
set (default: false).
'armor' entity armor groups (see lua_api.txt). If table, a list of
armor groups like for entities. If number, set value of
'fleshy' armor group only.
Note: The 'immortal=1' armor group will automatically be added
since this mod handles health and damage manually.
Default: 100 (mob will take full dmg from 'fleshy' hits)
'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 0.6.
'fly' when true allows your mob to fly around instead of walking.
'fly_in' holds the node name or a table of node names in which the
mob flies (or swims) around in. The special name
'__airlike' stands for all nodes with 'walkable=false'
that are not liquids
'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 (default: 0).
'lava_damage' holds the damage per second inflicted to mobs when standing
in lava (default: 8).
'fire_damage' holds the damage per second inflicted to mobs when standing
in fire (default: 1).
'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.
[MCL2 extension:] When a table, this is a list of
mob types that will get alerted as well (besides same mob type)
'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.
'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.
'base_pitch' base pitch to use adult mobs, default is 1.0 (MCL2 extension)
'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.
Note: For all sounds except fuse and explode, the pitch is slightly randomized from the base pitch
The pitch of children is 50% higher.
'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.8, 0.5}.
NOTE: Due to a workaround, the upper Y coordinate will be forced
to a minimum value of 0.79.
'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:
'spawn_class' Classification of mod for the spawning algorithm:
"hostile", "passive", "ambient" or "water"
'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
'glow' same as in entity definition
'child' if true, spawn mob as child
'shoot_arrow(self, pos, dir)' function that is called when mob wants to shoot an arrow.
You can spawn your own arrow here. pos is mob position,
dir is mob's aiming direction
'sounds_child' same as sounds, but for childs. If not defined, childs will use same
sound as adults but with higher pitch
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. Also called
when not actually replacing due to mobs_griefing setting being false.
'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.breath' contains current breath of mob, if mob takes drowning
damage at all (cannot exceed self.breath_max). Breath
decreases by 1 each second while in a node with drowning
damage and increases by 1 each second otherwise.
'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 to track whether some special item has been
gotten from the mob, for example, wool from sheep.
Initialized as false, and the mob must set this value
manually.
'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_object' a function that is called when the arrow hits an object
that is neither a player nor a mob. this function should
hurt the object, the parameters are (self, object)
'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: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, damage 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)
'mob_difficulty' sets difficulty level (health and hit damage
multiplied by this number), defaults to 1.0.
'mob_spawn_chance' 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,16 @@
local S = minetest.get_translator("mcl_mobs")
-- name tag
minetest.register_craftitem("mcl_mobs:nametag", {
description = S("Name Tag"),
_tt_help = S("Give names to mobs").."\n"..S("Set name at anvil"),
_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. Then you can use the name tag to name a mob. 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

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

View File

@ -0,0 +1,11 @@
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")

View File

@ -0,0 +1,11 @@
# textdomain: mcl_mobs
Peaceful mode active! No monsters will spawn.=Friedlicher Modus aktiv! Es werden keine Monster auftauchen.
This allows you to place a single mob.=Damit kann man einen Mob platzieren.
Just place it where you want the mob to appear. Animals will spawn tamed, unless you hold down the sneak key while placing. If you place this on a mob spawner, you change the mob it spawns.=Platzieren Sie dies einfach dort, wo der Mob auftauchen soll. Tiere werden zahm erscheinen, außer, wenn Sie beim Platzieren die Schlichtaste drücken. Platzieren Sie dies auf einem Mobspawner, um den Mob im Mobspawner zu wechseln.
You need the “maphack” privilege to change the mob spawner.=Sie brauchen das „maphack“-Privileg, um den Mobspawner ändern zu können.
Name Tag=Namensschild
A name tag is an item to name a mob.=Ein Namensschild ist ein Gegenstand, um einen Mob zu benennen.
Before you use the name tag, you need to set a name at an anvil. Then you can use the name tag to name a mob. This uses up the name tag.=Bevor Sie ein Namensschild benutzen können, müssen Sie ihn an einem Amboss benennen. Dann können können Sie das Namensschild benutztn, um einen Mob zu benennen. Das wird das Namensschild verbrauchen.
Only peaceful mobs allowed!=Nur friedliche Mobs erlaubt!
Give names to mobs=Benennt Mobs
Set name at anvil=Namen am Amboss setzen

View File

@ -0,0 +1,9 @@
# textdomain: mcl_mobs
Peaceful mode active! No monsters will spawn.=¡Modo pacífico activo! No aparecerán monstruos.
This allows you to place a single mob.=Esto le permite colocar un solo animal.
Just place it where you want the mob to appear. Animals will spawn tamed, unless you hold down the sneak key while placing. If you place this on a mob spawner, you change the mob it spawns.=Simplemente colóquelo donde desea que aparezcan los animales. Los animales aparecerán domesticados, a menos que mantenga presionada la tecla de sigilo mientras coloca. Si coloca esto en un engendrador de animales, cambia el animal que genera.
You need the “maphack” privilege to change the mob spawner.=Necesita el privilegio "maphack" para cambiar el generador de animales.
Name Tag=Etiqueta
A name tag is an item to name a mob.=Una etiqueta es un elemento para nombrar una animal.
Before you use the name tag, you need to set a name at an anvil. Then you can use the name tag to name a mob. This uses up the name tag.=Antes de usar la etiqueta, debe establecer un nombre en un yunque. Luego puede usar la etiqueta para nombrar un animal. Esto usa la etiqueta.
Only peaceful mobs allowed!=¡Solo se permiten animales pacíficos!

View File

@ -0,0 +1,11 @@
# textdomain: mcl_mobs
Peaceful mode active! No monsters will spawn.=
This allows you to place a single mob.=
Just place it where you want the mob to appear. Animals will spawn tamed, unless you hold down the sneak key while placing. If you place this on a mob spawner, you change the mob it spawns.=
You need the “maphack” privilege to change the mob spawner.=
Name Tag=
A name tag is an item to name a mob.=
Before you use the name tag, you need to set a name at an anvil. Then you can use the name tag to name a mob. This uses up the name tag.=
Only peaceful mobs allowed!=
Give names to mobs=
Set name at anvil=

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,2 @@
name = mcl_mobs
optional_depends = mcl_weather, mcl_tnt, mcl_hunger, mcl_worlds, invisibility, lucky_block, cmi, doc_identifier, mcl_armor

View File

@ -121,7 +121,7 @@ end)
function mobs.attach(entity, player)
local attach_at, eye_offset = {}, {}
local attach_at, eye_offset
entity.player_rotation = entity.player_rotation or {x = 0, y = 0, z = 0}
entity.driver_attach_at = entity.driver_attach_at or {x = 0, y = 0, z = 0}
@ -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,34 +168,35 @@ 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
function mobs.drive(entity, moving_anim, stand_anim, can_fly, dtime)
local rot_steer, rot_view = math.pi/2, 0
local rot_view = 0
if entity.player_rotation.y == 90 then
rot_steer, rot_view = 0, math.pi/2
rot_view = math.pi/2
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
@ -260,7 +262,7 @@ function mobs.drive(entity, moving_anim, stand_anim, can_fly, dtime)
return
end
-- set moving animation
if moving_anim then
mobs:set_animation(entity, moving_anim)
@ -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,8 +292,8 @@ function mobs.drive(entity, moving_anim, stand_anim, can_fly, dtime)
end
-- Set position, velocity and acceleration
local p = entity.object:getpos()
local new_velo = {x = 0, y = 0, z = 0}
local p = entity.object:get_pos()
local new_velo
local new_acce = {x = 0, y = -9.8, z = 0}
p.y = p.y - 0.5
@ -316,7 +318,7 @@ function mobs.drive(entity, moving_anim, stand_anim, can_fly, dtime)
minetest.sound_play("default_punch", {
object = entity.object,
max_hear_distance = 5
})
}, true)
entity.object:punch(entity.object, 1.0, {
full_punch_interval = 1.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,40 +387,34 @@ 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
if entity.player_rotation.y == 90 then
rot_steer, rot_view = 0, math.pi / 2
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 +425,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

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