From 130aa1e78dcd7b9f3e6ec5957219f33ebc7f81e6 Mon Sep 17 00:00:00 2001 From: PilzAdam Date: Mon, 3 Sep 2012 15:26:02 +0200 Subject: [PATCH] Add throwing mod --- mods/throwing/README | 47 ++++++++ mods/throwing/arrow.lua | 81 +++++++++++++ mods/throwing/build_arrow.lua | 85 +++++++++++++ mods/throwing/depends.txt | 4 + mods/throwing/dig_arrow.lua | 81 +++++++++++++ mods/throwing/fire_arrow.lua | 114 ++++++++++++++++++ mods/throwing/init.lua | 99 +++++++++++++++ mods/throwing/sounds/throwing_sound.ogg | Bin 0 -> 11011 bytes mods/throwing/teleport_arrow.lua | 88 ++++++++++++++ mods/throwing/textures/throwing_arrow.png | Bin 0 -> 213 bytes mods/throwing/textures/throwing_arrow_2.png | Bin 0 -> 208 bytes .../throwing/textures/throwing_arrow_back.png | Bin 0 -> 228 bytes .../textures/throwing_arrow_build.png | Bin 0 -> 213 bytes .../textures/throwing_arrow_build_2.png | Bin 0 -> 220 bytes .../textures/throwing_arrow_build_back.png | Bin 0 -> 227 bytes .../textures/throwing_arrow_build_front.png | Bin 0 -> 191 bytes mods/throwing/textures/throwing_arrow_dig.png | Bin 0 -> 213 bytes .../textures/throwing_arrow_dig_2.png | Bin 0 -> 214 bytes .../textures/throwing_arrow_dig_back.png | Bin 0 -> 228 bytes .../textures/throwing_arrow_dig_front.png | Bin 0 -> 191 bytes .../throwing/textures/throwing_arrow_fire.png | Bin 0 -> 266 bytes .../textures/throwing_arrow_fire_2.png | Bin 0 -> 266 bytes .../textures/throwing_arrow_fire_back.png | Bin 0 -> 268 bytes .../textures/throwing_arrow_fire_front.png | Bin 0 -> 306 bytes .../textures/throwing_arrow_front.png | Bin 0 -> 190 bytes .../textures/throwing_arrow_teleport.png | Bin 0 -> 213 bytes .../textures/throwing_arrow_teleport_2.png | Bin 0 -> 213 bytes .../textures/throwing_arrow_teleport_back.png | Bin 0 -> 225 bytes .../throwing_arrow_teleport_front.png | Bin 0 -> 189 bytes mods/throwing/textures/throwing_bow_steel.png | Bin 0 -> 576 bytes mods/throwing/textures/throwing_bow_stone.png | Bin 0 -> 574 bytes mods/throwing/textures/throwing_bow_wood.png | Bin 0 -> 484 bytes mods/throwing/textures/throwing_empty.png | Bin 0 -> 178 bytes 33 files changed, 599 insertions(+) create mode 100644 mods/throwing/README create mode 100644 mods/throwing/arrow.lua create mode 100644 mods/throwing/build_arrow.lua create mode 100644 mods/throwing/depends.txt create mode 100644 mods/throwing/dig_arrow.lua create mode 100644 mods/throwing/fire_arrow.lua create mode 100644 mods/throwing/init.lua create mode 100644 mods/throwing/sounds/throwing_sound.ogg create mode 100644 mods/throwing/teleport_arrow.lua create mode 100644 mods/throwing/textures/throwing_arrow.png create mode 100644 mods/throwing/textures/throwing_arrow_2.png create mode 100644 mods/throwing/textures/throwing_arrow_back.png create mode 100644 mods/throwing/textures/throwing_arrow_build.png create mode 100644 mods/throwing/textures/throwing_arrow_build_2.png create mode 100644 mods/throwing/textures/throwing_arrow_build_back.png create mode 100644 mods/throwing/textures/throwing_arrow_build_front.png create mode 100644 mods/throwing/textures/throwing_arrow_dig.png create mode 100644 mods/throwing/textures/throwing_arrow_dig_2.png create mode 100644 mods/throwing/textures/throwing_arrow_dig_back.png create mode 100644 mods/throwing/textures/throwing_arrow_dig_front.png create mode 100644 mods/throwing/textures/throwing_arrow_fire.png create mode 100644 mods/throwing/textures/throwing_arrow_fire_2.png create mode 100644 mods/throwing/textures/throwing_arrow_fire_back.png create mode 100644 mods/throwing/textures/throwing_arrow_fire_front.png create mode 100644 mods/throwing/textures/throwing_arrow_front.png create mode 100644 mods/throwing/textures/throwing_arrow_teleport.png create mode 100644 mods/throwing/textures/throwing_arrow_teleport_2.png create mode 100644 mods/throwing/textures/throwing_arrow_teleport_back.png create mode 100644 mods/throwing/textures/throwing_arrow_teleport_front.png create mode 100644 mods/throwing/textures/throwing_bow_steel.png create mode 100644 mods/throwing/textures/throwing_bow_stone.png create mode 100644 mods/throwing/textures/throwing_bow_wood.png create mode 100644 mods/throwing/textures/throwing_empty.png diff --git a/mods/throwing/README b/mods/throwing/README new file mode 100644 index 00000000..826f470d --- /dev/null +++ b/mods/throwing/README @@ -0,0 +1,47 @@ +=== THROWING-MOD for MINETEST-C55 === +by PilzAdam + +Inroduction: +This mod adds bows and arrows to Minetest. + +How to install: +Unzip the archive an place it in minetest-base-directory/mods/minetest/ +if you have a windows client or a linux run-in-place client. If you have +a linux system-wide instalation place it in ~/.minetest/mods/minetest/. +If you want to install this mod only in one world create the folder +worldmods/ in your worlddirectory. +For further information or help see: +http://wiki.minetest.com/wiki/Installing_Mods + +How to use the mod: +Craft a bow with the strings from the farming mod: +string wood +string wood +string wood +Craft arrows with: +stick stick steel +Select the bow and shoot with left mouse click. Every shoot will take 1 +arrow from your inventory and wears out the bow (you have around 50 +shoots). + +License: +This mod was originally published by Jeija. +Sourcecode: WTFPL (see below) +Grahpics: WTFPL (see below) + +See also: +http://minetest.net/ + + DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE + Version 2, December 2004 + + Copyright (C) 2004 Sam Hocevar + + Everyone is permitted to copy and distribute verbatim or modified + copies of this license document, and changing it is allowed as long + as the name is changed. + + DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. You just DO WHAT THE FUCK YOU WANT TO. diff --git a/mods/throwing/arrow.lua b/mods/throwing/arrow.lua new file mode 100644 index 00000000..3e237fd4 --- /dev/null +++ b/mods/throwing/arrow.lua @@ -0,0 +1,81 @@ +minetest.register_craftitem("throwing:arrow", { + description = "Arrow", + inventory_image = "throwing_arrow.png", +}) + +minetest.register_node("throwing:arrow_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 = {"throwing_arrow.png", "throwing_arrow.png", "throwing_arrow_back.png", "throwing_arrow_front.png", "throwing_arrow_2.png", "throwing_arrow.png"}, + groups = {not_in_creative_inventory=1}, +}) + +local THROWING_ARROW_ENTITY={ + physical = false, + timer=0, + visual = "wielditem", + visual_size = {x=0.1, y=0.1}, + textures = {"throwing:arrow_box"}, + lastpos={}, + collisionbox = {0,0,0,0,0,0}, +} + +THROWING_ARROW_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 ~= "throwing:arrow_entity" and obj:get_luaentity().name ~= "__builtin:item" then + obj:set_hp(obj:get_hp()-2) + if obj:get_hp() <= 0 then + obj:remove() + end + self.object:remove() + end + else + obj:set_hp(obj:get_hp()-2) + self.object:remove() + end + end + end + + if self.lastpos.x~=nil then + if node.name ~= "air" then + minetest.env:add_item(self.lastpos, 'throwing:arrow') + self.object:remove() + end + end + self.lastpos={x=pos.x, y=pos.y, z=pos.z} +end + +minetest.register_entity("throwing:arrow_entity", THROWING_ARROW_ENTITY) + +minetest.register_craft({ + output = 'throwing:arrow 16', + recipe = { + {'default:stick', 'default:stick', 'default:steel_ingot'}, + } +}) diff --git a/mods/throwing/build_arrow.lua b/mods/throwing/build_arrow.lua new file mode 100644 index 00000000..2ea1bf6e --- /dev/null +++ b/mods/throwing/build_arrow.lua @@ -0,0 +1,85 @@ +minetest.register_craftitem("throwing:arrow_build", { + description = "Build Arrow", + inventory_image = "throwing_arrow_build.png", +}) + +minetest.register_node("throwing:arrow_build_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 = {"throwing_arrow_build.png", "throwing_arrow_build.png", "throwing_arrow_build_back.png", "throwing_arrow_build_front.png", "throwing_arrow_build_2.png", "throwing_arrow_build.png"}, + groups = {not_in_creative_inventory=1}, +}) + +local THROWING_ARROW_ENTITY={ + physical = false, + timer=0, + visual = "wielditem", + visual_size = {x=0.1, y=0.1}, + textures = {"throwing:arrow_build_box"}, + lastpos={}, + collisionbox = {0,0,0,0,0,0}, + node = "", +} + +THROWING_ARROW_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}, 1) + for k, obj in pairs(objs) do + if obj:get_luaentity() ~= nil then + if obj:get_luaentity().name ~= "throwing:arrow_build_entity" and obj:get_luaentity().name ~= "__builtin:item" then + if self.node ~= "" then + minetest.env:set_node(self.lastpos, {name=self.node}) + end + self.object:remove() + end + else + if self.node ~= "" then + minetest.env:set_node(self.lastpos, {name=self.node}) + end + self.object:remove() + end + end + end + + if self.lastpos.x~=nil then + if node.name ~= "air" then + if self.node ~= "" then + minetest.env:set_node(self.lastpos, {name=self.node}) + end + self.object:remove() + end + end + self.lastpos={x=pos.x, y=pos.y, z=pos.z} +end + +minetest.register_entity("throwing:arrow_build_entity", THROWING_ARROW_ENTITY) + +minetest.register_craft({ + output = 'throwing:arrow_build', + recipe = { + {'default:stick', 'default:stick', 'default:shovel_steel'}, + } +}) diff --git a/mods/throwing/depends.txt b/mods/throwing/depends.txt new file mode 100644 index 00000000..252d6655 --- /dev/null +++ b/mods/throwing/depends.txt @@ -0,0 +1,4 @@ +default +bucket +fire +farming diff --git a/mods/throwing/dig_arrow.lua b/mods/throwing/dig_arrow.lua new file mode 100644 index 00000000..e756a34d --- /dev/null +++ b/mods/throwing/dig_arrow.lua @@ -0,0 +1,81 @@ +minetest.register_craftitem("throwing:arrow_dig", { + description = "Dig Arrow", + inventory_image = "throwing_arrow_dig.png", +}) + +minetest.register_node("throwing:arrow_dig_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 = {"throwing_arrow_dig.png", "throwing_arrow_dig.png", "throwing_arrow_dig_back.png", "throwing_arrow_dig_front.png", "throwing_arrow_dig_2.png", "throwing_arrow_dig.png"}, + groups = {not_in_creative_inventory=1}, +}) + +local THROWING_ARROW_ENTITY={ + physical = false, + timer=0, + visual = "wielditem", + visual_size = {x=0.1, y=0.1}, + textures = {"throwing:arrow_dig_box"}, + lastpos={}, + collisionbox = {0,0,0,0,0,0}, +} + +THROWING_ARROW_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}, 1) + for k, obj in pairs(objs) do + if obj:get_luaentity() ~= nil then + if obj:get_luaentity().name ~= "throwing:arrow_dig_entity" and obj:get_luaentity().name ~= "__builtin:item" then + minetest.env:add_item(pos, 'throwing:arrow_dig') + minetest.env:remove_node(pos) + self.object:remove() + end + else + minetest.env:add_item(pos, 'throwing:arrow_dig') + minetest.env:remove_node(pos) + self.object:remove() + end + end + end + + if self.lastpos.x~=nil then + if node.name ~= "air" then + minetest.env:add_item(self.lastpos, 'throwing:arrow_dig') + minetest.env:remove_node(pos) + self.object:remove() + end + end + self.lastpos={x=pos.x, y=pos.y, z=pos.z} +end + +minetest.register_entity("throwing:arrow_dig_entity", THROWING_ARROW_ENTITY) + +minetest.register_craft({ + output = 'throwing:arrow_dig', + recipe = { + {'default:stick', 'default:stick', 'default:pick_steel'}, + } +}) diff --git a/mods/throwing/fire_arrow.lua b/mods/throwing/fire_arrow.lua new file mode 100644 index 00000000..e3b930d6 --- /dev/null +++ b/mods/throwing/fire_arrow.lua @@ -0,0 +1,114 @@ +minetest.register_craftitem("throwing:arrow_fire", { + description = "Fire Arrow", + inventory_image = "throwing_arrow_fire.png", +}) + +minetest.register_node("throwing:arrow_fire_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 = {"throwing_arrow_fire.png", "throwing_arrow_fire.png", "throwing_arrow_fire_back.png", "throwing_arrow_fire_front.png", "throwing_arrow_fire_2.png", "throwing_arrow_fire.png"}, + groups = {not_in_creative_inventory=1}, +}) + +local THROWING_ARROW_ENTITY={ + physical = false, + timer=0, + visual = "wielditem", + visual_size = {x=0.1, y=0.1}, + textures = {"throwing:arrow_fire_box"}, + lastpos={}, + collisionbox = {0,0,0,0,0,0}, +} + +THROWING_ARROW_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 ~= "throwing:arrow_fire_entity" and obj:get_luaentity().name ~= "__builtin:item" then + obj:set_hp(obj:get_hp()-3) + if obj:get_hp() <= 0 then + obj:remove() + end + self.object:remove() + end + else + obj:set_hp(obj:get_hp()-3) + self.object:remove() + end + end + end + + if self.lastpos.x~=nil then + if node.name ~= "air" and node.name ~= "throwing:light" then + minetest.env:set_node(self.lastpos, {name="fire:basic_flame"}) + 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 == "throwing:light" then + minetest.env:remove_node(self.lastpos) + end + if minetest.env:get_node(pos).name == "air" then + minetest.env:set_node(pos, {name="throwing:light"}) + end + end + end + self.lastpos={x=pos.x, y=pos.y, z=pos.z} +end + +minetest.register_entity("throwing:arrow_fire_entity", THROWING_ARROW_ENTITY) + +minetest.register_craft({ + output = 'throwing:arrow_fire 4', + recipe = { + {'default:stick', 'default:stick', 'bucket:bucket_lava'}, + }, + replacements = { + {"bucket:bucket_lava", "bucket:bucket_empty"} + } +}) + +minetest.register_node("throwing:light", { + drawtype = "glasslike", + tiles = {"throwing_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 = {"throwing:light"}, + interval = 10, + chance = 1, + action = function(pos, node) + minetest.env:remove_node(pos) + end +}) diff --git a/mods/throwing/init.lua b/mods/throwing/init.lua new file mode 100644 index 00000000..108eb45e --- /dev/null +++ b/mods/throwing/init.lua @@ -0,0 +1,99 @@ +arrows = { + {"throwing:arrow", "throwing:arrow_entity"}, + {"throwing:arrow_fire", "throwing:arrow_fire_entity"}, + {"throwing:arrow_teleport", "throwing:arrow_teleport_entity"}, + {"throwing:arrow_dig", "throwing:arrow_dig_entity"}, + {"throwing:arrow_build", "throwing:arrow_build_entity"} +} + +local throwing_shoot_arrow = function(itemstack, player) + for _,stack in ipairs(player:get_inventory():get_list("main")) do + for _,arrow in ipairs(arrows) do + if stack:get_name() == arrow[1] then + player:get_inventory():remove_item("main", arrow[1]) + local playerpos = player:getpos() + local obj = minetest.env:add_entity({x=playerpos.x,y=playerpos.y+1.5,z=playerpos.z}, arrow[2]) + local dir = player:get_look_dir() + obj:setvelocity({x=dir.x*19, y=dir.y*19, z=dir.z*19}) + obj:setacceleration({x=dir.x*-3, y=-10, z=dir.z*-3}) + obj:setyaw(player:get_look_yaw()+math.pi) + minetest.sound_play("throwing_sound", {pos=playerpos}) + if obj:get_luaentity().player == "" then + obj:get_luaentity().player = player + end + obj:get_luaentity().node = player:get_inventory():get_stack("main", 1):get_name() + return true + end + end + end + return false +end + +minetest.register_tool("throwing:bow_wood", { + description = "Wood Bow", + inventory_image = "throwing_bow_wood.png", + stack_max = 1, + on_use = function(itemstack, user, pointed_thing) + if throwing_shoot_arrow(itemstack, user, pointed_thing) then + itemstack:add_wear(65535/50) + end + return itemstack + end, +}) + +minetest.register_craft({ + output = 'throwing:bow_wood', + recipe = { + {'farming:string', 'default:wood', ''}, + {'farming:string', '', 'default:wood'}, + {'farming:string', 'default:wood', ''}, + } +}) + +minetest.register_tool("throwing:bow_stone", { + description = "Stone Bow", + inventory_image = "throwing_bow_stone.png", + stack_max = 1, + on_use = function(itemstack, user, pointed_thing) + if throwing_shoot_arrow(item, user, pointed_thing) then + itemstack:add_wear(65535/100) + end + return itemstack + end, +}) + +minetest.register_craft({ + output = 'throwing:bow_stone', + recipe = { + {'farming:string', 'default:cobble', ''}, + {'farming:string', '', 'default:cobble'}, + {'farming:string', 'default:cobble', ''}, + } +}) + +minetest.register_tool("throwing:bow_steel", { + description = "Steel Bow", + inventory_image = "throwing_bow_steel.png", + stack_max = 1, + on_use = function(itemstack, user, pointed_thing) + if throwing_shoot_arrow(item, user, pointed_thing) then + itemstack:add_wear(65535/200) + end + return itemstack + end, +}) + +minetest.register_craft({ + output = 'throwing:bow_steel', + recipe = { + {'farming:string', 'default:steel_ingot', ''}, + {'farming:string', '', 'default:steel_ingot'}, + {'farming:string', 'default:steel_ingot', ''}, + } +}) + +dofile(minetest.get_modpath("throwing").."/arrow.lua") +dofile(minetest.get_modpath("throwing").."/fire_arrow.lua") +dofile(minetest.get_modpath("throwing").."/teleport_arrow.lua") +dofile(minetest.get_modpath("throwing").."/dig_arrow.lua") +dofile(minetest.get_modpath("throwing").."/build_arrow.lua") \ No newline at end of file diff --git a/mods/throwing/sounds/throwing_sound.ogg b/mods/throwing/sounds/throwing_sound.ogg new file mode 100644 index 0000000000000000000000000000000000000000..c8911e5fed64d61e1a0007b98847b27d8044e3cc GIT binary patch literal 11011 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 literal 0 HcmV?d00001 diff --git a/mods/throwing/teleport_arrow.lua b/mods/throwing/teleport_arrow.lua new file mode 100644 index 00000000..301cc5d6 --- /dev/null +++ b/mods/throwing/teleport_arrow.lua @@ -0,0 +1,88 @@ +minetest.register_craftitem("throwing:arrow_teleport", { + description = "Teleport Arrow", + inventory_image = "throwing_arrow_teleport.png", +}) + +minetest.register_node("throwing:arrow_teleport_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 = {"throwing_arrow_teleport.png", "throwing_arrow_teleport.png", "throwing_arrow_teleport_back.png", "throwing_arrow_teleport_front.png", "throwing_arrow_teleport_2.png", "throwing_arrow_teleport.png"}, + groups = {not_in_creative_inventory=1}, +}) + +local THROWING_ARROW_ENTITY={ + physical = false, + timer=0, + visual = "wielditem", + visual_size = {x=0.1, y=0.1}, + textures = {"throwing:arrow_teleport_box"}, + lastpos={}, + collisionbox = {0,0,0,0,0,0}, + player = "", +} + +THROWING_ARROW_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 ~= "throwing:arrow_teleport_entity" and obj:get_luaentity().name ~= "__builtin:item" then + if self.player ~= "" then + self.player:setpos(pos) + self.player:get_inventory():add_item("main", ItemStack("throwing:arrow_teleport")) + end + self.object:remove() + end + else + if self.player ~= "" then + self.player:setpos(pos) + self.player:get_inventory():add_item("main", ItemStack("throwing:arrow_teleport")) + end + self.object:remove() + end + end + end + + if self.lastpos.x~=nil then + if node.name ~= "air" then + if self.player ~= "" then + self.player:setpos(self.lastpos) + self.player:get_inventory():add_item("main", ItemStack("throwing:arrow_teleport")) + end + self.object:remove() + end + end + self.lastpos={x=pos.x, y=pos.y, z=pos.z} +end + +minetest.register_entity("throwing:arrow_teleport_entity", THROWING_ARROW_ENTITY) + +minetest.register_craft({ + output = 'throwing:arrow_teleport', + recipe = { + {'default:stick', 'default:stick', 'default:mese'}, + } +}) diff --git a/mods/throwing/textures/throwing_arrow.png b/mods/throwing/textures/throwing_arrow.png new file mode 100644 index 0000000000000000000000000000000000000000..9b72ee98a69fed6b29b839fe2655fbb8a6b31db8 GIT binary patch literal 213 zcmeAS@N?(olHy`uVBq!ia0vp^f*{Pn1|+R>-G2co#^NA%Cx&(BWL^R}Y)RhkE)1JN z&^jdh2vCHxz$3Dlfq`2Xgc%uT&5-~KvX^-Jy0YKl5aeT1O|uPV0SbkBx;TbdoK8-V zU~Lx8xwq%1eOrRB@7ekw-h_k8EMsT4E^xGyeJ!~ygvH1J2sTVeGB#?EJOBb$E?qiw t1Bg9VDFT%gdQTEo+tN8V&_R}g!F#g8vp@UyZ3bGv;OXk;vd$@?2>>`}LD2vJ literal 0 HcmV?d00001 diff --git a/mods/throwing/textures/throwing_arrow_2.png b/mods/throwing/textures/throwing_arrow_2.png new file mode 100644 index 0000000000000000000000000000000000000000..b5980d0244ac5119e1dd80b9f19d7245a4d61996 GIT binary patch literal 208 zcmeAS@N?(olHy`uVBq!ia0vp^f*{Pn1|+R>-G2co#^NA%Cx&(BWL^R}Y)RhkE)1JN z&^jdh2vCHxz$3Dlfq`2Xgc%uT&5-~KvX^-Jy0YKl5ai=ixYwuK3=|6Rba4!^IGvmz z!McTUwt4-G2co#^NA%Cx&(BWL^R}Y)RhkE)3}m z+6*iYRcft(BAf*tk;M!QLSW3;qqLJ9D9B#o>FdgVheME0PAFz}9?0AjPZ!4!i_^&o z3uFw8411Us9e8$j_J8Hi%g<*X)Z*igaI0aPYf~w7&fMHQ{lnLFVdQ&MBb@03c&S@c;k- literal 0 HcmV?d00001 diff --git a/mods/throwing/textures/throwing_arrow_build.png b/mods/throwing/textures/throwing_arrow_build.png new file mode 100644 index 0000000000000000000000000000000000000000..02653e139af7bcfecac0fc8e0e3a24ca5d60d09c GIT binary patch literal 213 zcmeAS@N?(olHy`uVBq!ia0vp^f*{Pn1|+R>-G2co#^NA%Cx&(BWL^R}Y)RhkE)4%c zaKYZ?lYt_f1s;*b3=G`DAk4@xYmNj^kiEpy*OmPahoGQ^_I0a9W1vu|r;B5V#p&b( z3D#!eoO^qI+P6K}`;+Itr)dN0>}MspVohv6OV*^{2ogMT00f-6&YoaMV_*h?$w5lY vi-A~qW!sOEHOF;5{bpQHD|2HkWni$FBlqL>tuH{!85lfW{an^LB{Ts5=-WdZ literal 0 HcmV?d00001 diff --git a/mods/throwing/textures/throwing_arrow_build_2.png b/mods/throwing/textures/throwing_arrow_build_2.png new file mode 100644 index 0000000000000000000000000000000000000000..fd576d4068c3ef8001a6566c0400b73e4ed1cd4d GIT binary patch literal 220 zcmeAS@N?(olHy`uVBq!ia0vp^f*{Pn1|+R>-G2co#^NA%Cx&(BWL^R}Y)RhkE)4%c zaKYZ?lYt_f1s;*b3=G`DAk4@xYmNj^kiEpy*OmPahoGQ^p;knNCr~KH)5S5w;&gI? z1nU;Y+2;BG{L7o)olQRwaQe`J0|z!NRhp3a`Pte3+e27{63@u*aP;cr>EYqw5m1Vq z-I_6d%Je@61(KT#YpkwKmf-=(8C(yLQM=MTH_)M$fk9tZv2>}u@e80m44$rjF6*2U FngHeDMMD4p literal 0 HcmV?d00001 diff --git a/mods/throwing/textures/throwing_arrow_build_back.png b/mods/throwing/textures/throwing_arrow_build_back.png new file mode 100644 index 0000000000000000000000000000000000000000..18c2f02c7ebab870ca1aca18966d2f0f4ced701e GIT binary patch literal 227 zcmeAS@N?(olHy`uVBq!ia0vp^f*{Pn1|+R>-G2co#^NA%Cx&(BWL^R}Y)RhkE)4%c zaKYZ?lYt_f1s;*b3=BeG%-Ex}lN~6?UgGKN%6^AKP|#9t#-x%!pir`>i(`nz>Ewh3 zG6qJ5Jxq%ZJUcu4zw+nh=Q9s#@o`7E)v#sm|JeF@eOFG}hp%6cE}J)zb-LoM{2EEC zYJp2nRrguM`c2h1mc^mN)4}q8rJ&l8qkM`V9hunz*-}&v9G6=9f{B6on)0-r3e7A) P>li#;{an^LB{Ts5`x;84 literal 0 HcmV?d00001 diff --git a/mods/throwing/textures/throwing_arrow_build_front.png b/mods/throwing/textures/throwing_arrow_build_front.png new file mode 100644 index 0000000000000000000000000000000000000000..b6b6967202e1abfcde638c1877cd4d351494f27f GIT binary patch literal 191 zcmeAS@N?(olHy`uVBq!ia0vp^f*{Pn1|+R>-G2co#^NA%Cx&(BWL^R}Y)RhkE)4%c zaKYZ?lYt_f1s;*b3=BeG%-Ex}lN~6?UgGKN%6^AKP|%Vi$L%0cgu&j^#WBR4kHC+M!Rbo buHp;~91{eKz8!ch4KmBq)z4*}Q$iB}8PqoI literal 0 HcmV?d00001 diff --git a/mods/throwing/textures/throwing_arrow_dig.png b/mods/throwing/textures/throwing_arrow_dig.png new file mode 100644 index 0000000000000000000000000000000000000000..02f6a00027c9fdbf347d68159b4be7dd550db884 GIT binary patch literal 213 zcmeAS@N?(olHy`uVBq!ia0vp^f*{Pn1|+R>-G2co#^NA%Cx&(BWL^R}Y)RhkE)4%c zaKYZ?lYt_f1s;*b3=G`DAk4@xYmNj^kiEpy*OmPahoGRSu3T{)NN1?0i(`nz>Er|n z)@I?HdwYJ`w>@ZNX8$)ii-Fth?8{p^EWDpyMx5WURB1vZ2(*gKp2&EHfei@M*xA|L tKsbo^Cf literal 0 HcmV?d00001 diff --git a/mods/throwing/textures/throwing_arrow_dig_2.png b/mods/throwing/textures/throwing_arrow_dig_2.png new file mode 100644 index 0000000000000000000000000000000000000000..b514b5d217edfa6b7ecc264a2f79bc2638bb489c GIT binary patch literal 214 zcmeAS@N?(olHy`uVBq!ia0vp^f*{Pn1|+R>-G2co#^NA%Cx&(BWL^R}Y)RhkE)4%c zaKYZ?lYt_f1s;*b3=G`DAk4@xYmNj^kiEpy*OmPahoGRS@sk?oE}&4Dr;B5V#p&b( z3Dzx)v(5AW`Ik5I$yhWjoHntsu~9L0_S60T$E(_OMH^XoJLl|TKUY>zkl-G2co#^NA%Cx&(BWL^R}Y)RhkE)4%c zaKYZ?lYt_f1s;*b3=BeG%-Ex}lN~6?UgGKN%6^AKP*7A+{HW0(piqjZi(`nz>Ewh3 zG6qJ5Jxq%ZJUcu4zw+nh=Q9s#@o`7E)v$g1^y$#g`S$f`AHIG)x@_J=*6E6S_Uz#~ zy*c*5pA##q3wF)X3hcQm5FsJJ`7c=6r=wfe=}|Kq&mx`^9u57bUKd#za`}}xlub=% Q0_|h)boFyt=akR{0Q@XXB>(^b literal 0 HcmV?d00001 diff --git a/mods/throwing/textures/throwing_arrow_dig_front.png b/mods/throwing/textures/throwing_arrow_dig_front.png new file mode 100644 index 0000000000000000000000000000000000000000..6681c998062736218d4ccf79cdec3d475872af3e GIT binary patch literal 191 zcmeAS@N?(olHy`uVBq!ia0vp^f*{Pn1|+R>-G2co#^NA%Cx&(BWL^R}Y)RhkE)4%c zaKYZ?lYt_f1s;*b3=BeG%-Ex}lN~6?UgGKN%6^AKP*7C(zEH9gP{`iX#WBRBrJ)1!z1PV&zN`G4N02>fm8=KrkXW@ cU3v@*_g@JWnV0kU1C3(vboFyt=akR{04+;5XaE2J literal 0 HcmV?d00001 diff --git a/mods/throwing/textures/throwing_arrow_fire.png b/mods/throwing/textures/throwing_arrow_fire.png new file mode 100644 index 0000000000000000000000000000000000000000..8f5075a32bbd59c7462620023181181c687fd138 GIT binary patch literal 266 zcmeAS@N?(olHy`uVBq!ia0vp^f*{Pn1|+R>-G2co#^NA%Cx&(BWL^R}Y)RhkE(~88 zW-;h19ZJy!if|TqL>4nJa0`PlBg3pY5H=O_B$Mc{EE7pA2O!^g}OXl978Nl zCnrd-HVfz6+w;@D?ZM-Ui~pBM9r$GIKCRKwvE$*dW!3*hpSnm|lvGMy+InBudc3S z|MlCp*V_xEcK9E!x--eX`pf@dkrg4`a|0b@85pi>={{b^@M;gxRScf4elF{r5}E*j CU|@>? literal 0 HcmV?d00001 diff --git a/mods/throwing/textures/throwing_arrow_fire_2.png b/mods/throwing/textures/throwing_arrow_fire_2.png new file mode 100644 index 0000000000000000000000000000000000000000..ed0aa5fb9e16e14d29185050e97fd6efa046a182 GIT binary patch literal 266 zcmeAS@N?(olHy`uVBq!ia0vp^f*{Pn1|+R>-G2co#^NA%Cx&(BWL^R}Y)RhkE(~88 zW-;h19ZJy!if|TqL>4nJa0`PlBg3pY5H=O_B$Mc{EB9lEvGtwLS3FNjv*GO zlM^IZw=m8&&;RFN-Yj>#J84B~VnRZ~jUd4j8!A6P`yZ{v#3`k;O#A2u!?y4L|GKZ2 zH2FJ4LQ-x|azc}*P%;BEGxK44UpY3lY4drQn&$9)FSq@9{=liP@_8Np$Ez0cRQ~?X ze7ODpeu*c(Qzf5#HkG)^)FSE0H+jD8um73i){7f}UMiF_=syvs5ArR8r>mdKI;Vst E0Pg8n`~Uy| literal 0 HcmV?d00001 diff --git a/mods/throwing/textures/throwing_arrow_fire_back.png b/mods/throwing/textures/throwing_arrow_fire_back.png new file mode 100644 index 0000000000000000000000000000000000000000..8a7d99306fee4e38782e07eebb99f431d6fc500e GIT binary patch literal 268 zcmeAS@N?(olHy`uVBq!ia0vp^f*{Pn1|+R>-G2co#^NA%Cx&(BWL^R}Y)RhkE(~88 zW-;h19ZJy!if|TqL>4nJ2!SzUkJ3(dpdfpRr>`sf9S%W$W%j6?6$U_|9#0p?5R22v z2@7Nlj0}6279DtYcJ_be&&$te9@OIFj@ZNYcmCsl|I_>4{GV_8>wlrd0TAf8JcYY# z&;RB7|MERI_YFuBDBpY1BS?gsqiE5GqiaG6c1f*Py!?EN!HL;gi#z^SsWqMM`CoDP zN&3QH|E2Q|{r@kX^@v;eQBwPa9}5_pHJFWr=C*uv(PWsdVZQm_niZ))cQJUn`njxg HN@xNAjoD_% literal 0 HcmV?d00001 diff --git a/mods/throwing/textures/throwing_arrow_fire_front.png b/mods/throwing/textures/throwing_arrow_fire_front.png new file mode 100644 index 0000000000000000000000000000000000000000..3994257d15c3e6b7026d44e765ad54e7909382be GIT binary patch literal 306 zcmeAS@N?(olHy`uVBq!ia0vp^f*{Pn1|+R>-G2co#^NA%Cx&(BWL^R}Y)RhkE(~88 zW-;h19ZJy!if|TqL>4nJ2!SzUkJ3(dpdfpRr>`sf9S%W$B_)nxUo)W4CQlc~5R22v z2@7Nlj0}6279DtYcJ}|t3g=FAoL<0Pw&%a-Qx{1Kmq^KX@wJB+tkXSq;6}ad>?$|0 zm^KcMA|r#1e^L@APfnZg^kLGEb$SO594L@o9W^IVCx6wM4-fzAv$4$!=ZSx_&+t#( zHFVdQ&MBb@01jDi#sB~S literal 0 HcmV?d00001 diff --git a/mods/throwing/textures/throwing_arrow_front.png b/mods/throwing/textures/throwing_arrow_front.png new file mode 100644 index 0000000000000000000000000000000000000000..828a486f11de86378b779285cf4bcfea250c1296 GIT binary patch literal 190 zcmeAS@N?(olHy`uVBq!ia0vp^f*{Pn1|+R>-G2co#^NA%Cx&(BWL^R}Y)RhkE)3}m z+6*iYRcft(BAf*tk;M!QLSW3;qqLJ9D9B#o>FdgVheME0o-IDAI}a#i=jq}YVsSb- zVS$W+kzo(hq65#)&i+4H;oOOi(+g(JlH%dj)z$4W>7MJDe4>8YK_TmAcAiB%Cp;SZ dO}#F%GMxV-G2co#^NA%Cx&(BWL^R}Y)RhkE)4%c zaKYZ?lYt_f1s;*b3=G`DAk4@xYmNj^kiEpy*OmPahoFES`;Q$)20)=uPZ!4!i_^&o z60FU_IrsMbv~PRx|3A-vPtyk0+0ROH#hTcDmaIv?5hQrx00=mBojt*j#=r~&!ph3b t${@V5?MKO)-G2co#^NA%Cx&(BWL^R}Y)RhkE)4%c zaKYZ?lYt_f1s;*b3=G`DAk4@xYmNj^kiEpy*OmPahoFESUt>zw6rfP3r;B5V#p&b( z3Dzx)v(5AW`Ik5U`=5Rw;Pjyb2M%mlsx%?-^Ru)6w}-F@C7zMr;n>r|(^KG_z&4R9 zq0R6hOO4gF$vGU#%FN1VOhwu`zb2)N1jsWm%-G2co#^NA%Cx&(BWL^R}Y)RhkE)4%c zaKYZ?lYt_f1s;*b3=BeG%-Ex}lN~6?UgGKN%6^AKP(aUYWttJl{6tR|#}JFt$q5T& z42%qWm=+y)c6RoE<-G2co#^NA%Cx&(BWL^R}Y)RhkE)4%c zaKYZ?lYt_f1s;*b3=BeG%-Ex}lN~6?UgGKN%6^AKP(V*<^PXqrKp|UC7sn8b)5!@7 zWDJZ9dzcm-cy@O7|H%sHPIR1J@c+N$zvRHP9-D7Snza2%m(tm2Tya3*R6`HTkBG%0 au|VUO2o~A7iGKzf#Ng@b=d#Wzp$P!)%{(Fi literal 0 HcmV?d00001 diff --git a/mods/throwing/textures/throwing_bow_steel.png b/mods/throwing/textures/throwing_bow_steel.png new file mode 100644 index 0000000000000000000000000000000000000000..e14c45c4dfb653137f07c0cf1dd1f0c19ff9f8e4 GIT binary patch literal 576 zcmV-G0>AxPx#24YJ`L;&sp?f~wJY48*P000SaNLh0L01|Wn01|Wo-ewBL_t(I%Y9Q#iW5N;{@$zVA;DFSAcLZ~^8#_#r;tHWX6FTFnVez- z1-(QFBy>n}g%K3ILS_|0_pA5KBB`1r4i*&E^?vJn-`7GC|63^~hzL{_?haKw@#}do z0JuBceIK9-RfU-W0L~lgadHTuBrTUqni)g{i^YQZ75Sd?;&HXnXhc=T&CQJfziUVS0K21>3ng40wsh15kZU* zRaF%jB=S->P)Px#24YJ`L;&sp?f~wJY48*P000SaNLh0L01|Wn01|Wo-ew6E#P{LXQbGp3ZVSS+ZjXxmnXPLIiQ zxs=jUKJ)pU@1BEio`Ox&(9B?FaCdZFhpy|8QbJ0p*vbg*j<#(D0Isf3MhPK6L=a;{ zRaIpSl1H1FA%uX(THgKmjN7{;dGlrlRRu}*eJ`WY=wXDE5}KwVNw_=SzYxBC2Hsqw z=(?_hyTi*HW0c+wBMdlgR{`!kG*1UXq<) zgq$2?SULZPzVAz5RaGE~?RLw&o4T&$tli6FW;h%U|L9k%6)$yv0TD=EZ|soslK=n! M07*qoM6N<$g8jSqm;e9( literal 0 HcmV?d00001 diff --git a/mods/throwing/textures/throwing_bow_wood.png b/mods/throwing/textures/throwing_bow_wood.png new file mode 100644 index 0000000000000000000000000000000000000000..07f303a5cc8818289caa5500224df992f1b32826 GIT binary patch literal 484 zcmVN2bPDNB8 zb~7$DE-^4L^m3s900Cf0L_t(IPkoYIPK7WKg$vOacj3Q2nQJt<8UOXs6&Q^odx8g8 z7lgl&Z(y2o?~P3k)6&kFGpCJ2#Qit=zIRa+xj2s9FborFei!FwyplN zwdHIi+s43fP?G!xsHXs4FY8zlb=tV-0eF( zL{)(7rfC#&dw$O=u%01!Id$@V6-n6d+T6FN6-+W!!RKlML`EDMIp#=JRZ9;zXy#Du z^(>O7V*5dtF6kI4(&CF$)v7Ki|AJRm}_Fp)OQZEMM{@bSpW`)W^N#UL;; zZ(?}ABpU($xfT3C(X2$WEK|a*1oj&38d>891osDey^`m-!aq~kLKCe=q?#H?XlXnv zWm&2kui*D)M*w3?&?>Xr8X4nFX@p?wOEd$i%G``XT~QQXwk0nVgg;5H>w4i2`}7>1 aWBv#3=%ksXVTCgQ0000Er?+O75NtU=qlsM<- z=BDPAFgO>bCYGe8D3oWGWGJ|M`UZqI@`(c#@p`&AhHzX@P5=TRmz9Ar?z5H^kj3EX L>gTe~DWM4fuVE-u literal 0 HcmV?d00001