diff --git a/mods/CORE/mcl_util/init.lua b/mods/CORE/mcl_util/init.lua index 4684234e5..a79c970cd 100644 --- a/mods/CORE/mcl_util/init.lua +++ b/mods/CORE/mcl_util/init.lua @@ -728,3 +728,48 @@ function mcl_util.set_bone_position(obj, bone, pos, rot) obj:set_bone_position(bone, pos or current_pos, rot or current_rot) end end + +--[[Check for a protection violation in a given area. +-- +-- Applies is_protected() to a 3D lattice of points in the defined volume. The points are spaced +-- evenly throughout the volume and have a spacing similar to, but no larger than, "interval". +-- +-- @param pos1 A position table of the area volume's first edge. +-- @param pos2 A position table of the area volume's second edge. +-- @param player The player performing the action. +-- @param interval Optional. Max spacing between checked points at the volume. +-- Default: Same as minetest.is_area_protected. +-- +-- @return true on protection violation detection. false otherwise. +-- +-- @notes *All corners and edges of the defined volume are checked. +]] +function mcl_util.check_area_protection(pos1, pos2, player, interval) + local name = player and player:get_player_name() or "" + + local protected_pos = minetest.is_area_protected(pos1, pos2, name, interval) + if protected_pos then + minetest.record_protection_violation(protected_pos, name) + return true + end + + return false +end + +--[[Check for a protection violation on a single position. +-- +-- @param position A position table to check for protection violation. +-- @param player The player performing the action. +-- +-- @return true on protection violation detection. false otherwise. +]] +function mcl_util.check_position_protection(position, player) + local name = player and player:get_player_name() or "" + + if minetest.is_protected(position, name) then + minetest.record_protection_violation(position, name) + return true + end + + return false +end diff --git a/mods/ITEMS/mcl_farming/beetroot.lua b/mods/ITEMS/mcl_farming/beetroot.lua index 21096042b..c562a2558 100644 --- a/mods/ITEMS/mcl_farming/beetroot.lua +++ b/mods/ITEMS/mcl_farming/beetroot.lua @@ -102,22 +102,34 @@ minetest.register_node("mcl_farming:beetroot", { 0 seeds: 42.18% 1 seed: 14.06% 2 seeds: 18.75% - 3 seeds: 25% ]] + 3 seeds: 25% + + correction: should always drop at least 1 seed. (1-4 seeds, per the minecraft wiki) + --]] max_items = 2, items = { - { items = {"mcl_farming:beetroot_item"}, rarity = 1 }, - { items = {"mcl_farming:beetroot_seeds 3"}, rarity = 4 }, - { items = {"mcl_farming:beetroot_seeds 2"}, rarity = 4 }, - { items = {"mcl_farming:beetroot_seeds 1"}, rarity = 4 }, + {items = {"mcl_farming:beetroot_item"}}, + {items = {"mcl_farming:beetroot_seeds 4"}, rarity = 6}, + {items = {"mcl_farming:beetroot_seeds 3"}, rarity = 4}, + {items = {"mcl_farming:beetroot_seeds 2"}, rarity = 3}, + {items = {"mcl_farming:beetroot_seeds"}, rarity = 1}, }, }, + + _mcl_fortune_drop = { + discrete_uniform_distribution = true, + items = {"mcl_farming:beetroot_item", "mcl_farming:beetroot_seeds"}, + min_count = 1, + max_count = 3, + cap = 5, + }, tiles = {"mcl_farming_beetroot_3.png"}, inventory_image = "mcl_farming_beetroot_3.png", wield_image = "mcl_farming_beetroot_3.png", selection_box = { type = "fixed", fixed = { - {-0.5, -0.5, -0.5, 0.5, 3/16, 0.5} + {-0.5, -0.5, -0.5, 0.5, 3 / 16, 0.5} }, }, groups = {dig_immediate=3, not_in_creative_inventory=1,plant=1,attached_node=1,dig_by_water=1,destroy_by_lava_flow=1,dig_by_piston=1,beetroot=4}, @@ -161,7 +173,10 @@ minetest.register_craft({ mcl_farming:add_plant("plant_beetroot", "mcl_farming:beetroot", {"mcl_farming:beetroot_0", "mcl_farming:beetroot_1", "mcl_farming:beetroot_2"}, 68, 3) if minetest.get_modpath("doc") then - for i=1,2 do - doc.add_entry_alias("nodes", "mcl_farming:beetroot_0", "nodes", "mcl_farming:beetroot_"..i) + for i = 1, 2 do + doc.add_entry_alias("nodes", "mcl_farming:beetroot_0", "nodes", "mcl_farming:beetroot_" .. i) end end + +minetest.register_alias("beetroot_seeds", "mcl_farming:beetroot_seeds") +minetest.register_alias("beetroot", "mcl_farming:beetroot_item") diff --git a/mods/ITEMS/mcl_ocean/mod.conf b/mods/ITEMS/mcl_ocean/mod.conf index 9b639a7b0..a50609f52 100644 --- a/mods/ITEMS/mcl_ocean/mod.conf +++ b/mods/ITEMS/mcl_ocean/mod.conf @@ -1,4 +1,4 @@ name = mcl_ocean description = Includes various ocean nodes -depends = mcl_core, mcl_sounds, mcl_dye +depends = mcl_core, mcl_sounds, mcl_dye, mcl_util optional_depends = doc, doc_items, screwdriver diff --git a/mods/ITEMS/mcl_ocean/seagrass.lua b/mods/ITEMS/mcl_ocean/seagrass.lua index 8213fec10..8f319b29f 100644 --- a/mods/ITEMS/mcl_ocean/seagrass.lua +++ b/mods/ITEMS/mcl_ocean/seagrass.lua @@ -39,13 +39,7 @@ local function seagrass_on_place(itemstack, placer, pointed_thing) return itemstack end - if minetest.is_protected(pos_under, player_name) or - minetest.is_protected(pos_above, player_name) then - minetest.log("action", player_name - .. " tried to place " .. itemstack:get_name() - .. " at protected position " - .. minetest.pos_to_string(pos_under)) - minetest.record_protection_violation(pos_under, player_name) + if mcl_util.check_area_protection(pos_under, pos_above, placer) then return itemstack end diff --git a/mods/ITEMS/mcl_smoker/init.lua b/mods/ITEMS/mcl_smoker/init.lua index 696df4917..81f3c366f 100644 --- a/mods/ITEMS/mcl_smoker/init.lua +++ b/mods/ITEMS/mcl_smoker/init.lua @@ -88,11 +88,10 @@ end -- local function allow_metadata_inventory_put(pos, listname, index, stack, player) - local name = player:get_player_name() - if minetest.is_protected(pos, name) then - minetest.record_protection_violation(pos, name) + if mcl_util.check_position_protection(pos, player) then return 0 end + local meta = minetest.get_meta(pos) local inv = meta:get_inventory() if listname == "fuel" then diff --git a/mods/ITEMS/mcl_smoker/mod.conf b/mods/ITEMS/mcl_smoker/mod.conf index c6bda0fc1..c2c49db62 100644 --- a/mods/ITEMS/mcl_smoker/mod.conf +++ b/mods/ITEMS/mcl_smoker/mod.conf @@ -1,3 +1,3 @@ name = mcl_smoker -depends = mcl_init, mcl_formspec, mcl_core, mcl_furnaces, mcl_sounds, mcl_craftguide, mcl_achievements, mcl_particles +depends = mcl_init, mcl_formspec, mcl_core, mcl_furnaces, mcl_sounds, mcl_craftguide, mcl_achievements, mcl_particles, mcl_util optional_depends = doc, screwdriver