1
0
mirror of https://gitlab.com/echoes91/spears.git synced 2025-06-30 22:50:21 +02:00

7 Commits
3.0 ... fix

Author SHA1 Message Date
b888cda310 fix itemframes issue nalc/nalc-server-mods#103
fix deployer issue nalc/nalc-server-mods#104
fix deprecated function
fix bad/Nonexistent collision detection on mobs/players, use collision box for very good detection
add translation client side
2022-07-21 17:35:07 +02:00
e2182ca004 Delete depends.txt, add mod.conf 2022-07-02 21:36:09 +02:00
a5b33a6e9a Fix crash 2020-08-09 00:58:12 +02:00
8770387fbc Change craft recipes that conflict with throwing mod 2020-08-08 23:46:38 +02:00
66c69c5265 Fix undeclared global variable warning at startup
DISABLE_GOLD_SPEAR
2020-06-20 16:31:26 +02:00
662e637595 Merge remote-tracking branch 'upstream/master' into nalc-1.2-dev 2020-06-14 22:16:47 +02:00
63d339a686 Corrige avertissement sur variable globale 2018-12-24 01:14:12 +01:00
12 changed files with 193 additions and 274 deletions

View File

@ -1,16 +1,3 @@
Version 3.0:
- First attempt to detect collisionboxes
- Implemented settings through settingtypes.txt, deprecating "spears.conf"
Version 2.4:
- Functions rewrite, fixed many vector/variable declarations and unknown node handling
- Added pigiron support
Version 2.3:
- Updated to Minetest 5.6.0 API
- Changed receipts to avoid being confused with arrows
- Various cleansing and fixes
Version 2.2: Version 2.2:
- "Hit detection" based on spearhead position - "Hit detection" based on spearhead position
- Spears go through buildable_to nodes (snow) - Spears go through buildable_to nodes (snow)

View File

@ -3,28 +3,23 @@
This mod adds spears to Minetest. This mod adds spears to Minetest.
How to download: How to download:
If you have this file, you probably know. If you have this file, you already know
If you're reading from gitlab.com, you already know.
Forum topic: Forum topic:
https://forum.minetest.net/viewtopic.php?f=11&t=13367 https://forum.minetest.net/viewtopic.php?f=11&t=13367
How to install: How to install:
Minetest content DB is the way!
http://wiki.minetest.com/wiki/Installing_Mods http://wiki.minetest.com/wiki/Installing_Mods
How to use the mod: How to use the mod:
Craft a spear with | | | (material) | Craft a spear with | stick | stick | (material) |, works also mirrored.
| | stick | |
| stick | | |,
works also mirrored.
Spears can be thrown using right mouse button, they either hurt someone or stick where they land on; damage depends on speed and material, flight trajectory is ballistic with (unrealistic) drag. Spears can be thrown using right mouse button, they either hurt someone or stick where they land on; damage depends on speed and material, flight trajectory is ballistic with (unrealistic) drag.
Spears can be used to fight, but are slower and weaker than swords. Spears can be used to fight, but are slower and weaker than swords.
Spears can be used to dig, but are slower and weaker and pickaxes. Spears can be used to dig, but are slower and weaker and pickaxes.
If you miss the target it's your fault, the spear is fine. If you miss the target it's your fault, the spear is fine.
You can grab a spear on the fly (or maybe wait until it falls?). You can grab a spear on the fly (or maybe wait until it falls?).
You can stick a spear into a block, but if you remove the block then the spear falls (obviously). You can stick a spear into a block, but if you remove the block then the spear falls (obviously).
This mod contains the word "spear" more than 100 times, if you want the exact number you can count them. This mod contains the word "spear" more than 100 times, if you want the exact number count them yourself.
If you feel clever, throw a spear right above you and look at it to see what happens. If you feel clever, throw a spear right above you and look at it to see what happens.
You can even throw a spear from above down to your foes, it's even easier to hit. You can even throw a spear from above down to your foes, it's even easier to hit.
Someone once reported to have hit its own foot but it takes practice to do that. Someone once reported to have hit its own foot but it takes practice to do that.

View File

