]> git.lizzy.rs Git - Crafter.git/commitdiff
Add in raycast bucket
authoroilboi <47129783+oilboi@users.noreply.github.com>
Mon, 20 Apr 2020 07:21:51 +0000 (03:21 -0400)
committeroilboi <47129783+oilboi@users.noreply.github.com>
Mon, 20 Apr 2020 07:21:51 +0000 (03:21 -0400)
README.md
mods/farming/init.lua
mods/main/bucket.lua
mods/main/craft_recipes.lua
mods/main/nodes.lua
mods/main/textures/bucket_lava.png [new file with mode: 0644]
mods/weather/init.lua

index 4f63078feccd6601210f67d6b7bb196ac4c916be..da677be7b7f058d798ed282ba6411e5f48479773 100644 (file)
--- a/README.md
+++ b/README.md
 - Made nether portal function
 - Beds and water explode in the nether
 - Added better nether portal effect
-- Fix clientside error 23
+- Make error 23 much less frequent
 - Make mobs less noisy
+- Add buckets in
+- Make buckets use special raycast function
+- Fix clientside global counters to after statements
+- Made snow and grass floodable
 ---
 
 
index 10b95b4f6379012ee2b2ba7abea8a69d485c0a8a..3d6ed12a3b335ea4aea403e8f45f7440b8971ae8 100644 (file)
@@ -184,6 +184,7 @@ minetest.register_node("farming:grass", {
     buildable_to = true,
     groups = {dig_immediate=1,attached_node=1,flammable=1},
     sounds = main.grassSound(),
+    floodable = true,
     selection_box = {
                type = "fixed",
                fixed = {-4 / 16, -0.5, -4 / 16, 4 / 16, 4 / 16, 4 / 16}
index c4a8e9dce325349aa86681fc3b8a9c7724d2d160..7079b71e2fab659f6dbb764aff9813ff5a73a133 100644 (file)
+--[[
+BEFORE YOU ASK WHY ARE YOU DOING THIS!
+
+It works better and doesn't block digging with a bucket through water
+]]--
+
+local function bucket_raycast(user,type)
+       local pos = user:get_pos()
+       pos.y = pos.y + user:get_properties().eye_height
+       local look_dir = user:get_look_dir()
+       look_dir = vector.multiply(look_dir,4)
+       local pos2 = vector.add(pos,look_dir)
+       
+       local ray = minetest.raycast(pos, pos2, false, true)            
+       if ray then
+               for pointed_thing in ray do
+                       if pointed_thing then
+                               return({under=pointed_thing.under,above=pointed_thing.above})
+                       end
+               end
+       end
+       return(nil)
+end
+
 -- Item definitions
 minetest.register_craftitem("main:bucket", {
        description = "Bucket",
        inventory_image = "bucket.png",
+       stack_max = 1,
        --wield_image = "bucket.png",
-       liquids_pointable = true,
+       --liquids_pointable = true,
        on_place = function(itemstack, placer, pointed_thing)
-               --set it to water
-               if minetest.get_node(pointed_thing.under).name == "main:water" then
+               --do the sucking water out of farmland thing first
+               if pointed_thing.under and minetest.get_node(pointed_thing.under).name == "farming:farmland_wet" then
+                       minetest.set_node(pointed_thing.under,{name="farming:farmland_dry"})
                        itemstack:replace(ItemStack("main:bucket_water"))
-                       minetest.remove_node(pointed_thing.under)
                        return(itemstack)
                end
-       end
+               
+               
+               local pos = bucket_raycast(placer)
+               
+               if not pos then
+                       return
+               end
+               
+               local pos_under = pos.under
+               
+               local node = minetest.get_node(pos_under).name
+       
+               if node == "main:water" then
+                       itemstack:replace(ItemStack("main:bucket_water"))
+                       minetest.remove_node(pos_under)
+                       return(itemstack)
+               elseif node == "main:lava" then
+                       itemstack:replace(ItemStack("main:bucket_lava"))
+                       minetest.remove_node(pos_under)
+                       return(itemstack)
+               end
+       end,
+       on_secondary_use = function(itemstack, user, pointed_thing)
+               local pos = bucket_raycast(user)
+               if not pos then
+                       return
+               end
+               local pos_under = pos.under
+               
+               local node = minetest.get_node(pos_under).name
+               
+               if node == "main:water" then
+                       itemstack:replace(ItemStack("main:bucket_water"))
+                       minetest.remove_node(pos_under)
+                       return(itemstack)
+               elseif node == "main:lava" then
+                       itemstack:replace(ItemStack("main:bucket_lava"))
+                       minetest.remove_node(pos_under)
+                       return(itemstack)
+               end
+       end,
 })
 
 
 minetest.register_craftitem("main:bucket_water", {
-       description = "Bucket with Water",
+       description = "Bucket of Water",
        inventory_image = "bucket_water.png",
-       --wield_image = "bucket.png",
-       liquids_pointable = false,
+       stack_max = 1,
+       --liquids_pointable = false,
        on_place = function(itemstack, placer, pointed_thing)
+               if pointed_thing.under and minetest.get_node(pointed_thing.under).name == "farming:farmland_dry" then
+                       minetest.set_node(pointed_thing.under,{name="farming:farmland_wet"})
+                       itemstack:replace(ItemStack("main:bucket"))
+                       return(itemstack)
+               end
+               local pos = bucket_raycast(placer)
+               
+               if not pos then
+                       return
+               end
+               
+               local pos_under = pos.under
+               local pos_above = pos.above
+               
+               local node_under = minetest.get_node(pos_under).name
+               local node_above = minetest.get_node(pos_above).name
+               
+               local buildable_under = (minetest.registered_nodes[node_under].buildable_to == true)
+               local buildable_above = (minetest.registered_nodes[node_above].buildable_to == true)
+               
                --set it to water
-               local is_farmland = minetest.get_node(pointed_thing.under).name == "farming:farmland_dry"
-               local node = minetest.get_node(pointed_thing.above).name
-               if node == "air" or node == "main:water" or node == "main:waterflow" then
-                       minetest.set_node(pointed_thing.above,{name="main:water"})
+               if buildable_under == true then
+                       minetest.set_node(pos_under,{name="main:water"})
                        itemstack:replace(ItemStack("main:bucket"))
                        return(itemstack)
-               elseif is_farmland then
-                       minetest.set_node(pointed_thing.under,{name="farming:farmland_wet"})
+               elseif buildable_above then
+                       minetest.set_node(pos_above,{name="main:water"})
                        itemstack:replace(ItemStack("main:bucket"))
                        return(itemstack)
                end
-       end
+       end,
+       on_secondary_use = function(itemstack, user, pointed_thing)
+               local pos = bucket_raycast(user)
+               
+               if not pos then
+                       return
+               end
+               
+               local pos_under = pos.under
+               local pos_above = pos.above
+               
+               local node_under = minetest.get_node(pos_under).name
+               local node_above = minetest.get_node(pos_above).name
+               
+               local buildable_under = (minetest.registered_nodes[node_under].buildable_to == true)
+               local buildable_above = (minetest.registered_nodes[node_above].buildable_to == true)
+               
+               --set it to water
+               if buildable_under == true then
+                       minetest.set_node(pos_under,{name="main:water"})
+                       itemstack:replace(ItemStack("main:bucket"))
+                       return(itemstack)
+               elseif buildable_above then
+                       minetest.set_node(pos_above,{name="main:water"})
+                       itemstack:replace(ItemStack("main:bucket"))
+                       return(itemstack)
+               end
+       end,
+})
+
+
+minetest.register_craftitem("main:bucket_lava", {
+       description = "Bucket of Lava",
+       inventory_image = "bucket_lava.png",
+       stack_max = 1,
+       --liquids_pointable = false,
+       on_place = function(itemstack, placer, pointed_thing)
+               if pointed_thing.under and minetest.get_node(pointed_thing.under).name == "tnt:tnt" then
+                       minetest.remove_node(pointed_thing.under)
+                       tnt(pointed_thing.under,7)
+                       itemstack:replace(ItemStack("main:bucket"))
+                       return(itemstack)
+               end
+               
+               local pos = bucket_raycast(placer)
+               
+               if not pos then
+                       return
+               end
+               
+               local pos_under = pos.under
+               local pos_above = pos.above
+               
+               local node_under = minetest.get_node(pos_under).name
+               local node_above = minetest.get_node(pos_above).name
+               
+               local buildable_under = (minetest.registered_nodes[node_under].buildable_to == true)
+               local buildable_above = (minetest.registered_nodes[node_above].buildable_to == true)
+               
+               --set it to lava
+               if buildable_under == true then
+                       minetest.set_node(pos_under,{name="main:lava"})
+                       itemstack:replace(ItemStack("main:bucket"))
+                       return(itemstack)
+               elseif buildable_above then
+                       minetest.set_node(pos_above,{name="main:lava"})
+                       itemstack:replace(ItemStack("main:bucket"))
+                       return(itemstack)
+               end
+       end,
+       on_secondary_use = function(itemstack, user, pointed_thing)
+               local pos = bucket_raycast(user)
+               
+               if not pos then
+                       return
+               end
+               
+               local pos_under = pos.under
+               local pos_above = pos.above
+               
+               local node_under = minetest.get_node(pos_under).name
+               local node_above = minetest.get_node(pos_above).name
+               
+               local buildable_under = (minetest.registered_nodes[node_under].buildable_to == true)
+               local buildable_above = (minetest.registered_nodes[node_above].buildable_to == true)
+               
+               --set it to lava
+               if buildable_under == true then
+                       minetest.set_node(pos_under,{name="main:lava"})
+                       itemstack:replace(ItemStack("main:bucket"))
+                       return(itemstack)
+               elseif buildable_above then
+                       minetest.set_node(pos_above,{name="main:lava"})
+                       itemstack:replace(ItemStack("main:bucket"))
+                       return(itemstack)
+               end
+       end,
 })
index 1fd3515cf1d558455b9c44c85f295cf7de3097e2..01115ac3c726b99986bf4b8d3a4fa04a31bc711c 100644 (file)
@@ -158,6 +158,14 @@ minetest.register_craft({
        }
 })
 
+minetest.register_craft({
+       output = "main:bucket",
+       recipe = {
+               {"main:iron","","main:iron"},
+               {"","main:iron",""},
+       }
+})
+
 --tool repair
 minetest.register_craft({
        type = "toolrepair",
index 736c771e36d08b7a26e5dc996ce4d7bc0d287a53..2cd6dce3a0fd8fc2100abd351d525a9bc202934d 100644 (file)
@@ -342,6 +342,12 @@ minetest.register_node("main:waterflow", {
                        },
                },
        },
+       selection_box = {
+            type = "fixed",
+            fixed = {
+                {0, 0, 0, 0, 0, 0},
+            },
+        },
        alpha = 191,
        paramtype = "light",
        paramtype2 = "flowingliquid",
@@ -431,6 +437,12 @@ minetest.register_node("main:lavaflow", {
                        },
                },
        },
+       selection_box = {
+            type = "fixed",
+            fixed = {
+                {0, 0, 0, 0, 0, 0},
+            },
+        },
        paramtype = "light",
        paramtype2 = "flowingliquid",
        light_source = 13,
diff --git a/mods/main/textures/bucket_lava.png b/mods/main/textures/bucket_lava.png
new file mode 100644 (file)
index 0000000..967c2ee
Binary files /dev/null and b/mods/main/textures/bucket_lava.png differ
index 9e23e922290f6eff4b043924fe644042e404eb48..8614778cdb242b08c356bf6c49e0a6e8dc7e2101 100644 (file)
@@ -192,6 +192,7 @@ minetest.register_node("weather:snow", {
     paramtype = "light",
        drawtype = "nodebox",
        walkable = false,
+       floodable = true,
     drop = {
                        max_items = 5,
                        items= {