VoxeLibre/mods/ENTITIES/mobs_mc/villager.lua
kay27 a6ac6f5c76 Merge NEW MOBS by @jordan4ibanez from mineclone5 branch
commit cd472337985d6e885eef019185f0965d13148e7f
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date:   Sun Apr 25 22:02:20 2021 -0400

    Fix rabbit rotation

commit 0f4628db09d68f69a997f98dcd462f29e7ecbe06
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date:   Sun Apr 25 20:48:42 2021 -0400

    Bring mob spawning variable to the top of the spawning.lua file so it's easier to find

commit ddb33acf0d85f29dddb8bdab7a3a7030f9f595be
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date:   Sun Apr 25 20:46:45 2021 -0400

    Add in unused head code elements

commit e52aab45c07c22605993126c4a8ba39c8318d904
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date:   Sun Apr 25 20:23:46 2021 -0400

    Implement no-op head operations for enderman

commit ac852309388e1f9a7dec294440975c7dc89e498c
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date:   Sun Apr 25 20:08:45 2021 -0400

    Add in chicken head code with additional pitch modifier

commit f57c4709ac74d1e2b0b683bebc706a1a3e59db73
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date:   Sun Apr 25 19:54:11 2021 -0400

    Comment out code that causes mobs to glitch push players in mcl_playerplus

commit b6c9a1c423a9831cb3684e6a7e1b57163d6d4ab4
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date:   Sun Apr 25 19:51:11 2021 -0400

    Fix creeper head

commit a8152760b96ca3a9f142b006d2d888da0ebeff6a
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date:   Sun Apr 25 19:44:15 2021 -0400

    Integrate more switches into internal api elements of head code

commit 6a38198e97fd0b573b3b9e590177977d900d5b14
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date:   Sun Apr 25 18:24:10 2021 -0400

    Add in swap_y_with_x and reverse_head_yaw to flesh out head code api element

commit d28e81bc9fc1f11b10da524d6874e8e1ee4a956d
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date:   Sun Apr 25 17:54:14 2021 -0400

    Add in mobs look pitch

commit 5a2773ea1abb6c8706c477802aae2fa60704714c
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date:   Sun Apr 25 17:48:41 2021 -0400

    Add in basics of head code yaw

commit 555935ff3d35d4ac28dad42f5facac0bbfe9b1c9
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date:   Sun Apr 25 16:43:23 2021 -0400

    Implement basic fall damage

commit 7e3b69348e405425712cf8196907a913be10b62e
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date:   Sun Apr 25 16:11:45 2021 -0400

    Add secondary existence check after main logic has been executed to prevent future crashes

commit c898e1e4db3b866ddc4ff391ff89798397775fbf
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date:   Sun Apr 25 15:59:00 2021 -0400

    Update sheep.lua

commit 9b5c9dc8ae9d1221340d1c72e4f48f3212a07fb7
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date:   Sun Apr 25 04:31:48 2021 -0400

    Make farmable mobs/food mobs a lot less rare

commit 5e6653ff651a65e6bfc4057cb5de39f09e9b9cca
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date:   Sun Apr 25 04:19:02 2021 -0400

    Implement mob cramming

commit 1616cb7538141cd38485b4bf59a7b8b049ddd3f0
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date:   Sun Apr 25 04:09:35 2021 -0400

    Fix nametags

commit a3ff108cd4b71cd823518eae0186cbf1d819267e
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date:   Sun Apr 25 04:03:06 2021 -0400

    Make mobs walk up stairs/slabs properly, yet not glitch out when jumping over solid nodes

commit df364eed286fced64f3c4bff897fcfe91a9dd540
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date:   Sun Apr 25 01:45:35 2021 -0400

    Implement basics of head movement and fix walking mobs flying away after floating

commit bac191293bc23405bfc02ef0795f0296fdaeb95a
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date:   Sun Apr 25 01:45:03 2021 -0400

    Fix clientside guessing making floating go crazy client side

commit b7c7c2627beba086c922df0a20939b67ae1eb464
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date:   Sun Apr 25 01:44:46 2021 -0400

    Fix parrots not drowning

commit 38c22f277db652226ce9911e8bffbb8e8b8bc398
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date:   Sun Apr 25 01:24:19 2021 -0400

    Add pop sound when baby mob is born

commit f83ccdb2ed5974486a030196f9b31d0490dcdff3
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date:   Sun Apr 25 01:22:43 2021 -0400

    Add in breeding and feeding baby mob sounds

commit 7733e05a120cb07ed37c351956c1f451da3658b1
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date:   Sun Apr 25 01:14:48 2021 -0400

    Add in random sounds/hurt/death sounds and stop mobs from reviving on server restart again

commit 0a380265c888c64386406187b34914438cdff161
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date:   Sun Apr 25 00:16:54 2021 -0400

    Fix dead-alive mobs and add in hurt/die sound

commit 8d3eff0c16abeff9fbce2f9d4af2b64931765696
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date:   Sun Apr 25 00:06:12 2021 -0400

    Enable mob drowning

commit 56086bf02be689ba83ba3ccf4858429ad4d6a10b
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date:   Sat Apr 24 23:33:46 2021 -0400

    Fix villager

commit 079811984cd952714e6cf85297c91830c0790a1d
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date:   Sat Apr 24 23:29:56 2021 -0400

    Make every mob besides spiders get slowed down by cobwebs like players

commit 7e8e63b0e37300b16a4556aa45758d737514316e
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date:   Sat Apr 24 23:15:40 2021 -0400

    If mob is in daylight and ignites_in_daylight = true, make mob burn

commit 49b01dca4fcea165314c1548f6c3e673a5de0bd3
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date:   Sat Apr 24 22:28:26 2021 -0400

    Make mobs drop xp on death

commit 3d5cceab76768e360e3ea958c71bcf79e9cc2eec
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date:   Sat Apr 24 22:21:58 2021 -0400

    Fix ghast strange behavior in the nether

commit a73e5b57c02275a37b98dc9c80cf35a8c782d9f7
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date:   Sat Apr 24 22:14:25 2021 -0400

    Make pitch movement for fly/swim mobs more dynamic and make ghasts randomly fly around when attacking

commit b401b50c045830386c1c06c22be2232bda3e5b61
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date:   Sat Apr 24 21:15:42 2021 -0400

    Give mobs 6 seconds of memory to prevent strange behavior when player hides behind something

commit 807fb6966d747550da276b264e8e3bf376b332ab
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date:   Sat Apr 24 20:27:37 2021 -0400

    Make spiders climb up walls, fix problems with mob following freaking out when under, fix spider collisionbox

commit 11b5684a90a7779986b5685d899a55a606922a0f
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date:   Sat Apr 24 20:05:14 2021 -0400

    Remove wolf-dog shift click breeding, and implement better logic

commit 41bfaae370729b7409d5dea2cc65a6f5c83979ac
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date:   Sat Apr 24 20:02:59 2021 -0400

    Allow putting chest on carpeted llama by owner, enable swapping carpets

commit 8c855f5b0955ebce15a1aaf4c17e407b5cad7ae8
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date:   Sat Apr 24 19:29:37 2021 -0400

    Add in llama carpets

commit e0185a93113136862b24ad06bea75f1b2e24901f
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date:   Sat Apr 24 18:43:17 2021 -0400

    Fix pig logic issue

commit c2cb15a47f75674afaac721217384c8d7ead1c57
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date:   Sat Apr 24 18:36:22 2021 -0400

    Fix horse breeding

commit 39f7d0cf3cc7d33d786761376a035a31e434434f
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date:   Sat Apr 24 18:18:53 2021 -0400

    Update api.txt

commit 3e9bbca91400e0f587aef13df1ece7d8071b188a
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date:   Sat Apr 24 18:06:24 2021 -0400

    Fix enderman crashing

commit 81713a342d8038c2b51140dbd4bc00f1440b73e8
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date:   Sat Apr 24 00:38:50 2021 -0400

    Allow tamed wolves to be shift click bred

commit a27e6731cd97a1e41861d8a2acbdd4d2d530c220
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date:   Sat Apr 24 00:29:30 2021 -0400

    Make sheep breedable

commit efce97c1723ac25e9dabdfd9572781a6d50f0821
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date:   Sat Apr 24 00:27:17 2021 -0400

    Make llamas shift click breedable

commit 53c96cae2d28c3a6f4642b8a6d5b72365d32267d
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date:   Sat Apr 24 00:26:45 2021 -0400

    Make pigs shift click breedable

commit dbe712bc17cc875c5e9b4b1a919880b0f6893ea1
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date:   Sat Apr 24 00:23:33 2021 -0400

    Make llama breedable

commit 0d4d85bac6b3412a2fec3f01ebc5b3ff6c294173
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date:   Sat Apr 24 00:19:41 2021 -0400

    Fix horse literally blinding you following you

commit 6f2e2ab4c57fe651dd90b4897e4f10673da1de3a
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date:   Sat Apr 24 00:17:22 2021 -0400

    Make chicken breedable

commit 3649e5f6f50c917e3c29bbd0b95327e3667ae1ef
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date:   Sat Apr 24 00:17:09 2021 -0400

    Make horse breedable

commit 2dab0773dffd40cb166c8a14ad79035ac898d4dc
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date:   Sat Apr 24 00:00:21 2021 -0400

    Remove unused breedable api call

commit 0568c14a435e663dccc1a42ae999a76d0936f153
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date:   Fri Apr 23 23:59:35 2021 -0400

    Fix timer and make mooshroom breedable

commit 531253008a13559cdab63f420e9d35c78b382c95
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date:   Fri Apr 23 23:56:59 2021 -0400

    Complete mob breeding, make cows breedable

commit 79cb6ddc4923ea8a009b2810efe785cf3720c63f
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date:   Fri Apr 23 22:35:35 2021 -0400

    Fix lua locals in environment.lua

commit 6eb3eef21561ddf2091682f3703fa9a23e35915e
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date:   Fri Apr 23 22:34:40 2021 -0400

    Fix typo in function

commit c37a82d4a2589d372f88b5101918858c2d210e57
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date:   Fri Apr 23 22:03:29 2021 -0400

    Add comments

commit ed9d629b99a9f873cebfa8e45239271a81a8025c
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date:   Fri Apr 23 21:59:42 2021 -0400

    Add in mob following for cows

commit fcfd6b9d19bbc1e894b8dafed490e04102c87878
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date:   Fri Apr 23 21:14:23 2021 -0400

    Set up basics for breeding mechanics

