Disable villager trading again
[MineClone/MineClone2.git] / mods / ENTITIES / mobs_mc / villager.lua
blob41fd74410424f2b4cef3f20c6c4e66834cebd33e
1 --MCmobs v0.4
2 --maikerumine
3 --made for MC like Survival game
4 --License for code WTFPL and otherwise stated in readmes
6 -- intllib
7 local MP = minetest.get_modpath(minetest.get_current_modname())
8 local S, NS = dofile(MP.."/intllib.lua")
10 --###################
11 --################### VILLAGER
12 --###################
16 mobs:register_mob("mobs_mc:villager", {
17 type = "npc",
18 hp_min = 20,
19 hp_max = 20,
20 collisionbox = {-0.3, -0.01, -0.3, 0.3, 1.94, 0.3},
21 visual = "mesh",
22 mesh = "mobs_mc_villager.b3d",
23 textures = {
25 "mobs_mc_villager.png",
26 "mobs_mc_villager.png", --hat
29 "mobs_mc_villager_farmer.png",
30 "mobs_mc_villager_farmer.png", --hat
33 "mobs_mc_villager_priest.png",
34 "mobs_mc_villager_priest.png", --hat
37 "mobs_mc_villager_librarian.png",
38 "mobs_mc_villager_librarian.png", --hat
41 "mobs_mc_villager_butcher.png",
42 "mobs_mc_villager_butcher.png", --hat
45 "mobs_mc_villager_smith.png",
46 "mobs_mc_villager_smith.png", --hat
49 visual_size = {x=3, y=3},
50 makes_footstep_sound = true,
51 walk_velocity = 1.2,
52 run_velocity = 2.4,
53 drops = {},
54 sounds = {
55 random = "mobs_mc_villager_noise",
56 death = "mobs_mc_villager_death",
57 damage = "mobs_mc_villager_damage",
58 distance = 16,
60 animation = {
61 stand_speed = 25,
62 stand_start = 40,
63 stand_end = 59,
64 walk_speed = 25,
65 walk_start = 0,
66 walk_end = 40,
67 run_speed = 25,
68 run_start = 0,
69 run_end = 40,
70 die_speed = 15,
71 die_start = 210,
72 die_end = 220,
73 die_loop = false,
75 water_damage = 0,
76 lava_damage = 4,
77 light_damage = 0,
78 view_range = 16,
79 fear_height = 4,
80 --[[
81 on_rightclick = function(self, clicker)
82 local inv
83 inv = minetest.get_inventory({type="detached", name="trading_inv"})
84 if not inv then
85 inv = minetest.create_detached_inventory("trading_inv", {
86 allow_take = function(inv, listname, index, stack, player)
87 if listname == "input" or listname == "output" then
88 return stack:get_count()
89 else
90 return 0
91 end
92 end,
93 allow_move = function(inv, from_list, from_index, to_list, to_index, count, player)
94 if from_list == "wanted" or from_list == "offered" or to_list == "wanted" or to_list == "offered" then
95 return 0
96 elseif from_list == "output" and inv:get_stack(to_list, to_index):is_empty() then
97 return count
98 elseif from_list == "input" then
99 return count
100 else
101 return 0
103 end,
104 allow_put = function(inv, listname, index, stack, player)
105 if listname == "input" then
106 return stack:get_count()
107 else
108 return 0
110 end,
111 on_put = function(inv, listname, index, stack, player)
112 if inv:contains_item("input", inv:get_stack("wanted", 1)) then
113 inv:set_stack("output", 1, inv:get_stack("offered", 1))
114 minetest.sound_play("mobs_mc_villager_accept", {to_player = player:get_player_name()})
115 else
116 inv:set_stack("output", 1, ItemStack(""))
117 minetest.sound_play("mobs_mc_villager_deny", {to_player = player:get_player_name()})
119 end,
120 on_move = function(inv, from_list, from_index, to_list, to_index, count, player)
121 if inv:contains_item("input", inv:get_stack("wanted", 1)) then
122 inv:set_stack("output", 1, inv:get_stack("offered", 1))
123 minetest.sound_play("mobs_mc_villager_accept", {to_player = player:get_player_name()})
124 else
125 inv:set_stack("output", 1, ItemStack(""))
126 minetest.sound_play("mobs_mc_villager_deny", {to_player = player:get_player_name()})
128 end,
129 on_take = function(inv, listname, index, stack, player)
130 local accept
131 if listname == "output" then
132 inv:remove_item("input", inv:get_stack("wanted", 1))
133 accept = true
135 if inv:contains_item("input", inv:get_stack("wanted", 1)) then
136 inv:set_stack("output", 1, inv:get_stack("offered", 1))
137 accept = true
138 else
139 inv:set_stack("output", 1, ItemStack(""))
140 accept = false
142 if accept then
143 minetest.sound_play("mobs_mc_villager_accept", {to_player = player:get_player_name()})
144 else
145 minetest.sound_play("mobs_mc_villager_deny", {to_player = player:get_player_name()})
147 end,
150 inv:set_size("input", 2)
151 inv:set_size("output", 1)
152 inv:set_size("wanted", 2)
153 inv:set_size("offered", 1)
155 local trades = {
156 {"mcl_core:apple 12", "mcl_core:emerald 1"},
157 {"mcl_core:coal_lump 20", "mcl_core:emerald 1"},
158 {"mcl_core:paper 30", "mcl_core:emerald 1"},
159 {"mcl_mobitems:leather 10", "mcl_core:emerald 1"},
160 {"mcl_books:book 2", "mcl_core:emerald 1"},
161 {"mcl_core:emerald 3", "mcl_core:emerald 1"},
162 {"mcl_farming:potato_item 15", "mcl_core:emerald 1"},
163 {"mcl_farming:wheat_item 20", "mcl_core:emerald 1"},
164 {"mcl_farming:carrot_item 15", "mcl_core:emerald 1"},
165 {"mcl_farming:melon_item 8", "mcl_core:emerald 1"},
166 {"mcl_mobitems:rotten_flesh 40","mcl_core:emerald 1"},
167 {"mcl_core:gold_ingot 10", "mcl_core:emerald 1"},
168 {"mcl_wool:white 15", "mcl_core:emerald 1"},
169 {"mcl_farming:pumpkin_face 8", "mcl_core:emerald 1"},
171 {"mcl_core:emerald 1", "mcl_mobitems:cooked_beef 5"},
172 {"mcl_core:emerald 1", "mcl_mobitems:cooked_chicken 7"},
173 {"mcl_core:emerald 1", "mcl_farming:cookie 6"},
174 {"mcl_core:emerald 1", "mcl_bows:arrow 10"},
175 {"mcl_core:emerald 3", "mcl_bows:bow 1"},
176 {"mcl_core:emerald 1", "mcl_cake:cake 1"},
177 {"mcl_core:emerald 10", "mcl_mobitems:saddle 1"},
178 {"mcl_core:emerald 10", "mcl_clock:clock 1"},
179 {"mcl_core:emerald 10", "mcl_compass:compass 1"},
180 {"mcl_core:emerald 1", "mcl_core:glass 5"},
181 {"mcl_core:emerald 1", "mcl_nether:glowstone 3"},
182 {"mcl_core:emerald 3", "mcl_tools:shears 1"},
183 {"mcl_core:emerald 10", "mcl_tools:sword_diamond 1"},
184 {"mcl_core:emerald 20", "3d_armor:chestplate_diamond 1"},
186 local tradenum = math.random(#trades)
187 inv:set_stack("wanted", 1, ItemStack(trades[tradenum][1]))
188 inv:set_stack("offered", 1, ItemStack(trades[tradenum][2]))
190 local formspec =
191 "size[9,8.75]"..
192 "background[-0.19,-0.25;9.41,9.49;mobs_mc_trading_formspec_bg.png]"..
193 mcl_vars.inventory_header..
194 "list[current_player;main;0,4.5;9,3;9]"..
195 "list[current_player;main;0,7.74;9,1;]"
196 .."list[detached:trading_inv;wanted;2,1;2,1;]"
197 .."list[detached:trading_inv;offered;5.76,1;1,1;]"
198 .."list[detached:trading_inv;input;2,2.5;2,1;]"
199 .."list[detached:trading_inv;output;5.76,2.55;1,1;]"
200 .."listring[detached:trading_inv;output]"
201 .."listring[current_player;main]"
202 .."listring[detached:trading_inv;input]"
203 .."listring[current_player;main]"
204 minetest.sound_play("mobs_mc_villager_trade", {to_player = clicker:get_player_name()})
205 minetest.show_formspec(clicker:get_player_name(), "mobs_mc:trade", formspec)
206 end,
210 mobs:spawn_specific("mobs_mc:villager", mobs_mc.spawn.village, {"air"}, 0, minetest.LIGHT_MAX+1, 30, 8000, 4, mobs_mc.spawn_height.water+1, mobs_mc.spawn_height.overworld_max)
212 -- compatibility
213 mobs:alias_mob("mobs:villager", "mobs_mc:villager")
215 -- spawn eggs
216 mobs:register_egg("mobs_mc:villager", S("Villager"), "mobs_mc_spawn_icon_villager.png", 0)
218 if minetest.settings:get_bool("log_mods") then
219 minetest.log("action", "MC mobs loaded")