Fix amulet issues

This commit is contained in:
ThePython 2024-03-05 07:30:11 -08:00
parent a64e38e4af
commit 16f5085932
5 changed files with 65 additions and 22 deletions

View File

@ -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},
}
})

View File

@ -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