Fix amulet issues
This commit is contained in:
parent
a64e38e4af
commit
16f5085932
|
@ -19,22 +19,26 @@ local function place_liquid(itemstack, player, pointed_thing)
|
|||
return click_test
|
||||
end
|
||||
|
||||
if not pointed_thing then return end
|
||||
local liquid = itemstack:get_name() == "exchangeclone:volcanite_amulet" and "lava" or "water"
|
||||
local cost = liquid == "lava" and 64 or 0
|
||||
local sound = liquid == "lava" and "exchangeclone_transmute" or "exchangeclone_water"
|
||||
|
||||
if pointed_thing.type == "node" then
|
||||
exchangeclone.play_sound(player, sound)
|
||||
if pointed_thing and pointed_thing.type == "node" then
|
||||
local bucket = ItemStack(exchangeclone.itemstrings[liquid.."_bucket"])
|
||||
bucket:get_definition().on_place(bucket, player, pointed_thing)
|
||||
else
|
||||
if (not exchangeclone.mcl) or minetest.settings:get_bool("mcl_buckets_use_select_box", false) then
|
||||
local velocity = player:get_look_dir()*20
|
||||
minetest.add_entity(player:get_pos(), "exchangeclone:projectile", minetest.serialize({
|
||||
velocity = vector.to_string(velocity),
|
||||
player = player:get_player_name(),
|
||||
itemstring = itemstack:get_name(),
|
||||
texture = liquid == "lava" and "exchangeclone_lava_projectile.png" or "exchangeclone_water_projectile.png"
|
||||
}))
|
||||
minetest.add_entity(
|
||||
vector.offset(player:get_pos(), 0, player:get_properties().eye_height, 0),
|
||||
"exchangeclone:projectile", minetest.serialize({
|
||||
velocity = vector.to_string(velocity),
|
||||
player = player:get_player_name(),
|
||||
itemstring = itemstack:get_name(),
|
||||
texture = liquid == "lava" and "exchangeclone_lava_projectile.png" or "exchangeclone_water_projectile.png"
|
||||
})
|
||||
)
|
||||
end
|
||||
player:_add_emc(-cost)
|
||||
end
|
||||
|
@ -44,7 +48,7 @@ minetest.register_entity("exchangeclone:projectile", {
|
|||
initial_properties = {
|
||||
hp_max = 1,
|
||||
physical = true,
|
||||
collide_with_objects = false,
|
||||
collide_with_objects = true,
|
||||
pointable = false,
|
||||
visual = "sprite",
|
||||
textures = {"blank.png"},
|
||||
|
@ -57,12 +61,16 @@ minetest.register_entity("exchangeclone:projectile", {
|
|||
self._player = table_data.player
|
||||
self.object:set_velocity(velocity)
|
||||
self.object:set_properties({textures = {table_data.texture}})
|
||||
if not self._player then self.object:remove() end
|
||||
end,
|
||||
on_step = function(self, dtime, moveresult)
|
||||
for _, collision in ipairs(moveresult.collisions) do
|
||||
if collision.type == "node" then
|
||||
local player = minetest.get_player_by_name(self._player)
|
||||
if not player then return end
|
||||
if not player then
|
||||
self.object:remove()
|
||||
return
|
||||
end
|
||||
local above = vector.new(collision.node_pos)
|
||||
if collision.old_velocity[collision.axis] < 0 then
|
||||
above[collision.axis] = above[collision.axis] + 1
|
||||
|
@ -70,9 +78,19 @@ minetest.register_entity("exchangeclone:projectile", {
|
|||
above[collision.axis] = above[collision.axis] - 1
|
||||
end
|
||||
place_liquid(ItemStack(self._itemstring), player, {type = "node", under = collision.node_pos, above = above})
|
||||
self.object:remove()
|
||||
break
|
||||
elseif collision.type == "object" then
|
||||
local obj = collision.object
|
||||
if exchangeclone.mcl then
|
||||
mcl_util.deal_damage(obj, 5, {type = "on_fire"})
|
||||
mcl_burning.set_on_fire(obj, 4)
|
||||
else
|
||||
obj:set_hp(obj:get_hp() - 5)
|
||||
if minetest.get_modpath("fire_plus") and obj:is_player() then
|
||||
fire_plus.burn_player(obj, 4, 1)
|
||||
end
|
||||
end
|
||||
end
|
||||
self.object:remove()
|
||||
end
|
||||
end
|
||||
})
|
||||
|
@ -141,7 +159,6 @@ minetest.register_tool("exchangeclone:volcanite_amulet", {
|
|||
-- Drowning damage looks the same in MCL and MTGs
|
||||
minetest.register_on_player_hpchange(function(player, hp_change, reason)
|
||||
if hp_change < 0 then
|
||||
minetest.log(dump({hp_change, reason}))
|
||||
if reason.type == "drown" then
|
||||
local inv = player:get_inventory()
|
||||
local hotbar_max = player:hud_get_hotbar_itemcount() + 1
|
||||
|
@ -151,7 +168,7 @@ minetest.register_on_player_hpchange(function(player, hp_change, reason)
|
|||
return 0
|
||||
end
|
||||
end
|
||||
elseif reason.type == "node_damage" and reason.node then
|
||||
elseif exchangeclone.mtg and reason.type == "node_damage" and reason.node then
|
||||
if fire_nodes[reason.node] then
|
||||
local inv = player:get_inventory()
|
||||
local hotbar_max = player:hud_get_hotbar_itemcount() + 1
|
||||
|
@ -183,4 +200,22 @@ if exchangeclone.mcl then
|
|||
end
|
||||
return damage
|
||||
end)
|
||||
end
|
||||
end
|
||||
|
||||
minetest.register_craft({
|
||||
output = "exchangeclone:evertide_amulet",
|
||||
recipe = {
|
||||
{exchangeclone.itemstrings.water_bucket, exchangeclone.itemstrings.water_bucket, exchangeclone.itemstrings.water_bucket},
|
||||
{"exchangeclone:dark_matter", "exchangeclone:dark_matter", "exchangeclone:dark_matter"},
|
||||
{exchangeclone.itemstrings.water_bucket, exchangeclone.itemstrings.water_bucket, exchangeclone.itemstrings.water_bucket},
|
||||
}
|
||||
})
|
||||
|
||||
minetest.register_craft({
|
||||
output = "exchangeclone:volcanite",
|
||||
recipe = {
|
||||
{exchangeclone.itemstrings.lava_bucket, exchangeclone.itemstrings.lava_bucket, exchangeclone.itemstrings.lava_bucket},
|
||||
{"exchangeclone:dark_matter", "exchangeclone:dark_matter", "exchangeclone:dark_matter"},
|
||||
{exchangeclone.itemstrings.lava_bucket, exchangeclone.itemstrings.lava_bucket, exchangeclone.itemstrings.lava_bucket},
|
||||
}
|
||||
})
|
|
@ -1,7 +1,7 @@
|
|||
-- Some of this is copied from `sneak_drop` by Krunegan because I was too lazy to do it myself
|
||||
local function pickup_items(player)
|
||||
local pos = player:get_pos()
|
||||
local objs = minetest.get_objects_inside_radius(pos, 5)
|
||||
local objs = minetest.get_objects_inside_radius(pos, 3)
|
||||
for j = 1, #objs do
|
||||
local obj = objs[j]
|
||||
if obj:get_luaentity() and obj:get_luaentity().name == "__builtin:item" then
|
||||
|
@ -12,12 +12,20 @@ local function pickup_items(player)
|
|||
if player:get_inventory():room_for_item("main", itemstack) then
|
||||
player:get_inventory():add_item("main", itemstack)
|
||||
obj:remove()
|
||||
minetest.sound_play("sneak_drop_pickup", {
|
||||
pos = pos,
|
||||
max_hear_distance = 16,
|
||||
gain = 0.4,
|
||||
})
|
||||
exchangeclone.play_sound(player, "exchangeclone_pickup")
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
minetest.register_tool("exchangeclone:black_hole_band", {
|
||||
description = "Black Hole Band",
|
||||
inventory_image = "exchangeclone_black_hole_band.png",
|
||||
groups = {disable_repair = 1, fire_immune = 1},
|
||||
_exchangeclone_passive = {
|
||||
func = pickup_items,
|
||||
hotbar = true,
|
||||
active_image = "exchangeclone_life_stone_active.png",
|
||||
exclude = {"exchangeclone:void_ring"}
|
||||
},
|
||||
})
|
Binary file not shown.
Binary file not shown.
After Width: | Height: | Size: 281 B |
Binary file not shown.
After Width: | Height: | Size: 346 B |
Loading…
Reference in New Issue