commit 5ee6cf6c9b3b9da36830c8a58f105d289dfbe54c
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date:   Fri Apr 23 19:49:35 2021 -0400

    Implement mob despawner/mob limiter

commit 19c8dd1dd48532bfb07eac133cd11b702ad74de7
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date:   Fri Apr 23 18:41:41 2021 -0400

    Stop hostile mobs from falling through water when stunned

commit 31ded5e40fc97a7afd252fd74154183afaf1f568
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date:   Fri Apr 23 18:34:20 2021 -0400

    Re-implement neutral mob switch

commit 13c321e8f2c8cb43460093852d44ddae7edec0c1
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date:   Fri Apr 23 18:03:01 2021 -0400

    Re-enable mob spawning

commit ea6912c980952bed2a0b5e62009e0a2639d75d75
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date:   Fri Apr 23 17:44:49 2021 -0400

    Don't do knockback effect for mobs when hurt by a rider

commit 8dafac50a865f189074272303b83f37391c11c3c
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date:   Fri Apr 23 17:37:20 2021 -0400

    Make mobs run away slightly faster

commit 3560bda4a5a8be026c5d50eb8ddeca9ed45e0b8e
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date:   Fri Apr 23 17:29:23 2021 -0400

    Remove unused code and variables from mob punch

commit 9720986c4d30bf8fcd2cf1117d80eea06da5332a
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date:   Fri Apr 23 17:27:08 2021 -0400

    Fix punching a mob breaking it's velocity

commit dc7592528cf948556e4e925310e830648b52dff1
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date:   Fri Apr 23 17:23:00 2021 -0400

    Add red tint hurt effect

commit 304cbed447adbcccff246f242d18d51fc010df35
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date:   Fri Apr 23 17:12:02 2021 -0400

    Make mobs that should be skittish, skittish

commit af4c42fea7112ada76fd9b273f771611532bdcf9
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date:   Fri Apr 23 17:10:44 2021 -0400

    Add skittish behavior (runaway from punch) and fix ocelot

commit 8daf197fb899a0bee8f61aad4ccedec1108f5f92
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date:   Fri Apr 23 16:52:07 2021 -0400

    Fix iron golem rotation

commit c138050e0b877f5dc987959efe4acbe17ffd86f2
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date:   Fri Apr 23 16:45:12 2021 -0400

    Make iron golem neutral and protective, fix rotation

commit 36d5af1d15b432d84e24e161b78d4b41ce2731bd
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date:   Fri Apr 23 16:35:16 2021 -0400

    Stop dead mobs from getting in the way of fighting other mobs

commit 73b4d3c1d2c74cb5bd5bb23604ce1d74e183cb0d
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date:   Fri Apr 23 16:31:13 2021 -0400

    stop projectile mobs from being completely disabled while stunned

commit eb7ae5e10e731fc949a9a4184e02a39103f83a1e
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date:   Fri Apr 23 16:28:30 2021 -0400

    Fix random crash

commit c831da2c02253450df965930cbfcd539b820f3b9
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date:   Fri Apr 23 16:22:34 2021 -0400

    Fix mobs not making hit sound when hit by node

commit d5a38fef58c1862490c9f32238ec83cf1a2c2d5c
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date:   Fri Apr 23 16:19:37 2021 -0400

    Add in new mob punched sounds

commit 8e7ce5a72ae3e7cedf985a414c64ca259bcd6136
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date:   Fri Apr 23 16:04:01 2021 -0400

    Add in a visual for horse taming (hearts)

commit 189c0ad157a8871d51045effcded0662aff7b1af
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date:   Fri Apr 23 15:53:01 2021 -0400

    Half finish horse (riding logic, etc)

commit f64f8e31e3ba8e7a14b22d084be5ef584895242d
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date:   Fri Apr 23 14:50:38 2021 -0400

    Fix llama blaze and ghast projectile sprites

commit 58bee2a2dd1b4d6d3d1873d3ac566be9e0aa7930
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date:   Fri Apr 23 14:43:00 2021 -0400

    Fix projectile tails clipping through sprite

commit 16cc7e37d2fc83e50d4e2c380cef05224dbbed38
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date:   Fri Apr 23 14:34:59 2021 -0400

    Randomize projectile cooldown timer

commit 8eb9ba12cef918cb116aea8eaea5a1e757123b01
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date:   Fri Apr 23 14:33:40 2021 -0400

    Fix crash when mob collides with nil entity

commit 5d59583583462563f7d65747a198b0d6d8ed34fc
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date:   Fri Apr 23 14:10:12 2021 -0400

    Massive overhaul to projectile mobs with custom projectile function, make llamas spit

commit f6fa90096dfdb9d21b6f52968daa60943a07470e
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date:   Fri Apr 23 13:35:30 2021 -0400

    Fix enderman teleport attack

commit 4fb9e69e41a8c2ee91c659acb0b11fc76a6a97fe
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date:   Fri Apr 23 13:27:17 2021 -0400

    Make enderman become hostile when stared at, freeze when attacking when stared at

commit 99f13f84b563c1962c285b2e9973aec8a5d079d7
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date:   Fri Apr 23 13:13:23 2021 -0400

    Half-fix enderman

commit dd76b15c501a1a458f2fa112b29784e26c3140bd
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date:   Fri Apr 23 13:06:57 2021 -0400

    Make ghasts not insta-kill

commit b6f19699e9059a382421f55ac9ee5b642e7751a6
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date:   Fri Apr 23 13:06:17 2021 -0400

    Make enderdragon half work

commit 4efec1ef58ba4afe4692a22a361079b5026a7de3
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date:   Fri Apr 23 12:55:11 2021 -0400

    Add in chicken slow falling

commit 08956664073078fd896add1e57ff0a524de2a32f
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date:   Thu Apr 22 23:36:58 2021 -0400

    Fix random crash with mixed mob ally data types

commit 408296140a4fe0c785f5fb4760899fdb3851fe00
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date:   Thu Apr 22 23:30:32 2021 -0400

    Fix and overhaul wolves

commit aac1e1933677d119b52c25a64b3ee6c77e16e770
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date:   Thu Apr 22 23:18:33 2021 -0400

    Implement rotation locking when standing, fix rotation unlock/lock for fly/swim mobs

commit fa059b5df245e81d71d73bbc87b51c59cd47a876
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date:   Thu Apr 22 22:59:03 2021 -0400

    Fix ghast's eyeheight

commit 2e3e92e39337e5c4ecba13855f134af1bd672ae6
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date:   Thu Apr 22 22:58:32 2021 -0400

    Fix ghast's insane difficulty

commit 11bcf3aa34e85dcc19142258ca2c4abaf963b806
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date:   Thu Apr 22 22:51:13 2021 -0400

    Add attributes to epCode

commit 2099be43ea25740a402587f40b3004f6ef2d8c1d
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date:   Thu Apr 22 22:50:14 2021 -0400

    Update to epCode's fixed version of ghast model

commit 5037ec3736a564157408df12699c91df17c934b6
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date:   Thu Apr 22 22:40:16 2021 -0400

    Fix ghasts horrible collisionbox

commit 0a8fff65249610aba7fef7e9675bf28469265f29
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date:   Thu Apr 22 22:08:54 2021 -0400

    Add in mob criticals when falling

commit afdcada1fd6f7c8cbe68b0fd1486d6d92f3d12f7
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date:   Thu Apr 22 21:46:13 2021 -0400

    Fix endermite

commit 5d876725c599b060c5150b0508f21b6a83001f9a
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date:   Thu Apr 22 21:45:00 2021 -0400

    Fix bats

commit ef0d52a2df9a3d2d2c1e59b12084017c405bc398
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date:   Thu Apr 22 21:41:54 2021 -0400

    Update backup_code_api.lua

commit 8142f7e51214672292d3bffe3fa8119eb8a1cf1c
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date:   Thu Apr 22 21:36:42 2021 -0400

    Add in mob death

commit ebf27866ca3bb02c726d4729c0666ee28e20a3dd
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date:   Thu Apr 22 21:12:08 2021 -0400

    Fix typo and error in animation.lua

commit 3fe8d2d3c59ca6c173817a9d2d6b48e3549acd57
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date:   Thu Apr 22 20:30:50 2021 -0400

    Add file death_logic.lua

commit b73ab976a1115044bc336f9e3f181ecf6e75cc06
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date:   Thu Apr 22 20:25:58 2021 -0400

    Implement framework for mob death

commit 8530e6ee368f510581c618666613432f25266ce5
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date:   Thu Apr 22 20:20:56 2021 -0400

    Make mob punching time based

commit e1812b2cdba132afec9ed6cdc45ee9f078806264
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date:   Thu Apr 22 20:12:02 2021 -0400

    Reset pause timer to 0

commit 991bba0a1d611cf545020c9129fdcbc4806e73c6
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date:   Thu Apr 22 20:10:01 2021 -0400

    Add comments into ai.lua

commit f9a7144b658f747be895bb6a8b69c8a0124fdd2a
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date:   Thu Apr 22 20:07:30 2021 -0400

    Implement ability to hurt mobs

commit 45790c0be0eec380e281a687a1ff03ea1f114143
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date:   Thu Apr 22 19:12:02 2021 -0400

    Re-enable mob punching (broken)

commit 31a791c33b19d76350993d844747a0c51a77382c
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date:   Thu Apr 22 18:20:58 2021 -0400

    Undo debug.txt spam from mob spawning

commit d0d128c1d8f84e8de590e34adfe0265556ccd3e1
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date:   Thu Apr 22 18:18:57 2021 -0400

    Break infinite loop if unable to find any mob to spawn

commit ee905642c2cdfaa3be3eb5c2af7ec75599ffd41e
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date:   Thu Apr 22 17:56:38 2021 -0400

    Add temporary warning debug to spawning algorithm output

commit 2cef9e7cca2e70e544eb3068a0e3e36487cab669
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date:   Thu Apr 22 00:39:32 2021 -0400

    Optimize mob spawning even further with additional lua locals

commit edb1939649c62a2b486e1c04c5af27458f978388
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date:   Thu Apr 22 00:27:35 2021 -0400

    Fix mob_counter in mob spawning limiter

commit 7c1adeab459d452ac016108b588957082c1347c1
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date:   Thu Apr 22 00:20:57 2021 -0400

    Hyper-optimize mob spawning