@ -1,30 +1,7 @@
-- Seems like defaults in settingtypes.txt are not taken by default DISABLE_STONE_SPEAR = false
if minetest.settings:get("spears_throw_speed") == nil then DISABLE_STEEL_SPEAR = false
minetest.settings:set("spears_throw_speed", 13) DISABLE_COPPER_SPEAR = false
end DISABLE_BRONZE_SPEAR = false
DISABLE_DIAMOND_SPEAR = false
if minetest.settings:get("spears_drag_coeff") == nil then DISABLE_OBSIDIAN_SPEAR = false
minetest.settings:set("spears_drag_coeff", 0.1) DISABLE_GOLD_SPEAR = false
end
if minetest.settings:get("spears_node_cracky_limit") == nil then
minetest.settings:set("spears_node_cracky_limit", 3)
end
-- DISABLE_STONE_SPEAR = false
-- DISABLE_STEEL_SPEAR = false
-- DISABLE_COPPER_SPEAR = false
-- DISABLE_BRONZE_SPEAR = false
-- DISABLE_DIAMOND_SPEAR = false
-- DISABLE_OBSIDIAN_SPEAR = false
-- DISABLE_GOLD_SPEAR = false
-- DISABLE_IRON_SPEAR = false
-- SPEARS_THROW_SPEED = 13
SPEARS_V_ZERO = {x = 0, y = 0, z = 0}
-- SPEARS_DRAG_COEFF = 0.1
SPEARS_NODE_UNKNOWN = nil
SPEARS_NODE_THROUGH = 0
SPEARS_NODE_STICKY = 1
SPEARS_NODE_CRACKY = 2
-- SPEARS_NODE_CRACKY_LIMIT = 3

View File

