hoes can deal damage to mobs and players

This commit is contained in:
tenplus1 2024-08-25 10:46:50 +01:00
parent e2f12c8061
commit ebe1db179d
3 changed files with 82 additions and 59 deletions

View File

@ -217,7 +217,7 @@ on an older map are enabled and growing properly.
### Changelog: ### Changelog:
- 1.49 - Added {eatable=1} groups to food items with the value giving HP when eaten, improved mineclone support, separated foods from crop files. - 1.49 - Added {eatable=1} groups to food items with the value giving HP when eaten, improved mineclone support, separated foods from crop files., hoes can deal damage.
- 1.48 - added 'farming_use_utensils' setting to enable/disable utensils in recipes, added mayonnaise (thx felfa), added gingerbread man, Added MineClone2 compatibility - 1.48 - added 'farming_use_utensils' setting to enable/disable utensils in recipes, added mayonnaise (thx felfa), added gingerbread man, Added MineClone2 compatibility
- 1.47 - Now blueberries can make blue dye, tweak soil types to work better with older 0.4.x clients and add spanish translation (thx mckaygerhard), add trellis setting to registered_crops and fix pea and soy crop names (thx nixnoxus), add strawberries if ethereal mod not active, added asparagus; spinach; eggplant (thx Atlante for new textures), Sugar Cube - 1.47 - Now blueberries can make blue dye, tweak soil types to work better with older 0.4.x clients and add spanish translation (thx mckaygerhard), add trellis setting to registered_crops and fix pea and soy crop names (thx nixnoxus), add strawberries if ethereal mod not active, added asparagus; spinach; eggplant (thx Atlante for new textures), Sugar Cube
- 1.46 - Added min/max default light settings, added lettuce and blackberries with food items (thanks OgelGames), added soya, vanilla and sunflowers (thanks Felfa), added tofu, added salt crystals (thanks gorlock) - 1.46 - Added min/max default light settings, added lettuce and blackberries with food items (thanks OgelGames), added soya, vanilla and sunflowers (thanks Felfa), added tofu, added salt crystals (thanks gorlock)

View File