commit fbe3ccc5c05b5d5141737d3a73df3e4d14a33a33
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date:   Wed Apr 21 23:28:38 2021 -0400

    Delete current state of things comment

commit 5e15af260bed13b07b295f558f5cb05bedaa7eae
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date:   Wed Apr 21 23:25:19 2021 -0400

    Fix pig rotation

commit 6aa636449211b1bbec1297723281f72b4c76c4da
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date:   Wed Apr 21 23:25:10 2021 -0400

    Fix sheep rotation

commit 29305f548db88b0b895ec747ebfbc092c51c4762
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date:   Wed Apr 21 15:08:35 2021 -0400

    Overhaul arrow register, implement basic blaze, break parts of arrow register for now, remove fallback for detecting players

commit 08c90c34e83c498ee2cc883a2cad9b98a269a850
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date:   Wed Apr 21 13:05:46 2021 -0400

    Make parrots and squids work with tilt fly/swim

commit 91099c3be93689c2569f838a63e75e38ca382162
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date:   Wed Apr 21 13:01:14 2021 -0400

    Fix auto-true statement for tilt fly/swim

commit 71c34823bc87b0892d4450b877fb1c78cd6ad416
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date:   Wed Apr 21 12:56:36 2021 -0400

    Make tilt flying/swimming dynamic

commit 20886f54bb8887fb88ce0e0e0c6f28a789868740
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date:   Wed Apr 21 12:48:23 2021 -0400

    Make shooty mobs jump

commit ebd995fbd2eb089a37b659e9ae87c86562e3ed69
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date:   Wed Apr 21 12:45:02 2021 -0400

    Simplify skeleton arrow damage calculation

commit c9f71d66f52f2e80fea6cd01fcb2db30ae399c39
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date:   Wed Apr 21 12:42:34 2021 -0400

    Implement skeletons/strays

commit 99e808296b81f37a9e01d4b4beb02120526bb4e9
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date:   Wed Apr 21 12:17:51 2021 -0400

    Add missing skeleton/stray run animation

commit 74094938bb0918df12ffa778c95b966d7bd6c9f3
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date:   Wed Apr 21 12:10:29 2021 -0400

    Fix crash with non-punch attack mobs in collision

commit 6bd279255c7e4b5623afa39caae8f988127f7ac3
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date:   Wed Apr 21 11:50:22 2021 -0400

    Fully implement zombie pigmen

commit 964ce9ccf7101aef387bdd5ec2213ba4ac361a51
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date:   Wed Apr 21 11:42:01 2021 -0400

    Temporarily disable spawn eggs from setting owner

commit 5062d56a5d89346234f6125848799f32915b31a4
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date:   Wed Apr 21 11:00:02 2021 -0400

    Implement neutral mob mechanics and partial implement of zombie pigmen

commit b0b1ec9436776fdc89edaf3046499a9e2cfaed0f
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date:   Wed Apr 21 10:53:20 2021 -0400

    Implement zombie pigmen and make them turn hostile when punched

commit f1dc2864425bab2eed2f5bec7b7ccd0307145b1f
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date:   Wed Apr 21 10:23:51 2021 -0400

    Dump mob_punch from backup_code_api.lua back into interaction.lua

commit cc2a0ae52cefc388d18c9d106ef70fc0718f5e40
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date:   Wed Apr 21 10:21:11 2021 -0400

    Complete charged creeper

commit 486959515ca13ba0d5756ba5d930ff43e9d135b5
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date:   Wed Apr 21 10:20:31 2021 -0400

    Make creepers even more dangerous

commit 576621169b468f317cf32d6d0be391252a033d3a
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date:   Tue Apr 20 23:26:18 2021 -0400

    Make creepers and zombies even harder

commit 2c87bd19f3c6a4a5a1a3b88a45cd673ecccb838b
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date:   Tue Apr 20 23:14:53 2021 -0400

    Overhaul zombie villager

commit 1ed3377559c4690fa19488f526bcaf97d5ff94b1
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date:   Tue Apr 20 23:11:18 2021 -0400

    Add punch mobs knockback to players when hit

commit 8c9356a18cb60cd28691e3782723df763b75a1fa
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date:   Tue Apr 20 22:58:39 2021 -0400

    Implement eye_height and viewing range for hostile mobs, along with making punchy mobs jump over nodes

commit a05ebd7cc29c96b622dbc043529513b07d5cf47b
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date:   Tue Apr 20 22:44:34 2021 -0400

    Add informative text art

commit 60ac3058ce1e3e05caa87c18bdf95c78a71ed750
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date:   Tue Apr 20 22:42:51 2021 -0400

    Make zombies more difficult

commit 751c4c2d995a011a3298d374c77b9c4567ed2fa1
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date:   Tue Apr 20 22:41:13 2021 -0400

    Integrate mob punching into collision detection

commit 6b52b945165a8501e09ca70c18514049df194c05
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date:   Tue Apr 20 22:30:34 2021 -0400

    Start setting up hostile punch attack type

commit d371d6fdc9cb85e140399eafb89f15195f72d09f
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date:   Tue Apr 20 22:04:54 2021 -0400

    Adjust creeper explosion settings

commit fabd4d64e6745b9ea8c4bb1a76c190c2d66576be
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date:   Tue Apr 20 21:35:19 2021 -0400

    Slow down creeper type mobs explosion buildup

commit bf367fffd054fe180dbc6d7f46e20e286d68bb09
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date:   Tue Apr 20 21:34:18 2021 -0400

    Add in sound_handling and make explosion type mobs make their attack sound before explosion animation

commit 0b763f54b55ea47b7889816612759447bfb50422
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date:   Tue Apr 20 21:00:36 2021 -0400

    Finish creeper movement ai and move jump_check into environment

commit cd6f07537f64bdbe7573642982ec24ac3fb19ec1
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date:   Tue Apr 20 20:43:45 2021 -0400

    Make creepers even more deadly

commit 9678b556e17b124f841b0019b3a31880a415bd11
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date:   Tue Apr 20 20:33:30 2021 -0400

    Fix crashes when trying to collision detect a removed mob

commit cdb840609dc2586b31a1e44c8c1004379ef37979
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date:   Tue Apr 20 20:19:55 2021 -0400

    Add in creeper basic prototype

commit 008d670ed9006d918b1ed1698a5b644de27191b1
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date:   Tue Apr 20 17:10:51 2021 -0400

    Remove wandering from ai

commit 491ef6c8f818e43ef0545963eb27b5476c95ea28
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date:   Tue Apr 20 16:48:20 2021 -0400

    Add in auto mob removal if something goes horribly wrong

commit 348df0fcecc2709fe088493d5665112827f08129
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date:   Tue Apr 20 16:46:10 2021 -0400

    Rename detect_players_in_area to detect_closest_player_within_radius

commit ac08c6991c0ce7f9bb8d9de5880ec64a7882c3e7
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date:   Tue Apr 20 16:39:05 2021 -0400

    Add in detect_players_in_area

commit 3d776138e97b904c9b299119ae9b9a8a2811ae7a
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date:   Tue Apr 20 14:55:22 2021 -0400

    Start implementing creeper ai

commit 85e531bf106df326b2ca470b5a94aeb06f92d4d6
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date:   Sun Apr 18 21:24:31 2021 -0400

    Remove unneeded mobs:protect from code

commit 4d589dfb2aa10cb664b4d3b3471960e6d648b92c
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date:   Sun Apr 18 21:22:39 2021 -0400

    Remove literally unneeded mobs:capture_mob

commit 39985aa558d9f43a6a2e82fb6d59ad0ca8b6324d
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date:   Sun Apr 18 21:22:21 2021 -0400

    Up fallback max xp to 3

commit 1920ddf91530a7c033c8288cd3a752f3ee7ba850
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date:   Sun Apr 18 21:02:03 2021 -0400

    Change all enemy attack info to more workable and understandable attacks

commit 719bb2a3c96ca020f8f828959e377831f47cd27b
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date:   Sat Apr 17 18:21:33 2021 -0400

    Add in prototype jump-only mobs api

commit db87b8e0a37cd15ef7931a76d21bbb190a158205
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date:   Sat Apr 17 17:09:57 2021 -0400

    fix chicken rotation

commit e2987245fd6c6ee75383ea92da30e9fc5e10ad1e
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date:   Sat Apr 17 17:00:34 2021 -0400

    Balance out collision forces for mobs

commit 3cf263d292f9fc5a7a18fafa2aa1fbc8e1840a0a
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date:   Sat Apr 17 16:23:38 2021 -0400

    Add in dynamic pitch in flying/swimming mobs

commit 5ade34115cff228994ff3fd680aa15c8225ab6e7
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date:   Sat Apr 17 13:17:29 2021 -0400

    Remove random state initialization in set_up.lua

commit d9729fc8651d06566e61bcfcb2e7df0484f25f48
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date:   Sat Apr 17 13:13:45 2021 -0400

    Fix parrot's rotation

commit 58d9670e777c3798c676924023375a2579450142
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date:   Sat Apr 17 13:11:39 2021 -0400

    Remove collisionbox addition for y position for fly mobs

commit a20f272e08f0170b2761eeba2a12aeaf88efad7b
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date:   Sat Apr 17 13:05:53 2021 -0400

    re-adjust logic gate for mobs floating in water and lava

commit 0794bc54372c6aaa9c653693da3a18194adf5c95
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date:   Sat Apr 17 13:04:55 2021 -0400

    Make flying mobs float in water and lava

commit 8783912938aed1f5566f3e2f5056213f0cefe4a6
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date:   Sat Apr 17 12:48:57 2021 -0400

    Add in mobs api swimming animation

commit f2e909ab8d182febabbdacd9de50a65f27137761
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date:   Sat Apr 17 12:41:14 2021 -0400

    Add in fly logic gate

commit 07841c89632626f1c3bb4790f8db0c2adddfb2eb
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date:   Sat Apr 17 12:38:48 2021 -0400

    Swap name of quick_rotate_45 to quick_rotate

commit 240d6ea21155f2044d3b728a210811821540013a
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date:   Sat Apr 17 12:37:04 2021 -0400

    Add note about quick_rotate_45 actually rotating 11.25 degrees

commit e8148f81ab7641554096bc03ecda8927d9ad9491
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date:   Sat Apr 17 12:36:19 2021 -0400

    Make underwater mobs try to continuously swim around with quick_rotate_45

