Compare commits

...

717 Commits
0.48 ... master

Author SHA1 Message Date
pithydon 15f2550f00 Rewrite place logic.
Now is more like Minecraft. Node dig logic removed.
2020-05-21 19:07:17 -06:00
Wuzzy 95b3b4a172 Add empty smoke_puff.png 2020-05-21 01:54:55 +02:00
Wuzzy bfd2f0ebc7 Add paintings 2020-05-21 01:51:52 +02:00
Wuzzy d1d7c026e1 Buckets are no longer liquids_pointable 2020-05-20 21:59:37 +02:00
Wuzzy 7cfef25dfe Fix undeclared global in mcl_minecarts 2020-05-16 20:13:22 +02:00
Wuzzy 547080bd98 Add a delay before mobs start to suffocate 2020-05-13 22:15:46 +02:00
MysticTempest a20637f68c Fix redstone dust climbing up doors, and fix redstone dust not turning off when redstone torch is destroyed through the destruction of an attached block 2020-05-13 21:11:17 +02:00
Wuzzy 1a0e979b0c Update incomplete license information and credits 2020-05-11 17:18:04 +02:00
Wuzzy b512e16a7b Version 0.65.2 2020-05-10 14:55:46 +02:00
Wuzzy 26b5b45595 Fix crash when creeper explodes 2020-05-10 14:54:43 +02:00
Wuzzy b8bd154378 Add translator into credits 2020-05-09 19:06:31 +02:00
Wuzzy c156398fb5 Merge branch 'translate-fr' of https://git.minetest.land/lrocher/MineClone2 into translate_fr 2020-05-09 18:57:40 +02:00
Wuzzy 728db50baf Fire doesn't destroy flammable=-1 nodes 2020-05-09 18:55:50 +02:00
Wuzzy 621946546b Ignite TNT by fire 2020-05-09 18:52:03 +02:00
Wuzzy ffcad31871 Update falling nodes when fire replaces a block 2020-05-09 17:53:32 +02:00
Wuzzy bfb1e3e447 Add age to of fire to greatly limit fire spread 2020-05-09 17:44:23 +02:00
Wuzzy d13498e6f9 Rain now also extinguishes neighbor tiles 2020-05-09 16:03:07 +02:00
Wuzzy 0c96e512d7 Remove bogus saddle recipe 2020-05-09 00:40:54 +02:00
Wuzzy 555d21263d Version 0.65.1 2020-05-08 18:06:08 +02:00
Wuzzy 5108f398bb Fix all explosions spawning fire 2020-05-08 18:04:04 +02:00
Wuzzy 2ec66fc61b Fix leaking global in mcl_explosions 2020-05-08 18:01:33 +02:00
Wuzzy 6df30dc0dc Version 0.65.0 2020-05-08 17:59:04 +02:00
Wuzzy c3578e283c Credit yutyo for logo contribution 2020-05-08 17:56:25 +02:00
yutyo 58013872c2 New MineClone 2 logo 2020-05-08 17:56:10 +02:00
Wuzzy aeb7a6cb8b Disable guardian spawning 2020-05-08 17:44:27 +02:00
Wuzzy 131051b1df Fix code typo in mcl_playerplus 2020-05-08 17:41:09 +02:00
Alexander Minges ad70a71f8c Fix crash when triggering explosion (type check error) 2020-05-08 17:31:41 +02:00
Wuzzy fb55d33bfe Fix villager crash when trading w/o inited inv 2020-05-08 17:27:22 +02:00
Wuzzy 94c4256451 Fix crash when standing on unknown node 2020-05-08 17:23:39 +02:00
Rocher Laurent e058ee8487 Fix some template.txt 2020-05-05 21:02:48 +02:00
Rocher Laurent c9a37d0dbc Translate In French 2020-05-05 21:02:21 +02:00
Wuzzy 8c20dfa5d2 I no longer accept PRs 2020-05-05 02:23:17 +02:00
Wuzzy 2b4a4f8c60 Merge branch 'master' of https://git.minetest.land/Wuzzy/MineClone2 2020-05-05 02:11:52 +02:00
Wuzzy b59f0d6c6e Merge pull request 'Prevent water mobs to classify solid blocks below them or the medium they are supposed to be in as dangerous' (#685) from Athemis/MineClone2:fix-mobs-dangerous-nodes into master 2020-05-05 00:10:53 +00:00
Rocher Laurent 4957bd1118 Translate In French 2020-05-03 22:39:07 +02:00
Alexander Minges beace10136 prevent water mobs to classify solid blocks below them as dangerous 2020-05-03 17:43:44 +02:00
Wuzzy 02b2ff7460 Fix mcl_weather crash 2020-05-02 19:08:55 +02:00
Wuzzy bc740efafe Add fire explosions 2020-05-02 19:05:56 +02:00
Wuzzy 00acbf8a2a Remove unused TNT functions 2020-05-02 18:51:59 +02:00
Wuzzy 56d484f69b Make mobs and bed use mcl_explosions 2020-05-02 18:50:25 +02:00
Wuzzy 6a576c50a0 Add puncher to tnt_explosions 2020-05-02 18:24:53 +02:00
Wuzzy d4bc7a2f88 Add back the explosion death msg 2020-05-02 18:09:25 +02:00
Wuzzy 7fa8828bd5 Explosions: Use minetest.get_position_from_hash 2020-04-30 21:13:10 +02:00
Wuzzy 026d406d4b Fix indents in mcl_explosions 2020-04-30 21:12:30 +02:00
Wuzzy 679e2b1b70 Explosions: Reduce repeated code 2020-04-30 21:08:42 +02:00
Wuzzy 772ea01aff Explosions: Fix syntax error 2020-04-30 21:00:13 +02:00
Wuzzy 2b5ddbd62d Explosions: Change item drop handler 2020-04-30 20:58:58 +02:00
Wuzzy 9ee0ef5a8d Explosions: Replace some API calls 2020-04-30 20:57:38 +02:00
Wuzzy 58458b2bca mcl_explosions: Rename description.txt 2020-04-30 20:55:49 +02:00
Wuzzy 3087621b11 Merge branch 'mcl_explosions' 2020-04-30 20:55:10 +02:00
Wuzzy 8dd1cf6719 Update Contributing guidelines 2020-04-30 18:25:23 +02:00
Wuzzy ef20ac54c3 Fix crash when fueling furnace minecart 2020-04-30 18:13:05 +02:00
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
Elias Åström a10dff8421 Use walkable for entity exposure
This makes TNT do full damage under water.
2020-04-19 13:08:36 +02:00
Elias Åström a62a75c799 Do not drop items in creative mode
It works like this in Minecraft.  This will also reduce lag when playing
with TNT in creative.
2020-04-19 13:08:36 +02:00
Elias Åström 64c767ad8c Make TNT behave like Minecraft
TNT entities are now knocked back by explosions.  When a TNT block
becomes triggered by an explosion, its fuse time is set to a random
value between 0.5 and 1.5 seconds.
2020-04-19 13:08:36 +02:00
Elias Åström b4ea2afe77 Add tnt_knockback flag for entities
When set to true, entities will be knocked back when affected by TNT
explosions.  Also ignore '__builtin:item' entities to reduce lag, and
replace tabs with spaces in 'mcl_explosions/init.lua'.
2020-04-19 13:08:36 +02:00
Elias Åström cdea2eeabf Change mcl_mobs to enable knockback in y direction 2020-04-19 13:08:36 +02:00
Elias Åström 92ab90fd1b Add knockback for mobs 2020-04-19 13:08:36 +02:00
Elias Åström 6315490b14 Update the rest of the blast resistance values
The values have been updated according to this list:

https://minecraft.gamepedia.com/Module:Blast_resistance_values
2020-04-19 13:08:36 +02:00
Elias Åström 8d67824e42 Add to list of contributors in README.md 2020-04-19 13:08:36 +02:00
Elias Åström fd05259202 Make TNT and TNT Minecart use the explosions API
The old api from mcl_tnt is still left in the code, and used by the
mobs.
2020-04-19 13:08:36 +02:00
Elias Åström ca7c8c23c7 Add entity damage and player knockback
Could not find a way to add knockback to entities.  After adding a
velocity to them they will just slide around indefinitely.  Because of
this, knockback is only enabled on players for now.
2020-04-19 13:08:36 +02:00
Elias Åström 77c95fe8c3 Add particles and sounds from explosions 2020-04-19 13:08:36 +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
Elias Åström 1d5c11f683 Add mcl_explosions for ray traced explosions
Code has been adapted from the Minetest explosions API mod to have
Minecraft-like explosion mechanics and work with MineClone 2.
2020-04-17 20:47:12 +02:00
Elias Åström 063595ac3c Change blast resistance of nodes in mcl_core
The new blast resistance values are copied from the Minecraft wiki.

https://minecraft.gamepedia.com/Explosion
2020-04-17 20:47:12 +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 2028ef40cb Add screwdriver 2019-02-22 05:29:17 +01:00
1305 changed files with 28141 additions and 12801 deletions

1
API.md
View File

@ -21,6 +21,7 @@ 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 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.

View File

@ -5,7 +5,7 @@ Wow, thank you! :-)
But first, some things to note:
MineClone 2's development target is to make a free software clone of Minecraft,
***version 1.11*** (later: 1.12), ***PC edition***.
***version 1.11***, ***PC edition***.
MineClone 2 is maintained by one person. Namely, Wuzzy. You can find me,
Wuzzy, in the Minetest forums (forums.minetest.net), in IRC in the #minetest
@ -26,8 +26,8 @@ For small and medium changes:
* Fork the repository
* Do your change in a new branch
* Upload the repository somewhere where it can be accessed from the Internet
* Ask me to pull in your changes (and briefly say what you're changed)
* Upload the repository somewhere where it can be accessed from the Internet and
notify me
For small changes, sending me a patch is also good.
@ -35,7 +35,7 @@ For big changes: Same as above, but consider notifying me first to avoid
duplicate work and possible tears of rejection. ;-)
## Quality remarks
Again: There is ***no*** guarantee I will accept anything from anything.
Again: There is ***no*** guarantee I will accept anything from anybody.
But I will gladly take in code from others when I feel it saves me work
in the long run.
@ -64,10 +64,10 @@ Depending on what you add, the chances for inclusion vary:
## Coding style guide
* Indentations should reflect the code flow
* Use tabs, not spaces for indentation
* Use tabs, not spaces for indentation (tab size = 8)
* Never use `minetest.env`
## Reporting bugs
Report all bugs and missing Minecraft features here:
<https://git.minetest.land/Wuzzy/MineClone2-Bugs>
<https://git.minetest.land/Wuzzy/MineClone2/issues>

View File

