diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index d72daef03..cb74c5a35 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -80,3 +80,8 @@ Depending on what you add, the chances for inclusion vary: Report all bugs and missing Minecraft features here: + +## Direct discussion +We have an IRC channel! Join us on #mineclone2 in freenode.net. + + diff --git a/mods/ENTITIES/mcl_mobs/api.lua b/mods/ENTITIES/mcl_mobs/api.lua index ec691c624..2d45bb257 100644 --- a/mods/ENTITIES/mcl_mobs/api.lua +++ b/mods/ENTITIES/mcl_mobs/api.lua @@ -724,6 +724,42 @@ local is_at_cliff_or_danger = function(self) end +-- copy the 'mob facing cliff_or_danger check' from above, and rework to avoid water +local is_at_water_danger = function(self) + + + if not self.object:get_luaentity() then + return false + end + local yaw = self.object:get_yaw() + local dir_x = -sin(yaw) * (self.collisionbox[4] + 0.5) + local dir_z = cos(yaw) * (self.collisionbox[4] + 0.5) + local pos = self.object:get_pos() + local ypos = pos.y + self.collisionbox[2] -- just above floor + + local free_fall, blocker = minetest.line_of_sight( + {x = pos.x + dir_x, y = ypos, z = pos.z + dir_z}, + {x = pos.x + dir_x, y = ypos - 3, z = pos.z + dir_z}) + if free_fall then + return true + else + local bnode = minetest.get_node(blocker) + local waterdanger = is_node_waterhazard(self, bnode.name) + if + waterdanger and (is_node_waterhazard(self, self.standing_in) or is_node_waterhazard(self, self.standing_on)) then + return false + elseif waterdanger and (is_node_waterhazard(self, self.standing_in) or is_node_waterhazard(self, self.standing_on)) == false then + return true + else + local def = minetest.registered_nodes[bnode.name] + return (not def and def.walkable) + end + end + + return false +end + + -- get node but use fallback for nil or unknown local node_ok = function(pos, fallback) @@ -2049,40 +2085,40 @@ local do_states = function(self, dtime) local is_in_danger = false if lp then - - local is_in_danger = false - - -- if mob is flying, only check for node it is currently in (no contact with node below) - if flight_check(self) then - is_in_danger = is_node_dangerous(self, self.standing_in) - elseif (is_node_dangerous(self, self.standing_in) or - is_node_dangerous(self, self.standing_on)) or (is_node_waterhazard(self, self.standing_in) or is_node_waterhazard(self, self.standing_on)) then - is_in_danger = true - end - -- If mob in or on dangerous block, look for land - if is_in_danger then - lp = minetest.find_node_near(s, 5, {"group:solid"}) + if (is_node_dangerous(self, self.standing_in) or + is_node_dangerous(self, self.standing_on)) or (is_node_waterhazard(self, self.standing_in) or is_node_waterhazard(self, self.standing_on)) and (not self.fly) then + is_in_danger = true - -- did we find land? - if lp then + -- If mob in or on dangerous block, look for land + if is_in_danger then + -- Better way to find shore - copied from upstream + lp = minetest.find_nodes_in_area_under_air( + {x = s.x - 5, y = s.y - 0.5, z = s.z - 5}, + {x = s.x + 5, y = s.y + 1, z = s.z + 5}, + {"group:solid"}) - local vec = { - x = lp.x - s.x, - z = lp.z - s.z - } + lp = #lp > 0 and lp[random(#lp)] + + -- did we find land? + if lp then - yaw = (atan(vec.z / vec.x) + pi / 2) - self.rotate + local vec = { + x = lp.x - s.x, + z = lp.z - s.z + } - if lp.x > s.x then yaw = yaw + pi end + yaw = (atan(vec.z / vec.x) + pi / 2) - self.rotate - -- look towards land and jump/move in that direction - yaw = set_yaw(self, yaw, 6) - do_jump(self) - set_velocity(self, self.walk_velocity) - else - yaw = yaw + random(-0.5, 0.5) - end + + if lp.x > s.x then yaw = yaw + pi end + + -- look towards land and move in that direction + yaw = set_yaw(self, yaw, 6) + set_velocity(self, self.walk_velocity) + + end + end -- A danger is near but mob is not inside else @@ -3218,8 +3254,6 @@ local mob_step = function(self, dtime) breed(self) - follow_flop(self) - if do_states(self, dtime) then return end @@ -3228,6 +3262,18 @@ local mob_step = function(self, dtime) runaway_from(self) + if is_at_water_danger(self) and self.state ~= "attack" then + if random(1, 10) <= 6 then + set_velocity(self, 0) + self.state = "stand" + set_animation(self, "stand") + yaw = yaw + random(-0.5, 0.5) + yaw = set_yaw(self, yaw, 8) + end + end + + follow_flop(self) + if is_at_cliff_or_danger(self) then set_velocity(self, 0) self.state = "stand" diff --git a/mods/ITEMS/mcl_beds/functions.lua b/mods/ITEMS/mcl_beds/functions.lua index d73154ee4..b1a0ce4fd 100644 --- a/mods/ITEMS/mcl_beds/functions.lua +++ b/mods/ITEMS/mcl_beds/functions.lua @@ -83,7 +83,10 @@ local function lay_down(player, pos, bed_pos, state, skip) end -- No sleeping while moving. Slightly different behaviour than in MC. - if vector.length(player:get_player_velocity()) > 0.001 then + -- FIXME: Velocity threshold should be 0.01 but Minetest 5.3.0 + -- sometimes reports incorrect Y speed. A velocity threshold + -- of 0.125 still seems good enough. + if vector.length(player:get_player_velocity()) > 0.125 then minetest.chat_send_player(name, S("You have to stop moving before going to bed!")) return false end @@ -115,13 +118,16 @@ local function lay_down(player, pos, bed_pos, state, skip) mcl_beds.player[name] = nil player_in_bed = player_in_bed - 1 end + mcl_beds.pos[name] = nil + mcl_beds.bed_pos[name] = nil + if p then + player:set_pos(p) + end + -- skip here to prevent sending player specific changes (used for leaving players) if skip then return false end - if p then - player:set_pos(p) - end -- physics, eye_offset, etc player:set_eye_offset({x = 0, y = 0, z = 0}, {x = 0, y = 0, z = 0}) @@ -134,8 +140,6 @@ local function lay_down(player, pos, bed_pos, state, skip) player:get_meta():set_string("mcl_beds:sleeping", "false") hud_flags.wielditem = true mcl_player.player_set_animation(player, "stand" , 30) - mcl_beds.pos[name] = nil - mcl_beds.bed_pos[name] = nil -- lay down else @@ -198,8 +202,8 @@ local function lay_down(player, pos, bed_pos, state, skip) return true end -local function update_formspecs(finished) - local ges = #minetest.get_connected_players() +local function update_formspecs(finished, ges) + local ges = ges or #minetest.get_connected_players() local form_n = "size[6,5;true]" local all_in_bed = ges == player_in_bed local night_skip = is_night_skip_enabled() @@ -360,8 +364,14 @@ end) minetest.register_on_leaveplayer(function(player) local name = player:get_player_name() lay_down(player, nil, nil, false, true) - mcl_beds.player[name] = nil - if check_in_beds() then + players = minetest.get_connected_players() + for n, player in ipairs(players) do + if player:get_player_name() == name then + players[n] = nil + break + end + end + if check_in_beds(players) then minetest.after(5, function() if check_in_beds() then update_formspecs(is_night_skip_enabled()) @@ -369,7 +379,7 @@ minetest.register_on_leaveplayer(function(player) end end) end - update_formspecs(false) + update_formspecs(false, #players) end) minetest.register_on_player_receive_fields(function(player, formname, fields) diff --git a/mods/ITEMS/mcl_brewing/init.lua b/mods/ITEMS/mcl_brewing/init.lua index c796606b9..717e660e4 100644 --- a/mods/ITEMS/mcl_brewing/init.lua +++ b/mods/ITEMS/mcl_brewing/init.lua @@ -4,7 +4,6 @@ local function active_brewing_formspec(fuel_percent, brew_percent) return "size[9,8.75]".. "background[-0.19,-0.25;9.5,9.5;mcl_brewing_inventory.png]".. - -- "background[-0.19,-0.25;9.5,9.5;mcl_brewing_inventory_active.png]".. "label[4,0;"..minetest.formspec_escape(minetest.colorize("#313131", S("Brewing Stand"))).."]".. "label[0,4.0;"..minetest.formspec_escape(minetest.colorize("#313131", S("Inventory"))).."]".. "list[current_player;main;0,4.5;9,3;9]".. @@ -375,7 +374,7 @@ minetest.register_node("mcl_brewing:stand_000", { _doc_items_longdesc = S("The stand allows you to brew potions!"), _doc_items_usagehelp = doc_string, _tt_help = S("Brew Potions"), - groups = {pickaxey=1, falling_node=1, brewitem=1, not_in_creative_inventory = 0, not_in_craft_guide = 0}, + groups = {pickaxey=1, falling_node=1, brewitem=1 }, tiles = tiles, drop = "mcl_brewing:stand", paramtype = "light", @@ -392,32 +391,16 @@ minetest.register_node("mcl_brewing:stand_000", { {-8/16, -8/16, -8/16, -2/16, -6/16, -2/16}, -- base {-3/16, -8/16, 2/16, 3/16, -6/16, 8/16}, -- base - -- {-7/16, -6/16 ,-7/16 , -6/16, 1/16, -6/16 }, -- bottle 1 - -- {-6/16, -6/16 ,-6/16 , -5/16, 3/16, -5/16 }, -- bottle 1 - -- {-5/16, -6/16 ,-5/16 , -4/16, 3/16, -4/16 }, -- bottle 1 - -- {-4/16, -6/16 ,-4/16 , -3/16, 3/16, -3/16 }, -- bottle 1 - -- {-3/16, -6/16 ,-3/16 , -2/16, 1/16, -2/16 }, -- bottle 1 - {-5/16, 3/16 ,-5/16 , -4/16, 7/16, -4/16 }, -- line 1 {-4/16, 6/16 ,-4/16 , -3/16, 8/16, -3/16 }, -- line 1 {-3/16, 7/16 ,-3/16 , -2/16, 8/16, -2/16 }, -- line 1 {-2/16, 7/16 ,-2/16 , -1/16, 8/16, -1/16 }, -- line 1 - - -- {7/16, -6/16 ,-7/16 , 6/16, 1/16, -6/16 }, -- bottle 2 - -- {6/16, -6/16 ,-6/16 , 5/16, 3/16, -5/16 }, -- bottle 2 - -- {5/16, -6/16 ,-5/16 , 4/16, 3/16, -4/16 }, -- bottle 2 - -- {4/16, -6/16 ,-4/16 , 3/16, 3/16, -3/16 }, -- bottle 2 - -- {3/16, -6/16 ,-3/16 , 2/16, 1/16, -2/16 }, -- bottle 2 - {5/16, 3/16 ,-5/16 ,4/16, 7/16, -4/16 }, -- line 2 {4/16, 6/16 ,-4/16 ,3/16, 8/16, -3/16 }, -- line 2 {3/16, 7/16 ,-3/16 ,2/16, 8/16, -2/16 }, -- line 2 {2/16, 7/16 ,-2/16 ,1/16, 8/16, -1/16 }, -- line 2 - -- {0/16, -6/16 , 2/16 , 1/16, 1/16, 7/16 }, -- bottle 3 - -- {0/16, 1/16 , 3/16 , 1/16, 3/16, 6/16 }, -- bottle 3 - {0/16, 7/16 , 1/16 , 1/16, 8/16, 3/16 }, -- line 3 {0/16, 6/16 , 3/16 , 1/16, 7/16, 5/16 }, -- line 3 {0/16, 3/16 , 4/16 , 1/16, 6/16, 5/16 }, -- line 3 @@ -427,7 +410,6 @@ minetest.register_node("mcl_brewing:stand_000", { _mcl_blast_resistance = 1, _mcl_hardness = 1, on_destruct = on_destruct, - -- after_dig_node = after_dig, allow_metadata_inventory_take = allow_take, allow_metadata_inventory_put = allow_put, on_metadata_inventory_put = on_put, @@ -458,7 +440,7 @@ minetest.register_node("mcl_brewing:stand_100", { description = S("Brewing Stand"), _doc_items_create_entry = false, _tt_help = S("Brew Potions"), - groups = {pickaxey=1, falling_node=1, brewitem=0, not_in_creative_inventory = 1, not_in_craft_guide = 1}, + groups = {pickaxey=1, falling_node=1, not_in_creative_inventory = 1, not_in_craft_guide = 1}, tiles = tiles, drop = "mcl_brewing:stand", paramtype = "light", @@ -486,21 +468,11 @@ minetest.register_node("mcl_brewing:stand_100", { {-3/16, 7/16 ,-3/16 , -2/16, 8/16, -2/16 }, -- line 1 {-2/16, 7/16 ,-2/16 , -1/16, 8/16, -1/16 }, -- line 1 - - -- {7/16, -6/16 ,-7/16 , 6/16, 1/16, -6/16 }, -- bottle 2 - -- {6/16, -6/16 ,-6/16 , 5/16, 3/16, -5/16 }, -- bottle 2 - -- {5/16, -6/16 ,-5/16 , 4/16, 3/16, -4/16 }, -- bottle 2 - -- {4/16, -6/16 ,-4/16 , 3/16, 3/16, -3/16 }, -- bottle 2 - -- {3/16, -6/16 ,-3/16 , 2/16, 1/16, -2/16 }, -- bottle 2 - {5/16, 3/16 ,-5/16 ,4/16, 7/16, -4/16 }, -- line 2 {4/16, 6/16 ,-4/16 ,3/16, 8/16, -3/16 }, -- line 2 {3/16, 7/16 ,-3/16 ,2/16, 8/16, -2/16 }, -- line 2 {2/16, 7/16 ,-2/16 ,1/16, 8/16, -1/16 }, -- line 2 - -- {0/16, -6/16 , 2/16 , 1/16, 1/16, 7/16 }, -- bottle 3 - -- {0/16, 1/16 , 3/16 , 1/16, 3/16, 6/16 }, -- bottle 3 - {0/16, 7/16 , 1/16 , 1/16, 8/16, 3/16 }, -- line 3 {0/16, 6/16 , 3/16 , 1/16, 7/16, 5/16 }, -- line 3 {0/16, 3/16 , 4/16 , 1/16, 6/16, 5/16 }, -- line 3 @@ -510,7 +482,6 @@ minetest.register_node("mcl_brewing:stand_100", { _mcl_blast_resistance = 1, _mcl_hardness = 1, on_destruct = on_destruct, - -- after_dig_node = after_dig, allow_metadata_inventory_take = allow_take, allow_metadata_inventory_put = allow_put, on_metadata_inventory_put = on_put, @@ -541,7 +512,7 @@ minetest.register_node("mcl_brewing:stand_010", { description = S("Brewing Stand"), _doc_items_create_entry = false, _tt_help = S("Brew Potions"), - groups = {pickaxey=1, falling_node=1, brewitem=0, not_in_creative_inventory = 1, not_in_craft_guide = 1}, + groups = {pickaxey=1, falling_node=1, not_in_creative_inventory = 1, not_in_craft_guide = 1}, tiles = tiles, drop = "mcl_brewing:stand", paramtype = "light", @@ -558,12 +529,6 @@ minetest.register_node("mcl_brewing:stand_010", { {-8/16, -8/16, -8/16, -2/16, -6/16, -2/16}, -- base {-3/16, -8/16, 2/16, 3/16, -6/16, 8/16}, -- base - -- {-7/16, -6/16 ,-7/16 , -6/16, 1/16, -6/16 }, -- bottle 1 - -- {-6/16, -6/16 ,-6/16 , -5/16, 3/16, -5/16 }, -- bottle 1 - -- {-5/16, -6/16 ,-5/16 , -4/16, 3/16, -4/16 }, -- bottle 1 - -- {-4/16, -6/16 ,-4/16 , -3/16, 3/16, -3/16 }, -- bottle 1 - -- {-3/16, -6/16 ,-3/16 , -2/16, 1/16, -2/16 }, -- bottle 1 - {-5/16, 3/16 ,-5/16 , -4/16, 7/16, -4/16 }, -- line 1 {-4/16, 6/16 ,-4/16 , -3/16, 8/16, -3/16 }, -- line 1 {-3/16, 7/16 ,-3/16 , -2/16, 8/16, -2/16 }, -- line 1 @@ -581,9 +546,6 @@ minetest.register_node("mcl_brewing:stand_010", { {3/16, 7/16 ,-3/16 ,2/16, 8/16, -2/16 }, -- line 2 {2/16, 7/16 ,-2/16 ,1/16, 8/16, -1/16 }, -- line 2 - -- {0/16, -6/16 , 2/16 , 1/16, 1/16, 7/16 }, -- bottle 3 - -- {0/16, 1/16 , 3/16 , 1/16, 3/16, 6/16 }, -- bottle 3 - {0/16, 7/16 , 1/16 , 1/16, 8/16, 3/16 }, -- line 3 {0/16, 6/16 , 3/16 , 1/16, 7/16, 5/16 }, -- line 3 {0/16, 3/16 , 4/16 , 1/16, 6/16, 5/16 }, -- line 3 @@ -593,7 +555,6 @@ minetest.register_node("mcl_brewing:stand_010", { _mcl_blast_resistance = 1, _mcl_hardness = 1, on_destruct = on_destruct, - -- after_dig_node = after_dig, allow_metadata_inventory_take = allow_take, allow_metadata_inventory_put = allow_put, on_metadata_inventory_put = on_put, @@ -624,7 +585,7 @@ minetest.register_node("mcl_brewing:stand_001", { description = S("Brewing Stand"), _doc_items_create_entry = false, _tt_help = S("Brew Potions"), - groups = {pickaxey=1, falling_node=1, brewitem=0, not_in_creative_inventory = 1, not_in_craft_guide = 1}, + groups = {pickaxey=1, falling_node=1, not_in_creative_inventory = 1, not_in_craft_guide = 1}, tiles = tiles, drop = "mcl_brewing:stand", paramtype = "light", @@ -641,24 +602,11 @@ minetest.register_node("mcl_brewing:stand_001", { {-8/16, -8/16, -8/16, -2/16, -6/16, -2/16}, -- base {-3/16, -8/16, 2/16, 3/16, -6/16, 8/16}, -- base - -- {-7/16, -6/16 ,-7/16 , -6/16, 1/16, -6/16 }, -- bottle 1 - -- {-6/16, -6/16 ,-6/16 , -5/16, 3/16, -5/16 }, -- bottle 1 - -- {-5/16, -6/16 ,-5/16 , -4/16, 3/16, -4/16 }, -- bottle 1 - -- {-4/16, -6/16 ,-4/16 , -3/16, 3/16, -3/16 }, -- bottle 1 - -- {-3/16, -6/16 ,-3/16 , -2/16, 1/16, -2/16 }, -- bottle 1 - {-5/16, 3/16 ,-5/16 , -4/16, 7/16, -4/16 }, -- line 1 {-4/16, 6/16 ,-4/16 , -3/16, 8/16, -3/16 }, -- line 1 {-3/16, 7/16 ,-3/16 , -2/16, 8/16, -2/16 }, -- line 1 {-2/16, 7/16 ,-2/16 , -1/16, 8/16, -1/16 }, -- line 1 - - -- {7/16, -6/16 ,-7/16 , 6/16, 1/16, -6/16 }, -- bottle 2 - -- {6/16, -6/16 ,-6/16 , 5/16, 3/16, -5/16 }, -- bottle 2 - -- {5/16, -6/16 ,-5/16 , 4/16, 3/16, -4/16 }, -- bottle 2 - -- {4/16, -6/16 ,-4/16 , 3/16, 3/16, -3/16 }, -- bottle 2 - -- {3/16, -6/16 ,-3/16 , 2/16, 1/16, -2/16 }, -- bottle 2 - {5/16, 3/16 ,-5/16 ,4/16, 7/16, -4/16 }, -- line 2 {4/16, 6/16 ,-4/16 ,3/16, 8/16, -3/16 }, -- line 2 {3/16, 7/16 ,-3/16 ,2/16, 8/16, -2/16 }, -- line 2 @@ -676,7 +624,6 @@ minetest.register_node("mcl_brewing:stand_001", { _mcl_blast_resistance = 1, _mcl_hardness = 1, on_destruct = on_destruct, - -- after_dig_node = after_dig, allow_metadata_inventory_take = allow_take, allow_metadata_inventory_put = allow_put, on_metadata_inventory_put = on_put, @@ -707,7 +654,7 @@ minetest.register_node("mcl_brewing:stand_110", { description = S("Brewing Stand"), _doc_items_create_entry = false, _tt_help = S("Brew Potions"), - groups = {pickaxey=1, falling_node=1, brewitem=0, not_in_creative_inventory = 1, not_in_craft_guide = 1}, + groups = {pickaxey=1, falling_node=1, not_in_creative_inventory = 1, not_in_craft_guide = 1}, tiles = tiles, drop = "mcl_brewing:stand", paramtype = "light", @@ -747,9 +694,6 @@ minetest.register_node("mcl_brewing:stand_110", { {3/16, 7/16 ,-3/16 ,2/16, 8/16, -2/16 }, -- line 2 {2/16, 7/16 ,-2/16 ,1/16, 8/16, -1/16 }, -- line 2 - -- {0/16, -6/16 , 2/16 , 1/16, 1/16, 7/16 }, -- bottle 3 - -- {0/16, 1/16 , 3/16 , 1/16, 3/16, 6/16 }, -- bottle 3 - {0/16, 7/16 , 1/16 , 1/16, 8/16, 3/16 }, -- line 3 {0/16, 6/16 , 3/16 , 1/16, 7/16, 5/16 }, -- line 3 {0/16, 3/16 , 4/16 , 1/16, 6/16, 5/16 }, -- line 3 @@ -759,7 +703,6 @@ minetest.register_node("mcl_brewing:stand_110", { _mcl_blast_resistance = 1, _mcl_hardness = 1, on_destruct = on_destruct, - -- after_dig_node = after_dig, allow_metadata_inventory_take = allow_take, allow_metadata_inventory_put = allow_put, on_metadata_inventory_put = on_put, @@ -790,7 +733,7 @@ minetest.register_node("mcl_brewing:stand_101", { description = S("Brewing Stand"), _doc_items_create_entry = false, _tt_help = S("Brew Potions"), - groups = {pickaxey=1, falling_node=1, brewitem=0, not_in_creative_inventory = 1, not_in_craft_guide = 1}, + groups = {pickaxey=1, falling_node=1, not_in_creative_inventory = 1, not_in_craft_guide = 1}, tiles = tiles, drop = "mcl_brewing:stand", paramtype = "light", @@ -818,13 +761,6 @@ minetest.register_node("mcl_brewing:stand_101", { {-3/16, 7/16 ,-3/16 , -2/16, 8/16, -2/16 }, -- line 1 {-2/16, 7/16 ,-2/16 , -1/16, 8/16, -1/16 }, -- line 1 - - -- {7/16, -6/16 ,-7/16 , 6/16, 1/16, -6/16 }, -- bottle 2 - -- {6/16, -6/16 ,-6/16 , 5/16, 3/16, -5/16 }, -- bottle 2 - -- {5/16, -6/16 ,-5/16 , 4/16, 3/16, -4/16 }, -- bottle 2 - -- {4/16, -6/16 ,-4/16 , 3/16, 3/16, -3/16 }, -- bottle 2 - -- {3/16, -6/16 ,-3/16 , 2/16, 1/16, -2/16 }, -- bottle 2 - {5/16, 3/16 ,-5/16 ,4/16, 7/16, -4/16 }, -- line 2 {4/16, 6/16 ,-4/16 ,3/16, 8/16, -3/16 }, -- line 2 {3/16, 7/16 ,-3/16 ,2/16, 8/16, -2/16 }, -- line 2 @@ -842,7 +778,6 @@ minetest.register_node("mcl_brewing:stand_101", { _mcl_blast_resistance = 1, _mcl_hardness = 1, on_destruct = on_destruct, - -- after_dig_node = after_dig, allow_metadata_inventory_take = allow_take, allow_metadata_inventory_put = allow_put, on_metadata_inventory_put = on_put, @@ -873,7 +808,7 @@ minetest.register_node("mcl_brewing:stand_011", { description = S("Brewing Stand"), _doc_items_create_entry = false, _tt_help = S("Brew Potions"), - groups = {pickaxey=1, falling_node=1, brewitem=0, not_in_creative_inventory = 1, not_in_craft_guide = 1}, + groups = {pickaxey=1, falling_node=1, not_in_creative_inventory = 1, not_in_craft_guide = 1}, tiles = tiles, drop = "mcl_brewing:stand", paramtype = "light", @@ -890,18 +825,11 @@ minetest.register_node("mcl_brewing:stand_011", { {-8/16, -8/16, -8/16, -2/16, -6/16, -2/16}, -- base {-3/16, -8/16, 2/16, 3/16, -6/16, 8/16}, -- base - -- {-7/16, -6/16 ,-7/16 , -6/16, 1/16, -6/16 }, -- bottle 1 - -- {-6/16, -6/16 ,-6/16 , -5/16, 3/16, -5/16 }, -- bottle 1 - -- {-5/16, -6/16 ,-5/16 , -4/16, 3/16, -4/16 }, -- bottle 1 - -- {-4/16, -6/16 ,-4/16 , -3/16, 3/16, -3/16 }, -- bottle 1 - -- {-3/16, -6/16 ,-3/16 , -2/16, 1/16, -2/16 }, -- bottle 1 - {-5/16, 3/16 ,-5/16 , -4/16, 7/16, -4/16 }, -- line 1 {-4/16, 6/16 ,-4/16 , -3/16, 8/16, -3/16 }, -- line 1 {-3/16, 7/16 ,-3/16 , -2/16, 8/16, -2/16 }, -- line 1 {-2/16, 7/16 ,-2/16 , -1/16, 8/16, -1/16 }, -- line 1 - {7/16, -6/16 ,-7/16 , 6/16, 1/16, -6/16 }, -- bottle 2 {6/16, -6/16 ,-6/16 , 5/16, 3/16, -5/16 }, -- bottle 2 {5/16, -6/16 ,-5/16 , 4/16, 3/16, -4/16 }, -- bottle 2 @@ -956,7 +884,7 @@ minetest.register_node("mcl_brewing:stand_111", { description = S("Brewing Stand"), _doc_items_create_entry = false, _tt_help = S("Brew Potions"), - groups = {pickaxey=1, falling_node=1, brewitem=0, not_in_creative_inventory = 1, not_in_craft_guide = 1}, + groups = {pickaxey=1, falling_node=1, not_in_creative_inventory = 1, not_in_craft_guide = 1}, tiles = tiles, drop = "mcl_brewing:stand", paramtype = "light", @@ -1008,7 +936,6 @@ minetest.register_node("mcl_brewing:stand_111", { _mcl_blast_resistance = 1, _mcl_hardness = 1, on_destruct = on_destruct, - -- after_dig_node = after_dig, allow_metadata_inventory_take = allow_take, allow_metadata_inventory_put = allow_put, on_metadata_inventory_put = on_put, diff --git a/mods/ITEMS/mcl_potions/init.lua b/mods/ITEMS/mcl_potions/init.lua index 13152653e..18df5b398 100644 --- a/mods/ITEMS/mcl_potions/init.lua +++ b/mods/ITEMS/mcl_potions/init.lua @@ -277,8 +277,9 @@ minetest.register_craftitem("mcl_potions:river_water", { }) -mcl_potions.register_splash("water", S("Splash Potion"), "#0022FF", {tt="No effect", potion_fun=function() end}) -mcl_potions.register_lingering("water", S("Lingering Potion"), "#0022FF", {tt="No effect", potion_fun=function() end}) +-- TODO: Extinguish fire, damage mobs +mcl_potions.register_splash("water", S("Splash Water Bottle"), "#0022FF", {tt="No effect", potion_fun=function() end}) +mcl_potions.register_lingering("water", S("Lingering Water Bottle"), "#0022FF", {tt="No effect", potion_fun=function() end}) minetest.register_craftitem("mcl_potions:speckled_melon", { description = S("Glistering Melon"), diff --git a/mods/ITEMS/mcl_potions/lingering.lua b/mods/ITEMS/mcl_potions/lingering.lua index 15e0f732a..318d51a68 100644 --- a/mods/ITEMS/mcl_potions/lingering.lua +++ b/mods/ITEMS/mcl_potions/lingering.lua @@ -69,9 +69,18 @@ end) function mcl_potions.register_lingering(name, descr, color, def) local id = "mcl_potions:"..name.."_lingering" + local longdesc = def.longdesc + if not def.no_effect then + longdesc = S("A throwable potion that will shatter on impact, where it creates a magic cloud that lingers around for a while. Any player or mob inside the cloud will receive the potion's effect, possibly repeatedly.") + if def.longdesc then + longdesc = longdesc .. "\n" .. def.longdesc + end + end minetest.register_craftitem(id, { description = descr, _tt_help = def.tt, + _doc_items_longdesc = longdesc, + _doc_items_usagehelp = S("Use the “Punch” key to throw it."), inventory_image = lingering_image(color), groups = {brewitem=1, not_in_creative_inventory=0}, on_use = function(item, placer, pointed_thing) diff --git a/mods/ITEMS/mcl_potions/potions.lua b/mods/ITEMS/mcl_potions/potions.lua index 43e7e94b2..ef0414428 100644 --- a/mods/ITEMS/mcl_potions/potions.lua +++ b/mods/ITEMS/mcl_potions/potions.lua @@ -9,6 +9,7 @@ local potion_image = function(colorstring, opacity) end local how_to_drink = S("Use the “Place” key to drink it.") +local potion_intro = S("Drinking a potion gives you a particular effect.") local function time_string(dur) if not dur then return nil end @@ -66,7 +67,7 @@ local function register_potion(def) if effect and def.is_dur then _tt = perc_string(effect).." | "..time_string(dur) if def.name == "poison" or def.name == "regeneration" then - _tt = "1/2 Heart/"..effect.."sec | "..time_string(dur) + _tt = "1/2 heart/"..effect.."s | "..time_string(dur) end elseif def.name == "healing" or def.name == "harming" then _tt = ((effect / 2) - ((effect / 2)% 0.5)).." Hearts" @@ -106,15 +107,32 @@ local function register_potion(def) return function() end end + local desc + if not def.no_potion then + desc = S("@1 Potion", def.description) + else + desc = def.description + end + local potion_longdesc = def._longdesc + if not def.no_effect then + potion_longdesc = potion_intro .. "\n" .. def._longdesc + end + local potion_usagehelp + local basic_potion_tt + if def.name ~= "dragon_breath" then + potion_usagehelp = how_to_drink + basic_potion_tt = get_tt(def._tt, def.effect, dur) + end + minetest.register_craftitem("mcl_potions:"..def.name, { - description = S(def.description), - _tt_help = get_tt(def._tt, def.effect, dur), - _doc_items_longdesc = def._longdesc, - _doc_items_usagehelp = how_to_drink, + description = desc, + _tt_help = basic_potion_tt, + _doc_items_longdesc = potion_longdesc, + _doc_items_usagehelp = potion_usagehelp, stack_max = def.stack_max or 1, inventory_image = def.image or potion_image(def.color), wield_image = def.image or potion_image(def.color), - groups = def.groups or {brewitem=1, food=3, can_eat_when_full=1, not_in_creative_inventory=0}, + groups = def.groups or {brewitem=1, food=3, can_eat_when_full=1 }, on_place = on_use, on_secondary_use = on_use, }) @@ -125,36 +143,46 @@ local function register_potion(def) local splash_def = { tt = get_tt(def._tt, def.effect, splash_dur), + longdesc = def._longdesc, potion_fun = get_splash_fun(def.effect, splash_dur), + no_effect = def.no_effect, } local ling_def if def.name == "healing" or def.name == "harming" then ling_def = { tt = get_tt(def._tt, def.effect*mcl_potions.LINGERING_FACTOR, ling_dur), + longdesc = def._longdesc, potion_fun = get_lingering_fun(def.effect*mcl_potions.LINGERING_FACTOR, ling_dur), + no_effect = def.no_effect, } else ling_def = { tt = get_tt(def._tt, def.effect, ling_dur), + longdesc = def._longdesc, potion_fun = get_lingering_fun(def.effect, ling_dur), + no_effect = def.no_effect, } end local arrow_def = { tt = get_tt(def._tt, def.effect, dur/8.), + longdesc = def._longdesc, potion_fun = get_arrow_fun(def.effect, dur/8.), + no_effect = def.no_effect, } - if def.color and def.name ~= "dragon_breath" then -- dont' splash dragon's breath... - mcl_potions.register_splash(def.name, S("Splash "..def.description), def.color, splash_def) - mcl_potions.register_lingering(def.name, S("Lingering "..def.description), def.color, ling_def) - mcl_potions.register_arrow(def.name, S("Arrow of "..def.description), def.color, arrow_def) + if def.color and not def.no_throwable then + mcl_potions.register_splash(def.name, S("Splash @1 Potion", def.description), def.color, splash_def) + mcl_potions.register_lingering(def.name, S("Lingering @1 Potion", def.description), def.color, ling_def) + if not def.no_arrow then + mcl_potions.register_arrow(def.name, S("Arrow of @1", def.description), def.color, arrow_def) + end end if def.is_II then - local desc_mod = " II" + local desc_mod = S(" II") local effect_II if def.name == "healing" or def.name == "harming" then @@ -171,7 +199,7 @@ local function register_potion(def) if def.name == "slowness" then dur_2 = 20 effect_II = 0.40 - desc_mod = " IV" + desc_mod = S(" IV") end local on_use = function (itemstack, user, pointed_thing) @@ -182,14 +210,14 @@ local function register_potion(def) end minetest.register_craftitem("mcl_potions:"..def.name.."_2", { - description = S(def.description..desc_mod), + description = S("@1 Potion@2", def.description, desc_mod), _tt_help = get_tt(def._tt_2, effect_II, dur_2), - _doc_items_longdesc = def._longdesc, - _doc_items_usagehelp = how_to_drink, + _doc_items_longdesc = potion_longdesc, + _doc_items_usagehelp = potion_usagehelp, stack_max = def.stack_max or 1, inventory_image = def.image or potion_image(def.color), wield_image = def.image or potion_image(def.color), - groups = def.groups or {brewitem=1, food=3, can_eat_when_full=1, not_in_creative_inventory=0}, + groups = def.groups or {brewitem=1, food=3, can_eat_when_full=1}, on_place = on_use, on_secondary_use = on_use, }) @@ -202,12 +230,16 @@ local function register_potion(def) if def.name == "healing" then splash_def_2 = { tt = get_tt(def._tt_2, 7, splash_dur_2), + longdesc = def._longdesc, potion_fun = get_splash_fun(7, splash_dur_2), + no_effect = def.no_effect, } else splash_def_2 = { tt = get_tt(def._tt_2, effect_II, splash_dur_2), + longdesc = def._longdesc, potion_fun = get_splash_fun(effect_II, splash_dur_2), + no_effect = def.no_effect, } end @@ -216,24 +248,32 @@ local function register_potion(def) if def.name == "healing" or def.name == "harming" then ling_def_2 = { tt = get_tt(def._tt_2, effect_II*mcl_potions.LINGERING_FACTOR, ling_dur_2), + longdesc = def._longdesc, potion_fun = get_lingering_fun(effect_II*mcl_potions.LINGERING_FACTOR, ling_dur_2), + no_effect = def.no_effect, } else ling_def_2 = { tt = get_tt(def._tt_2, effect_II, ling_dur_2), + longdesc = def._longdesc, potion_fun = get_lingering_fun(effect_II, ling_dur_2), + no_effect = def.no_effect, } end local arrow_def_2 = { tt = get_tt(def._tt_2, effect_II, dur_2/8.), + longdesc = def._longdesc, potion_fun = get_arrow_fun(effect_II, dur_2/8.), + no_effect = def.no_effect, } - if def.color then - mcl_potions.register_splash(def.name.."_2", S("Splash "..def.description..desc_mod), def.color, splash_def_2) - mcl_potions.register_lingering(def.name.."_2", S("Lingering "..def.description..desc_mod), def.color, ling_def_2) - mcl_potions.register_arrow(def.name.."_2", S("Arrow of "..def.description..desc_mod), def.color, arrow_def_2) + if def.color and not def.no_throwable then + mcl_potions.register_splash(def.name.."_2", S("Splash @1@2 Potion", def.description, desc_mod), def.color, splash_def_2) + mcl_potions.register_lingering(def.name.."_2", S("Lingering @1@2 Potion", def.description, desc_mod), def.color, ling_def_2) + if not def.no_arrow then + mcl_potions.register_arrow(def.name.."_2", S("Arrow of @1@2", def.description, desc_mod), def.color, arrow_def_2) + end end end @@ -253,14 +293,14 @@ local function register_potion(def) end minetest.register_craftitem("mcl_potions:"..def.name.."_plus", { - description = S(def.description.." +"), + description = S("@1 + Potion", def.description), _tt_help = get_tt(def._tt_plus, def.effect, dur_pl), - _doc_items_longdesc = def._longdesc, - _doc_items_usagehelp = how_to_drink, + _doc_items_longdesc = potion_longdesc, + _doc_items_usagehelp = potion_usagehelp, stack_max = 1, inventory_image = def.image or potion_image(def.color), wield_image = def.image or potion_image(def.color), - groups = def.groups or {brewitem=1, food=3, can_eat_when_full=1, not_in_creative_inventory=0}, + groups = def.groups or {brewitem=1, food=3, can_eat_when_full=1}, on_place = on_use, on_secondary_use = on_use, }) @@ -271,20 +311,28 @@ local function register_potion(def) local splash_def_pl = { tt = get_tt(def._tt_plus, def.effect, splash_dur_pl), + longdesc = def._longdesc, potion_fun = get_splash_fun(def.effect, splash_dur_pl), + no_effect = def.no_effect, } local ling_def_pl = { tt = get_tt(def._tt_plus, def.effect, ling_dur_pl), + longdesc = def._longdesc, potion_fun = get_lingering_fun(def.effect, ling_dur_pl), + no_effect = def.no_effect, } local arrow_def_pl = { tt = get_tt(def._tt_pl, def.effect, dur_pl/8.), + longdesc = def._longdesc, potion_fun = get_arrow_fun(def.effect, dur_pl/8.), + no_effect = def.no_effect, } - if def.color then - mcl_potions.register_splash(def.name.."_plus", S("Splash "..def.description.." +"), def.color, splash_def_pl) - mcl_potions.register_lingering(def.name.."_plus", S("Lingering "..def.description.." +"), def.color, ling_def_pl) - mcl_potions.register_arrow(def.name.."_plus", S("Arrow of"..def.description.." +"), def.color, arrow_def_pl) + if def.color and not def.no_throwable then + mcl_potions.register_splash(def.name.."_plus", S("Splash @1 + Potion", def.description), def.color, splash_def_pl) + mcl_potions.register_lingering(def.name.."_plus", S("Lingering @1 + Potion", def.description), def.color, ling_def_pl) + if not def.no_arrow then + mcl_potions.register_arrow(def.name.."_plus", S("Arrow of @1 +", def.description), def.color, arrow_def_pl) + end end end @@ -309,26 +357,32 @@ end local awkward_def = { name = "awkward", - description = "Awkward Potion", + description = S("Awkward"), + no_arrow = true, + no_effect = true, _tt = S("No effect"), _longdesc = S("Has an awkward taste and is used for brewing potions."), color = "#0000FF", - groups = {brewitem=1, food=3, can_eat_when_full=1, not_in_creative_inventory=0}, + groups = {brewitem=1, food=3, can_eat_when_full=1}, on_use = minetest.item_eat(0, "mcl_potions:glass_bottle"), } local mundane_def = { name = "mundane", - description = "Mundane Potion", + description = S("Mundane"), + no_arrow = true, + no_effect = true, _tt = S("No effect"), - longdesc = S("Has a terrible taste and is not useful for brewing potions."), + _longdesc = S("Has a terrible taste and is not useful for brewing potions."), color = "#0000FF", on_use = minetest.item_eat(0, "mcl_potions:glass_bottle"), } local thick_def = { name = "thick", - description = "Thick Potion", + description = S("Thick"), + no_arrow = true, + no_effect = true, _tt = S("No effect"), _longdesc = S("Has a bitter taste and is not useful for brewing potions."), color = "#0000FF", @@ -337,21 +391,24 @@ local thick_def = { local dragon_breath_def = { name = "dragon_breath", - description = "Dragon's Breath", - _tt = S("No effect"), - _longdesc = S("Combine with Splash potions to create a Lingering effect"), + description = S("Dragon's Breath"), + no_arrow = true, + no_potion = true, + no_throwable = true, + no_effect = true, + _longdesc = S("This item is used in brewing and can be combined with splash potions to create lingering potions."), color = "#BF4567", - groups = { brewitem = 1, not_in_creative_inventory = 0 }, + groups = { brewitem = 1 }, on_use = nil, stack_max = 64, } local healing_def = { name = "healing", - description = "Healing Potion", - _tt = S("+2 Hearts"), - _tt_2 = S("+4 Hearts"), - _longdesc = S("Drink to heal yourself"), + description = S("Healing"), + _tt = S("+2 hearts"), + _tt_2 = S("+4 hearts"), + _longdesc = S("Instantly heals."), color = "#CC0000", effect = 4, on_use = mcl_potions.healing_func, @@ -361,10 +418,10 @@ local healing_def = { local harming_def = { name = "harming", - description = "Harming Potion", - _tt = S("-3 Hearts"), - _tt_II = S("-6 Hearts"), - _longdesc = S("Drink to heal yourself"), + description = S("Harming"), + _tt = S("-3 hearts"), + _tt_II = S("-6 hearts"), + _longdesc = S("Instantly deals damage."), color = "#660099", effect = -6, on_use = mcl_potions.healing_func, @@ -374,9 +431,9 @@ local harming_def = { local night_vision_def = { name = "night_vision", - description = "Night Vision Potion", + description = S("Night Vision"), _tt = nil, - _longdesc = S("Drink to see in the dark."), + _longdesc = S("Grants the ability to see in darkness."), color = "#1010AA", effect = nil, is_dur = true, @@ -386,9 +443,9 @@ local night_vision_def = { local swiftness_def = { name = "swiftness", - description = "Swiftness Potion", + description = S("Swiftness"), _tt = nil, - _longdesc = S("Drink to increase your speed."), + _longdesc = S("Increases walking speed."), color = "#009999", effect = 1.2, is_dur = true, @@ -399,9 +456,9 @@ local swiftness_def = { local slowness_def = { name = "slowness", - description = "Slowness Potion", + description = S("Slowness"), _tt = nil, - _longdesc = S("Drink to become sluggish"), + _longdesc = S("Decreases walking speed."), color = "#000080", effect = 0.85, is_dur = true, @@ -413,9 +470,9 @@ local slowness_def = { local leaping_def = { name = "leaping", - description = "Leaping Potion", + description = S("Leaping"), _tt = nil, - _longdesc = S("Drink to leap tall buildings in a single bound!"), + _longdesc = S("Increases jump strength."), color = "#00CC33", effect = 1.15, is_dur = true, @@ -426,9 +483,9 @@ local leaping_def = { local poison_def = { name = "poison", - description = "Poison Potion", + description = S("Poison"), _tt = nil, - _longdesc = S("Poison mobs or players with this dangerous potion."), + _longdesc = S("Applies the poison effect which deals damage at a regular interval."), color = "#447755", effect = 2.5, is_dur = true, @@ -440,9 +497,9 @@ local poison_def = { local regeneration_def = { name = "regeneration", - description = "Regeneration Potion", + description = S("Regeneration"), _tt = nil, - _longdesc = S("Regenerate mobs or players with this healing potion over time."), + _longdesc = S("Regenerates health over time."), color = "#B52CC2", effect = 2.5, is_dur = true, @@ -453,9 +510,9 @@ local regeneration_def = { local invisibility_def = { name = "invisibility", - description = "Invisibility Potion", + description = S("Invisibility"), _tt = nil, - _longdesc = S("Drink and become invisibile to mobs and players."), + _longdesc = S("Grants invisibility."), color = "#B0B0B0", is_dur = true, on_use = mcl_potions.invisiblility_func, @@ -464,9 +521,9 @@ local invisibility_def = { local water_breathing_def = { name = "water_breathing", - description = "Water Breathing Potion", + description = S("Water Breathing"), _tt = nil, - _longdesc = S("Drink and breath underwater."), + _longdesc = S("Grants limitless breath underwater."), color = "#0000AA", is_dur = true, on_use = mcl_potions.water_breathing_func, @@ -475,9 +532,9 @@ local water_breathing_def = { local fire_resistance_def = { name = "fire_resistance", - description = "Fire Resistance Potion", + description = S("Fire Resistance"), _tt = nil, - _longdesc = S("Drink and resist fire damage."), + _longdesc = S("Grants immunity to damage from heat sources like fire."), color = "#D0A040", is_dur = true, on_use = mcl_potions.fire_resistance_func, @@ -499,12 +556,12 @@ end -- minetest.register_craftitem("mcl_potions:weakness", { --- description = S("Weakness Potion"), +-- description = S("Weakness"), -- _tt_help = S("-4 HP damage | 1:30"), -- _doc_items_longdesc = brewhelp, -- wield_image = potion_image("#6600AA"), -- inventory_image = potion_image("#6600AA"), --- groups = { brewitem=1, food=3, can_eat_when_full=1, not_in_creative_inventory=0 }, +-- groups = { brewitem=1, food=3, can_eat_when_full=1 }, -- stack_max = 1, -- -- on_place = function(itemstack, user, pointed_thing) @@ -523,12 +580,12 @@ end -- }) -- -- minetest.register_craftitem("mcl_potions:weakness_plus", { --- description = S("Weakness Potion +"), +-- description = S("Weakness +"), -- _tt_help = S("-4 HP damage | 4:00"), -- _doc_items_longdesc = brewhelp, -- wield_image = potion_image("#7700BB"), -- inventory_image = potion_image("#7700BB"), --- groups = { brewitem=1, food=3, can_eat_when_full=1, not_in_creative_inventory=0 }, +-- groups = { brewitem=1, food=3, can_eat_when_full=1 }, -- stack_max = 1, -- -- on_place = function(itemstack, user, pointed_thing) @@ -547,12 +604,12 @@ end -- }) -- -- minetest.register_craftitem("mcl_potions:strength", { --- description = S("Strength Potion"), +-- description = S("Strength"), -- _tt_help = S("+3 HP damage | 3:00"), -- _doc_items_longdesc = brewhelp, -- wield_image = potion_image("#D444D4"), -- inventory_image = potion_image("#D444D4"), --- groups = { brewitem=1, food=3, can_eat_when_full=1, not_in_creative_inventory=0 }, +-- groups = { brewitem=1, food=3, can_eat_when_full=1 }, -- stack_max = 1, -- -- on_place = function(itemstack, user, pointed_thing) @@ -571,12 +628,12 @@ end -- }) -- -- minetest.register_craftitem("mcl_potions:strength_2", { --- description = S("Strength Potion II"), +-- description = S("Strength II"), -- _tt_help = S("+6 HP damage | 1:30"), -- _doc_items_longdesc = brewhelp, -- wield_image = potion_image("#D444E4"), -- inventory_image = potion_image("#D444E4"), --- groups = { brewitem=1, food=3, can_eat_when_full=1, not_in_creative_inventory=0 }, +-- groups = { brewitem=1, food=3, can_eat_when_full=1 }, -- stack_max = 1, -- -- on_place = function(itemstack, user, pointed_thing) @@ -595,12 +652,12 @@ end -- }) -- -- minetest.register_craftitem("mcl_potions:strength_plus", { --- description = S("Strength Potion +"), +-- description = S("Strength +"), -- _tt_help = S("+3 HP damage | 8:00"), -- _doc_items_longdesc = brewhelp, -- wield_image = potion_image("#D444F4"), -- inventory_image = potion_image("#D444F4"), --- groups = { brewitem=1, food=3, can_eat_when_full=1, not_in_creative_inventory=0 }, +-- groups = { brewitem=1, food=3, can_eat_when_full=1 }, -- stack_max = 1, -- -- on_place = function(itemstack, user, pointed_thing) diff --git a/mods/ITEMS/mcl_potions/splash.lua b/mods/ITEMS/mcl_potions/splash.lua index 8fa205109..779c75ac3 100644 --- a/mods/ITEMS/mcl_potions/splash.lua +++ b/mods/ITEMS/mcl_potions/splash.lua @@ -11,9 +11,18 @@ end function mcl_potions.register_splash(name, descr, color, def) local id = "mcl_potions:"..name.."_splash" + local longdesc = def.longdesc + if not def.no_effect then + longdesc = S("A throwable potion that will shatter on impact, where it gives all nearby players and mobs a status effect.") + if def.longdesc then + longdesc = longdesc .. "\n" .. def.longdesc + end + end minetest.register_craftitem(id, { description = descr, _tt_help = def.tt, + _doc_items_longdesc = longdesc, + _doc_items_usagehelp = S("Use the “Punch” key to throw it."), inventory_image = splash_image(color), groups = {brewitem=1, not_in_creative_inventory=0}, on_use = function(item, placer, pointed_thing) diff --git a/mods/ITEMS/mcl_potions/tipped_arrow.lua b/mods/ITEMS/mcl_potions/tipped_arrow.lua index 3e935ab39..b338a18e1 100644 --- a/mods/ITEMS/mcl_potions/tipped_arrow.lua +++ b/mods/ITEMS/mcl_potions/tipped_arrow.lua @@ -27,19 +27,23 @@ local function arrow_image(colorstring, opacity) end +local how_to_shoot = minetest.registered_items["mcl_bows:arrow"]._doc_items_usagehelp local mod_awards = minetest.get_modpath("awards") and minetest.get_modpath("mcl_achievements") local mod_button = minetest.get_modpath("mesecons_button") function mcl_potions.register_arrow(name, desc, color, def) + local longdesc = def.longdesc or "" minetest.register_craftitem("mcl_potions:"..name.."_arrow", { description = desc, _tt_help = S("Ammunition").."\n"..S("Damage from bow: 1-10").."\n"..S("Damage from dispenser: 3").."\n"..def.tt, _doc_items_longdesc = S("Arrows are ammunition for bows and dispensers.").."\n".. - S("An arrow fired from a bow has a regular damage of 1-9. At full charge, there's a 20% chance of a critical hit dealing 10 damage instead. An arrow fired from a dispenser always deals 3 damage.").."\n".. - S("Arrows might get stuck on solid blocks and can be retrieved again. They are also capable of pushing wooden buttons."), - _doc_items_usagehelp = S("To use arrows as ammunition for a bow, just put them anywhere in your inventory, they will be used up automatically. To use arrows as ammunition for a dispenser, place them in the dispenser's inventory. To retrieve an arrow that sticks in a block, simply walk close to it."), + S("An arrow fired from a bow has a regular damage of 1-9. At full charge, there's a 20% chance of a critical hit dealing 10 damage instead. An arrow fired from a dispenser always deals 3 damage.").."\n".. + S("Arrows might get stuck on solid blocks and can be retrieved again. They are also capable of pushing wooden buttons.").."\n".. + S("This particular arrow is tipped and will give an effect when it hits a player or mob.").."\n".. + longdesc, + _doc_items_usagehelp = how_to_shoot, inventory_image = "mcl_bows_arrow_inv.png^(mcl_potions_arrow_inv.png^[colorize:"..color..":100)", groups = { ammo=1, ammo_bow=1, brewitem=1}, _on_dispense = function(itemstack, dispenserpos, droppos, dropnode, dropdir) diff --git a/mods/MISC/mcl_wip/init.lua b/mods/MISC/mcl_wip/init.lua index c72907bd6..351714474 100644 --- a/mods/MISC/mcl_wip/init.lua +++ b/mods/MISC/mcl_wip/init.lua @@ -36,6 +36,8 @@ local wip_items = { -- "mcl_potions:strength_lingering", -- "mcl_potions:strength_plus_lingering", -- "mcl_potions:strength_2_lingering", + "mcl_potions:night_vision_arrow", + "mcl_potions:night_vision_plus_arrow", } local experimental_items = { }