diff options
Diffstat (limited to 'crystal.lua')
-rw-r--r-- | crystal.lua | 67 |
1 files changed, 57 insertions, 10 deletions
diff --git a/crystal.lua b/crystal.lua index 42cb5ce..2b2868a 100644 --- a/crystal.lua +++ b/crystal.lua @@ -32,20 +32,67 @@ minetest.register_craftitem("ethereal:crystal_ingot", { wield_image = "crystal_ingot.png", }) -minetest.register_craft({ - output = "ethereal:crystal_ingot", - recipe = { - {"default:mese_crystal", "ethereal:crystal_spike"}, - {"ethereal:crystal_spike", "default:mese_crystal"}, - } -}) +if minetest.get_modpath("builtin_item") then + + minetest.override_item("ethereal:crystal_spike", { + + dropped_step = function(self, pos, dtime) + + self.ctimer = (self.ctimer or 0) + dtime + if self.ctimer < 5.0 then return end + self.ctimer = 0 + + if self.node_inside + and self.node_inside.name ~= "default:water_source" then + return + end + + local objs = core.get_objects_inside_radius(pos, 0.8) + + if not objs or #objs ~= 2 then return end + + local crystal, mese, ent = nil, nil, nil + + for k, obj in pairs(objs) do + + ent = obj:get_luaentity() + + if ent and ent.name == "__builtin:item" then + + if ent.itemstring == "default:mese_crystal 2" + and not mese then + + mese = obj + + elseif ent.itemstring == "ethereal:crystal_spike 2" + and not crystal then + + crystal = obj + end + end + end + + if mese and crystal then + + mese:remove() + crystal:remove() + + core.add_item(pos, "ethereal:crystal_ingot") + + return false + end + end + }) +end minetest.register_craft({ + type = "shapeless", output = "ethereal:crystal_ingot", recipe = { - {"ethereal:crystal_spike", "default:mese_crystal"}, - {"default:mese_crystal", "ethereal:crystal_spike"}, - } + "default:mese_crystal", "ethereal:crystal_spike", + "ethereal:crystal_spike", "default:mese_crystal", "bucket:bucket_water" + }, + replacements = { {"bucket:bucket_water", "bucket:bucket_empty"} } }) -- Crystal Block |