@ -36,7 +36,11 @@ Please read <http://minecraft.gamepedia.com/Breaking> to learn how digging times
* `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 or dirtifier node is placed on top
* `dirtifier=1`: This node turns nodes the above group into dirt when placed above
@ -56,6 +60,16 @@ Please read <http://minecraft.gamepedia.com/Breaking> to learn how digging times
* `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
@ -66,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

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.48.0
Version: 0.65.2
### Gameplay
You start in a randomly-generated world made entirely of cubes. You can explore
@ -67,21 +67,20 @@ an explanation.
#### Incomplete items
These items do not work yet, but you can get them with `/giveme` for testing:
* Fishing Rod: `mcl_fishing:fishing_rod`
* Activator Rail: `mcl_minecarts:activator_rail`
* Minecart with Chest: `mcl_minecarts:chest_minecart`
* Minecart with Furnace: `mcl_minecarts:furnace_minecart`
* Minecart with Hopper: `mcl_minecarts:hopper_minecart`
* Minecart with Command Block: `mcl_minecarts:command_block_minecart`
## Installation
This game requires [Minetest](http://minetest.net) to run
(version 0.4.16 or 0.4.17).
So you need to install Minetest first. Only stable versions of Minetest are
officially supported. Minetest 5.0.0 (when released) will NOT be supported (yet).
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.
@ -183,7 +182,7 @@ Technical differences from Minecraft:
## Reporting bugs
Please report all bugs and missing Minecraft features here:
<https://git.minetest.land/Wuzzy/MineClone2-Bugs>
<https://git.minetest.land/Wuzzy/MineClone2/issues>
## Other readme files
@ -197,17 +196,26 @@ 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
* [ryvnf](https://github.com/ryvnf): Explosion mechanics
* Lots of other people: TO BE WRITTEN (see mod directories for details)
### Textures
### Graphics
* [XSSheep](http://www.minecraftforum.net/members/XSSheep): Main author; creator of the Pixel Perfection resource pack of Minecraft 1.11
* [Wuzzy](https://forum.minetest.net/memberlist.php?mode=viewprofile&u=3082): Main menu imagery and various edits and additions of texture pack
* [kingoscargames](https://github.com/kingoscargames): Various edits and additions of existing textures
* [leorockway](https://github.com/leorockway): Some edits of mob textures
* [xMrVizzy](https://minecraft.curseforge.com/members/xMrVizzy): Glazed terracotta (textures are subject to be replaced later)
* Other authors: GUI images,
* yutyo <tanakinci2002@gmail.com>: MineClone 2 logo
* Other authors: GUI images
### Translations
* Wuzzy: German
* Rocher Laurent <rocherl@club-internet.fr>: French
* wuniversales: Spanish
### Models
* [22i](https://github.com/22i): Creator of all models
@ -218,7 +226,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
@ -241,13 +249,15 @@ 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.
For mods that do not have such a file, the license is the source code license
of MineClone 2 and the author is Wuzzy.
### License of media (textures and sounds)
No non-free licenses are used anywhere.

Binary file not shown.

Before

Width:  |  Height:  |  Size: 23 KiB

After

Width:  |  Height:  |  Size: 22 KiB

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
@ -20,4 +22,12 @@ 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,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.

View File

@ -7,15 +7,17 @@ minetest.check_single_for_falling = function(pos)
local node = minetest.get_node(pos)
if minetest.get_item_group(node.name, "attached_node_facedir") ~= 0 then
local dir = minetest.facedir_to_dir(node.param2)
local cpos = vector.add(pos, dir)
local cnode = minetest.get_node(cpos)
if minetest.get_item_group(cnode.name, "solid") == 0 then
minetest.remove_node(pos)
local drops = minetest.get_node_drops(node.name, "")
for dr=1, #drops do
minetest.add_item(pos, drops[dr])
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
ret = true
end
end

View File

@ -0,0 +1,383 @@
--[[
Explosion API mod for Minetest (adapted to MineClone 2)
This mod is based on the Minetest explosion API mod, but has been changed
to have the same explosion mechanics as Minecraft and work with MineClone.
The computation-intensive parts of the mod has been optimized to allow for
larger explosions and faster world updating.
This mod was created by Elias Astrom <ryvnf@riseup.net> and is released
under the LGPLv2.1 license.
--]]
mcl_explosions = {}
local creative_mode = minetest.settings:get_bool("creative_mode")
local mod_death_messages = minetest.get_modpath("mcl_death_messages") ~= nil
local mod_fire = minetest.get_modpath("mcl_fire") ~= nil
local CONTENT_FIRE = minetest.get_content_id("mcl_fire:fire")
local S = minetest.get_translator("mcl_explosions")
-- Saved sphere explosion shapes for various radiuses
local sphere_shapes = {}
-- Saved node definitions in table using cid-keys for faster look-up.
local node_blastres = {}
local node_on_blast = {}
local node_walkable = {}
-- The step length for the rays (Minecraft uses 0.3)
local STEP_LENGTH = 0.3
-- How many rays to compute entity exposure to explosion
local N_EXPOSURE_RAYS = 16
minetest.register_on_mods_loaded(function()
-- Store blast resistance values by content ids to improve performance.
for name, def in pairs(minetest.registered_nodes) do
node_blastres[minetest.get_content_id(name)] = def._mcl_blast_resistance or 0
node_on_blast[minetest.get_content_id(name)] = def.on_blast
node_walkable[minetest.get_content_id(name)] = def.walkable
end
end)
-- Compute the rays which make up a sphere with radius. Returns a list of rays
-- which can be used to trace explosions. This function is not efficient
-- (especially for larger radiuses), so the generated rays for various radiuses
-- should be cached and reused.
--
-- Should be possible to improve by using a midpoint circle algorithm multiple
-- times to create the sphere, currently uses more of a brute-force approach.
local function compute_sphere_rays(radius)
local rays = {}
local sphere = {}
for i=1, 2 do
for y = -radius, radius do
for z = -radius, radius do
for x = -radius, 0, 1 do
local d = x * x + y * y + z * z
if d <= radius * radius then
local pos = { x = x, y = y, z = z }
sphere[minetest.hash_node_position(pos)] = pos
break
end
end
end
end
end
for i=1,2 do
for x = -radius, radius do
for z = -radius, radius do
for y = -radius, 0, 1 do
local d = x * x + y * y + z * z
if d <= radius * radius then
local pos = { x = x, y = y, z = z }
sphere[minetest.hash_node_position(pos)] = pos
break
end
end
end
end
end
for i=1,2 do
for x = -radius, radius do
for y = -radius, radius do
for z = -radius, 0, 1 do
local d = x * x + y * y + z * z
if d <= radius * radius then
local pos = { x = x, y = y, z = z }
sphere[minetest.hash_node_position(pos)] = pos
break
end
end
end
end
end
for _, pos in pairs(sphere) do
rays[#rays + 1] = vector.normalize(pos)
end
return rays
end
-- Add particles from explosion
--
-- Parameters:
-- pos - The position of the explosion
-- radius - The radius of the explosion
local function add_particles(pos, radius)
minetest.add_particlespawner({
amount = 64,
time = 0.125,
minpos = pos,
maxpos = pos,
minvel = {x = -radius, y = -radius, z = -radius},
maxvel = {x = radius, y = radius, z = radius},
minacc = vector.new(),
maxacc = vector.new(),
minexptime = 0.5,
maxexptime = 1.0,
minsize = radius * 0.5,
maxsize = radius * 1.0,
texture = "tnt_smoke.png",
})
end
-- Traces the rays of an explosion, and updates the environment.
--
-- Parameters:
-- pos - Where the rays in the explosion should start from
-- strength - The strength of each ray
-- raydirs - The directions for each ray
-- radius - The maximum distance each ray will go
-- drop_chance - The chance that destroyed nodes will drop their items
-- fire - If true, 1/3 of destroyed nodes become fire
-- puncher - object that punches other objects (optional)
--
-- Note that this function has been optimized, it contains code which has been
-- inlined to avoid function calls and unnecessary table creation. This was
-- measured to give a significant performance increase.
local function trace_explode(pos, strength, raydirs, radius, drop_chance, fire, puncher)
local vm = minetest.get_voxel_manip()
local emin, emax = vm:read_from_map(vector.subtract(pos, radius),
vector.add(pos, radius))
local emin_x = emin.x
local emin_y = emin.y
local emin_z = emin.z
local ystride = (emax.x - emin_x + 1)
local zstride = ystride * (emax.y - emin_y + 1)
local pos_x = pos.x
local pos_y = pos.y
local pos_z = pos.z
local area = VoxelArea:new {
MinEdge = emin,
MaxEdge = emax
}
local data = vm:get_data()
local destroy = {}
-- Trace rays for environment destruction
for i = 1, #raydirs do
local rpos_x = pos.x
local rpos_y = pos.y
local rpos_z = pos.z
local rdir_x = raydirs[i].x
local rdir_y = raydirs[i].y
local rdir_z = raydirs[i].z
local rstr = (0.7 + math.random() * 0.6) * strength
for r = 0, math.ceil(radius * (1.0 / STEP_LENGTH)) do
local npos_x = math.floor(rpos_x + 0.5)
local npos_y = math.floor(rpos_y + 0.5)
local npos_z = math.floor(rpos_z + 0.5)
local idx = (npos_z - emin_z) * zstride + (npos_y - emin_y) * ystride +
npos_x - emin_x + 1
local cid = data[idx]
local br = node_blastres[cid]
local hash = (npos_z + 32768) * 65536 * 65536 +
(npos_y + 32768) * 65536 +
npos_x + 32768
rpos_x = rpos_x + STEP_LENGTH * rdir_x
rpos_y = rpos_y + STEP_LENGTH * rdir_y
rpos_z = rpos_z + STEP_LENGTH * rdir_z
rstr = rstr - 0.75 * STEP_LENGTH - (br + 0.3) * STEP_LENGTH
if rstr <= 0 then
break
end
if cid ~= minetest.CONTENT_AIR then
destroy[hash] = idx
end
end
end
-- Entities in radius of explosion
local punch_radius = 2 * strength
local objs = minetest.get_objects_inside_radius(pos, punch_radius)
-- Trace rays for entity damage
for _, obj in pairs(objs) do
local ent = obj:get_luaentity()
-- Ignore items to lower lag
if obj:is_player() or (ent and ent.name ~= '__builtin.item') then
local opos = obj:get_pos()
local collisionbox = nil
if obj:is_player() then
collisionbox = { -0.3, 0.0, -0.3, 0.3, 1.77, 0.3 }
elseif ent.name then
local def = minetest.registered_entities[ent.name]
collisionbox = def.collisionbox
end
if collisionbox then
-- Create rays from random points in the collision box
local x1 = collisionbox[1] * 2
local y1 = collisionbox[2] * 2
local z1 = collisionbox[3] * 2
local x2 = collisionbox[4] * 2
local y2 = collisionbox[5] * 2
local z2 = collisionbox[6] * 2
local x_len = math.abs(x2 - x1)
local y_len = math.abs(y2 - y1)
local z_len = math.abs(z2 - z1)
-- Move object position to the center of its bounding box
opos.x = opos.x + x1 + x2
opos.y = opos.y + y1 + y2
opos.z = opos.z + z1 + z2
-- Count number of rays from collision box which are unobstructed
local count = N_EXPOSURE_RAYS
for i = 1, N_EXPOSURE_RAYS do
local rpos_x = opos.x + math.random() * x_len - x_len / 2
local rpos_y = opos.y + math.random() * y_len - y_len / 2
local rpos_z = opos.z + math.random() * z_len - z_len / 2
local rdir_x = pos.x - rpos_x
local rdir_y = pos.y - rpos_y
local rdir_z = pos.z - rpos_z
local rdir_len = math.hypot(rdir_x, math.hypot(rdir_y, rdir_z))
rdir_x = rdir_x / rdir_len
rdir_y = rdir_y / rdir_len
rdir_z = rdir_z / rdir_len
for i=0, rdir_len / STEP_LENGTH do
rpos_x = rpos_x + rdir_x * STEP_LENGTH
rpos_y = rpos_y + rdir_y * STEP_LENGTH
rpos_z = rpos_z + rdir_z * STEP_LENGTH
local npos_x = math.floor(rpos_x + 0.5)
local npos_y = math.floor(rpos_y + 0.5)
local npos_z = math.floor(rpos_z + 0.5)
local idx = (npos_z - emin_z) * zstride + (npos_y - emin_y) * ystride +
npos_x - emin_x + 1
local cid = data[idx]
local walkable = node_walkable[cid]
if walkable then
count = count - 1
break
end
end
end
-- Punch entity with damage depending on explosion exposure and
-- distance to explosion
local exposure = count / N_EXPOSURE_RAYS
local punch_vec = vector.subtract(opos, pos)
local punch_dir = vector.normalize(punch_vec)
local impact = (1 - vector.length(punch_vec) / punch_radius) * exposure
if impact < 0 then
impact = 0
end
local damage = math.floor((impact * impact + impact) * 7 * strength + 1)
if mod_death_messages and obj:is_player() then
mcl_death_messages.player_damage(obj, S("@1 was caught in an explosion.", obj:get_player_name()))
end
local source = puncher
if not source then
source = obj
end
obj:punch(source, 10, { damage_groups = { full_punch_interval = 1,
fleshy = damage, knockback = impact * 20.0 } }, punch_dir)
if obj:is_player() then
obj:add_player_velocity(vector.multiply(punch_dir, impact * 20))
elseif ent.tnt_knockback then
obj:add_velocity(vector.multiply(punch_dir, impact * 20))
end
end
end
end
-- Remove destroyed blocks and drop items
for hash, idx in pairs(destroy) do
local do_drop = not creative_mode and math.random() <= drop_chance
local on_blast = node_on_blast[data[idx]]
local remove = true
if do_drop or on_blast ~= nil then
local npos = minetest.get_position_from_hash(hash)
if on_blast ~= nil then
remove = on_blast(npos, 1.0)
else
local name = minetest.get_name_from_content_id(data[idx])
local drop = minetest.get_node_drops(name, "")
for _, item in ipairs(drop) do
if type(item) ~= "string" then
item = item:get_name() .. item:get_count()
end
minetest.add_item(npos, item)
end
end
end
if remove then
if mod_fire and fire and math.random(1, 3) == 1 then
data[idx] = CONTENT_FIRE
else
data[idx] = minetest.CONTENT_AIR
end
end
end
-- Log explosion
minetest.log('action', 'Explosion at ' .. minetest.pos_to_string(pos) ..
' with strength ' .. strength .. ' and radius ' .. radius)
-- Update environment
vm:set_data(data)
vm:write_to_map(data)
vm:update_liquids()
end
-- Create an explosion with strength at pos.
--
-- Parameters:
-- pos - The position where the explosion originates from
-- strength - The blast strength of the explosion (a TNT explosion uses 4)
-- info - Table containing information about explosion.
-- puncher - object that is reported as source of punches/damage (optional)
--
-- Values in info:
-- drop_chance - If specified becomes the drop chance of all nodes in the
-- explosion (defaults to 1.0 / strength)
-- no_sound - If true then the explosion will not play a sound
-- no_particle - If true then the explosion will not create particles
-- fire - If true, 1/3 nodes become fire (default: false)
function mcl_explosions.explode(pos, strength, info, puncher)
-- The maximum blast radius (in the air)
local radius = math.ceil(1.3 * strength / (0.3 * 0.75) * 0.3)
if not sphere_shapes[radius] then
sphere_shapes[radius] = compute_sphere_rays(radius)
end
local shape = sphere_shapes[radius]
trace_explode(pos, strength, shape, radius, (info and info.drop_chance) or 1 / strength, info.fire == true, puncher)
if not (info and info.no_sound) then
add_particles(pos, radius)
end
if not (info and info.no_particle) then
minetest.sound_play("tnt_explode", {
pos = pos, gain = 1.0,
max_hear_distance = strength * 16
}, true)
end
end

View File

@ -0,0 +1,2 @@
# textdomain:mcl_explosions
@1 was caught in an explosion.=@1 wurde Opfer einer Explosion.

View File

@ -0,0 +1,2 @@
# textdomain:mcl_explosions
@1 was caught in an explosion.=

View File

@ -0,0 +1,3 @@
name = mcl_explosions
description = A common API to create explosions.
optional_depends = mcl_fire

View File

@ -1,12 +1,23 @@
-- 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")
@ -81,7 +92,7 @@ end
mcl_vars.mg_end_min = -27073 -- Carefully chosen to be at a mapchunk border
mcl_vars.mg_end_max_official = mcl_vars.mg_end_min + minecraft_height_limit
mcl_vars.mg_end_max = mcl_vars.mg_overworld_min - 2000
mcl_vars.mg_end_platform_pos = { x = 100, y = mcl_vars.mg_end_min + 80, z = 0 }
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

View File

@ -114,9 +114,6 @@ local function get_random_slots(max_slot)
table.insert(slots_out, slots[r])
table.remove(slots, r)
end
for s=1, #slots_out do
print(slots_out[s])
end
return slots_out
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/
@ -86,5 +89,9 @@ 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
@ -150,5 +164,5 @@ 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})
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

@ -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
@ -384,7 +385,7 @@ function mcl_util.generate_on_place_plant_function(condition)
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

View File

@ -1,11 +1,11 @@
WalkOver
Walkover
--------
Some mode developers have shown an interest in having an on_walk_over event. This is useful for pressure-plates and the like.
Some mode developers have shown an interest in having an `on_walk_over` event. This is useful for pressure-plates and the like.
See this issue - https://github.com/minetest/minetest/issues/247
I have implemented a server_side version in lua using globalstep which people might find useful. Of course this would better implemented via a client-based "on walk over", but it is sufficient for my needs now.
I have implemented a server-side version in Lua using globalstep which people might find useful. Of course this would better implemented via a client-based "on walk over", but it is sufficient for my needs now.
Example Usage
-------------
@ -19,3 +19,6 @@ Example Usage
})
Credits
-------
Mod created by lordfingle, licensed under Apache License 2.0.

View File

@ -12,15 +12,17 @@ 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)
@ -28,16 +30,16 @@ minetest.register_entity("drippingwater:drop_water", {
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,15 +52,18 @@ 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)
@ -66,17 +71,17 @@ minetest.register_entity("drippingwater:drop_lava", {
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

@ -10,8 +10,7 @@ License of boat model:
GNU GPLv3 <https://www.gnu.org/licenses/gpl-3.0.html>
## Textures
All textures are from the Faithful texture pack for Minecraft.
See the main MineClone 2 license to learn more.
See the main MineClone 2 README.md file to learn more.
## Code
Code based on Minetest Game, licensed under the MIT License (MIT).

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
@ -69,7 +72,7 @@ function boat.on_rightclick(self, clicker)
mcl_player.player_set_animation(clicker, "stand" , 30)
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,7 +85,7 @@ 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(name)
@ -91,7 +94,7 @@ function boat.on_rightclick(self, clicker)
mcl_player.player_set_animation(player, "sit" , 30)
end
end, name)
clicker:set_look_horizontal(self.object:getyaw())
clicker:set_look_horizontal(self.object:get_yaw())
end
end
@ -143,13 +146,29 @@ function boat.on_punch(self, puncher)
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
@ -158,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
@ -174,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
@ -192,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:get_pos())
return
end
local s = get_sign(self._v)
self._v = self._v - 0.02 * s
if s ~= get_sign(self._v) then
self.object:setvelocity({x = 0, y = 0, z = 0})
self._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:get_pos()
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:get_pos())
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:get_pos())
else
new_acce = {x = 0, y = 0, z = 0}
if math.abs(self.object:getvelocity().y) < 1 then
local pos = self.object:get_pos()
pos.y = math.floor(pos.y) + boat_y_offset
self.object:setpos(pos)
new_velo = get_velocity(self._v, self.object:getyaw(), 0)
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:get_pos())
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" }
@ -268,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,
@ -290,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
@ -301,11 +314,17 @@ 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())

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=Bateau en Acacia
Birch Boat=Bateau en Bouleau
Boat=Bateau
Boats are used to travel on the surface of water.=Les bateaux sont utilisés pour voyager à la surface de l'eau.
Dark Oak Boat=Bateau en Chêne Noir
Jungle Boat=Bateau en Acajou
Oak Boat=Bateau en Chêne
Rightclick on a water source to place the boat. Rightclick the boat to enter it. Use [Left] and [Right] to steer, [Forwards] to speed up and [Backwards] to slow down or move backwards. Rightclick the boat again to leave it, punch the boat to make it drop as an item.=Faites un clic droit sur une source d'eau pour placer le bateau. Faites un clic droit sur le bateau pour y entrer. Utilisez [Gauche] et [Droite] pour diriger, [Avant] pour accélérer et [Arrière] pour ralentir ou reculer. Cliquez de nouveau avec le bouton droit sur le bateau pour le quitter, frappez le bateau pour le faire tomber en tant qu'objet.
Spruce Boat=Bateau en Sapin
Water vehicle=Véhicule aquatique

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

@ -1,3 +1,4 @@
local S = minetest.get_translator("mcl_falling_nodes")
local dmes = minetest.get_modpath("mcl_death_messages") ~= nil
local get_falling_depth = function(self)
@ -48,15 +49,15 @@ local deal_falling_damage = function(self, dtime)
-- TODO: Reduce damage if wearing a helmet
local msg
if minetest.get_item_group(self.node.name, "anvil") ~= 0 then
msg = "%s was smashed by a falling anvil."
msg = S("@1 was smashed by a falling anvil.", v:get_player_name())
else
msg = "%s was smashed by a falling block."
msg = S("@1 was smashed by a falling block.", v:get_player_name())
end
if dmes then
mcl_death_messages.player_damage(v, string.format(msg, v:get_player_name()))
mcl_death_messages.player_damage(v, msg)
end
end
v:set_hp(hp)
v:set_hp(hp, { type = "punch", from = "mod" })
end
end
end
@ -78,21 +79,30 @@ minetest.register_entity(":__builtin:falling_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 {}
self.object:set_properties({
is_visible = true,
textures = {node.name},
})
local def = core.registered_nodes[node.name]
-- Set correct entity yaw
if def and node.param2 ~= 0 then
if (def.paramtype2 == "facedir" or def.paramtype2 == "colorfacedir") then
self.object:set_yaw(core.dir_to_yaw(core.facedir_to_dir(node.param2)))
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(core.dir_to_yaw(core.wallmounted_to_dir(node.param2)))
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)
@ -141,9 +151,9 @@ minetest.register_entity(":__builtin:falling_node", {
on_step = function(self, dtime)
-- Set gravity
local acceleration = self.object:getacceleration()
local acceleration = self.object:get_acceleration()
if not vector.equals(acceleration, {x = 0, y = -10, z = 0}) then
self.object:setacceleration({x = 0, y = -10, z = 0})
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()
@ -200,15 +210,19 @@ minetest.register_entity(":__builtin:falling_node", {
for _, callback in pairs(minetest.registered_on_dignodes) do
callback(np, n2)
end
if minetest.registered_nodes[self.node.name] then
local def = minetest.registered_nodes[self.node.name]
if def then
minetest.add_node(np, self.node)
if minetest.registered_nodes[self.node.name]._mcl_after_falling then
minetest.registered_nodes[self.node.name]._mcl_after_falling(np, get_falling_depth(self))
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
@ -222,7 +236,7 @@ minetest.register_entity(":__builtin:falling_node", {
minetest.check_for_falling(np)
return
end
local vel = self.object:getvelocity()
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())
@ -238,8 +252,14 @@ minetest.register_entity(":__builtin:falling_node", {
local npos3 = table.copy(npos)
npos3.y = npos3.y - 1
minetest.add_node(npos3, self.node)
if minetest.registered_nodes[self.node.name]._mcl_after_falling then
minetest.registered_nodes[self.node.name]._mcl_after_falling(npos3, get_falling_depth(self))
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()

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 a été écrasé par une enclume qui tombait.
@1 was smashed by a falling block.=@1 a été écrasé par un bloc qui tombait.

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

@ -75,7 +75,7 @@ minetest.register_globalstep(function(dtime)
pos = pos,
max_hear_distance = 16,
gain = 1.0,
})
}, true)
check_pickup_achievements(object, player)
@ -98,14 +98,14 @@ minetest.register_globalstep(function(dtime)
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)
@ -129,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
@ -212,7 +212,7 @@ function minetest.handle_node_drops(pos, drops, digger)
-- This means there is no digger. This is a special case which allows this function to be called
-- by hand. Creative Mode is intentionally ignored in this case.
local doTileDrops = minetest.settings:get_bool("mcl_doTileDrops") or true
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
@ -254,7 +254,13 @@ function minetest.handle_node_drops(pos, drops, digger)
local drop_item = ItemStack(item)
drop_item:set_count(1)
for i=1,count do
local obj = core.add_item(pos, drop_item)
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
@ -264,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
@ -280,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
@ -300,12 +306,13 @@ 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 = {""},
@ -343,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 = ""
@ -353,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",
@ -366,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
@ -373,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
@ -384,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
@ -392,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,
@ -404,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
@ -444,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,
@ -509,7 +522,7 @@ core.register_entity(":__builtin:item", {
end
local p = self.object:get_pos()
local node = core.get_node_or_nil(p)
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
@ -532,7 +545,7 @@ core.register_entity(":__builtin:item", {
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})
minetest.sound_play("builtin_item_lava", {pos = self.object:get_pos(), gain = 0.5}, true)
end
self._removed = true
self.object:remove()
@ -542,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.
@ -551,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
@ -560,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
@ -589,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)
@ -643,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
@ -662,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
@ -688,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

@ -3,12 +3,6 @@ mcl_minecarts
Based on the mod "boost_carts" by Krock.
Target: Run smoothly and do not use too much CPU.
TODO:
- Minecraft-like physics
- Add activator rail
- Add more rail textures
- Add loaded minecarts
License of source code:
-----------------------
MIT License
@ -23,10 +17,5 @@ Authors/licenses of media files:
Minecart model:
22i (GPLv3)
Wuzzy (based on Pixel Perfection 1.11, MIT License):
carts_rail_crossing_pwr.png
carts_rail_curved_pwr.png
carts_rail_t_junction_pwr.png
Other texture files (CC BY-SA 3.0:
Texture files (CC BY-SA 3.0):
XSSheep

View File

@ -1,3 +1,4 @@
mcl_explosions
mcl_core
mcl_sounds
mcl_player

View File

@ -1,3 +1,5 @@
local S = minetest.get_translator("mcl_minecarts")
mcl_minecarts = {}
mcl_minecarts.modpath = minetest.get_modpath("mcl_minecarts")
mcl_minecarts.speed_max = 10
@ -6,10 +8,50 @@ 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},
@ -25,6 +67,10 @@ local function register_entity(entity_id, mesh, textures, drop, on_rightclick)
_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},
@ -33,11 +79,21 @@ 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)
@ -58,17 +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()
player:set_eye_offset({x=0, y=0, z=0},{x=0, y=0, z=0})
self.object:set_pos(self._old_pos)
end
detach_driver(self)
end
-- Disable detector rail
@ -98,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
@ -120,8 +172,10 @@ 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
@ -139,7 +193,7 @@ local function register_entity(entity_id, mesh, textures, drop, on_rightclick)
-- Detach driver
if self._driver then
if self._old_pos then
self.object:setpos(self._old_pos)
self.object:set_pos(self._old_pos)
end
mcl_player.player_attached[self._driver] = nil
local player = minetest.get_player_by_name(self._driver)
@ -149,8 +203,15 @@ local function register_entity(entity_id, mesh, textures, drop, on_rightclick)
end
end
-- Explode if already ignited
if self._boomtimer then
self.object:remove()
mcl_explosions.explode(pos, 4, { drop_chance = 1.0 })
return
end
-- Drop items and remove cart entity
if not minetest.settings:get_bool("creative_mode") then
if not minetest.settings:get_bool("creative_mode") then
for d=1, #drop do
minetest.add_item(self.object:get_pos(), drop[d])
end
@ -162,11 +223,74 @@ local function register_entity(entity_id, mesh, textures, drop, on_rightclick)
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()
mcl_explosions.explode(pos, 4, { drop_chance = 1.0 })
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
@ -177,7 +301,7 @@ local function register_entity(entity_id, mesh, textures, drop, on_rightclick)
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
@ -185,7 +309,7 @@ local function register_entity(entity_id, mesh, textures, drop, on_rightclick)
if not rou_pos then
rou_pos = vector.round(pos)
end
rou_old = vector.round(self._old_pos)
local rou_old = vector.round(self._old_pos)
if not node then
node = minetest.get_node(rou_pos)
end
@ -202,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
@ -217,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)
@ -255,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
@ -283,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
@ -292,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
@ -321,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
@ -341,9 +471,9 @@ 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
@ -387,7 +517,7 @@ mcl_minecarts.place_minecart = function(itemstack, pointed_thing)
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()
@ -396,7 +526,7 @@ mcl_minecarts.place_minecart = function(itemstack, pointed_thing)
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 }
@ -436,6 +566,7 @@ local register_craftitem = function(itemstring, entity_id, description, longdesc
groups = groups,
}
def.description = description
def._tt_help = tt_help
def._doc_items_longdesc = longdesc
def._doc_items_usagehelp = usagehelp
def.inventory_image = icon
@ -458,9 +589,9 @@ Register a minecart
* on_activate_by_rail: Called when above activator rail
* creative: If false, don't show in Creative Inventory
]]
local function register_minecart(itemstring, entity_id, description, longdesc, usagehelp, mesh, textures, icon, drop, on_rightclick, on_activate_by_rail, creative)
register_entity(entity_id, mesh, textures, drop, on_rightclick)
register_craftitem(itemstring, entity_id, description, longdesc, usagehelp, icon, creative)
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
@ -470,11 +601,13 @@ 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",
@ -486,15 +619,12 @@ register_minecart(
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()
clicker:set_eye_offset({x=0, y=0, z=0},{x=0, y=0, z=0})
detach_driver(self)
elseif not self._driver then
self._driver = player_name
self._start_pos = self.object:get_pos()
mcl_player.player_attached[player_name] = true
clicker:set_attach(self.object, "", {x=0, y=8.25, z=-2}, {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)
@ -504,15 +634,15 @@ register_minecart(
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",
@ -523,8 +653,12 @@ register_minecart(
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",
@ -551,13 +685,20 @@ register_minecart(
if not minetest.settings:get_bool("creative_mode") then
held:take_item()
local index = clicker:get_wielded_index()
local index = clicker:get_wield_index()
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, nil, false
)
@ -566,8 +707,8 @@ register_minecart(
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",
@ -587,8 +728,8 @@ register_minecart(
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",
@ -605,8 +746,11 @@ register_minecart(
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",
@ -619,8 +763,25 @@ register_minecart(
},
"mcl_minecarts_minecart_tnt.png",
{"mcl_minecarts:minecart", "mcl_tnt:tnt"},
nil, nil, false
)
-- 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({
@ -631,8 +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 = {
@ -649,19 +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=Wagonnet
Minecarts can be used for a quick transportion on rails.=Les wagonnets peuvent être utilisés pour un transport rapide sur 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.=Les wagonnets roulent uniquement sur des rails et suivent toujours les pistes. À un carrefour en T sans voie directe, ils tournent à gauche. La vitesse dépend du type de rail.
You can place the minecart on rails. Right-click it to enter it. Punch it to get it moving.=Vous pouvez placer le wagonnet sur des rails. Faites un clic droit dessus pour entrer dedans. Frappez-le pour le faire bouger.
To obtain the minecart, punch it while holding down the sneak key.=Pour obtenir la wagonnet, frappez-le tout en maintenant la touche furtive enfoncée.
A minecart with TNT is an explosive vehicle that travels on rail.=Un wagonnet avec de la TNT est un véhicule explosif qui se déplace sur 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.=Placez-le sur des rails. Frappez-le pour le déplacer. Le TNT est allumé avec un briquet ou lorsque le minecart est sur un rail d'activation alimenté.
To obtain the minecart and TNT, punch them while holding down the sneak key. You can't do this if the TNT was ignited.=Pour obtenir la wagonnet et la TNT, frappez-les tout en maintenant la touche furtive enfoncée. Vous ne pouvez pas faire cela si le TNT a été allumé.
A minecart with furnace is a vehicle that travels on rails. It can propel itself with fuel.=Une wagonnet avec un four est un véhicule qui se déplace sur rails. Il peut se propulser avec du carburant.
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.=Placez-le sur des rails. Si vous lui donnez du charbon, le four commencera à brûler pendant longtemps et le wagonnet pourra se déplacer. Frappez-le pour le faire bouger.
To obtain the minecart and furnace, punch them while holding down the sneak key.=Pour obtenir le wagonnet et le four, frappez-les tout en maintenant la touche furtive enfoncée.
Minecart with Chest=Wagonnet avec Coffre
Minecart with Furnace=Wagonnet avec Four
Minecart with Command Block=Wagonnet avec Bloc de Commande
Minecart with Hopper=Wagonnet avec Entonoir
Minecart with TNT=Wagonnet avec 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.=Placez-les sur le sol pour construire votre chemin de fer, les rails se connecteront automatiquement les uns aux autres et se transformeront en courbes, en jonctions en T, en traversées et en pentes au besoin.
Rail=Rail
Rails can be used to build transport tracks for minecarts. Normal rails slightly slow down minecarts due to friction.=Les rails peuvent être utilisés pour construire des voies de transport pour les wagonnets. Les rails ralentissent légèrement les wagonnets en raison de la friction.
Powered Rail=Rail allimenté
Rails can be used to build transport tracks for minecarts. Powered rails are able to accelerate and brake minecarts.=Les rails peuvent être utilisés pour construire des voies de transport pour les wagonnets. Les rails motorisés sont capables d'accélérer et de freiner les wagonnets.
Without redstone power, the rail will brake minecarts. To make this rail accelerate minecarts, power it with redstone power.=Sans énergie de redstone, le rail freinera les wagonnets. Pour que ce rail accélère les minecarts, alimentez-le avec une source d'énergie redstone.
Activator Rail=Rail d'activation
Rails can be used to build transport tracks for minecarts. Activator rails are used to activate special minecarts.=Les rails peuvent être utilisés pour construire des voies de transport pour les wagonnets. Des rails activateurs sont utilisés pour activer des wagonnets spéciaux.
To make this rail activate minecarts, power it with redstone power and send a minecart over this piece of rail.=Pour activer ce rail, activez les wagonnets, alimentez-le avec de l'énergie redstone et envoyez un wagonnet sur ce morceau de rail.
Detector Rail=Rail de détection
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.=Les rails peuvent être utilisés pour construire des voies de transport pour les wagonnets. Un rail de détection est capable de détecter un wagonnet au-dessus et alimente les mécanismes 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.=Pour détecter un wagonnet et fournir une alimentation redstone, connectez-le aux câble redstone ou aux mécanismes redstone et envoyez n'importe quel wagonnet sur le rail.
Track for minecarts=Piste pour wagonnets
Speed up when powered, slow down when not powered=Accélérez lorsqu'il est alimenté, ralentissez lorsqu'il n'est pas alimenté
Activates minecarts when powered=Active les wagonnets lorsqu'il est alimenté
Emits redstone power when a minecart is detected=Émet de l'énergie redstone lorsqu'un wagonnet est détecté
Vehicle for fast travel on rails=Véhicule pour voyager rapidement sur rails
Can be ignited by tools or powered activator rail=Peut être allumé par des outils ou un rail d'activation motorisé

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
@ -64,14 +66,15 @@ local rail_rules_long =
local rail_rules_short = mesecon.rules.pplate
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."
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,
}
)
@ -80,9 +83,10 @@ register_rail("mcl_minecarts:rail",
register_rail("mcl_minecarts:golden_rail",
{"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 = {
@ -118,21 +122,20 @@ register_rail("mcl_minecarts:golden_rail_on",
register_rail("mcl_minecarts:activator_rail",
{"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,
},
},
},
-- Hidden from creative because no cart is using this rail so far.
-- TODO: Remove this when the activator rail has become useful.
false
}
)
-- Activator rail (on)
@ -147,6 +150,20 @@ register_rail("mcl_minecarts:activator_rail_on",
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",
},
@ -157,9 +174,10 @@ 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,
@ -205,9 +223,6 @@ minetest.register_craft({
}
})
-- Activator rail crafting is disabled until it becomes useful.
-- TODO: Enable crafting as needed.
if false then
minetest.register_craft({
output = "mcl_minecarts:activator_rail 6",
recipe = {
@ -216,7 +231,6 @@ minetest.register_craft({
{"mcl_core:iron_ingot", "mcl_core:stick", "mcl_core:iron_ingot"},
}
})
end
minetest.register_craft({
output = "mcl_minecarts:detector_rail 6",

Binary file not shown.

Before

Width:  |  Height:  |  Size: 249 B

After

Width:  |  Height:  |  Size: 257 B

File diff suppressed because it is too large Load Diff

View File

@ -28,10 +28,19 @@ functions needed for the mob to work properly which contains the following:
"monster" attacks player or npc on sight.
"npc" walk around and will defend themselves if hit first, they
kill monsters.
'hp_min' has the minimum health value the mob can spawn with.
'hp_max' has the maximum health value the mob can spawn with.
'armor' holds strength of mob, 100 is normal, lower is more powerful
and needs more hits and better weapons to kill.
'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.
@ -41,10 +50,12 @@ functions needed for the mob to work properly which contains the following:
'jump' when true allows your mob to jump updwards.
'jump_height' holds the height your mob can jump, 0 to disable jumping.
'stepheight' height of a block that your mob can easily walk up onto,
defaults to 1.1.
defaults to 0.6.
'fly' when true allows your mob to fly around instead of walking.
'fly_in' holds the node name that the mob flies (or swims) around
in e.g. "air" or "default:water_source".
'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
@ -56,9 +67,11 @@ functions needed for the mob to work properly which contains the following:
'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.
water (default: 0).
'lava_damage' holds the damage per second inflicted to mobs when standing
in lava or fire.
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).
@ -78,6 +91,8 @@ functions needed for the mob to work properly which contains the following:
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.
@ -114,10 +129,6 @@ functions needed for the mob to work properly which contains the following:
e.g. {"player", "mobs_animal:chicken"}.
'runaway_from' contains a table with mob names to run away from, add
"player" to list to runaway from player also.
'blood_amount' contains the number of blood droplets to appear when
mob is hit.
'blood_texture' has the texture name to use for droplets e.g.
"mobs_blood.png", or table {"blood1.png", "blood2.png"}
'pathfinding' set to 1 for mobs to use pathfinder feature to locate
player, set to 2 so they can build/break also (only
works with dogfight attack and when 'mobs_griefing'
@ -131,6 +142,7 @@ functions needed for the mob to work properly which contains the following:
'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)
@ -142,6 +154,9 @@ functions needed for the mob to work properly which contains the following:
'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.
@ -156,7 +171,9 @@ functions needed for the mob to work properly which contains the following:
'mesh' uses separate object file to define mob.
'visual_size' has the size of the mob, defaults to {x = 1, y = 1}
'collisionbox' has the box in which mob can be interacted with the
world e.g. {-0.5, -0.5, -0.5, 0.5, 0.5, 0.5}
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
@ -209,12 +226,22 @@ functions needed for the mob to work properly which contains the following:
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
----------------
@ -234,8 +261,9 @@ eating.
'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.
'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
@ -289,12 +317,18 @@ 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 for obtaining milk from cow and wool from
sheep
'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
@ -396,6 +430,9 @@ This function registers a arrow for mobs with the attack type shoot.
'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
@ -429,8 +466,6 @@ This function registers a spawn egg which can be used by admin to properly spawn
Explosion Function
------------------
mobs:explosion(pos, radius) -- DEPRECATED!!! use mobs:boom() instead
mobs:boom(self, pos, radius)
'self' mob entity
'pos' centre position of explosion
@ -573,19 +608,13 @@ External Settings for "minetest.conf"
'enable_damage' if true monsters will attack players (default is true)
'only_peaceful_mobs' if true only animals will spawn in game (default is
false)
'mobs_disable_blood' if false blood effects appear when mob is hit (default
'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)
'remove_far_mobs' if true then untamed mobs that are outside players
visual range will be removed (default is true)
'mobname' can change specific mob chance rate (0 to disable) and
spawn number e.g. mobs_animal:cow = 1000,5
'mob_difficulty' sets difficulty level (health and hit damage
multiplied by this number), defaults to 1.0.
'mob_show_health' if false then punching mob will not show health status
(true by default)
'mob_chance_multiplier' multiplies chance of all mobs spawning and can be set
'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.

View File

@ -1,11 +1,12 @@
local S = mobs.intllib
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. Now you can use the name tag to name a mob with a rightclick. This uses up the name tag."),
_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,

View File

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

View File

@ -9,5 +9,3 @@ dofile(path .. "/mount.lua")
-- Mob Items
dofile(path .. "/crafts.lua")
minetest.log("action", "[MOD] Mobs Redo: MineClone 2 Edition loaded")

View File

@ -1,45 +0,0 @@
-- Fallback functions for when `intllib` is not installed.
-- Code released under Unlicense <http://unlicense.org>.
-- Get the latest version of this file at:
-- https://raw.githubusercontent.com/minetest-mods/intllib/master/lib/intllib.lua
local function format(str, ...)
local args = { ... }
local function repl(escape, open, num, close)
if escape == "" then
local replacement = tostring(args[tonumber(num)])
if open == "" then
replacement = replacement..close
end
return replacement
else
return "@"..open..num..close
end
end
return (str:gsub("(@?)@(%(?)(%d+)(%)?)", repl))
end
local gettext, ngettext
if minetest.get_modpath("intllib") then
if intllib.make_gettext_pair then
-- New method using gettext.
gettext, ngettext = intllib.make_gettext_pair()
else
-- Old method using text files.
gettext = intllib.Getter()
end
end
-- Fill in missing functions.
gettext = gettext or function(msgid, ...)
return format(msgid, ...)
end
ngettext = ngettext or function(msgid, msgid_plural, n, ...)
return format(n==1 and msgid or msgid_plural, ...)
end
return gettext, ngettext

View File

@ -1,131 +0,0 @@
# Mobs Redo translation.
# Copyright (C) 2017 TenPlus1
# This file is distributed under the same license as the mobs package.
# Wuzzy <Wuzzy@mail.ru>, 2017
#
msgid ""
msgstr ""
"Project-Id-Version: mobs\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2017-07-02 16:48+0200\n"
"PO-Revision-Date: 2017-07-02 14:27+0200\n"
"Last-Translator: Wuzzy <almikes@aol.com>\n"
"Language-Team: \n"
"Language: de_DE\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Generator: Poedit 2.0.2\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#: api.lua
msgid "** Peaceful Mode Active - No Monsters Will Spawn"
msgstr ""
#: api.lua
msgid "Mob has been protected!"
msgstr "Kreatur wurde geschützt!"
#: api.lua
msgid "@1 (Tamed)"
msgstr "@1 (Gezähmt)"
#: api.lua
msgid "Not tamed!"
msgstr "Nicht gezähmt!"
#: api.lua
msgid "@1 is owner!"
msgstr "@1 ist der Besitzer!"
#: api.lua
msgid "Missed!"
msgstr "Daneben!"
#: api.lua
msgid "Already protected!"
msgstr "Bereits geschützt!"
#: api.lua
msgid "@1 at full health (@2)"
msgstr "@1 bei voller Gesundheit (@2)"
#: api.lua
msgid "@1 has been tamed!"
msgstr "@1 wurde gezähmt!"
#: api.lua
msgid "Enter name:"
msgstr "Namen eingeben:"
#: api.lua
msgid "Rename"
msgstr "Umbenennen"
#: crafts.lua
msgid "Name Tag"
msgstr "Namensschild"
#: crafts.lua
msgid "Leather"
msgstr "Leder"
#: crafts.lua
msgid "Raw Meat"
msgstr "Rohes Fleisch"
#: crafts.lua
msgid "Meat"
msgstr "Fleisch"
#: crafts.lua
msgid "Lasso (right-click animal to put in inventory)"
msgstr "Lasso (Rechtsklick auf Tier, um es zu nehmen)"
#: crafts.lua
msgid "Net (right-click animal to put in inventory)"
msgstr "Netz (Rechtsklick auf Tier, um es zu nehmen)"
#: crafts.lua
msgid "Steel Shears (right-click to shear)"
msgstr "Stahlschere (Rechtsklick zum Scheren)"
#: crafts.lua
msgid "Mob Protection Rune"
msgstr "Kreaturschutzrune"
#: crafts.lua
msgid "Saddle"
msgstr "Sattel"
#: crafts.lua
msgid "Mob Fence"
msgstr "Kreaturen Zaun"
#: spawner.lua
msgid "Mob Spawner"
msgstr "Kreaturenspawner"
#: spawner.lua
msgid "Mob MinLight MaxLight Amount PlayerDist"
msgstr "Kreatur MinLicht MaxLicht Menge SpielerEntfng"
#: spawner.lua
msgid "Spawner Not Active (enter settings)"
msgstr "Nicht aktiv (Einstellungen eingeben)"
#: spawner.lua
msgid "Spawner Active (@1)"
msgstr "Spawner aktiv (@1)"
#: spawner.lua
msgid "Mob Spawner settings failed!"
msgstr "Kreaturenspawner-Einstellungen gescheitert!"
#: spawner.lua
msgid ""
"Syntax: “name min_light[0-14] max_light[0-14] max_mobs_in_area[0 to disable] "
"distance[1-20] y_offset[-10 to 10]”"
msgstr ""
"Syntax: „name min_licht[0-14] max_licht[0-14] max_mobs_im_gebiet[0 zum "
"Deaktivieren] distanz[1-20] y_versatz[-10 bis 10]“"

View File

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

View File

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

View File

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

View File

@ -0,0 +1,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.=Mode paisible actif! Aucun monstre n'apparaîtra.
This allows you to place a single mob.=Cela vous permet de placer un seul 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.=Placez-le là où vous voulez que le mob apparaisse. Les animaux apparaîtront apprivoisés, sauf si vous maintenez la touche furtive enfoncée pendant le placement. Si vous le placez sur un générateur de mob, vous changez le mob qu'il génère.
You need the “maphack” privilege to change the mob spawner.=Vous avez besoin du privilège "maphack" pour changer le générateur de mob.
Name Tag=Étiquette de nom
A name tag is an item to name a mob.=Une étiquette de nom est un élément pour nommer un 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.=Avant d'utiliser l'étiquette de nom, vous devez définir un nom sur une enclume. Ensuite, vous pouvez utiliser l'étiquette de nom pour nommer un mob. Cela utilise l'étiquette de nom.
Only peaceful mobs allowed!=Seuls les mobs pacifiques sont autorisées!
Give names to mobs=Donne des noms aux mobs
Set name at anvil=Définir le nom sur l'enclume

View File

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

View File

@ -1,133 +0,0 @@
# SOME DESCRIPTIVE TITLE.
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the PACKAGE package.
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
#
msgid ""
msgstr ""
"Project-Id-Version: mobs\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2017-07-02 16:48+0200\n"
"PO-Revision-Date: 2017-07-02 14:55+0200\n"
"Last-Translator: Wuzzy <almikes@aol.com>\n"
"Language-Team: \n"
"Language: pt\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Generator: Poedit 2.0.2\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#: api.lua
msgid "** Peaceful Mode Active - No Monsters Will Spawn"
msgstr ""
#: api.lua
msgid "Mob has been protected!"
msgstr ""
#: api.lua
msgid "@1 (Tamed)"
msgstr ""
#: api.lua
msgid "Not tamed!"
msgstr "Indomesticado!"
#: api.lua
msgid "@1 is owner!"
msgstr "Dono @1!"
#: api.lua
msgid "Missed!"
msgstr "Faltou!"
#: api.lua
msgid "Already protected!"
msgstr ""
#: api.lua
msgid "@1 at full health (@2)"
msgstr "@1 em plena saude (@2)"
#: api.lua
msgid "@1 has been tamed!"
msgstr "@1 foi domesticado!"
#: api.lua
msgid "Enter name:"
msgstr "Insira um nome:"
#: api.lua
msgid "Rename"
msgstr "Renomear"
#: crafts.lua
msgid "Name Tag"
msgstr "Etiqueta"
#: crafts.lua
msgid "Leather"
msgstr "Couro"
#: crafts.lua
msgid "Raw Meat"
msgstr "Carne crua"
#: crafts.lua
msgid "Meat"
msgstr "Carne"
#: crafts.lua
#, fuzzy
msgid "Lasso (right-click animal to put in inventory)"
msgstr "Laço (clique-direito no animal para por no inventario)"
#: crafts.lua
msgid "Net (right-click animal to put in inventory)"
msgstr "Net (clique-direito no animal para por no inventario)"
#: crafts.lua
msgid "Steel Shears (right-click to shear)"
msgstr "Tesoura de Aço (clique-direito para tosquiar)"
#: crafts.lua
msgid "Mob Protection Rune"
msgstr ""
#: crafts.lua
msgid "Saddle"
msgstr ""
#: crafts.lua
msgid "Mob Fence"
msgstr ""
#: spawner.lua
msgid "Mob Spawner"
msgstr "Spawnador de Mob"
#: spawner.lua
msgid "Mob MinLight MaxLight Amount PlayerDist"
msgstr "Mob LuzMinima LuzMaxima Valor DistJogador"
#: spawner.lua
msgid "Spawner Not Active (enter settings)"
msgstr "Spawnador Inativo (configurar)"
#: spawner.lua
msgid "Spawner Active (@1)"
msgstr "Spawnador Ativo (@1)"
#: spawner.lua
msgid "Mob Spawner settings failed!"
msgstr "Configuraçao de Spawnador do Mob falhou!"
#: spawner.lua
#, fuzzy
msgid ""
"Syntax: “name min_light[0-14] max_light[0-14] max_mobs_in_area[0 to disable] "
"distance[1-20] y_offset[-10 to 10]”"
msgstr ""
"> nome luz_min[0-14] luz_max[0-14] max_mobs_na_area[0 para desabilitar] "
"distancia[1-20] y_offset[-10 a 10]"

View File

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

View File

@ -1,128 +0,0 @@
# SOME DESCRIPTIVE TITLE.
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the PACKAGE package.
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
#
#, fuzzy
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2017-07-02 16:48+0200\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
"Language: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
#: api.lua
msgid "** Peaceful Mode Active - No Monsters Will Spawn"
msgstr ""
#: api.lua
msgid "Mob has been protected!"
msgstr ""
#: api.lua
msgid "@1 (Tamed)"
msgstr ""
#: api.lua
msgid "Not tamed!"
msgstr ""
#: api.lua
msgid "@1 is owner!"
msgstr ""
#: api.lua
msgid "Missed!"
msgstr ""
#: api.lua
msgid "Already protected!"
msgstr ""
#: api.lua
msgid "@1 at full health (@2)"
msgstr ""
#: api.lua
msgid "@1 has been tamed!"
msgstr ""
#: api.lua
msgid "Enter name:"
msgstr ""
#: api.lua
msgid "Rename"
msgstr ""
#: crafts.lua
msgid "Name Tag"
msgstr ""
#: crafts.lua
msgid "Leather"
msgstr ""
#: crafts.lua
msgid "Raw Meat"
msgstr ""
#: crafts.lua
msgid "Meat"
msgstr ""
#: crafts.lua
msgid "Lasso (right-click animal to put in inventory)"
msgstr ""
#: crafts.lua
msgid "Net (right-click animal to put in inventory)"
msgstr ""
#: crafts.lua
msgid "Steel Shears (right-click to shear)"
msgstr ""
#: crafts.lua
msgid "Mob Protection Rune"
msgstr ""
#: crafts.lua
msgid "Saddle"
msgstr ""
#: crafts.lua
msgid "Mob Fence"
msgstr ""
#: spawner.lua
msgid "Mob Spawner"
msgstr ""
#: spawner.lua
msgid "Mob MinLight MaxLight Amount PlayerDist"
msgstr ""
#: spawner.lua
msgid "Spawner Not Active (enter settings)"
msgstr ""
#: spawner.lua
msgid "Spawner Active (@1)"
msgstr ""
#: spawner.lua
msgid "Mob Spawner settings failed!"
msgstr ""
#: spawner.lua
msgid ""
"Syntax: “name min_light[0-14] max_light[0-14] max_mobs_in_area[0 to disable] "
"distance[1-20] y_offset[-10 to 10]”"
msgstr ""

View File

@ -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

@ -1,133 +0,0 @@
# SOME DESCRIPTIVE TITLE.
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the PACKAGE package.
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
#
msgid ""
msgstr ""
"Project-Id-Version: mobs\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2017-07-02 16:48+0200\n"
"PO-Revision-Date: 2017-07-02 14:56+0200\n"
"Last-Translator: Wuzzy <almikes@aol.com>\n"
"Language-Team: \n"
"Language: tr\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Generator: Poedit 2.0.2\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#: api.lua
msgid "** Peaceful Mode Active - No Monsters Will Spawn"
msgstr ""
#: api.lua
msgid "Mob has been protected!"
msgstr ""
#: api.lua
msgid "@1 (Tamed)"
msgstr ""
#: api.lua
msgid "Not tamed!"
msgstr "Evcil değil!"
#: api.lua
msgid "@1 is owner!"
msgstr "Sahibi @1!"
#: api.lua
msgid "Missed!"
msgstr "Kaçırdın!"
#: api.lua
msgid "Already protected!"
msgstr ""
#: api.lua
msgid "@1 at full health (@2)"
msgstr "@1 tam canında (@2)"
#: api.lua
msgid "@1 has been tamed!"
msgstr "@1 tamamen evcilleştirilmiştir!"
#: api.lua
msgid "Enter name:"
msgstr "İsim gir:"
#: api.lua
msgid "Rename"
msgstr "Yeniden adlandır"
#: crafts.lua
msgid "Name Tag"
msgstr "İsim etiketi"
#: crafts.lua
msgid "Leather"
msgstr "Deri"
#: crafts.lua
msgid "Raw Meat"
msgstr "Çiğ et"
#: crafts.lua
msgid "Meat"
msgstr "Et"
#: crafts.lua
#, fuzzy
msgid "Lasso (right-click animal to put in inventory)"
msgstr "Kement (hayvana sağ tıklayarak envantere koy)"
#: crafts.lua
msgid "Net (right-click animal to put in inventory)"
msgstr "Ağ (hayvana sağ tıklayarak envantere koy)"
#: crafts.lua
msgid "Steel Shears (right-click to shear)"
msgstr "Çelik makas (sağ tıklayarak kes)"
#: crafts.lua
msgid "Mob Protection Rune"
msgstr ""
#: crafts.lua
msgid "Saddle"
msgstr ""
#: crafts.lua
msgid "Mob Fence"
msgstr "Canavar Yaratıcı"
#: spawner.lua
msgid "Mob Spawner"
msgstr "Canavar Yaratıcı"
#: spawner.lua
msgid "Mob MinLight MaxLight Amount PlayerDist"
msgstr "Mob MinIşık MaxIşık Miktar OyuncuMesafesi"
#: spawner.lua
msgid "Spawner Not Active (enter settings)"
msgstr "Yaratıcı aktif değil (ayarlara gir)"
#: spawner.lua
msgid "Spawner Active (@1)"
msgstr "Yaratıcı aktif (@1)"
#: spawner.lua
msgid "Mob Spawner settings failed!"
msgstr "Yaratıcı ayarları uygulanamadı."
#: spawner.lua
#, fuzzy
msgid ""
"Syntax: “name min_light[0-14] max_light[0-14] max_mobs_in_area[0 to disable] "
"distance[1-20] y_offset[-10 to 10]”"
msgstr ""
"> isim min_isik[0-14] max_isik[0-14] alandaki_max_canavar_sayisi[kapatmak "
"icin 0] mesafe[1-20] y_cikinti[-10 ve 10 arası]"

View File

@ -1 +1,2 @@
name = mcl_mobs
optional_depends = mcl_weather, mcl_explosions, 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}
@ -183,14 +183,14 @@ 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)
@ -215,7 +215,7 @@ function mobs.drive(entity, moving_anim, stand_anim, can_fly, dtime)
end
-- fix mob rotation
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
@ -262,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)
@ -275,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
@ -293,7 +293,7 @@ function mobs.drive(entity, moving_anim, stand_anim, can_fly, dtime)
-- Set position, velocity and acceleration
local p = entity.object:get_pos()
local new_velo = {x = 0, y = 0, z = 0}
local new_velo
local new_acce = {x = 0, y = -9.8, z = 0}
p.y = p.y - 0.5
@ -318,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,
@ -348,7 +348,7 @@ function mobs.drive(entity, moving_anim, stand_anim, can_fly, dtime)
if math.abs(velo.y) < 1 then
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
@ -360,8 +360,8 @@ function mobs.drive(entity, moving_anim, stand_anim, can_fly, dtime)
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
@ -387,34 +387,29 @@ 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_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
@ -431,8 +426,8 @@ function mobs.fly(entity, dtime, speed, shoots, arrow, moving_anim, stand_anim)
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_horizontal()
obj:setyaw(yaw + math.pi / 2)
obj:setvelocity(vec)
obj:set_yaw(yaw + math.pi / 2)
obj:set_velocity(vec)
else
obj:remove()
end

View File

@ -0,0 +1,276 @@
mcl_paintings = {}
dofile(minetest.get_modpath(minetest.get_current_modname()).."/paintings.lua")
local S = minetest.get_translator("mcl_paintings")
local wood = "[combine:16x16:-192,0=mcl_paintings_paintings.png"
-- Check if there's a painting for provided painting size.
-- If yes, returns the arguments.
-- If not, returns the next smaller available painting.
local shrink_painting = function(x, y)
if x > 4 or y > 4 then
return nil
end
local xstart = x
local painting
while not painting do
painting = mcl_paintings.paintings[y] and mcl_paintings.paintings[y][x]
if type(painting) == "table" then
break
elseif type(painting) == "number" then
x = painting
painting = nil
else
x = xstart
y = y - 1
end
if y < 1 then
return nil
end
end
if type(painting) == "table" then
return x, y
end
end
local get_painting = function(x, y, motive)
local painting = mcl_paintings.paintings[y] and mcl_paintings.paintings[y][x] and mcl_paintings.paintings[y][x][motive]
if not painting then
return nil
end
local px, py = -painting.cx, -painting.cy
local sx, sy = 16*x, 16*y
return "[combine:"..sx.."x"..sy..":"..px..","..py.."=mcl_paintings_paintings.png"
end
local get_random_painting = function(x, y)
if not mcl_paintings.paintings[y] or not mcl_paintings.paintings[y][x] then
return nil
end
local max = #mcl_paintings.paintings[y][x]
if max < 1 then
return nil
end
local r = math.random(1, max)
return get_painting(x, y, r), r
end
local size_to_minmax = function(size)
local min, max
if size == 2 then
min = -0.5
max = 1.5
elseif size == 3 then
min = -1.5
max = 1.5
elseif size == 4 then
min = -1.5
max = 2.5
else
min = -0.5
max = 0.5
end
return min, max
end
local size_to_minmax_entity = function(size)
return -size/2, size/2
end
local set_entity = function(object)
local ent = object:get_luaentity()
local wallm = ent._facing
local xsize = ent._xsize
local ysize = ent._ysize
local exmin, exmax = size_to_minmax_entity(xsize)
local eymin, eymax = size_to_minmax_entity(ysize)
local visual_size = { x=xsize-0.0001, y=ysize-0.0001, z=1/32 }
if not ent._xsize or not ent._ysize or not ent._motive then
minetest.log("error", "[mcl_paintings] Painting loaded with missing painting values!")
return
end
local painting = get_painting(xsize, ysize, ent._motive)
if not painting then
minetest.log("error", "[mcl_paintings] No painting found for size "
..xsize..","..ysize..", motive number "..ent._motive.."!")
return
end
if wallm == 4 or wallm == 5 then
object:set_properties({
selectionbox = { exmin, eymin, -1/64, exmax, eymax, 1/64 },
visual_size = visual_size,
textures = { wood, wood, wood, wood, painting, wood },
})
else
object:set_properties({
selectionbox = { -1/64, eymin, exmin, 1/64, eymax, exmax },
visual_size = visual_size,
textures = { wood, wood, wood, wood, painting, wood },
})
end
local dir = minetest.wallmounted_to_dir(wallm)
if not dir then
return
end
object:set_yaw(minetest.dir_to_yaw(dir))
end
minetest.register_entity("mcl_paintings:painting", {
visual = "cube",
visual_size = { x=0.999, y=0.999, z=1/32 },
selectionbox = { -1/64, -0.5, -0.5, 1/64, 0.5, 0.5 },
physical = false,
collide_with_objects = false,
textures = { wood, wood, wood, wood, wood, wood },
hp_max = 1,
_motive = 0,
_pos = nil,
_facing = 2,
_xsize = 1,
_ysize = 1,
on_activate = function(self, staticdata)
if staticdata and staticdata ~= "" then
local data = minetest.deserialize(staticdata)
if data then
self._facing = data._facing
self._pos = data._pos
self._motive = data._motive
self._xsize = data._xsize
self._ysize = data._ysize
end
end
set_entity(self.object)
end,
get_staticdata = function(self)
local data = {
_facing = self._facing,
_pos = self._pos,
_motive = self._motive,
_xsize = self._xsize,
_ysize = self._ysize,
}
return minetest.serialize(data)
end,
on_death = function(self, killer)
-- Drop as item on death
if not minetest.settings:get_bool("creative_mode") then
local pos = self._pos
if not pos then
pos = self.object:get_pos()
end
minetest.add_item(pos, "mcl_paintings:painting")
end
end,
})
minetest.register_craftitem("mcl_paintings:painting", {
description = S("Painting"),
inventory_image = "mcl_paintings_painting.png",
on_place = function(itemstack, placer, pointed_thing)
if pointed_thing.type ~= "node" then
return itemstack
end
local dir = vector.subtract(pointed_thing.above, pointed_thing.under)
dir = vector.normalize(dir)
if dir.y ~= 0 then
-- Ceiling/floor paintings are not supported
return itemstack
end
local wallm = minetest.dir_to_wallmounted(dir)
if wallm then
local ppos = pointed_thing.above
local xmax
local ymax = 4
local xmaxes = {}
local ymaxed = false
local negative = dir.x < 0 or dir.z > 0
-- Check maximum possible painting size
local t
for y=0,3 do
for x=0,3 do
local k = x
if negative then
k = -k
end
if dir.z ~= 0 then
t = {x=k,y=y,z=0}
else
t = {x=0,y=y,z=k}
end
local unode = minetest.get_node(vector.add(pointed_thing.under, t))
local anode = minetest.get_node(vector.add(ppos, t))
local udef = minetest.registered_nodes[unode.name]
local adef = minetest.registered_nodes[anode.name]
if (not (udef and udef.walkable)) or (not adef or adef.walkable) then
xmaxes[y+1] = x
if x == 0 and not ymaxed then
ymax = y
ymaxed = true
end
break
end
end
if not xmaxes[y] then
xmaxes[y] = 4
end
end
xmax = math.max(unpack(xmaxes))
local xsize, ysize = xmax, ymax
xsize, ysize = shrink_painting(xsize, ysize)
if not xsize then
return itemstack
end
local _, exmax = size_to_minmax_entity(xsize)
local _, eymax = size_to_minmax_entity(ysize)
local pposa = vector.subtract(ppos, vector.multiply(dir, 0.5-2/64))
local pexmax
local peymax = eymax - 0.5
if negative then
pexmax = -exmax + 0.5
else
pexmax = exmax - 0.5
end
if dir.z ~= 0 then
pposa = vector.add(pposa, {x=pexmax, y=peymax, z=0})
else
pposa = vector.add(pposa, {x=0, y=peymax, z=pexmax})
end
local painting, pid = get_random_painting(xsize, ysize)
if not painting then
minetest.log("error", "[mcl_paintings] No painting found for size "..xsize..","..ysize.."!")
return itemstack
end
local staticdata = {
_facing = wallm,
_pos = ppos,
_motive = pid,
_xsize = xsize,
_ysize = ysize,
}
local obj = minetest.add_entity(pposa, "mcl_paintings:painting", minetest.serialize(staticdata))
if not obj then
return itemstack
end
else
return itemstack
end
if not minetest.settings:get_bool("creative_mode") then
itemstack:take_item()
end
return itemstack
end,
})
minetest.register_craft({
output = "mcl_paintings:painting",
recipe = {
{ "mcl_core:stick", "mcl_core:stick", "mcl_core:stick" },
{ "mcl_core:stick", "group:wool", "mcl_core:stick" },
{ "mcl_core:stick", "mcl_core:stick", "mcl_core:stick" },
}
})

View File

@ -0,0 +1,2 @@
# textdomain:mcl_paintings
Painting=Gemälde

View File

@ -0,0 +1,2 @@
# textdomain:mcl_paintings
Painting=

View File

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

View File

@ -0,0 +1,55 @@
local TS = 16 -- texture size
mcl_paintings.paintings = {
[1] = {
[1] = {
{ cx = 0, cy = 0 },
{ cx = TS, cy = 0 },
{ cx = 2*TS, cy = 0 },
{ cx = 3*TS, cy = 0 },
{ cx = 4*TS, cy = 0 },
{ cx = 5*TS, cy = 0 },
{ cx = 6*TS, cy = 0 },
},
[2] = {
{ cx = 0, cy = 2*TS },
{ cx = 2*TS, cy = 2*TS },
{ cx = 4*TS, cy = 2*TS },
{ cx = 6*TS, cy = 2*TS },
{ cx = 8*TS, cy = 2*TS },
},
[3] = 2,
[4] = 2,
},
[2] = {
[1] = {
{ cx = 0, cy = 4*TS },
{ cx = TS, cy = 4*TS },
},
[2] = {
{ cx = 0, cy = 8*TS },
{ cx = 2*TS, cy = 8*TS },
{ cx = 4*TS, cy = 8*TS },
{ cx = 6*TS, cy = 8*TS },
{ cx = 8*TS, cy = 8*TS },
{ cx = 10*TS, cy = 8*TS },
},
[3] = 2,
[4] = {
{ cx = 0, cy = 6*TS },
},
},
[3] = {
[4] = {
{ cx = 12*TS, cy = 4*TS },
{ cx = 12*TS, cy = 7*TS },
},
},
[4] = {
[4] = {
{ cx = 0, cy = 12*TS },
{ cx = 4*TS, cy = 12*TS },
{ cx = 8*TS, cy = 12*TS },
},
},
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 229 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 46 KiB

View File

@ -157,6 +157,7 @@ mobs_mc.follow = {
chicken = { "farming:seed_wheat", "farming:seed_cotton" }, -- seeds in general
parrot = { "farming:seed_wheat", "farming:seed_cotton" }, -- seeds in general
horse = { mobs_mc.items.apple, mobs_mc.items.sugar, mobs_mc.items.wheat, mobs_mc.items.hay_bale, mobs_mc.items.golden_apple, mobs_mc.items.golden_carrot },
llama = { mobs_mc.items.wheat, mobs_mc.items.hay_bale, },
pig = { mobs_mc.items.potato, mobs_mc.items.carrot, mobs_mc.items.carrot_on_a_stick,
mobs_mc.items.apple, -- Minetest Game extra
},
@ -278,8 +279,8 @@ mobs_mc.spawn = {
-- These probably don't need overrides
mushroom_island = { mobs_mc.items.mycelium, "mcl_core:mycelium" },
nether_fortress = { mobs_mc.items.nether_brick_block, "mcl_nether:nether_brick", "mcl_portals:nether_air" },
nether = { mobs_mc.items.netherrack, "mcl_nether:netherrack", "mcl_portals:nether_air" },
nether_fortress = { mobs_mc.items.nether_brick_block, "mcl_nether:nether_brick", },
nether = { mobs_mc.items.netherrack, "mcl_nether:netherrack", },
nether_portal = { mobs_mc.items.nether_portal, "mcl_portals:portal" },
water = { mobs_mc.items.water_source, "mcl_core:water_source", "default:water_source" },
}

View File

@ -3,21 +3,20 @@
--made for MC like Survival game
--License for code WTFPL and otherwise stated in readmes
--dofile(minetest.get_modpath("mobs").."/api.lua")
--THIS IS THE MASTER ITEM LIST TO USE WITH DEFAULT
-- intllib
local MP = minetest.get_modpath(minetest.get_current_modname())
local S, NS = dofile(MP.."/intllib.lua")
-- NOTE: Most strings intentionally not marked for translation, other mods already have these items.
-- TODO: Remove this file eventually, most items are already outsourced in other mods.
local S = minetest.get_translator("mobs_mc")
local c = mobs_mc.is_item_variable_overridden
-- Blaze
if c("blaze_rod") then
minetest.register_craftitem("mobs_mc:blaze_rod", {
description = S("Blaze Rod"),
_doc_items_longdesc = S("This is a crafting component dropped from dead blazes."),
description = "Blaze Rod",
_doc_items_longdesc = "This is a crafting component dropped from dead blazes.",
wield_image = "mcl_mobitems_blaze_rod.png",
inventory_image = "mcl_mobitems_blaze_rod.png",
})
@ -43,8 +42,8 @@ end
if c("blaze_powder") then
minetest.register_craftitem("mobs_mc:blaze_powder", {
description = S("Blaze Powder"),
_doc_items_longdesc = S("This item is mainly used for brewing potions and crafting."),
description = "Blaze Powder",
_doc_items_longdesc = "This item is mainly used for brewing potions and crafting.",
wield_image = "mcl_mobitems_blaze_powder.png",
inventory_image = "mcl_mobitems_blaze_powder.png",
})
@ -60,8 +59,8 @@ end
-- Chicken
if c("chicken_raw") then
minetest.register_craftitem("mobs_mc:chicken_raw", {
description = S("Raw Chicken"),
_doc_items_longdesc = S("Raw chicken is a food item and can be eaten safely. Cooking it will increase its nutritional value."),
description = "Raw Chicken",
_doc_items_longdesc = "Raw chicken is a food item and can be eaten safely. Cooking it will increase its nutritional value.",
inventory_image = "mcl_mobitems_chicken_raw.png",
groups = { food = 2, eatable = 2 },
on_use = minetest.item_eat(2),
@ -70,8 +69,8 @@ end
if c("chicken_cooked") then
minetest.register_craftitem("mobs_mc:chicken_cooked", {
description = S("Cooked Chicken"),
_doc_items_longdesc = S("A cooked chicken is a healthy food item which can be eaten."),
description = "Cooked Chicken",
_doc_items_longdesc = "A cooked chicken is a healthy food item which can be eaten.",
inventory_image = "mcl_mobitems_chicken_cooked.png",
groups = { food = 2, eatable = 6 },
on_use = minetest.item_eat(6),
@ -89,8 +88,8 @@ end
if c("feather") then
minetest.register_craftitem("mobs_mc:feather", {
description = S("Feather"),
_doc_items_longdesc = S("Feathers are used in crafting and are dropped from chickens."),
description = "Feather",
_doc_items_longdesc = "Feathers are used in crafting and are dropped from chickens.",
inventory_image = "mcl_mobitems_feather.png",
})
end
@ -98,8 +97,8 @@ end
-- Cow and mooshroom
if c("beef_raw") then
minetest.register_craftitem("mobs_mc:beef_raw", {
description = S("Raw Beef"),
_doc_items_longdesc = S("Raw beef is the flesh from cows and can be eaten safely. Cooking it will greatly increase its nutritional value."),
description = "Raw Beef",
_doc_items_longdesc = "Raw beef is the flesh from cows and can be eaten safely. Cooking it will greatly increase its nutritional value.",
inventory_image = "mcl_mobitems_beef_raw.png",
groups = { food = 2, eatable = 3 },
on_use = minetest.item_eat(3),
@ -108,8 +107,8 @@ end
if c("beef_cooked") then
minetest.register_craftitem("mobs_mc:beef_cooked", {
description = S("Steak"),
_doc_items_longdesc = S("Steak is cooked beef from cows and can be eaten."),
description = "Steak",
_doc_items_longdesc = "Steak is cooked beef from cows and can be eaten.",
inventory_image = "mcl_mobitems_beef_cooked.png",
groups = { food = 2, eatable = 8 },
on_use = minetest.item_eat(8),
@ -129,8 +128,8 @@ end
if c("milk") then
-- milk
minetest.register_craftitem("mobs_mc:milk_bucket", {
description = S("Milk"),
_doc_items_longdesc = S("Milk is a food item obtained by using a bucket on a cow."),
description = "Milk",
_doc_items_longdesc = "Milk is a food item obtained by using a bucket on a cow.",
inventory_image = "mobs_bucket_milk.png",
groups = { food = 3, eatable = 1 },
on_use = minetest.item_eat(1, "bucket:bucket_empty"),
@ -140,8 +139,8 @@ end
if c("bowl") then
minetest.register_craftitem("mobs_mc:bowl", {
description = S("Bowl"),
_doc_items_longdesc = S("Bowls are mainly used to hold tasty soups."),
description = "Bowl",
_doc_items_longdesc = "Bowls are mainly used to hold tasty soups.",
inventory_image = "mcl_core_bowl.png",
})
@ -162,8 +161,8 @@ end
if c("mushroom_stew") then
minetest.register_craftitem("mobs_mc:mushroom_stew", {
description = S("Mushroom Stew"),
_doc_items_longdesc = S("Mushroom stew is a healthy soup."),
description = "Mushroom Stew",
_doc_items_longdesc = "Mushroom stew is a healthy soup.",
inventory_image = "farming_mushroom_stew.png",
groups = { food = 3, eatable = 6 },
on_use = minetest.item_eat(6, "mobs_mc:bowl"),
@ -181,7 +180,7 @@ if c("dragon_egg") then
--ender dragon
minetest.register_node("mobs_mc:dragon_egg", {
description = S("Dragon Egg"),
description = "Dragon Egg",
tiles = {
"mcl_end_dragon_egg.png",
"mcl_end_dragon_egg.png",
@ -225,7 +224,7 @@ end
-- Enderman
if c("ender_eye") then
minetest.register_craftitem("mobs_mc:ender_eye", {
description = S("Eye of Ender"),
description = "Eye of Ender",
_doc_items_longdesc = longdesc_craftitem,
inventory_image = "mcl_end_ender_eye.png",
groups = { craftitem = 1 },
@ -243,8 +242,8 @@ end
-- Ghast
if c("ghast_tear") then
minetest.register_craftitem("mobs_mc:ghast_tear", {
description = S("Ghast Tear"),
_doc_items_longdesc = S("A ghast tear is an item used in potion brewing. It is dropped from dead ghasts."),
description = "Ghast Tear",
_doc_items_longdesc = "A ghast tear is an item used in potion brewing. It is dropped from dead ghasts.",
wield_image = "mcl_mobitems_ghast_tear.png",
inventory_image = "mcl_mobitems_ghast_tear.png",
groups = { brewitem = 1 },
@ -255,27 +254,16 @@ end
if c("saddle") then
-- Overwrite the saddle from Mobs Redo
minetest.register_craftitem(":mobs:saddle", {
description = S("Saddle"),
_doc_items_longdesc = S("Saddles can be put on horses, donkeys, mules and pigs in order to mount them."),
_doc_items_usagehelp = S("Rightclick an animal while holding a saddle to put on the saddle. You can now mount the animal by rightclicking it again."),
description = "Saddle",
_doc_items_longdesc = "Saddles can be put on horses, donkeys, mules and pigs in order to mount them.",
_doc_items_usagehelp = "Rightclick an animal while holding a saddle to put on the saddle. You can now mount the animal by rightclicking it again.",
inventory_image = "mcl_mobitems_saddle.png",
stack_max = 1,
})
end
if c("saddle") and c("lether") and c("string") and c("iron_ingot") then
minetest.register_craft({
output = "mobs_mc:saddle",
recipe = {
{"mobs:leather", "mobs:leather", "mobs:leather"},
{"farming:string", "", "farming:string"},
{"default:steel_ingot", "", "default:steel_ingot"}
},
})
end
-- Horse Armor
local horse_armor_use = S("Rightclick a horse to put on the horse armor. Donkeys and mules can't wear horse armor.")
local horse_armor_use = S("Place it on a horse to put on the horse armor. Donkeys and mules can't wear horse armor.")
-- TODO: Balance the horse armor strength, compare with MC armor strength
if c("iron_horse_armor") then
minetest.register_craftitem("mobs_mc:iron_horse_armor", {
@ -284,6 +272,9 @@ if c("iron_horse_armor") then
_doc_items_usagehelp = horse_armor_use,
inventory_image = "mobs_mc_iron_horse_armor.png",
_horse_overlay_image = "mobs_mc_horse_armor_iron.png",
sounds = {
_mcl_armor_equip = "mcl_armor_equip_iron",
},
stack_max = 1,
groups = { horse_armor = 85 },
})
@ -295,6 +286,9 @@ if c("gold_horse_armor") then
_doc_items_usagehelp = horse_armor_use,
inventory_image = "mobs_mc_gold_horse_armor.png",
_horse_overlay_image = "mobs_mc_horse_armor_gold.png",
sounds = {
_mcl_armor_equip = "mcl_armor_equip_iron",
},
stack_max = 1,
groups = { horse_armor = 60 },
})
@ -306,6 +300,9 @@ if c("diamond_horse_armor") then
_doc_items_usagehelp = horse_armor_use,
inventory_image = "mobs_mc_diamond_horse_armor.png",
_horse_overlay_image = "mobs_mc_horse_armor_diamond.png",
sounds = {
_mcl_armor_equip = "mcl_armor_equip_diamond",
},
stack_max = 1,
groups = { horse_armor = 45 },
})
@ -314,8 +311,8 @@ end
-- Pig
if c("porkchop_raw") then
minetest.register_craftitem("mobs_mc:porkchop_raw", {
description = S("Raw Porkchop"),
_doc_items_longdesc = S("A raw porkchop is the flesh from a pig and can be eaten safely. Cooking it will greatly increase its nutritional value."),
description = "Raw Porkchop",
_doc_items_longdesc = "A raw porkchop is the flesh from a pig and can be eaten safely. Cooking it will greatly increase its nutritional value.",
inventory_image = "mcl_mobitems_porkchop_raw.png",
groups = { food = 2, eatable = 3 },
on_use = minetest.item_eat(3),
@ -324,7 +321,7 @@ end
if c("porkchop_cooked") then
minetest.register_craftitem("mobs_mc:porkchop_cooked", {
description = S("Cooked Porkchop"),
description = "Cooked Porkchop",
_doc_items_longdesc = "Cooked porkchop is the cooked flesh of a pig and is used as food.",
inventory_image = "mcl_mobitems_porkchop_cooked.png",
groups = { food = 2, eatable = 8 },
@ -343,9 +340,9 @@ end
if c("carrot_on_a_stick") then
minetest.register_tool("mobs_mc:carrot_on_a_stick", {
description = S("Carrot on a Stick"),
_doc_items_longdesc = S("A carrot on a stick can be used on saddled pigs to ride them. Pigs will also follow anyone who holds a carrot on a stick near them."),
_doc_items_usagehelp = S("Rightclick a saddled pig with the carrot on a stick to mount it. You can now ride it like a horse."),
description = "Carrot on a Stick",
_doc_items_longdesc = "A carrot on a stick can be used on saddled pigs to ride them. Pigs will also follow anyone who holds a carrot on a stick near them.",
_doc_items_usagehelp = "Rightclick a saddled pig with the carrot on a stick to mount it. You can now ride it like a horse.",
wield_image = "mcl_mobitems_carrot_on_a_stick.png",
inventory_image = "mcl_mobitems_carrot_on_a_stick.png",
sounds = { breaks = "default_tool_breaks" },
@ -385,8 +382,8 @@ end
-- Rabbit
if c("rabbit_raw") then
minetest.register_craftitem("mobs_mc:rabbit_raw", {
description = S("Raw Rabbit"),
_doc_items_longdesc = S("Raw rabbit is a food item from a dead rabbit. It can be eaten safely. Cooking it will increase its nutritional value."),
description = "Raw Rabbit",
_doc_items_longdesc = "Raw rabbit is a food item from a dead rabbit. It can be eaten safely. Cooking it will increase its nutritional value.",
inventory_image = "mcl_mobitems_rabbit_raw.png",
groups = { food = 2, eatable = 3 },
on_use = minetest.item_eat(3),
@ -395,8 +392,8 @@ end
if c("rabbit_cooked") then
minetest.register_craftitem("mobs_mc:rabbit_cooked", {
description = S("Cooked Rabbit"),
_doc_items_longdesc = S("This is a food item which can be eaten."),
description = "Cooked Rabbit",
_doc_items_longdesc = "This is a food item which can be eaten.",
inventory_image = "mcl_mobitems_rabbit_cooked.png",
groups = { food = 2, eatable = 5 },
on_use = minetest.item_eat(5),
@ -414,8 +411,8 @@ end
if c("rabbit_hide") then
minetest.register_craftitem("mobs_mc:rabbit_hide", {
description = S("Rabbit Hide"),
_doc_items_longdesc = S("Rabbit hide is used to create leather."),
description = "Rabbit Hide",
_doc_items_longdesc = "Rabbit hide is used to create leather.",
inventory_image = "mcl_mobitems_rabbit_hide.png"
})
end
@ -432,8 +429,8 @@ end
if c("rabbit_foot") then
minetest.register_craftitem("mobs_mc:rabbit_foot", {
description = S("Rabbit's Foot"),
_doc_items_longdesc = S("This item is used in brewing."),
description = "Rabbit's Foot",
_doc_items_longdesc = "This item is used in brewing.",
inventory_image = "mcl_mobitems_rabbit_foot.png"
})
end
@ -441,8 +438,8 @@ end
-- Sheep
if c("mutton_raw") then
minetest.register_craftitem("mobs_mc:mutton_raw", {
description = S("Raw Mutton"),
_doc_items_longdesc = S("Raw mutton is the flesh from a sheep and can be eaten safely. Cooking it will greatly increase its nutritional value."),
description = "Raw Mutton",
_doc_items_longdesc = "Raw mutton is the flesh from a sheep and can be eaten safely. Cooking it will greatly increase its nutritional value.",
inventory_image = "mcl_mobitems_mutton_raw.png",
groups = { food = 2, eatable = 4 },
on_use = minetest.item_eat(4),
@ -451,8 +448,8 @@ end
if c("mutton_cooked") then
minetest.register_craftitem("mobs_mc:mutton_cooked", {
description = S("Cooked Mutton"),
_doc_items_longdesc = S("Cooked mutton is the cooked flesh from a sheep and is used as food."),
description = "Cooked Mutton",
_doc_items_longdesc = "Cooked mutton is the cooked flesh from a sheep and is used as food.",
inventory_image = "mcl_mobitems_mutton_cooked.png",
groups = { food = 2, eatable = 8 },
on_use = minetest.item_eat(8),
@ -471,8 +468,8 @@ end
-- Shulker
if c("shulker_shell") then
minetest.register_craftitem("mobs_mc:shulker_shell", {
description = S("Shulker Shell"),
_doc_items_longdesc = S("Shulker shells are used in crafting. They are dropped from dead shulkers."),
description = "Shulker Shell",
_doc_items_longdesc = "Shulker shells are used in crafting. They are dropped from dead shulkers.",
inventory_image = "mcl_mobitems_shulker_shell.png",
groups = { craftitem = 1 },
})
@ -481,8 +478,8 @@ end
-- Magma cube
if c("magma_cream") then
minetest.register_craftitem("mobs_mc:magma_cream", {
description = S("Magma Cream"),
_doc_items_longdesc = S("Magma cream is a crafting component."),
description = "Magma Cream",
_doc_items_longdesc = "Magma cream is a crafting component.",
wield_image = "mcl_mobitems_magma_cream.png",
inventory_image = "mcl_mobitems_magma_cream.png",
groups = { brewitem = 1 },
@ -492,8 +489,8 @@ end
-- Slime
if c("slimeball") then
minetest.register_craftitem("mobs_mc:slimeball", {
description = S("Slimeball"),
_doc_items_longdesc = S("Slimeballs are used in crafting. They are dropped from slimes."),
description = "Slimeball",
_doc_items_longdesc = "Slimeballs are used in crafting. They are dropped from slimes.",
inventory_image = "mcl_mobitems_slimeball.png"
})
if minetest.get_modpath("mesecons_materials") then
@ -507,8 +504,8 @@ end
-- Spider
if c("spider_eye") then
minetest.register_craftitem("mobs_mc:spider_eye", {
description = S("Spider Eye"),
_doc_items_longdesc = S("Spider eyes are used mainly in crafting and brewing. Spider eyes can be eaten, but they poison you and reduce your health by 2 hit points."),
description = "Spider Eye",
_doc_items_longdesc = "Spider eyes are used mainly in crafting and brewing. Spider eyes can be eaten, but they poison you and reduce your health by 2 hit points.",
inventory_image = "mcl_mobitems_spider_eye.png",
wield_image = "mcl_mobitems_spider_eye.png",
-- Simplified poisonous food
@ -524,6 +521,7 @@ if c("totem") then
-- Totem of Undying
minetest.register_craftitem("mobs_mc:totem", {
description = S("Totem of Undying"),
_tt_help = minetest.colorize("#00FF00", S("Protects you from death while wielding it")),
_doc_items_longdesc = S("A totem of undying is a rare artifact which may safe you from certain death."),
_doc_items_usagehelp = S("The totem only works while you hold it in your hand. If you receive fatal damage, you are saved from death and you get a second chance with 1 HP. The totem is destroyed in the process, however."),
inventory_image = "mcl_totems_totem.png",
@ -559,7 +557,7 @@ if c("totem") then
player:set_wielded_item(wield)
end
-- Effects
minetest.sound_play({name = "mcl_totems_totem", gain=1}, {pos=ppos, max_hear_distance=16})
minetest.sound_play({name = "mcl_totems_totem", gain=1}, {pos=ppos, max_hear_distance=16}, true)
-- Big totem overlay
if not hud_totem[player:get_player_name()] then
@ -569,6 +567,7 @@ if c("totem") then
position = { x=0.5, y=1 },
scale = { x=17, y=17 },
offset = { x=0, y=-178 },
z_index = 100,
})
minetest.after(3, function(name)
local player = minetest.get_player_by_name(name)
@ -593,8 +592,8 @@ end
-- Rotten flesh
if c("rotten_flesh") then
minetest.register_craftitem("mobs_mc:rotten_flesh", {
description = S("Rotten Flesh"),
_doc_items_longdesc = S("Yuck! This piece of flesh clearly has seen better days. Eating it will only poison you and reduces your health by 4 hit points. But tamed wolves can eat it just fine."),
description = "Rotten Flesh",
_doc_items_longdesc = "Yuck! This piece of flesh clearly has seen better days. Eating it will only poison you and reduces your health by 4 hit points. But tamed wolves can eat it just fine.",
inventory_image = "mcl_mobitems_rotten_flesh.png",
-- Simplified poisonous food
groups = { food = 2, eatable = -4 },
@ -605,8 +604,8 @@ end
-- Misc.
if c("nether_star") then
minetest.register_craftitem("mobs_mc:nether_star", {
description = S("Nether Star"),
_doc_items_longdesc = S("A nether star is a crafting component. It is dropped from the Wither."),
description = "Nether Star",
_doc_items_longdesc = "A nether star is a crafting component. It is dropped from the Wither.",
inventory_image = "mcl_mobitems_nether_star.png"
})
end
@ -634,9 +633,9 @@ end
if c("bone") then
minetest.register_craftitem("mobs_mc:bone", {
description = S("Bone"),
_doc_items_longdesc = S("Bones can be used to tame wolves so they will protect you. They are also useful as a crafting ingredient."),
_doc_items_usagehelp = S("Hold the bone in your hand near wolves to attract them. Rightclick the wolf to give it a bone and tame it."),
description = "Bone",
_doc_items_longdesc = "Bones can be used to tame wolves so they will protect you. They are also useful as a crafting ingredient.",
_doc_items_usagehelp = "Hold the bone in your hand near wolves to attract them. Rightclick the wolf to give it a bone and tame it.",
inventory_image = "mcl_mobitems_bone.png"
})
if minetest.get_modpath("bones") then

View File

@ -3,9 +3,10 @@
--made for MC like Survival game
--License for code WTFPL and otherwise stated in readmes
-- intllib
local MP = minetest.get_modpath(minetest.get_current_modname())
local S, NS = dofile(MP.."/intllib.lua")
-- NOTE: Strings intentionally not marked for translation, other mods already have these items.
-- TODO: Remove this file eventually, all items here are already outsourced in other mods.
local S = minetest.get_translator("mobs_mc")
--maikerumines throwing code
--arrow (weapon)
@ -14,15 +15,18 @@ local c = mobs_mc.is_item_variable_overridden
minetest.register_node("mobs_mc:arrow_box", {
drawtype = "nodebox",
is_ground_content = false,
node_box = {
type = "fixed",
fixed = {
-- Shaft
{-6.5/17, -1.5/17, -1.5/17, 6.5/17, 1.5/17, 1.5/17},
--Spitze
{-6.5/17, -1.5/17, -1.5/17, -4.5/17, 1.5/17, 1.5/17},
{-4.5/17, -0.5/17, -0.5/17, 5.5/17, 0.5/17, 0.5/17},
{5.5/17, -1.5/17, -1.5/17, 6.5/17, 1.5/17, 1.5/17},
-- Tip
{-4.5/17, 2.5/17, 2.5/17, -3.5/17, -2.5/17, -2.5/17},
{-8.5/17, 0.5/17, 0.5/17, -6.5/17, -0.5/17, -0.5/17},
--Federn
-- Fletching
{6.5/17, 1.5/17, 1.5/17, 7.5/17, 2.5/17, 2.5/17},
{7.5/17, -2.5/17, 2.5/17, 6.5/17, -1.5/17, 1.5/17},
{7.5/17, 2.5/17, -2.5/17, 6.5/17, 1.5/17, -1.5/17},
@ -35,7 +39,16 @@ minetest.register_node("mobs_mc:arrow_box", {
}
},
tiles = {"mcl_bows_arrow.png^[transformFX", "mcl_bows_arrow.png^[transformFX", "mcl_bows_arrow_back.png", "mcl_bows_arrow_front.png", "mcl_bows_arrow.png", "mcl_bows_arrow.png^[transformFX"},
groups = {not_in_creative_inventory=1},
paramtype = "light",
paramtype2 = "facedir",
sunlight_propagates = true,
groups = {not_in_creative_inventory=1, dig_immediate=3},
node_placement_prediction = "",
on_construct = function(pos)
minetest.log("error", "[mobs_mc] Trying to construct mobs_mc:arrow_box at "..minetest.pos_to_string(pos))
minetest.remove_node(pos)
end,
drop = "",
})
local THROWING_ARROW_ENTITY={
@ -72,7 +85,7 @@ THROWING_ARROW_ENTITY.on_step = function(self, dtime)
if obj:get_luaentity() ~= nil then
if obj:get_luaentity().name ~= "mobs_mc:arrow_entity" and obj:get_luaentity().name ~= "__builtin:item" then
local damage = 3
minetest.sound_play("damage", {pos = pos})
minetest.sound_play("damage", {pos = pos}, true)
obj:punch(self.object, 1.0, {
full_punch_interval=1.0,
damage_groups={fleshy=damage},
@ -81,7 +94,7 @@ THROWING_ARROW_ENTITY.on_step = function(self, dtime)
end
else
local damage = 3
minetest.sound_play("damage", {pos = pos})
minetest.sound_play("damage", {pos = pos}, true)
obj:punch(self.object, 1.0, {
full_punch_interval=1.0,
damage_groups={fleshy=damage},
@ -93,7 +106,7 @@ THROWING_ARROW_ENTITY.on_step = function(self, dtime)
if self.lastpos.x~=nil then
if node.name ~= "air" then
minetest.sound_play("bowhit1", {pos = pos})
minetest.sound_play("bowhit1", {pos = pos}, true)
minetest.add_item(self.lastpos, 'mobs_mc:arrow')
self.object:remove()
end
@ -116,10 +129,10 @@ local throwing_shoot_arrow = function(itemstack, player)
local playerpos = player:get_pos()
local obj = minetest.add_entity({x=playerpos.x,y=playerpos.y+1.5,z=playerpos.z}, arrow[2]) --mc
local dir = player:get_look_dir()
obj:setvelocity({x=dir.x*22, y=dir.y*22, z=dir.z*22})
obj:setacceleration({x=dir.x*-3, y=-10, z=dir.z*-3})
obj:setyaw(player:get_look_yaw()+math.pi)
minetest.sound_play("throwing_sound", {pos=playerpos})
obj:set_velocity({x=dir.x*22, y=dir.y*22, z=dir.z*22})
obj:set_acceleration({x=dir.x*-3, y=-10, z=dir.z*-3})
obj:set_yaw(player:get_look_yaw()+math.pi)
minetest.sound_play("throwing_sound", {pos=playerpos}, true)
if obj:get_luaentity().player == "" then
obj:get_luaentity().player = player
end
@ -132,9 +145,9 @@ end
if c("arrow") then
minetest.register_craftitem("mobs_mc:arrow", {
description = S("Arrow"),
_doc_items_longdesc = S("Arrows are ammunition for bows."),
_doc_items_usagehelp = S("To use arrows as ammunition for a bow, put them in the inventory slot following the bow. Slots are counted left to right, top to bottom."),
description = "Arrow",
_doc_items_longdesc = "Arrows are ammunition for bows.",
_doc_items_usagehelp = "To use arrows as ammunition for a bow, put them in the inventory slot following the bow. Slots are counted left to right, top to bottom.",
inventory_image = "mcl_bows_arrow_inv.png",
})
end
@ -152,9 +165,9 @@ end
if c("bow") then
minetest.register_tool("mobs_mc:bow_wood", {
description = S("Bow"),
_doc_items_longdesc = S("Bows are ranged weapons to shoot arrows at your foes."),
_doc_items_usagehelp = S("To use the bow, you first need to have at least one arrow in slot following the bow. Leftclick to shoot. Each hit deals 3 damage."),
description = "Bow",
_doc_items_longdesc = "Bows are ranged weapons to shoot arrows at your foes.",
_doc_items_usagehelp = "To use the bow, you first need to have at least one arrow in slot following the bow. Leftclick to shoot. Each hit deals 3 damage.",
inventory_image = "mcl_bows_bow.png",
on_use = function(itemstack, user, pointed_thing)
if throwing_shoot_arrow(itemstack, user, pointed_thing) then
@ -197,8 +210,8 @@ if c("egg") then
}, nil)
end,
hit_mob = function(self, player)
player:punch(minetest.get_player_by_name(self.playername) or self.object, 1.0, {
hit_mob = function(self, mob)
mob:punch(minetest.get_player_by_name(self.playername) or self.object, 1.0, {
full_punch_interval = 1.0,
damage_groups = {},
}, nil)
@ -253,7 +266,7 @@ if c("egg") then
pos = playerpos,
gain = 1.0,
max_hear_distance = 5,
})
}, true)
local obj = minetest.add_entity({
x = playerpos.x,
@ -267,13 +280,13 @@ if c("egg") then
ent.velocity = egg_VELOCITY -- needed for api internal timing
ent.switch = 1 -- needed so that egg doesn't despawn straight away
obj:setvelocity({
obj:set_velocity({
x = dir.x * egg_VELOCITY,
y = dir.y * egg_VELOCITY,
z = dir.z * egg_VELOCITY
})
obj:setacceleration({
obj:set_acceleration({
x = dir.x * -3,
y = -egg_GRAVITY,
z = dir.z * -3
@ -291,8 +304,8 @@ if c("egg") then
end
minetest.register_craftitem("mobs_mc:egg", {
description = S("Egg"),
_doc_items_longdesc = S("Eggs can be thrown and break on impact. There is a small chance that 1 or even 4 chicks will pop out"),
description = "Egg",
_doc_items_longdesc = "Eggs can be thrown and break on impact. There is a small chance that 1 or even 4 chicks will pop out",
_doc_items_usagehelp = how_to_throw,
inventory_image = "mobs_chicken_egg.png",
on_use = mobs_shoot_egg,
@ -351,13 +364,13 @@ if c("snowball") then
ent.velocity = snowball_VELOCITY -- needed for api internal timing
ent.switch = 1 -- needed so that egg doesn't despawn straight away
obj:setvelocity({
obj:set_velocity({
x = dir.x * snowball_VELOCITY,
y = dir.y * snowball_VELOCITY,
z = dir.z * snowball_VELOCITY
})
obj:setacceleration({
obj:set_acceleration({
x = dir.x * -3,
y = -snowball_GRAVITY,
z = dir.z * -3
@ -377,8 +390,8 @@ if c("snowball") then
-- Snowball
minetest.register_craftitem("mobs_mc:snowball", {
description = S("Snowball"),
_doc_items_longdesc = S("Snowballs can be thrown at your enemies. A snowball deals 3 damage to blazes, but is harmless to anything else."),
description = "Snowball",
_doc_items_longdesc = "Snowballs can be thrown at your enemies. A snowball deals 3 damage to blazes, but is harmless to anything else.",
_doc_items_usagehelp = how_to_throw,
inventory_image = "mcl_throwing_snowball.png",
on_use = mobs_shoot_snowball,
@ -386,7 +399,3 @@ if c("snowball") then
end
--end maikerumine code
if minetest.settings:get_bool("log_mods") then
minetest.log("action", "MC mobs loaded")
end

View File

@ -53,7 +53,7 @@ mobs_mc.make_owner_teleport_function = function(dist, teleport_check_interval)
if minetest.registered_nodes[minetest.get_node(telepos).name].walkable == false and
minetest.registered_nodes[minetest.get_node(telepos_below).name].walkable == true then
-- Correct position found! Let's teleport.
self.object:setpos(telepos)
self.object:set_pos(telepos)
return
end
end

View File

@ -1,9 +1,10 @@
--MC Heads for minetest
--maikerumine
-- intllib
local MP = minetest.get_modpath(minetest.get_current_modname())
local S, NS = dofile(MP.."/intllib.lua")
-- NOTE: Strings intentionally not marked for translation, other mods already have these items.
-- TODO: Remove this file eventually, all items here are already outsourced in other mods.
local S = minetest.get_translator("mobs_mc")
-- Heads system
@ -55,7 +56,7 @@ local function addhead(mobname, desc, longdesc)
end
-- Add heads
addhead("zombie", S("Zombie Head"), S("A zombie head is a small decorative block which resembles the head of a zombie."))
addhead("creeper", S("Creeper Head"), S("A creeper head is a small decorative block which resembles the head of a creeper."))
addhead("skeleton", S("Skeleton Skull"), S("A skeleton skull is a small decorative block which resembles the skull of a skeleton."))
addhead("wither_skeleton", S("Wither Skeleton Skull"), S("A wither skeleton skull is a small decorative block which resembles the skull of a wither skeleton."))
addhead("zombie", "Zombie Head", "A zombie head is a small decorative block which resembles the head of a zombie.")
addhead("creeper", "Creeper Head", "A creeper head is a small decorative block which resembles the head of a creeper.")
addhead("skeleton", "Skeleton Skull", "A skeleton skull is a small decorative block which resembles the skull of a skeleton.")
addhead("wither_skeleton", "Wither Skeleton Skull", "A wither skeleton skull is a small decorative block which resembles the skull of a wither skeleton.")

View File

@ -81,6 +81,9 @@ Origin of those models:
* PilzAdam and Wuzzy (CC0)
* `mobs_mc_chicken_lay_egg.ogg`
* [AGFX](http://www.freesound.org/people/DrMinky/sounds/) (CC0)
* `mobs_mc_chicken_child.ogg`
* Source: <https://freesound.org/people/AGFX/sounds/43380/>
* Randomation (CC0)
* `green_slime_damage.ogg`
* `green_slime_attack.ogg`

View File

@ -2,14 +2,12 @@
--################### AGENT
--###################
-- intllib
local MP = minetest.get_modpath(minetest.get_current_modname())
local S, NS = dofile(MP.."/intllib.lua")
local S = minetest.get_translator("mobs_mc")
mobs:register_mob("mobs_mc:agent", {
type = "npc",
spawn_class = "passive",
passive = true,
stepheight = 1.2,
hp_min = 20,
hp_max = 20,
armor = 100,
@ -21,6 +19,7 @@ mobs:register_mob("mobs_mc:agent", {
},
-- TODO: sounds
visual_size = {x=3, y=3},
walk_chance = 0,
walk_velocity = 0.6,
run_velocity = 2,
jump = true,
@ -38,7 +37,3 @@ mobs:register_mob("mobs_mc:agent", {
})
mobs:register_egg("mobs_mc:agent", S("Agent"), "mobs_mc_spawn_icon_agent.png", 0)
if minetest.settings:get_bool("log_mods") then
minetest.log("action", "MC Agent loaded")
end

View File

@ -1,11 +1,10 @@
--License for code WTFPL and otherwise stated in readmes
-- intllib
local MP = minetest.get_modpath(minetest.get_current_modname())
local S, NS = dofile(MP.."/intllib.lua")
local S = minetest.get_translator("mobs_mc")
mobs:register_mob("mobs_mc:bat", {
type = "animal",
spawn_class = "ambient",
can_despawn = true,
passive = true,
hp_min = 6,
@ -42,14 +41,10 @@ mobs:register_mob("mobs_mc:bat", {
]]
},
water_damage = 1,
lava_damage = 4,
light_damage = 0,
fall_damage = 0,
view_range = 16,
fly = true,
fly_in = "air",
})
@ -71,8 +66,3 @@ mobs:spawn_specific("mobs_mc:bat", mobs_mc.spawn.solid, {"air"}, 0, maxlight, 20
-- spawn eggs
mobs:register_egg("mobs_mc:bat", S("Bat"), "mobs_mc_spawn_icon_bat.png", 0)
if minetest.settings:get_bool("log_mods") then
minetest.log("action", "MC Bat loaded")
end

View File

@ -3,11 +3,8 @@
-- Model and mobs_blaze.png see https://github.com/22i/minecraft-voxel-blender-models
-- blaze.lua partial copy of mobs_mc/ghast.lua
-- intllib
local MP = minetest.get_modpath(minetest.get_current_modname())
local S, NS = dofile(MP.."/intllib.lua")
local S = minetest.get_translator("mobs_mc")
--dofile(minetest.get_modpath("mobs").."/api.lua")
--###################
--################### BLAZE
--###################
@ -15,6 +12,7 @@ local S, NS = dofile(MP.."/intllib.lua")
mobs:register_mob("mobs_mc:blaze", {
type = "monster",
spawn_class = "hostile",
hp_min = 20,
hp_max = 20,
collisionbox = {-0.3, -0.01, -0.3, 0.3, 1.79, 0.3},
@ -24,6 +22,7 @@ mobs:register_mob("mobs_mc:blaze", {
textures = {
{"mobs_mc_blaze.png"},
},
armor = { fleshy = 100, snowball_vulnerable = 100 },
visual_size = {x=3, y=3},
sounds = {
random = "mobs_mc_blaze_breath",
@ -56,6 +55,7 @@ mobs:register_mob("mobs_mc:blaze", {
-- MC Wiki: takes 1 damage every half second while in water
water_damage = 2,
lava_damage = 0,
fire_damage = 0,
fall_damage = 0,
fall_speed = -2.25,
light_damage = 0,
@ -63,13 +63,13 @@ mobs:register_mob("mobs_mc:blaze", {
attack_type = "dogshoot",
arrow = "mobs_mc:blaze_fireball",
shoot_interval = 3.5,
shoot_offset = 1.0,
passive = false,
jump = true,
jump_height = 4,
fly = true,
jump_chance = 98,
fear_height = 120,
blood_amount = 0,
fear_height = 0,
glow = 14,
})
mobs:spawn_specific("mobs_mc:blaze", mobs_mc.spawn.nether_fortress, {"air"}, 0, minetest.LIGHT_MAX+1, 30, 5000, 3, mobs_mc.spawn_height.nether_min, mobs_mc.spawn_height.nether_max)
@ -79,7 +79,7 @@ mobs:register_arrow("mobs_mc:blaze_fireball", {
visual = "sprite",
visual_size = {x = 0.3, y = 0.3},
textures = {"mcl_fire_fire_charge.png"},
velocity = 12,
velocity = 15,
-- Direct hit, no fire... just plenty of pain
hit_player = function(self, player)
@ -89,19 +89,28 @@ mobs:register_arrow("mobs_mc:blaze_fireball", {
}, nil)
end,
hit_mob = function(self, player)
player:punch(self.object, 1.0, {
hit_mob = function(self, mob)
mob:punch(self.object, 1.0, {
full_punch_interval = 1.0,
damage_groups = {fleshy = 5},
}, nil)
end,
hit_object = function(self, object)
local lua = object:get_luaentity()
if lua then
if lua.name == "mcl_minecarts:tnt_minecart" then
lua:on_activate_by_rail(2)
end
end
end,
-- Node hit, make fire
hit_node = function(self, pos, node)
if node.name == "air" then
minetest.set_node(pos_above, {name=mobs_mc.items.fire})
else
local v = self.object:getvelocity()
local v = self.object:get_velocity()
v = vector.normalize(v)
local crashpos = vector.subtract(pos, v)
local crashnode = minetest.get_node(crashpos)
@ -116,12 +125,3 @@ mobs:register_arrow("mobs_mc:blaze_fireball", {
-- spawn eggs
mobs:register_egg("mobs_mc:blaze", S("Blaze"), "mobs_mc_spawn_icon_blaze.png", 0)
if minetest.settings:get_bool("log_mods") then
minetest.log("action", "MC Blaze loaded")
end

View File

@ -1,11 +1,6 @@
--License for code WTFPL and otherwise stated in readmes
-- intllib
local MP = minetest.get_modpath(minetest.get_current_modname())
local S, NS = dofile(MP.."/intllib.lua")
--dofile(minetest.get_modpath("mobs").."/api.lua")
local S = minetest.get_translator("mobs_mc")
--###################
--################### CHICKEN
@ -15,6 +10,7 @@ local S, NS = dofile(MP.."/intllib.lua")
mobs:register_mob("mobs_mc:chicken", {
type = "animal",
spawn_class = "passive",
hp_min = 4,
hp_max = 4,
@ -40,9 +36,6 @@ mobs:register_mob("mobs_mc:chicken", {
min = 0,
max = 2,},
},
water_damage = 1,
lava_damage = 4,
light_damage = 0,
fall_damage = 0,
fall_speed = -2.25,
sounds = {
@ -50,6 +43,12 @@ mobs:register_mob("mobs_mc:chicken", {
-- TODO: death, damage
distance = 16,
},
sounds_child = {
random = "mobs_mc_chicken_child",
damage = "mobs_mc_chicken_child",
death = "mobs_mc_chicken_child",
distance = 16,
},
animation = {
stand_speed = 25, walk_speed = 25, run_speed = 50,
stand_start = 0, stand_end = 0,
@ -88,7 +87,7 @@ mobs:register_mob("mobs_mc:chicken", {
pos = pos,
gain = 1.0,
max_hear_distance = 16,
})
}, true)
end,
})
@ -98,7 +97,3 @@ mobs:spawn_specific("mobs_mc:chicken", mobs_mc.spawn.grassland, {"air"}, 9, mine
-- spawn eggs
mobs:register_egg("mobs_mc:chicken", S("Chicken"), "mobs_mc_spawn_icon_chicken.png", 0)
if minetest.settings:get_bool("log_mods") then
minetest.log("action", "MC chicken loaded")
end

View File

@ -1,11 +1,10 @@
--License for code WTFPL and otherwise stated in readmes
-- intllib
local MP = minetest.get_modpath(minetest.get_current_modname())
local S, NS = dofile(MP.."/intllib.lua")
local S = minetest.get_translator("mobs_mc")
local cow_def = {
type = "animal",
spawn_class = "passive",
hp_min = 10,
hp_max = 10,
collisionbox = {-0.45, -0.01, -0.45, 0.45, 1.39, 0.45},
@ -28,9 +27,6 @@ local cow_def = {
min = 0,
max = 2,},
},
water_damage = 1,
lava_damage = 5,
light_damage = 0,
runaway = true,
sounds = {
random = "mobs_mc_cow",
@ -92,7 +88,7 @@ mooshroom_def.on_rightclick = function(self, clicker)
-- Use shears to get mushrooms and turn mooshroom into cow
if item:get_name() == mobs_mc.items.shears then
local pos = self.object:get_pos()
minetest.sound_play("shears", {pos = pos})
minetest.sound_play("shears", {pos = pos}, true)
if self.base_texture[1] == "mobs_mc_mooshroom_brown.png" then
minetest.add_item({x=pos.x, y=pos.y+1.4, z=pos.z}, mobs_mc.items.mushroom_brown .. " 5")
@ -100,10 +96,10 @@ mooshroom_def.on_rightclick = function(self, clicker)
minetest.add_item({x=pos.x, y=pos.y+1.4, z=pos.z}, mobs_mc.items.mushroom_red .. " 5")
end
local oldyaw = self.object:getyaw()
local oldyaw = self.object:get_yaw()
self.object:remove()
local cow = minetest.add_entity(pos, "mobs_mc:cow")
cow:setyaw(oldyaw)
cow:set_yaw(oldyaw)
if not minetest.settings:get_bool("creative_mode") then
item:add_wear(mobs_mc.misc.shears_wear)
@ -140,16 +136,9 @@ mobs:register_mob("mobs_mc:mooshroom", mooshroom_def)
-- Spawning
mobs:spawn_specific("mobs_mc:cow", mobs_mc.spawn.grassland, {"air"}, 9, minetest.LIGHT_MAX+1, 30, 17000, 20, mobs_mc.spawn_height.overworld_min, mobs_mc.spawn_height.overworld_max)
mobs:spawn_specific("mobs_mc:mooshroom", mobs_mc.spawn.mushroom_island, {"air"}, 9, minetest.LIGHT_MAX+1, 30, 17000, 10, mobs_mc.spawn_height.overworld_min, mobs_mc.spawn_height.overworld_max)
-- compatibility
mobs:alias_mob("mobs_animal:cow", "mobs_mc:cow")
mobs:spawn_specific("mobs_mc:cow", mobs_mc.spawn.grassland, {"air"}, 9, minetest.LIGHT_MAX+1, 30, 17000, 10, mobs_mc.spawn_height.overworld_min, mobs_mc.spawn_height.overworld_max)
mobs:spawn_specific("mobs_mc:mooshroom", mobs_mc.spawn.mushroom_island, {"air"}, 9, minetest.LIGHT_MAX+1, 30, 17000, 5, mobs_mc.spawn_height.overworld_min, mobs_mc.spawn_height.overworld_max)
-- spawn egg
mobs:register_egg("mobs_mc:cow", S("Cow"), "mobs_mc_spawn_icon_cow.png", 0)
mobs:register_egg("mobs_mc:mooshroom", S("Mooshroom"), "mobs_mc_spawn_icon_mooshroom.png", 0)
if minetest.settings:get_bool("log_mods") then
minetest.log("action", "MC Cow loaded")
end

View File

@ -1,11 +1,6 @@
--License for code WTFPL and otherwise stated in readmes
-- intllib
local MP = minetest.get_modpath(minetest.get_current_modname())
local S, NS = dofile(MP.."/intllib.lua")
--dofile(minetest.get_modpath("mobs").."/api.lua")
local S = minetest.get_translator("mobs_mc")
--###################
--################### CREEPER
@ -16,6 +11,7 @@ local S, NS = dofile(MP.."/intllib.lua")
mobs:register_mob("mobs_mc:creeper", {
type = "monster",
spawn_class = "hostile",
hp_min = 20,
hp_max = 20,
collisionbox = {-0.3, -0.01, -0.3, 0.3, 1.69, 0.3},
@ -40,9 +36,8 @@ mobs:register_mob("mobs_mc:creeper", {
runaway_from = { "mobs_mc:ocelot", "mobs_mc:cat" },
attack_type = "explode",
explosion_radius = 3,
explosion_strength = 3,
reach = 4,
explosion_damage_radius = 7,
explosion_timer = 1.5,
allow_fuse_reset = true,
stop_to_explode = true,
@ -62,19 +57,19 @@ mobs:register_mob("mobs_mc:creeper", {
item:add_wear(1000)
-- Tool break sound
if item:get_count() == 0 and wdef.sound and wdef.sound.breaks then
minetest.sound_play(wdef.sound.breaks, {pos = clicker:get_pos(), gain = 0.5})
minetest.sound_play(wdef.sound.breaks, {pos = clicker:get_pos(), gain = 0.5}, true)
end
clicker:set_wielded_item(item)
end
self._forced_explosion_countdown_timer = self.explosion_timer
minetest.sound_play(self.sounds.attack, {pos = self.object:get_pos(), gain = 1, max_hear_distance = 16})
minetest.sound_play(self.sounds.attack, {pos = self.object:get_pos(), gain = 1, max_hear_distance = 16}, true)
end
end,
do_custom = function(self, dtime)
if self._forced_explosion_countdown_timer ~= nil then
self._forced_explosion_countdown_timer = self._forced_explosion_countdown_timer - dtime
if self._forced_explosion_countdown_timer <= 0 then
mobs:explosion(self.object:get_pos(), self.explosion_radius, 0, 1, self.sounds.explode)
mobs:boom(self, self.object:get_pos(), self.explosion_strength)
self.object:remove()
end
end
@ -119,21 +114,11 @@ mobs:register_mob("mobs_mc:creeper", {
},
floats = 1,
fear_height = 4,
lava_damage = 4,
light_damage = 0,
view_range = 16,
blood_amount = 0,
})
mobs:spawn_specific("mobs_mc:creeper", mobs_mc.spawn.solid, {"air"}, 0, 7, 20, 16500, 2, mobs_mc.spawn_height.overworld_min, mobs_mc.spawn_height.overworld_max)
-- compatibility
mobs:alias_mob("mobs:creeper", "mobs_mc:creeper")
-- spawn eggs
mobs:register_egg("mobs_mc:creeper", S("Creeper"), "mobs_mc_spawn_icon_creeper.png", 0)
if minetest.settings:get_bool("log_mods") then
minetest.log("action", "MC Creeper loaded")
end

View File

@ -8,5 +8,4 @@ mcl_fishing?
bones?
mesecons_materials?
mobs_mc_gameconfig?
intllib?
doc_items?

View File

@ -2,41 +2,11 @@
--################### ENDERDRAGON
--###################
-- intllib
local MP = minetest.get_modpath(minetest.get_current_modname())
local S, NS = dofile(MP.."/intllib.lua")
local S = minetest.get_translator("mobs_mc")
--[[
mobs:register_mob("mobs_mc:12enderdragon", {
type = "animal",
passive = true,
runaway = true,
stepheight = 1.2,
hp_min = 30,
hp_max = 60,
armor = 150,
collisionbox = {-0.35, -0.01, -0.35, 0.35, 2, 0.35},
visual = "mesh",
mesh = "enderdragon.b3d",
textures = {
{"enderdragon.png"},
},
visual_size = {x=1, y=1},
walk_velocity = 0.6,
run_velocity = 2,
jump = true,
animation = {
speed_normal = 25, speed_run = 50,
stand_start = 0, stand_end = 20,
walk_start = 0, walk_end = 20,
run_start = 0, run_end = 20,
},
})
mobs:register_egg("mobs_mc:12enderdragon", "Enderdragon", "enderdragon_inv.png", 0)
]]
mobs:register_mob("mobs_mc:enderdragon", {
type = "monster",
spawn_class = "hostile",
pathfinding = 1,
attacks_animals = true,
walk_chance = 100,
@ -63,11 +33,7 @@ mobs:register_mob("mobs_mc:enderdragon", {
damage = 10,
jump = true,
jump_height = 14,
stepheight = 1.2,
jump_chance = 100,
fear_height = 120,
fly = true,
fly_in = {"air"},
dogshoot_switch = 1,
dogshoot_count_max =5,
dogshoot_count2_max = 5,
@ -79,21 +45,19 @@ mobs:register_mob("mobs_mc:enderdragon", {
min = 1,
max = 1},
},
water_damage = 0,
lava_damage = 0,
light_damage = 0,
fire_damage = 0,
on_rightclick = nil,
attack_type = "dogshoot",
arrow = "mobs_mc:fireball2",
arrow = "mobs_mc:dragon_fireball",
shoot_interval = 0.5,
shoot_offset = -1,
shoot_offset = -1.0,
animation = {
fly_speed = 8, stand_speed = 8,
stand_start = 0, stand_end = 20,
walk_start = 0, walk_end = 20,
run_start = 0, run_end = 20,
},
blood_amount = 0,
ignores_nametag = true,
})
@ -101,87 +65,33 @@ mobs:register_mob("mobs_mc:enderdragon", {
local mobs_griefing = minetest.settings:get_bool("mobs_griefing") ~= false
mobs:register_arrow("mobs_mc:roar_of_the_dragon2", {
-- dragon fireball (projectile)
mobs:register_arrow("mobs_mc:dragon_fireball", {
visual = "sprite",
visual_size = {x = 1, y = 1},
--textures = {"transparent.png"},
textures = {"mese_egg.png"},
velocity = 10,
on_step = function(self, dtime)
local pos = self.object:get_pos()
local n = minetest.get_node(pos).name
if self.timer == 0 then
self.timer = os.time()
end
if os.time() - self.timer > 8 or minetest.is_protected(pos, "") then
self.object:remove()
end
local objects = minetest.get_objects_inside_radius(pos, 1)
for _,obj in ipairs(objects) do
local name = self.name
if name~="mobs_mc:roar_of_the_dragon2" and name ~= "mobs_mc:enderdragon" then
obj:set_hp(obj:get_hp()-0.05)
if (obj:get_hp() <= 0) then
if (not obj:is_player()) and name ~= self.object:get_luaentity().name then
obj:remove()
end
end
end
end
if mobs_griefing then
minetest.set_node(pos, {name="air"})
if math.random(1,2)==1 then
local dx = math.random(-1,1)
local dy = math.random(-1,1)
local dz = math.random(-1,1)
local p = {x=pos.x+dx, y=pos.y+dy, z=pos.z+dz}
minetest.set_node(p, {name="air"})
end
end
end
})
--GOOD LUCK LOL!
-- fireball (weapon)
mobs:register_arrow(":mobs_mc:fireball2", {
visual = "sprite",
visual_size = {x = 1.5, y = 1.5},
visual_size = {x = 1.25, y = 1.25},
textures = {"mobs_mc_dragon_fireball.png"},
--textures = {"mobs_skeleton2_front.png^[makealpha:255,255,255 "},
velocity = 6,
-- direct hit, no fire... just plenty of pain
hit_player = function(self, player)
minetest.sound_play("tnt_explode", {pos = player:get_pos(), gain = 1.5, max_hear_distance = 2*64})
player:punch(self.object, 1.0, {
full_punch_interval = 0.5,
damage_groups = {fleshy = 6},
damage_groups = {fleshy = 12},
}, nil)
end,
hit_mob = function(self, mob)
minetest.sound_play("tnt_explode", {pos = mob:get_pos(), gain = 1.5, max_hear_distance = 2*64})
minetest.sound_play("tnt_explode", {pos = mob:get_pos(), gain = 1.5, max_hear_distance = 2*64}, true)
mob:punch(self.object, 1.0, {
full_punch_interval = 0.5,
damage_groups = {fleshy = 12},
}, nil)
end,
-- node hit, bursts into flame
-- node hit, explode
hit_node = function(self, pos, node)
mobs:explosion(pos, 3, 0, 1)
--from tnt
minetest.sound_play("tnt_explode", {pos = pos, gain = 1.5, max_hear_distance = 2*64})
mobs:boom(self, pos, 2)
end
})
mobs:register_egg("mobs_mc:enderdragon", S("Ender Dragon"), "mobs_mc_spawn_icon_dragon.png", 0)
mobs:register_egg("mobs_mc:enderdragon", S("Ender Dragon"), "mobs_mc_spawn_icon_dragon.png", 0, true)

View File

@ -10,12 +10,7 @@
-- and they are provoked by looking directly at them.
-- TODO: Implement MC behaviour.
-- intllib
local MP = minetest.get_modpath(minetest.get_current_modname())
local S, NS = dofile(MP.."/intllib.lua")
--dofile(minetest.get_modpath("mobs").."/api.lua")
local S = minetest.get_translator("mobs_mc")
--###################
--################### ENDERMAN
@ -173,9 +168,9 @@ local mobs_griefing = minetest.settings:get_bool("mobs_griefing") ~= false
mobs:register_mob("mobs_mc:enderman", {
-- TODO: Endermen should be classified as passive
type = "monster",
spawn_class = "passive",
passive = false,
pathfinding = 1,
stepheight = 1.2,
hp_min = 40,
hp_max = 40,
collisionbox = {-0.3, -0.01, -0.3, 0.3, 2.89, 0.3},
@ -260,7 +255,7 @@ mobs:register_mob("mobs_mc:enderman", {
self.animation = select_enderman_animation("block")
mobs:set_animation(self, self.animation.current)
if def.sounds and def.sounds.dug then
minetest.sound_play(def.sounds.dug, {pos = take_pos, max_hear_distance = 16})
minetest.sound_play(def.sounds.dug, {pos = take_pos, max_hear_distance = 16}, true)
end
end
end
@ -281,7 +276,7 @@ mobs:register_mob("mobs_mc:enderman", {
self.animation = select_enderman_animation("normal")
mobs:set_animation(self, self.animation.current)
if def.sounds and def.sounds.place then
minetest.sound_play(def.sounds.place, {pos = place_pos, max_hear_distance = 16})
minetest.sound_play(def.sounds.place, {pos = place_pos, max_hear_distance = 16}, true)
end
self._taken_node = ""
end
@ -314,7 +309,7 @@ mobs:register_mob("mobs_mc:enderman", {
end
end
if telepos then
self.object:setpos(telepos)
self.object:set_pos(telepos)
end
end
end,
@ -325,14 +320,11 @@ mobs:register_mob("mobs_mc:enderman", {
end
end,
water_damage = 8,
lava_damage = 4,
light_damage = 0,
-- TODO: Increase view range when it detects being seen
-- Low view range to emulate that behaviour somehow
view_range = 4,
fear_height = 4,
attack_type = "dogfight",
blood_amount = 0,
})
@ -345,9 +337,3 @@ mobs:spawn_specific("mobs_mc:enderman", mobs_mc.spawn.solid, {"air"}, 0, 7, 30,
-- spawn eggs
mobs:register_egg("mobs_mc:enderman", S("Enderman"), "mobs_mc_spawn_icon_enderman.png", 0)
if minetest.settings:get_bool("log_mods") then
minetest.log("action", "MC Enderman loaded")
end

View File

@ -2,12 +2,11 @@
--################### ENDERMITE
--###################
-- intllib
local MP = minetest.get_modpath(minetest.get_current_modname())
local S, NS = dofile(MP.."/intllib.lua")
local S = minetest.get_translator("mobs_mc")
mobs:register_mob("mobs_mc:endermite", {
type = "monster",
spawn_class = "hostile",
passive = false,
hp_min = 8,
hp_max = 8,
@ -29,14 +28,10 @@ mobs:register_mob("mobs_mc:endermite", {
walk_velocity = 1,
run_velocity = 2,
jump = true,
water_damage = 0,
lava_damage = 4,
light_damage = 0,
fear_height = 4,
view_range = 16,
damage = 2,
reach = 1,
blood_amount = 0,
})
mobs:register_egg("mobs_mc:endermite", S("Endermite"), "mobs_mc_spawn_icon_endermite.png", 0)

View File

@ -3,11 +3,7 @@
--made for MC like Survival game
--License for code WTFPL and otherwise stated in readmes
-- intllib
local MP = minetest.get_modpath(minetest.get_current_modname())
local S, NS = dofile(MP.."/intllib.lua")
--dofile(minetest.get_modpath("mobs").."/api.lua")
local S = minetest.get_translator("mobs_mc")
--###################
--################### GHAST
@ -16,6 +12,7 @@ local S, NS = dofile(MP.."/intllib.lua")
mobs:register_mob("mobs_mc:ghast", {
type = "monster",
spawn_class = "hostile",
pathfinding = 1,
group_attack = true,
hp_min = 10,
@ -57,17 +54,12 @@ mobs:register_mob("mobs_mc:ghast", {
walk_start = 0, walk_end = 40,
run_start = 0, run_end = 40,
},
lava_damage = 4,
light_damage = 0,
fall_damage = 0,
view_range = 100,
--attack_type = "dogshoot",
attack_type = "dogshoot",
arrow = "mobs_monster:fireball",
arrow = "mobs_mc:fireball",
shoot_interval = 3.5,
shoot_offset = 1,
--'dogshoot_switch' allows switching between shoot and dogfight modes inside dogshoot using timer (1 = shoot, 2 = dogfight)
--'dogshoot_count_max' number of seconds before switching above modes.
shoot_offset = -5,
dogshoot_switch = 1,
dogshoot_count_max =1,
passive = false,
@ -75,40 +67,36 @@ mobs:register_mob("mobs_mc:ghast", {
jump_height = 4,
floats=1,
fly = true,
fly_in = {"air"},
jump_chance = 98,
fear_height = 120,
blood_amount = 0,
})
mobs:spawn_specific("mobs_mc:ghast", mobs_mc.spawn.nether, {"air"}, 0, minetest.LIGHT_MAX+1, 30, 18000, 2, mobs_mc.spawn_height.nether_min, mobs_mc.spawn_height.nether_max)
-- fireball (weapon)
mobs:register_arrow(":mobs_monster:fireball", {
-- fireball (projectile)
mobs:register_arrow("mobs_mc:fireball", {
visual = "sprite",
visual_size = {x = 0.5, y = 0.5},
visual_size = {x = 1, y = 1},
textures = {"mcl_fire_fire_charge.png"},
velocity = 6,
velocity = 15,
-- direct hit, no fire... just plenty of pain
hit_player = function(self, player)
player:punch(self.object, 1.0, {
full_punch_interval = 1.0,
damage_groups = {fleshy = 8},
damage_groups = {fleshy = 6},
}, nil)
mobs:boom(self, self.object:get_pos(), 1, true)
end,
hit_mob = function(self, player)
player:punch(self.object, 1.0, {
hit_mob = function(self, mob)
mob:punch(self.object, 1.0, {
full_punch_interval = 1.0,
damage_groups = {fleshy = 8},
damage_groups = {fleshy = 6},
}, nil)
mobs:boom(self, self.object:get_pos(), 1, true)
end,
-- node hit, bursts into flame
hit_node = function(self, pos, node)
mobs:explosion(pos, 1, 1, 0)
mobs:boom(self, pos, 1, true)
end
})
@ -117,7 +105,3 @@ mobs:register_arrow(":mobs_monster:fireball", {
-- spawn eggs
mobs:register_egg("mobs_mc:ghast", S("Ghast"), "mobs_mc_spawn_icon_ghast.png", 0)
if minetest.settings:get_bool("log_mods") then
minetest.log("action", "MC Ghast loaded")
end

View File

@ -4,14 +4,14 @@
--################### GUARDIAN
--###################
-- intllib
local MP = minetest.get_modpath(minetest.get_current_modname())
local S, NS = dofile(MP.."/intllib.lua")
local S = minetest.get_translator("mobs_mc")
mobs:register_mob("mobs_mc:guardian", {
type = "monster",
spawn_class = "hostile",
hp_min = 30,
hp_max = 30,
breath_max = -1,
passive = false,
attack_type = "dogfight",
pathfinding = 1,
@ -39,10 +39,12 @@ mobs:register_mob("mobs_mc:guardian", {
run_start = 0, run_end = 20,
},
drops = {
-- Greatly increased amounts of prismarine
{name = mobs_mc.items.prismarine_shard,
chance = 1,
min = 0,
max = 2,},
max = 32,},
-- TODO: Reduce of drops when ocean monument is ready.
-- The following drops are approximations
-- Fish / prismarine crystal
@ -53,7 +55,7 @@ mobs:register_mob("mobs_mc:guardian", {
{name = mobs_mc.items.prismarine_crystals,
chance = 4,
min = 1,
max = 1,},
max = 2,},
-- Rare drop: fish
{name = mobs_mc.items.fish_raw,
@ -75,16 +77,13 @@ mobs:register_mob("mobs_mc:guardian", {
},
fly = true,
fly_in = { mobs_mc.items.water_source, mobs_mc.items.river_water_source },
stepheight = 0.1,
jump = false,
view_range = 16,
water_damage = 0,
lava_damage = 4,
light_damage = 0,
blood_amount = 0,
})
mobs:spawn_specific("mobs_mc:guardian", mobs_mc.spawn.water, mobs_mc.spawn_water, 0, minetest.LIGHT_MAX+1, 30, 25000, 2, mobs_mc.spawn_height.overworld_min, mobs_mc.spawn_height.water - 10)
-- Spawning disabled due to size issues
-- TODO: Re-enable spawning
--mobs:spawn_specific("mobs_mc:guardian", mobs_mc.spawn.water, mobs_mc.spawn_water, 0, minetest.LIGHT_MAX+1, 30, 25000, 2, mobs_mc.spawn_height.overworld_min, mobs_mc.spawn_height.water - 10)
-- spawn eggs
mobs:register_egg("mobs_mc:guardian", S("Guardian"), "mobs_mc_spawn_icon_guardian.png", 0)

View File

@ -4,14 +4,14 @@
--################### GUARDIAN
--###################
-- intllib
local MP = minetest.get_modpath(minetest.get_current_modname())
local S, NS = dofile(MP.."/intllib.lua")
local S = minetest.get_translator("mobs_mc")
mobs:register_mob("mobs_mc:guardian_elder", {
type = "monster",
spawn_class = "hostile",
hp_min = 80,
hp_max = 80,
breath_max = -1,
passive = false,
attack_type = "dogfight",
pathfinding = 1,
@ -39,10 +39,14 @@ mobs:register_mob("mobs_mc:guardian_elder", {
run_start = 0, run_end = 20,
},
drops = {
-- TODO: Reduce # of drops when ocean monument is ready.
-- Greatly increased amounts of prismarine
{name = mobs_mc.items.prismarine_shard,
chance = 1,
min = 0,
max = 2,},
min = 1,
max = 64,},
-- TODO: Only drop if killed by player
{name = mobs_mc.items.wet_sponge,
chance = 1,
@ -56,9 +60,9 @@ mobs:register_mob("mobs_mc:guardian_elder", {
min = 1,
max = 1,},
{name = mobs_mc.items.prismarine_crystals,
chance = 4,
chance = 1,
min = 1,
max = 1,},
max = 10,},
-- Rare drop: fish
{name = mobs_mc.items.fish_raw,
@ -80,16 +84,13 @@ mobs:register_mob("mobs_mc:guardian_elder", {
},
fly = true,
fly_in = { mobs_mc.items.water_source, mobs_mc.items.river_water_source },
stepheight = 0.1,
jump = false,
water_damage = 0,
lava_damage = 4,
light_damage = 0,
view_range = 16,
blood_amount = 0,
})
mobs:spawn_specific("mobs_mc:guardian_elder", mobs_mc.spawn.water, mobs_mc.spawn_water, 0, minetest.LIGHT_MAX+1, 30, 40000, 2, mobs_mc.spawn_height.overworld_min, mobs_mc.spawn_height.water-18)
-- Spawning disabled due to size issues
-- TODO: Re-enable spawning
-- mobs:spawn_specific("mobs_mc:guardian_elder", mobs_mc.spawn.water, mobs_mc.spawn_water, 0, minetest.LIGHT_MAX+1, 30, 40000, 2, mobs_mc.spawn_height.overworld_min, mobs_mc.spawn_height.water-18)
-- spawn eggs
mobs:register_egg("mobs_mc:guardian_elder", S("Elder Guardian"), "mobs_mc_spawn_icon_guardian_elder.png", 0)

View File

@ -3,9 +3,7 @@
--made for MC like Survival game
--License for code WTFPL and otherwise stated in readmes
-- intllib
local MP = minetest.get_modpath(minetest.get_current_modname())
local S, NS = dofile(MP.."/intllib.lua")
local S = minetest.get_translator("mobs_mc")
--###################
--################### HORSE
@ -86,6 +84,7 @@ end
-- Horse
local horse = {
type = "animal",
spawn_class = "passive",
visual = "mesh",
mesh = "mobs_mc_horse.b3d",
visual_size = {x=3.0, y=3.0},
@ -118,8 +117,6 @@ local horse = {
hp_min = 15,
hp_max = 30,
floats = 1,
lava_damage = 4,
water_damage = 1,
makes_footstep_sound = true,
jump = true,
jump_height = 5.75, -- can clear 2.5 blocks
@ -142,7 +139,7 @@ local horse = {
self.max_speed_reverse = 2
self.accel = 6
self.terrain_type = 3
self.driver_attach_at = {x = 0, y = 7.5, z = -1.75}
self.driver_attach_at = {x = 0, y = 4.17, z = -1.75}
self.driver_eye_offset = {x = 0, y = 3, z = 0}
self.driver_scale = {x = 1/self.visual_size.x, y = 1/self.visual_size.y}
end
@ -188,14 +185,36 @@ local horse = {
end
local item = clicker:get_wielded_item()
if can_breed(self.name) and (item:get_name() == mobs_mc.items.golden_apple or item:get_name() == mobs_mc.items.golden_carrot) then
local iname = item:get_name()
local heal = 0
if can_breed(self.name) then
-- Breed horse with golden apple or golden carrot
if mobs:feed_tame(self, clicker, 1, true, false) then return end
if (iname == mobs_mc.items.golden_apple) then
heal = 10
elseif (iname == mobs_mc.items.golden_carrot) then
heal = 4
end
if heal > 0 and mobs:feed_tame(self, clicker, heal, true, false) then
return
end
end
-- Feed/tame with anything else
-- TODO: Different health bonus for feeding
if mobs:feed_tame(self, clicker, 1, false, true) then return end
if mobs:protect(self, clicker) then return end
if (iname == mobs_mc.items.sugar) then
heal = 1
elseif (iname == mobs_mc.items.wheat) then
heal = 2
elseif (iname == mobs_mc.items.apple) then
heal = 3
elseif (iname == mobs_mc.items.hay_bale) then
heal = 20
end
if heal > 0 and mobs:feed_tame(self, clicker, heal, false, true) then
return
end
if mobs:protect(self, clicker) then
return
end
-- Make sure tamed horse is mature and being clicked by owner only
if self.tamed and not self.child and self.owner == clicker:get_player_name() then
@ -209,7 +228,7 @@ local horse = {
-- Put on saddle if tamed
elseif not self.driver and not self._saddle
and clicker:get_wielded_item():get_name() == mobs_mc.items.saddle then
and iname == mobs_mc.items.saddle then
-- Put on saddle and take saddle from player's inventory
local w = clicker:get_wielded_item()
@ -227,16 +246,17 @@ local horse = {
local tex = horse_extra_texture(self)
self.base_texture = tex
self.object:set_properties({textures = self.base_texture})
minetest.sound_play({name = "mcl_armor_equip_leather"}, {gain=0.5, max_hear_distance=12, pos=self.object:get_pos()}, true)
-- Put on horse armor if tamed
elseif can_equip_horse_armor(self.name) and not self.driver and not self._horse_armor
and minetest.get_item_group(clicker:get_wielded_item():get_name(), "horse_armor") > 0 then
and minetest.get_item_group(iname, "horse_armor") > 0 then
-- Put on armor and take armor from player's inventory
local armor = minetest.get_item_group(iname, "horse_armor")
self._horse_armor = iname
local w = clicker:get_wielded_item()
local armor = minetest.get_item_group(w:get_name(), "horse_armor")
self._horse_armor = w:get_name()
if not minetest.settings:get_bool("creative_mode") then
w:take_item()
clicker:set_wielded_item(w)
@ -256,7 +276,10 @@ local horse = {
local tex = horse_extra_texture(self)
self.base_texture = tex
self.object:set_properties({textures = self.base_texture})
local def = w:get_definition()
if def.sounds and def.sounds._mcl_armor_equip then
minetest.sound_play({name = def.sounds._mcl_armor_equip}, {gain=0.5, max_hear_distance=12, pos=self.object:get_pos()}, true)
end
-- Mount horse
elseif not self.driver and self._saddle then
@ -265,7 +288,7 @@ local horse = {
mobs.attach(self, clicker)
-- Used to capture horse
elseif not self.driver and clicker:get_wielded_item():get_name() ~= "" then
elseif not self.driver and iname ~= "" then
mobs:capture_mob(self, clicker, 0, 5, 60, false, nil)
end
end
@ -326,6 +349,7 @@ mobs:register_mob("mobs_mc:horse", horse)
-- Skeleton horse
local skeleton_horse = table.copy(horse)
skeleton_horse.breath_max = -1
skeleton_horse.textures = {{"blank.png", "mobs_mc_horse_skeleton.png", "blank.png"}}
skeleton_horse.drops = {
{name = mobs_mc.items.bone,
@ -339,11 +363,11 @@ skeleton_horse.sounds = {
damage = "mobs_mc_skeleton_hurt",
distance = 16,
}
skeleton_horse.blood_amount = 0
mobs:register_mob("mobs_mc:skeleton_horse", skeleton_horse)
-- Zombie horse
local zombie_horse = table.copy(horse)
zombie_horse.breath_max = -1
zombie_horse.textures = {{"blank.png", "mobs_mc_horse_zombie.png", "blank.png"}}
zombie_horse.drops = {
{name = mobs_mc.items.rotten_flesh,
@ -402,11 +426,8 @@ mobs:register_mob("mobs_mc:mule", mule)
--===========================
--Spawn Function
mobs:spawn_specific("mobs_mc:horse", mobs_mc.spawn.grassland_savanna, {"air"}, 0, minetest.LIGHT_MAX+1, 30, 15000, 12, mobs_mc.spawn_height.water+3, mobs_mc.spawn_height.overworld_max)
mobs:spawn_specific("mobs_mc:donkey", mobs_mc.spawn.grassland_savanna, {"air"}, 0, minetest.LIGHT_MAX+1, 30, 15000, 12, mobs_mc.spawn_height.water+3, mobs_mc.spawn_height.overworld_max)
-- compatibility
mobs:alias_mob("mobs:horse", "mobs_mc:horse")
mobs:spawn_specific("mobs_mc:horse", mobs_mc.spawn.grassland_savanna, {"air"}, 0, minetest.LIGHT_MAX+1, 30, 15000, 4, mobs_mc.spawn_height.water+3, mobs_mc.spawn_height.overworld_max)
mobs:spawn_specific("mobs_mc:donkey", mobs_mc.spawn.grassland_savanna, {"air"}, 0, minetest.LIGHT_MAX+1, 30, 15000, 4, mobs_mc.spawn_height.water+3, mobs_mc.spawn_height.overworld_max)
-- spawn eggs
mobs:register_egg("mobs_mc:horse", S("Horse"), "mobs_mc_spawn_icon_horse.png", 0)
@ -414,8 +435,3 @@ mobs:register_egg("mobs_mc:skeleton_horse", S("Skeleton Horse"), "mobs_mc_spawn_
mobs:register_egg("mobs_mc:zombie_horse", S("Zombie Horse"), "mobs_mc_spawn_icon_horse_zombie.png", 0)
mobs:register_egg("mobs_mc:donkey", S("Donkey"), "mobs_mc_spawn_icon_donkey.png", 0)
mobs:register_egg("mobs_mc:mule", S("Mule"), "mobs_mc_spawn_icon_mule.png", 0)
if minetest.settings:get_bool("log_mods") then
minetest.log("action", "MC Horse loaded")
end

View File

@ -98,7 +98,3 @@ COLISIONBOX in minetest press f5 to see where you are looking at then put these
--]]
--
--
if minetest.settings:get_bool("log_mods") then
minetest.log("action", "[MOD] mobs_mc loaded")
end

View File

@ -1,45 +0,0 @@
-- Fallback functions for when `intllib` is not installed.
-- Code released under Unlicense <http://unlicense.org>.
-- Get the latest version of this file at:
-- https://raw.githubusercontent.com/minetest-mods/intllib/master/lib/intllib.lua
local function format(str, ...)
local args = { ... }
local function repl(escape, open, num, close)
if escape == "" then
local replacement = tostring(args[tonumber(num)])
if open == "" then
replacement = replacement..close
end
return replacement
else
return "@"..open..num..close
end
end
return (str:gsub("(@?)@(%(?)(%d+)(%)?)", repl))
end
local gettext, ngettext
if minetest.get_modpath("intllib") then
if intllib.make_gettext_pair then
-- New method using gettext.
gettext, ngettext = intllib.make_gettext_pair()
else
-- Old method using text files.
gettext = intllib.Getter()
end
end
-- Fill in missing functions.
gettext = gettext or function(msgid, ...)
return format(msgid, ...)
end
ngettext = ngettext or function(msgid, msgid_plural, n, ...)
return format(n==1 and msgid or msgid_plural, ...)
end
return gettext, ngettext

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