added engraved pick, fixed sword bullet
parent
19b5eded5b
commit
ea8660e071
Binary file not shown.
|
@ -1 +1,3 @@
|
|||
default
|
||||
farming?
|
||||
farming_addons?
|
||||
|
|
209
init.lua
209
init.lua
|
@ -26,6 +26,22 @@ minetest.register_tool("obsidianmese:sword", {
|
|||
}
|
||||
})
|
||||
|
||||
-- sword - balrog boss
|
||||
-- minetest.register_tool("obsidianmese:sword_balrog_boss", {
|
||||
-- description = "Balrog Boss Sword",
|
||||
-- inventory_image = "obsidianmese_sword_balrog_boss.png",
|
||||
-- tool_capabilities = {
|
||||
-- full_punch_interval = 3,
|
||||
-- max_drop_level=1,
|
||||
-- groupcaps={
|
||||
-- snappy={times={[1]=3.80, [2]=1.80, [3]=0.60}, uses=20, maxlevel=3},
|
||||
-- },
|
||||
-- -- wield_scale = {x=2.5, y=3, z=2},
|
||||
-- damage_groups = {fleshy=200},
|
||||
-- sound = {breaks = "default_tool_breaks"},
|
||||
-- }
|
||||
-- })
|
||||
|
||||
-- sword - engraved
|
||||
-- check if within physical map limits (-30911 to 30927)
|
||||
local fired_table = {}
|
||||
|
@ -50,7 +66,7 @@ local sync_table = function(owner)
|
|||
|
||||
fired_table[owner] = fired_table[owner] - 1
|
||||
|
||||
-- print(minetest.serialize(fired_table))
|
||||
print(minetest.serialize(fired_table))
|
||||
|
||||
end
|
||||
end
|
||||
|
@ -64,11 +80,23 @@ minetest.register_entity("obsidianmese:sword_bullet", {
|
|||
timer = 0,
|
||||
speed = 8,
|
||||
owner = "",
|
||||
twowillremove = 0,
|
||||
|
||||
on_activate = function(self, staticdata, dtime_s)
|
||||
self.object:set_armor_groups({ immortal = 1 })
|
||||
end,
|
||||
|
||||
get_staticdata = function(self)
|
||||
self.twowillremove = self.twowillremove + 1
|
||||
print("self.twowillremove: "..self.twowillremove)
|
||||
if self.twowillremove >= 2 then
|
||||
self.object:remove()
|
||||
sync_table(self.owner)
|
||||
return "object was removed"
|
||||
end
|
||||
return "object is alive"
|
||||
end,
|
||||
|
||||
on_punch = function (self, puncher, time_from_last_punch, tool_capabilities, dir)
|
||||
|
||||
if time_from_last_punch < 0.5 then return end
|
||||
|
@ -90,9 +118,11 @@ minetest.register_entity("obsidianmese:sword_bullet", {
|
|||
|
||||
self.timer = self.timer + 1
|
||||
|
||||
print(self.owner.." : "..self.timer)
|
||||
|
||||
if self.timer > 50
|
||||
or not within_limits(pos, 0) then
|
||||
or not within_limits(pos, 0)
|
||||
or self.owner == "" then
|
||||
sync_table(self.owner)
|
||||
self.object:remove()
|
||||
return
|
||||
|
@ -165,7 +195,7 @@ function fire_sword(itemstack, user, pointed_thing)
|
|||
fired_table[player_name] = 1
|
||||
end
|
||||
|
||||
-- print(minetest.serialize(fired_table))
|
||||
print(minetest.serialize(fired_table))
|
||||
|
||||
pos.x = pos.x + v.x
|
||||
pos.z = pos.z + v.z
|
||||
|
@ -178,22 +208,21 @@ function fire_sword(itemstack, user, pointed_thing)
|
|||
-- play shoot attack sound
|
||||
minetest.sound_play("throwing_sound", {
|
||||
pos = pos,
|
||||
gain = 1.0, -- default
|
||||
max_hear_distance = 32, -- default, uses an euclidean metric
|
||||
gain = 1.0, -- default
|
||||
max_hear_distance = 32, -- default, uses an euclidean metric
|
||||
})
|
||||
|
||||
local obj = minetest.add_entity(pos, "obsidianmese:sword_bullet")
|
||||
local ent = obj:get_luaentity()
|
||||
ent.owner = player_name or ""
|
||||
|
||||
if ent then
|
||||
ent.owner = player_name or ""
|
||||
|
||||
v.x = v.x * speed
|
||||
v.y = v.y * speed
|
||||
v.z = v.z * speed
|
||||
|
||||
obj:setvelocity(v)
|
||||
else
|
||||
obj:remove() -- arrow entity does not exist
|
||||
end
|
||||
|
||||
-- wear tool
|
||||
|
@ -242,6 +271,161 @@ minetest.register_tool("obsidianmese:pick", {
|
|||
},
|
||||
})
|
||||
|
||||
-- pick axe engraved
|
||||
|
||||
-- prevent pick axe engraved of placing item when clicken on one of the items from this list
|
||||
pick_engraved_place_blacklist = {
|
||||
["xdecor:itemframe"] = true
|
||||
}
|
||||
|
||||
function pick_engraved_place_add_wear(itemstack)
|
||||
-- wear tool
|
||||
local wdef = itemstack:get_definition()
|
||||
itemstack:add_wear(65535 / (400 - 1))
|
||||
-- Tool break sound
|
||||
if itemstack:get_count() == 0 and wdef.sound and wdef.sound.breaks then
|
||||
minetest.sound_play(wdef.sound.breaks, {pos = pointed_thing.above, gain = 0.5})
|
||||
end
|
||||
|
||||
return itemstack
|
||||
end
|
||||
|
||||
function pick_engraved_place(itemstack, placer, pointed_thing)
|
||||
local idx = placer:get_wield_index() + 1 -- item to right of wielded tool
|
||||
local inv = placer:get_inventory()
|
||||
local stack = inv:get_stack("main", idx) -- stack to right of tool
|
||||
local stack_name = stack:get_name()
|
||||
local under = pointed_thing.under
|
||||
local above = pointed_thing.above
|
||||
local node_under = minetest.get_node(under)
|
||||
local udef = {}
|
||||
local temp_stack = ""
|
||||
|
||||
-- handle objects/lua entitties
|
||||
if pointed_thing.type == "object" then
|
||||
local obj = pointed_thing.ref
|
||||
local name = obj:get_luaentity().name
|
||||
-- print("object_name: "..name)
|
||||
-- do something here
|
||||
end
|
||||
|
||||
-- handle nodes
|
||||
if pointed_thing.type == "node" then
|
||||
local pos = minetest.get_pointed_thing_position(pointed_thing)
|
||||
local pointed_node = minetest.get_node_or_nil(pos)
|
||||
|
||||
-- check if have to use default on_place first
|
||||
if pick_engraved_place_blacklist[pointed_node.name] ~= nil then
|
||||
-- print("minetest.item_place")
|
||||
return minetest.item_place(itemstack, placer, pointed_thing)
|
||||
end
|
||||
|
||||
if pointed_node ~= nil and stack_name ~= "" then
|
||||
local stack_def = minetest.registered_nodes[stack_name]
|
||||
local stack_name_split = string.split(stack_name, ":")
|
||||
local stack_mod = stack_name_split[1]
|
||||
-- print("pointed_thing: "..pointed_node.name)
|
||||
-- print("stack_name: "..stack_name)
|
||||
-- print("stack_mod: "..stack_mod)
|
||||
|
||||
udef = minetest.registered_nodes[stack_name]
|
||||
|
||||
-- not for farming - that should be part of a hoe
|
||||
if stack_mod ~= "farming" or stack_mod ~= "farming_addons" then
|
||||
if udef and udef.on_place then
|
||||
temp_stack = udef.on_place(stack, placer, pointed_thing) or stack
|
||||
inv:set_stack("main", idx, temp_stack)
|
||||
|
||||
itemstack = pick_engraved_place_add_wear(itemstack)
|
||||
return itemstack
|
||||
elseif udef and udef.on_use then
|
||||
temp_stack = udef.on_use(stack, placer, pointed_thing) or stack
|
||||
inv:set_stack("main", idx, temp_stack)
|
||||
|
||||
itemstack = pick_engraved_place_add_wear(itemstack)
|
||||
return itemstack
|
||||
end
|
||||
end
|
||||
|
||||
-- handle farming and farming_addons placement
|
||||
-- if stack_mod == "farming" or stack_mod == "farming_addons" then
|
||||
-- print("farming.place_seed")
|
||||
-- udef = minetest.registered_nodes[stack_name]
|
||||
|
||||
-- if udef and udef.on_place then
|
||||
-- temp_stack = udef.on_place(stack, placer, pointed_thing) or stack
|
||||
-- elseif udef and udef.on_use then
|
||||
-- temp_stack = udef.on_use(stack, placer, pointed_thing) or stack
|
||||
-- end
|
||||
|
||||
-- inv:set_stack("main", idx, temp_stack)
|
||||
|
||||
-- itemstack = pick_engraved_place_add_wear(itemstack)
|
||||
-- return itemstack
|
||||
-- end
|
||||
|
||||
-- handle default stairs placement
|
||||
-- if stack_mod == "stairs" then
|
||||
-- print("place stairs")
|
||||
-- udef = minetest.registered_nodes[stack_name]
|
||||
|
||||
-- if udef and udef.on_place then
|
||||
-- temp_stack = udef.on_place(stack, placer, pointed_thing) or stack
|
||||
-- end
|
||||
|
||||
-- inv:set_stack("main", idx, temp_stack)
|
||||
|
||||
-- itemstack = pick_engraved_place_add_wear(itemstack)
|
||||
-- return itemstack
|
||||
-- end
|
||||
|
||||
-- handle default torch placement
|
||||
if stack_name == "default:torch" then
|
||||
local wdir = minetest.dir_to_wallmounted(vector.subtract(under, above))
|
||||
local fakestack = stack
|
||||
|
||||
if wdir == 0 then
|
||||
fakestack:set_name("default:torch_ceiling")
|
||||
elseif wdir == 1 then
|
||||
fakestack:set_name("default:torch")
|
||||
else
|
||||
fakestack:set_name("default:torch_wall")
|
||||
end
|
||||
|
||||
temp_stack = minetest.item_place(fakestack, placer, pointed_thing, wdir)
|
||||
|
||||
temp_stack:set_name("default:torch")
|
||||
inv:set_stack("main", idx, temp_stack)
|
||||
|
||||
itemstack = pick_engraved_place_add_wear(itemstack)
|
||||
return itemstack
|
||||
end
|
||||
|
||||
end
|
||||
-- if everything else fails use default on_place
|
||||
stack = minetest.item_place(stack, placer, pointed_thing)
|
||||
inv:set_stack("main", idx, stack)
|
||||
|
||||
-- itemstack = pick_engraved_place_add_wear(itemstack)
|
||||
return itemstack
|
||||
end
|
||||
end
|
||||
|
||||
minetest.register_tool("obsidianmese:pick_engraved", {
|
||||
description = "Obsidian Mese Pickaxe Engraved - right click to place item next to the pickaxe in your inventory slot",
|
||||
inventory_image = "obsidianmese_pick_engraved.png",
|
||||
tool_capabilities = {
|
||||
full_punch_interval = 0.9,
|
||||
max_drop_level=3,
|
||||
groupcaps={
|
||||
cracky={times={[1]=2.0, [2]=1.0, [3]=0.50}, uses=200, maxlevel=3}
|
||||
},
|
||||
damage_groups = {fleshy=5},
|
||||
sound = {breaks = "default_tool_breaks"},
|
||||
},
|
||||
on_place = pick_engraved_place
|
||||
})
|
||||
|
||||
--
|
||||
-- Items
|
||||
--
|
||||
|
@ -286,6 +470,15 @@ minetest.register_craft({
|
|||
}
|
||||
})
|
||||
|
||||
minetest.register_craft({
|
||||
output = "obsidianmese:pick_engraved",
|
||||
recipe = {
|
||||
{"default:diamond", "default:diamond", "default:diamond"},
|
||||
{"", "default:obsidian_shard", ""},
|
||||
{"", "default:obsidian_shard", ""},
|
||||
}
|
||||
})
|
||||
|
||||
minetest.register_craft({
|
||||
output = "obsidianmese:mese_apple 4",
|
||||
recipe = {
|
||||
|
|
Binary file not shown.
After Width: | Height: | Size: 311 B |
Binary file not shown.
Before Width: | Height: | Size: 411 B After Width: | Height: | Size: 378 B |
Binary file not shown.
After Width: | Height: | Size: 364 B |
Binary file not shown.
After Width: | Height: | Size: 269 B |
Loading…
Reference in New Issue