mirror of
https://git.minetest.land/MineClone2/MineClone2.git
synced 2024-12-05 09:13:16 +01:00
42778a3a6d
* xp bottle * bow and crossbow crits * megacrits added for mcl_bows, achievable only by (mcl_)luck
74 lines
2.5 KiB
Lua
74 lines
2.5 KiB
Lua
local S = minetest.get_translator(minetest.get_current_modname())
|
|
|
|
local mod_target = minetest.get_modpath("mcl_target")
|
|
|
|
minetest.register_entity("mcl_experience:bottle",{
|
|
textures = {"mcl_experience_bottle.png"},
|
|
hp_max = 1,
|
|
visual_size = {x = 0.35, y = 0.35},
|
|
collisionbox = {-0.1, -0.1, -0.1, 0.1, 0.1, 0.1},
|
|
pointable = false,
|
|
on_step = function(self, dtime)
|
|
local pos = self.object:get_pos()
|
|
local node = minetest.get_node(pos)
|
|
local n = node.name
|
|
if n ~= "air" and n ~= "mcl_portals:portal" and n ~= "mcl_portals:portal_end" and minetest.get_item_group(n, "liquid") == 0 then
|
|
minetest.sound_play("mcl_potions_breaking_glass", {pos = pos, max_hear_distance = 16, gain = 1})
|
|
mcl_experience.throw_xp(pos, math.random(3, 11) + (self._luck or 0))
|
|
minetest.add_particlespawner({
|
|
amount = 50,
|
|
time = 0.1,
|
|
minpos = vector.add(pos, vector.new(-0.1, 0.5, -0.1)),
|
|
maxpos = vector.add(pos, vector.new( 0.1, 0.6, 0.1)),
|
|
minvel = vector.new(-2, 0, -2),
|
|
maxvel = vector.new( 2, 2, 2),
|
|
minacc = vector.new(0, 0, 0),
|
|
maxacc = vector.new(0, 0, 0),
|
|
minexptime = 0.5,
|
|
maxexptime = 1.25,
|
|
minsize = 1,
|
|
maxsize = 2,
|
|
collisiondetection = true,
|
|
vertical = false,
|
|
texture = "mcl_particles_effect.png^[colorize:blue:127",
|
|
})
|
|
if mod_target and n == "mcl_target:target_off" then
|
|
mcl_target.hit(vector.round(pos), 0.4) --4 redstone ticks
|
|
end
|
|
self.object:remove()
|
|
end
|
|
end,
|
|
})
|
|
|
|
local function throw_xp_bottle(pos, dir, velocity, user)
|
|
minetest.sound_play("mcl_throwing_throw", {pos = pos, gain = 0.4, max_hear_distance = 16}, true)
|
|
local obj = minetest.add_entity(pos, "mcl_experience:bottle")
|
|
obj:set_velocity(vector.multiply(dir, velocity))
|
|
local acceleration = vector.multiply(dir, -3)
|
|
acceleration.y = -9.81
|
|
obj:set_acceleration(acceleration)
|
|
if user then
|
|
local ent = obj:get_luaentity()
|
|
local luck = mcl_luck.get_luck(user:get_player_name())
|
|
ent._luck = luck
|
|
end
|
|
end
|
|
|
|
minetest.register_craftitem("mcl_experience:bottle", {
|
|
description = S("Bottle o' Enchanting"),
|
|
inventory_image = "mcl_experience_bottle.png",
|
|
wield_image = "mcl_experience_bottle.png",
|
|
stack_max = 64,
|
|
on_use = function(itemstack, placer, pointed_thing)
|
|
throw_xp_bottle(vector.add(placer:get_pos(), vector.new(0, 1.5, 0)), placer:get_look_dir(), 10, placer)
|
|
if not minetest.is_creative_enabled(placer:get_player_name()) then
|
|
itemstack:take_item()
|
|
end
|
|
return itemstack
|
|
end,
|
|
_on_dispense = function(_, pos, _, _, dir)
|
|
throw_xp_bottle(vector.add(pos, vector.multiply(dir, 0.51)), dir, 10)
|
|
end
|
|
})
|
|
|