commit 061602d9d46d4e4607e407c064070709ef99f9b7
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date:   Sat Apr 17 12:28:07 2021 -0400

    Overhaul separation of swimming and flying for ease of use with writing mobs api

commit 5365dec19a8a088263916a3686f27859be51e870
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date:   Sat Apr 17 12:01:27 2021 -0400

    Adjust "flying" vector checks for mobs

commit dda7839d8c4c2292e9c8d6472faf38372654d886
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date:   Fri Apr 16 21:43:02 2021 -0400

    Add in prototype swimming

commit f1141aed9fa52bf57e8867fdb3ffb520793dab07
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date:   Fri Apr 16 21:08:54 2021 -0400

    Make mobs flop when outside of flying node

commit 84ca7681fc9ee3e9945488865678b2b82eb0a22d
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date:   Fri Apr 16 20:47:16 2021 -0400

    Make squids fly in water flowing and water source

commit 52c3db041e602ebd0861a0b86c55b35662c8c33a
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date:   Fri Apr 16 20:32:05 2021 -0400

    Add in fly state prep for mobs

commit 6db4511dd5b038cd95c7ea196559bb25a53246e9
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date:   Fri Apr 16 20:06:55 2021 -0400

    Add notes

commit 15ea9c1c71f3e4d4dd24ce145d385f8457e4905e
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date:   Fri Apr 16 19:59:20 2021 -0400

    Implement self walking velocity for walking state

commit 9d6d042ee325a010d97abdff7efc37f3dcf46b5e
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date:   Fri Apr 16 19:37:01 2021 -0400

    Fix formatting in ai.lua

commit ce7f4918b061fa9a4d46045a389497cb0da1a5ee
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date:   Fri Apr 16 19:35:19 2021 -0400

    Re-organize comments

commit 05d06a4c8f0128ac5edd21b8096bb75553c1f89e
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date:   Fri Apr 16 18:36:23 2021 -0400

    Add comment to state_execution

commit c761db86c7e67aab27d3806a76b7a58504a7d5c6
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date:   Fri Apr 16 18:29:42 2021 -0400

    re-arrange mob logic for random wandering

commit ed456ecb47d788efe9aa526849110015e9c04e9a
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date:   Fri Apr 16 18:17:51 2021 -0400

    Make mobs not fear cliffs if fear_height is 0

commit 8ca5f221ec9ce534e91f7094193b4ec951e743b1
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date:   Fri Apr 16 18:13:54 2021 -0400

    clean up ai.lua

commit cadd53c103f4047069f581abdc033d2def4ed2dd
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date:   Fri Apr 16 16:39:03 2021 -0400

    Adjust mob jumping default to account for higher gravity

commit 57b293de2b02be81ff3e17e620807c653fe9b625
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date:   Fri Apr 16 16:37:15 2021 -0400

    Make mobs gravity equal to player's

commit fb9a55e562c3e4102fa4e02603f93d1c78e397ad
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date:   Fri Apr 16 15:55:11 2021 -0400

    Make jump_check more modular and allow mobs to turn if at a wall

commit a6a54b34140c279d7a9ff3db5b21f1be0ead15f8
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date:   Fri Apr 16 15:49:03 2021 -0400

    Make mobs not jump if against a wall

commit 6c5393427f72c082a5c85514cb3b54aa4a9ce45f
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date:   Fri Apr 16 15:39:39 2021 -0400

    Smooth out mob cliff check and check if falling before cliff check

commit 2486ffef11113a40b43a2548bde57e9cca186da9
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date:   Fri Apr 16 15:30:44 2021 -0400

    Make wandering mobs avoid cliffs

commit adc683c6a7cd56c33bebc22ce1363671db4f4846
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date:   Fri Apr 16 14:19:22 2021 -0400

    Clear mob animation on activate

commit d0695e7929460728f7da2e01cc809cb343481e1a
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date:   Fri Apr 16 13:58:08 2021 -0400

    Fix mob animation "memory leak"

commit 024cf46307abb6fefbfe8be04941205026561177
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date:   Fri Apr 16 11:52:29 2021 -0400

    Adjust spacing in animation.lua

commit f38492bcb031b7fcc2ee8299f66fcd3cd3a68398
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date:   Fri Apr 16 11:50:29 2021 -0400

    Re-implement animation check gate for mobs

commit a934a59f3b64e8adef64676daaf81b574a6ceecd
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date:   Fri Apr 16 11:50:13 2021 -0400

    Implement mob random walk directions

commit 94ca7e8b89bd39144d85bc6a622778babb226d47
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date:   Fri Apr 16 11:31:18 2021 -0400

    Add in state switch and state execution for mobs

commit 626c30de6d4191cd4a18b0f11cb4805c425f9648
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date:   Fri Apr 16 11:30:55 2021 -0400

    Create todo.txt

commit c2bac87a6d03364193aedf67c780fdea9f545cac
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date:   Thu Apr 15 21:46:33 2021 -0400

    Update set_up.lua

commit 375d683d08266586d024491dcba2268c66583989
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date:   Thu Apr 15 16:18:42 2021 -0400

    Fix forgotten localization in collision.lua

commit 246bdf9707c98f787cb5264dc7ff638e340d768b
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date:   Thu Apr 15 15:55:10 2021 -0400

    Implement basic mob walking animation test

commit d07d0ae31c0d39c526c8418e725b5dce1d120793
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date:   Thu Apr 15 15:34:07 2021 -0400

    Make mobs jump properly

commit 6cb6d714c9bcf55213a9449416bec37c0fe318af
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date:   Thu Apr 15 15:04:55 2021 -0400

    Reorganize all mob sections into multiple files

commit 5155d12d05c5b563a78923b3fc02a885cd23fe85
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date:   Thu Apr 15 14:09:54 2021 -0400

    Reformat mobs_mcl to api folder for ease of use

commit bbcfb3fdb171053e3142854f658860e7693f31d1
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date:   Thu Apr 15 11:33:09 2021 -0400

    Randomize walking or standing on spawn in

commit 9e4bf6e130195b4f2176658581ad17646a48ce3a
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date:   Thu Apr 15 11:29:18 2021 -0400

    Move old set_yaw and add node on set_velocity

commit e53a193c4fe61e88e6501a2a863e22d533132ae4
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date:   Thu Apr 15 11:25:55 2021 -0400

    Fix get_velocity (mobs internal)

commit 14207dd96aa60652c0ad1f4351441659c33d3ff6
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date:   Thu Apr 15 11:23:52 2021 -0400

    Smooth out mob movement set_velocity more

commit a0ed1a0b2004baeb3d0f64c5eb02bbf0b21bf823
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date:   Thu Apr 15 10:05:24 2021 -0400

    Add automatic rotation lock

commit ba46e7fa42bbd25175d3505ca9699a11912d491f
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date:   Thu Apr 15 09:28:58 2021 -0400

    Remove old debug of colliding with objects

commit 61124905f3d862d00f00674067003d8da7722405
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date:   Thu Apr 15 09:28:22 2021 -0400

    Add in mob auto rotation (implementation 1)

commit 8b200c7352cb9fdd01f1b073308acacd36b2672a
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date:   Wed Apr 14 19:38:14 2021 -0400

    Add in basic movement rotation testing

commit 67259891a85e54f56dc543087bd98cfe12feb6f4
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date:   Wed Apr 14 18:01:29 2021 -0400

    Remove unneeded comments

commit d063db751c1657c367f2277b24a5aa51a8d90fa3
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date:   Wed Apr 14 17:26:20 2021 -0400

    Disable mcl_playerplus random check that moves players randomly

commit d4db27f0e1edd439f65821b814146a237ebea799
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date:   Wed Apr 14 17:25:39 2021 -0400

    Update backup_code_api.lua

commit 755533beeb6c708603096cce4f99bea558c8b6ce
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date:   Wed Apr 14 11:50:22 2021 -0400

    Disable literally everything in mobs api

commit 3f6312a631c6726c3bc4b09d9ec3e64b3ae810e5
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date:   Tue Apr 13 20:24:46 2021 -0400

    Make mobs magnetic collision more jello-y

commit aa4d34c10e4bc367fc6ad7d898cd145d9f58ed0c
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date:   Tue Apr 13 20:00:38 2021 -0400

    Improve mob to mob collision

commit 1210bc463adb949496fc521e3169fb88e49fc4e9
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date:   Tue Apr 13 19:44:24 2021 -0400

    prevent mob collision detection shootout

commit ed6026671381c99723eccbf2089d99748e19bfe2
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date:   Tue Apr 13 19:17:48 2021 -0400

    Gut even more elements of the api

commit 220d30df5f159d69be22663733feb1fbf51c45f8
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date:   Tue Apr 13 19:13:29 2021 -0400

    Completely gut do_states

commit 9758bbf2e7e382948b4ad1ab8c360519270fec14
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date:   Tue Apr 13 08:21:04 2021 -0400

    Finish gutting mob api

commit f29ad4b8b78689ed0d759c18178a6b2dbc9a1e25
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date:   Tue Apr 13 08:20:11 2021 -0400

    Reorganize more settings to the top of file

commit 54f5bee8a379bf910c1cc6ea3d33bd32b819f3dd
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date:   Tue Apr 13 08:08:29 2021 -0400

    reorganize load settings

commit 02515f0778bbe9cd962acc514b084c9dedf55074
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date:   Tue Apr 13 08:07:32 2021 -0400

    Move a large chunk of code to backup_code_api.lua

commit 3fc0184182f70be0c2fd9b3be1c5d78fa7f00503
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date:   Tue Apr 13 07:39:57 2021 -0400

    Disable entire mob ai to work on vanilla walking

commit 6fff719322ee250fc7c074d2362edbf0c4090406
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date:   Mon Apr 12 08:47:07 2021 -0400

    Localize minetest library

commit adaf74fc5c6354cf2fb1a9f784e5a37a4fb31caa
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date:   Mon Apr 12 08:13:11 2021 -0400

    Remove spacing and delete old collision comments

commit a564009e4aeda08372b80fb1a5fc2d16f5dfd364
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date:   Mon Apr 12 08:11:55 2021 -0400

    Change HORNY_TIMER to BREED_TIMER

commit 00759da39d621b36be6200fa365c51be86dbb99f
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date:   Sun Apr 11 18:29:32 2021 -0400

    Unlimit mob ai