@ -7,40 +7,37 @@ function spears_throw (itemstack, player, pointed_thing)
local pitch = player:get_look_vertical() local pitch = player:get_look_vertical()
local yaw = player:get_look_horizontal() local yaw = player:get_look_horizontal()
local rotation = vector.new(0, yaw + math.pi/2, pitch + math.pi/6) local rotation = vector.new(0, yaw + math.pi/2, pitch + math.pi/6)
local wear = itemstack:get_wear() -- Plant into node
local pointed_a = pointed_thing.above if pointed_thing.type == "node" then
local pointed_b = pointed_thing.under local node = minetest.get_node(pointed_thing.under)
if pointed_thing.type == "node" and vector.distance(pointed_a, throw_pos) < 1 then -- Stick into node if minetest.registered_nodes[node.name].walkable and vector.distance(pointed_thing.above, throw_pos) < 1 then
local node = minetest.get_node(pointed_b) local spear_object = minetest.add_entity(vector.divide(vector.add(vector.multiply(pointed_thing.above, 2), pointed_thing.under), 3), spear)
local check_node = spears_check_node(node.name)
if check_node == SPEARS_NODE_UNKNOWN then
return false
elseif check_node == SPEARS_NODE_CRACKY then
minetest.sound_play("default_metal_footstep", {pos = pointed_a}, true)
return false
elseif check_node == SPEARS_NODE_STICKY then
local spear_object = minetest.add_entity(vector.divide(vector.add(vector.multiply(pointed_a, 2), pointed_b), 3), spear)
spear_object:set_rotation(rotation) spear_object:set_rotation(rotation)
spear_object:get_luaentity()._wear = wear spear_object:get_luaentity()._wear = itemstack:get_wear()
spear_object:get_luaentity()._stickpos = pointed_b spear_object:get_luaentity()._stickpos = pointed_thing.under
minetest.sound_play("default_place_node", {pos = pointed_a}, true) return
return false
end end
else -- Avoid hitting yourself and throw end
local throw_speed = tonumber(minetest.settings:get("spears_throw_speed")) -- Avoid hitting yourself and throw
local throw_speed = 12
while vector.distance(player_pos, throw_pos) < 1.2 do while vector.distance(player_pos, throw_pos) < 1.2 do
throw_pos = vector.add(throw_pos, vector.multiply(direction, 0.1)) throw_pos = vector.add(throw_pos, vector.multiply(direction, 0.1))
end end
local player_vel = player:get_velocity() local player_vel
if player.is_fake_player then
player_vel = {x=0,y=0,z=0}
else
player_vel = player:get_velocity()
end
local spear_object = minetest.add_entity(throw_pos, spear) local spear_object = minetest.add_entity(throw_pos, spear)
spear_object:set_velocity(vector.add(player_vel, vector.multiply(direction, throw_speed))) spear_object:set_velocity(vector.add(player_vel, vector.multiply(direction, throw_speed)))
spear_object:set_rotation(rotation) spear_object:set_rotation(rotation)
minetest.sound_play("spears_throw", {pos = player_pos}, true) minetest.sound_play("spears_throw", {pos = player_pos}, true)
spear_object:get_luaentity()._wear = wear spear_object:get_luaentity()._wear = itemstack:get_wear()
spear_object:get_luaentity().lastpos = throw_pos
spear_object:get_luaentity()._stickpos = nil spear_object:get_luaentity()._stickpos = nil
return true return true
end end
end
function spears_set_entity(spear_type, base_damage, toughness) function spears_set_entity(spear_type, base_damage, toughness)
local SPEAR_ENTITY={ local SPEAR_ENTITY={
@ -50,6 +47,7 @@ function spears_set_entity(spear_type, base_damage, toughness)
visual_size = {x = 0.3, y = 0.3, z = 0.3}, visual_size = {x = 0.3, y = 0.3, z = 0.3},
wield_item = "spears:spear_" .. spear_type, wield_item = "spears:spear_" .. spear_type,
collisionbox = {-0.3, -0.3, -0.3, 0.3, 0.3, 0.3}, collisionbox = {-0.3, -0.3, -0.3, 0.3, 0.3, 0.3},
lastpos={},
}, },
on_activate = function (self, staticdata, dtime_s) on_activate = function (self, staticdata, dtime_s)
@ -68,156 +66,116 @@ function spears_set_entity(spear_type, base_damage, toughness)
end, end,
on_step = function(self, dtime) on_step = function(self, dtime)
local wear = self._wear if not self._wear then
if wear == nil then
self.object:remove() self.object:remove()
return false return
end end
local pos = self.object:get_pos()
local velocity = self.object:get_velocity() local velocity = self.object:get_velocity()
local speed = vector.length(velocity) local speed = vector.length(velocity)
if self._stickpos ~= nil then -- Spear is stuck -- Spear is stuck ?
if self._stickpos then
local node = minetest.get_node(self._stickpos) local node = minetest.get_node(self._stickpos)
local check_node = spears_check_node(node.name) local node_cracky = minetest.registered_nodes[node.name].groups.cracky
if check_node ~= SPEARS_NODE_STICKY then -- Fall when node is removed local pos = self.object:get_pos()
if node_cracky and node_cracky < 3 then
minetest.sound_play("default_metal_footstep", {pos = pos}, true)
self.object:remove() self.object:remove()
minetest.add_item(pos, {name='spears:spear_' .. spear_type, wear = wear}) minetest.add_item(pos, {name='spears:spear_' .. spear_type, wear = self._wear})
return false elseif not self._node_walkable then
minetest.sound_play("default_place_node", {pos = self._stickpos}, true)
end
self._node_walkable = minetest.registered_nodes[node.name].walkable
if not node or not self._node_walkable then -- Fall when node is removed
self.object:remove()
minetest.add_item(pos, {name='spears:spear_' .. spear_type, wear = self._wear})
return
end end
else -- Spear is flying else -- Spear is flying
local newpos = self.object:get_pos()
for _, pos in pairs(spears_get_trajectoire(self, newpos)) do
local direction = vector.normalize(velocity) local direction = vector.normalize(velocity)
local yaw = minetest.dir_to_yaw(direction) local yaw = minetest.dir_to_yaw(direction)
local pitch = math.acos(velocity.y/speed) - math.pi/3 local pitch = math.acos(velocity.y/speed) - math.pi/3
local spearhead_pos = vector.add(pos, vector.multiply(direction, 0.5)) local spearhead_pos = vector.add(pos, vector.multiply(direction, 0.5))
local node = minetest.get_node(spearhead_pos)
self.object:set_rotation({x = 0, y = yaw + math.pi/2, z = pitch}) self.object:set_rotation({x = 0, y = yaw + math.pi/2, z = pitch})
-- Hit a target? -- Hit someone?
local objects_in_radius = minetest.get_objects_inside_radius(spearhead_pos, 1) local objects_in_radius = minetest.get_objects_inside_radius(spearhead_pos, 2.5)
for _,object in ipairs(objects_in_radius) do for _,object in ipairs(objects_in_radius) do
if spears_check_target(self, object, spearhead_pos) and object:get_armor_groups().fleshy then if object:get_luaentity() ~= self and object:get_armor_groups().fleshy then
local objpos = object:get_pos()
local collisionbox = object:get_properties().collisionbox or {-0.5, -0.5, -0.5, 0.5, 0.5, 0.5}
if spears_touch(spearhead_pos, objpos, collisionbox) then
local damage = (speed + base_damage)^1.15 - 20 local damage = (speed + base_damage)^1.15 - 20
object:punch(self.object, 1.0, {full_punch_interval = 1.0, damage_groups = {fleshy=damage},}, direction) object:punch(self.object, 1.0, {full_punch_interval = 1.0, damage_groups = {fleshy=damage},}, direction)
self.object:remove() self.object:remove()
minetest.sound_play("spears_hit", {pos = pos}, true) minetest.sound_play("spears_hit", {pos = pos}, true)
wear = spears_wear(wear, toughness) minetest.add_item(pos, {name='spears:spear_' .. spear_type, wear = self._wear + 65535/toughness})
minetest.add_item(pos, {name='spears:spear_' .. spear_type, wear = wear}) return
return true end
end end
end end
-- Hit a node? -- Hit a node?
local node = minetest.get_node(spearhead_pos) if node and minetest.registered_nodes[node.name].walkable
local check_node = spears_check_node(node.name) and not minetest.registered_nodes[node.name].buildable_to
if check_node == SPEARS_NODE_UNKNOWN then and not (minetest.registered_nodes[node.name].groups.slab and spearhead_pos.y % 1 < 0.5)
self.object:remove() then -- Stick
minetest.add_item(pos, {name='spears:spear_' .. spear_type, wear = wear}) self.object:set_acceleration({x = 0, y = 0, z = 0})
elseif check_node ~= SPEARS_NODE_THROUGH then self.object:set_velocity({x = 0, y = 0, z = 0})
wear = spears_wear(wear, toughness) self._wear = self._wear + 65535/toughness
if wear >= 65535 then if self._wear >= 65535 then
minetest.sound_play("default_tool_breaks", {pos = pos}, true) minetest.sound_play("default_tool_breaks", {pos = pos}, true)
self.object:remove() self.object:remove()
minetest.add_item(pos, {name='defaut:stick'}) return
return false
elseif check_node == SPEARS_NODE_CRACKY then
minetest.sound_play("default_metal_footstep", {pos = pos}, true)
self.object:remove()
minetest.add_item(pos, {name='spears:spear_' .. spear_type, wear = wear})
return false
elseif check_node == SPEARS_NODE_STICKY then
self.object:set_acceleration(SPEARS_V_ZERO)
self.object:set_velocity(SPEARS_V_ZERO)
minetest.sound_play("default_place_node", {pos = pos}, true)
self._stickpos = spearhead_pos
self._wear = wear
end end
self._stickpos = spearhead_pos
self.lastpos = pos
return
else -- Get drag else -- Get drag
local viscosity = minetest.registered_nodes[node.name].liquid_viscosity local drag = math.max(minetest.registered_nodes[node.name].liquid_viscosity, 0.1)
local drag_coeff = tonumber(minetest.settings:get("spears_drag_coeff"))
local drag = math.max(viscosity, drag_coeff)
local acceleration = vector.multiply(velocity, -drag) local acceleration = vector.multiply(velocity, -drag)
acceleration.y = acceleration.y - 10 * ((7 - drag) / 7) acceleration.y = acceleration.y - 10 * ((7 - drag) / 7)
self.object:set_acceleration(acceleration) self.object:set_acceleration(acceleration)
end end
end end
self.lastpos = newpos
end
end, end,
} }
return SPEAR_ENTITY return SPEAR_ENTITY
end end
function spears_check_node(node_name)
local node = minetest.registered_nodes[node_name] function spears_get_trajectoire(self, newpos)
local cracky_limit = tonumber(minetest.settings:get("spears_node_cracky_limit")) if self.lastpos.x == nil then
if node == nil then return {newpos}
return SPEARS_NODE_UNKNOWN
elseif node.groups.cracky ~= nil and node.groups.cracky < cracky_limit then
return SPEARS_NODE_CRACKY
elseif node.walkable and not node.buildable_to then
return SPEARS_NODE_STICKY
else
return SPEARS_NODE_THROUGH
end end
local coord = {}
local dx = vector.distance({x=newpos["x"], y=0, z=0}, {x=self.lastpos["x"], y=0, z=0} )/2
local dy = vector.distance({x=0, y=newpos["y"], z=0}, {x=0, y=self.lastpos["y"], z=0} )/2
local dz = vector.distance({x=0, y=0, z=newpos["z"]}, {x=0, y=0, z=self.lastpos["z"]} )/2
if newpos["x"] < self.lastpos["x"] then
dx = -dx
end
if newpos["y"] < self.lastpos["y"] then
dy = -dy
end
if newpos["z"] < self.lastpos["z"] then
dz = -dz
end
table.insert(coord, {x=self.lastpos["x"]+dx, y=self.lastpos["y"]+dy ,z=self.lastpos["z"]+dz })
table.insert(coord, newpos)
return coord
end end
function spears_wear(initial_wear, toughness)
if not minetest.settings:get_bool("creative_mode") then
local wear = initial_wear + 65535/toughness
return wear
else
local wear = initial_wear
return wear
end
end
function spears_check_target(self, object, spearhead_pos) function spears_touch(pos, objpos, cbox)
if object:get_luaentity() == self then --colbox format {x1, y1, z1, x2, y2, z2}
return false if (pos.x < objpos.x + math.max(cbox[1], cbox[4]) and pos.x > objpos.x + math.min(cbox[1], cbox[4]))
elseif isPointInsideEntity(object, spearhead_pos) then and (pos.y < objpos.y + math.max(cbox[2], cbox[5]) and pos.y > objpos.y + math.min(cbox[2], cbox[5]))
-- print(self.name .. " hit " .. object:get_luaentity().name) and (pos.z < objpos.z + math.max(cbox[3], cbox[6]) and pos.z > objpos.z + math.min(cbox[3], cbox[6])) then
return true return true
else end
-- print(self.name .. " missed " .. object:get_luaentity().name)
return false return false
end end
end
-- Function to check if a point is inside an entity
function isPointInsideEntity(object, point)
local pos = object:get_pos()
local collisionbox = object:get_properties().collisionbox
local yaw = object:get_yaw()
-- Adjust position for the center of the collision box
local center = {
x = pos.x + (collisionbox[1] + collisionbox[4]) / 2,
y = pos.y + (collisionbox[2] + collisionbox[5]) / 2,
z = pos.z + (collisionbox[3] + collisionbox[6]) / 2
}
-- Rotate the point around the entity's center
local rotatedPoint = rotatePoint(point, center, yaw)
-- Check if the rotated point is inside the collision box
return rotatedPoint.x >= pos.x + collisionbox[1] and
rotatedPoint.x <= pos.x + collisionbox[4] and
rotatedPoint.y >= pos.y + collisionbox[2] and
rotatedPoint.y <= pos.y + collisionbox[5] and
rotatedPoint.z >= pos.z + collisionbox[3] and
rotatedPoint.z <= pos.z + collisionbox[6]
end
-- Function to rotate a point around a center and yaw angle
function rotatePoint(point, center, yaw)
local cosYaw = math.cos(yaw)
local sinYaw = math.sin(yaw)
local translatedX = point.x - center.x
local translatedZ = point.z - center.z
local rotatedX = translatedX * cosYaw - translatedZ * sinYaw
local rotatedZ = translatedX * sinYaw + translatedZ * cosYaw
return {
x = rotatedX + center.x,
y = point.y,
z = rotatedZ + center.z
}
end

