From cdbe82a9e9b23c0c28d52bdd22297e9573611980 Mon Sep 17 00:00:00 2001 From: Ombridride Date: Mon, 15 Dec 2014 01:53:06 +0100 Subject: [PATCH] Add a new fishing mod and ... - Remove the old fishing mod - Update aliases - tweak settings and hunger of the new fishing mod --- mods/_misc/aliases.lua | 3 + mods/fishing/.gitattributes | 22 + mods/fishing/.gitignore | 215 ++++++ mods/fishing/bobber.lua | 310 ++++++++ mods/fishing/bobber_shark.lua | 223 ++++++ mods/fishing/crafting.lua | 95 +++ mods/fishing/depends.txt | 3 +- mods/fishing/fishes.lua | 70 ++ mods/fishing/fishing.lua | 86 --- mods/fishing/init.lua | 348 ++++++++- mods/fishing/license.txt | 674 ------------------ mods/fishing/settings.txt | 9 + mods/fishing/sounds/SoundLicense.txt | 4 + mods/fishing/sounds/fishing_bobber1.ogg | Bin 0 -> 15470 bytes mods/fishing/sounds/fishing_bobber2.ogg | Bin 0 -> 19963 bytes .../textures/alternates/fishing_bobber.png | Bin 0 -> 541 bytes .../alternates/fishing_bobber_bottom.png | Bin 0 -> 207 bytes .../alternates/fishing_bobber_top.png | Bin 0 -> 193 bytes .../textures/alternates/fishing_pole.png | Bin 0 -> 295 bytes .../animal_clownfish_clownfish_item.png | Bin 0 -> 352 bytes ...l_fish_blue_white_fish_blue_white_item.png | Bin 0 -> 317 bytes mods/fishing/textures/coral2.png | Bin 257 -> 0 bytes mods/fishing/textures/coral3.png | Bin 209 -> 0 bytes mods/fishing/textures/coral4.png | Bin 216 -> 0 bytes mods/fishing/textures/fish_cooked.png | Bin 344 -> 0 bytes mods/fishing/textures/fish_raw.png | Bin 367 -> 0 bytes mods/fishing/textures/fishing_bobber.png | Bin 0 -> 580 bytes .../textures/fishing_bobber_bottom.png | Bin 0 -> 205 bytes .../textures/fishing_bobber_feather_1.png | Bin 0 -> 352 bytes mods/fishing/textures/fishing_bobber_top.png | Bin 0 -> 205 bytes mods/fishing/textures/fishing_deco_pike.png | Bin 0 -> 508 bytes mods/fishing/textures/fishing_fish.png | Bin 0 -> 486 bytes mods/fishing/textures/fishing_fish_cooked.png | Bin 0 -> 846 bytes mods/fishing/textures/fishing_pike.png | Bin 0 -> 297 bytes mods/fishing/textures/fishing_pike_cooked.png | Bin 0 -> 702 bytes mods/fishing/textures/fishing_pole.png | Bin 0 -> 265 bytes mods/fishing/textures/fishing_pole_back.png | Bin 0 -> 235 bytes mods/fishing/textures/fishing_pole_bottom.png | Bin 0 -> 215 bytes mods/fishing/textures/fishing_pole_deco.png | Bin 0 -> 354 bytes mods/fishing/textures/fishing_pole_front.png | Bin 0 -> 214 bytes mods/fishing/textures/fishing_pole_simple.png | Bin 0 -> 303 bytes mods/fishing/textures/fishing_pole_top.png | Bin 0 -> 197 bytes mods/fishing/textures/fishing_rod.png | Bin 193 -> 0 bytes mods/fishing/textures/fishing_rod_baited.png | Bin 214 -> 0 bytes mods/fishing/textures/fishing_rod_wield.png | Bin 215 -> 0 bytes mods/fishing/textures/fishing_shark.png | Bin 0 -> 389 bytes .../fishing/textures/fishing_shark_cooked.png | Bin 0 -> 763 bytes mods/fishing/textures/fishing_sushi.png | Bin 0 -> 590 bytes .../fishing/textures/fishing_trophy_label.png | Bin 0 -> 201 bytes mods/fishing/textures/fishing_worm.png | Bin 0 -> 280 bytes .../not_in_use/fishing_bobber_feather_1.png | Bin 0 -> 352 bytes .../not_in_use/fishing_bobber_feather_2.png | Bin 0 -> 363 bytes .../not_in_use/fishing_bobber_ready.png | Bin 0 -> 222 bytes .../not_in_use/fishing_pole_on_use.png | Bin 0 -> 238 bytes .../old/fishing_bobber_alternate_old.png | Bin 0 -> 217 bytes .../textures/old/fishing_bobber_old.png | Bin 0 -> 238 bytes .../textures/old/fishing_pole_wield.png | Bin 0 -> 269 bytes .../textures/old/fishing_shark_old6.png | Bin 0 -> 391 bytes mods/fishing/textures/sashimi.png | Bin 485 -> 0 bytes mods/fishing/textures/seaweed.png | Bin 506 -> 0 bytes mods/fishing/textures/worm.png | Bin 164 -> 0 bytes mods/fishing/trophies.lua | 82 +++ mods/fishing/worm.lua | 118 +++ mods/hud/hunger.lua | 23 +- 64 files changed, 1502 insertions(+), 783 deletions(-) create mode 100755 mods/fishing/.gitattributes create mode 100755 mods/fishing/.gitignore create mode 100755 mods/fishing/bobber.lua create mode 100755 mods/fishing/bobber_shark.lua create mode 100755 mods/fishing/crafting.lua create mode 100755 mods/fishing/fishes.lua delete mode 100755 mods/fishing/fishing.lua delete mode 100755 mods/fishing/license.txt create mode 100755 mods/fishing/settings.txt create mode 100755 mods/fishing/sounds/SoundLicense.txt create mode 100755 mods/fishing/sounds/fishing_bobber1.ogg create mode 100755 mods/fishing/sounds/fishing_bobber2.ogg create mode 100755 mods/fishing/textures/alternates/fishing_bobber.png create mode 100755 mods/fishing/textures/alternates/fishing_bobber_bottom.png create mode 100755 mods/fishing/textures/alternates/fishing_bobber_top.png create mode 100755 mods/fishing/textures/alternates/fishing_pole.png create mode 100755 mods/fishing/textures/animal_clownfish_clownfish_item.png create mode 100755 mods/fishing/textures/animal_fish_blue_white_fish_blue_white_item.png delete mode 100755 mods/fishing/textures/coral2.png delete mode 100755 mods/fishing/textures/coral3.png delete mode 100755 mods/fishing/textures/coral4.png delete mode 100755 mods/fishing/textures/fish_cooked.png delete mode 100755 mods/fishing/textures/fish_raw.png create mode 100755 mods/fishing/textures/fishing_bobber.png create mode 100755 mods/fishing/textures/fishing_bobber_bottom.png create mode 100755 mods/fishing/textures/fishing_bobber_feather_1.png create mode 100755 mods/fishing/textures/fishing_bobber_top.png create mode 100755 mods/fishing/textures/fishing_deco_pike.png create mode 100755 mods/fishing/textures/fishing_fish.png create mode 100755 mods/fishing/textures/fishing_fish_cooked.png create mode 100755 mods/fishing/textures/fishing_pike.png create mode 100755 mods/fishing/textures/fishing_pike_cooked.png create mode 100755 mods/fishing/textures/fishing_pole.png create mode 100755 mods/fishing/textures/fishing_pole_back.png create mode 100755 mods/fishing/textures/fishing_pole_bottom.png create mode 100755 mods/fishing/textures/fishing_pole_deco.png create mode 100755 mods/fishing/textures/fishing_pole_front.png create mode 100755 mods/fishing/textures/fishing_pole_simple.png create mode 100755 mods/fishing/textures/fishing_pole_top.png delete mode 100755 mods/fishing/textures/fishing_rod.png delete mode 100755 mods/fishing/textures/fishing_rod_baited.png delete mode 100755 mods/fishing/textures/fishing_rod_wield.png create mode 100755 mods/fishing/textures/fishing_shark.png create mode 100755 mods/fishing/textures/fishing_shark_cooked.png create mode 100755 mods/fishing/textures/fishing_sushi.png create mode 100755 mods/fishing/textures/fishing_trophy_label.png create mode 100755 mods/fishing/textures/fishing_worm.png create mode 100755 mods/fishing/textures/not_in_use/fishing_bobber_feather_1.png create mode 100755 mods/fishing/textures/not_in_use/fishing_bobber_feather_2.png create mode 100755 mods/fishing/textures/not_in_use/fishing_bobber_ready.png create mode 100755 mods/fishing/textures/not_in_use/fishing_pole_on_use.png create mode 100755 mods/fishing/textures/old/fishing_bobber_alternate_old.png create mode 100755 mods/fishing/textures/old/fishing_bobber_old.png create mode 100755 mods/fishing/textures/old/fishing_pole_wield.png create mode 100755 mods/fishing/textures/old/fishing_shark_old6.png delete mode 100755 mods/fishing/textures/sashimi.png delete mode 100755 mods/fishing/textures/seaweed.png delete mode 100755 mods/fishing/textures/worm.png create mode 100755 mods/fishing/trophies.lua create mode 100755 mods/fishing/worm.lua diff --git a/mods/_misc/aliases.lua b/mods/_misc/aliases.lua index fdd408e3..33296865 100755 --- a/mods/_misc/aliases.lua +++ b/mods/_misc/aliases.lua @@ -25,3 +25,6 @@ minetest.register_alias("torches:wand", "default:torch") -- Remove copper_rail from moreores => utilisation des rail_copper du mod carts minetest.register_alias("moreores:copper_rail", "carts:rail_copper") +-- Old fishing mod to the new fishing mod +minetest.register_alias("fishing:fish", "fishing:fish_cooked") +minetest.register_alias("fishing:worm", "fishing:bait_worm") \ No newline at end of file diff --git a/mods/fishing/.gitattributes b/mods/fishing/.gitattributes new file mode 100755 index 00000000..412eeda7 --- /dev/null +++ b/mods/fishing/.gitattributes @@ -0,0 +1,22 @@ +# Auto detect text files and perform LF normalization +* text=auto + +# Custom for Visual Studio +*.cs diff=csharp +*.sln merge=union +*.csproj merge=union +*.vbproj merge=union +*.fsproj merge=union +*.dbproj merge=union + +# Standard to msysgit +*.doc diff=astextplain +*.DOC diff=astextplain +*.docx diff=astextplain +*.DOCX diff=astextplain +*.dot diff=astextplain +*.DOT diff=astextplain +*.pdf diff=astextplain +*.PDF diff=astextplain +*.rtf diff=astextplain +*.RTF diff=astextplain diff --git a/mods/fishing/.gitignore b/mods/fishing/.gitignore new file mode 100755 index 00000000..b9d6bd92 --- /dev/null +++ b/mods/fishing/.gitignore @@ -0,0 +1,215 @@ +################# +## Eclipse +################# + +*.pydevproject +.project +.metadata +bin/ +tmp/ +*.tmp +*.bak +*.swp +*~.nib +local.properties +.classpath +.settings/ +.loadpath + +# External tool builders +.externalToolBuilders/ + +# Locally stored "Eclipse launch configurations" +*.launch + +# CDT-specific +.cproject + +# PDT-specific +.buildpath + + +################# +## Visual Studio +################# + +## Ignore Visual Studio temporary files, build results, and +## files generated by popular Visual Studio add-ons. + +# User-specific files +*.suo +*.user +*.sln.docstates + +# Build results + +[Dd]ebug/ +[Rr]elease/ +x64/ +build/ +[Bb]in/ +[Oo]bj/ + +# MSTest test Results +[Tt]est[Rr]esult*/ +[Bb]uild[Ll]og.* + +*_i.c +*_p.c +*.ilk +*.meta +*.obj +*.pch +*.pdb +*.pgc +*.pgd +*.rsp +*.sbr +*.tlb +*.tli +*.tlh +*.tmp +*.tmp_proj +*.log +*.vspscc +*.vssscc +.builds +*.pidb +*.log +*.scc + +# Visual C++ cache files +ipch/ +*.aps +*.ncb +*.opensdf +*.sdf +*.cachefile + +# Visual Studio profiler +*.psess +*.vsp +*.vspx + +# Guidance Automation Toolkit +*.gpState + +# ReSharper is a .NET coding add-in +_ReSharper*/ +*.[Rr]e[Ss]harper + +# TeamCity is a build add-in +_TeamCity* + +# DotCover is a Code Coverage Tool +*.dotCover + +# NCrunch +*.ncrunch* +.*crunch*.local.xml + +# Installshield output folder +[Ee]xpress/ + +# DocProject is a documentation generator add-in +DocProject/buildhelp/ +DocProject/Help/*.HxT +DocProject/Help/*.HxC +DocProject/Help/*.hhc +DocProject/Help/*.hhk +DocProject/Help/*.hhp +DocProject/Help/Html2 +DocProject/Help/html + +# Click-Once directory +publish/ + +# Publish Web Output +*.Publish.xml +*.pubxml + +# NuGet Packages Directory +## TODO: If you have NuGet Package Restore enabled, uncomment the next line +#packages/ + +# Windows Azure Build Output +csx +*.build.csdef + +# Windows Store app package directory +AppPackages/ + +# Others +sql/ +*.Cache +ClientBin/ +[Ss]tyle[Cc]op.* +~$* +*~ +*.dbmdl +*.[Pp]ublish.xml +*.pfx +*.publishsettings + +# RIA/Silverlight projects +Generated_Code/ + +# Backup & report files from converting an old project file to a newer +# Visual Studio version. Backup files are not needed, because we have git ;-) +_UpgradeReport_Files/ +Backup*/ +UpgradeLog*.XML +UpgradeLog*.htm + +# SQL Server files +App_Data/*.mdf +App_Data/*.ldf + +############# +## Windows detritus +############# + +# Windows image file caches +Thumbs.db +ehthumbs.db + +# Folder config file +Desktop.ini + +# Recycle Bin used on file shares +$RECYCLE.BIN/ + +# Mac crap +.DS_Store + + +############# +## Python +############# + +*.py[co] + +# Packages +*.egg +*.egg-info +dist/ +build/ +eggs/ +parts/ +var/ +sdist/ +develop-eggs/ +.installed.cfg + +# Installer logs +pip-log.txt + +# Unit test / coverage reports +.coverage +.tox + +#Translations +*.mo + +#Mr Developer +.mr.developer.cfg diff --git a/mods/fishing/bobber.lua b/mods/fishing/bobber.lua new file mode 100755 index 00000000..5600c58b --- /dev/null +++ b/mods/fishing/bobber.lua @@ -0,0 +1,310 @@ +----------------------------------------------------------------------------------------------- +-- Fishing - Mossmanikin's version - Bobber 0.1.7 +-- License (code & textures): WTFPL +-- Contains code from: fishing (original), mobs, throwing, volcano +-- Supports: 3d_armor, animal_clownfish, animal_fish_blue_white, animal_rat, flowers_plus, mobs, seaplants +----------------------------------------------------------------------------------------------- + +local PoLeWeaR = (65535/(30-(math.random(15, 29)))) +local BooTSWear = (2000*(math.random(20, 29))) +-- Here's what you can catch +local CaTCH = { +-- MoD iTeM WeaR MeSSaGe ("You caught "..) GeTBaiTBack NRMiN CHaNCe (../120) + {"fishing", "fish_raw", 0, "a Fish.", false, 1, 60}, + {"animal_clownfish", "clownfish", 0, "a Clownfish.", false, 61, 10}, + {"animal_fish_blue_white", "fish_blue_white", 0, "a Blue white fish.", false, 71, 10}, + {"default", "stick", 0, "a Twig.", true, 81, 2}, + {"mobs", "rat", 0, "a Rat.", false, 83, 1}, + {"animal_rat", "rat", 0, "a Rat.", false, 84, 1}, + {"", "rat", 0, "a Rat.", false, 85, 1}, + {"flowers_plus", "seaweed", 0, "some Seaweed.", true, 86, 20}, + {"seaplants", "kelpgreen", 0, "a Green Kelp.", true, 106, 10}, + {"farming", "string", 0, "a String.", true, 116, 2}, + {"fishing", "pole", PoLeWeaR, "an old Fishing Pole.", true, 118, 2}, + {"3d_armor", "boots_wood", BooTSWear, "some very old Boots.", true, 120, 1}, + {"trunks", "twig_1", 0, "a Twig.", true, 121, 2}, +} +minetest.register_alias("flowers_plus:seaweed", "flowers:seaweed") -- exception + +local PLaNTS = { + -- MoD* iTeM MeSSaGe ("You caught "..) + {"flowers", "waterlily", "a Waterlily." }, + {"flowers", "waterlily_225", "a Waterlily." }, + {"flowers", "waterlily_45", "a Waterlily." }, + {"flowers", "waterlily_675", "a Waterlily." }, + {"flowers", "waterlily_s1", "a Waterlily." }, + {"flowers", "waterlily_s2", "a Waterlily." }, + {"flowers", "waterlily_s3", "a Waterlily." }, + {"flowers", "waterlily_s4", "a Waterlily." }, + {"flowers", "seaweed", "some Seaweed."}, + {"flowers", "seaweed_2", "some Seaweed."}, + {"flowers", "seaweed_3", "some Seaweed."}, + {"flowers", "seaweed_4", "some Seaweed."}, + {"trunks", "twig_1", "a Twig." }, + {"trunks", "twig_2", "a Twig." }, + {"trunks", "twig_3", "a Twig." }, + {"trunks", "twig_4", "a Twig." }, + {"trunks", "twig_5", "a Twig." }, + {"trunks", "twig_7", "a Twig." }, + {"trunks", "twig_8", "a Twig." }, + {"trunks", "twig_9", "a Twig." }, + {"trunks", "twig_10", "a Twig." }, + {"trunks", "twig_11", "a Twig." }, + {"trunks", "twig_12", "a Twig." }, + {"trunks", "twig_13", "a Twig." }, +} +-- *as used in the node name + +local MoBS = { -- not in use + -- iTeM MeSSaGe ("You caught "..) + {"animal_clownfish:clownfish", "a Clownfish." }, + {"animal_fish_blue_white:fish_blue_white", "a Blue white fish."}, +} + +minetest.register_node("fishing:bobber_box", { + drawtype = "nodebox", + node_box = { + type = "fixed", + fixed = { +-- { left, bottom, front, right, top , back} + {-8/16, -8/16, 0, 8/16, 8/16, 0}, -- feathers + {-2/16, -8/16, -2/16, 2/16, -4/16, 2/16}, -- bobber + } + }, + tiles = { + "fishing_bobber_top.png", + "fishing_bobber_bottom.png", + "fishing_bobber.png", + "fishing_bobber.png", + "fishing_bobber.png", + "fishing_bobber.png^[transformFX" + }, -- + groups = {not_in_creative_inventory=1}, +}) + +local FISHING_BOBBER_ENTITY={ + hp_max = 605, + water_damage = 1, + physical = true, + timer = 0, + env_damage_timer = 0, + visual = "wielditem", + visual_size = {x=1/3, y=1/3, z=1/3}, + textures = {"fishing:bobber_box"}, + -- {left ,bottom, front, right, top , back} + collisionbox = {-2/16, -4/16, -2/16, 2/16, 0/16, 2/16}, + view_range = 7, +-- DESTROY BOBBER WHEN PUNCHING IT + on_punch = function (self, puncher, time_from_last_punch, tool_capabilities, dir) + local player = puncher:get_player_name() + local inv = puncher:get_inventory() + if MESSAGES == true then minetest.chat_send_player(player, "You didn't catch anything.", false) end -- fish escaped + if not minetest.setting_getbool("creative_mode") then + if inv:room_for_item("main", {name="fishing:bait_worm", count=1, wear=0, metadata=""}) then + inv:add_item("main", {name="fishing:bait_worm", count=1, wear=0, metadata=""}) + if MESSAGES == true then minetest.chat_send_player(player, "The bait is still there.", false) end -- bait still there + end + end + -- make sound and remove bobber + minetest.sound_play("fishing_bobber1", { + pos = self.object:getpos(), + gain = 0.5, + }) + self.object:remove() + end, +-- WHEN RIGHTCLICKING THE BOBBER THE FOLLOWING HAPPENS (CLICK AT THE RIGHT TIME WHILE HOLDING A FISHING POLE) + on_rightclick = function (self, clicker) + local item = clicker:get_wielded_item() + local player = clicker:get_player_name() + if item:get_name() == "fishing:pole" then + local inv = clicker:get_inventory() + local say = minetest.chat_send_player + local pos = self.object:getpos() + -- catch visible plant + if minetest.get_node(pos).name ~= "air" then + for i in ipairs(PLaNTS) do + local PLaNT = PLaNTS[i][1]..":"..PLaNTS[i][2] + local MeSSaGe = PLaNTS[i][3] + local DRoP = minetest.registered_nodes[PLaNT].drop + if minetest.get_node(pos).name == PLaNT then + minetest.add_node({x=pos.x, y=pos.y, z=pos.z}, {name="air"}) + if inv:room_for_item("main", {name=DRoP, count=1, wear=0, metadata=""}) then + inv:add_item("main", {name=DRoP, count=1, wear=0, metadata=""}) + if MESSAGES == true then say(player, "You caught "..MeSSaGe, false) end -- caught Plant + end + if not minetest.setting_getbool("creative_mode") then + if inv:room_for_item("main", {name="fishing:bait_worm", count=1, wear=0, metadata=""}) then + inv:add_item("main", {name="fishing:bait_worm", count=1, wear=0, metadata=""}) + if MESSAGES == true then say(player, "The bait is still there.", false) end -- bait still there + end + end + end + end + --end + elseif minetest.get_node(pos).name == "air" then + -- catch visible fish and invisible stuff + if self.object:get_hp() <= 300 then + if math.random(1, 100) < FISH_CHANCE then + local chance = math.random(1, 122) -- ><((((º> + for i in pairs(CaTCH) do + local MoD = CaTCH[i][1] + local iTeM = CaTCH[i][2] + local WeaR = CaTCH[i][3] + local MeSSaGe = CaTCH[i][4] + local GeTBaiTBack = CaTCH[i][5] + local NRMiN = CaTCH[i][6] + local CHaNCe = CaTCH[i][7] + local NRMaX = NRMiN + CHaNCe - 1 + if chance <= NRMaX and chance >= NRMiN then + if minetest.get_modpath(MoD) ~= nil then + -- remove visible fish, if there + local find_fish = minetest.get_objects_inside_radius({x=pos.x,y=pos.y+0.5,z=pos.z}, 1) + for k, obj in pairs(find_fish) do + if obj:get_luaentity() ~= nil and obj:get_luaentity().name == "animal_fish_blue_white:fish_blue_white" then + MoD = "animal_fish_blue_white" + iTeM = "fish_blue_white" + WeaR = 0 + MeSSaGe = "a Blue white fish." + obj:remove() + end + end + -- add (in)visible fish to inventory + if inv:room_for_item("main", {name=MoD..":"..iTeM, count=1, wear=WeaR, metadata=""}) then + inv:add_item("main", {name=MoD..":"..iTeM, count=1, wear=WeaR, metadata=""}) + if MESSAGES == true then say(player, "You caught "..MeSSaGe, false) end -- caught somethin' + end + if not minetest.setting_getbool("creative_mode") then + if GeTBaiTBack == true then + if inv:room_for_item("main", {name="fishing:bait_worm", count=1, wear=0, metadata=""}) then + inv:add_item("main", {name="fishing:bait_worm", count=1, wear=0, metadata=""}) + if MESSAGES == true then say(player, "The bait is still there.", false) end -- bait still there? + end + end + end + else + if inv:room_for_item("main", {name="fishing:fish_raw", count=1, wear=0, metadata=""}) then + inv:add_item("main", {name="fishing:fish_raw", count=1, wear=0, metadata=""}) + if MESSAGES == true then say(player, "You caught a Fish.", false) end -- caught Fish + end + end + end + end + else --if math.random(1, 100) > FISH_CHANCE then + if MESSAGES == true then say(player, "Your fish escaped.", false) end -- fish escaped + end + end + if self.object:get_hp() > 300 and minetest.get_node(pos).name == "air" then + if MESSAGES == true then say(player, "You didn't catch anything.", false) end -- fish escaped + if not minetest.setting_getbool("creative_mode") then + if math.random(1, 2) == 1 then + if inv:room_for_item("main", {name="fishing:bait_worm", count=1, wear=0, metadata=""}) then + inv:add_item("main", {name="fishing:bait_worm", count=1, wear=0, metadata=""}) + if MESSAGES == true then say(player, "The bait is still there.", false) end -- bait still there + end + end + end + end + end + end + -- weither player has fishing pole or not + -- make sound and remove bobber + minetest.sound_play("fishing_bobber1", { + pos = self.object:getpos(), + gain = 0.5, + }) + self.object:remove() + end, +-- AS SOON AS THE BOBBER IS PLACED IT WILL ACT LIKE + on_step = function(self, dtime) + local pos = self.object:getpos() + if BOBBER_CHECK_RADIUS > 0 then + local objs = minetest.get_objects_inside_radius(pos, BOBBER_CHECK_RADIUS) + for k, obj in pairs(objs) do + if obj:get_luaentity() ~= nil then + if obj:get_luaentity().name == "fishing:bobber_entity" then + if obj:get_luaentity() ~= self then + self.object:remove() + end + end + end + end + end + + if math.random(1, 4) == 1 then + self.object:setyaw(self.object:getyaw()+((math.random(0,360)-180)/2880*math.pi)) + end + for _,player in pairs(minetest.get_connected_players()) do + local s = self.object:getpos() + local p = player:getpos() + local dist = ((p.x-s.x)^2 + (p.y-s.y)^2 + (p.z-s.z)^2)^0.5 + if dist > self.view_range then + -- make sound and remove bobber + minetest.sound_play("fishing_bobber1", { + pos = self.object:getpos(), + gain = 0.5, + }) + self.object:remove() + end + end + + if self.object:get_hp() > 310 then + local find_fish = minetest.get_objects_inside_radius({x=pos.x,y=pos.y+0.5,z=pos.z}, 1) + for k, obj in pairs(find_fish) do + if obj:get_luaentity() ~= nil then + if obj:get_luaentity().name == "animal_fish_blue_white:fish_blue_white" then + if math.random(1, 30) == 1 then + self.object:set_hp(310) + end + end + end + end + end + + + local do_env_damage = function(self) + self.object:set_hp(self.object:get_hp()-self.water_damage) + if self.object:get_hp() == 600 then + self.object:moveto({x=pos.x,y=pos.y-0.015625,z=pos.z}) + elseif self.object:get_hp() == 595 then + self.object:moveto({x=pos.x,y=pos.y+0.015625,z=pos.z}) + elseif self.object:get_hp() == 590 then + self.object:moveto({x=pos.x,y=pos.y+0.015625,z=pos.z}) + elseif self.object:get_hp() == 585 then + self.object:moveto({x=pos.x,y=pos.y-0.015625,z=pos.z}) + self.object:set_hp(self.object:get_hp()-(math.random(1, 275))) + elseif self.object:get_hp() == 300 then + minetest.sound_play("fishing_bobber1", { + pos = self.object:getpos(), + gain = 0.5, + }) + minetest.add_particlespawner(30, 0.5, -- for how long (?) -- Particles on splash + {x=pos.x,y=pos.y-0.0625,z=pos.z}, {x=pos.x,y=pos.y,z=pos.z}, -- position min, pos max + {x=-2,y=-0.0625,z=-2}, {x=2,y=3,z=2}, -- velocity min, vel max + {x=0,y=-9.8,z=0}, {x=0,y=-9.8,z=0}, + 0.3, 1.2, + 0.25, 0.5, -- min size, max size + false, "default_snow.png") + self.object:moveto({x=pos.x,y=pos.y-0.0625,z=pos.z}) + elseif self.object:get_hp() == 295 then + self.object:moveto({x=pos.x,y=pos.y+0.0625,z=pos.z}) + elseif self.object:get_hp() == 290 then + self.object:moveto({x=pos.x,y=pos.y+0.0625,z=pos.z}) + elseif self.object:get_hp() == 285 then + self.object:moveto({x=pos.x,y=pos.y-0.1,z=pos.z}) + elseif self.object:get_hp() < 284 then + self.object:moveto({x=pos.x+(0.001*(math.random(-8, 8))),y=pos.y,z=pos.z+(0.001*(math.random(-8, 8)))}) + self.object:setyaw(self.object:getyaw()+((math.random(0,360)-180)/1440*math.pi)) + elseif self.object:get_hp() == 0 then + -- make sound and remove bobber + minetest.sound_play("fishing_bobber1", { + pos = self.object:getpos(), + gain = 0.5, + }) + self.object:remove() + end + end + do_env_damage(self) + end, +} + +minetest.register_entity("fishing:bobber_entity", FISHING_BOBBER_ENTITY) \ No newline at end of file diff --git a/mods/fishing/bobber_shark.lua b/mods/fishing/bobber_shark.lua new file mode 100755 index 00000000..858f5327 --- /dev/null +++ b/mods/fishing/bobber_shark.lua @@ -0,0 +1,223 @@ +----------------------------------------------------------------------------------------------- +-- Fishing - Mossmanikin's version - Bobber Shark 0.0.6 +-- License (code & textures): WTFPL +----------------------------------------------------------------------------------------------- + +-- Here's what you can catch if you use a fish as bait +local CaTCH_BiG = { +-- MoD iTeM WeaR MeSSaGe ("You caught "..) GeTBaiTBack NRMiN CHaNCe (../120) + {"fishing", "shark", 0, "a small Shark.", false, 1, 2}, + {"fishing", "pike", 0, "a Northern Pike.", false, 3, 3} +} + +local PLaNTS = { + -- MoD* iTeM MeSSaGe ("You caught "..) + {"flowers", "waterlily", "a Waterlily." }, + {"flowers", "waterlily_225", "a Waterlily." }, + {"flowers", "waterlily_45", "a Waterlily." }, + {"flowers", "waterlily_675", "a Waterlily." }, + {"flowers", "waterlily_s1", "a Waterlily." }, + {"flowers", "waterlily_s2", "a Waterlily." }, + {"flowers", "waterlily_s3", "a Waterlily." }, + {"flowers", "waterlily_s4", "a Waterlily." }, + {"flowers", "seaweed", "some Seaweed."}, + {"flowers", "seaweed_2", "some Seaweed."}, + {"flowers", "seaweed_3", "some Seaweed."}, + {"flowers", "seaweed_4", "some Seaweed."}, + {"trunks", "twig_1", "a Twig." }, + {"trunks", "twig_2", "a Twig." }, + {"trunks", "twig_3", "a Twig." }, + {"trunks", "twig_4", "a Twig." }, + {"trunks", "twig_5", "a Twig." }, + {"trunks", "twig_7", "a Twig." }, + {"trunks", "twig_8", "a Twig." }, + {"trunks", "twig_9", "a Twig." }, + {"trunks", "twig_10", "a Twig." }, + {"trunks", "twig_11", "a Twig." }, + {"trunks", "twig_12", "a Twig." }, + {"trunks", "twig_13", "a Twig." }, +} +-- *as used in the node name + +local FISHING_BOBBER_ENTITY_SHARK={ + hp_max = 605, + water_damage = 1, + physical = true, + timer = 0, + env_damage_timer = 0, + visual = "wielditem", + visual_size = {x=1/3, y=1/3, z=1/3}, + textures = {"fishing:bobber_box"}, + -- {left ,bottom, front, right, top , back} + collisionbox = {-2/16, -4/16, -2/16, 2/16, 0/16, 2/16}, + view_range = 7, +-- DESTROY BOBBER WHEN PUNCHING IT + on_punch = function (self, puncher, time_from_last_punch, tool_capabilities, dir) + local player = puncher:get_player_name() + if MESSAGES == true then minetest.chat_send_player(player, "Your fish escaped.", false) end -- fish escaped + minetest.sound_play("fishing_bobber1", { + pos = self.object:getpos(), + gain = 0.5, + }) + self.object:remove() + end, +-- WHEN RIGHTCLICKING THE BOBBER THE FOLLOWING HAPPENS (CLICK AT THE RIGHT TIME WHILE HOLDING A FISHING POLE) + on_rightclick = function (self, clicker) + local item = clicker:get_wielded_item() + local player = clicker:get_player_name() + local say = minetest.chat_send_player + if item:get_name() == "fishing:pole" then + local inv = clicker:get_inventory() + local pos = self.object:getpos() + -- catch visible plant + if minetest.get_node(pos).name ~= "air" then + for i in ipairs(PLaNTS) do + local PLaNT = PLaNTS[i][1]..":"..PLaNTS[i][2] + local MeSSaGe = PLaNTS[i][3] + local DRoP = minetest.registered_nodes[PLaNT].drop + if minetest.get_node(pos).name == PLaNT then + minetest.add_node({x=pos.x, y=pos.y, z=pos.z}, {name="air"}) + if inv:room_for_item("main", {name=DRoP, count=1, wear=0, metadata=""}) then + inv:add_item("main", {name=DRoP, count=1, wear=0, metadata=""}) + if MESSAGES == true then say(player, "You caught "..MeSSaGe, false) end -- caught Plant + end + if not minetest.setting_getbool("creative_mode") then + if inv:room_for_item("main", {name="fishing:fish_raw", count=1, wear=0, metadata=""}) then + inv:add_item("main", {name="fishing:bait_worm", count=1, wear=0, metadata=""}) + if MESSAGES == true then say(player, "The bait is still there.", false) end -- bait still there + end + end + end + end + end + --elseif minetest.get_node(pos).name == "air" then + if self.object:get_hp() <= 300 then + if math.random(1, 100) < SHARK_CHANCE then + local chance = math.random(1, 5) -- ><((((º> + for i in pairs(CaTCH_BiG) do + local MoD = CaTCH_BiG[i][1] + local iTeM = CaTCH_BiG[i][2] + local WeaR = CaTCH_BiG[i][3] + local MeSSaGe = CaTCH_BiG[i][4] + local GeTBaiTBack = CaTCH_BiG[i][5] + local NRMiN = CaTCH_BiG[i][6] + local CHaNCe = CaTCH_BiG[i][7] + local NRMaX = NRMiN + CHaNCe - 1 + if chance <= NRMaX and chance >= NRMiN then + if minetest.get_modpath(MoD) ~= nil then + if inv:room_for_item("main", {name=MoD..":"..iTeM, count=1, wear=WeaR, metadata=""}) then + inv:add_item("main", {name=MoD..":"..iTeM, count=1, wear=WeaR, metadata=""}) + if MESSAGES == true then say(player, "You caught "..MeSSaGe, false) end -- caught somethin' + end + if not minetest.setting_getbool("creative_mode") then + if GeTBaiTBack == true then + if inv:room_for_item("main", {name="fishing:fish_raw", count=1, wear=0, metadata=""}) then + inv:add_item("main", {name="fishing:fish_raw", count=1, wear=0, metadata=""}) + if MESSAGES == true then say(player, "The bait is still there.", false) end -- bait still there? + end + end + end + end + end + end + else --if math.random(1, 100) > FISH_CHANCE then + if MESSAGES == true then say(player, "Your fish escaped.", false) end -- fish escaped + end + end + if self.object:get_hp() > 300 and minetest.get_node(pos).name == "air" then + if MESSAGES == true then say(player, "You didn't catch any fish.", false) end -- fish escaped + if not minetest.setting_getbool("creative_mode") then + if math.random(1, 3) == 1 then + if inv:room_for_item("main", {name="fishing:fish_raw", count=1, wear=0, metadata=""}) then + inv:add_item("main", {name="fishing:fish_raw", count=1, wear=0, metadata=""}) + if MESSAGES == true then say(player, "The bait is still there.", false) end -- bait still there + end + end + end + end + --end + else + if MESSAGES == true then say(player, "Your fish escaped.", false) end -- fish escaped + end + minetest.sound_play("fishing_bobber1", { + pos = self.object:getpos(), + gain = 0.5, + }) + self.object:remove() + end, +-- AS SOON AS THE BOBBER IS PLACED IT WILL ACT LIKE + on_step = function(self, dtime) + local pos = self.object:getpos() + if BOBBER_CHECK_RADIUS > 0 then + local objs = minetest.env:get_objects_inside_radius({x=pos.x,y=pos.y,z=pos.z}, BOBBER_CHECK_RADIUS) + for k, obj in pairs(objs) do + if obj:get_luaentity() ~= nil then + if obj:get_luaentity().name == "fishing:bobber_entity_shark" then + if obj:get_luaentity() ~= self then + self.object:remove() + end + end + end + end + end + if math.random(1, 4) == 1 then + self.object:setyaw(self.object:getyaw()+((math.random(0,360)-180)/2880*math.pi)) + end + for _,player in pairs(minetest.get_connected_players()) do + local s = self.object:getpos() + local p = player:getpos() + local dist = ((p.x-s.x)^2 + (p.y-s.y)^2 + (p.z-s.z)^2)^0.5 + if dist > self.view_range then + minetest.sound_play("fishing_bobber1", { + pos = self.object:getpos(), + gain = 0.5, + }) + self.object:remove() + end + end + local do_env_damage = function(self) + self.object:set_hp(self.object:get_hp()-self.water_damage) + if self.object:get_hp() == 600 then + self.object:moveto({x=pos.x,y=pos.y-0.015625,z=pos.z}) + elseif self.object:get_hp() == 595 then + self.object:moveto({x=pos.x,y=pos.y+0.015625,z=pos.z}) + elseif self.object:get_hp() == 590 then + self.object:moveto({x=pos.x,y=pos.y+0.015625,z=pos.z}) + elseif self.object:get_hp() == 585 then + self.object:moveto({x=pos.x,y=pos.y-0.015625,z=pos.z}) + self.object:set_hp(self.object:get_hp()-(math.random(1, 200))) + elseif self.object:get_hp() == 300 then + minetest.sound_play("fishing_bobber1", { + pos = self.object:getpos(), + gain = 0.7, + }) + minetest.add_particlespawner(40, 0.5, -- for how long (?) -- Particles on splash + {x=pos.x,y=pos.y-0.0625,z=pos.z}, {x=pos.x,y=pos.y-0.2,z=pos.z}, -- position min, pos max + {x=-3,y=-0.0625,z=-3}, {x=3,y=5,z=3}, -- velocity min, vel max + {x=0,y=-9.8,z=0}, {x=0,y=-9.8,z=0}, + 0.3, 2.4, + 0.25, 0.5, -- min size, max size + false, "default_snow.png") + self.object:moveto({x=pos.x,y=pos.y-0.625,z=pos.z}) + elseif self.object:get_hp() == 295 then + self.object:moveto({x=pos.x,y=pos.y+0.425,z=pos.z}) + elseif self.object:get_hp() == 290 then + self.object:moveto({x=pos.x,y=pos.y+0.0625,z=pos.z}) + elseif self.object:get_hp() == 285 then + self.object:moveto({x=pos.x,y=pos.y-0.0625,z=pos.z}) + elseif self.object:get_hp() < 284 then + self.object:moveto({x=pos.x+(0.001*(math.random(-8, 8))),y=pos.y,z=pos.z+(0.001*(math.random(-8, 8)))}) + self.object:setyaw(self.object:getyaw()+((math.random(0,360)-180)/720*math.pi)) + elseif self.object:get_hp() == 0 then + minetest.sound_play("fishing_bobber1", { + pos = self.object:getpos(), + gain = 0.5, + }) + self.object:remove() + end + end + do_env_damage(self) + end, +} + +minetest.register_entity("fishing:bobber_entity_shark", FISHING_BOBBER_ENTITY_SHARK) \ No newline at end of file diff --git a/mods/fishing/crafting.lua b/mods/fishing/crafting.lua new file mode 100755 index 00000000..247e190d --- /dev/null +++ b/mods/fishing/crafting.lua @@ -0,0 +1,95 @@ +----------------------------------------------------------------------------------------------- +-- Fishing - Mossmanikin's version - Recipes 0.0.8 +----------------------------------------------------------------------------------------------- +-- License (code & textures): WTFPL +-- Contains code from: animal_clownfish, animal_fish_blue_white, fishing (original), stoneage +-- Looked at code from: +-- Dependencies: default, farming +-- Supports: animal_clownfish, animal_fish_blue_white, animal_rat, mobs +----------------------------------------------------------------------------------------------- + +----------------------------------------------------------------------------------------------- +-- Fishing Pole +----------------------------------------------------------------------------------------------- +-- mc style +minetest.register_craft({ + output = "fishing:pole", + recipe = { + {"", "", "default:stick" }, + {"", "default:stick", "farming:string"}, + {"default:stick", "", "farming:string"}, + } +}) + +minetest.register_craft({ + output = "fishing:pole", + recipe = { + {"", "", "default:stick" }, + {"", "default:stick", "moreblocks:rope"}, + {"default:stick", "", "moreblocks:rope"}, + } +}) + +minetest.register_craft({ + output = "fishing:pole", + recipe = { + {"", "", "default:stick" }, + {"", "default:stick", "ropes:rope" }, + {"default:stick", "", "ropes:rope" }, + } +}) + + +----------------------------------------------------------------------------------------------- +-- Roasted Fish +----------------------------------------------------------------------------------------------- +minetest.register_craft({ + type = "cooking", + output = "fishing:fish", + recipe = "fishing:fish_raw", + cooktime = 2, +}) + +----------------------------------------------------------------------------------------------- +-- Wheat Seed +----------------------------------------------------------------------------------------------- +minetest.register_craft({ + type = "shapeless", + output = "farming:seed_wheat", + recipe = {"farming:wheat"}, +}) +----------------------------------------------------------------------------------------------- +-- Sushi +----------------------------------------------------------------------------------------------- +minetest.register_craft({ + type = "shapeless", + output = "fishing:sushi", + recipe = {"fishing:fish_raw","farming:seed_wheat","flowers:seaweed"}, +}) + +minetest.register_craft({ + type = "shapeless", + output = "fishing:sushi", + recipe = {"fishing:fish_raw","farming:seed_wheat","seaplants:kelpgreen"}, + +}) + +----------------------------------------------------------------------------------------------- +-- Roasted Shark +----------------------------------------------------------------------------------------------- +minetest.register_craft({ + type = "cooking", + output = "fishing:shark_cooked", + recipe = "fishing:shark", + cooktime = 2, +}) + +----------------------------------------------------------------------------------------------- +-- Roasted Pike +----------------------------------------------------------------------------------------------- +minetest.register_craft({ + type = "cooking", + output = "fishing:pike_cooked", + recipe = "fishing:pike", + cooktime = 2, +}) diff --git a/mods/fishing/depends.txt b/mods/fishing/depends.txt index 331d858c..d77ba253 100755 --- a/mods/fishing/depends.txt +++ b/mods/fishing/depends.txt @@ -1 +1,2 @@ -default \ No newline at end of file +default +farming diff --git a/mods/fishing/fishes.lua b/mods/fishing/fishes.lua new file mode 100755 index 00000000..1290e1c2 --- /dev/null +++ b/mods/fishing/fishes.lua @@ -0,0 +1,70 @@ +----------------------------------------------------------------------------------------------- +-- Fishing - Mossmanikin's version - Fishes 0.0.4 +-- License (code & textures): WTFPL +----------------------------------------------------------------------------------------------- + +----------------------------------------------------------------------------------------------- +-- Fish +----------------------------------------------------------------------------------------------- +minetest.register_craftitem("fishing:fish_raw", { + description = "Fish", + groups = {}, + inventory_image = "fishing_fish.png", + on_use = minetest.item_eat(2), +}) + ----------------------------------------------------- + -- Roasted Fish + ----------------------------------------------------- + minetest.register_craftitem("fishing:fish", { + description = "Roasted Fish", + groups = {}, + inventory_image = "fishing_fish_cooked.png", + on_use = minetest.item_eat(4), + }) + ----------------------------------------------------- + -- Sushi + ----------------------------------------------------- + minetest.register_craftitem("fishing:sushi", { + description = "Sushi (Hoso Maki)", + groups = {}, + inventory_image = "fishing_sushi.png", + on_use = minetest.item_eat(6), + }) + +----------------------------------------------------------------------------------------------- +-- Whatthef... it's a freakin' Shark! +----------------------------------------------------------------------------------------------- +minetest.register_craftitem("fishing:shark", { + description = "Shark", + groups = {}, + inventory_image = "fishing_shark.png", + on_use = minetest.item_eat(2), +}) + ----------------------------------------------------- + -- Roasted Shark + ----------------------------------------------------- + minetest.register_craftitem("fishing:shark_cooked", { + description = "Roasted Shark", + groups = {}, + inventory_image = "fishing_shark_cooked.png", + on_use = minetest.item_eat(6), + }) + +----------------------------------------------------------------------------------------------- +-- Pike +----------------------------------------------------------------------------------------------- +minetest.register_craftitem("fishing:pike", { + description = "Northern Pike", + groups = {}, + inventory_image = "fishing_pike.png", + on_use = minetest.item_eat(2), +}) + ----------------------------------------------------- + -- Roasted Pike + ----------------------------------------------------- + minetest.register_craftitem("fishing:pike_cooked", { + description = "Roasted Northern Pike", + groups = {}, + inventory_image = "fishing_pike_cooked.png", + on_use = minetest.item_eat(6), + }) \ No newline at end of file diff --git a/mods/fishing/fishing.lua b/mods/fishing/fishing.lua deleted file mode 100755 index c5cf5d92..00000000 --- a/mods/fishing/fishing.lua +++ /dev/null @@ -1,86 +0,0 @@ --- Raw Fish (Thanks to Altairas for her Fish image on DeviantArt) -minetest.register_craftitem("fishing:fish_raw", { - description = "Raw Fish", - inventory_image = "fish_raw.png", - on_use = minetest.item_eat(2), -}) - --- Cooked Fish -minetest.register_craftitem("fishing:fish_cooked", { - description = "Cooked Fish", - inventory_image = "fish_cooked.png", - on_use = minetest.item_eat(5), -}) - --- Worm -minetest.register_craftitem("fishing:worm", { - description = "Worm", - inventory_image = "worm.png", -}) - --- Fishing Rod -minetest.register_craftitem("fishing:fishing_rod", { - description = "Fishing Rod", - inventory_image = "fishing_rod.png", - stack_max = 1, - liquids_pointable = true, -}) - --- Fishing Rod (Baited) -minetest.register_craftitem("fishing:fishing_rod_baited", { - description = "Baited Fishing Rod", - inventory_image = "fishing_rod_baited.png", - wield_image = "fishing_rod_wield.png", - stack_max = 1, - liquids_pointable = true, - on_use = function (itemstack, user, pointed_thing) - if pointed_thing and pointed_thing.under then - local node = minetest.get_node(pointed_thing.under) - if string.find(node.name, "default:water_source") then - if math.random(1, 100) < 5 then - local inv = user:get_inventory() - if inv:room_for_item("main", {name="fishing:fish_raw"}) then - inv:add_item("main", {name="fishing:fish_raw"}) - return {name="fishing:fishing_rod"} - else - minetest.chat_send_player(user:get_player_name(), "Your Fish Got Away! Inventory Too Full") - end - end - end - end - end, -}) - --- Fishing Rod -minetest.register_craft({ - output = "fishing:fishing_rod", - recipe = { - {"","","default:stick"}, - {"", "default:stick", "farming:string"}, - {"default:stick", "", "farming:string"}, - } -}) - --- Sift through 4 Dirt Blocks to find Worm -minetest.register_craft({ - output = "fishing:worm", - recipe = { - {"default:dirt","default:dirt"}, - {"default:dirt","default:dirt"}, - } -}) - --- Cooking Fish -minetest.register_craft({ - type = "cooking", - output = "fishing:fish_cooked", - recipe = "fishing:fish_raw", - cooktime = 2, -}) - --- Baiting Fishing Rod -minetest.register_craft({ - type = "shapeless", - output = "fishing:fishing_rod_baited", - recipe = {"fishing:fishing_rod", "fishing:worm"}, -}) diff --git a/mods/fishing/init.lua b/mods/fishing/init.lua index 575988e6..6487db9e 100755 --- a/mods/fishing/init.lua +++ b/mods/fishing/init.lua @@ -1,16 +1,344 @@ ---[[ - Fishing mod extraced out of: +----------------------------------------------------------------------------------------------- +local title = "Fishing - Mossmanikin's version" +local version = "0.2.3" +local mname = "fishing" +----------------------------------------------------------------------------------------------- +-- original by wulfsdad (http://forum.minetest.net/viewtopic.php?id=4375) +-- this version by Mossmanikin (https://forum.minetest.net/viewtopic.php?id=6480) +-- License (code & textures): WTFPL +-- Contains code from: animal_clownfish, animal_fish_blue_white, fishing (original), stoneage +-- Looked at code from: default, farming +-- Dependencies: default +-- Supports: animal_clownfish, animal_fish_blue_white, animal_rat, mobs +----------------------------------------------------------------------------------------------- - Minetest Ethereal Mod 1.08 (https://forum.minetest.net/viewtopic.php?f=11&t=7656) +-- todo: item wear done +-- automatic re-baiting option done (but not optional) +-- different types of fish, done, but not finished +-- add sound done +-- bobber done +-- change rainworms filling inv & make 'em disappear done - Created by ChinChow +-- placable fishing rod for decoration done +-- make bobber move slowly while fish on hook done +-- catch bigger fish with smaller done, but not finished +-- change color of bobber when fish on hook done - Updated by TenPlus1 +----------------------------------------------------------------------------------------------- - Extracted with little changes by Xanthin +dofile(minetest.get_modpath("fishing").."/settings.txt") +dofile(minetest.get_modpath("fishing").."/bobber.lua") +dofile(minetest.get_modpath("fishing").."/bobber_shark.lua") +dofile(minetest.get_modpath("fishing").."/crafting.lua") +dofile(minetest.get_modpath("fishing").."/fishes.lua") +dofile(minetest.get_modpath("fishing").."/worm.lua") +dofile(minetest.get_modpath("fishing").."/trophies.lua") -]] +----------------------------------------------------------------------------------------------- +-- Fishing Pole +----------------------------------------------------------------------------------------------- -fishing = {} -dofile(minetest.get_modpath("fishing").."/fishing.lua") ---dofile(minetest.get_modpath("fishing").."/sealife.lua") +local function rod_wear(itemstack, user, pointed_thing, uses) + itemstack:add_wear(65535/(uses-1)) + return itemstack +end + +minetest.register_tool("fishing:pole", { + + description = "Fishing Pole", + groups = {}, + inventory_image = "fishing_pole.png", + wield_image = "fishing_pole.png^[transformFXR270", + stack_max = 1, + liquids_pointable = true, + on_use = function (itemstack, user, pointed_thing) + if pointed_thing and pointed_thing.under then + local pt = pointed_thing + local node = minetest.get_node(pt.under) + if string.find(node.name, "default:water") then + local player = user:get_player_name() + local inv = user:get_inventory() + if inv:get_stack("main", user:get_wield_index()+1):get_name() == "fishing:bait_worm" then + if not minetest.setting_getbool("creative_mode") then + inv:remove_item("main", "fishing:bait_worm") + end + minetest.sound_play("fishing_bobber2", { + pos = pt.under, + gain = 0.5, + }) + minetest.add_entity({interval = 1,x=pt.under.x, y=pt.under.y+(45/64), z=pt.under.z}, "fishing:bobber_entity") + + if WEAR_OUT == true + and not minetest.setting_getbool("creative_mode") then + return rod_wear(itemstack, user, pointed_thing, 30) + else + return {name="fishing:pole", count=1, wear=0, metadata=""} + end + end + if inv:get_stack("main", user:get_wield_index()+1):get_name() == "fishing:fish_raw" then + if not minetest.setting_getbool("creative_mode") then + inv:remove_item("main", "fishing:fish_raw") + end + minetest.sound_play("fishing_bobber2", { + pos = pt.under, + gain = 0.5, + }) + minetest.add_entity({interval = 1,x=pt.under.x, y=pt.under.y+(45/64), z=pt.under.z}, "fishing:bobber_entity_shark") + + if WEAR_OUT == true + and not minetest.setting_getbool("creative_mode") then + return rod_wear(itemstack, user, pointed_thing, 30) + else + return {name="fishing:pole", count=1, wear=0, metadata=""} + end + end + end + end + return nil + end, + on_place = function(itemstack, placer, pointed_thing) + local pt = pointed_thing + if minetest.get_node(pt.under).name~="default:water_source" and minetest.get_node(pt.under).name~="default:water_flowing" then + local wear = itemstack:get_wear() + --print (wear) + local direction = minetest.dir_to_facedir(placer:get_look_dir()) + --local meta1 = minetest.get_meta(pt.under) + local meta = minetest.get_meta(pt.above) + minetest.set_node(pt.above, {name="fishing:pole_deco", param2=direction}) + --meta1:set_int("wear", wear) + meta:set_int("wear", wear) + if not minetest.setting_getbool("creative_mode") then + itemstack:take_item() + end + end + return itemstack + end, +}) + +if SIMPLE_DECO_FISHING_POLE == true then +minetest.register_node("fishing:pole_deco", { + description = "Fishing Pole", + inventory_image = "fishing_pole.png", + wield_image = "fishing_pole.png^[transformFXR270", + drawtype = "nodebox", + paramtype = "light", + paramtype2 = "facedir", + tiles = { + "fishing_pole_simple.png", + "fishing_pole_simple.png", + "fishing_pole_simple.png", + "fishing_pole_simple.png^[transformFX", + }, + groups = { + snappy=3, + flammable=2, + not_in_creative_inventory=1 + }, + node_box = { + type = "fixed", + fixed = { + { 0 , -1/2 , 0 , 0 , 1/2 , 1 }, + } + }, + selection_box = { + type = "fixed", + fixed = { + {-1/16 , -1/2 , 0 , 1/16 , 1/2 , 1 }, + } + }, + sounds = default.node_sound_wood_defaults(), + on_dig = function(pos, node, digger) + if digger:is_player() and digger:get_inventory() then + local meta = minetest.env:get_meta(pos) + local wear_out = meta:get_int("wear") + digger:get_inventory():add_item("main", {name="fishing:pole", count=1, wear=wear_out, metadata=""}) + end + minetest.remove_node(pos) + end, +}) + +else +minetest.register_node("fishing:pole_deco", { + description = "Fishing Pole", + inventory_image = "fishing_pole.png", + wield_image = "fishing_pole.png^[transformFXR270", + drawtype = "nodebox", + paramtype = "light", + paramtype2 = "facedir", + tiles = { + "fishing_pole_top.png", + "fishing_pole_bottom.png", + "fishing_pole_deco.png", -- right + "fishing_pole_deco.png^[transformFX", -- left + "fishing_pole_back.png", + "fishing_pole_front.png" + }, + node_box = { + type = "fixed", +-- { left , bottom , front , right , top , back } + fixed = { + {-1/32 , -1/16 , 14/16 , 1/32 , 6/16 , 15/16}, + {-1/32 , -3/16 , 13/16 , 1/32 , -1/16 , 14/16}, + {-1/32 , -4/16 , 12/16 , 1/32 , -3/16 , 13/16}, + {-1/32 , -5/16 , 11/16 , 1/32 , -4/16 , 12/16}, + {-1/32 , -6/16 , 9/16 , 1/32 , -5/16 , 11/16}, + {-1/32 , -5/16 , 9/16 , 1/32 , -4/16 , 10/16}, + -- stick + {-1/32 , 6/16 , 12/16 , 1/32 , 7/16 , 15/16}, -- top + {-1/32 , 5/16 , 11/16 , 1/32 , 7/16 , 12/16}, + {-1/32 , 5/16 , 10/16 , 1/32 , 6/16 , 11/16}, + {-1/32 , 4/16 , 9/16 , 1/32 , 6/16 , 10/16}, + {-1/32 , 3/16 , 8/16 , 1/32 , 5/16 , 9/16}, + {-1/32 , 2/16 , 7/16 , 1/32 , 4/16 , 8/16}, + {-1/32 , 1/16 , 6/16 , 1/32 , 3/16 , 7/16}, + {-1/32 , 0 , 5/16 , 1/32 , 2/16 , 6/16}, + {-1/32 , -2/16 , 4/16 , 1/32 , 1/16 , 5/16}, + {-1/32 , -3/16 , 3/16 , 1/32 , 0 , 4/16}, + {-1/32 , -5/16 , 2/16 , 1/32 , -1/16 , 3/16}, + {-1/32 , -7/16 , 1/16 , 1/32 , -3/16 , 2/16}, + {-1/32 , -1/2 , 0 , 1/32 , -5/16 , 1/16}, -- bottom + } + }, + selection_box = { + type = "fixed", + fixed = { + {-1/16 , -1/2 , 0 , 1/16 , 1/2 , 1 }, + } + }, + groups = { + snappy=3, + flammable=2, + not_in_creative_inventory=1 + }, + sounds = default.node_sound_wood_defaults(), + on_dig = function(pos, node, digger) + if digger:is_player() and digger:get_inventory() then + local meta = minetest.get_meta(pos) + local wear_out = meta:get_int("wear") + digger:get_inventory():add_item("main", {name="fishing:pole", count=1, wear=wear_out, metadata=""}) + end + minetest.remove_node(pos) + end, +}) + +end +----------------------------------------------------------------------------------------------- +-- GETTING WORMS +----------------------------------------------------------------------------------------------- +-- get worms from digging in dirt: +if NEW_WORM_SOURCE == false then + +minetest.register_node(":default:dirt", { + description = "Dirt", + tiles = {"default_dirt.png"}, + is_ground_content = true, + groups = {crumbly=3}, + sounds = default.node_sound_dirt_defaults(), + after_dig_node = function (pos, oldnode, oldmetadata, digger) + if math.random(1, 100) < WORM_CHANCE then + local tool_in_use = digger:get_wielded_item():get_name() + if tool_in_use == "" or tool_in_use == "default:dirt" then + if WORM_IS_MOB == true then + minetest.add_entity({x = pos.x, y = pos.y+0.4, z = pos.z}, "fishing:bait_worm_entity") + else + local inv = digger:get_inventory() + if inv:room_for_item("main", {name="fishing:bait_worm", count=1, wear=0, metadata=""}) then + inv:add_item("main", {name="fishing:bait_worm", count=1, wear=0, metadata=""}) + end + end + end + end + end, +}) + +else +-- get worms from digging with hoes: + +-- turns nodes with group soil=1 into soil +local function hoe_on_use(itemstack, user, pointed_thing, uses) + local pt = pointed_thing + -- check if pointing at a node + if not pt then + return + end + if pt.type ~= "node" then + return + end + + local under = minetest.get_node(pt.under) + local p = {x=pt.under.x, y=pt.under.y+1, z=pt.under.z} + local above = minetest.get_node(p) + + -- return if any of the nodes is not registered + if not minetest.registered_nodes[under.name] then + return + end + if not minetest.registered_nodes[above.name] then + return + end + + -- check if the node above the pointed thing is air + if above.name ~= "air" then + return + end + + -- check if pointing at dirt + if minetest.get_item_group(under.name, "soil") ~= 1 then + return + end + + -- turn the node into soil, play sound, get worm and wear out item + minetest.set_node(pt.under, {name="farming:soil"}) + minetest.sound_play("default_dig_crumbly", { + pos = pt.under, + gain = 0.5, + }) + + if math.random(1, 100) < WORM_CHANCE then + if WORM_IS_MOB == true then + minetest.add_entity({x=pt.under.x, y=pt.under.y+0.4, z=pt.under.z}, "fishing:bait_worm_entity") + else + local inv = user:get_inventory() + if inv:room_for_item("main", {name="fishing:bait_worm", count=1, wear=0, metadata=""}) then + inv:add_item("main", {name="fishing:bait_worm", count=1, wear=0, metadata=""}) + end + end + end + itemstack:add_wear(65535/(uses-1)) + return itemstack +end + +-- didn't change the hoes, just here because hoe_on_use is local +minetest.register_tool(":farming:hoe_wood", { + description = "Wooden Hoe", + inventory_image = "farming_tool_woodhoe.png", + on_use = function(itemstack, user, pointed_thing) + return hoe_on_use(itemstack, user, pointed_thing, 30) + end, +}) +minetest.register_tool(":farming:hoe_stone", { + description = "Stone Hoe", + inventory_image = "farming_tool_stonehoe.png", + on_use = function(itemstack, user, pointed_thing) + return hoe_on_use(itemstack, user, pointed_thing, 90) + end, +}) +minetest.register_tool(":farming:hoe_steel", { + description = "Steel Hoe", + inventory_image = "farming_tool_steelhoe.png", + on_use = function(itemstack, user, pointed_thing) + return hoe_on_use(itemstack, user, pointed_thing, 200) + end, +}) +minetest.register_tool(":farming:hoe_bronze", { + description = "Bronze Hoe", + inventory_image = "farming_tool_bronzehoe.png", + on_use = function(itemstack, user, pointed_thing) + return hoe_on_use(itemstack, user, pointed_thing, 220) + end, +}) + +end +----------------------------------------------------------------------------------------------- +print("[Mod] "..title.." ["..version.."] ["..mname.."] Loaded...") +----------------------------------------------------------------------------------------------- \ No newline at end of file diff --git a/mods/fishing/license.txt b/mods/fishing/license.txt deleted file mode 100755 index 94a9ed02..00000000 --- a/mods/fishing/license.txt +++ /dev/null @@ -1,674 +0,0 @@ - GNU GENERAL PUBLIC LICENSE - Version 3, 29 June 2007 - - Copyright (C) 2007 Free Software Foundation, Inc. - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - - Preamble - - The GNU General Public License is a free, copyleft license for -software and other kinds of works. - - The licenses for most software and other practical works are designed -to take away your freedom to share and change the works. By contrast, -the GNU General Public License is intended to guarantee your freedom to -share and change all versions of a program--to make sure it remains free -software for all its users. We, the Free Software Foundation, use the -GNU General Public License for most of our software; it applies also to -any other work released this way by its authors. You can apply it to -your programs, too. - - When we speak of free software, we are referring to freedom, not -price. Our General Public Licenses are designed to make sure that you -have the freedom to distribute copies of free software (and charge for -them if you wish), that you receive source code or can get it if you -want it, that you can change the software or use pieces of it in new -free programs, and that you know you can do these things. - - To protect your rights, we need to prevent others from denying you -these rights or asking you to surrender the rights. Therefore, you have -certain responsibilities if you distribute copies of the software, or if -you modify it: responsibilities to respect the freedom of others. - - For example, if you distribute copies of such a program, whether -gratis or for a fee, you must pass on to the recipients the same -freedoms that you received. You must make sure that they, too, receive -or can get the source code. And you must show them these terms so they -know their rights. - - Developers that use the GNU GPL protect your rights with two steps: -(1) assert copyright on the software, and (2) offer you this License -giving you legal permission to copy, distribute and/or modify it. - - For the developers' and authors' protection, the GPL clearly explains -that there is no warranty for this free software. For both users' and -authors' sake, the GPL requires that modified versions be marked as -changed, so that their problems will not be attributed erroneously to -authors of previous versions. - - Some devices are designed to deny users access to install or run -modified versions of the software inside them, although the manufacturer -can do so. This is fundamentally incompatible with the aim of -protecting users' freedom to change the software. The systematic -pattern of such abuse occurs in the area of products for individuals to -use, which is precisely where it is most unacceptable. Therefore, we -have designed this version of the GPL to prohibit the practice for those -products. If such problems arise substantially in other domains, we -stand ready to extend this provision to those domains in future versions -of the GPL, as needed to protect the freedom of users. - - Finally, every program is threatened constantly by software patents. -States should not allow patents to restrict development and use of -software on general-purpose computers, but in those that do, we wish to -avoid the special danger that patents applied to a free program could -make it effectively proprietary. To prevent this, the GPL assures that -patents cannot be used to render the program non-free. - - The precise terms and conditions for copying, distribution and -modification follow. - - TERMS AND CONDITIONS - - 0. Definitions. - - "This License" refers to version 3 of the GNU General Public License. - - "Copyright" also means copyright-like laws that apply to other kinds of -works, such as semiconductor masks. - - "The Program" refers to any copyrightable work licensed under this -License. Each licensee is addressed as "you". "Licensees" and -"recipients" may be individuals or organizations. - - To "modify" a work means to copy from or adapt all or part of the work -in a fashion requiring copyright permission, other than the making of an -exact copy. The resulting work is called a "modified version" of the -earlier work or a work "based on" the earlier work. - - A "covered work" means either the unmodified Program or a work based -on the Program. - - To "propagate" a work means to do anything with it that, without -permission, would make you directly or secondarily liable for -infringement under applicable copyright law, except executing it on a -computer or modifying a private copy. Propagation includes copying, -distribution (with or without modification), making available to the -public, and in some countries other activities as well. - - To "convey" a work means any kind of propagation that enables other -parties to make or receive copies. Mere interaction with a user through -a computer network, with no transfer of a copy, is not conveying. - - An interactive user interface displays "Appropriate Legal Notices" -to the extent that it includes a convenient and prominently visible -feature that (1) displays an appropriate copyright notice, and (2) -tells the user that there is no warranty for the work (except to the -extent that warranties are provided), that licensees may convey the -work under this License, and how to view a copy of this License. If -the interface presents a list of user commands or options, such as a -menu, a prominent item in the list meets this criterion. - - 1. Source Code. - - The "source code" for a work means the preferred form of the work -for making modifications to it. "Object code" means any non-source -form of a work. - - A "Standard Interface" means an interface that either is an official -standard defined by a recognized standards body, or, in the case of -interfaces specified for a particular programming language, one that -is widely used among developers working in that language. - - The "System Libraries" of an executable work include anything, other -than the work as a whole, that (a) is included in the normal form of -packaging a Major Component, but which is not part of that Major -Component, and (b) serves only to enable use of the work with that -Major Component, or to implement a Standard Interface for which an -implementation is available to the public in source code form. A -"Major Component", in this context, means a major essential component -(kernel, window system, and so on) of the specific operating system -(if any) on which the executable work runs, or a compiler used to -produce the work, or an object code interpreter used to run it. - - The "Corresponding Source" for a work in object code form means all -the source code needed to generate, install, and (for an executable -work) run the object code and to modify the work, including scripts to -control those activities. However, it does not include the work's -System Libraries, or general-purpose tools or generally available free -programs which are used unmodified in performing those activities but -which are not part of the work. For example, Corresponding Source -includes interface definition files associated with source files for -the work, and the source code for shared libraries and dynamically -linked subprograms that the work is specifically designed to require, -such as by intimate data communication or control flow between those -subprograms and other parts of the work. - - The Corresponding Source need not include anything that users -can regenerate automatically from other parts of the Corresponding -Source. - - The Corresponding Source for a work in source code form is that -same work. - - 2. Basic Permissions. - - All rights granted under this License are granted for the term of -copyright on the Program, and are irrevocable provided the stated -conditions are met. This License explicitly affirms your unlimited -permission to run the unmodified Program. The output from running a -covered work is covered by this License only if the output, given its -content, constitutes a covered work. This License acknowledges your -rights of fair use or other equivalent, as provided by copyright law. - - You may make, run and propagate covered works that you do not -convey, without conditions so long as your license otherwise remains -in force. You may convey covered works to others for the sole purpose -of having them make modifications exclusively for you, or provide you -with facilities for running those works, provided that you comply with -the terms of this License in conveying all material for which you do -not control copyright. Those thus making or running the covered works -for you must do so exclusively on your behalf, under your direction -and control, on terms that prohibit them from making any copies of -your copyrighted material outside their relationship with you. - - Conveying under any other circumstances is permitted solely under -the conditions stated below. Sublicensing is not allowed; section 10 -makes it unnecessary. - - 3. Protecting Users' Legal Rights From Anti-Circumvention Law. - - No covered work shall be deemed part of an effective technological -measure under any applicable law fulfilling obligations under article -11 of the WIPO copyright treaty adopted on 20 December 1996, or -similar laws prohibiting or restricting circumvention of such -measures. - - When you convey a covered work, you waive any legal power to forbid -circumvention of technological measures to the extent such circumvention -is effected by exercising rights under this License with respect to -the covered work, and you disclaim any intention to limit operation or -modification of the work as a means of enforcing, against the work's -users, your or third parties' legal rights to forbid circumvention of -technological measures. - - 4. Conveying Verbatim Copies. - - You may convey verbatim copies of the Program's source code as you -receive it, in any medium, provided that you conspicuously and -appropriately publish on each copy an appropriate copyright notice; -keep intact all notices stating that this License and any -non-permissive terms added in accord with section 7 apply to the code; -keep intact all notices of the absence of any warranty; and give all -recipients a copy of this License along with the Program. - - You may charge any price or no price for each copy that you convey, -and you may offer support or warranty protection for a fee. - - 5. Conveying Modified Source Versions. - - You may convey a work based on the Program, or the modifications to -produce it from the Program, in the form of source code under the -terms of section 4, provided that you also meet all of these conditions: - - a) The work must carry prominent notices stating that you modified - it, and giving a relevant date. - - b) The work must carry prominent notices stating that it is - released under this License and any conditions added under section - 7. This requirement modifies the requirement in section 4 to - "keep intact all notices". - - c) You must license the entire work, as a whole, under this - License to anyone who comes into possession of a copy. This - License will therefore apply, along with any applicable section 7 - additional terms, to the whole of the work, and all its parts, - regardless of how they are packaged. This License gives no - permission to license the work in any other way, but it does not - invalidate such permission if you have separately received it. - - d) If the work has interactive user interfaces, each must display - Appropriate Legal Notices; however, if the Program has interactive - interfaces that do not display Appropriate Legal Notices, your - work need not make them do so. - - A compilation of a covered work with other separate and independent -works, which are not by their nature extensions of the covered work, -and which are not combined with it such as to form a larger program, -in or on a volume of a storage or distribution medium, is called an -"aggregate" if the compilation and its resulting copyright are not -used to limit the access or legal rights of the compilation's users -beyond what the individual works permit. Inclusion of a covered work -in an aggregate does not cause this License to apply to the other -parts of the aggregate. - - 6. Conveying Non-Source Forms. - - You may convey a covered work in object code form under the terms -of sections 4 and 5, provided that you also convey the -machine-readable Corresponding Source under the terms of this License, -in one of these ways: - - a) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by the - Corresponding Source fixed on a durable physical medium - customarily used for software interchange. - - b) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by a - written offer, valid for at least three years and valid for as - long as you offer spare parts or customer support for that product - model, to give anyone who possesses the object code either (1) a - copy of the Corresponding Source for all the software in the - product that is covered by this License, on a durable physical - medium customarily used for software interchange, for a price no - more than your reasonable cost of physically performing this - conveying of source, or (2) access to copy the - Corresponding Source from a network server at no charge. - - c) Convey individual copies of the object code with a copy of the - written offer to provide the Corresponding Source. This - alternative is allowed only occasionally and noncommercially, and - only if you received the object code with such an offer, in accord - with subsection 6b. - - d) Convey the object code by offering access from a designated - place (gratis or for a charge), and offer equivalent access to the - Corresponding Source in the same way through the same place at no - further charge. You need not require recipients to copy the - Corresponding Source along with the object code. If the place to - copy the object code is a network server, the Corresponding Source - may be on a different server (operated by you or a third party) - that supports equivalent copying facilities, provided you maintain - clear directions next to the object code saying where to find the - Corresponding Source. Regardless of what server hosts the - Corresponding Source, you remain obligated to ensure that it is - available for as long as needed to satisfy these requirements. - - e) Convey the object code using peer-to-peer transmission, provided - you inform other peers where the object code and Corresponding - Source of the work are being offered to the general public at no - charge under subsection 6d. - - A separable portion of the object code, whose source code is excluded -from the Corresponding Source as a System Library, need not be -included in conveying the object code work. - - A "User Product" is either (1) a "consumer product", which means any -tangible personal property which is normally used for personal, family, -or household purposes, or (2) anything designed or sold for incorporation -into a dwelling. In determining whether a product is a consumer product, -doubtful cases shall be resolved in favor of coverage. For a particular -product received by a particular user, "normally used" refers to a -typical or common use of that class of product, regardless of the status -of the particular user or of the way in which the particular user -actually uses, or expects or is expected to use, the product. A product -is a consumer product regardless of whether the product has substantial -commercial, industrial or non-consumer uses, unless such uses represent -the only significant mode of use of the product. - - "Installation Information" for a User Product means any methods, -procedures, authorization keys, or other information required to install -and execute modified versions of a covered work in that User Product from -a modified version of its Corresponding Source. The information must -suffice to ensure that the continued functioning of the modified object -code is in no case prevented or interfered with solely because -modification has been made. - - If you convey an object code work under this section in, or with, or -specifically for use in, a User Product, and the conveying occurs as -part of a transaction in which the right of possession and use of the -User Product is transferred to the recipient in perpetuity or for a -fixed term (regardless of how the transaction is characterized), the -Corresponding Source conveyed under this section must be accompanied -by the Installation Information. But this requirement does not apply -if neither you nor any third party retains the ability to install -modified object code on the User Product (for example, the work has -been installed in ROM). - - The requirement to provide Installation Information does not include a -requirement to continue to provide support service, warranty, or updates -for a work that has been modified or installed by the recipient, or for -the User Product in which it has been modified or installed. Access to a -network may be denied when the modification itself materially and -adversely affects the operation of the network or violates the rules and -protocols for communication across the network. - - Corresponding Source conveyed, and Installation Information provided, -in accord with this section must be in a format that is publicly -documented (and with an implementation available to the public in -source code form), and must require no special password or key for -unpacking, reading or copying. - - 7. Additional Terms. - - "Additional permissions" are terms that supplement the terms of this -License by making exceptions from one or more of its conditions. -Additional permissions that are applicable to the entire Program shall -be treated as though they were included in this License, to the extent -that they are valid under applicable law. If additional permissions -apply only to part of the Program, that part may be used separately -under those permissions, but the entire Program remains governed by -this License without regard to the additional permissions. - - When you convey a copy of a covered work, you may at your option -remove any additional permissions from that copy, or from any part of -it. (Additional permissions may be written to require their own -removal in certain cases when you modify the work.) You may place -additional permissions on material, added by you to a covered work, -for which you have or can give appropriate copyright permission. - - Notwithstanding any other provision of this License, for material you -add to a covered work, you may (if authorized by the copyright holders of -that material) supplement the terms of this License with terms: - - a) Disclaiming warranty or limiting liability differently from the - terms of sections 15 and 16 of this License; or - - b) Requiring preservation of specified reasonable legal notices or - author attributions in that material or in the Appropriate Legal - Notices displayed by works containing it; or - - c) Prohibiting misrepresentation of the origin of that material, or - requiring that modified versions of such material be marked in - reasonable ways as different from the original version; or - - d) Limiting the use for publicity purposes of names of licensors or - authors of the material; or - - e) Declining to grant rights under trademark law for use of some - trade names, trademarks, or service marks; or - - f) Requiring indemnification of licensors and authors of that - material by anyone who conveys the material (or modified versions of - it) with contractual assumptions of liability to the recipient, for - any liability that these contractual assumptions directly impose on - those licensors and authors. - - All other non-permissive additional terms are considered "further -restrictions" within the meaning of section 10. If the Program as you -received it, or any part of it, contains a notice stating that it is -governed by this License along with a term that is a further -restriction, you may remove that term. If a license document contains -a further restriction but permits relicensing or conveying under this -License, you may add to a covered work material governed by the terms -of that license document, provided that the further restriction does -not survive such relicensing or conveying. - - If you add terms to a covered work in accord with this section, you -must place, in the relevant source files, a statement of the -additional terms that apply to those files, or a notice indicating -where to find the applicable terms. - - Additional terms, permissive or non-permissive, may be stated in the -form of a separately written license, or stated as exceptions; -the above requirements apply either way. - - 8. Termination. - - You may not propagate or modify a covered work except as expressly -provided under this License. Any attempt otherwise to propagate or -modify it is void, and will automatically terminate your rights under -this License (including any patent licenses granted under the third -paragraph of section 11). - - However, if you cease all violation of this License, then your -license from a particular copyright holder is reinstated (a) -provisionally, unless and until the copyright holder explicitly and -finally terminates your license, and (b) permanently, if the copyright -holder fails to notify you of the violation by some reasonable means -prior to 60 days after the cessation. - - Moreover, your license from a particular copyright holder is -reinstated permanently if the copyright holder notifies you of the -violation by some reasonable means, this is the first time you have -received notice of violation of this License (for any work) from that -copyright holder, and you cure the violation prior to 30 days after -your receipt of the notice. - - Termination of your rights under this section does not terminate the -licenses of parties who have received copies or rights from you under -this License. If your rights have been terminated and not permanently -reinstated, you do not qualify to receive new licenses for the same -material under section 10. - - 9. Acceptance Not Required for Having Copies. - - You are not required to accept this License in order to receive or -run a copy of the Program. Ancillary propagation of a covered work -occurring solely as a consequence of using peer-to-peer transmission -to receive a copy likewise does not require acceptance. However, -nothing other than this License grants you permission to propagate or -modify any covered work. These actions infringe copyright if you do -not accept this License. Therefore, by modifying or propagating a -covered work, you indicate your acceptance of this License to do so. - - 10. Automatic Licensing of Downstream Recipients. - - Each time you convey a covered work, the recipient automatically -receives a license from the original licensors, to run, modify and -propagate that work, subject to this License. You are not responsible -for enforcing compliance by third parties with this License. - - An "entity transaction" is a transaction transferring control of an -organization, or substantially all assets of one, or subdividing an -organization, or merging organizations. If propagation of a covered -work results from an entity transaction, each party to that -transaction who receives a copy of the work also receives whatever -licenses to the work the party's predecessor in interest had or could -give under the previous paragraph, plus a right to possession of the -Corresponding Source of the work from the predecessor in interest, if -the predecessor has it or can get it with reasonable efforts. - - You may not impose any further restrictions on the exercise of the -rights granted or affirmed under this License. For example, you may -not impose a license fee, royalty, or other charge for exercise of -rights granted under this License, and you may not initiate litigation -(including a cross-claim or counterclaim in a lawsuit) alleging that -any patent claim is infringed by making, using, selling, offering for -sale, or importing the Program or any portion of it. - - 11. Patents. - - A "contributor" is a copyright holder who authorizes use under this -License of the Program or a work on which the Program is based. The -work thus licensed is called the contributor's "contributor version". - - A contributor's "essential patent claims" are all patent claims -owned or controlled by the contributor, whether already acquired or -hereafter acquired, that would be infringed by some manner, permitted -by this License, of making, using, or selling its contributor version, -but do not include claims that would be infringed only as a -consequence of further modification of the contributor version. For -purposes of this definition, "control" includes the right to grant -patent sublicenses in a manner consistent with the requirements of -this License. - - Each contributor grants you a non-exclusive, worldwide, royalty-free -patent license under the contributor's essential patent claims, to -make, use, sell, offer for sale, import and otherwise run, modify and -propagate the contents of its contributor version. - - In the following three paragraphs, a "patent license" is any express -agreement or commitment, however denominated, not to enforce a patent -(such as an express permission to practice a patent or covenant not to -sue for patent infringement). To "grant" such a patent license to a -party means to make such an agreement or commitment not to enforce a -patent against the party. - - If you convey a covered work, knowingly relying on a patent license, -and the Corresponding Source of the work is not available for anyone -to copy, free of charge and under the terms of this License, through a -publicly available network server or other readily accessible means, -then you must either (1) cause the Corresponding Source to be so -available, or (2) arrange to deprive yourself of the benefit of the -patent license for this particular work, or (3) arrange, in a manner -consistent with the requirements of this License, to extend the patent -license to downstream recipients. "Knowingly relying" means you have -actual knowledge that, but for the patent license, your conveying the -covered work in a country, or your recipient's use of the covered work -in a country, would infringe one or more identifiable patents in that -country that you have reason to believe are valid. - - If, pursuant to or in connection with a single transaction or -arrangement, you convey, or propagate by procuring conveyance of, a -covered work, and grant a patent license to some of the parties -receiving the covered work authorizing them to use, propagate, modify -or convey a specific copy of the covered work, then the patent license -you grant is automatically extended to all recipients of the covered -work and works based on it. - - A patent license is "discriminatory" if it does not include within -the scope of its coverage, prohibits the exercise of, or is -conditioned on the non-exercise of one or more of the rights that are -specifically granted under this License. You may not convey a covered -work if you are a party to an arrangement with a third party that is -in the business of distributing software, under which you make payment -to the third party based on the extent of your activity of conveying -the work, and under which the third party grants, to any of the -parties who would receive the covered work from you, a discriminatory -patent license (a) in connection with copies of the covered work -conveyed by you (or copies made from those copies), or (b) primarily -for and in connection with specific products or compilations that -contain the covered work, unless you entered into that arrangement, -or that patent license was granted, prior to 28 March 2007. - - Nothing in this License shall be construed as excluding or limiting -any implied license or other defenses to infringement that may -otherwise be available to you under applicable patent law. - - 12. No Surrender of Others' Freedom. - - If conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot convey a -covered work so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you may -not convey it at all. For example, if you agree to terms that obligate you -to collect a royalty for further conveying from those to whom you convey -the Program, the only way you could satisfy both those terms and this -License would be to refrain entirely from conveying the Program. - - 13. Use with the GNU Affero General Public License. - - Notwithstanding any other provision of this License, you have -permission to link or combine any covered work with a work licensed -under version 3 of the GNU Affero General Public License into a single -combined work, and to convey the resulting work. The terms of this -License will continue to apply to the part which is the covered work, -but the special requirements of the GNU Affero General Public License, -section 13, concerning interaction through a network will apply to the -combination as such. - - 14. Revised Versions of this License. - - The Free Software Foundation may publish revised and/or new versions of -the GNU General Public License from time to time. Such new versions will -be similar in spirit to the present version, but may differ in detail to -address new problems or concerns. - - Each version is given a distinguishing version number. If the -Program specifies that a certain numbered version of the GNU General -Public License "or any later version" applies to it, you have the -option of following the terms and conditions either of that numbered -version or of any later version published by the Free Software -Foundation. If the Program does not specify a version number of the -GNU General Public License, you may choose any version ever published -by the Free Software Foundation. - - If the Program specifies that a proxy can decide which future -versions of the GNU General Public License can be used, that proxy's -public statement of acceptance of a version permanently authorizes you -to choose that version for the Program. - - Later license versions may give you additional or different -permissions. However, no additional obligations are imposed on any -author or copyright holder as a result of your choosing to follow a -later version. - - 15. Disclaimer of Warranty. - - THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY -APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT -HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY -OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, -THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM -IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF -ALL NECESSARY SERVICING, REPAIR OR CORRECTION. - - 16. Limitation of Liability. - - IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING -WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS -THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY -GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE -USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF -DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD -PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), -EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF -SUCH DAMAGES. - - 17. Interpretation of Sections 15 and 16. - - If the disclaimer of warranty and limitation of liability provided -above cannot be given local legal effect according to their terms, -reviewing courts shall apply local law that most closely approximates -an absolute waiver of all civil liability in connection with the -Program, unless a warranty or assumption of liability accompanies a -copy of the Program in return for a fee. - - END OF TERMS AND CONDITIONS - - How to Apply These Terms to Your New Programs - - If you develop a new program, and you want it to be of the greatest -possible use to the public, the best way to achieve this is to make it -free software which everyone can redistribute and change under these terms. - - To do so, attach the following notices to the program. It is safest -to attach them to the start of each source file to most effectively -state the exclusion of warranty; and each file should have at least -the "copyright" line and a pointer to where the full notice is found. - - - Copyright (C) - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - -Also add information on how to contact you by electronic and paper mail. - - If the program does terminal interaction, make it output a short -notice like this when it starts in an interactive mode: - - Copyright (C) - This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. - This is free software, and you are welcome to redistribute it - under certain conditions; type `show c' for details. - -The hypothetical commands `show w' and `show c' should show the appropriate -parts of the General Public License. Of course, your program's commands -might be different; for a GUI interface, you would use an "about box". - - You should also get your employer (if you work as a programmer) or school, -if any, to sign a "copyright disclaimer" for the program, if necessary. -For more information on this, and how to apply and follow the GNU GPL, see -. - - The GNU General Public License does not permit incorporating your program -into proprietary programs. If your program is a subroutine library, you -may consider it more useful to permit linking proprietary applications with -the library. If this is what you want to do, use the GNU Lesser General -Public License instead of this License. But first, please read -. diff --git a/mods/fishing/settings.txt b/mods/fishing/settings.txt new file mode 100755 index 00000000..259d822b --- /dev/null +++ b/mods/fishing/settings.txt @@ -0,0 +1,9 @@ +MESSAGES = true +FISH_CHANCE = 60 +NEW_WORM_SOURCE = true +WORM_IS_MOB = true +WORM_CHANCE = 66 +WEAR_OUT = true +BOBBER_CHECK_RADIUS = 5 +SIMPLE_DECO_FISHING_POLE = true +SHARK_CHANCE = 30 diff --git a/mods/fishing/sounds/SoundLicense.txt b/mods/fishing/sounds/SoundLicense.txt new file mode 100755 index 00000000..49017e9b --- /dev/null +++ b/mods/fishing/sounds/SoundLicense.txt @@ -0,0 +1,4 @@ +These sounds are used for the Mod for Minetest; Fishing - Mossmanikin's version. +The included sounds are http://creativecommons.org/licenses/by-nc-sa/3.0/ + +--"fishing_bobber1" & "fishing_bobber2" sampled from "01260 water swimming splashing 1.wav", Attribution Noncommercial License, Robinhood76, http://www.freesound.org/people/Robinhood76/sounds/79657/ \ No newline at end of file diff --git a/mods/fishing/sounds/fishing_bobber1.ogg b/mods/fishing/sounds/fishing_bobber1.ogg new file mode 100755 index 0000000000000000000000000000000000000000..6c86a0cb8a47feb1ef0dd498ee8a30f0760900ce GIT binary patch literal 15470 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 literal 0 HcmV?d00001 diff --git a/mods/fishing/sounds/fishing_bobber2.ogg b/mods/fishing/sounds/fishing_bobber2.ogg new file mode 100755 index 0000000000000000000000000000000000000000..932cf0bf38c879ec892534389bd8d07bbf60e4e6 GIT binary patch literal 19963 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 literal 0 HcmV?d00001 diff --git a/mods/fishing/textures/alternates/fishing_bobber_top.png b/mods/fishing/textures/alternates/fishing_bobber_top.png new file mode 100755 index 0000000000000000000000000000000000000000..b4b4a4ec99454b65b35cf36af791f06ce4996e87 GIT binary patch literal 193 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Ea{HEjtmSN`?>!lvI6;>1s;*b z3=DjSK$uZf!>a)(C{^MbQ4*Y=R#Ki=l*$m0n3-3i=jR%tP-d)Ws%L0m@TF)WP?fEx zi(`m|e{zBZ>lV(&qdc4bZ%ka2%bd9`S>XTu(+Zr&6wEw&RG1y464y0se3{K~G;V>0 iK!lvI6;>1s;*b z3=G^rh1>#+YnAtw0tKZ?Tq8N0kgxl*{3J1lgxAI=rpmYd{nfnxtTeF&rNxCGQ-VxOI16rzf|bGVbUDS nz*U;W#5eu5gvLc4BM}C(vj(7O@NH<;Oo-AweFTWu9r+xX&KmUynNBlFtRq!W&)5AaW uU*!JVe}9tncJ33N6O~mJA971~0sX%;)8y~1cRN5~$>8bg=d#Wzp$PzwpPJGD literal 0 HcmV?d00001 diff --git a/mods/fishing/textures/animal_fish_blue_white_fish_blue_white_item.png b/mods/fishing/textures/animal_fish_blue_white_fish_blue_white_item.png new file mode 100755 index 0000000000000000000000000000000000000000..5f8224e74b40a102f159ea9167faf317b8e4e5f0 GIT binary patch literal 317 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCij$3p^r=85sBugD~Uq{1qucL8%hgh?3y^w370~qEv=}#LT=BJwMkFg)(D3 zQ$0figD*u3fvVPcx;Tbd_$UAP|KFZjb%xSeg>HA=hBij#32w*EOlwq1WfuL|LjJp0h?sX?%yZspFL%NkQKngFmqMZ z{r~X^KkGKIl?ZHkeB=K={`~*;zdyaQ-#pLqhJXmO15?f4+5bO>onf?|SpU#)Ly`o8 zBtwy)hfn=y(+yHQ;tSfDPi$yCer{pH&3~CU4kwss22Y#Ixa!1-;3tWjE&|=n;OXk; Jvd$@?2>?~jdu{*# literal 0 HcmV?d00001 diff --git a/mods/fishing/textures/coral2.png b/mods/fishing/textures/coral2.png deleted file mode 100755 index bee95611b29f2b0f04aad959cca3c77df3d950af..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 257 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbL!aez;Vs|5ptd}M-3PN_y!i%v_w z;p7FTvzFN`SZ%*-tHJ8s7Ml)vY&#gS{c!yL)0HPKPQG;K`=6h3hN|5_?TjTse!&b5 z&u*jvIW?Xxjv*44*YmskLub?XcBpz* zoBUb+q?YT)qK`(dyK^oI#4Y?TR`TP(mNzdo9lx|2Wv183nl0b`h(B+YxJk_apiZE* N44$rjF6*2UngCbET5A9R diff --git a/mods/fishing/textures/fish_cooked.png b/mods/fishing/textures/fish_cooked.png deleted file mode 100755 index 2a330ea02c283c12cd39fd1924941aa7c94bfb72..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 344 zcmeAS@N?(olHy`uVBq!ia0vp^G9b*t3?v(r4=o2$1_3@HuK)l42Qu~5M4U{eLtK=T z0yGPv^~)2DnzGE>b1f!U*ez>w-8{)>>y&`~i!+X|uelNNECZ;4u_VYZn8D%MjWi(V znx~6nh{WaO1cwH89*qa0THj^0%HJ}H=v`+K(KD`Fr>zx!m9bO&z#6Hh2d*;Pel|R4 z{U-6fhUt=*z&*pq^Zq;X@c1k=R{yXr>Q3UF&(B#pq~8cxR&Q_pJJbHTa!KC|>_}%Rl%G6llAwTwro-LW*1?{f=MobV nIBT086($+l2_xYdX&!G|Ns9bLa}84 z0004WQchCR5P<`wVIagu4=4p02;V#cT~hodxzI;EACJ1CfJK9 zqQ!Lee3}5ITk8=RVQWeQ4FP$mgQ~7;I#(2&kVP0xHMhf<<;)#xOF~*9n??VYs?6sh z4U+INTy$A*UBXwAuMJQNXgkxu9V_OC9Uckyi@yVJM#*zdee!c!GXikCTtAM^$D9O;|=R{zov2+2AUk#7J1 N002ovPDHLkV1i^@n~(qi diff --git a/mods/fishing/textures/fishing_bobber.png b/mods/fishing/textures/fishing_bobber.png new file mode 100755 index 0000000000000000000000000000000000000000..42bfe6975d02302280455c244934b9fdb413ce87 GIT binary patch literal 580 zcmV-K0=xZ*P)Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D02*{fSaefwW^{L9 za%BKeVQFr3E>1;MAa*k@H7+qQF!XYv0005ANklh`XA)hIFFezHA7w>x2=az=bQ6+2$~KM%+flg zvLHzPoxU0!Y>nXQZVd}U4-AJBc(`8vbqZBZ6!KzykP_kwMN+_5&hFX}1B`kBI-#32 z-F+C@T%Ly97;nUh>`|Q`%f$rxGyrZsfzh2dxtG!-SZRHUOw>W8F2XVex* z5bAEr#Wc;gmogp;c)nj}Bej!VxHy?+NJ(-a3KPVrE0!W&> zG9x^Z7Uqts+~~ibd3Icl6C8{!F04R#hYiX{!NM>0W4-i#SMI4N$~;a3KZhzX0#MzZ2|m SUXeur0000oi!PC{xWt~$(6999aJv#sZ literal 0 HcmV?d00001 diff --git a/mods/fishing/textures/fishing_bobber_feather_1.png b/mods/fishing/textures/fishing_bobber_feather_1.png new file mode 100755 index 0000000000000000000000000000000000000000..9eff3f8d8af519546768d0b635fd5f69f7e4152c GIT binary patch literal 352 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCij$3p^r=85sBugD~Uq{1qucL8%hgh?3y^w370~qEv=}#LT=BJwMkFg)(D3 zQ$0figD*u3fvV1Xx;Tbd_$MbwuqvCfB;DoxXZ^bCum2abpZ-A-OW33S@^1_M{XS9U zul=o1{v3`#wkhgWfB82B{>@*n`NdxQh}as*6oJ55+LQMDcei@|r~K;lAM>T(eYhVn zjdzXY6RAZ!9fgf?)B|Hr9q`fuE{rt>n7k%Iaexi?G`#2wli uf4KaVUZ!#K_?LRmIluqk`ob_rig8V3gpSOYxz~YSWAJqKb6Mw<&;$UHE{jwE literal 0 HcmV?d00001 diff --git a/mods/fishing/textures/fishing_bobber_top.png b/mods/fishing/textures/fishing_bobber_top.png new file mode 100755 index 0000000000000000000000000000000000000000..039620ba7b45d6ce4ae49dc27905851cfd5e6ce9 GIT binary patch literal 205 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCij$3p^r=85sBugD~Uq{1qucL8%hgh?3y^w370~qEv=}#LT=BJwMkFg)(D3 zQ$0figD*u3fvRjgT^vI!{F4(TShsLC&MN8tf5YJ7wnmfVKQsTI?=)gb7LZnPo5ZNl tYY=|m#uw9uB>e!94wv7hA&M3(40@A2E7xyqxC=Cg!PC{xWt~$(699kFK0N>c literal 0 HcmV?d00001 diff --git a/mods/fishing/textures/fishing_deco_pike.png b/mods/fishing/textures/fishing_deco_pike.png new file mode 100755 index 0000000000000000000000000000000000000000..fc6079e92a98b6f1849f232ccaee24701845f636 GIT binary patch literal 508 zcmVPx#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D02*{fSaefwW^{L9 za%BKeVQFr3E>1;MAa*k@H7+qQF!XYv0004NNkl%=6?Ks>YMNpiwvL(tAUPn-i`4+2hIgKR#_!}61%!Z# zyny`QK>j}~JGK8#Zo1z<*gwSl8Ib;BZmsefsOBsX?*d{2uz^4gEl%#be_cFuf4h4d z{0|DZ{2dx?^FO=L_kT>H+m;d>tf&ar}Z2#LiY5w>0Gx#4JEBqU1zz;VsgI5ed z=jU14s{REk{?po%^uMYh608YiKw6I1|EPF}|8dFA|3Tiech>sv1vCJpX5q?;|2qzL z9|XDJM|`TwD`$6I{+6D^lRFP}gA90o?Beu&OV(8XPtW!Gzh+z0kJ*ch-#EGId|J7& z{yj)zU2Ci%I2}N}!2+Vway*Ugowa96$?zBe4Hk$?ak-S3?l$%2thDAty->l9Wh}(_wlj_5uKH+Emb+3GvbZ0000@P)N2bPDNB8 zb~7$DE-^4L^m3s900Cl2L_t(IPrZ{nPr_gnh8Z24jlo0%8sdP#05X6=L?~!LF}2ua6gWY6Wx~MUZR*WQ)VwX9)yN!xf9EOJ1KO)C(D8dp*QuaG&E4C>7yO zr{Rc3u|g24g6S?>MoI?bdiC9 zDHw#olZWwy274uFf zRu^Zr;nr}7M6(G`nu0~1*Qm6-W{24@qp|hJJ8+T&fARpElnn1|!(}mQCn^W={(O&i z^%NC42_l=plEX0`IJ&0Wej5+hJX%ExWN7Pe@JMoV!Qz~uk&5^y6DXoiHHSu?np`l} c2l@5r8-^06PBA89lmGw#07*qoM6N<$f`A6TU;qFB literal 0 HcmV?d00001 diff --git a/mods/fishing/textures/fishing_fish_cooked.png b/mods/fishing/textures/fishing_fish_cooked.png new file mode 100755 index 0000000000000000000000000000000000000000..709d8f2a0a09fe5730758539fa3899767bb52df4 GIT binary patch literal 846 zcmV-U1F`&xP)N2bPDNB8 zb~7$DE-^4L^m3s900PQML_t(IPeoJPPE%139iX(O&=z{5l~(ADwxEDOB&h*|D7O?O z5=o)0ilR19v{4iSBGjlDHtkiDjc91e%tQ>NEw$ZEB!c{PL7 z@CC6*FsMMqDs?(FI-O4a5q8#;mge^>D-VHWmft4QFsMWnYiewy0B80fF^H{4cae?{ zVm=XroS6&;A|wCGi)k|Qv2geR761NVZzYYLd((KlFoU_|2!4NE$MS3f7yCLDh>GBL zI#tvL=Avjnw{zIIegTU&;}|*JhR?e%F@I$YnM>ypABrOE&_R{%J9<>rQdL!@e1!w2 z%~thoa~0Rd`;bn?u%F9db@CkU+?c>%v>8*wrw&UHC%s-zwFM$Iy#BD3!H@kN+~-vH zmaZZ**ohbEaZJX#;WiRFeO3rx_4V~cElo{SV>D7VXK=E;ok~hdXl1e=vs~{;?+NsE z1dvPiOGI2A>qV=_1nG*7zuMYbqO!6wve|4Z{rb8(RnEKT%lNeY6y0qNINKFMi`$5S zt}t8-qT~A#%xpI2>5}N3ZEfUXXW`-FW)5rFX^b*)U11ku-N(^r*Md6^(Toz3#iD$@ zUN5OML@>KcGkBOuA%!lFiLeRC+3zx30TuTs|XTIHq6zMtnTIHDjkY2plgKHmYlv{ujsT+%$#(?cGYOOY*Skw}E>cDoAt YAJ#&`Oy0wHAOHXW07*qoM6N<$g6v>@C;$Ke literal 0 HcmV?d00001 diff --git a/mods/fishing/textures/fishing_pike.png b/mods/fishing/textures/fishing_pike.png new file mode 100755 index 0000000000000000000000000000000000000000..5c7885f326a3a0a3cf62ff16302530b3414202a2 GIT binary patch literal 297 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Ea{HEjtmSN`?>!lvI6;>1s;*b z3=Dh+K$tP>S|=w^P^!c=q9iy!t)x7$D3u`~F*C13&(AePq0Cs%RL{`B;7id$psJ;w zE{-7<{>cdv8V{s1e$Lm~?I`6~@pfC)C7y=NoXpf8^W&vlcBNUX+iq~1l*^u(@uq`4 zyG7Dz%l(O_%{lCnDLJdU?*CNqRdBswa=&I5!y3tai35K+eVTLHGSyD~G`Q{9)?m^U z<5F^>*+hJbqtk2+b!BVLC7Qa&fB%1S)3RVTr_RelF{r5}E-1+h&9S literal 0 HcmV?d00001 diff --git a/mods/fishing/textures/fishing_pike_cooked.png b/mods/fishing/textures/fishing_pike_cooked.png new file mode 100755 index 0000000000000000000000000000000000000000..7d66e7ca9783f3f496da048f0ae016e6ea01ef6c GIT binary patch literal 702 zcmV;v0zv(WP)N2bPDNB8 zb~7$DE-^4L^m3s900KHmL_t(IPi0d}YZFlvzRBc4GI=-2WRl6G=}gSfNt+VIRz)q9 zP<7GLM^sv{YO%Hv1&d&d<+NC?emEb>c;YRrM+;DF*^lavy zGw1Q0?|zs0{eDI!zI09`58HtE#H9k>fawrVAsuu>iyF<~6jA6!Crk9YUdycdc5j<_QQcjt`sI+rEj3 z#vn#)9rst~deHxy&*wX+5l*pKWQ9V3|L9(w$NRm9puJb;C$YUY2UTI{M=MFn=kvVi z+_;Mn^MNLBbS80fbO;MmV_082i{C#!@#*WA+Xx1OjBZI1t*nDv2$+)`11_|Q3bb`&V%$o@NL^>nx^&YNP(mS zp}M7+DQvAR!qQX;dGq=#N~Mw{P2}>m={f{ywC|}#5wD+a;P0<5aED4rr_)jogidfJ zuaVd#kql}nJh`)s=MQdx#I<~J0&ZmhgiaJur))OM8 zQN3Q5H%4(XkC-|aPGjp!lvI6;>1s;*b z3=G_YAk0{w5IAo(S)J#&f5f;?;r<}Wz_7{mbf&m756IIDp00i_>zopr E01?Jo7XSbN literal 0 HcmV?d00001 diff --git a/mods/fishing/textures/fishing_pole_back.png b/mods/fishing/textures/fishing_pole_back.png new file mode 100755 index 0000000000000000000000000000000000000000..7b584789d7afa5989a1033613ec8c1f64473d531 GIT binary patch literal 235 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCij$3p^r=85sBugD~Uq{1qucL8%hgh?3y^w370~qEv=}#LT=BJwMkFg)(D3 zQ$0figD*u3fvTcBT^vI!{F4(7FgEFi{#QlEO>-$ z&iqqO{&n1G!CZ*A)0?kA#gljoOagxP_jsBexa#uQ-bn2xgSzUu|0iao0iE6wm}@G- Sx9uy?76wmOKbLh*2~7YzX-v=n literal 0 HcmV?d00001 diff --git a/mods/fishing/textures/fishing_pole_bottom.png b/mods/fishing/textures/fishing_pole_bottom.png new file mode 100755 index 0000000000000000000000000000000000000000..6f52ca8c2e15cb18124ec37d8f3f350550a417bc GIT binary patch literal 215 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Ea{HEjtmSN`?>!lvI6;>1s;*b z3=DjSK$uZf!>a)(C{^MbQ4*Y=R#Ki=l*$m0n3-3i=jR%tP-d)Ws%L0m@TF)WP*t#} zi(`m|e{#YB#yL|g{wpWPyejD8XJ+PEYVl9`@k9x>qbDE!pJ;e8(P1NFpx-YLQ_ti3 z_P_l-o@NIwIy|*EQoG4uZ+-axi5V%(8fAHdQGEO!zeAoUa^ZzUhe(svhedLsT=mc*+ z2E$`%-~RE=F>iJFebgoO_cGA~K0n!v{_gNP`(fJ|u|vo1@q0J^iGElo_P{=3?_AC) v(v?gbl()*Jv(~*iDN=F3{$q^QxjIJ6Vn1bb9@YOq&oOwq`njxgN@xNA2^)qL literal 0 HcmV?d00001 diff --git a/mods/fishing/textures/fishing_pole_front.png b/mods/fishing/textures/fishing_pole_front.png new file mode 100755 index 0000000000000000000000000000000000000000..e8aa3d671c1515781de81fb118a28763bfcfb69c GIT binary patch literal 214 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCij$3p^r=85sBugD~Uq{1qucL8%hgh?3y^w370~qEv=}#LT=BJwMkFg)(D3 zQ$0figD*u3fvQ|RT^vI!{F8tD|8LK1CX>DTlf2~Pp!QH>kB=)D7biMQEqSm)?~AgTe~DWM4f Dj8I0g literal 0 HcmV?d00001 diff --git a/mods/fishing/textures/fishing_pole_simple.png b/mods/fishing/textures/fishing_pole_simple.png new file mode 100755 index 0000000000000000000000000000000000000000..afa5b1927e2338ff948463a853db013b56bb61c7 GIT binary patch literal 303 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Ea{HEjtmSN`?>!lvI6;>1s;*b z3=G`-Aj~-FC-YLEpj3%#L`iUdT1k0gQ7S_~VrE{6o}X)oLYc9ish**M!Iz?iKvknZfwG`Sf98ul;W3%M;b8*v1k*z%qU!C!=?rJwN^W0qV$<6q99@R4&q#DltH<*2qd2R-? z%+=O^(q4rLM!kc{GnfArB`x|@6GcevcSei7sb0*N)44$rjF6*2UngIHZW}5&2 literal 0 HcmV?d00001 diff --git a/mods/fishing/textures/fishing_pole_top.png b/mods/fishing/textures/fishing_pole_top.png new file mode 100755 index 0000000000000000000000000000000000000000..1408eac72713755864d1cc4a1e60425bde654e38 GIT binary patch literal 197 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Ea{HEjtmSN`?>!lvI6;>1s;*b z3=DjSK$uZf!>a)(C{^MbQ4*Y=R#Ki=l*$m0n3-3i=jR%tP-d)Ws%L0m@TF)WP?e*n zi(`m|e{#YB#-!ZPf69;l|Nn2SkR0>t!K1?$7@F$b!W-n+oG&zNQF#9U#EcaEfSiWO nLeJ|{d^T~nIqFEak7ak+NFMcxJj4%XQR7%ZCl0>l&kuk5*Tt=w?p z{?maP>rGc0PkF=e%~n%*6QlD-xhXG1*XVNoO!8b_^6$JNt8?KUBlhU8dT$O?mOJsy oxuiL_)AGsZFT&6LuWi$ejgjJ7Yy8^y5YR3LPgg&ebxsLQ0ES;hYXATM diff --git a/mods/fishing/textures/fishing_rod_baited.png b/mods/fishing/textures/fishing_rod_baited.png deleted file mode 100755 index 22989f3a613480fc45a8dc490ee26f13a146740b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 214 zcmeAS@N?(olHy`uVBq!ia0vp^G9b*t3?v(r4=o2$q5(c3t_%#C0ruJj!N%RG)`$9f zo~>T-`Nf^D_0Hlz1&k#@e!&b5&u*jvIr*M0jv*44b0_TPZ7|?rRi3$nPx$~xA|uy} z;Ff#5zt=Z(Jo+%NW%uQu@=QmjO-NBa)4kDTQlo+5zTTc9#@iywKNBaP3aYeM<(wh# zTlZc>)Vl*dFUqA)_UTPsx@b?=F{2clbGsi|FW=?-^!@r&wT-`Nf?BJNY<)3K&a*{DK)Ap4~_Tatb_M977~7Z|!m9YB1no*}mZ3ZS^hk8ee$t zRe!n@{O^B@T5p%2puV0;;>^1Yf&cx)l3u`2X z3anV~w&g*R`<{98gxZibW?9;ba!ELWdKlNX>N2bPDNB8 zb~7$DE-^4L^m3s90099>L_t(IPsLGPOM_4t_E+@_Vjv|8hqh0X1FOx{9c>ks7nYR~ zhcSr3=w@u}uZ;byryYlDU9_X#bl~OOywB$=N&oS#qY?NN*5;t@LjuN*5YLx~2>?jh zaHR}v+Ae%H#$vTTOrYolde4XToWOgX;3odSsagY@Ef7t=^4V934Z{!74c?&lJ+z%6 zxP#o;<+J7wco0BqlKfz?RDVX+hC0@)Ni(pXks>wCLTg@ncyN6I7}VG@N@F zUib^Ve-U8^bkn*Ozo*uP%W};~^PO8h3>tvkKH;RkEi3zlB)lA+uWDYU%0j?j3;b+K j=dwIO;X9YMx(ECQL${r064a+q00000NkvXXu0mjf`w^os literal 0 HcmV?d00001 diff --git a/mods/fishing/textures/fishing_shark_cooked.png b/mods/fishing/textures/fishing_shark_cooked.png new file mode 100755 index 0000000000000000000000000000000000000000..b6142ce2963d23eedce720be1108c85a8876b68b GIT binary patch literal 763 zcmVPx#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D02*{fSaefwW^{L9 za%BKeVQFr3E>1;MAa*k@H7+qQF!XYv0007NNklkXX9 zq)|B%#_w-mP%4!=48z02ha#oZX_}pmV4-{rZ`YdGd%ceKMiYN8;n$Dv__*}~tc^f3 zIOVaiF{xck|NW~?JiW1qHyd|x^I`=%n-5T(Ex=;2h!z5$&!^Z&Mn;q!kH;w;_2YB9 zh4a}I&Ss)GS;%k}hfypRm2j+bH-3I<<5V()M@u!h^aQV6F9EdH%j)rX#K&kfN~<)~ zs|7r}wT$L+4PUpn#4&p`1fB&hK_QpRi5(0ErS|D~5cT;Iu2tu7xiF1(V^y5FBL@cu zs%-99e}8{xs+1uA!oF+W!S2I*xL=!xHcTdyiQI0tA`XQ@olLTcAi{17F65^0q`rhJ zb5qEKJi_X?610x+o}DysDLj1AHqOwjBP^aNqJFNVCX5-nb@{&mI-QOv91hDlr&une zaq0Msun!CjC~Y)Ho6SaEua~&pOw3a&@caF;o}QZl3loh-sZy!PYh;@zl^wt_yZOUttdV4>oNcU002ovPDHLkV1m4gR{8({ literal 0 HcmV?d00001 diff --git a/mods/fishing/textures/fishing_sushi.png b/mods/fishing/textures/fishing_sushi.png new file mode 100755 index 0000000000000000000000000000000000000000..c64cecaf9680957127cf84bb7c8b9e13f1709418 GIT binary patch literal 590 zcmV-U0N2bPDNB8 zb~7$DE-^4L^m3s900GKLL_t(IPo%15J!iqXUcQ6e$^$K$PTY;YP0i@Uq`yywY%-Z5b8I_FxC z2ZMb9wwJ*y%n(V(kzG^V{kQ2QfVWyBRV{F^_l%3LZ#X~eb9&Mypeu~4)0aR)fb#kh zz3x*!zH9UOLx=s%ItN=TTzos`$N5`MUbna*O%6eZ0M)xI9KL!^e}9+u0|DDy=IGG| z{fFzEeL3Ri_xFTM%^y&|w?VV9L+@pS!(Nlt{VID~t9&}`iWnWb?FNb!^9S5nTc%K} z;4RJ5e6lSdyBzmhbY470wRIwvj_Er7fc#vE{6d**wTP8X5lcIS?dWgqhyWPLI9755 zV7Ba0SzN%$rLl7<)P#X#L{RJ)vLPVCKr==}$au39Yjb4E1&nk8#rXpW##E6#isdFS z9NRxaX|YPK;xSXoqYHgCVG_{7+|p!}K@4G_+ryHUBx%m?2Z5Pe835lswYKWVm z0Ftl>s$rsz;kYpR&V$RyFk^nw1QDls8XBk3wrN@#Qw|L(gI*9i-Q2|38PF!=9X cxaw;E0v%FoFoaZPkpKVy07*qoM6N<$f;Y1T2mk;8 literal 0 HcmV?d00001 diff --git a/mods/fishing/textures/fishing_trophy_label.png b/mods/fishing/textures/fishing_trophy_label.png new file mode 100755 index 0000000000000000000000000000000000000000..3c8326b0664545b72f33f26361499d69a01f55fa GIT binary patch literal 201 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCij$3p^r=85sBugD~Uq{1qucL8%hgh?3y^w370~qEv=}#LT=BJwMkFg)(D3 zQ$0figD*u3fvPM#T^vI!{F8tD|8LK%Iz#EKLbp4w1aI@hd3^h9l&XVW~Fc3uFQ!QkoY=d#Wzp$PyS%0T=8 literal 0 HcmV?d00001 diff --git a/mods/fishing/textures/fishing_worm.png b/mods/fishing/textures/fishing_worm.png new file mode 100755 index 0000000000000000000000000000000000000000..7a4d8d11fb49c7f2d3f03391769753bf052ad4bf GIT binary patch literal 280 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Ea{HEjtmSN`?>!lvI6;>1s;*b z3=G_YAk0{w5(_fB*l_?EQao&i%j4vrk^;*!1%CsdN8-S9^JG7hUr6-MXv)zw6I% znU^+!QGfcDiR&d(4t(T2tx?Q)LLlHo{7d~MXH*xgu)g4%=5XkdjLd>3$JowH==N3% zdNy_Y?PnA75Bzzj_UJI;fA3qm`TyiMe~N2e|8Mut{QEyM>)rpqm!nRWTNzsN ZGi+ae literal 0 HcmV?d00001 diff --git a/mods/fishing/textures/not_in_use/fishing_bobber_feather_1.png b/mods/fishing/textures/not_in_use/fishing_bobber_feather_1.png new file mode 100755 index 0000000000000000000000000000000000000000..9eff3f8d8af519546768d0b635fd5f69f7e4152c GIT binary patch literal 352 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCij$3p^r=85sBugD~Uq{1qucL8%hgh?3y^w370~qEv=}#LT=BJwMkFg)(D3 zQ$0figD*u3fvV1Xx;Tbd_$MbwuqvCfB;DoxXZ^bCum2abpZ-A-OW33S@^1_M{XS9U zul=o1{v3`#wkhgWfB82B{>@*n`NdxQh}as*6oJ55+LQMDcei@|r~K;lAM>T(eYhVn zjdzXY6RAZ!9fgf?)B|Hr9q`fuE{rt>n7k%Iaexi?G`#2wli uf4KaVUZ!#K_?LRmIluqk`ob_rig8V3gpSOYxz~YSWAJqKb6Mw<&;$UHE{jwE literal 0 HcmV?d00001 diff --git a/mods/fishing/textures/not_in_use/fishing_bobber_feather_2.png b/mods/fishing/textures/not_in_use/fishing_bobber_feather_2.png new file mode 100755 index 0000000000000000000000000000000000000000..9f710c32025ea78e96f3b6a13fd8fc5546b4b426 GIT binary patch literal 363 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCij$3p^r=85sBugD~Uq{1qucL8%hgh?3y^w370~qEv=}#LT=BJwMkFg)(D3 zQ$0figD*u3fvRqKx;Tbd_`jXt&418Ar1keqN)6?S}R( zd3JfG0-8)*kJlN?KP|L>oiT~!jjLq%_QTT;UD(X?U=2rzP5} zKKVr9Y#wQeP6YBF3^_@p00i_>zopr E0FNJwg#Z8m literal 0 HcmV?d00001 diff --git a/mods/fishing/textures/not_in_use/fishing_bobber_ready.png b/mods/fishing/textures/not_in_use/fishing_bobber_ready.png new file mode 100755 index 0000000000000000000000000000000000000000..2a37b4e9d3fda27d6a21626451d224ac1967f193 GIT binary patch literal 222 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Ea{HEjtmSN`?>!lvI6;>1s;*b z3=DjSK$uZf!>a)(C{^MbQ4*Y=R#Ki=l*$m0n3-3i=jR%tP-d)Ws%L0m@TF)WP*s$t zi(`m|fAWw2|LvKr@))=h58t@5DC5{t!C0A_3MtGDk5m{p#LZw-dFc}5Bg=eZtL&Qo z#v2WXm*!bWI0SMiE!8MGyU@={!Q6C_N~%Ho4U!lvI6;>1s;*b z3=G^rh1>#+YnAtw0tKZ?Tq80C&Kf7io?>upjjiNUl eHW>+TVr1}NdZRn_E6-w}tqh*7elF{r5}E+Lnn|z# literal 0 HcmV?d00001 diff --git a/mods/fishing/textures/old/fishing_bobber_alternate_old.png b/mods/fishing/textures/old/fishing_bobber_alternate_old.png new file mode 100755 index 0000000000000000000000000000000000000000..5779a71e37217c79e146b5a3e24204f84534a424 GIT binary patch literal 217 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Ea{HEjtmSN`?>!lvI6;>1s;*b z3=DjSK$uZf!>a)(C{^MbQ4*Y=R#Ki=l*$m0n3-3i=jR%tP-d)Ws%L0m@TF)WP*td> zi(`m|e{#YBrc;Ma{wE*4ab;1*!%H1{eODLED(U{eBtgX4<6_4eu{;h}wh5~xm-RQ^ zXgDlseE0xE7qg(q^e0kIb4wVETSLMV&hj5|)4aJ;Xto6L`Ty0;0nJQ2>bZyaD*B`wAlAkxwy;=0c8iYNP%Wo}cJ@EEq-_;GyVOaaO6 cmNz^MAIx~=T(XLP0xe?jboFyt=akR{09#5+CjbBd literal 0 HcmV?d00001 diff --git a/mods/fishing/textures/old/fishing_pole_wield.png b/mods/fishing/textures/old/fishing_pole_wield.png new file mode 100755 index 0000000000000000000000000000000000000000..cb0dcc9a6ce1b3023d50e332980a279968add15d GIT binary patch literal 269 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Ea{HEjtmSN`?>!lvI6;>1s;*b z3=G_YAk0{w5SQ7HGG>Qaoge+ytmRt9 z$j8U$lF4?nFOgy6EXQ@u*Le7uComq7Xv(v`=5R!m?S_ePE`#1#7s&>HV@GC=%wyRM zhO;(GC1@P|I6va71Y3hi6OTiGcFjuRdEy=$MQ=KEZ8AEcz|g(pbmpUXHu6A6F?hQA KxvXN2bPDNB8 zb~7$DE-^4L^m3s9009F@L_t(IPsNeTYQjJmg?%cYK!l({i6r$JL%?1}jg#0aQ5R~g zkusD*5yXuseU;*49i5R#H+75~2Zq`F-#O<$lStg-G{>LdH?}v28iNpwB@t|YE(@rJ z4ddAZnTBF8f~}SVk9}eHyO$@>>=sOK1owT3Zt#JuRsh@VFkY?YFn3k*Wps{k!=J-= zaZzo*f+vWzdjyl=9D3P~2h(6FoSl%N+VPQ6^y>wj**9u*hzjkA#x;vT)$4MBbgqO_ zyARVHo#ANbs}s;;aU@uX=+eTJf+^xX5DzBxVZTj~DW1xTUa1J*jmOJbPr_LW{5Qb= lU9COdE)e^lZ;tv0JOH}=l}Vw+Oxyqf002ovPDHLkV1g_Fp_Kpt literal 0 HcmV?d00001 diff --git a/mods/fishing/textures/sashimi.png b/mods/fishing/textures/sashimi.png deleted file mode 100755 index 5263e7b23bc44267be9b70e692f4b6aea2025498..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 485 zcmV^|uyUsbv#d5cB-Bm~b0MKp5=3R9v2v&KU zZuH4Kr-B(8x}W05K!I`Qj`iM=b4*w^t6H^+DJ+K2a-7~gRBO#OXGRASUPnQg4qKmY z*=ilx(EuPlXP|CAS*LqcNYVmwN`n z+I?51U9Vl(s$D+Lkm!-{ItLQ$dj&-M|N0}41O|uOL=wq)f=FnkfoPBj$s*+Rr=*l{ zTOk2~7o9ExJ_N9pR%8LE{0C9Cwr%YmKoopjHY9ATqOFFD+gzagdcCJV=Uf@|nSMaN bxxdsOG_DThf1g+@00000NkvXXu0mjfXB@tm diff --git a/mods/fishing/textures/seaweed.png b/mods/fishing/textures/seaweed.png deleted file mode 100755 index a3e58bf1b93e9d52c573aea21cc1dc296ddb2bb7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 506 zcmVRoymDn=`zQ3!Ye2eFfj;2?;2b#e+KB1H-=3WZK0j!p$3vztS?#Yv2) z&>^KmJ82b!yCL0-l4#*nZ1AqbJLBbY_JiYnyzhPg|NH*$e*jEXrcm-(Kl}lNa{#ko z(uiPJ0Vpn?`a~k!_!x#^Jmtt-08ILm?1?=9^lhEYbOuK_4G_;Nizr~IQl>kQ7 z!0B>ir2s60lFx=N8Xulj76KbmnH1OWUqug#M*z<%3xLtD!<5E;0+2jO;tskfd){7wjc;S0(LqBRB%JU!|U`WA2(1b4AECj}WIp$81d`1~jPw$G{OV2OI$B zGLL(Ss0M9PdQf(C?e+$Yta5(<7VV909~aHs#f3wWi|VMAJ}q9UTTf4YWfdm z!9cJJm{Rl9T8i468Z0)0#A)#I-EVO_?*|(AF#c$G!a(eS!FuE z=v>X*(ep{+>cb1_-|8sOIj)7>hRz>402iM$(r{4=;PCZj5r2N&o-=07*qoM6N<$f^k&c$^ZZW diff --git a/mods/fishing/textures/worm.png b/mods/fishing/textures/worm.png deleted file mode 100755 index ceb5fece65383c87819ee1cdf0576292a4bdcd40..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 164 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnH3?%tPCZz)@o&cW^S0H_;ujkq76;Jl=cDuRG z6Ub*Q3GxeOaCmkj4ajlxba4!kxSX7Dfa^yhkGI5Q&M9g07*ao2F3>hSm=KX<@L<=B zM4mRz7hwWR<@uY1m;F#bvrbju*Z=(t9Q9YdR`_IaFxLUixyJMJ75~B>AdA7%)z4*} HQ$iB}=|wdn diff --git a/mods/fishing/trophies.lua b/mods/fishing/trophies.lua new file mode 100755 index 00000000..ebe7edb8 --- /dev/null +++ b/mods/fishing/trophies.lua @@ -0,0 +1,82 @@ +----------------------------------------------------------------------------------------------- +-- Fishing - Mossmanikin's version - Trophies 0.0.2 +-- License (code & textures): WTFPL +-- Contains code from: default +-- Supports: animal_clownfish, animal_fish_blue_white +----------------------------------------------------------------------------------------------- + +local TRoPHY = { +-- MoD iTeM NaMe iCoN + {"fishing", "fish_raw", "Fish", "fishing_fish.png"}, + {"fishing", "pike", "Northern Pike", "fishing_pike.png"}, + {"fishing", "shark", "Shark", "fishing_shark.png"}, + {"animal_clownfish", "clownfish", "Clownfish", "animal_clownfish_clownfish_item.png"}, + {"animal_fish_blue_white", "fish_blue_white", "Blue white fish", "animal_fish_blue_white_fish_blue_white_item.png"}, +} + +local function has_trophy_privilege(meta, player) + if player:get_player_name() ~= meta:get_string("owner") then + return false + end + return true +end + +for i in pairs(TRoPHY) do + local MoD = TRoPHY[i][1] + local iTeM = TRoPHY[i][2] + local NaMe = TRoPHY[i][3] + local iCoN = TRoPHY[i][4] + minetest.register_node("fishing:trophy_"..iTeM, { + description = NaMe.." Trophy", + inventory_image = "default_chest_top.png^"..iCoN.."^fishing_trophy_label.png", + drawtype = "nodebox", + tiles = { + "default_chest_top.png", -- top + "default_chest_top.png", -- bottom + "default_chest_top.png", -- right + "default_chest_top.png", -- left + "default_chest_top.png", -- back + "default_chest_top.png^"..iCoN.."^fishing_trophy_label.png", -- front + }, + paramtype = "light", + paramtype2 = "facedir", + walkable = false, + node_box = { + type = "fixed", + fixed = { + -- { left , bottom , front , right , top , back } + { -1/2 , -1/2 , 7/16 , 1/2 , 1/2 , 1/2 }, + } + }, + selection_box = { + type = "fixed", + fixed = { + { -1/2 , -1/2 , 7/16 , 1/2 , 1/2 , 1/2 }, + } + }, + groups = {choppy=2,oddly_breakable_by_hand=3,flammable=2}, + sounds = default.node_sound_wood_defaults(), + after_place_node = function(pos, placer) + local meta = minetest.get_meta(pos) + meta:set_string("owner", placer:get_player_name() or "") + meta:set_string("infotext", "This Huge "..NaMe.." was caught by the Famous Angler ".. + meta:get_string("owner").."!") + end, + on_construct = function(pos) + local meta = minetest.get_meta(pos) + meta:set_string("infotext", NaMe) + meta:set_string("owner", "") + end, + can_dig = function(pos,player) + local meta = minetest.get_meta(pos); + return has_trophy_privilege(meta, player) + end, + }) + + minetest.register_craft({ + type = "shapeless", + output = "fishing:trophy_"..iTeM, + recipe = {MoD..":"..iTeM, "default:sign_wall"}, + }) + +end \ No newline at end of file diff --git a/mods/fishing/worm.lua b/mods/fishing/worm.lua new file mode 100755 index 00000000..88985576 --- /dev/null +++ b/mods/fishing/worm.lua @@ -0,0 +1,118 @@ +----------------------------------------------------------------------------------------------- +-- Fishing - Mossmanikin's version - Worm 0.0.2 +----------------------------------------------------------------------------------------------- +-- License (code & textures): WTFPL +-- Contains code from: fishing (original), mobs +-- Looked at code from: my_mobs +-- Dependencies: default +----------------------------------------------------------------------------------------------- +----------------------------------------------------------------------------------------------- +-- WORM ITEM +----------------------------------------------------------------------------------------------- +minetest.register_craftitem("fishing:bait_worm", { + description = "Worm", + groups = { fishing_bait=1 }, + inventory_image = "fishing_worm.png", + on_use = minetest.item_eat(1), + on_place = function(itemstack, placer, pointed_thing) + local pt = pointed_thing + minetest.env:add_entity({x=pt.under.x, y=pt.under.y+0.6, z=pt.under.z}, "fishing:bait_worm_entity") + itemstack:take_item() + return itemstack + end, + on_drop = function(itemstack, dropper, pos) + minetest.env:add_entity({x = pos.x, y = pos.y, z = pos.z}, "fishing:bait_worm_entity") + itemstack:take_item() + return itemstack + end, +}) + +----------------------------------------------------------------------------------------------- +-- WORM MOB +----------------------------------------------------------------------------------------------- +minetest.register_entity("fishing:bait_worm_entity", { + hp_max = 300, + damage_over_time = 1, + collisionbox = {-3/16, -3/16, -3/16, 3/16, 3/16, 3/16}, + visual = "sprite", + visual_size = {x=1/2, y=1/2}, + textures = { "fishing_worm.png", "fishing_worm.png"}, + view_range = 32, + -- Don't punch this poor creature... + on_punch = function(self, puncher) + self.object:remove() + end, + -- ...softly take it into your hand. + on_rightclick = function(self, clicker) + if clicker:is_player() and clicker:get_inventory() then + clicker:get_inventory():add_item("main", "fishing:bait_worm") + self.object:remove() + end + end, + -- AI :D + on_step = function(self, dtime) + local pos = self.object:getpos() + local n = minetest.env:get_node({x=pos.x,y=pos.y-0.3,z=pos.z}) + -- despawn when no player in range + for _,player in pairs(minetest.get_connected_players()) do + local s = self.object:getpos() + local p = player:getpos() + local dist = ((p.x-s.x)^2 + (p.y-s.y)^2 + (p.z-s.z)^2)^0.5 + if dist > self.view_range then + self.object:remove() + end + end + -- move in world + local look_whats_up = function(self) + self.object:set_hp(self.object:get_hp()-self.damage_over_time) -- creature is getting older + if n.name == "air" then -- fall when in air + self.object:moveto({x=pos.x,y=pos.y-0.5,z=pos.z}) + self.object:set_hp(self.object:get_hp()-75) + + --if n.name == "snappy" then -- fall when leaves or similar + elseif minetest.get_item_group(n.name, "snappy") ~= 0 then + self.object:moveto({x=pos.x+(0.001*(math.random(-32, 32))),y=pos.y-(0.001*(math.random(0, 64))),z=pos.z+(0.001*(math.random(-32, 32)))}) + + + elseif string.find(n.name, "default:water") then -- sink when in water + self.object:moveto({x=pos.x,y=pos.y-0.25,z=pos.z}) + self.object:set_hp(self.object:get_hp()-37) + + elseif minetest.get_item_group(n.name, "soil") ~= 0 then + if minetest.get_item_group(minetest.env:get_node({x=pos.x,y=pos.y-0.1,z=pos.z}).name, "soil") == 0 and self.object:get_hp() > 200 then + self.object:set_hp(199) + elseif self.object:get_hp() > 200 then -- leave dirt to see whats going on + self.object:moveto({x=pos.x+(0.001*(math.random(-2, 2))),y=pos.y+0.003,z=pos.z+(0.001*(math.random(-2, 2)))}) + elseif self.object:get_hp() < 199 then -- no rain here, let's get outa here + self.object:moveto({x=pos.x+(0.001*(math.random(-2, 2))),y=pos.y-0.001,z=pos.z+(0.001*(math.random(-2, 2)))}) + elseif self.object:get_hp() == 0 then + self.object:remove() + end + else -- check if there's dirt anywhere (not finished) + local check_group = minetest.get_item_group + local goal_01 = check_group(minetest.env:get_node({x = pos.x + 1, y = pos.y-0.4, z = pos.z }).name, "soil") + local goal_02 = check_group(minetest.env:get_node({x = pos.x, y = pos.y-0.4, z = pos.z + 1}).name, "soil") + local goal_03 = check_group(minetest.env:get_node({x = pos.x - 1, y = pos.y-0.4, z = pos.z }).name, "soil") + local goal_04 = check_group(minetest.env:get_node({x = pos.x, y = pos.y-0.4, z = pos.z - 1}).name, "soil") + + local goal_1a = check_group(minetest.env:get_node({x = pos.x + 1, y = pos.y+0.6, z = pos.z }).name, "soil") + local goal_2a = check_group(minetest.env:get_node({x = pos.x, y = pos.y+0.6, z = pos.z + 1}).name, "soil") + local goal_3a = check_group(minetest.env:get_node({x = pos.x - 1, y = pos.y+0.6, z = pos.z }).name, "soil") + local goal_4a = check_group(minetest.env:get_node({x = pos.x, y = pos.y+0.6, z = pos.z - 1}).name, "soil") + -- if there's dirt nearby, go there + if goal_01 ~= 0 or goal_1a ~= 0 then + self.object:moveto({x=pos.x+0.002,y=pos.y,z=pos.z+(0.001*(math.random(-2, 2)))}) + elseif goal_02 ~= 0 or goal_2a ~= 0 then + self.object:moveto({x=pos.x+(0.001*(math.random(-2, 2))),y=pos.y,z=pos.z+0.002}) + elseif goal_03 ~= 0 or goal_3a ~= 0 then + self.object:moveto({x=pos.x-0.002,y=pos.y,z=pos.z+(0.001*(math.random(-2, 2)))}) + elseif goal_04 ~= 0 or goal_4a ~= 0 then + self.object:moveto({x=pos.x+(0.001*(math.random(-2, 2))),y=pos.y,z=pos.z-0.002}) + else -- I'm lost, no dirt + self.object:moveto({x=pos.x+(0.001*(math.random(-8, 8))),y=pos.y,z=pos.z+(0.001*(math.random(-8, 8)))}) + end + end + end + look_whats_up(self) + end, +}) \ No newline at end of file diff --git a/mods/hud/hunger.lua b/mods/hud/hunger.lua index c9096f80..7e3005d7 100755 --- a/mods/hud/hunger.lua +++ b/mods/hud/hunger.lua @@ -98,16 +98,6 @@ if minetest.get_modpath("animalmaterials") ~= nil then overwrite("animalmaterials:fish_clownfish", 2) end -if minetest.get_modpath("fishing") ~= nil then - overwrite("fishing:fish_raw", 2) - overwrite("fishing:fish_cooked", 5) - overwrite("fishing:sushi", 6) - overwrite("fishing:shark", 4) - overwrite("fishing:shark_cooked", 8) - overwrite("fishing:pike", 4) - overwrite("fishing:pike_cooked", 8) -end - if minetest.get_modpath("glooptest") ~= nil then overwrite("glooptest:kalite_lump", 1) end @@ -256,7 +246,7 @@ if minetest.get_modpath("ethereal") then overwrite("ethereal:bucket_cactus", 2, "bucket:bucket_empty") end overwrite("ethereal:fish_raw", 2) - overwrite("ethereal:fish_cooked", 5) + overwrite("ethereal:fish_cooked", 4) overwrite("ethereal:seaweed", 1) overwrite("ethereal:yellowleaves", 1, "", nil, 1) overwrite("ethereal:sashimi", 4) @@ -305,7 +295,7 @@ if minetest.get_modpath("mobs") ~= nil then overwrite("mobs:rat_cooked", 5) overwrite("mobs:honey", 2) overwrite("mobs:pork_raw", 4) - overwrite("mobs:pork_cooked", 8) + overwrite("mobs:pork_cooked", 7) overwrite("mobs:chicken_raw", 2) overwrite("mobs:chicken_cooked", 4) overwrite("mobs:egg", 1) @@ -315,6 +305,15 @@ if minetest.get_modpath("mobs") ~= nil then end end +if minetest.get_modpath("fishing") ~= nil then + overwrite("fishing:fish_raw", 2) + overwrite("fishing:fish_cooked", 4) + overwrite("fishing:sushi", 6) + overwrite("fishing:shark", 2) + overwrite("fishing:shark_cooked", 6) + overwrite("fishing:pike", 2) + overwrite("fishing:pike_cooked", 6) +end --- mes modifs /fin --- if minetest.get_modpath("kpgmobs") ~= nil then