commit 9aafc28a2009998017753d0aa4d013e3cd8795b6
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date:   Sun Apr 11 14:47:56 2021 -0400

    Fix mobs nil check during mob_step

commit 67c40885ef62b4e4e8dcaba3b65c58502c558f7e
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date:   Sun Apr 11 14:21:19 2021 -0400

    Fix mobs collision system only running during movement - major overhaul with ai disabled

commit 2456e3cd1ef6954415e4a771bb704a12364895eb
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date:   Sun Apr 11 12:52:31 2021 -0400

    Adjust math localizations in api.lua

commit 725dc731ddc2a6f1cf1a20832e06883613d5974a
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date:   Sun Apr 11 11:58:33 2021 -0400

    Adjust mob collision detection - this breaks a lot of things and will be fixed later

commit e15fd2f4b60fafcae3b765d345914032b4a52668
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date:   Fri Apr 9 01:38:34 2021 -0400

    Add lua locals into mcl_dungeons for performance

commit c937b2a97338097700cd3836811ce46366e88027
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date:   Thu Apr 8 14:19:42 2021 -0400

    test

commit 8c10fe4057d5a973d448e32addbc07617f9b8edc
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date:   Thu Apr 8 12:48:02 2021 -0400

    Adjust spawning to be closer and more frequent

commit bd7866d7983aae52aef426bc7a305ae166817ed7
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date:   Thu Apr 8 12:07:20 2021 -0400

    Finish mob limiter

commit 9369c9cab8f25d5fa34fe0cdaeee4f9570db4551
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date:   Thu Apr 8 10:01:15 2021 -0400

    Fix spawn timer reset debug

commit 28823298e1536d4ce34d67ada624dcb5aaf377e0
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date:   Thu Apr 8 10:00:04 2021 -0400

    Fix forgotten biome check

commit 9d48549ec5901de887eb9fb2d75fd07f08edb39b
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date:   Thu Apr 8 09:52:50 2021 -0400

    Complete prototype of biome generated mobs

commit 518252679f642d00057889b462eb8c87b0992de7
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date:   Thu Apr 8 08:42:57 2021 -0400

    Fix a lot of things

commit bb078b0c4c48ac6932d2953561ac03bea3bde51a
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date:   Thu Apr 8 08:33:50 2021 -0400

    Fix silverfish typo

commit adab48ff0c95c2fad11e4d58824d635ae6945875
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date:   Thu Apr 8 08:29:16 2021 -0400

    Readjust mobs internal settings to not cause insane memory usage

commit 47c59edb511fde5db934fca519b9d8aa1fc68838
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date:   Thu Apr 8 08:13:46 2021 -0400

    Fix typo

commit 5ca30fa8eec24a1f9bee879bb49d3dfce82484fb
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date:   Thu Apr 8 08:12:43 2021 -0400

    Combine air and ground type spawning into ground

commit aacb8fc7b95013e42c832927088708b8c9889201
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date:   Thu Apr 8 08:09:43 2021 -0400

    Add in extra_mobs information

commit f900b24b53a802fd5db1bf1a633d7f89e42bcce5
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date:   Thu Apr 8 07:39:18 2021 -0400

    Add in all biome information to mobs

commit 0ad833c046095d83a789705aa15dd7f30fd8f3ed
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date:   Thu Apr 8 06:57:24 2021 -0400

    Add bats, chicken, and blaze spawn info

commit f4a6bdc6b89b2d605cfd06f0b7baa6170a19314c
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date:   Thu Apr 8 06:48:25 2021 -0400

    Make reference list copy-pastable

commit bf4bf9a0cc60a1a15f1ddbfed314ec5a9c75561c
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date:   Thu Apr 8 06:10:07 2021 -0400

    Ignore default or void dimensions

commit 8e1e02d1fbc189680dbd004bdd905446467a4e29
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date:   Thu Apr 8 06:04:36 2021 -0400

    Add biome list

commit da045c207d3bd5931e3cf73c5459b45d86596c12
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date:   Thu Apr 8 02:07:15 2021 -0400

    Refactor spawning into it's own file

commit 6ec66ef6f666007e411e23689e0d4eccd5a5fbfe
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date:   Wed Apr 7 23:16:03 2021 -0400

    Fix mobs colliding with other mobs/players

commit 6bd249547a888493af6c5cfc65d3e206e1467c19
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date:   Wed Apr 7 23:07:04 2021 -0400

    Fix mobs colliding with objects

commit c4d030d111ea6e21ca6343f76fb98b8aa9d29f6c
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date:   Thu Apr 1 23:48:00 2021 -0400

    Fix item drop on laggy servers
2021-04-29 04:11:33 +04:00

1114 lines
32 KiB
Lua