View File

@ -1,14 +1,15 @@
dofile(minetest.get_modpath("spears").."/defaults.lua") dofile(minetest.get_modpath("spears").."/defaults.lua")
-- local input = io.open(minetest.get_modpath("spears").."/spears.conf", "r") local input = io.open(minetest.get_modpath("spears").."/spears.conf", "r")
-- if input then if input then
-- dofile(minetest.get_modpath("spears").."/spears.conf") dofile(minetest.get_modpath("spears").."/spears.conf")
-- input:close() input:close()
-- input = nil input = nil
-- end end
dofile(minetest.get_modpath("spears").."/functions.lua") dofile(minetest.get_modpath("spears").."/functions.lua")
dofile(minetest.get_modpath("spears").."/tools.lua") dofile(minetest.get_modpath("spears").."/tools.lua")
minetest.log("action", "[MOD] Spears loaded with throwing speed " .. minetest.settings:get("spears_throw_speed") .. " and drag coeff. " .. minetest.settings:get("spears_drag_coeff"))
minetest.log("action", "[spears] loaded.")

9
locale/spears.fr.tr Normal file
View File

@ -0,0 +1,9 @@
# textdomain: spears
Stone spear=Lance en pierre
Steel spear=Lance en acier
Copper spear=Lance en cuivre
Bronze spear=Lance en bronze
Obsidian spear=Lance en obsidienne
Diamond spear=Lance en diamant
Golden spear=Lance en or

