mirror of
https://git.minetest.land/VoxeLibre/VoxeLibre.git
synced 2024-11-19 09:31:07 +01:00
a6ac6f5c76
commitcd47233798
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com> Date: Sun Apr 25 22:02:20 2021 -0400 Fix rabbit rotation commit0f4628db09
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 commitddb33acf0d
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com> Date: Sun Apr 25 20:46:45 2021 -0400 Add in unused head code elements commite52aab45c0
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com> Date: Sun Apr 25 20:23:46 2021 -0400 Implement no-op head operations for enderman commitac85230938
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 commitf57c4709ac
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 commitb6c9a1c423
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com> Date: Sun Apr 25 19:51:11 2021 -0400 Fix creeper head commita8152760b9
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 commit6a38198e97
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 commitd28e81bc9f
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com> Date: Sun Apr 25 17:54:14 2021 -0400 Add in mobs look pitch commit5a2773ea1a
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com> Date: Sun Apr 25 17:48:41 2021 -0400 Add in basics of head code yaw commit555935ff3d
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com> Date: Sun Apr 25 16:43:23 2021 -0400 Implement basic fall damage commit7e3b69348e
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 commitc898e1e4db
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com> Date: Sun Apr 25 15:59:00 2021 -0400 Update sheep.lua commit9b5c9dc8ae
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 commit5e6653ff65
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com> Date: Sun Apr 25 04:19:02 2021 -0400 Implement mob cramming commit1616cb7538
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com> Date: Sun Apr 25 04:09:35 2021 -0400 Fix nametags commita3ff108cd4
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 commitdf364eed28
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 commitbac191293b
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 commitb7c7c2627b
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com> Date: Sun Apr 25 01:44:46 2021 -0400 Fix parrots not drowning commit38c22f277d
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com> Date: Sun Apr 25 01:24:19 2021 -0400 Add pop sound when baby mob is born commitf83ccdb2ed
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com> Date: Sun Apr 25 01:22:43 2021 -0400 Add in breeding and feeding baby mob sounds commit7733e05a12
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 commit0a380265c8
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 commit8d3eff0c16
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com> Date: Sun Apr 25 00:06:12 2021 -0400 Enable mob drowning commit56086bf02b
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com> Date: Sat Apr 24 23:33:46 2021 -0400 Fix villager commit079811984c
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 commit7e8e63b0e3
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 commit49b01dca4f
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com> Date: Sat Apr 24 22:28:26 2021 -0400 Make mobs drop xp on death commit3d5cceab76
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com> Date: Sat Apr 24 22:21:58 2021 -0400 Fix ghast strange behavior in the nether commita73e5b57c0
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 commitb401b50c04
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 commit807fb6966d
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 commit11b5684a90
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 commit41bfaae370
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 commit8c855f5b09
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com> Date: Sat Apr 24 19:29:37 2021 -0400 Add in llama carpets commite0185a9311
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com> Date: Sat Apr 24 18:43:17 2021 -0400 Fix pig logic issue commitc2cb15a47f
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com> Date: Sat Apr 24 18:36:22 2021 -0400 Fix horse breeding commit39f7d0cf3c
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com> Date: Sat Apr 24 18:18:53 2021 -0400 Update api.txt commit3e9bbca914
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com> Date: Sat Apr 24 18:06:24 2021 -0400 Fix enderman crashing commit81713a342d
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com> Date: Sat Apr 24 00:38:50 2021 -0400 Allow tamed wolves to be shift click bred commita27e6731cd
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com> Date: Sat Apr 24 00:29:30 2021 -0400 Make sheep breedable commitefce97c172
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com> Date: Sat Apr 24 00:27:17 2021 -0400 Make llamas shift click breedable commit53c96cae2d
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com> Date: Sat Apr 24 00:26:45 2021 -0400 Make pigs shift click breedable commitdbe712bc17
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com> Date: Sat Apr 24 00:23:33 2021 -0400 Make llama breedable commit0d4d85bac6
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com> Date: Sat Apr 24 00:19:41 2021 -0400 Fix horse literally blinding you following you commit6f2e2ab4c5
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com> Date: Sat Apr 24 00:17:22 2021 -0400 Make chicken breedable commit3649e5f6f5
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com> Date: Sat Apr 24 00:17:09 2021 -0400 Make horse breedable commit2dab0773df
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com> Date: Sat Apr 24 00:00:21 2021 -0400 Remove unused breedable api call commit0568c14a43
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com> Date: Fri Apr 23 23:59:35 2021 -0400 Fix timer and make mooshroom breedable commit531253008a
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com> Date: Fri Apr 23 23:56:59 2021 -0400 Complete mob breeding, make cows breedable commit79cb6ddc49
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com> Date: Fri Apr 23 22:35:35 2021 -0400 Fix lua locals in environment.lua commit6eb3eef215
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com> Date: Fri Apr 23 22:34:40 2021 -0400 Fix typo in function commitc37a82d4a2
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com> Date: Fri Apr 23 22:03:29 2021 -0400 Add comments commited9d629b99
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com> Date: Fri Apr 23 21:59:42 2021 -0400 Add in mob following for cows commitfcfd6b9d19
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com> Date: Fri Apr 23 21:14:23 2021 -0400 Set up basics for breeding mechanics commit5ee6cf6c9b
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com> Date: Fri Apr 23 19:49:35 2021 -0400 Implement mob despawner/mob limiter commit19c8dd1dd4
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 commit31ded5e40f
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com> Date: Fri Apr 23 18:34:20 2021 -0400 Re-implement neutral mob switch commit13c321e8f2
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com> Date: Fri Apr 23 18:03:01 2021 -0400 Re-enable mob spawning commitea6912c980
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 commit8dafac50a8
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com> Date: Fri Apr 23 17:37:20 2021 -0400 Make mobs run away slightly faster commit3560bda4a5
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com> Date: Fri Apr 23 17:29:23 2021 -0400 Remove unused code and variables from mob punch commit9720986c4d
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com> Date: Fri Apr 23 17:27:08 2021 -0400 Fix punching a mob breaking it's velocity commitdc7592528c
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com> Date: Fri Apr 23 17:23:00 2021 -0400 Add red tint hurt effect commit304cbed447
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com> Date: Fri Apr 23 17:12:02 2021 -0400 Make mobs that should be skittish, skittish commitaf4c42fea7
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 commit8daf197fb8
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com> Date: Fri Apr 23 16:52:07 2021 -0400 Fix iron golem rotation commitc138050e0b
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com> Date: Fri Apr 23 16:45:12 2021 -0400 Make iron golem neutral and protective, fix rotation commit36d5af1d15
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 commit73b4d3c1d2
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 commiteb7ae5e10e
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com> Date: Fri Apr 23 16:28:30 2021 -0400 Fix random crash commitc831da2c02
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 commitd5a38fef58
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com> Date: Fri Apr 23 16:19:37 2021 -0400 Add in new mob punched sounds commit8e7ce5a72a
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com> Date: Fri Apr 23 16:04:01 2021 -0400 Add in a visual for horse taming (hearts) commit189c0ad157
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com> Date: Fri Apr 23 15:53:01 2021 -0400 Half finish horse (riding logic, etc) commitf64f8e31e3
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com> Date: Fri Apr 23 14:50:38 2021 -0400 Fix llama blaze and ghast projectile sprites commit58bee2a2dd
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com> Date: Fri Apr 23 14:43:00 2021 -0400 Fix projectile tails clipping through sprite commit16cc7e37d2
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com> Date: Fri Apr 23 14:34:59 2021 -0400 Randomize projectile cooldown timer commit8eb9ba12ce
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com> Date: Fri Apr 23 14:33:40 2021 -0400 Fix crash when mob collides with nil entity commit5d59583583
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 commitf6fa90096d
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com> Date: Fri Apr 23 13:35:30 2021 -0400 Fix enderman teleport attack commit4fb9e69e41
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 commit99f13f84b5
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com> Date: Fri Apr 23 13:13:23 2021 -0400 Half-fix enderman commitdd76b15c50
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com> Date: Fri Apr 23 13:06:57 2021 -0400 Make ghasts not insta-kill commitb6f19699e9
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com> Date: Fri Apr 23 13:06:17 2021 -0400 Make enderdragon half work commit4efec1ef58
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com> Date: Fri Apr 23 12:55:11 2021 -0400 Add in chicken slow falling commit0895666407
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 commit408296140a
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com> Date: Thu Apr 22 23:30:32 2021 -0400 Fix and overhaul wolves commitaac1e19336
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 commitfa059b5df2
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com> Date: Thu Apr 22 22:59:03 2021 -0400 Fix ghast's eyeheight commit2e3e92e393
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com> Date: Thu Apr 22 22:58:32 2021 -0400 Fix ghast's insane difficulty commit11bcf3aa34
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com> Date: Thu Apr 22 22:51:13 2021 -0400 Add attributes to epCode commit2099be43ea
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 commit5037ec3736
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com> Date: Thu Apr 22 22:40:16 2021 -0400 Fix ghasts horrible collisionbox commit0a8fff6524
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com> Date: Thu Apr 22 22:08:54 2021 -0400 Add in mob criticals when falling commitafdcada1fd
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com> Date: Thu Apr 22 21:46:13 2021 -0400 Fix endermite commit5d876725c5
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com> Date: Thu Apr 22 21:45:00 2021 -0400 Fix bats commitef0d52a2df
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com> Date: Thu Apr 22 21:41:54 2021 -0400 Update backup_code_api.lua commit8142f7e512
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com> Date: Thu Apr 22 21:36:42 2021 -0400 Add in mob death commitebf27866ca
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com> Date: Thu Apr 22 21:12:08 2021 -0400 Fix typo and error in animation.lua commit3fe8d2d3c5
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com> Date: Thu Apr 22 20:30:50 2021 -0400 Add file death_logic.lua commitb73ab976a1
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com> Date: Thu Apr 22 20:25:58 2021 -0400 Implement framework for mob death commit8530e6ee36
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com> Date: Thu Apr 22 20:20:56 2021 -0400 Make mob punching time based commite1812b2cdb
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com> Date: Thu Apr 22 20:12:02 2021 -0400 Reset pause timer to 0 commit991bba0a1d
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com> Date: Thu Apr 22 20:10:01 2021 -0400 Add comments into ai.lua commitf9a7144b65
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com> Date: Thu Apr 22 20:07:30 2021 -0400 Implement ability to hurt mobs commit45790c0be0
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com> Date: Thu Apr 22 19:12:02 2021 -0400 Re-enable mob punching (broken) commit31a791c33b
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com> Date: Thu Apr 22 18:20:58 2021 -0400 Undo debug.txt spam from mob spawning commitd0d128c1d8
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 commitee905642c2
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com> Date: Thu Apr 22 17:56:38 2021 -0400 Add temporary warning debug to spawning algorithm output commit2cef9e7cca
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 commitedb1939649
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com> Date: Thu Apr 22 00:27:35 2021 -0400 Fix mob_counter in mob spawning limiter commit7c1adeab45
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com> Date: Thu Apr 22 00:20:57 2021 -0400 Hyper-optimize mob spawning commitfbe3ccc5c0
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com> Date: Wed Apr 21 23:28:38 2021 -0400 Delete current state of things comment commit5e15af260b
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com> Date: Wed Apr 21 23:25:19 2021 -0400 Fix pig rotation commit6aa6364492
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com> Date: Wed Apr 21 23:25:10 2021 -0400 Fix sheep rotation commit29305f548d
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 commit08c90c34e8
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 commit91099c3be9
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com> Date: Wed Apr 21 13:01:14 2021 -0400 Fix auto-true statement for tilt fly/swim commit71c34823bc
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com> Date: Wed Apr 21 12:56:36 2021 -0400 Make tilt flying/swimming dynamic commit20886f54bb
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com> Date: Wed Apr 21 12:48:23 2021 -0400 Make shooty mobs jump commitebd995fbd2
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com> Date: Wed Apr 21 12:45:02 2021 -0400 Simplify skeleton arrow damage calculation commitc9f71d66f5
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com> Date: Wed Apr 21 12:42:34 2021 -0400 Implement skeletons/strays commit99e808296b
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com> Date: Wed Apr 21 12:17:51 2021 -0400 Add missing skeleton/stray run animation commit74094938bb
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 commit6bd279255c
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com> Date: Wed Apr 21 11:50:22 2021 -0400 Fully implement zombie pigmen commit964ce9ccf7
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com> Date: Wed Apr 21 11:42:01 2021 -0400 Temporarily disable spawn eggs from setting owner commit5062d56a5d
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 commitb0b1ec9436
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 commitf1dc286442
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 commitcc2a0ae52c
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com> Date: Wed Apr 21 10:21:11 2021 -0400 Complete charged creeper commit486959515c
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com> Date: Wed Apr 21 10:20:31 2021 -0400 Make creepers even more dangerous commit576621169b
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com> Date: Tue Apr 20 23:26:18 2021 -0400 Make creepers and zombies even harder commit2c87bd19f3
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com> Date: Tue Apr 20 23:14:53 2021 -0400 Overhaul zombie villager commit1ed3377559
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com> Date: Tue Apr 20 23:11:18 2021 -0400 Add punch mobs knockback to players when hit commit8c9356a18c
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 commita05ebd7cc2
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com> Date: Tue Apr 20 22:44:34 2021 -0400 Add informative text art commit60ac3058ce
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com> Date: Tue Apr 20 22:42:51 2021 -0400 Make zombies more difficult commit751c4c2d99
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com> Date: Tue Apr 20 22:41:13 2021 -0400 Integrate mob punching into collision detection commit6b52b94516
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com> Date: Tue Apr 20 22:30:34 2021 -0400 Start setting up hostile punch attack type commitd371d6fdc9
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com> Date: Tue Apr 20 22:04:54 2021 -0400 Adjust creeper explosion settings commitfabd4d64e6
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com> Date: Tue Apr 20 21:35:19 2021 -0400 Slow down creeper type mobs explosion buildup commitbf367fffd0
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 commit0b763f54b5
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 commitcd6f07537f
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com> Date: Tue Apr 20 20:43:45 2021 -0400 Make creepers even more deadly commit9678b556e1
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 commitcdb840609d
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com> Date: Tue Apr 20 20:19:55 2021 -0400 Add in creeper basic prototype commit008d670ed9
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com> Date: Tue Apr 20 17:10:51 2021 -0400 Remove wandering from ai commit491ef6c8f8
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 commit348df0fcec
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 commitac08c6991c
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com> Date: Tue Apr 20 16:39:05 2021 -0400 Add in detect_players_in_area commit3d776138e9
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com> Date: Tue Apr 20 14:55:22 2021 -0400 Start implementing creeper ai commit85e531bf10
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com> Date: Sun Apr 18 21:24:31 2021 -0400 Remove unneeded mobs:protect from code commit4d589dfb2a
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com> Date: Sun Apr 18 21:22:39 2021 -0400 Remove literally unneeded mobs:capture_mob commit39985aa558
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com> Date: Sun Apr 18 21:22:21 2021 -0400 Up fallback max xp to 3 commit1920ddf915
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 commit719bb2a3c9
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com> Date: Sat Apr 17 18:21:33 2021 -0400 Add in prototype jump-only mobs api commitdb87b8e0a3
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com> Date: Sat Apr 17 17:09:57 2021 -0400 fix chicken rotation commite2987245fd
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com> Date: Sat Apr 17 17:00:34 2021 -0400 Balance out collision forces for mobs commit3cf263d292
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com> Date: Sat Apr 17 16:23:38 2021 -0400 Add in dynamic pitch in flying/swimming mobs commit5ade34115c
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com> Date: Sat Apr 17 13:17:29 2021 -0400 Remove random state initialization in set_up.lua commitd9729fc865
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com> Date: Sat Apr 17 13:13:45 2021 -0400 Fix parrot's rotation commit58d9670e77
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 commita20f272e08
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 commit0794bc5437
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com> Date: Sat Apr 17 13:04:55 2021 -0400 Make flying mobs float in water and lava commit8783912938
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com> Date: Sat Apr 17 12:48:57 2021 -0400 Add in mobs api swimming animation commitf2e909ab8d
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com> Date: Sat Apr 17 12:41:14 2021 -0400 Add in fly logic gate commit07841c8963
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 commit240d6ea211
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 commite8148f81ab
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 commit061602d9d4
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 commit5365dec19a
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com> Date: Sat Apr 17 12:01:27 2021 -0400 Adjust "flying" vector checks for mobs commitdda7839d8c
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com> Date: Fri Apr 16 21:43:02 2021 -0400 Add in prototype swimming commitf1141aed9f
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com> Date: Fri Apr 16 21:08:54 2021 -0400 Make mobs flop when outside of flying node commit84ca7681fc
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 commit52c3db041e
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com> Date: Fri Apr 16 20:32:05 2021 -0400 Add in fly state prep for mobs commit6db4511dd5
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com> Date: Fri Apr 16 20:06:55 2021 -0400 Add notes commit15ea9c1c71
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com> Date: Fri Apr 16 19:59:20 2021 -0400 Implement self walking velocity for walking state commit9d6d042ee3
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com> Date: Fri Apr 16 19:37:01 2021 -0400 Fix formatting in ai.lua commitce7f4918b0
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com> Date: Fri Apr 16 19:35:19 2021 -0400 Re-organize comments commit05d06a4c8f
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com> Date: Fri Apr 16 18:36:23 2021 -0400 Add comment to state_execution commitc761db86c7
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com> Date: Fri Apr 16 18:29:42 2021 -0400 re-arrange mob logic for random wandering commited456ecb47
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 commit8ca5f221ec
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com> Date: Fri Apr 16 18:13:54 2021 -0400 clean up ai.lua commitcadd53c103
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 commit57b293de2b
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com> Date: Fri Apr 16 16:37:15 2021 -0400 Make mobs gravity equal to player's commitfb9a55e562
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 commita6a54b3414
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com> Date: Fri Apr 16 15:49:03 2021 -0400 Make mobs not jump if against a wall commit6c5393427f
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 commit2486ffef11
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com> Date: Fri Apr 16 15:30:44 2021 -0400 Make wandering mobs avoid cliffs commitadc683c6a7
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com> Date: Fri Apr 16 14:19:22 2021 -0400 Clear mob animation on activate commitd0695e7929
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com> Date: Fri Apr 16 13:58:08 2021 -0400 Fix mob animation "memory leak" commit024cf46307
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com> Date: Fri Apr 16 11:52:29 2021 -0400 Adjust spacing in animation.lua commitf38492bcb0
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com> Date: Fri Apr 16 11:50:29 2021 -0400 Re-implement animation check gate for mobs commita934a59f3b
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com> Date: Fri Apr 16 11:50:13 2021 -0400 Implement mob random walk directions commit94ca7e8b89
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 commit626c30de6d
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com> Date: Fri Apr 16 11:30:55 2021 -0400 Create todo.txt commitc2bac87a6d
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com> Date: Thu Apr 15 21:46:33 2021 -0400 Update set_up.lua commit375d683d08
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com> Date: Thu Apr 15 16:18:42 2021 -0400 Fix forgotten localization in collision.lua commit246bdf9707
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com> Date: Thu Apr 15 15:55:10 2021 -0400 Implement basic mob walking animation test commitd07d0ae31c
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com> Date: Thu Apr 15 15:34:07 2021 -0400 Make mobs jump properly commit6cb6d714c9
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com> Date: Thu Apr 15 15:04:55 2021 -0400 Reorganize all mob sections into multiple files commit5155d12d05
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 commitbbcfb3fdb1
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com> Date: Thu Apr 15 11:33:09 2021 -0400 Randomize walking or standing on spawn in commit9e4bf6e130
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 commite53a193c4f
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com> Date: Thu Apr 15 11:25:55 2021 -0400 Fix get_velocity (mobs internal) commit14207dd96a
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com> Date: Thu Apr 15 11:23:52 2021 -0400 Smooth out mob movement set_velocity more commita0ed1a0b20
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com> Date: Thu Apr 15 10:05:24 2021 -0400 Add automatic rotation lock commitba46e7fa42
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com> Date: Thu Apr 15 09:28:58 2021 -0400 Remove old debug of colliding with objects commit61124905f3
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com> Date: Thu Apr 15 09:28:22 2021 -0400 Add in mob auto rotation (implementation 1) commit8b200c7352
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com> Date: Wed Apr 14 19:38:14 2021 -0400 Add in basic movement rotation testing commit67259891a8
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com> Date: Wed Apr 14 18:01:29 2021 -0400 Remove unneeded comments commitd063db751c
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 commitd4db27f0e1
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com> Date: Wed Apr 14 17:25:39 2021 -0400 Update backup_code_api.lua commit755533beeb
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com> Date: Wed Apr 14 11:50:22 2021 -0400 Disable literally everything in mobs api commit3f6312a631
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com> Date: Tue Apr 13 20:24:46 2021 -0400 Make mobs magnetic collision more jello-y commitaa4d34c10e
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com> Date: Tue Apr 13 20:00:38 2021 -0400 Improve mob to mob collision commit1210bc463a
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com> Date: Tue Apr 13 19:44:24 2021 -0400 prevent mob collision detection shootout commited60266713
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com> Date: Tue Apr 13 19:17:48 2021 -0400 Gut even more elements of the api commit220d30df5f
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com> Date: Tue Apr 13 19:13:29 2021 -0400 Completely gut do_states commit9758bbf2e7
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com> Date: Tue Apr 13 08:21:04 2021 -0400 Finish gutting mob api commitf29ad4b8b7
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com> Date: Tue Apr 13 08:20:11 2021 -0400 Reorganize more settings to the top of file commit54f5bee8a3
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com> Date: Tue Apr 13 08:08:29 2021 -0400 reorganize load settings commit02515f0778
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 commit3fc0184182
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 commit6fff719322
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com> Date: Mon Apr 12 08:47:07 2021 -0400 Localize minetest library commitadaf74fc5c
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com> Date: Mon Apr 12 08:13:11 2021 -0400 Remove spacing and delete old collision comments commita564009e4a
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com> Date: Mon Apr 12 08:11:55 2021 -0400 Change HORNY_TIMER to BREED_TIMER commit00759da39d
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com> Date: Sun Apr 11 18:29:32 2021 -0400 Unlimit mob ai commit9aafc28a20
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com> Date: Sun Apr 11 14:47:56 2021 -0400 Fix mobs nil check during mob_step commit67c40885ef
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 commit2456e3cd1e
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com> Date: Sun Apr 11 12:52:31 2021 -0400 Adjust math localizations in api.lua commit725dc731dd
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 commite15fd2f4b6
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com> Date: Fri Apr 9 01:38:34 2021 -0400 Add lua locals into mcl_dungeons for performance commitc937b2a973
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com> Date: Thu Apr 8 14:19:42 2021 -0400 test commit8c10fe4057
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com> Date: Thu Apr 8 12:48:02 2021 -0400 Adjust spawning to be closer and more frequent commitbd7866d798
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com> Date: Thu Apr 8 12:07:20 2021 -0400 Finish mob limiter commit9369c9cab8
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com> Date: Thu Apr 8 10:01:15 2021 -0400 Fix spawn timer reset debug commit28823298e1
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com> Date: Thu Apr 8 10:00:04 2021 -0400 Fix forgotten biome check commit9d48549ec5
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com> Date: Thu Apr 8 09:52:50 2021 -0400 Complete prototype of biome generated mobs commit518252679f
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com> Date: Thu Apr 8 08:42:57 2021 -0400 Fix a lot of things commitbb078b0c4c
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com> Date: Thu Apr 8 08:33:50 2021 -0400 Fix silverfish typo commitadab48ff0c
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 commit47c59edb51
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com> Date: Thu Apr 8 08:13:46 2021 -0400 Fix typo commit5ca30fa8ee
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com> Date: Thu Apr 8 08:12:43 2021 -0400 Combine air and ground type spawning into ground commitaacb8fc7b9
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com> Date: Thu Apr 8 08:09:43 2021 -0400 Add in extra_mobs information commitf900b24b53
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com> Date: Thu Apr 8 07:39:18 2021 -0400 Add in all biome information to mobs commit0ad833c046
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com> Date: Thu Apr 8 06:57:24 2021 -0400 Add bats, chicken, and blaze spawn info commitf4a6bdc6b8
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com> Date: Thu Apr 8 06:48:25 2021 -0400 Make reference list copy-pastable commitbf4bf9a0cc
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com> Date: Thu Apr 8 06:10:07 2021 -0400 Ignore default or void dimensions commit8e1e02d1fb
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com> Date: Thu Apr 8 06:04:36 2021 -0400 Add biome list commitda045c207d
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com> Date: Thu Apr 8 02:07:15 2021 -0400 Refactor spawning into it's own file commit6ec66ef6f6
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com> Date: Wed Apr 7 23:16:03 2021 -0400 Fix mobs colliding with other mobs/players commit6bd249547a
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com> Date: Wed Apr 7 23:07:04 2021 -0400 Fix mobs colliding with objects commitc4d030d111
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com> Date: Thu Apr 1 23:48:00 2021 -0400 Fix item drop on laggy servers
1113 lines
32 KiB
Lua
1113 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)
|