init.lua 7.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235
  1. -- support for i18n
  2. local S = minetest.get_translator(minetest.get_current_modname())
  3. local disable_sounds = minetest.settings:get_bool("shields_disable_sounds")
  4. local function play_sound_effect(player, name)
  5. if not disable_sounds and player then
  6. local pos = player:get_pos()
  7. if pos then
  8. minetest.sound_play(name, {
  9. pos = pos,
  10. max_hear_distance = 10,
  11. gain = 0.5,
  12. })
  13. end
  14. end
  15. end
  16. if minetest.global_exists("armor") and armor.elements then
  17. table.insert(armor.elements, "shield")
  18. end
  19. -- Regisiter Shields
  20. armor:register_armor("shields:shield_admin", {
  21. description = S("Admin Shield"),
  22. inventory_image = "shields_inv_shield_admin.png",
  23. groups = {armor_shield=1000, armor_heal=100, armor_use=0, not_in_creative_inventory=1},
  24. })
  25. minetest.register_alias("adminshield", "shields:shield_admin")
  26. if armor.materials.wood then
  27. armor:register_armor("shields:shield_wood", {
  28. description = S("Wooden Shield"),
  29. inventory_image = "shields_inv_shield_wood.png",
  30. groups = {armor_shield=1, armor_heal=0, armor_use=2000, flammable=1},
  31. armor_groups = {fleshy=5},
  32. damage_groups = {cracky=3, snappy=2, choppy=3, crumbly=2, level=1},
  33. reciprocate_damage = true,
  34. on_damage = function(player, index, stack)
  35. play_sound_effect(player, "default_wood_footstep")
  36. end,
  37. on_destroy = function(player, index, stack)
  38. play_sound_effect(player, "default_wood_footstep")
  39. end,
  40. })
  41. armor:register_armor("shields:shield_enhanced_wood", {
  42. description = S("Enhanced Wood Shield"),
  43. inventory_image = "shields_inv_shield_enhanced_wood.png",
  44. groups = {armor_shield=1, armor_heal=0, armor_use=2000},
  45. armor_groups = {fleshy=8},
  46. damage_groups = {cracky=3, snappy=2, choppy=3, crumbly=2, level=2},
  47. reciprocate_damage = true,
  48. on_damage = function(player, index, stack)
  49. play_sound_effect(player, "default_dig_metal")
  50. end,
  51. on_destroy = function(player, index, stack)
  52. play_sound_effect(player, "default_dug_metal")
  53. end,
  54. })
  55. minetest.register_craft({
  56. output = "shields:shield_enhanced_wood",
  57. recipe = {
  58. {"default:steel_ingot"},
  59. {"shields:shield_wood"},
  60. {"default:steel_ingot"},
  61. },
  62. })
  63. minetest.register_craft({
  64. type = "fuel",
  65. recipe = "shields:shield_wood",
  66. burntime = 8,
  67. })
  68. end
  69. if armor.materials.cactus then
  70. armor:register_armor("shields:shield_cactus", {
  71. description = S("Cactus Shield"),
  72. inventory_image = "shields_inv_shield_cactus.png",
  73. groups = {armor_shield=1, armor_heal=0, armor_use=1000},
  74. armor_groups = {fleshy=5},
  75. damage_groups = {cracky=3, snappy=3, choppy=2, crumbly=2, level=1},
  76. reciprocate_damage = true,
  77. on_damage = function(player, index, stack)
  78. play_sound_effect(player, "default_wood_footstep")
  79. end,
  80. on_destroy = function(player, index, stack)
  81. play_sound_effect(player, "default_wood_footstep")
  82. end,
  83. })
  84. armor:register_armor("shields:shield_enhanced_cactus", {
  85. description = S("Enhanced Cactus Shield"),
  86. inventory_image = "shields_inv_shield_enhanced_cactus.png",
  87. groups = {armor_shield=1, armor_heal=0, armor_use=1000},
  88. armor_groups = {fleshy=8},
  89. damage_groups = {cracky=3, snappy=3, choppy=2, crumbly=2, level=2},
  90. reciprocate_damage = true,
  91. on_damage = function(player, index, stack)
  92. play_sound_effect(player, "default_dig_metal")
  93. end,
  94. on_destroy = function(player, index, stack)
  95. play_sound_effect(player, "default_dug_metal")
  96. end,
  97. })
  98. minetest.register_craft({
  99. output = "shields:shield_enhanced_cactus",
  100. recipe = {
  101. {"default:steel_ingot"},
  102. {"shields:shield_cactus"},
  103. {"default:steel_ingot"},
  104. },
  105. })
  106. minetest.register_craft({
  107. type = "fuel",
  108. recipe = "shields:shield_cactus",
  109. burntime = 16,
  110. })
  111. end
  112. if armor.materials.steel then
  113. armor:register_armor("shields:shield_steel", {
  114. description = S("Steel Shield"),
  115. inventory_image = "shields_inv_shield_steel.png",
  116. groups = {armor_shield=1, armor_heal=0, armor_use=800,
  117. physics_speed=-0.03, physics_gravity=0.03},
  118. armor_groups = {fleshy=10},
  119. damage_groups = {cracky=2, snappy=3, choppy=2, crumbly=1, level=2},
  120. reciprocate_damage = true,
  121. on_damage = function(player, index, stack)
  122. play_sound_effect(player, "default_dig_metal")
  123. end,
  124. on_destroy = function(player, index, stack)
  125. play_sound_effect(player, "default_dug_metal")
  126. end,
  127. })
  128. end
  129. if armor.materials.bronze then
  130. armor:register_armor("shields:shield_bronze", {
  131. description = S("Bronze Shield"),
  132. inventory_image = "shields_inv_shield_bronze.png",
  133. groups = {armor_shield=1, armor_heal=6, armor_use=400,
  134. physics_speed=-0.03, physics_gravity=0.03},
  135. armor_groups = {fleshy=10},
  136. damage_groups = {cracky=2, snappy=3, choppy=2, crumbly=1, level=2},
  137. reciprocate_damage = true,
  138. on_damage = function(player, index, stack)
  139. play_sound_effect(player, "default_dig_metal")
  140. end,
  141. on_destroy = function(player, index, stack)
  142. play_sound_effect(player, "default_dug_metal")
  143. end,
  144. })
  145. end
  146. if armor.materials.diamond then
  147. armor:register_armor("shields:shield_diamond", {
  148. description = S("Diamond Shield"),
  149. inventory_image = "shields_inv_shield_diamond.png",
  150. groups = {armor_shield=1, armor_heal=12, armor_use=200},
  151. armor_groups = {fleshy=15},
  152. damage_groups = {cracky=2, snappy=1, choppy=1, level=3},
  153. reciprocate_damage = true,
  154. on_damage = function(player, index, stack)
  155. play_sound_effect(player, "default_glass_footstep")
  156. end,
  157. on_destroy = function(player, index, stack)
  158. play_sound_effect(player, "default_break_glass")
  159. end,
  160. })
  161. end
  162. if armor.materials.gold then
  163. armor:register_armor("shields:shield_gold", {
  164. description = S("Gold Shield"),
  165. inventory_image = "shields_inv_shield_gold.png",
  166. groups = {armor_shield=1, armor_heal=6, armor_use=300,
  167. physics_speed=-0.04, physics_gravity=0.04},
  168. armor_groups = {fleshy=10},
  169. damage_groups = {cracky=1, snappy=2, choppy=2, crumbly=3, level=2},
  170. reciprocate_damage = true,
  171. on_damage = function(player, index, stack)
  172. play_sound_effect(player, "default_dig_metal")
  173. end,
  174. on_destroy = function(player, index, stack)
  175. play_sound_effect(player, "default_dug_metal")
  176. end,
  177. })
  178. end
  179. if armor.materials.mithril then
  180. armor:register_armor("shields:shield_mithril", {
  181. description = S("Mithril Shield"),
  182. inventory_image = "shields_inv_shield_mithril.png",
  183. groups = {armor_shield=1, armor_heal=12, armor_use=100},
  184. armor_groups = {fleshy=15},
  185. damage_groups = {cracky=2, snappy=1, level=3},
  186. reciprocate_damage = true,
  187. on_damage = function(player, index, stack)
  188. play_sound_effect(player, "default_glass_footstep")
  189. end,
  190. on_destroy = function(player, index, stack)
  191. play_sound_effect(player, "default_break_glass")
  192. end,
  193. })
  194. end
  195. if armor.materials.crystal then
  196. armor:register_armor("shields:shield_crystal", {
  197. description = S("Crystal Shield"),
  198. inventory_image = "shields_inv_shield_crystal.png",
  199. groups = {armor_shield=1, armor_heal=12, armor_use=100, armor_fire=1},
  200. armor_groups = {fleshy=15},
  201. damage_groups = {cracky=2, snappy=1, level=3},
  202. reciprocate_damage = true,
  203. on_damage = function(player, index, stack)
  204. play_sound_effect(player, "default_glass_footstep")
  205. end,
  206. on_destroy = function(player, index, stack)
  207. play_sound_effect(player, "default_break_glass")
  208. end,
  209. })
  210. end
  211. for k, v in pairs(armor.materials) do
  212. minetest.register_craft({
  213. output = "shields:shield_"..k,
  214. recipe = {
  215. {v, v, v},
  216. {v, v, v},
  217. {"", v, ""},
  218. },
  219. })
  220. end