11
locale/template.txt Normal file
View File

@ -0,0 +1,11 @@
# textdomain: spears
Stone spear=
Steel spear=
Copper spear=
Bronze spear=
Obsidian spear=
Diamond spear=
Golden spear=

View File

@ -1,8 +1,4 @@
name = spears name = spears
title = Separs
description = Add spears to Minetest
depends = default depends = default
optional_depends = pigiron
description = Add spears to Minetest, versatile weapons that can be thrown
author = Echoes91
title = Spears
min_minetest_version = 5.4

View File

@ -1,17 +0,0 @@
# Initial speed
spears_throw_speed (Spear's speed when throwing) float 13
# Drag and fluid viscosity slows down the spear
spears_drag_coeff (Drag coefficient for spears in air) float 0.1
# Crackyness limit to stick a spear into a node instead of bouncing
spears_node_cracky_limit (Cracky node level limit to stick a spear) int 3
spears_enable_stone_spear (Stone spear enabled) bool true
spears_enable_iron_spear (Iron spear enabled, requires pigiron mod) bool false
spears_enable_steel_spear (Steel spear enabled) bool true
spears_enable_copper_spear (Copper spear enabled) bool true
spears_enable_bronze_spear (Bronze spear enabled) bool true
spears_enable_obsidian_spear (Obsidian spear enabled) bool true
spears_enable_diamond_spear (Diamond spear enabled) bool true
spears_enable_gold_spear (Gold spear enabled) bool true

6
spears.conf.example Normal file
View File

@ -0,0 +1,6 @@
DISABLE_STONE_SPEAR = true
DISABLE_STEEL_SPEAR = true
DISABLE_COPPER_SPEAR = true
DISABLE_BRONZE_SPEAR = true
DISABLE_DIAMOND_SPEAR = true
DISABLE_OBSIDIAN_SPEAR = true

Binary file not shown.

Before

Width:  |  Height:  |  Size: 223 B

View File

@ -1,7 +1,10 @@
local S = minetest.get_translator("spears")
function spears_register_spear(spear_type, desc, base_damage, toughness, material) function spears_register_spear(spear_type, desc, base_damage, toughness, material)
minetest.register_tool("spears:spear_" .. spear_type, { minetest.register_tool("spears:spear_" .. spear_type, {
description = desc .. " spear", description = S(desc .. " spear"),
wield_image = "spears_spear_" .. spear_type .. ".png^[transform4", wield_image = "spears_spear_" .. spear_type .. ".png^[transform4",
inventory_image = "spears_spear_" .. spear_type .. ".png", inventory_image = "spears_spear_" .. spear_type .. ".png",
wield_scale= {x = 1.5, y = 1.5, z = 1.5}, wield_scale= {x = 1.5, y = 1.5, z = 1.5},
@ -13,6 +16,13 @@ function spears_register_spear(spear_type, desc, base_damage, toughness, materia
return itemstack return itemstack
end, end,
on_place = function(itemstack, user, pointed_thing) on_place = function(itemstack, user, pointed_thing)
if pointed_thing.type == "node" then
local node = minetest.get_node(pointed_thing.under)
if minetest.registered_nodes[node.name] and (node.name == "itemframes:pedestal" or node.name == "itemframes:frame") then
minetest.registered_nodes[node.name].on_rightclick(pointed_thing.under, node, user, itemstack)
return itemstack
end
end
spears_throw(itemstack, user, pointed_thing) spears_throw(itemstack, user, pointed_thing)
if not minetest.settings:get_bool("creative_mode") then if not minetest.settings:get_bool("creative_mode") then
itemstack:take_item() itemstack:take_item()
@ -38,60 +48,46 @@ function spears_register_spear(spear_type, desc, base_damage, toughness, materia
minetest.register_craft({ minetest.register_craft({
output = 'spears:spear_' .. spear_type, output = 'spears:spear_' .. spear_type,
recipe = { recipe = {
{"", "", material}, {'', '', material},
{"", "group:stick", ""}, {'', 'group:stick', ''},
{"group:stick", "", ""} {'group:stick', '', ''},
} }
}) })
minetest.register_craft({ minetest.register_craft({
output = 'spears:spear_' .. spear_type, output = 'spears:spear_' .. spear_type,
recipe = { recipe = {
{material, "", ""}, {material, '', ''},
{"", "group:stick", ""}, {'', 'group:stick', ''},
{"", "", "group:stick"} {'', '', 'group:stick'},
} }
}) })
end end
if minetest.settings:get_bool('spears_enable_stone_spear') then if not DISABLE_STONE_SPEAR then
spears_register_spear('stone', 'Stone', 4, 20, 'group:stone') spears_register_spear('stone', 'Stone', 4, 20, 'group:stone')
minetest.log("info", "[MOD] Stone spear enabled")
end end
if minetest.get_modpath("pigiron") then if not DISABLE_STEEL_SPEAR then
if minetest.settings:get_bool('spears_enable_iron_spear') then
spears_register_spear('iron', 'Iron', 5.5, 30, 'pigiron:iron_ingot')
end
if minetest.settings:get_bool('spears_enable_steel_spear') then
spears_register_spear('steel', 'Steel', 6, 35, 'default:steel_ingot')
end
if minetest.settings:get_bool('spears_enable_copper_spear') then
spears_register_spear('copper', 'Copper', 4.8, 30, 'default:copper_ingot')
end
if minetest.settings:get_bool('spears_enable_bronze_spear') then
spears_register_spear('bronze', 'Bronze', 5.5, 35, 'default:bronze_ingot')
end
else
if minetest.settings:get_bool('spears_enable_steel_spear') then
spears_register_spear('steel', 'Steel', 6, 30, 'default:steel_ingot') spears_register_spear('steel', 'Steel', 6, 30, 'default:steel_ingot')
end end
if minetest.settings:get_bool('spears_enable_copper_spear') then
spears_register_spear('copper', 'Copper', 5, 30, 'default:copper_ingot') if not DISABLE_COPPER_SPEAR then
end spears_register_spear('copper', 'Copper', 5, 35, 'default:copper_ingot')
if minetest.settings:get_bool('spears_enable_bronze_spear') then
spears_register_spear('bronze', 'Bronze', 6, 35, 'default:bronze_ingot')
end
end end
if minetest.settings:get_bool('spears_enable_obsidian_spear') then if not DISABLE_BRONZE_SPEAR then
spears_register_spear('bronze', 'Bronze', 6, 35, 'default:bronze_ingot')
end
if not DISABLE_OBSIDIAN_SPEAR then
spears_register_spear('obsidian', 'Obsidian', 8, 30, 'default:obsidian') spears_register_spear('obsidian', 'Obsidian', 8, 30, 'default:obsidian')
end end
if minetest.settings:get_bool('spears_enable_diamond_spear') then if not DISABLE_DIAMOND_SPEAR then
spears_register_spear('diamond', 'Diamond', 8, 40, 'default:diamond') spears_register_spear('diamond', 'Diamond', 8, 40, 'default:diamond')
end end
if minetest.settings:get_bool('spears_enable_gold_spear') then if not DISABLE_GOLD_SPEAR then
spears_register_spear('gold', 'Golden', 5, 40, 'default:gold_ingot') spears_register_spear('gold', 'Golden', 5, 40, 'default:gold_ingot')
end end