@ -28,6 +28,7 @@ farming.register_hoe = function(name, def)
inventory_image = def.inventory_image, inventory_image = def.inventory_image,
groups = def.groups, groups = def.groups,
sound = {breaks = "default_tool_breaks"}, sound = {breaks = "default_tool_breaks"},
damage_groups = def.damage_groups,
on_use = function(itemstack, user, pointed_thing) on_use = function(itemstack, user, pointed_thing)
return farming.hoe_on_use(itemstack, user, pointed_thing, def.max_uses) return farming.hoe_on_use(itemstack, user, pointed_thing, def.max_uses)
@ -58,12 +59,11 @@ end
function farming.hoe_on_use(itemstack, user, pointed_thing, uses) function farming.hoe_on_use(itemstack, user, pointed_thing, uses)
local pt = pointed_thing local pt = pointed_thing or {}
local is_used = false
-- am I going to hoe the top of a dirt node? -- am I going to hoe the top of a dirt node?
if not pt or pt.type ~= "node" or pt.above.y ~= pt.under.y + 1 then if pt.type == "node" and pt.above.y == pt.under.y + 1 then
return
end
local under = minetest.get_node(pt.under) local under = minetest.get_node(pt.under)
local upos = pointed_thing.under local upos = pointed_thing.under
@ -99,22 +99,38 @@ function farming.hoe_on_use(itemstack, user, pointed_thing, uses)
end end
-- turn the node into soil, wear out item and play sound -- turn the node into soil, wear out item and play sound
minetest.set_node(pt.under, {name = ndef.soil.dry}) minetest.set_node(pt.under, {name = ndef.soil.dry}) ; is_used = true
minetest.sound_play("default_dig_crumbly", {pos = pt.under, gain = 0.5}, true) minetest.sound_play("default_dig_crumbly", {pos = pt.under, gain = 0.5}, true)
end
local wdef = itemstack:get_definition() local wdef = itemstack:get_definition()
local wear = 65535 / (uses - 1) local wear = 65535 / (uses - 1)
if farming.is_creative(user:get_player_name()) then -- using hoe as weapon
if pt.type == "object" then
if mod_tr then local ent = pt.ref and pt.ref:get_luaentity()
wear = 1 local dir = user:get_look_dir()
else
wear = 0 if (ent and ent.name ~= "__builtin:item"
and ent.name ~= "__builtin:falling_node") or pt.ref:is_player() then
pt.ref:punch(user, nil, {full_punch_interval = 1.0,
damage_groups = wdef.damage_groups}, dir)
is_used = true
end end
end end
-- only when used on soil top or external entity
if is_used then
-- cretive doesnt wear tools but toolranks registers uses with wear so set to 1
if farming.is_creative(user:get_player_name()) then
if mod_tr then wear = 1 else wear = 0 end
end
if mod_tr then if mod_tr then
itemstack = toolranks.new_afteruse(itemstack, user, under, {wear = wear}) itemstack = toolranks.new_afteruse(itemstack, user, under, {wear = wear})
else else
@ -124,6 +140,7 @@ function farming.hoe_on_use(itemstack, user, pointed_thing, uses)
if itemstack:get_count() == 0 and wdef.sound and wdef.sound.breaks then if itemstack:get_count() == 0 and wdef.sound and wdef.sound.breaks then
minetest.sound_play(wdef.sound.breaks, {pos = pt.above, gain = 0.5}, true) minetest.sound_play(wdef.sound.breaks, {pos = pt.above, gain = 0.5}, true)
end end
end
return itemstack return itemstack
end end
@ -134,7 +151,8 @@ farming.register_hoe(":farming:hoe_wood", {
description = S("Wooden Hoe"), description = S("Wooden Hoe"),
inventory_image = "farming_tool_woodhoe.png", inventory_image = "farming_tool_woodhoe.png",
max_uses = 30, max_uses = 30,
material = "group:wood" material = "group:wood",
damage_groups = {fleshy = 2}
}) })
minetest.register_craft({ minetest.register_craft({
@ -147,7 +165,8 @@ farming.register_hoe(":farming:hoe_stone", {
description = S("Stone Hoe"), description = S("Stone Hoe"),
inventory_image = "farming_tool_stonehoe.png", inventory_image = "farming_tool_stonehoe.png",
max_uses = 90, max_uses = 90,
material = "group:stone" material = "group:stone",
damage_groups = {fleshy = 2}
}) })
farming.register_hoe(":farming:hoe_steel", { farming.register_hoe(":farming:hoe_steel", {
@ -162,7 +181,8 @@ farming.register_hoe(":farming:hoe_bronze", {
inventory_image = "farming_tool_bronzehoe.png", inventory_image = "farming_tool_bronzehoe.png",
max_uses = 250, max_uses = 250,
groups = {not_in_creative_inventory = 1}, groups = {not_in_creative_inventory = 1},
material = "default:bronze_ingot" material = "default:bronze_ingot",
damage_groups = {fleshy = 3}
}) })
farming.register_hoe(":farming:hoe_mese", { farming.register_hoe(":farming:hoe_mese", {
@ -170,13 +190,15 @@ farming.register_hoe(":farming:hoe_mese", {
inventory_image = "farming_tool_mesehoe.png", inventory_image = "farming_tool_mesehoe.png",
max_uses = 350, max_uses = 350,
groups = {not_in_creative_inventory = 1}, groups = {not_in_creative_inventory = 1},
damage_groups = {fleshy = 4}
}) })
farming.register_hoe(":farming:hoe_diamond", { farming.register_hoe(":farming:hoe_diamond", {
description = S("Diamond Hoe"), description = S("Diamond Hoe"),
inventory_image = "farming_tool_diamondhoe.png", inventory_image = "farming_tool_diamondhoe.png",
max_uses = 500, max_uses = 500,
groups = {not_in_creative_inventory = 1} groups = {not_in_creative_inventory = 1},
damage_groups = {fleshy = 4}
}) })
-- Toolranks support -- Toolranks support

View File

@ -5,13 +5,14 @@
]] ]]
-- Translation support -- Translation support
local S = minetest.get_translator("farming") local S = minetest.get_translator("farming")
-- global -- global
farming = { farming = {
mod = "redo", mod = "redo",
version = "20240812", version = "20240825",
path = minetest.get_modpath("farming"), path = minetest.get_modpath("farming"),
select = {type = "fixed", fixed = {-0.5, -0.5, -0.5, 0.5, -5/16, 0.5}}, select = {type = "fixed", fixed = {-0.5, -0.5, -0.5, 0.5, -5/16, 0.5}},
select_final = {type = "fixed", fixed = {-0.5, -0.5, -0.5, 0.5, -2.5/16, 0.5}}, select_final = {type = "fixed", fixed = {-0.5, -0.5, -0.5, 0.5, -2.5/16, 0.5}},