diff --git a/htspells/init.lua b/htspells/init.lua index f75fa0d..e61df7b 100644 --- a/htspells/init.lua +++ b/htspells/init.lua @@ -1,6 +1,7 @@ spells = { {"htspells:spell", "htspells:spell_entity"}, {"htspells:spell_fire", "htspells:spell_fire_entity"}, + {"htspells:spell_water", "htspells:spell_water_entity"}, } local htspells_shoot_spell = function(itemstack, player) @@ -91,6 +92,4 @@ minetest.register_craft({ dofile(minetest.get_modpath("htspells").."/spell.lua") dofile(minetest.get_modpath("htspells").."/fire_spell.lua") -dofile(minetest.get_modpath("htspells").."/teleport_spell.lua") -dofile(minetest.get_modpath("htspells").."/dig_spell.lua") -dofile(minetest.get_modpath("htspells").."/build_spell.lua") \ No newline at end of file +dofile(minetest.get_modpath("htspells").."/water_spell.lua") \ No newline at end of file diff --git a/htspells/textures/htspells_spell_water.png b/htspells/textures/htspells_spell_water.png new file mode 100644 index 0000000..8916102 Binary files /dev/null and b/htspells/textures/htspells_spell_water.png differ diff --git a/htspells/textures/htspells_spell_water_2.png b/htspells/textures/htspells_spell_water_2.png new file mode 100644 index 0000000..1446c61 Binary files /dev/null and b/htspells/textures/htspells_spell_water_2.png differ diff --git a/htspells/textures/htspells_spell_water_back.png b/htspells/textures/htspells_spell_water_back.png new file mode 100644 index 0000000..08acec6 Binary files /dev/null and b/htspells/textures/htspells_spell_water_back.png differ diff --git a/htspells/textures/htspells_spell_water_front.png b/htspells/textures/htspells_spell_water_front.png new file mode 100644 index 0000000..c0aaa44 Binary files /dev/null and b/htspells/textures/htspells_spell_water_front.png differ diff --git a/htspells/water_spell.lua b/htspells/water_spell.lua new file mode 100644 index 0000000..71b4744 --- /dev/null +++ b/htspells/water_spell.lua @@ -0,0 +1,125 @@ +minetest.register_craftitem("htspells:spell_water", { + description = "Aquamenti", + inventory_image = "htspells_spell_water.png", +}) + +minetest.register_node("htspells:spell_water_box", { + drawtype = "nodebox", + node_box = { + type = "fixed", + fixed = { + -- Shaft + {-6.5/17, -1.5/17, -1.5/17, 6.5/17, 1.5/17, 1.5/17}, + --Spitze + {-4.5/17, 2.5/17, 2.5/17, -3.5/17, -2.5/17, -2.5/17}, + {-8.5/17, 0.5/17, 0.5/17, -6.5/17, -0.5/17, -0.5/17}, + --Federn + {6.5/17, 1.5/17, 1.5/17, 7.5/17, 2.5/17, 2.5/17}, + {7.5/17, -2.5/17, 2.5/17, 6.5/17, -1.5/17, 1.5/17}, + {7.5/17, 2.5/17, -2.5/17, 6.5/17, 1.5/17, -1.5/17}, + {6.5/17, -1.5/17, -1.5/17, 7.5/17, -2.5/17, -2.5/17}, + + {7.5/17, 2.5/17, 2.5/17, 8.5/17, 3.5/17, 3.5/17}, + {8.5/17, -3.5/17, 3.5/17, 7.5/17, -2.5/17, 2.5/17}, + {8.5/17, 3.5/17, -3.5/17, 7.5/17, 2.5/17, -2.5/17}, + {7.5/17, -2.5/17, -2.5/17, 8.5/17, -3.5/17, -3.5/17}, + } + }, + tiles = {"htspells_spell_water.png", "htspells_spell_water.png", "htspells_spell_water_back.png", "htspells_spell_water_front.png", "htspells_spell_water_2.png", "htspells_spell_water.png"}, + groups = {not_in_creative_inventory=1}, +}) + +local HTSPELLS_SPELL_ENTITY={ + physical = false, + timer=0, + visual = "wielditem", + visual_size = {x=0.1, y=0.1}, + textures = {"htspells:spell_water_box"}, + lastpos={}, + collisionbox = {0,0,0,0,0,0}, +} + +HTSPELLS_SPELL_ENTITY.on_step = function(self, dtime) + self.timer=self.timer+dtime + local pos = self.object:getpos() + local node = minetest.env:get_node(pos) + + if self.timer>0.2 then + local objs = minetest.env:get_objects_inside_radius({x=pos.x,y=pos.y,z=pos.z}, 2) + for k, obj in pairs(objs) do + if obj:get_luaentity() ~= nil then + if obj:get_luaentity().name ~= "htspells:spell_water_entity" and obj:get_luaentity().name ~= "__builtin:item" then + local damage = 5 + obj:punch(self.object, 1.0, { + full_punch_interval=1.0, + groupcaps={ + fleshy={times={[1]=1/(damage-2), [2]=1/(damage-1), [3]=1/damage}}, + snappy={times={[1]=1/(damage-2), [2]=1/(damage-1), [3]=1/damage}}, + } + }, nil) + self.object:remove() + end + else + local damage = 5 + obj:punch(self.object, 1.0, { + full_punch_interval=1.0, + groupcaps={ + fleshy={times={[1]=1/(damage-2), [2]=1/(damage-1), [3]=1/damage}}, + snappy={times={[1]=1/(damage-2), [2]=1/(damage-1), [3]=1/damage}}, + } + }, nil) + self.object:remove() + end + end + end + + if self.lastpos.x~=nil then + if node.name ~= "air" and node.name ~= "htspells:light" then + minetest.env:set_node(self.lastpos, {name="default:water_source"}) + self.object:remove() + end + if math.floor(self.lastpos.x+0.5) ~= math.floor(pos.x+0.5) or math.floor(self.lastpos.y+0.5) ~= math.floor(pos.y+0.5) or math.floor(self.lastpos.z+0.5) ~= math.floor(pos.z+0.5) then + if minetest.env:get_node(self.lastpos).name == "htspells:light" then + minetest.env:remove_node(self.lastpos) + end + if minetest.env:get_node(pos).name == "air" then + minetest.env:set_node(pos, {name="htspells:light"}) + end + end + end + self.lastpos={x=pos.x, y=pos.y, z=pos.z} +end + +minetest.register_entity("htspells:spell_water_entity", HTSPELLS_SPELL_ENTITY) + +minetest.register_craft({ + output = 'htspells:spell_water 4', + recipe = { + {'default:stick', 'default:stick', 'bucket:bucket_water'}, + }, + replacements = { + {"bucket:bucket_lava", "bucket:bucket_empty"} + } +}) + +minetest.register_node("htspells:light", { + drawtype = "glasslike", + tiles = {"htspells_empty.png"}, + light_source = LIGHT_MAX-4, + selection_box = { + type = "fixed", + fixed = { + {0,0,0,0,0,0} + } + }, + groups = {not_in_creative_inventory=1} +}) + +minetest.register_abm({ + nodenames = {"htspells:light"}, + interval = 10, + chance = 1, + action = function(pos, node) + minetest.env:remove_node(pos) + end +})