--MCmobs v0.4
--maikerumine
--made for MC like Survival game
--License for code WTFPL and otherwise stated in readmes
--###################
--################### VILLAGER
--###################
-- Summary: Villagers are complex NPCs, their main feature allows players to trade with them.
-- TODO: Particles
-- TODO: 4s Regeneration I after trade unlock
-- TODO: Breeding
-- TODO: Baby villagers
-- TODO: Spawning in villages
-- TODO: Behaviour:
-- TODO: Walk around village, but do not leave it intentionally
-- TODO: Run into house on rain or danger, open doors
-- TODO: Internal inventory, pick up items, trade with other villagers
-- TODO: Farm stuff
local S = minetest.get_translator("mobs_mc")
local N = function(s) return s end
local F = minetest.formspec_escape
-- playername-indexed table containing the previously used tradenum
local player_tradenum = {}
-- playername-indexed table containing the objectref of trader, if trading formspec is open
local player_trading_with = {}
local DEFAULT_WALK_CHANCE = 33 -- chance to walk in percent, if no player nearby
local PLAYER_SCAN_INTERVAL = 5 -- every X seconds, villager looks for players nearby
local PLAYER_SCAN_RADIUS = 4 -- scan radius for looking for nearby players
--[=======[ TRADING ]=======]
-- LIST OF VILLAGER PROFESSIONS AND TRADES
-- TECHNICAL RESTRICTIONS (FIXME):
-- * You can't use a clock as requested item
-- * You can't use a compass as requested item if its stack size > 1
-- * You can't use a compass in the second requested slot
-- This is a problem in the mcl_compass and mcl_clock mods,
-- these items should be implemented as single items, then everything
-- will be much easier.
local COMPASS = "mcl_compass:compass"
if minetest.registered_aliases[COMPASS] then
COMPASS = minetest.registered_aliases[COMPASS]
end
local E1 = { "mcl_core:emerald", 1, 1 } -- one emerald
-- Special trades for v6 only
-- NOTE: These symbols MUST only be added at the end of a tier
local TRADE_V6_RED_SANDSTONE, TRADE_V6_DARK_OAK_SAPLING, TRADE_V6_ACACIA_SAPLING, TRADE_V6_BIRCH_SAPLING
if minetest.get_mapgen_setting("mg_name") == "v6" then
TRADE_V6_RED_SANDSTONE = { E1, { "mcl_core:redsandstone", 12, 16 } }
TRADE_V6_DARK_OAK_SAPLING = { { "mcl_core:emerald", 6, 9 }, { "mcl_core:darksapling", 1, 1 } }
TRADE_V6_ACACIA_SAPLING = { { "mcl_core:emerald", 14, 17 }, { "mcl_core:acaciasapling", 1, 1 } }
TRADE_V6_BIRCH_SAPLING = { { "mcl_core:emerald", 8, 11 }, { "mcl_core:birchsapling", 1, 1 } }
end
local professions = {
farmer = {
name = N("Farmer"),
texture = "mobs_mc_villager_farmer.png",
trades = {
{
{ { "mcl_farming:wheat_item", 18, 22, }, E1 },
{ { "mcl_farming:potato_item", 15, 19, }, E1 },
{ { "mcl_farming:carrot_item", 15, 19, }, E1 },
{ E1, { "mcl_farming:bread", 2, 4 } },
},
{
{ { "mcl_farming:pumpkin_face", 8, 13 }, E1 },
{ E1, { "mcl_farming:pumpkin_pie", 2, 3} },
},
{
{ { "mcl_farming:melon", 7, 12 }, E1 },
{ E1, { "mcl_core:apple", 5, 7 }, },
},
{
{ E1, { "mcl_farming:cookie", 6, 10 } },
{ E1, { "mcl_cake:cake", 1, 1 } },
TRADE_V6_BIRCH_SAPLING,
TRADE_V6_DARK_OAK_SAPLING,
TRADE_V6_ACACIA_SAPLING,
},
}
},
fisherman = {
name = N("Fisherman"),
texture = "mobs_mc_villager_farmer.png",
trades = {
{
{ { "mcl_fishing:fish_raw", 6, 6, "mcl_core:emerald", 1, 1 }, { "mcl_fishing:fish_cooked", 6, 6 } },
{ { "mcl_mobitems:string", 15, 20 }, E1 },
{ { "mcl_core:emerald", 3, 11 }, { "mcl_fishing:fishing_rod_enchanted", 1, 1} },
},
},
},
fletcher = {
name = N("Fletcher"),
texture = "mobs_mc_villager_farmer.png",
trades = {
{
{ { "mcl_mobitems:string", 15, 20 }, E1 },
{ E1, { "mcl_bows:arrow", 8, 12 } },
},
{
{ { "mcl_core:gravel", 10, 10, "mcl_core:emerald", 1, 1 }, { "mcl_core:flint", 6, 10 } },
{ { "mcl_core:emerald", 2, 3 }, { "mcl_bows:bow", 1, 1 } },
},
}
},
shepherd ={
name = N("Shepherd"),
texture = "mobs_mc_villager_farmer.png",
trades = {
{
{ { "mcl_wool:white", 16, 22 }, E1 },
{ { "mcl_core:emerald", 3, 4 }, { "mcl_tools:shears", 1, 1 } },
},
{
{ { "mcl_core:emerald", 1, 2 }, { "mcl_wool:white", 1, 1 } },
{ { "mcl_core:emerald", 1, 2 }, { "mcl_wool:grey", 1, 1 } },
{ { "mcl_core:emerald", 1, 2 }, { "mcl_wool:silver", 1, 1 } },
{ { "mcl_core:emerald", 1, 2 }, { "mcl_wool:black", 1, 1 } },
{ { "mcl_core:emerald", 1, 2 }, { "mcl_wool:yellow", 1, 1 } },
{ { "mcl_core:emerald", 1, 2 }, { "mcl_wool:orange", 1, 1 } },
{ { "mcl_core:emerald", 1, 2 }, { "mcl_wool:red", 1, 1 } },
{ { "mcl_core:emerald", 1, 2 }, { "mcl_wool:magenta", 1, 1 } },
{ { "mcl_core:emerald", 1, 2 }, { "mcl_wool:purple", 1, 1 } },
{ { "mcl_core:emerald", 1, 2 }, { "mcl_wool:blue", 1, 1 } },
{ { "mcl_core:emerald", 1, 2 }, { "mcl_wool:cyan", 1, 1 } },
{ { "mcl_core:emerald", 1, 2 }, { "mcl_wool:lime", 1, 1 } },
{ { "mcl_core:emerald", 1, 2 }, { "mcl_wool:green", 1, 1 } },
{ { "mcl_core:emerald", 1, 2 }, { "mcl_wool:pink", 1, 1 } },
{ { "mcl_core:emerald", 1, 2 }, { "mcl_wool:light_blue", 1, 1 } },
{ { "mcl_core:emerald", 1, 2 }, { "mcl_wool:brown", 1, 1 } },
},
},
},
librarian = {
name = N("Librarian"),
texture = "mobs_mc_villager_librarian.png",
trades = {
{
{ { "mcl_core:paper", 24, 36 }, E1 },
{ { "mcl_books:book", 8, 10 }, E1 },
{ { "mcl_core:emerald", 10, 12 }, { "mcl_compass:compass", 1 ,1 }},
{ { "mcl_core:emerald", 3, 4 }, { "mcl_books:bookshelf", 1 ,1 }},
{ { "mcl_core:emerald", 5, 64 }, { "mcl_enchanting:book_enchanted", 1 ,1 }},
},
{
{ { "mcl_books:written_book", 2, 2 }, E1 },
{ { "mcl_core:emerald", 10, 12 }, { "mcl_clock:clock", 1, 1 } },
{ E1, { "mcl_core:glass", 3, 5 } },
{ { "mcl_core:emerald", 5, 64 }, { "mcl_enchanting:book_enchanted", 1 ,1 }},
},
{
{ E1, { "mcl_core:glass", 3, 5 } },
{ { "mcl_core:emerald", 5, 64 }, { "mcl_enchanting:book_enchanted", 1 ,1 }},
},
{
{ { "mcl_core:emerald", 5, 64 }, { "mcl_enchanting:book_enchanted", 1 ,1 }},
},
{
{ { "mcl_core:emerald", 20, 22 }, { "mcl_mobs:nametag", 1, 1 } },
}
},
},
cartographer = {
name = N("Cartographer"),
texture = "mobs_mc_villager_librarian.png",
trades = {
{
{ { "mcl_core:paper", 24, 36 }, E1 },
},
{
-- subject to special checks
{ { "mcl_compass:compass", 1, 1 }, E1 },
},
{
-- TODO: replace with empty map
{ { "mcl_core:emerald", 7, 11}, { "mcl_maps:filled_map", 1, 1 } },
},
-- TODO: special maps
},
},
armorer = {
name = N("Armorer"),
texture = "mobs_mc_villager_smith.png",
trades = {
{
{ { "mcl_core:coal_lump", 16, 24 }, E1 },
{ { "mcl_core:emerald", 4, 6 }, { "mcl_armor:helmet_iron", 1, 1 } },
},
{
{ { "mcl_core:iron_ingot", 7, 9 }, E1 },
{ { "mcl_core:emerald", 10, 14 }, { "mcl_armor:chestplate_iron", 1, 1 } },
},
{
{ { "mcl_core:diamond", 3, 4 }, E1 },
{ { "mcl_core:emerald", 16, 19 }, { "mcl_armor:chestplate_diamond_enchanted", 1, 1 } },
},
{
{ { "mcl_core:emerald", 5, 7 }, { "mcl_armor:boots_chain", 1, 1 } },
{ { "mcl_core:emerald", 9, 11 }, { "mcl_armor:leggings_chain", 1, 1 } },
{ { "mcl_core:emerald", 5, 7 }, { "mcl_armor:helmet_chain", 1, 1 } },
{ { "mcl_core:emerald", 11, 15 }, { "mcl_armor:chestplate_chain", 1, 1 } },
},
},
},
leatherworker = {
name = N("Leatherworker"),
texture = "mobs_mc_villager_butcher.png",
trades = {
{
{ { "mcl_mobitems:leather", 9, 12 }, E1 },
{ { "mcl_core:emerald", 2, 4 }, { "mcl_armor:leggings_leather", 2, 4 } },
},
{
{ { "mcl_core:emerald", 7, 12 }, { "mcl_armor:chestplate_leather_enchanted", 1, 1 } },
},
{
{ { "mcl_core:emerald", 8, 10 }, { "mcl_mobitems:saddle", 1, 1 } },
},
},
},
butcher = {
name = N("Butcher"),
texture = "mobs_mc_villager_butcher.png",
trades = {
{
{ { "mcl_mobitems:beef", 14, 18 }, E1 },
{ { "mcl_mobitems:chicken", 14, 18 }, E1 },
},
{
{ { "mcl_core:coal_lump", 16, 24 }, E1 },
{ E1, { "mcl_mobitems:cooked_beef", 5, 7 } },
{ E1, { "mcl_mobitems:cooked_chicken", 6, 8 } },
},
},
},
weapon_smith = {
name = N("Weapon Smith"),
texture = "mobs_mc_villager_smith.png",
trades = {
{
{ { "mcl_core:coal_lump", 16, 24 }, E1 },
{ { "mcl_core:emerald", 6, 8 }, { "mcl_tools:axe_iron", 1, 1 } },
},
{
{ { "mcl_core:iron_ingot", 7, 9 }, E1 },
{ { "mcl_core:emerald", 9, 10 }, { "mcl_tools:sword_iron_enchanted", 1, 1 } },
},
{
{ { "mcl_core:diamond", 3, 4 }, E1 },
{ { "mcl_core:emerald", 12, 15 }, { "mcl_tools:sword_diamond_enchanted", 1, 1 } },
{ { "mcl_core:emerald", 9, 12 }, { "mcl_tools:axe_diamond_enchanted", 1, 1 } },
},
},
},
tool_smith = {
name = N("Tool Smith"),
texture = "mobs_mc_villager_smith.png",
trades = {
{
{ { "mcl_core:coal_lump", 16, 24 }, E1 },
{ { "mcl_core:emerald", 5, 7 }, { "mcl_tools:shovel_iron_enchanted", 1, 1 } },
},
{
{ { "mcl_core:iron_ingot", 7, 9 }, E1 },
{ { "mcl_core:emerald", 9, 11 }, { "mcl_tools:pick_iron_enchanted", 1, 1 } },
},
{
{ { "mcl_core:diamond", 3, 4 }, E1 },
{ { "mcl_core:emerald", 12, 15 }, { "mcl_tools:pick_diamond_enchanted", 1, 1 } },
},
},
},
cleric = {
name = N("Cleric"),
texture = "mobs_mc_villager_priest.png",
trades = {
{
{ { "mcl_mobitems:rotten_flesh", 36, 40 }, E1 },
{ { "mcl_core:gold_ingot", 8, 10 }, E1 },
},
{
{ E1, { "mesecons:redstone", 1, 4 } },
{ E1, { "mcl_dye:blue", 1, 2 } },
},
{
{ E1, { "mcl_nether:glowstone", 1, 3 } },
{ { "mcl_core:emerald", 4, 7 }, { "mcl_throwing:ender_pearl", 1, 1 } },
TRADE_V6_RED_SANDSTONE,
},
{
{ { "mcl_nether:nether_wart_item", 22, 22 }, E1 },
{ { "mcl_core:emerald", 3, 3 }, { "mcl_experience:bottle", 1, 1 } },
},
},
},
nitwit = {
name = N("Nitwit"),
texture = "mobs_mc_villager.png",
-- No trades for nitwit
trades = nil,
}
}
local profession_names = {}
for id, _ in pairs(professions) do
table.insert(profession_names, id)
end
local stand_still = function(self)
self.walk_chance = 0
self.jump = false
end
local update_max_tradenum = function(self)
if not self._trades then
return
end
local trades = minetest.deserialize(self._trades)
for t=1, #trades do
local trade = trades[t]
if trade.tier > self._max_trade_tier then
self._max_tradenum = t - 1
return
end
end
self._max_tradenum = #trades
end
local init_trader_vars = function(self)
if not self._profession then
-- Select random profession from all professions with matching clothing
local texture = self.base_texture[1]
local matches = {}
for prof_id, prof in pairs(professions) do
if texture == prof.texture then
table.insert(matches, prof_id)
end
end
local p = math.random(1, #matches)
self._profession = matches[p]
end
if not self._max_trade_tier then
self._max_trade_tier = 1
end
if not self._locked_trades then
self._locked_trades = 0
end
if not self._trading_players then
self._trading_players = {}
end
end
local init_trades = function(self, inv)
local profession = professions[self._profession]
local trade_tiers = profession.trades
if trade_tiers == nil then
-- Empty trades
self._trades = false
return
end
local max_tier = #trade_tiers
local trades = {}
for tiernum=1, max_tier do
local tier = trade_tiers[tiernum]
for tradenum=1, #tier do
local trade = tier[tradenum]
local wanted1_item = trade[1][1]
local wanted1_count = math.random(trade[1][2], trade[1][3])
local offered_item = trade[2][1]
local offered_count = math.random(trade[2][2], trade[2][3])
local offered_stack = ItemStack({name = offered_item, count = offered_count})
if mcl_enchanting.is_enchanted(offered_item) then
if mcl_enchanting.is_book(offered_item) then
offered_stack = mcl_enchanting.get_uniform_randomly_enchanted_book({"soul_speed"})
else
mcl_enchanting.enchant_randomly(offered_stack, math.random(5, 19), false, false, true)
mcl_enchanting.unload_enchantments(offered_stack)
end
end
local wanted = { wanted1_item .. " " ..wanted1_count }
if trade[1][4] then
local wanted2_item = trade[1][4]
local wanted2_count = math.random(trade[1][5], trade[1][6])
table.insert(wanted, wanted2_item .. " " ..wanted2_count)
end
table.insert(trades, {
wanted = wanted,
offered = offered_stack:to_table(),
tier = tiernum, -- tier of this trade
traded_once = false, -- true if trade was traded at least once
trade_counter = 0, -- how often the this trade was mate after the last time it got unlocked
locked = false, -- if this trade is locked. Locked trades can't be used
})
end
end
self._trades = minetest.serialize(trades)
minetest.deserialize(self._trades)
end
local set_trade = function(trader, player, inv, concrete_tradenum)
local trades = minetest.deserialize(trader._trades)
if not trades then
init_trades(trader)
trades = minetest.deserialize(trader._trades)
if not trades then
minetest.log("error", "[mobs_mc] Failed to select villager trade!")
return
end
end
local name = player:get_player_name()
-- Stop tradenum from advancing into locked tiers or out-of-range areas
if concrete_tradenum > trader._max_tradenum then
concrete_tradenum = trader._max_tradenum
elseif concrete_tradenum < 1 then
concrete_tradenum = 1
end
player_tradenum[name] = concrete_tradenum
local trade = trades[concrete_tradenum]
inv:set_stack("wanted", 1, ItemStack(trade.wanted[1]))
local offered = ItemStack(trade.offered)
mcl_enchanting.load_enchantments(offered)
inv:set_stack("offered", 1, offered)
if trade.wanted[2] then
local wanted2 = ItemStack(trade.wanted[2])
inv:set_stack("wanted", 2, wanted2)
else
inv:set_stack("wanted", 2, "")
end
end
local function show_trade_formspec(playername, trader, tradenum)
if not trader._trades then
return
end
if not tradenum then
tradenum = 1
end
local trades = minetest.deserialize(trader._trades)
local trade = trades[tradenum]
local profession = professions[trader._profession].name
local disabled_img = ""
if trade.locked then
disabled_img = "image[4.3,2.52;1,1;mobs_mc_trading_formspec_disabled.png]"..
"image[4.3,1.1;1,1;mobs_mc_trading_formspec_disabled.png]"
end
local tradeinv_name = "mobs_mc:trade_"..playername
local tradeinv = F("detached:"..tradeinv_name)
local b_prev, b_next = "", ""
if #trades > 1 then
if tradenum > 1 then
b_prev = "button[1,1;0.5,1;prev_trade;<]"
end
if tradenum < trader._max_tradenum then
b_next = "button[7.26,1;0.5,1;next_trade;>]"
end
end
local inv = minetest.get_inventory({type="detached", name="mobs_mc:trade_"..playername})
if not inv then
return
end
local wanted1 = inv:get_stack("wanted", 1)
local wanted2 = inv:get_stack("wanted", 2)
local offered = inv:get_stack("offered", 1)
local w2_formspec = ""
if not wanted2:is_empty() then
w2_formspec = "item_image[3,1;1,1;"..wanted2:to_string().."]"
.."tooltip[3,1;0.8,0.8;"..F(wanted2:get_description()).."]"
end
local formspec =
"size[9,8.75]"
.."background[-0.19,-0.25;9.41,9.49;mobs_mc_trading_formspec_bg.png]"
..disabled_img
.."label[4,0;"..F(minetest.colorize("#313131", S(profession))).."]"
.."list[current_player;main;0,4.5;9,3;9]"
.."list[current_player;main;0,7.74;9,1;]"
..b_prev..b_next
.."["..tradeinv..";wanted;2,1;2,1;]"
.."item_image[2,1;1,1;"..wanted1:to_string().."]"
.."tooltip[2,1;0.8,0.8;"..F(wanted1:get_description()).."]"
..w2_formspec
.."item_image[5.76,1;1,1;"..offered:get_name().." "..offered:get_count().."]"
.."tooltip[5.76,1;0.8,0.8;"..F(offered:get_description()).."]"
.."list["..tradeinv..";input;2,2.5;2,1;]"
.."list["..tradeinv..";output;5.76,2.55;1,1;]"
.."listring["..tradeinv..";output]"
.."listring[current_player;main]"
.."listring["..tradeinv..";input]"
.."listring[current_player;main]"
minetest.sound_play("mobs_mc_villager_trade", {to_player = playername}, true)
minetest.show_formspec(playername, tradeinv_name, formspec)
end
local update_offer = function(inv, player, sound)
local name = player:get_player_name()
local trader = player_trading_with[name]
local tradenum = player_tradenum[name]
if not trader or not tradenum then
return false
end
local trades = minetest.deserialize(trader._trades)
if not trades then
return false
end
local trade = trades[tradenum]
if not trade then
return false
end
local wanted1, wanted2 = inv:get_stack("wanted", 1), inv:get_stack("wanted", 2)
local input1, input2 = inv:get_stack("input", 1), inv:get_stack("input", 2)
-- BEGIN OF SPECIAL HANDLING OF COMPASS
-- These 2 functions are a complicated check to check if the input contains a
-- special item which we cannot check directly against their name, like
-- compass.
-- TODO: Remove these check functions when compass and clock are implemented
-- as single items.
local check_special = function(special_item, group, wanted1, wanted2, input1, input2)
if minetest.registered_aliases[special_item] then
special_item = minetest.registered_aliases[special_item]
end
if wanted1:get_name() == special_item then
local check_input = function(input, wanted, group)
return minetest.get_item_group(input:get_name(), group) ~= 0 and input:get_count() >= wanted:get_count()
end
if check_input(input1, wanted1, group) then
return true
elseif check_input(input2, wanted1, group) then
return true
else
return false
end
end
return false
end
-- Apply above function to all items which we consider special.
-- This function succeeds if ANY item check succeeds.
local check_specials = function(wanted1, wanted2, input1, input2)
return check_special(COMPASS, "compass", wanted1, wanted2, input1, input2)
end
-- END OF SPECIAL HANDLING OF COMPASS
if (
((inv:contains_item("input", wanted1) and
(wanted2:is_empty() or inv:contains_item("input", wanted2))) or
-- BEGIN OF SPECIAL HANDLING OF COMPASS
check_specials(wanted1, wanted2, input1, input2)) and
-- END OF SPECIAL HANDLING OF COMPASS
(trade.locked == false)) then
inv:set_stack("output", 1, inv:get_stack("offered", 1))
if sound then
minetest.sound_play("mobs_mc_villager_accept", {to_player = name}, true)
end
return true
else
inv:set_stack("output", 1, ItemStack(""))
if sound then
minetest.sound_play("mobs_mc_villager_deny", {to_player = name}, true)
end
return false
end
end
-- Returns a single itemstack in the given inventory to the player's main inventory, or drop it when there's no space left
local function return_item(itemstack, dropper, pos, inv_p)
if dropper:is_player() then
-- Return to main inventory
if inv_p:room_for_item("main", itemstack) then
inv_p:add_item("main", itemstack)
else
-- Drop item on the ground
local v = dropper:get_look_dir()
local p = {x=pos.x, y=pos.y+1.2, z=pos.z}
p.x = p.x+(math.random(1,3)*0.2)
p.z = p.z+(math.random(1,3)*0.2)
local obj = minetest.add_item(p, itemstack)
if obj then
v.x = v.x*4
v.y = v.y*4 + 2
v.z = v.z*4
obj:set_velocity(v)
obj:get_luaentity()._insta_collect = false
end
end
else
-- Fallback for unexpected cases
minetest.add_item(pos, itemstack)
end
return itemstack
end
local return_fields = function(player)
local name = player:get_player_name()
local inv_t = minetest.get_inventory({type="detached", name = "mobs_mc:trade_"..name})
local inv_p = player:get_inventory()
if not inv_t or not inv_p then
return
end
for i=1, inv_t:get_size("input") do
local stack = inv_t:get_stack("input", i)
return_item(stack, player, player:get_pos(), inv_p)
stack:clear()
inv_t:set_stack("input", i, stack)
end
inv_t:set_stack("output", 1, "")
end
minetest.register_on_player_receive_fields(function(player, formname, fields)
if string.sub(formname, 1, 14) == "mobs_mc:trade_" then
local name = player:get_player_name()
if fields.quit then
-- Get input items back
return_fields(player)
-- Reset internal "trading with" state
local trader = player_trading_with[name]
if trader then
trader._trading_players[name] = nil
end
player_trading_with[name] = nil
elseif fields.next_trade or fields.prev_trade then
local trader = player_trading_with[name]
if not trader or not trader.object:get_luaentity() then
return
end
local trades = trader._trades
if not trades then
return
end
local dir = 1
if fields.prev_trade then
dir = -1
end
local tradenum = player_tradenum[name] + dir
local inv = minetest.get_inventory({type="detached", name="mobs_mc:trade_"..name})
if not inv then
return
end
set_trade(trader, player, inv, tradenum)
update_offer(inv, player, false)
show_trade_formspec(name, trader, player_tradenum[name])
end
end
end)
minetest.register_on_leaveplayer(function(player)
local name = player:get_player_name()
return_fields(player)
player_tradenum[name] = nil
local trader = player_trading_with[name]
if trader then
trader._trading_players[name] = nil
end
player_trading_with[name] = nil
end)
-- Return true if player is trading with villager, and the villager entity exists
local trader_exists = function(playername)
local trader = player_trading_with[playername]
return trader ~= nil and trader.object:get_luaentity() ~= nil
end
local trade_inventory = {
allow_take = function(inv, listname, index, stack, player)
if listname == "input" then
return stack:get_count()
elseif listname == "output" then
if not trader_exists(player:get_player_name()) then
return 0
end
-- Only allow taking full stack
local count = stack:get_count()
if count == inv:get_stack(listname, index):get_count() then
-- Also update output stack again.
-- If input has double the wanted items, the
-- output will stay because there will be still
-- enough items in input after the trade
local wanted1 = inv:get_stack("wanted", 1)
local wanted2 = inv:get_stack("wanted", 2)
local input1 = inv:get_stack("input", 1)
local input2 = inv:get_stack("input", 2)
wanted1:set_count(wanted1:get_count()*2)
wanted2:set_count(wanted2:get_count()*2)
-- BEGIN OF SPECIAL HANDLING FOR COMPASS
local special_checks = function(wanted1, input1, input2)
if wanted1:get_name() == COMPASS then
local compasses = 0
if (minetest.get_item_group(input1:get_name(), "compass") ~= 0) then
compasses = compasses + input1:get_count()
end
if (minetest.get_item_group(input2:get_name(), "compass") ~= 0) then
compasses = compasses + input2:get_count()
end
return compasses >= wanted1:get_count()
end
return false
end
-- END OF SPECIAL HANDLING FOR COMPASS
if (inv:contains_item("input", wanted1) and
(wanted2:is_empty() or inv:contains_item("input", wanted2)))
-- BEGIN OF SPECIAL HANDLING FOR COMPASS
or special_checks(wanted1, input1, input2) then
-- END OF SPECIAL HANDLING FOR COMPASS
return -1
else
-- If less than double the wanted items,
-- remove items from output (final trade,
-- input runs empty)
return count
end
else
return 0
end
else
return 0
end
end,
allow_move = function(inv, from_list, from_index, to_list, to_index, count, player)
if from_list == "input" and to_list == "input" then
return count
elseif from_list == "output" and to_list == "input" then
if not trader_exists(player:get_player_name()) then
return 0
end
local move_stack = inv:get_stack(from_list, from_index)
if inv:get_stack(to_list, to_index):item_fits(move_stack) then
return count
end
end
return 0
end,
allow_put = function(inv, listname, index, stack, player)
if listname == "input" then
if not trader_exists(player:get_player_name()) then
return 0
else
return stack:get_count()
end
else
return 0
end
end,
on_put = function(inv, listname, index, stack, player)
update_offer(inv, player, true)
end,
on_move = function(inv, from_list, from_index, to_list, to_index, count, player)
if from_list == "output" and to_list == "input" then
inv:remove_item("input", inv:get_stack("wanted", 1))
local wanted2 = inv:get_stack("wanted", 2)
if not wanted2:is_empty() then
inv:remove_item("input", inv:get_stack("wanted", 2))
end
minetest.sound_play("mobs_mc_villager_accept", {to_player = player:get_player_name()}, true)
end
update_offer(inv, player, true)
end,
on_take = function(inv, listname, index, stack, player)
local accept
local name = player:get_player_name()
if listname == "output" then
local wanted1 = inv:get_stack("wanted", 1)
inv:remove_item("input", wanted1)
local wanted2 = inv:get_stack("wanted", 2)
if not wanted2:is_empty() then
inv:remove_item("input", inv:get_stack("wanted", 2))
end
-- BEGIN OF SPECIAL HANDLING FOR COMPASS
if wanted1:get_name() == COMPASS then
for n=1, 2 do
local input = inv:get_stack("input", n)
if minetest.get_item_group(input:get_name(), "compass") ~= 0 then
input:set_count(input:get_count() - wanted1:get_count())
inv:set_stack("input", n, input)
break
end
end
end
-- END OF SPECIAL HANDLING FOR COMPASS
local trader = player_trading_with[name]
local tradenum = player_tradenum[name]
local trades
if trader and trader._trades then
trades = minetest.deserialize(trader._trades)
end
if trades then
local trade = trades[tradenum]
local unlock_stuff = false
if not trade.traded_once then
-- Unlock all the things if something was traded
-- for the first time ever
unlock_stuff = true
trade.traded_once = true
elseif trade.trade_counter == 0 and math.random(1,5) == 1 then
-- Otherwise, 20% chance to unlock if used freshly reset trade
unlock_stuff = true
end
local update_formspec = false
if unlock_stuff then
-- First-time trade unlock all trades and unlock next trade tier
if trade.tier + 1 > trader._max_trade_tier then
trader._max_trade_tier = trader._max_trade_tier + 1
update_max_tradenum(trader)
update_formspec = true
end
for t=1, #trades do
trades[t].locked = false
trades[t].trade_counter = 0
end
trader._locked_trades = 0
-- Also heal trader for unlocking stuff
-- TODO: Replace by Regeneration I
trader.health = math.min(trader.hp_max, trader.health + 4)
end
trade.trade_counter = trade.trade_counter + 1
-- Semi-randomly lock trade for repeated trade (not if there's only 1 trade)
if trader._max_tradenum > 1 then
if trade.trade_counter >= 12 then
trade.locked = true
elseif trade.trade_counter >= 2 then
local r = math.random(1, math.random(4, 10))
if r == 1 then
trade.locked = true
end
end
end
if trade.locked then
inv:set_stack("output", 1, "")
update_formspec = true
trader._locked_trades = trader._locked_trades + 1
-- Check if we managed to lock ALL available trades. Rare but possible.
if trader._locked_trades >= trader._max_tradenum then
-- Emergency unlock! Unlock all other trades except the current one
for t=1, #trades do
if t ~= tradenum then
trades[t].locked = false
trades[t].trade_counter = 0
end
end
trader._locked_trades = 1
-- Also heal trader for unlocking stuff
-- TODO: Replace by Regeneration I
trader.health = math.min(trader.hp_max, trader.health + 4)
end
end
trader._trades = minetest.serialize(trades)
if update_formspec then
show_trade_formspec(name, trader, tradenum)
end
else
minetest.log("error", "[mobs_mc] Player took item from trader output but player_trading_with or player_tradenum is nil!")
end
accept = true
elseif listname == "input" then
update_offer(inv, player, false)
end
if accept then
minetest.sound_play("mobs_mc_villager_accept", {to_player = name}, true)
else
minetest.sound_play("mobs_mc_villager_deny", {to_player = name}, true)
end
end,
}
minetest.register_on_joinplayer(function(player)
local name = player:get_player_name()
player_tradenum[name] = 1
player_trading_with[name] = nil
-- Create or get player-specific trading inventory
local inv = minetest.get_inventory({type="detached", name="mobs_mc:trade_"..name})
if not inv then
inv = minetest.create_detached_inventory("mobs_mc:trade_"..name, trade_inventory, name)
end
inv:set_size("input", 2)
inv:set_size("output", 1)
inv:set_size("wanted", 2)
inv:set_size("offered", 1)
end)
--[=======[ MOB REGISTRATION AND SPAWNING ]=======]
mobs:register_mob("mobs_mc:villager", {
description = S("Villager"),
type = "npc",
spawn_class = "passive",
hp_min = 20,
hp_max = 20,
collisionbox = {-0.3, -0.01, -0.3, 0.3, 1.94, 0.3},
visual = "mesh",
mesh = "mobs_mc_villager.b3d",
textures = {
{
"mobs_mc_villager.png",
"mobs_mc_villager.png", --hat
},
{
"mobs_mc_villager_farmer.png",
"mobs_mc_villager_farmer.png", --hat
},
{
"mobs_mc_villager_priest.png",
"mobs_mc_villager_priest.png", --hat
},
{
"mobs_mc_villager_librarian.png",
"mobs_mc_villager_librarian.png", --hat
},
{
"mobs_mc_villager_butcher.png",
"mobs_mc_villager_butcher.png", --hat
},
{
"mobs_mc_villager_smith.png",
"mobs_mc_villager_smith.png", --hat
},
},
visual_size = {x=2.75, y=2.75},
rotate = 270,
skittish = true,
makes_footstep_sound = true,
walk_velocity = 1.2,
run_velocity = 3,
drops = {},
can_despawn = false,
-- TODO: sounds
sounds = {
random = "mobs_mc_villager",
damage = "mobs_mc_villager_hurt",
death = "mobs_mc_villager_hurt",
distance = 10,
},
animation = {
stand_speed = 25,
stand_start = 40,
stand_end = 59,
walk_speed = 25,
walk_start = 0,
walk_end = 40,
run_speed = 25,
run_start = 0,
run_end = 40,
die_speed = 15,
die_start = 210,
die_end = 220,
die_loop = false,
},
view_range = 16,
fear_height = 4,
jump = true,
walk_chance = DEFAULT_WALK_CHANCE,
on_rightclick = function(self, clicker)
-- Initiate trading
local name = clicker:get_player_name()
self._trading_players[name] = true
init_trader_vars(self)
if self._trades == nil then
init_trades(self)
end
update_max_tradenum(self)
if self._trades == false then
-- Villager has no trades, rightclick is a no-op
return
end
player_trading_with[name] = self
local inv = minetest.get_inventory({type="detached", name="mobs_mc:trade_"..name})
if not inv then
return
end
set_trade(self, clicker, inv, 1)
show_trade_formspec(name, self)
-- Behaviour stuff:
-- Make villager look at player and stand still
local selfpos = self.object:get_pos()
local clickerpos = clicker:get_pos()
local dir = vector.direction(selfpos, clickerpos)
self.object:set_yaw(minetest.dir_to_yaw(dir))
stand_still(self)
end,
_player_scan_timer = 0,
_trading_players = {}, -- list of playernames currently trading with villager (open formspec)
do_custom = function(self, dtime)
-- Stand still if player is nearby.
if not self._player_scan_timer then
self._player_scan_timer = 0
end
self._player_scan_timer = self._player_scan_timer + dtime
-- Check infrequently to keep CPU load low
if self._player_scan_timer > PLAYER_SCAN_INTERVAL then
self._player_scan_timer = 0
local selfpos = self.object:get_pos()
local objects = minetest.get_objects_inside_radius(selfpos, PLAYER_SCAN_RADIUS)
local has_player = false
for o, obj in pairs(objects) do
if obj:is_player() then
has_player = true
break
end
end
if has_player then
minetest.log("verbose", "[mobs_mc] Player near villager found!")
stand_still(self)
else
minetest.log("verbose", "[mobs_mc] No player near villager found!")
self.walk_chance = DEFAULT_WALK_CHANCE
self.jump = true
end
end
end,
on_spawn = function(self)
init_trader_vars(self)
end,
on_die = function(self, pos)
-- Close open trade formspecs and give input back to players
local trading_players = self._trading_players
for name, _ in pairs(trading_players) do
minetest.close_formspec(name, "mobs_mc:trade_"..name)
local player = minetest.get_player_by_name(name)
if player then
return_fields(player)
end
end
end,
})
mobs:spawn_specific(
"mobs_mc:villager",
"overworld",
"ground",
{
"FlowerForest",
"Swampland",
"Taiga",
"ExtremeHills",
"BirchForest",
"MegaSpruceTaiga",
"MegaTaiga",
"ExtremeHills+",
"Forest",
"Plains",
"ColdTaiga",
"SunflowerPlains",
"RoofedForest",
"MesaPlateauFM_grasstop",
"ExtremeHillsM",
"BirchForestM",
},
0,
minetest.LIGHT_MAX+1,
30,
20,
4,
mobs_mc.spawn_height.water+1,
mobs_mc.spawn_height.overworld_max)
-- spawn eggs
mobs:register_egg("mobs_mc:villager", S("Villager"), "mobs_mc_spawn_icon_villager.png", 0)