From 755a61a2a376a2276d0f05cf01c61b2fcaa77235 Mon Sep 17 00:00:00 2001 From: HybridDog Date: Wed, 28 May 2014 23:19:13 +0200 Subject: [PATCH] use submodules add mods --- mods/carts | 1 + mods/carts/README.txt | 22 - mods/carts/depends.txt | 1 - mods/carts/functions.lua | 56 -- mods/carts/init.lua | 475 -------------- mods/carts/models/cart.png | Bin 422 -> 0 bytes mods/carts/models/cart.x | 339 ---------- mods/carts/textures/cart_bottom.png | Bin 154 -> 0 bytes mods/carts/textures/cart_side.png | Bin 192 -> 0 bytes mods/carts/textures/cart_top.png | Bin 262 -> 0 bytes mods/carts/textures/carts_rail_brk.png | Bin 524 -> 0 bytes .../textures/carts_rail_crossing_brk.png | Bin 498 -> 0 bytes .../textures/carts_rail_crossing_pwr.png | Bin 604 -> 0 bytes mods/carts/textures/carts_rail_curved_brk.png | Bin 555 -> 0 bytes mods/carts/textures/carts_rail_curved_pwr.png | Bin 577 -> 0 bytes mods/carts/textures/carts_rail_pwr.png | Bin 533 -> 0 bytes .../textures/carts_rail_t_junction_brk.png | Bin 548 -> 0 bytes .../textures/carts_rail_t_junction_pwr.png | Bin 584 -> 0 bytes mods/conifers | 1 + mods/conifers/README.txt | 16 - mods/conifers/c1.jpg | Bin 36071 -> 0 bytes mods/conifers/c2.jpg | Bin 37315 -> 0 bytes mods/conifers/c3.jpg | Bin 33340 -> 0 bytes mods/conifers/depends.txt | 1 - mods/conifers/init.lua | 524 --------------- mods/conifers/rest/c1.gif | Bin 26148 -> 0 bytes mods/conifers/rest/c2.jpg | Bin 33340 -> 0 bytes mods/conifers/rest/init_old.lua | 510 --------------- mods/conifers/textures/conifers_leaves.png | Bin 333 -> 0 bytes .../textures/conifers_leaves_special.png | Bin 367 -> 0 bytes mods/conifers/textures/conifers_sapling.png | Bin 454 -> 0 bytes mods/conifers/textures/conifers_trunk.png | Bin 699 -> 0 bytes .../textures/conifers_trunk_reversed.png | Bin 721 -> 0 bytes mods/conifers/textures/conifers_trunktop.png | Bin 768 -> 0 bytes mods/hydro | 1 + mods/hydro/.gitignore | 4 - mods/hydro/depends.txt | 1 - mods/hydro/init.lua | 425 ------------ mods/hydro/textures/hydro_coffee.png | Bin 426 -> 0 bytes mods/hydro/textures/hydro_coffee1.png | Bin 386 -> 0 bytes mods/hydro/textures/hydro_coffee2.png | Bin 377 -> 0 bytes mods/hydro/textures/hydro_coffee3.png | Bin 393 -> 0 bytes mods/hydro/textures/hydro_coffee4.png | Bin 384 -> 0 bytes mods/hydro/textures/hydro_coffeecup.png | Bin 797 -> 0 bytes mods/hydro/textures/hydro_grapes.png | Bin 429 -> 0 bytes mods/hydro/textures/hydro_grapes1.png | Bin 386 -> 0 bytes mods/hydro/textures/hydro_grapes2.png | Bin 377 -> 0 bytes mods/hydro/textures/hydro_grapes3.png | Bin 393 -> 0 bytes mods/hydro/textures/hydro_grapes4.png | Bin 383 -> 0 bytes mods/hydro/textures/hydro_growlamp_bottom.png | Bin 104 -> 0 bytes mods/hydro/textures/hydro_growlamp_side.png | Bin 149 -> 0 bytes mods/hydro/textures/hydro_growlamp_top.png | Bin 100 -> 0 bytes mods/hydro/textures/hydro_habanero.png | Bin 309 -> 0 bytes mods/hydro/textures/hydro_habanero1.png | Bin 375 -> 0 bytes mods/hydro/textures/hydro_habanero2.png | Bin 480 -> 0 bytes mods/hydro/textures/hydro_habanero3.png | Bin 533 -> 0 bytes mods/hydro/textures/hydro_habanero4.png | Bin 542 -> 0 bytes mods/hydro/textures/hydro_peas.png | Bin 324 -> 0 bytes mods/hydro/textures/hydro_peas1.png | Bin 375 -> 0 bytes mods/hydro/textures/hydro_peas2.png | Bin 475 -> 0 bytes mods/hydro/textures/hydro_peas3.png | Bin 516 -> 0 bytes mods/hydro/textures/hydro_peas4.png | Bin 533 -> 0 bytes mods/hydro/textures/hydro_promix.png | Bin 687 -> 0 bytes mods/hydro/textures/hydro_roastedcoffee.png | Bin 2869 -> 0 bytes mods/hydro/textures/hydro_rosebush.png | Bin 509 -> 0 bytes mods/hydro/textures/hydro_roses1.png | Bin 375 -> 0 bytes mods/hydro/textures/hydro_roses2.png | Bin 459 -> 0 bytes mods/hydro/textures/hydro_roses3.png | Bin 540 -> 0 bytes mods/hydro/textures/hydro_roses4.png | Bin 396 -> 0 bytes mods/hydro/textures/hydro_seedlings.png | Bin 295 -> 0 bytes mods/hydro/textures/hydro_seeds.png | Bin 375 -> 0 bytes mods/hydro/textures/hydro_sproutlings.png | Bin 327 -> 0 bytes mods/hydro/textures/hydro_tomato.png | Bin 187 -> 0 bytes mods/hydro/textures/hydro_tomato1.png | Bin 375 -> 0 bytes mods/hydro/textures/hydro_tomato2.png | Bin 459 -> 0 bytes mods/hydro/textures/hydro_tomato3.png | Bin 489 -> 0 bytes mods/hydro/textures/hydro_tomato4.png | Bin 478 -> 0 bytes mods/hydro/textures/hydro_wildplant.png | Bin 320 -> 0 bytes mods/hydro/textures/hydro_wine.png | Bin 696 -> 0 bytes mods/locks | 1 + mods/locks/README.md | 36 -- mods/locks/depends.txt | 2 - mods/locks/init.lua | 611 ------------------ mods/locks/liscence.txt | 19 - mods/locks/shared_locked_chest.lua | 136 ---- mods/locks/shared_locked_furnace.lua | 434 ------------- mods/locks/shared_locked_sign_wall.lua | 81 --- mods/locks/shared_locked_xdoors2.lua | 212 ------ mods/locks/textures/licence.txt | 88 --- mods/locks/textures/locks_key16.png | Bin 390 -> 0 bytes mods/locks/textures/locks_key32.png | Bin 726 -> 0 bytes mods/locks/textures/locks_keychain16.png | Bin 756 -> 0 bytes mods/locks/textures/locks_keychain32.png | Bin 1843 -> 0 bytes mods/locks/textures/locks_lock16.png | Bin 727 -> 0 bytes mods/locks/textures/locks_lock32.png | Bin 1906 -> 0 bytes .../locks/textures/locks_xdoors2_bottom_1.png | Bin 227 -> 0 bytes .../locks/textures/locks_xdoors2_bottom_2.png | Bin 230 -> 0 bytes mods/locks/textures/locks_xdoors2_door.png | Bin 266 -> 0 bytes mods/locks/textures/xdoors2_bottom.png | Bin 109 -> 0 bytes mods/locks/textures/xdoors2_side.png | Bin 109 -> 0 bytes mods/locks/textures/xdoors2_top.png | Bin 109 -> 0 bytes mods/locks/textures/xdoors2_top_1.png | Bin 144 -> 0 bytes mods/locks/textures/xdoors2_top_2.png | Bin 144 -> 0 bytes .../locks/textures/xdoors2locked_bottom_1.png | Bin 227 -> 0 bytes .../locks/textures/xdoors2locked_bottom_2.png | Bin 230 -> 0 bytes mods/locks/textures/xdoors2locked_door.png | Bin 266 -> 0 bytes mods/vines | 1 + mods/vines/README.md | 4 - mods/vines/depends.txt | 1 - mods/vines/init.lua | 316 --------- mods/vines/textures/vines_rope.png | Bin 172 -> 0 bytes mods/vines/textures/vines_rope_normal.png | Bin 234 -> 0 bytes mods/vines/textures/vines_rope_shadow.png | Bin 200 -> 0 bytes mods/vines/textures/vines_vine.png | Bin 173 -> 0 bytes mods/vines/textures/vines_vine_normal.png | Bin 336 -> 0 bytes mods/vines/textures/vines_vine_rotten.png | Bin 173 -> 0 bytes .../textures/vines_vine_rotten_normal.png | Bin 331 -> 0 bytes 117 files changed, 5 insertions(+), 4314 deletions(-) create mode 160000 mods/carts delete mode 100644 mods/carts/README.txt delete mode 100644 mods/carts/depends.txt delete mode 100644 mods/carts/functions.lua delete mode 100644 mods/carts/init.lua delete mode 100644 mods/carts/models/cart.png delete mode 100644 mods/carts/models/cart.x delete mode 100644 mods/carts/textures/cart_bottom.png delete mode 100644 mods/carts/textures/cart_side.png delete mode 100644 mods/carts/textures/cart_top.png delete mode 100644 mods/carts/textures/carts_rail_brk.png delete mode 100644 mods/carts/textures/carts_rail_crossing_brk.png delete mode 100644 mods/carts/textures/carts_rail_crossing_pwr.png delete mode 100644 mods/carts/textures/carts_rail_curved_brk.png delete mode 100644 mods/carts/textures/carts_rail_curved_pwr.png delete mode 100644 mods/carts/textures/carts_rail_pwr.png delete mode 100644 mods/carts/textures/carts_rail_t_junction_brk.png delete mode 100644 mods/carts/textures/carts_rail_t_junction_pwr.png create mode 160000 mods/conifers delete mode 100644 mods/conifers/README.txt delete mode 100644 mods/conifers/c1.jpg delete mode 100644 mods/conifers/c2.jpg delete mode 100644 mods/conifers/c3.jpg delete mode 100644 mods/conifers/depends.txt delete mode 100644 mods/conifers/init.lua delete mode 100644 mods/conifers/rest/c1.gif delete mode 100644 mods/conifers/rest/c2.jpg delete mode 100644 mods/conifers/rest/init_old.lua delete mode 100644 mods/conifers/textures/conifers_leaves.png delete mode 100644 mods/conifers/textures/conifers_leaves_special.png delete mode 100644 mods/conifers/textures/conifers_sapling.png delete mode 100644 mods/conifers/textures/conifers_trunk.png delete mode 100644 mods/conifers/textures/conifers_trunk_reversed.png delete mode 100644 mods/conifers/textures/conifers_trunktop.png create mode 160000 mods/hydro delete mode 100644 mods/hydro/.gitignore delete mode 100644 mods/hydro/depends.txt delete mode 100644 mods/hydro/init.lua delete mode 100644 mods/hydro/textures/hydro_coffee.png delete mode 100644 mods/hydro/textures/hydro_coffee1.png delete mode 100644 mods/hydro/textures/hydro_coffee2.png delete mode 100644 mods/hydro/textures/hydro_coffee3.png delete mode 100644 mods/hydro/textures/hydro_coffee4.png delete mode 100644 mods/hydro/textures/hydro_coffeecup.png delete mode 100644 mods/hydro/textures/hydro_grapes.png delete mode 100644 mods/hydro/textures/hydro_grapes1.png delete mode 100644 mods/hydro/textures/hydro_grapes2.png delete mode 100644 mods/hydro/textures/hydro_grapes3.png delete mode 100644 mods/hydro/textures/hydro_grapes4.png delete mode 100644 mods/hydro/textures/hydro_growlamp_bottom.png delete mode 100644 mods/hydro/textures/hydro_growlamp_side.png delete mode 100644 mods/hydro/textures/hydro_growlamp_top.png delete mode 100644 mods/hydro/textures/hydro_habanero.png delete mode 100644 mods/hydro/textures/hydro_habanero1.png delete mode 100644 mods/hydro/textures/hydro_habanero2.png delete mode 100644 mods/hydro/textures/hydro_habanero3.png delete mode 100644 mods/hydro/textures/hydro_habanero4.png delete mode 100644 mods/hydro/textures/hydro_peas.png delete mode 100644 mods/hydro/textures/hydro_peas1.png delete mode 100644 mods/hydro/textures/hydro_peas2.png delete mode 100644 mods/hydro/textures/hydro_peas3.png delete mode 100644 mods/hydro/textures/hydro_peas4.png delete mode 100644 mods/hydro/textures/hydro_promix.png delete mode 100644 mods/hydro/textures/hydro_roastedcoffee.png delete mode 100644 mods/hydro/textures/hydro_rosebush.png delete mode 100644 mods/hydro/textures/hydro_roses1.png delete mode 100644 mods/hydro/textures/hydro_roses2.png delete mode 100644 mods/hydro/textures/hydro_roses3.png delete mode 100644 mods/hydro/textures/hydro_roses4.png delete mode 100644 mods/hydro/textures/hydro_seedlings.png delete mode 100644 mods/hydro/textures/hydro_seeds.png delete mode 100644 mods/hydro/textures/hydro_sproutlings.png delete mode 100644 mods/hydro/textures/hydro_tomato.png delete mode 100644 mods/hydro/textures/hydro_tomato1.png delete mode 100644 mods/hydro/textures/hydro_tomato2.png delete mode 100644 mods/hydro/textures/hydro_tomato3.png delete mode 100644 mods/hydro/textures/hydro_tomato4.png delete mode 100644 mods/hydro/textures/hydro_wildplant.png delete mode 100644 mods/hydro/textures/hydro_wine.png create mode 160000 mods/locks delete mode 100644 mods/locks/README.md delete mode 100644 mods/locks/depends.txt delete mode 100644 mods/locks/init.lua delete mode 100644 mods/locks/liscence.txt delete mode 100644 mods/locks/shared_locked_chest.lua delete mode 100644 mods/locks/shared_locked_furnace.lua delete mode 100644 mods/locks/shared_locked_sign_wall.lua delete mode 100644 mods/locks/shared_locked_xdoors2.lua delete mode 100644 mods/locks/textures/licence.txt delete mode 100644 mods/locks/textures/locks_key16.png delete mode 100644 mods/locks/textures/locks_key32.png delete mode 100644 mods/locks/textures/locks_keychain16.png delete mode 100644 mods/locks/textures/locks_keychain32.png delete mode 100644 mods/locks/textures/locks_lock16.png delete mode 100644 mods/locks/textures/locks_lock32.png delete mode 100644 mods/locks/textures/locks_xdoors2_bottom_1.png delete mode 100644 mods/locks/textures/locks_xdoors2_bottom_2.png delete mode 100644 mods/locks/textures/locks_xdoors2_door.png delete mode 100644 mods/locks/textures/xdoors2_bottom.png delete mode 100644 mods/locks/textures/xdoors2_side.png delete mode 100644 mods/locks/textures/xdoors2_top.png delete mode 100644 mods/locks/textures/xdoors2_top_1.png delete mode 100644 mods/locks/textures/xdoors2_top_2.png delete mode 100644 mods/locks/textures/xdoors2locked_bottom_1.png delete mode 100644 mods/locks/textures/xdoors2locked_bottom_2.png delete mode 100644 mods/locks/textures/xdoors2locked_door.png create mode 160000 mods/vines delete mode 100644 mods/vines/README.md delete mode 100644 mods/vines/depends.txt delete mode 100644 mods/vines/init.lua delete mode 100644 mods/vines/textures/vines_rope.png delete mode 100644 mods/vines/textures/vines_rope_normal.png delete mode 100644 mods/vines/textures/vines_rope_shadow.png delete mode 100644 mods/vines/textures/vines_vine.png delete mode 100644 mods/vines/textures/vines_vine_normal.png delete mode 100644 mods/vines/textures/vines_vine_rotten.png delete mode 100644 mods/vines/textures/vines_vine_rotten_normal.png diff --git a/mods/carts b/mods/carts new file mode 160000 index 0000000..10c4557 --- /dev/null +++ b/mods/carts @@ -0,0 +1 @@ +Subproject commit 10c455793d430e9177b9d5226a76f8525faef007 diff --git a/mods/carts/README.txt b/mods/carts/README.txt deleted file mode 100644 index c27290a..0000000 --- a/mods/carts/README.txt +++ /dev/null @@ -1,22 +0,0 @@ -Minetest 0.4 mod: carts -======================= -by PilzAdam - -License of source code: ------------------------ -WTFPL - -License of media (textures, sounds and models): ------------------------------------------------ -CC-0 - -Authors of media files: ------------------------ -kddekadenz: - cart_bottom.png - cart_side.png - cart_top.png - -Zeg9: - cart.x - cart.png diff --git a/mods/carts/depends.txt b/mods/carts/depends.txt deleted file mode 100644 index 4ad96d5..0000000 --- a/mods/carts/depends.txt +++ /dev/null @@ -1 +0,0 @@ -default diff --git a/mods/carts/functions.lua b/mods/carts/functions.lua deleted file mode 100644 index 8a7da47..0000000 --- a/mods/carts/functions.lua +++ /dev/null @@ -1,56 +0,0 @@ - --- --- Helper functions --- - -cart_func = {} - -function cart_func:get_sign(z) - if z == 0 then - return 0 - else - return z/math.abs(z) - end -end - --- Returns the velocity as a unit vector --- The smaller part of the vector will be turned to 0 -function cart_func:velocity_to_dir(v) - if math.abs(v.x) > math.abs(v.z) then - return {x=cart_func:get_sign(v.x), y=cart_func:get_sign(v.y), z=0} - else - return {x=0, y=cart_func:get_sign(v.y), z=cart_func:get_sign(v.z)} - end -end - -function cart_func:is_rail(p) - local nn = minetest.env:get_node(p).name - return minetest.get_item_group(nn, "rail") ~= 0 -end - -function cart_func:is_int(z) - z = math.abs(z) - return math.abs(math.floor(z+0.5)-z) <= 0.1 -end - -cart_func.v3 = {} - -function cart_func.v3:add(v1, v2) - return {x=v1.x+v2.x, y=v1.y+v2.y, z=v1.z+v2.z} -end - -function cart_func.v3:copy(v) - return {x=v.x, y=v.y, z=v.z} -end - -function cart_func.v3:round(v) - return { - x = math.floor(v.x+0.5), - y = math.floor(v.y+0.5), - z = math.floor(v.z+0.5), - } -end - -function cart_func.v3:equal(v1, v2) - return v1.x == v2.x and v1.y == v2.y and v1.z == v2.z -end diff --git a/mods/carts/init.lua b/mods/carts/init.lua deleted file mode 100644 index 732534e..0000000 --- a/mods/carts/init.lua +++ /dev/null @@ -1,475 +0,0 @@ - -dofile(minetest.get_modpath("carts").."/functions.lua") - --- --- Cart entity --- - -local cart = { - physical = false, - collisionbox = {-0.5,-0.5,-0.5, 0.5,0.5,0.5}, - visual = "mesh", - mesh = "cart.x", - visual_size = {x=1, y=1}, - textures = {"cart.png"}, - - driver = nil, - velocity = {x=0, y=0, z=0}, - old_pos = nil, - old_velocity = nil, - MAX_V = 15, -- Limit of the velocity -} - -function cart:on_rightclick(clicker) - if not clicker or not clicker:is_player() then - return - end - if self.driver and clicker == self.driver then - self.driver = nil - clicker:set_detach() - elseif not self.driver then - self.driver = clicker - clicker:set_attach(self.object, "", {x=0,y=5,z=0}, {x=0,y=0,z=0}) - end -end - -function cart:on_activate(staticdata, dtime_s) - self.object:set_armor_groups({immortal=1}) - if staticdata then - local tmp = minetest.deserialize(staticdata) - if tmp then - self.velocity = tmp.velocity - end - end - self.old_pos = self.object:getpos() - self.old_velocity = self.velocity -end - -function cart:get_staticdata() - return minetest.serialize({ - velocity = self.velocity, - }) -end - --- Remove the cart if holding a tool or accelerate it -function cart:on_punch(puncher, time_from_last_punch, tool_capabilities, direction) - if not puncher or not puncher:is_player() then - return - end - - if puncher:get_player_control().sneak then - self.object:remove() - puncher:get_inventory():add_item("main", "carts:cart") - return - end - - if puncher == self.driver then - return - end - - local d = cart_func:velocity_to_dir(direction) - local s = self.velocity - if time_from_last_punch > tool_capabilities.full_punch_interval then - time_from_last_punch = tool_capabilities.full_punch_interval - end - local f = 4*(time_from_last_punch/tool_capabilities.full_punch_interval) - local v = {x=s.x+d.x*f, y=s.y, z=s.z+d.z*f} - if math.abs(v.x) < 6 and math.abs(v.z) < 6 then - self.velocity = v - else - if math.abs(self.velocity.x) < 6 and math.abs(v.x) >= 6 then - self.velocity.x = 6*cart_func:get_sign(self.velocity.x) - end - if math.abs(self.velocity.z) < 6 and math.abs(v.z) >= 6 then - self.velocity.z = 6*cart_func:get_sign(self.velocity.z) - end - end -end - --- Returns the direction as a unit vector -function cart:get_rail_direction(pos, dir) - local d = cart_func.v3:copy(dir) - - -- Check front - d.y = 0 - local p = cart_func.v3:add(cart_func.v3:copy(pos), d) - if cart_func:is_rail(p) then - return d - end - - -- Check downhill - d.y = -1 - p = cart_func.v3:add(cart_func.v3:copy(pos), d) - if cart_func:is_rail(p) then - return d - end - - -- Check uphill - d.y = 1 - p = cart_func.v3:add(cart_func.v3:copy(pos), d) - if cart_func:is_rail(p) then - return d - end - d.y = 0 - - -- Check left and right - local view_dir - local other_dir - local a - - if d.x == 0 and d.z ~= 0 then - view_dir = "z" - other_dir = "x" - if d.z < 0 then - a = {1, -1} - else - a = {-1, 1} - end - elseif d.z == 0 and d.x ~= 0 then - view_dir = "x" - other_dir = "z" - if d.x > 0 then - a = {1, -1} - else - a = {-1, 1} - end - else - return {x=0, y=0, z=0} - end - - d[view_dir] = 0 - d[other_dir] = a[1] - p = cart_func.v3:add(cart_func.v3:copy(pos), d) - if cart_func:is_rail(p) then - return d - end - d.y = -1 - p = cart_func.v3:add(cart_func.v3:copy(pos), d) - if cart_func:is_rail(p) then - return d - end - d.y = 0 - d[other_dir] = a[2] - p = cart_func.v3:add(cart_func.v3:copy(pos), d) - if cart_func:is_rail(p) then - return d - end - d.y = -1 - p = cart_func.v3:add(cart_func.v3:copy(pos), d) - if cart_func:is_rail(p) then - return d - end - d.y = 0 - - return {x=0, y=0, z=0} -end - -function cart:calc_rail_direction(pos, vel) - local velocity = cart_func.v3:copy(vel) - local p = cart_func.v3:copy(pos) - if cart_func:is_int(p.x) and cart_func:is_int(p.z) then - - local dir = cart_func:velocity_to_dir(velocity) - local dir_old = cart_func.v3:copy(dir) - - dir = self:get_rail_direction(cart_func.v3:round(p), dir) - - local v = math.max(math.abs(velocity.x), math.abs(velocity.z)) - velocity = { - x = v * dir.x, - y = v * dir.y, - z = v * dir.z, - } - - if cart_func.v3:equal(velocity, {x=0, y=0, z=0}) then - - -- First try this HACK - -- Move the cart on the rail if above or under it - if cart_func:is_rail(cart_func.v3:add(p, {x=0, y=1, z=0})) and vel.y >= 0 then - p = cart_func.v3:add(p, {x=0, y=1, z=0}) - return self:calc_rail_direction(p, vel) - end - if cart_func:is_rail(cart_func.v3:add(p, {x=0, y=-1, z=0})) and vel.y <= 0 then - p = cart_func.v3:add(p, {x=0, y=-1, z=0}) - return self:calc_rail_direction(p, vel) - end - -- Now the HACK gets really dirty - if cart_func:is_rail(cart_func.v3:add(p, {x=0, y=2, z=0})) and vel.y >= 0 then - p = cart_func.v3:add(p, {x=0, y=1, z=0}) - return self:calc_rail_direction(p, vel) - end - if cart_func:is_rail(cart_func.v3:add(p, {x=0, y=-2, z=0})) and vel.y <= 0 then - p = cart_func.v3:add(p, {x=0, y=-1, z=0}) - return self:calc_rail_direction(p, vel) - end - - return {x=0, y=0, z=0}, p - end - - if not cart_func.v3:equal(dir, dir_old) then - return velocity, cart_func.v3:round(p) - end - - end - return velocity, p -end - -function cart:on_step(dtime) - - local pos = self.object:getpos() - local dir = cart_func:velocity_to_dir(self.velocity) - - -- Stop the cart if the velocity is nearly 0 - -- Only if on a flat railway - if dir.y == 0 then - if math.abs(self.velocity.x) < 0.1 and math.abs(self.velocity.z) < 0.1 then - self.velocity = {x=0, y=0, z=0} - self.object:setvelocity(self.velocity) - self.old_velocity = self.velocity - self.old_pos = self.object:getpos() - return - end - end - - -- - -- Set the new moving direction - -- - - -- Recalcualte the rails that are passed since the last server step - local old_dir = cart_func:velocity_to_dir(self.old_velocity) - if old_dir.x ~= 0 then - local sign = cart_func:get_sign(pos.x-self.old_pos.x) - while true do - if sign ~= cart_func:get_sign(pos.x-self.old_pos.x) or pos.x == self.old_pos.x then - break - end - self.old_pos.x = self.old_pos.x + cart_func:get_sign(pos.x-self.old_pos.x)*0.1 - self.old_pos.y = self.old_pos.y + cart_func:get_sign(pos.x-self.old_pos.x)*0.1*old_dir.y - self.old_velocity, self.old_pos = self:calc_rail_direction(self.old_pos, self.old_velocity) - old_dir = cart_func:velocity_to_dir(self.old_velocity) - if not cart_func.v3:equal(cart_func:velocity_to_dir(self.old_velocity), dir) then - self.velocity = self.old_velocity - pos = self.old_pos - self.object:setpos(self.old_pos) - break - end - end - elseif old_dir.z ~= 0 then - local sign = cart_func:get_sign(pos.z-self.old_pos.z) - while true do - if sign ~= cart_func:get_sign(pos.z-self.old_pos.z) or pos.z == self.old_pos.z then - break - end - self.old_pos.z = self.old_pos.z + cart_func:get_sign(pos.z-self.old_pos.z)*0.1 - self.old_pos.y = self.old_pos.y + cart_func:get_sign(pos.z-self.old_pos.z)*0.1*old_dir.y - self.old_velocity, self.old_pos = self:calc_rail_direction(self.old_pos, self.old_velocity) - old_dir = cart_func:velocity_to_dir(self.old_velocity) - if not cart_func.v3:equal(cart_func:velocity_to_dir(self.old_velocity), dir) then - self.velocity = self.old_velocity - pos = self.old_pos - self.object:setpos(self.old_pos) - break - end - end - end - - -- Calculate the new step - self.velocity, pos = self:calc_rail_direction(pos, self.velocity) - self.object:setpos(pos) - dir = cart_func:velocity_to_dir(self.velocity) - - -- Accelerate or decelerate the cart according to the pitch and acceleration of the rail node - local a = tonumber(minetest.env:get_meta(pos):get_string("cart_acceleration")) - if not a then - a = 0 - end - if self.velocity.y < 0 then - self.velocity = { - x = self.velocity.x + (a+0.13)*cart_func:get_sign(self.velocity.x), - y = self.velocity.y + (a+0.13)*cart_func:get_sign(self.velocity.y), - z = self.velocity.z + (a+0.13)*cart_func:get_sign(self.velocity.z), - } - elseif self.velocity.y > 0 then - self.velocity = { - x = self.velocity.x + (a-0.1)*cart_func:get_sign(self.velocity.x), - y = self.velocity.y + (a-0.1)*cart_func:get_sign(self.velocity.y), - z = self.velocity.z + (a-0.1)*cart_func:get_sign(self.velocity.z), - } - else - self.velocity = { - x = self.velocity.x + (a-0.03)*cart_func:get_sign(self.velocity.x), - y = self.velocity.y + (a-0.03)*cart_func:get_sign(self.velocity.y), - z = self.velocity.z + (a-0.03)*cart_func:get_sign(self.velocity.z), - } - - -- Place the cart exactly on top of the rail - if cart_func:is_rail(cart_func.v3:round(pos)) then - self.object:setpos({x=pos.x, y=math.floor(pos.y+0.5), z=pos.z}) - pos = self.object:getpos() - end - end - - -- Dont switch moving direction - -- Only if on flat railway - if dir.y == 0 then - if cart_func:get_sign(dir.x) ~= cart_func:get_sign(self.velocity.x) then - self.velocity.x = 0 - end - if cart_func:get_sign(dir.y) ~= cart_func:get_sign(self.velocity.y) then - self.velocity.y = 0 - end - if cart_func:get_sign(dir.z) ~= cart_func:get_sign(self.velocity.z) then - self.velocity.z = 0 - end - end - - -- Allow only one moving direction (multiply the other one with 0) - dir = cart_func:velocity_to_dir(self.velocity) - self.velocity = { - x = math.abs(self.velocity.x) * dir.x, - y = self.velocity.y, - z = math.abs(self.velocity.z) * dir.z, - } - - -- Move cart exactly on the rail - if dir.x ~= 0 and not cart_func:is_int(pos.z) then - pos.z = math.floor(0.5+pos.z) - self.object:setpos(pos) - elseif dir.z ~= 0 and not cart_func:is_int(pos.x) then - pos.x = math.floor(0.5+pos.x) - self.object:setpos(pos) - end - - -- Limit the velocity - if math.abs(self.velocity.x) > self.MAX_V then - self.velocity.x = self.MAX_V*cart_func:get_sign(self.velocity.x) - end - if math.abs(self.velocity.y) > self.MAX_V then - self.velocity.y = self.MAX_V*cart_func:get_sign(self.velocity.y) - end - if math.abs(self.velocity.z) > self.MAX_V then - self.velocity.z = self.MAX_V*cart_func:get_sign(self.velocity.z) - end - - self.object:setvelocity(self.velocity) - - self.old_pos = self.object:getpos() - self.old_velocity = cart_func.v3:copy(self.velocity) - - if dir.x < 0 then - self.object:setyaw(math.pi/2) - elseif dir.x > 0 then - self.object:setyaw(3*math.pi/2) - elseif dir.z < 0 then - self.object:setyaw(math.pi) - elseif dir.z > 0 then - self.object:setyaw(0) - end - - if dir.y == -1 then - self.object:set_animation({x=1, y=1}, 1, 0) - elseif dir.y == 1 then - self.object:set_animation({x=2, y=2}, 1, 0) - else - self.object:set_animation({x=0, y=0}, 1, 0) - end - -end - -minetest.register_entity("carts:cart", cart) - - -minetest.register_craftitem("carts:cart", { - description = "Minecart", - inventory_image = minetest.inventorycube("cart_top.png", "cart_side.png", "cart_side.png"), - wield_image = "cart_side.png", - - on_place = function(itemstack, placer, pointed_thing) - if not pointed_thing.type == "node" then - return - end - if cart_func:is_rail(pointed_thing.under) then - minetest.env:add_entity(pointed_thing.under, "carts:cart") - itemstack:take_item() - return itemstack - elseif cart_func:is_rail(pointed_thing.above) then - minetest.env:add_entity(pointed_thing.above, "carts:cart") - itemstack:take_item() - return itemstack - end - end, -}) - -minetest.register_craft({ - output = "carts:cart", - recipe = { - {"", "", ""}, - {"default:steel_ingot", "", "default:steel_ingot"}, - {"default:steel_ingot", "default:steel_ingot", "default:steel_ingot"}, - }, -}) - --- --- Mesecon support --- - -minetest.register_node(":default:rail", { - description = "Rail", - drawtype = "raillike", - tiles = {"default_rail.png", "default_rail_curved.png", "default_rail_t_junction.png", "default_rail_crossing.png"}, - inventory_image = "default_rail.png", - wield_image = "default_rail.png", - paramtype = "light", - is_ground_content = true, - walkable = false, - selection_box = { - type = "fixed", - -- but how to specify the dimensions for curved and sideways rails? - fixed = {-1/2, -1/2, -1/2, 1/2, -1/2+1/16, 1/2}, - }, - groups = {bendy=2,snappy=1,dig_immediate=2,attached_node=1,rail=1}, - - mesecons = { - effector = { - action_on = function(pos, node) - minetest.env:get_meta(pos):set_string("cart_acceleration", "0.5") - -- Start the cart - for _,obj in ipairs(minetest.env:get_objects_inside_radius(pos, 1)) do - if obj:get_luaentity() and obj:get_luaentity().name == "carts:cart" then - local self = obj:get_luaentity() - if cart_func.v3:equal(self.velocity, {x=0, y=0, z=0}) then - for _,y in ipairs({0,-1,1}) do - for _,z in ipairs({1,-1}) do - if cart_func.v3:equal(self:get_rail_direction(obj:getpos(), {x=0, y=y, z=z}), {x=0, y=y, z=z}) then - self.velocity = { - x = 0, - y = 0.2*y, - z = 0.2*z, - } - self.old_velocity = self.velocity - return - end - end - for _,x in ipairs({1,-1}) do - if cart_func.v3:equal(self:get_rail_direction(obj:getpos(), {x=x, y=y, z=0}), {x=x, y=y, z=0}) then - self.velocity = { - x = 0.2*x, - y = 0.2*y, - z = 0, - } - self.old_velocity = self.velocity - return - end - end - end - end - end - end - end, - - action_off = function(pos, node) - minetest.env:get_meta(pos):set_string("cart_acceleration", "0") - end, - }, - }, -}) diff --git a/mods/carts/models/cart.png b/mods/carts/models/cart.png deleted file mode 100644 index 1f9f5680d4604e1b713afb05e5c5147aa2982487..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 422 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdzwj^(N7l!{JxM1({$v_d#0*}aI z1_o|n5N2eUHAey{$X?><>&kwIhgV3D-Dho6D^N%_GbEzKIX^cyHLnE7WngeFN=+6vfyBn3Q(X*K^&g#1z2x>V?Xr#WF$3`)LkpJ{oAVPzS*NYD)-=@S zT4R~NWY@Bn-ZR^te6?I}l_2E&Je`BPMqk+z-tvPSuvv zHggN$2rPBD5}ft)_hqw{*V!Et+?tMu%r@@({YdNQt@H;KRxisFUNK~@pIywh@4b}J z#mm!I#wkCxOW4)0HOc#c(2u?U8@EeOTs43D^Plw|3yjZ~7P52cCRV)S6Z#AaE>BlK Jmvv4FO#qvKqGA95 diff --git a/mods/carts/models/cart.x b/mods/carts/models/cart.x deleted file mode 100644 index 3325aaf..0000000 --- a/mods/carts/models/cart.x +++ /dev/null @@ -1,339 +0,0 @@ -xof 0303txt 0032 - -Frame Root { - FrameTransformMatrix { - 1.000000, 0.000000, 0.000000, 0.000000, - 0.000000, 0.000000, 1.000000, 0.000000, - 0.000000, 1.000000,-0.000000, 0.000000, - 0.000000, 0.000000, 0.000000, 1.000000;; - } - Frame Cube { - FrameTransformMatrix { - 5.000000, 0.000000,-0.000000, 0.000000, - -0.000000, 3.535534, 3.535534, 0.000000, - 0.000000,-3.535534, 3.535534, 0.000000, - 0.000000,-3.000000, 3.000000, 1.000000;; - } - Mesh { //Cube_001 Mesh - 72; - -1.000000; 1.000000;-1.000000;, - -1.000000;-1.000000;-1.000000;, - 1.000000;-1.000000;-1.000000;, - 1.000000; 1.000000;-1.000000;, - -0.833334;-1.000000; 1.000000;, - -1.000000;-1.000000; 1.000000;, - -1.000000;-0.833333; 1.000000;, - -0.833334;-0.833333; 1.000000;, - -1.000000;-1.000000;-1.000000;, - -1.000000;-1.000000; 1.000000;, - 0.999999;-1.000001; 1.000000;, - 1.000000;-1.000000;-1.000000;, - 0.999999;-1.000001; 1.000000;, - 0.833332;-1.000000; 1.000000;, - 0.833333;-0.833334; 1.000000;, - 1.000000;-0.833334; 1.000000;, - 0.833332;-1.000000; 1.000000;, - -0.833334;-1.000000; 1.000000;, - -0.833334;-0.833333; 1.000000;, - 0.833333;-0.833334; 1.000000;, - 1.000000; 0.833333; 1.000000;, - 0.833334; 0.833333; 1.000000;, - 0.833334; 1.000000; 1.000000;, - 1.000000; 0.999999; 1.000000;, - 1.000000;-0.833334; 1.000000;, - 0.833333;-0.833334; 1.000000;, - 0.833334; 0.833333; 1.000000;, - 1.000000; 0.833333; 1.000000;, - 0.833334; 0.833333; 1.000000;, - -0.833333; 0.833333; 1.000000;, - -0.833333; 1.000000; 1.000000;, - 0.833334; 1.000000; 1.000000;, - 0.833334; 0.833333;-0.800000;, - -0.833333; 0.833333;-0.800000;, - -0.833333; 0.833333; 1.000000;, - 0.833334; 0.833333; 1.000000;, - -0.833333; 0.833333; 1.000000;, - -1.000000; 0.833333; 1.000000;, - -1.000000; 1.000000; 1.000000;, - -0.833333; 1.000000; 1.000000;, - -0.833334;-0.833333; 1.000000;, - -1.000000;-0.833333; 1.000000;, - -1.000000; 0.833333; 1.000000;, - -0.833333; 0.833333; 1.000000;, - 0.833333;-0.833334;-0.800000;, - -0.833334;-0.833333;-0.800000;, - -0.833333; 0.833333;-0.800000;, - 0.833334; 0.833333;-0.800000;, - -0.833333; 0.833333;-0.800000;, - -0.833334;-0.833333;-0.800000;, - -0.833334;-0.833333; 1.000000;, - -0.833333; 0.833333; 1.000000;, - -0.833334;-0.833333;-0.800000;, - 0.833333;-0.833334;-0.800000;, - 0.833333;-0.833334; 1.000000;, - -0.833334;-0.833333; 1.000000;, - 0.833333;-0.833334;-0.800000;, - 0.833334; 0.833333;-0.800000;, - 0.833334; 0.833333; 1.000000;, - 0.833333;-0.833334; 1.000000;, - -1.000000; 1.000000;-1.000000;, - -1.000000; 1.000000; 1.000000;, - -1.000000;-1.000000; 1.000000;, - -1.000000;-1.000000;-1.000000;, - -1.000000; 1.000000; 1.000000;, - -1.000000; 1.000000;-1.000000;, - 1.000000; 1.000000;-1.000000;, - 1.000000; 0.999999; 1.000000;, - 1.000000;-1.000000;-1.000000;, - 0.999999;-1.000001; 1.000000;, - 1.000000; 0.999999; 1.000000;, - 1.000000; 1.000000;-1.000000;; - 18; - 4;0;1;2;3;, - 4;4;5;6;7;, - 4;8;9;10;11;, - 4;12;13;14;15;, - 4;16;17;18;19;, - 4;20;21;22;23;, - 4;24;25;26;27;, - 4;28;29;30;31;, - 4;32;33;34;35;, - 4;36;37;38;39;, - 4;40;41;42;43;, - 4;44;45;46;47;, - 4;48;49;50;51;, - 4;52;53;54;55;, - 4;56;57;58;59;, - 4;60;61;62;63;, - 4;64;65;66;67;, - 4;68;69;70;71;; - MeshNormals { //Cube_001 Normals - 72; - 0.000000; 0.000000;-1.000000;, - 0.000000; 0.000000;-1.000000;, - 0.000000; 0.000000;-1.000000;, - 0.000000; 0.000000;-1.000000;, - 0.000000;-0.000000; 1.000000;, - 0.000000;-0.000000; 1.000000;, - 0.000000;-0.000000; 1.000000;, - 0.000000;-0.000000; 1.000000;, - -0.000000;-1.000000;-0.000000;, - -0.000000;-1.000000;-0.000000;, - -0.000000;-1.000000;-0.000000;, - -0.000000;-1.000000;-0.000000;, - 0.000000;-0.000000; 1.000000;, - 0.000000;-0.000000; 1.000000;, - 0.000000;-0.000000; 1.000000;, - 0.000000;-0.000000; 1.000000;, - 0.000000;-0.000000; 1.000000;, - 0.000000;-0.000000; 1.000000;, - 0.000000;-0.000000; 1.000000;, - 0.000000;-0.000000; 1.000000;, - 0.000000;-0.000000; 1.000000;, - 0.000000;-0.000000; 1.000000;, - 0.000000;-0.000000; 1.000000;, - 0.000000;-0.000000; 1.000000;, - 0.000000;-0.000000; 1.000000;, - 0.000000;-0.000000; 1.000000;, - 0.000000;-0.000000; 1.000000;, - 0.000000;-0.000000; 1.000000;, - 0.000000;-0.000000; 1.000000;, - 0.000000;-0.000000; 1.000000;, - 0.000000;-0.000000; 1.000000;, - 0.000000;-0.000000; 1.000000;, - -0.000000;-1.000000; 0.000000;, - -0.000000;-1.000000; 0.000000;, - -0.000000;-1.000000; 0.000000;, - -0.000000;-1.000000; 0.000000;, - 0.000000;-0.000000; 1.000000;, - 0.000000;-0.000000; 1.000000;, - 0.000000;-0.000000; 1.000000;, - 0.000000;-0.000000; 1.000000;, - 0.000000;-0.000000; 1.000000;, - 0.000000;-0.000000; 1.000000;, - 0.000000;-0.000000; 1.000000;, - 0.000000;-0.000000; 1.000000;, - 0.000000;-0.000000; 1.000000;, - 0.000000;-0.000000; 1.000000;, - 0.000000;-0.000000; 1.000000;, - 0.000000;-0.000000; 1.000000;, - 1.000000;-0.000000; 0.000000;, - 1.000000;-0.000000; 0.000000;, - 1.000000;-0.000000; 0.000000;, - 1.000000;-0.000000; 0.000000;, - 0.000000; 1.000000; 0.000000;, - 0.000000; 1.000000; 0.000000;, - 0.000000; 1.000000; 0.000000;, - 0.000000; 1.000000; 0.000000;, - -1.000000; 0.000000; 0.000000;, - -1.000000; 0.000000; 0.000000;, - -1.000000; 0.000000; 0.000000;, - -1.000000; 0.000000; 0.000000;, - -1.000000; 0.000000;-0.000000;, - -1.000000; 0.000000;-0.000000;, - -1.000000; 0.000000;-0.000000;, - -1.000000; 0.000000;-0.000000;, - 0.000000; 1.000000; 0.000000;, - 0.000000; 1.000000; 0.000000;, - 0.000000; 1.000000; 0.000000;, - 0.000000; 1.000000; 0.000000;, - 1.000000;-0.000000; 0.000000;, - 1.000000;-0.000000; 0.000000;, - 1.000000;-0.000000; 0.000000;, - 1.000000;-0.000000; 0.000000;; - 18; - 4;0;1;2;3;, - 4;4;5;6;7;, - 4;8;9;10;11;, - 4;12;13;14;15;, - 4;16;17;18;19;, - 4;20;21;22;23;, - 4;24;25;26;27;, - 4;28;29;30;31;, - 4;32;33;34;35;, - 4;36;37;38;39;, - 4;40;41;42;43;, - 4;44;45;46;47;, - 4;48;49;50;51;, - 4;52;53;54;55;, - 4;56;57;58;59;, - 4;60;61;62;63;, - 4;64;65;66;67;, - 4;68;69;70;71;; - } //End of Cube_001 Normals - MeshMaterialList { //Cube_001 Material List - 1; - 18; - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0;; - Material Material { - 0.640000; 0.640000; 0.640000; 1.000000;; - 96.078431; - 0.500000; 0.500000; 0.500000;; - 0.000000; 0.000000; 0.000000;; - TextureFilename {"cart.png";} - } - } //End of Cube_001 Material List - MeshTextureCoords { //Cube_001 UV Coordinates - 72; - 0.000000; 0.500000;, - 0.500000; 0.500000;, - 0.500000; 1.000000;, - 0.000000; 1.000000;, - 0.031250; 0.500000;, - -0.000000; 0.500000;, - -0.000000; 0.468750;, - 0.031250; 0.468750;, - 0.500000; 0.500000;, - 0.500000; 0.000000;, - 1.000000; 0.000000;, - 1.000000; 0.500000;, - 0.468750; 0.468750;, - 0.500000; 0.468750;, - 0.500000; 0.500000;, - 0.468750; 0.500000;, - 0.031250; 0.468750;, - 0.468750; 0.468750;, - 0.468750; 0.500000;, - 0.031250; 0.500000;, - 0.468750; 0.000000;, - 0.500000; 0.000000;, - 0.500000; 0.031250;, - 0.468750; 0.031250;, - 0.468750; 0.031250;, - 0.500000; 0.031250;, - 0.500000; 0.468750;, - 0.468750; 0.468750;, - 0.468750; 0.031250;, - 0.031250; 0.031250;, - 0.031250; 0.000000;, - 0.468750; 0.000000;, - 1.000000; 0.500000;, - 0.500000; 0.500000;, - 0.500000; 0.000000;, - 1.000000; 0.000000;, - 0.031250; 0.031250;, - 0.000000; 0.031250;, - 0.000000; 0.000000;, - 0.031250; 0.000000;, - 0.031250; 0.468750;, - -0.000000; 0.468750;, - 0.000000; 0.031250;, - 0.031250; 0.031250;, - 0.000000; 0.500000;, - 0.500000; 0.500000;, - 0.500000; 1.000000;, - 0.000000; 1.000000;, - 1.000000; 0.500000;, - 0.500000; 0.500000;, - 0.500000; 0.000000;, - 1.000000; 0.000000;, - 1.000000; 0.500000;, - 0.500000; 0.500000;, - 0.500000; 0.000000;, - 1.000000; 0.000000;, - 1.000000; 0.500000;, - 0.500000; 0.500000;, - 0.500000; 0.000000;, - 1.000000; 0.000000;, - 0.500000; 0.500000;, - 0.500000; 0.000000;, - 1.000000; 0.000000;, - 1.000000; 0.500000;, - 1.000000; 0.000000;, - 1.000000; 0.500000;, - 0.500000; 0.500000;, - 0.500000; 0.000000;, - 0.500000; 0.500000;, - 0.500000; 0.000000;, - 1.000000; 0.000000;, - 1.000000; 0.500000;; - } //End of Cube_001 UV Coordinates - } //End of Cube_001 Mesh - } //End of Cube -} //End of Root Frame -AnimationSet { - Animation { - {Cube} - AnimationKey { //Position - 2; - 4; - 0;3; 0.000000, 0.000000, 0.000000;;, - 1;3; 0.000000, 3.000000, 3.000000;;, - 2;3; 0.000000,-3.000000, 3.000000;;, - 3;3; 0.000000,-3.000000, 3.000000;;; - } - AnimationKey { //Rotation - 0; - 4; - 0;4; -1.000000, 0.000000, 0.000000, 0.000000;;, - 1;4; -0.923880,-0.382683,-0.000000, 0.000000;;, - 2;4; -0.923880, 0.382683, 0.000000, 0.000000;;, - 3;4; -0.923880, 0.382683, 0.000000, 0.000000;;; - } - AnimationKey { //Scale - 1; - 4; - 0;3; 5.000000, 5.000000, 5.000000;;, - 1;3; 5.000000, 5.000000, 5.000000;;, - 2;3; 5.000000, 5.000000, 5.000000;;, - 3;3; 5.000000, 5.000000, 5.000000;;; - } - } -} //End of AnimationSet diff --git a/mods/carts/textures/cart_bottom.png b/mods/carts/textures/cart_bottom.png deleted file mode 100644 index f84b1aefe831e8e75d84d75b129da17c25470787..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 154 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|LOfj@Lo7}w zpW)#Df4+h3$B!Qp8yfxR+a-2vd~n&}!~-DH(7-T&BLXNB;B)MmPtCdn#cTg}FdU7O yFikL!IN;<{b$s>&j?4q;jHREL%+e=Mn#=foiL7J3t9(7sdruM^>9 pDDl7W%fThiO3^oPb+P7Kwk>m2+cd5!YzDf5!PC{xWt~$(69Bx`NcaE% diff --git a/mods/carts/textures/cart_top.png b/mods/carts/textures/cart_top.png deleted file mode 100644 index 8140fc7492653762d49327e4a975817cc493410e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 262 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|*pj^6T^Rm@ z;DWu&Cj&(|3p^r=85p>QL70(Y)*K0-AbW|YuPgf<4ptr&t={u8KskmsPZ!4!i_>o> z8}c<9@VLs0N*|T>I(#Cb?}%vC)3gMYQ(1ft?Hr+5)=NsB_D=ghnf?DOJ74Mi4vzZ< zoBJbqKX5cE_pFLk$mMpJ@qEz&zQeDX1Qm~+m?U(4nWm7A=0)rFj)I5&eg`!fR(x;z za_;Y+Q)$z7C%oo5u=aHq%kO>P?YP~p9xkn8x~ih~;oxLmGoXtYJYD@<);T3K0RW>5 BT+jdj diff --git a/mods/carts/textures/carts_rail_brk.png b/mods/carts/textures/carts_rail_brk.png deleted file mode 100644 index f3e0ff9827359b670d25f3add9c2fb6f109397d7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 524 zcmV+n0`vWeP)A|3PFX6z$qY3;%^^=|YhroLw7R)FvdsLRv)Y z7KVc0Drw_n3XUK~Op*A?(Gi{3yf<_2J1u7BQHwU!!Vk{oaQS`beB1+VEiEqy(5XL3 z0BOGkzyK^hyq-0lj9w%k80j{eRKWK&wYtSR;qW-2FjoTL#l0c9{ivu6!2C*?k>M5~ z+&^OfxXHPE7g|Hp3N8h$;cVVyqpWRz`+c^*T|x7YG5{|puVlp8i9xJQrSC$3rxal| zp(ilJ4M$jwx&M3~y2E6^SOLtCFPg2h0G;7rpqS&F7B8pw+yt?(DZs8|swAN2_g-~Sx O0000@;nyt(Z)u?^2qll$Z4`y5o zpsfYHsxaMOO?`CQQ>V1JfbG3AC9oTgf9%C*W3ba96J1UW|xH#kC<`)9VFctioZnJ)JDJ0 oE|c8`8{6%&K3;2TBme!*FVUvIJ(yG}sQ>@~07*qoM6N<$g3ce>{{R30 diff --git a/mods/carts/textures/carts_rail_crossing_pwr.png b/mods/carts/textures/carts_rail_crossing_pwr.png deleted file mode 100644 index d63f1339b7d7274a498484e6b69689605ab2be29..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 604 zcmV-i0;BzjP)V)PQZ_NrG2*~yF;3E;rK2|c87h1jcPT3H*eFlom-!(jo&bU zemyaOipC-}NB*Z0K}3*h56&LjDUUC;NCmrga*qsL4N0{J6)d0>>iPAs7QBD4nWN47 z*t*5wNmmO`yIN^Fu$QGmiDZw*8;G}}6e80 z;@xCU^FC#5FNNDfmZ|`WS2mmLgXDh{Fh^~5@AaHoExHI`jyhT(k+N0I7?+ky?ATVX z-whiL+_Jxi2Ebt4%Q)E+=HPyp05BL2iL+Q>Q(ch4s>|K;hjinE&co7SzF+eo``z;( zGnHq0W)>r;`1r-*=fWbEGmio+dtURtPS37+AcEX_W@(`JMV_K7EU&oq4LkG>S*#Sx zY;V{=BISM5H*6z<{P!ZM>Q#R9u%FXsPW`o^CZ~E6FSj?!osK3g+*I0000L?ZwI0k}y- zK~y-)y_3yLRACgxfA7qAofrnn$RuGVFsyK)XpxI{)-2o&qED zwGSZ(+PEE|Ah^PX`v*uE^dG1QDvV_2ooViToEAE_8NG&XI=lBhoagyH91i@?dU5BH z%#K}=>c7Bo1lBigx^7Ql#&AW{QHM>-5P(=u@A0rr%aFZc0Yr~SoxtsEtB9D@J=002ovPDHLkV1mGX^ArF8 diff --git a/mods/carts/textures/carts_rail_curved_pwr.png b/mods/carts/textures/carts_rail_curved_pwr.png deleted file mode 100644 index e2ac67a3560029716fc2586a184f20c9422916a7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 577 zcmV-H0>1r;P){cJFrfwb*kYg^gO|Dd%~ghk1X@KwES3Rq5+5 zi3q|UB!cwymt=0f>SheU%kc~D;Ni_~rbmqAjV2ZFea&toA+f^v_1Kloj-HXL_ZO7` zc>cP^mEOzBx`F$W8VsA;)(BXYqPchAe^u{Rlmk6-F^wv7*;>x7MzPhUNh0;3^r3C$$M z(+UdN+~RVupBOwH>vfHfZl7XyRLgE;$@!WSM+?+~5Whn+F<@PAX5_S7d+;`6u&}(& zrHh%dTB~C`O`~b?6s!k6VQfhfAqB{_8LaFp29=>6*ZAztIi8fQ#4XE@ohDtKMG`A~ z+m4tTR4zC%&@Hzn-~WCG-|1=_uimYZ&uJQQ%7L6_X={ftvM8kpBMXO50xx XbKL87*YKfV00000NkvXXu0mjf*Ussa diff --git a/mods/carts/textures/carts_rail_t_junction_brk.png b/mods/carts/textures/carts_rail_t_junction_brk.png deleted file mode 100644 index 0c2c1cbd8f35c0b567b5bc56a78b0ea342cc1e0f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 548 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 Svl+$>O+BFBmDii&jQ`mx1Wz6S diff --git a/mods/conifers/c2.jpg b/mods/conifers/c2.jpg deleted file mode 100644 index 5b1defa63089e5f418dbaaa6a4c978c34c0aee57..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 37315 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 diff --git a/mods/conifers/c3.jpg b/mods/conifers/c3.jpg deleted file mode 100644 index 8f84d827c8b28703cae76be54d90e4905e79d79c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 33340 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 CONIFERS_ALTITUDE - and conifers:is_node_in_cube({"conifers:trunk"}, pos, CONIFERS_DISTANCE) == false - then - if math.random(0,1000) == 5 then - conifers:make_conifer({x = pos.x, y = pos.y + 1, z = pos.z}, math.random(0, 1)) - end - end - end -}) - --- Saplings. -minetest.register_abm({ - nodenames = "conifers:sapling", - interval = INTERVAL, - chance = SAPLING_CHANCE, - - action = function(pos, node, _, _) - if minetest.env:get_node({x = pos.x, y = pos.y + 1, z = pos.z}).name == "air" then - conifers:make_conifer({x = pos.x, y = pos.y, z = pos.z}, math.random(0, 1)) - end - end -}) - --- Should we remove all the trees above the conifers altitude? -if REMOVE_TREES == true then - minetest.register_abm({ - nodenames = { - "default:tree", - "default:leaves" - }, - interval = INTERVAL/100, - chance = 1, - - action = function(pos, node, _, _) - if minetest.env:get_node({x = pos.x, y = pos.y + 1, z = pos.z}).name == "air" - and pos.y >= CONIFERS_ALTITUDE - then - minetest.env:add_node(pos , {name = "air"}) - end - end - }) -end - - - --------------------------------------------------------------------------------- --- --- Functions --- --------------------------------------------------------------------------------- - --- --- table_contains(t, v) --- --- Taken from the Flowers mod by erlehmann. --- -function conifers:table_contains(t, v) - for _, i in ipairs(t) do - if (i == v) then - return true - end - end - return false -end - --- --- is_node_in_cube(nodenames, node_pos, radius) --- --- Taken from the Flowers mod by erlehmann. --- -function conifers:is_node_in_cube(nodenames, node_pos, radius) - for x = node_pos.x - radius, node_pos.x + radius do - for y = node_pos.y - math.floor(radius / 2), node_pos.y + math.floor(radius / 2) do - for z = node_pos.z - radius, node_pos.z + radius do - n = minetest.env:get_node_or_nil({x = x, y = y, z = z}) - if (n == nil) - or (n.name == 'ignore') - or (conifers:table_contains(nodenames, n.name) == true) then - return true - end - end - end - end - return false -end - --- --- are_leaves_surrounded(position) --- --- Return a boolean value set to 'true' if a leaves block is surrounded --- by something else than --- - air --- - leaves --- - special leaves --- --- If a leaves block is surrounded by the blocks above, --- it can be placed. --- Otherwise, it will replace blocks we want to keep. --- -function conifers:are_leaves_surrounded(pos) - -- - -- Check if a leaves block does not interfer with something else than the air or another leaves block. - -- - local node1 = minetest.env:get_node({x = pos.x + 1, y = pos.y, z = pos.z}).name - local node2 = minetest.env:get_node({x = pos.x - 1, y = pos.y, z = pos.z}).name - local node3 = minetest.env:get_node({x = pos.x, y = pos.y, z = pos.z + 1}).name - local node4 = minetest.env:get_node({x = pos.x, y = pos.y, z = pos.z - 1}).name - local replacable_nodes = { - "air", - "conifers:leaves", - "conifers:leaves_special" - } - - -- Let's check if the neighboring node is a replacable node. - if (conifers:table_contains(replacable_nodes, node1) == true) - and (conifers:table_contains(replacable_nodes, node2) == true) - and (conifers:table_contains(replacable_nodes, node3) == true) - and (conifers:table_contains(replacable_nodes, node4) == true) - then - return false - else - return true - end -end - --- --- add_leaves_block(position, type of leaves, near trunk?) --- --- Put a simple leaves block. --- Leaves must be positioned near a trunk or surrounded by air. --- Types of leaves are: --- 0: dark leaves --- 1: bright leaves (special) --- -function conifers:add_leaves_block(pos, special, near_trunk) - if conifers:are_leaves_surrounded(pos) == false or near_trunk == true then - if special == 0 then - minetest.env:add_node(pos , { name = "conifers:leaves" }) - else - minetest.env:add_node(pos , { name = "conifers:leaves_special" }) - end - end -end - --- --- make_leaves(middle point, min radius, max radius, type of leaves) --- --- Make a circle of leaves with a center given by 'middle point'. --- Types of leaves are: --- 0: dark leaves --- 1: bright leaves (special) --- -function conifers:make_leaves(c, radius_min, radius_max, special) - -- - -- Using the midpoint circle algorithm from Bresenham we can trace a circle of leaves. - -- - for r = radius_min, radius_max do - local m_x = 0 - local m_z = r - local m_m = 5 - 4 * r - while m_x <= m_z do - if radius_max > 1 then - if r == 1 then - -- Add a square of leaves (fixing holes near the trunk). - -- [ ] [ ] - -- [#] - -- [ ] [ ] - conifers:add_leaves_block({x = -1 + c.x, y = c.y, z = 1 + c.z}, special) - conifers:add_leaves_block({x = 1 + c.x, y = c.y, z = 1 + c.z}, special) - conifers:add_leaves_block({x = -1 + c.x, y = c.y, z = -1 + c.z}, special) - conifers:add_leaves_block({x = 1 + c.x, y = c.y, z = -1 + c.z}, special) - -- [ ] - -- [ ][#][ ] - -- [ ] - conifers:add_leaves_block({x = c.x, y = c.y, z = -1 + c.z}, special, true) - conifers:add_leaves_block({x = c.x, y = c.y, z = 1 + c.z}, special, true) - conifers:add_leaves_block({x = -1 + c.x, y = c.y, z = c.z}, special, true) - conifers:add_leaves_block({x = 1 + c.x, y = c.y, z = c.z}, special, true) - else - conifers:add_leaves_block({x = m_x + c.x, y = c.y, z = m_z + c.z}, special) - conifers:add_leaves_block({x = m_z + c.x, y = c.y, z = m_x + c.z}, special) - conifers:add_leaves_block({x = -m_x + c.x, y = c.y, z = m_z + c.z}, special) - conifers:add_leaves_block({x = -m_z + c.x, y = c.y, z = m_x + c.z}, special) - conifers:add_leaves_block({x = m_x + c.x, y = c.y, z = -m_z + c.z}, special) - conifers:add_leaves_block({x = m_z + c.x, y = c.y, z = -m_x + c.z}, special) - conifers:add_leaves_block({x = -m_x + c.x, y = c.y, z = -m_z + c.z}, special) - conifers:add_leaves_block({x = -m_z + c.x, y = c.y, z = -m_x + c.z}, special) - end - else - -- Put a small circle of leaves around the trunk. - -- [ ] - -- [ ][#][ ] - -- [ ] - conifers:add_leaves_block({x = c.x, y = c.y, z = -1 + c.z}, special, true) - conifers:add_leaves_block({x = c.x, y = c.y, z = 1 + c.z}, special, true) - conifers:add_leaves_block({x = -1 + c.x, y = c.y, z = c.z}, special, true) - conifers:add_leaves_block({x = 1 + c.x, y = c.y, z = c.z}, special, true) - end - -- Stuff... - if m_m > 0 then - m_z = m_z - 1 - m_m = m_m - 8 * m_z - end - m_x = m_x + 1 - m_m = m_m + 8 * m_x + 4 - end - end -end - --- --- make_conifer(position, type) --- --- Make a conifer at a given position. --- Types are: --- 0: regular pine --- 1: narrow pine --- -function conifers:make_conifer(pos, conifer_type) - -- Check if we can gros a conifer at this place. - if minetest.env:get_node({x = pos.x, y = pos.y - 1, z = pos.z}).name ~= "default:dirt_with_grass" - and (minetest.env:get_node({x = pos.x, y = pos.y, z = pos.z}).name ~= "air" - or minetest.env:get_node({x = pos.x, y = pos.y, z = pos.z}).name ~= "conifers:sapling" - ) - then - return false - --else - --if minetest.env:get_node({x = pos.x, y = pos.y, z = pos.z}).name == "conifers:sapling" then - --minetest.env:add_node(pos , {name = "air"}) - --end - end - - local height = math.random(TRUNK_MINHEIGHT, TRUNK_MAXHEIGHT) -- Random height of the conifer. - local leaves_height = math.random(LEAVES_MINHEIGHT, LEAVES_MAXHEIGHT) -- Level from where the leaves grow. - local current_block = {} -- Duh... - local leaves_radius = 1 - local leaves_max_radius = 2 - local special = math.random(0, 1) - - -- Let's check if we can grow a tree here. - -- That means, we must have a column of 'height' high which contains - -- only air. - for j = 1, height - 1 do -- Start from 1 so we can grow a sapling. - if minetest.env:get_node({x = pos.x, y = pos.y + j, z = pos.z}).name ~= "air" then - -- Abort - return false - end - end - - -- Create the trunk and add the leaves. - for i = 0, height - 1 do - current_block = { - x = pos.x, - y = pos.y + i, - z = pos.z - } - -- Put a trunk block. - minetest.env:add_node(current_block , {name = "conifers:trunk"}) - -- Put some leaves. - if i >= leaves_height then - -- Put some leaves. - conifers:make_leaves({x = pos.x, y = pos.y + leaves_height + (height - 1) - i, z = pos.z}, 1, leaves_radius, special) - -- - -- TYPE OF CONIFER - -- - if conifer_type == 1 then -- Regular type - -- Prepare the next circle of leaves. - leaves_radius = leaves_radius + 1 - -- Check if the current radius is the maximum radius at this level. - if leaves_radius > leaves_max_radius then - leaves_radius = 1 - leaves_max_radius = leaves_max_radius + 1 - -- Does it exceeds the maximum radius? - if leaves_max_radius > LEAVES_MAXRADIUS then - leaves_max_radius = LEAVES_MAXRADIUS - end - end - else -- Narrow type - if i % 2 == 0 then - leaves_radius = LEAVES_NARROWRADIUS - math.random(0, 1) - else - leaves_radius = math.floor(LEAVES_NARROWRADIUS / 2) - end - end - end - end - - -- Put a top leaves block. - current_block.y = current_block.y + 1 - conifers:add_leaves_block(current_block, special) - - -- Blahblahblah - print ('[conifers] A conifer has grown at (' .. pos.x .. ',' .. pos.y .. ',' .. pos.z .. ') with a height of ' .. (height)) - - return true -end diff --git a/mods/conifers/rest/c1.gif b/mods/conifers/rest/c1.gif deleted file mode 100644 index 9a729615ab052fb9922af2960bf09d6db337ce11..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 26148 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 CONIFERS_ALTITUDE - and (not conifers:is_node_in_cube({"conifers:trunk"}, pos, CONIFERS_DISTANCE)) then - conifers:make_conifer(p, math.random(0, 1)) - end - end -}) - --- Saplings. -minetest.register_abm({ - nodenames = "conifers:sapling", - interval = INTERVAL, - chance = SAPLING_CHANCE, - - action = function(pos, node) - if minetest.get_node({x=pos.x, y=pos.y+1, z=pos.z}).name == "air" then - conifers:make_conifer(pos, math.random(0, 1)) - end - end -}) - --- Should we remove all the trees above the conifers altitude? -if REMOVE_TREES == true then - minetest.register_abm({ - nodenames = { - "default:tree", - "default:leaves" - }, - interval = INTERVAL/100, - chance = 1, - - action = function(pos, node) - if minetest.get_node({x=pos.x, y=pos.y+1, z=pos.z}).name == "air" - and pos.y >= CONIFERS_ALTITUDE then - minetest.add_node(pos , {name = "air"}) - end - end - }) -end - - - --------------------------------------------------------------------------------- --- --- Functions --- --------------------------------------------------------------------------------- - --- --- table_contains(t, v) --- --- Taken from the Flowers mod by erlehmann. --- -function conifers:table_contains(t, v) - for _,i in ipairs(t) do - if i == v then - return true - end - end - return false -end - --- --- is_node_in_cube(nodenames, node_pos, radius) --- --- Taken from the Flowers mod by erlehmann. --- -function conifers:is_node_in_cube(nodenames, pos, size) - local hs = math.floor(size / 2) - for x = pos.x-size, pos.x+size do - for y = pos.y-hs, pos.y+hs do - for z = pos.z-size, pos.z+size do - n = minetest.get_node_or_nil({x=x, y=y, z=z}) - if n == nil - or n.name == 'ignore' - or conifers:table_contains(nodenames, n.name) then - return true - end - end - end - end - return false -end - --- --- are_leaves_surrounded(position) --- --- Return a boolean value set to 'true' if a leaves block is surrounded --- by something else than --- - air --- - leaves --- - special leaves --- --- If a leaves block is surrounded by the blocks above, --- it can be placed. --- Otherwise, it will replace blocks we want to keep. --- -function conifers:are_leaves_surrounded(pos) - -- - -- Check if a leaves block does not interfer with something else than the air or another leaves block. - -- - local replacable_nodes = { - "air", - "conifers:leaves", - "conifers:leaves_special" - } - - -- Let's check if the neighboring node is a replacable node. - for i = -1,1,2 do - if not (conifers:table_contains(replacable_nodes, minetest.get_node({x=pos.x+i, y=pos.y, z=pos.z}).name) - or conifers:table_contains(replacable_nodes, minetest.get_node({x=pos.x, y=pos.y, z=pos.z+i}).name) - ) then - return true - end - end - return false -end - --- --- add_leaves_block(position, type of leaves, near trunk?) --- --- Put a simple leaves block. --- Leaves must be positioned near a trunk or surrounded by air. --- Types of leaves are: --- 0: dark leaves --- 1: bright leaves (special) --- -function conifers:add_leaves_block(pos, special, near_trunk) - if (not conifers:are_leaves_surrounded(pos)) - or near_trunk then - if special == 0 then - minetest.add_node(pos , { name = "conifers:leaves" }) - else - minetest.add_node(pos , { name = "conifers:leaves_special" }) - end - end -end - --- --- make_leaves(middle point, min radius, max radius, type of leaves) --- --- Make a circle of leaves with a center given by 'middle point'. --- Types of leaves are: --- 0: dark leaves --- 1: bright leaves (special) --- -function conifers:make_leaves(c, radius_min, radius_max, special) - -- - -- Using the midpoint circle algorithm from Bresenham we can trace a circle of leaves. - -- - for r = radius_min, radius_max do - local m_x = 0 - local m_z = r - local m_m = 5 - 4 * r - while m_x <= m_z do - if radius_max > 1 then - if r == 1 then - -- Add a square of leaves (fixing holes near the trunk). - -- [ ] [ ] - -- [#] - -- [ ] [ ] - conifers:add_leaves_block({x = -1 + c.x, y = c.y, z = 1 + c.z}, special) - conifers:add_leaves_block({x = 1 + c.x, y = c.y, z = 1 + c.z}, special) - conifers:add_leaves_block({x = -1 + c.x, y = c.y, z = -1 + c.z}, special) - conifers:add_leaves_block({x = 1 + c.x, y = c.y, z = -1 + c.z}, special) - -- [ ] - -- [ ][#][ ] - -- [ ] - conifers:add_leaves_block({x = c.x, y = c.y, z = -1 + c.z}, special, true) - conifers:add_leaves_block({x = c.x, y = c.y, z = 1 + c.z}, special, true) - conifers:add_leaves_block({x = -1 + c.x, y = c.y, z = c.z}, special, true) - conifers:add_leaves_block({x = 1 + c.x, y = c.y, z = c.z}, special, true) - else - conifers:add_leaves_block({x = m_x + c.x, y = c.y, z = m_z + c.z}, special) - conifers:add_leaves_block({x = m_z + c.x, y = c.y, z = m_x + c.z}, special) - conifers:add_leaves_block({x = -m_x + c.x, y = c.y, z = m_z + c.z}, special) - conifers:add_leaves_block({x = -m_z + c.x, y = c.y, z = m_x + c.z}, special) - conifers:add_leaves_block({x = m_x + c.x, y = c.y, z = -m_z + c.z}, special) - conifers:add_leaves_block({x = m_z + c.x, y = c.y, z = -m_x + c.z}, special) - conifers:add_leaves_block({x = -m_x + c.x, y = c.y, z = -m_z + c.z}, special) - conifers:add_leaves_block({x = -m_z + c.x, y = c.y, z = -m_x + c.z}, special) - end - else - -- Put a small circle of leaves around the trunk. - -- [ ] - -- [ ][#][ ] - -- [ ] - conifers:add_leaves_block({x = c.x, y = c.y, z = -1 + c.z}, special, true) - conifers:add_leaves_block({x = c.x, y = c.y, z = 1 + c.z}, special, true) - conifers:add_leaves_block({x = -1 + c.x, y = c.y, z = c.z}, special, true) - conifers:add_leaves_block({x = 1 + c.x, y = c.y, z = c.z}, special, true) - end - -- Stuff... - if m_m > 0 then - m_z = m_z - 1 - m_m = m_m - 8 * m_z - end - m_x = m_x + 1 - m_m = m_m + 8 * m_x + 4 - end - end -end - --- --- make_conifer(position, type) --- --- Make a conifer at a given position. --- Types are: --- 0: regular pine --- 1: narrow pine --- -function conifers:make_conifer(pos, conifer_type) - -- Check if we can gros a conifer at this place. - local node = minetest.get_node(pos).name - if minetest.get_node({x=pos.x, y=pos.y-1, z=pos.z}).name ~= "default:dirt_with_grass" - and (node ~= "air" - or node ~= "conifers:sapling" - ) then - return false - --else - --if minetest.get_node({x = pos.x, y = pos.y, z = pos.z}).name == "conifers:sapling" then - --minetest.add_node(pos , {name = "air"}) - --end - end - - local height = math.random(TRUNK_MINHEIGHT, TRUNK_MAXHEIGHT) -- Random height of the conifer. - - -- Let's check if we can grow a tree here. - -- That means, we must have a column of 'height' high which contains - -- only air. - for j = 1, height - 1 do -- Start from 1 so we can grow a sapling. - if minetest.get_node({x=pos.x, y=pos.y+j, z=pos.z}).name ~= "air" then - -- Abort - return false - end - end - - local t1 = os.clock() - - local leaves_height = math.random(LEAVES_MINHEIGHT, LEAVES_MAXHEIGHT) -- Level from where the leaves grow. - local current_block = {} -- Duh... - local leaves_radius = 1 - local leaves_max_radius = 2 - local special = math.random(0, 1) - - -- Create the trunk and add the leaves. - for i = 0, height - 1 do - current_block = {x=pos.x, y=pos.y+i, z=pos.z} - -- Put a trunk block. - minetest.add_node(current_block , {name = "conifers:trunk"}) - -- Put some leaves. - if i >= leaves_height then - -- Put some leaves. - conifers:make_leaves({x=pos.x, y=pos.y+leaves_height+height-1-i, z=pos.z}, 1, leaves_radius, special) - -- - -- TYPE OF CONIFER - -- - if conifer_type == 1 then -- Regular type - -- Prepare the next circle of leaves. - leaves_radius = leaves_radius+1 - -- Check if the current radius is the maximum radius at this level. - if leaves_radius > leaves_max_radius then - leaves_radius = 1 - leaves_max_radius = leaves_max_radius+1 - -- Does it exceeds the maximum radius? - if leaves_max_radius > LEAVES_MAXRADIUS then - leaves_max_radius = LEAVES_MAXRADIUS - end - end - else -- Narrow type - if i % 2 == 0 then - leaves_radius = LEAVES_NARROWRADIUS-math.random(0,1) - else - leaves_radius = math.floor(LEAVES_NARROWRADIUS/2) - end - end - end - end - - -- Put a top leaves block. - current_block.y = current_block.y+1 - conifers:add_leaves_block(current_block, special) - - -- Blahblahblah - print (string.format('[conifers] A conifer has grown at ('..pos.x..','..pos.y..','..pos.z..') with a height of '..height..' after ca. %.2fs', os.clock() - t1)) - return true -end diff --git a/mods/conifers/textures/conifers_leaves.png b/mods/conifers/textures/conifers_leaves.png deleted file mode 100644 index cfaaa1c58fd0521ec0699dc2f34f57be1258f853..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 333 zcmV-T0kZyyP)b>!3_P_%Wi=2=2p-}9TC&@J$p4q-56;pSE(!-qhlE{9g_adAl1>zPJRNNCjQ^m% z{mrKo&gsrCzQ$MqXmO9LDSSs^dlGP&OpGjTY2Xq zaZMvbeaFAw2>|f&)?hlGj1*{g8>Df@BJ>_vSeR(nt`hXVbfJDI4U7$*OU1=FX`HiRM174fLNloS ffcAwjvBC2nu%Gl14EWmO00000NkvXXu0mjfI^UYb diff --git a/mods/conifers/textures/conifers_leaves_special.png b/mods/conifers/textures/conifers_leaves_special.png deleted file mode 100644 index c5dca1ca656317717544d34f444bb441d872c76a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 367 zcmV-#0g(QQP)b>!3_ML4Y6K_@RPs;*2DHdiHVyfKUy-Nf75PDiY?+e9Kvt)KQJ`>!PVCZCX-CyU zla@}$;|Vr6!S8B2FS*D)jJj@Eczr9-p9ZYf2H#(jqK^*8{n@mgm&>6yZRcgYO{tEy z^J0UOI#vl?GqAx4<94@sW?+MpvME5+{xslz9nwu?QZ@xHhu+xWWVJSU4;IJ$*%%@b zgzc>5(@_;lJW>Z zX}Oa~$|Lct``bdQIN&!8X~}y5XfWyk2t||X*9D5PIzJ(sx7%zba@O1FwPtZ1HBvf$ z{2?Kd@<=Qk5T9B3qi(-x$inc60+?yKR3!kRWtS`l&lG?+-%UL07Qbmoa&AQ4UZ2@Y zIETdLYh-QCtk zJs^O_)@o}HG+kR4I)XLQ=jyWV+QzHg4Qam2rawhF!i8z?+(Z~ z(pJ~g%R4fTG~RqST1rQ-#&$#Tn}$Ru2PHZ=D0)kMQ}qI%Pg{I0@arKK2>@@0l;9;Ln%cI9U%m_^AMR8933BWHxJR!a6Oy#I-{y8dL19jG|_We;tLN| zD0;mPrr82uczj4%G;07!nj*7;ER}mUj%%SSrJ#m(#|LOU1M}Z^gwcu*?>`YnYvOoA zS(FIj((SY{41?|yA491vGEK>4K|dI-?Lk0t(*NT8c>!MyIl=v z42Ms-4`ZsTVzo}t4YNg(N-DL*_dS%_BD1`aC_F63!n6!*$7GXcEW?=D^#XugmgxL9 z!gp~!r}67LoS#py9g8AY1icRNI^pHT35IE)ltMQRlX#V2m@UF^xo1!mB~s>m|31YN z4oX!Fhkb%xw@J%tDx^EE#ptNdCd;^|!+36TnR*$SDnMAJ@VZ7SIbzG}qkff5bP|asjTYMoN9gde9M&kja hlL>9leE`^W;}25*J66ENot6Lq002ovPDHLkV1i7yIvfB1 diff --git a/mods/conifers/textures/conifers_trunk_reversed.png b/mods/conifers/textures/conifers_trunk_reversed.png deleted file mode 100644 index 0730e3121a8c53559255540d945aafd26e36fe0e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 721 zcmV;?0xtcDP)fBAXPTC>RtW}%NXO>9RJ1wOv-P?R;IT=9#BoHH6#zuxl&_WT z3X;2fUS2!{;5d%=J@Ln%*GOryPIuV0jc$9YQqi?Nj%%S*!+d_k0q}mgBA!J&+`na= zW=vfNaXLRD%?b{uK3&@p1TLnS&^9e)USSw;mwYBKE8;lOW;JDJzpTEp~p1z z@I7zOT$Ckgnu7tVs%dM@$?+jgt$BBoV48xWQcRo&#PZ*dSeE3T4NcRc+flIfcE@)o zGXVOoN4Ex!YY}@P05KuyCPy3?2k5p#T9U&!B#Huj&*ir_zhl`JZPQ{|CeoH%T`jo2 zzNM|($7?|>F3te(J(r@axcl&Vtbx+rS8L#@dhA*IXk2pRamF~KpQq_3A zO*kEYVH8YRueUrsJHhwe(Vg{%qj<{c*$HWuBW`XIw0`87OfXH8%|pgC^jRjKxJ_1^ zrX`*3AM-FFuM|nLqHQ$7^=$?q3jIB^@3}C5Dochzvsj!{lnQ_}E4aKm2cRewA}WiD3B!gXsyw@XOk6dQ-v@mW0Zx-?fVtA8r}F0CGk41Tt#3S00000NkvXXu0mjf D&>Bz= diff --git a/mods/conifers/textures/conifers_trunktop.png b/mods/conifers/textures/conifers_trunktop.png deleted file mode 100644 index 4f21401b50e5b59edef8fd46630adce7e91b462b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 768 zcmV+b1ONPqP)-cXxcjo@FZ~<|)M>>m7=M&$3^E8^up_7Ctz&Vfe0hLGqQkC#e>h~RhN+fwR zMR^zb;*&@G`tl8*4!YbK?cvjm;n4wRWeCEvd|U9_^OwXZm{$d}b%AcA6sAT+0jo{L zw_iV@eVSv73SVvzx+Xcv3C^Q+kI$c;BC`zLyT|1Gg71I$5l=(`De>1cgp#OM#x~I;IwdoL!Ew&$@Q~NjF)GAJqnQv$Sic(6eRzW2>q3ykkwv!$ zNZmq8MU0WvAI}i%^Z3z6Oy@I{6oT=x0B4CZ61-(`c}e%)3HEk@Glm3>_Z6+fQ-s{X zwMDgqDS@aI(FM%g4YISM-qh?xO@8_qArj2;FYIKFE9Zzrfbdj>p>`e_fWe@P-K=PR z*rPK%AWb#Sl#I`QVKceJF6Y>7i4X!`m-yOoci00!TIax8wrk7e&lS~rjmi?td_wS^ z$@%Y?Z9%9F0KTpWE)cS8Hvn)oo6&4aJ~+%t8%?&eB~l8qew)F`5lU(h4ZJl37l^?j z?e1jChsdI;5K`id#XCnZ8+?`FZY^d}QO;K!es-VeYwFdOR{wy?);ov@xZCLvoF%#% zXG*#s9}|Nh%Uh&9NB4dor4{A;mTc6A=rP-pZDmnJIJ=qhm3csW)W@z%78h3}du`Ho zj?fYrpk8cfk9y?CLsYlJyU8W3hDIqVsjTOxpRf7y$pOJfIwwO!q9F!^OwgSct)n{# zA~6JRp3k|sxu$mh{grjXi}@`)(+u}BvRu*WH$k^>n~Jb3saye4b30pc_UZ}|#g0MV yOaWM%n)B&|^XY%uszm-z=WS*GRT&^}ru+@aiE{V>a6CW&0000 - --wall_bottom = = - --wall_side = = - }, - groups = {snappy=2,choppy=2,oddly_breakable_by_hand=3}, - legacy_wallmounted = true, - sounds = default.node_sound_wood_defaults(), - }) - minetest.register_node('hydro:seedlings_'..plant.name, { - drawtype = 'plantlike', - visual_scale = 1.0, - tile_images = { 'hydro_seedlings.png' }, - inventory_image = 'hydro_seedlings.png', - sunlight_propagates = true, - paramtype = 'light', - walkable = false, - furnace_burntime = 1, - groups = { snappy = 3 }, - sounds = default.node_sound_leaves_defaults(), - drop = '', - }) - minetest.register_node('hydro:sproutlings_' .. plant.name, { - drawtype = 'plantlike', - visual_scale = 1.0, - tile_images = { 'hydro_sproutlings.png' }, - inventory_image = 'hydro_sproutlings.png', - sunlight_propagates = true, - paramtype = 'light', - walkable = false, - furnace_burntime = 1, - groups = { snappy = 3 }, - sounds = default.node_sound_leaves_defaults(), - drop = '', - }) - minetest.register_node('hydro:'..plant.name..'1', { - description = plant.description..' Plant (Young)', - drawtype = 'plantlike', - visual_scale = 1.0, - tile_images = { 'hydro_'..plant.name..'1.png' }, - inventory_image = 'hydro_'..plant.name..'1.png', - sunlight_propagates = true, - paramtype = 'light', - walkable = false, - furnace_burntime = 1, - groups = { snappy = 3 }, - sounds = default.node_sound_leaves_defaults(), - drop = '', - }) - - minetest.register_node('hydro:'..plant.name..'2', { - description = plant.description..' Plant (Youngish)', - drawtype = 'plantlike', - visual_scale = 1.0, - tile_images = { 'hydro_'..plant.name..'2.png' }, - inventory_image = 'hydro_'..plant.name..'2.png', - sunlight_propagates = true, - paramtype = 'light', - walkable = false, - furnace_burntime = 1, - groups = { snappy = 3 }, - sounds = default.node_sound_leaves_defaults(), - drop = '', - }) - minetest.register_node('hydro:'..plant.name..'3', { - description = plant.description..' Plant (Fruitings)', - drawtype = 'plantlike', - visual_scale = 1.0, - tile_images = { 'hydro_'..plant.name..'3.png' }, - inventory_image = 'hydro_'..plant.name..'3.png', - sunlight_propagates = true, - paramtype = 'light', - walkable = false, - furnace_burntime = 1, - groups = { snappy = 3 }, - sounds = default.node_sound_leaves_defaults(), - drop = '', - }) - - - local harvest = 'hydro:'..plant.name - if plant.give_on_harvest then - harvest = plant.give_on_harvest - end - - local after_dig_node - if plant.growtype == 'permaculture' then - plant.growtype = 'growshort' - after_dig_node = function(pos) - minetest.add_node(pos, {name='hydro:'..plant.name..'1'}) - end - - end - - minetest.register_node('hydro:'..plant.name..'4', { - description = plant.description..' Plant (Ripe)', - drawtype = 'plantlike', - visual_scale = 1.0, - tile_images = { 'hydro_'..plant.name..'4.png' }, - inventory_image = 'hydro_'..plant.name..'4.png', - sunlight_propagates = true, - paramtype = 'light', - walkable = false, - furnace_burntime = 1, - groups = { snappy = 3 }, - sounds = default.node_sound_leaves_defaults(), - after_dig_node = after_dig_node, - drop = { - items = { - { items = {'hydro:seeds_'..plant.name..' 4'}, - rarity = 4, - }, - { - items = {harvest..' 2'}, - } - } - }, - - }) - if not plant.give_on_harvest then - minetest.register_node("hydro:"..plant.name, { - description = plant.name, - drawtype = "plantlike", - visual_scale = 1.0, - tile_images = {"hydro_"..plant.name..".png"}, - inventory_image = "hydro_"..plant.name..".png", - paramtype = "light", - sunlight_propagates = true, - walkable = false, - groups = {fleshy=3,dig_immediate=3,flammable=2}, - on_use = minetest.item_eat(4), - sounds = default.node_sound_defaults(), - }) - end - table.insert(get_wildplants, wild_plant) - table.insert(get_plantbynumber, plant.name) - get_plantname["hydro:"..plant.name.."4"] = plant.name - get_plantname["hydro:"..plant.name.."3"] = plant.name - get_plantname["hydro:"..plant.name.."2"] = plant.name - get_plantname["hydro:"..plant.name.."1"] = plant.name - get_plantname['hydro:sproutlings_'..plant.name] = plant.name - get_plantname['hydro:seedlings_'..plant.name] = plant.name - get_plantname['hydro:seeds_'..plant.name] = plant.name -end - --- GROW (TALL) FUNCTION -local function grow_plant(plantname, nodename, pos, tall) - local name, above - if nodename == 'hydro:'..plantname..'3' then - name = plantname.."4" - above = true - elseif nodename == 'hydro:'..plantname..'2' then - name = plantname.."3" - above = true - elseif nodename == 'hydro:'..plantname..'1' then - name = plantname.."2" - above = true - elseif nodename =='hydro:sproutlings_'..plantname then - name = plantname.."1" - elseif nodename == 'hydro:seedlings_'..plantname then - name = "sproutlings_"..plantname - elseif nodename == 'hydro:seeds_'..plantname then - name = "seedlings_"..plantname - else - return - end - minetest.add_node(pos, {name="hydro:"..name}) - if above - and tall then - minetest.add_node({x=pos.x, y=pos.y+1, z=pos.z}, {name="hydro:"..name}) - end -end - --- WILD PLANTS/SEEDS GENERATING -local function get_random(pos, seed) - return PseudoRandom(math.abs(pos.x+pos.y*3+pos.z*5)+seed) -end - -minetest.register_abm({ - nodenames = { "default:dirt_with_grass" }, - interval = 600, - chance = 80, - action = function(p, node) - local pr = get_random(p, 17) - if pr:next(1,20) ~= 1 then - return - end - p.y = p.y+1 - local is_air = minetest.get_node_or_nil(p) - if is_air - and is_air.name == 'air' then - local count = table.getn(get_plantbynumber) - local random_plant = math.random(1, count) - local nodename = "hydro:wild_"..get_plantbynumber[random_plant] - if nodename ~= "hydro:wild_rubberplant" then - minetest.add_node(p, {name=nodename}) - end - end - end -}) - - --- GROWING -minetest.register_abm({ - nodenames = { "hydro:growlamp" }, - interval = HYDRO_GROW_INTERVAL, - chance = 1, - action = function(pos, node) - if minetest.get_node({x=pos.x, y=pos.y+1, z=pos.z}).name == "air" - or minetest.get_node({x=pos.x, y=pos.y-1, z=pos.z}).name ~= "air" then - return - end - for i = -1,1 do - for j = -1,1 do - local p = {x=pos.x+j, y=pos.y, z=pos.z+i} - local water = minetest.get_node({x=p.x, y=p.y-5, z=p.z}).name - if (water == 'default:water_source' or water == 'default:water_flowing') - and minetest.get_node({x=p.x, y=p.y-4, z=p.z}).name == 'hydro:promix' then - local grow = minetest.get_node({x=p.x, y=p.y-3, z=p.z}).name - local curplant = get_plantname[grow] - if curplant then - local growtype = PLANTS[curplant].growtype - local tall - if growtype == 'growtall' then - tall = true - end - grow_plant(curplant, grow, {x=p.x, y=p.y-3, z=p.z}, tall) - end - end - end - end - end -}) - - ---Crafting -minetest.register_craft({ - output = 'hydro:growlamp', - recipe = { - {'default:glass', 'default:torch','default:glass'}, - {'default:glass', 'default:torch','default:glass'}, - {'default:glass', 'default:torch','default:glass'}, - } -}) - -minetest.register_craft({ - output = 'hydro:promix 6', - recipe = { - {'', 'default:clay_lump',''}, - {'default:dirt', 'default:dirt', 'default:dirt'}, - {'default:dirt', 'default:dirt', 'default:dirt'}, - } -}) - -minetest.register_craft({ - output = 'hydro:wine', - recipe = { - {'default:glass', 'hydro:grapes','default:glass'}, - {'default:glass', 'hydro:grapes','default:glass'}, - {'default:glass', 'hydro:grapes','default:glass'}, - } -}) - -minetest.register_craft({ - output = "hydro:coffeecup", - recipe = { - {'','',''}, - {'default:clay_lump','hydro:roastedcoffee','default:clay_lump'}, - {'','default:clay_lump',''}, - } -}) - -minetest.register_craft({ - type = "cooking", - output = "hydro:roastedcoffee", - recipe = "hydro:coffee", -}) diff --git a/mods/hydro/textures/hydro_coffee.png b/mods/hydro/textures/hydro_coffee.png deleted file mode 100644 index f8d6841782c282773e6703be1e0322affab95d80..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 426 zcmV;b0agBqP)ps`pJV@csh*r{JY!SC=Z zmwN`zI(zpr$z&gA&Y7o(vB&R*^svlsU(UB@Rd8(SI) zyXU>U%1=q$$W_Iy`1tLz+6DkR2^6wb+$=9NrbZ^<1H}ibhZVp{j*7s1Q0d_eFhp$X zEO~NT6{`rd14E^g*e!64x5K_>XB*7U6-Ujk1_G$Sw4&L8aZ5;6YXPg_v6vZX6~ySZ zJFs)WuFVY8iSZ&SSRr$|oBQL70(Y)*K0-AbW|YuPgf=XYHG`Vej#y$E8)mie0Nwe))Gnj(@OxJE@RlkrG8$H1#^|Hx6 zb^b{u3*So?+C)#7u=&{nAu-Kdsg$H#z5>>0z86l5I@9bP0l+XkKWRjG{ diff --git a/mods/hydro/textures/hydro_coffee2.png b/mods/hydro/textures/hydro_coffee2.png deleted file mode 100644 index 9cbc28c58255ebf699eef92a17b6270a976bf20b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 377 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|*pj^6T^Rm@ z;DWu&Cj&(|3p^r=85p>QL70(Y)*K0-AbW|YuPgfa`TvhRTTj}2edHWX~%sVvE1 zIpgHHd+%H{ncKB^(lVXA9{lLatnTHQbIoTe_ww>E`%Mo2dNlP*8*fjTku9RRU-(Bjd8&OS)TjNVC};lb*9Ow{&8-3uDHDyLW$oTjQ|7W7mw& zk)n?M)|(b^Ze4#UN+otiwEpuYw-_d#ZVlIYp4@1iaD3eyQL&N*cir|WSk67W@MQHV zg`H+sA{O_5ezrhRY@*q-80oA(+&h}|+4u35o@3l~`T2p_j2x96dg28|t@R%#J)0zT T^j|$N5EwjN{an^LB{Ts5H2{@{ diff --git a/mods/hydro/textures/hydro_coffee3.png b/mods/hydro/textures/hydro_coffee3.png deleted file mode 100644 index fadba85a19efebfddc259dc4059cbfc14ec9bc43..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 393 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|*pj^6T^Rm@ z;DWu&Cj&(|3p^r=85p>QL70(Y)*K0-AbW|YuPgfy#Jtmtz=>9`%UfaiOid=H)3p* zIja7O>f2QR(3&vC_p zNyQ#7eC2avQ%&9ofq?dR$Um z-z(Hz{*eFkvjrm4)}QJQ;-1VG$$!#r@guIFqerjE7<866K5H=aTQrNAk0)dc+r0x@ bzw?^gzvyUOd~Pc+tQb69{an^LB{Ts5<1v*9 diff --git a/mods/hydro/textures/hydro_coffeecup.png b/mods/hydro/textures/hydro_coffeecup.png deleted file mode 100644 index c63671bed6b0c1968cbce498abf1f3c7e0a372af..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 797 zcmV+&1LFLNP)l}1zCJLfz)@60(c*IaYWHP>8o{of_i{-~+~NZkw( zF?hEKpdzCG6@UTqLuVAIMI_Dw;HF5N{j_@jxyzR?xVv}1Ps_{4q`zBo`gBhhJ4^EV zYcC6c_Zj`cfZ=$+qqS{r-FlxJ@7x%@aO%wNKL$`$5s~`a@4o)#>XkRc`EwU&n#ktX zCeC`Cab!LNAn$Z=nde0BI8hrtzjChQv;6F=6%atHsyMT<@+y}ubt%h+7$RaUA_ik@ z8_0X|JfpLa(^<&a-ybp@j$}rF*4_{rf>F>wx4TH5XJq*TF3S*UbBKVdAvBSg0>+rB zuGmun%4&PUQDQX*Q6hBcYC1-(ZdV6M%@2Qlzd6#``1AzH&1BD*z$L=exUu>oM|DT?Z=P z;9QNh?$9d`6i6{p6eFCsKd-L-_#*Id=2@Vs=JuVB-`LsN`D|%v>G?d%aW=!)!+k&y zQOa_ksxE%$_PXz0y>jirQNzkiHL*m}#`>@KHa8!Cu=Z#@?(Gd|nm|=n2dgY9cDA=! zTl-~eV}0YjX_Eh~X$Wxh=Gz_bv$yKH{wO6n$DcWYYTFS)h{0MO#?*ZHTmQ*dpMLU1 bm?q}$1|3xniY5+x00000NkvXXu0mjf%;j$7 diff --git a/mods/hydro/textures/hydro_grapes.png b/mods/hydro/textures/hydro_grapes.png deleted file mode 100644 index 7b51809812447d34bcc87b45a513586a047e0fb2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 429 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|*pj^6T^Rm@ z;DWu&Cj&(|3p^r=85p>QL70(Y)*K0-AbW|YuPgflFzu{d2C zWSHgTC@@#4!)<~~X9Rn{f~HDpmq=1qh$f5U22Tz#wx*@6?Hh#sCn#M%8G5bq@xJ*# zcfUTc;my9v{IqnpBR5a)Q!GEcZppV@FHc;qzHM+sBzIr6$?}FtO_Q4LHBYLFvk{K` zf9KjJpMBPeo5C9VvxN`bo}F|4M)>Wd>Bnc+Gpcq7xo{fE%xON}9rk1H-&TLi5Oo9j z=tz|gwk|d<&R=oG>U!r_r~Q>?m?Pcjw6E*pr&CErMvVSm+8uF)MiVRAwlK}hP*N+M zXw$oR*A?c36(v!(So=Oc+?OA^r2ctF_cM29#tE0+9I#MTIlZspVnO63If2FL)en9* zM2c4>NSIG*GBw(LTJDHlN<<;Q#v#okwHy9d^~{dA!z^)S;?ewN{tP@$|NgRgX+8@- UykUwDFf187UHx3vIVCg!0F4){OaK4? diff --git a/mods/hydro/textures/hydro_grapes1.png b/mods/hydro/textures/hydro_grapes1.png deleted file mode 100644 index df72b3afa2d1a24ff9e54a1eea569e3005208486..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 386 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|*pj^6T^Rm@ z;DWu&Cj&(|3p^r=85p>QL70(Y)*K0-AbW|YuPgf=XYHG`Vej#y$E8)mie0Nwe))Gnj(@OxJE@RlkrG8$H1#^|Hx6 zb^b{u3*So?+C)#7u=&{nAu-Kdsg$H#z5>>0z86l5I@9bP0l+XkKWRjG{ diff --git a/mods/hydro/textures/hydro_grapes2.png b/mods/hydro/textures/hydro_grapes2.png deleted file mode 100644 index 9cbc28c58255ebf699eef92a17b6270a976bf20b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 377 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|*pj^6T^Rm@ z;DWu&Cj&(|3p^r=85p>QL70(Y)*K0-AbW|YuPgfa`TvhRTTj}2edHWX~%sVvE1 zIpgHHd+%H{ncKB^(lVXA9{lLatnTHQbIoTe_ww>E`%Mo2dNlP*8*fjTku9RRU-(Bjd8&OS)TjNVC};lb*9Ow{&8-3uDHDyLW$oTjQ|7W7mw& zk)n?M)|(b^Ze4#UN+otiwEpuYw-_d#ZVlIYp4@1iaD3eyQL&N*cir|WSk67W@MQHV zg`H+sA{O_5ezrhRY@*q-80oA(+&h}|+4u35o@3l~`T2p_j2x96dg28|t@R%#J)0zT T^j|$N5EwjN{an^LB{Ts5H2{@{ diff --git a/mods/hydro/textures/hydro_grapes3.png b/mods/hydro/textures/hydro_grapes3.png deleted file mode 100644 index fadba85a19efebfddc259dc4059cbfc14ec9bc43..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 393 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|*pj^6T^Rm@ z;DWu&Cj&(|3p^r=85p>QL70(Y)*K0-AbW|YuPgfIwlfgWbl}=E*%4tM`Px z`O^+nc4RrpLepHR9&LNomrP7l&m`G&CQJ=D%;G>XT6hZ;nJ~W zZ@Ks7;CaMZ;Z9pDTK!OoMoKsA)dk~@mOV*<%0tbuGtTGW2*0e YUiFJH;GiH2FsK+jUHx3vIVCg!0QSd@iU0rr diff --git a/mods/hydro/textures/hydro_growlamp_bottom.png b/mods/hydro/textures/hydro_growlamp_bottom.png deleted file mode 100644 index c2136f98db026d2b828a75eddb717420061c932c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 104 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!D3?x-;bCrM;TYyi9>z052Z~yzRedi}1P(;?# z#W95AdUApTGcV5>KAtr^JU;vqGx!Y*7I`x>Shg_bKU^I39;lGP)78&qol`;+0M5u8 A0{{R3 diff --git a/mods/hydro/textures/hydro_growlamp_side.png b/mods/hydro/textures/hydro_growlamp_side.png deleted file mode 100644 index b6d20139a5abd33f9e7cc2408d674f0954eba498..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 149 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!73?$#)eFPE^3h)VWwYIjlwY5!4OI!8t|HXg* zfuNpsVn0yU&eO#)gyVX0L1AHG5~C20LL0}F#79i2GuRGGC>m&{3mY7kT*IaEh$r+7 t&$Tus*5rn%3%Vq%54-q02y$Rx(AuEz^oq%wXF!t}JYD@<);T3K0RRGgF+uQL70(Y)*K0-AbW|YuPgf<7Eva4;}caOYCxf_o-U3d7N?UF z8kqJ+=J4ET_|K!a=25}d%3|4#Ndg`jn;DZ+5+)t{B;R7l!^m~$hgEVQ*_9$1cVlG0j&Q1RTCw z+pSON4G-dB*eP+iEQ#lUBwLG#@^JgTe~DWM4fhsS9@ diff --git a/mods/hydro/textures/hydro_habanero1.png b/mods/hydro/textures/hydro_habanero1.png deleted file mode 100644 index 577335a95057941aa335a86fcd436d46f80372be..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 375 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|*pj^6T^Rm@ z;DWu&Cj&(|3p^r=85p>QL70(Y)*K0-AbW|YuPgf<7BN00l^tKhdw@dUJzX3_EKc_Z zE#x~Cz>{;LiOI-q+k%_=0wVVtjw%EcYjE(L78hU<6XD`%ny2;RCO=Aurs{( zydTuM@#G4JAE7QvqHh`JTRh{RTyf^t-*_DkZr=wScOxeFq-M^#7tDTg*M;XjCUH6* zEw0524ks-;D?0ne4CW}sY0Ud3WG*_>=qH_QGPl})k)%RWaKxY1rh0vsmzVeXtMK0g P1_6VotDnm{r-UW|dH9aI diff --git a/mods/hydro/textures/hydro_habanero2.png b/mods/hydro/textures/hydro_habanero2.png deleted file mode 100644 index bee795ed8ddd1fdb346d817e20892f4882993474..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 480 zcmV<60U!Q}P)Px#24YJ`L;(K){{a7>y{D4^000SaNLh0L01FcU01FcV0GgZ_00007bV*G`2iyb} z4lFTCtDflq00Cf0L_t(I%WaY&PXj>^g*T+Bf~4)GP;9B-2LK8I76A#VqXI)w2oey4 zgam`AM%ChQ{G&7cj%B}L-!fY|$>sKD=H8oqZ$ij%zU+pJWw$dK4I*bfN8{~q^|~9+ z?wd$0^)%$DmAHO8E{_28J$)I)>GO^O3@3v)|LEBx0*i;Qe#JuJVBWEY)0-xq-1aR; z?eb|DQ!nQ~0M9}b3~Ja*@9)K;Oy_&aS%~HCb2BieSPu8c2Ea4|n7#LcP4xIX)mjZ4 zivjpr0^1O10pLRkX^>gW1=Z3y%9%<;*+_vVSYT9+GZu3_KW))~kUcbsQ6eH}7B(U% zdA%)YKs1zPg2c83I!y@aEhf)YRV2}ZtO1~H+j8&KMamAv3Lx2NqVW?f00<=4f@&Tx ztVX_XVM+J?XCrUzK@rib$`w3|TtE*wPx#24YJ`L;(K){{a7>y{D4^000SaNLh0L01FcU01FcV0GgZ_00007bV*G`2iyb} z4lFORq@#)e00EUrL_t(I%UzPaN<%>qg|`TjO3a_$v>M+)ti+$zB1%Z5Ac7bLL9npU zfRH9a9wDu-AlL>1fka7=XrIRC827vP&N|nH;cj*&=giDG&ZVc`UvfwNrF<V3l-A2i97+%XEDMRPRxW-& zxGc&3RUv>k9xCpAekRlJYZ=XsB?ho86u|&HKpRofNlHS_*Se3d3jt&_Ya{^5@;FS| zvpuKls3oY)D4~*3qzn}D20Icno>hzpN9CbNJL0Q5AV+t)Q2k~kK?OSS zY*j6?c>vN;{+R8;6kxGfgcfa{?z|5K&jbLwFkK=51k1B|^+D>He;_`XJ9Qf@K_SiS z2zaJ`Ux>|?k&y>Ru+Fp+lfwsU^&lfZRO{3%um~)wg30B1qb73{1Qz?QK1lDPeo^*c XjnHatBRaUx00000NkvXXu0mjfi4)rf diff --git a/mods/hydro/textures/hydro_habanero4.png b/mods/hydro/textures/hydro_habanero4.png deleted file mode 100644 index 357f007b422b7d3a6a8abe3cd95050e675404231..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 542 zcmV+(0^$9MP)Px#24YJ`L;(K){{a7>y{D4^000SaNLh0L01FcU01FcV0GgZ_00007bV*G`2iyb} z4lFHSs=}rK00Ev!L_t(I%Tqg|`SHm6$(sFLp6vVPm0I7Fuc%MFI*Iijas1 zf`x?!gftQI0zz6}LC6E7vq&Rin?_=MiSd4Wch)_5?u6mY_y&tX?1H5m};XWo!3PhD&Pr16@bl7 z&c5%p%Vzhg=*f>CszydH@_W4@vy+-wf>4Dd6i|m~B`O(lB4A0bnYY(vez_*I(>Nti zmB(>fW~cxGA43R1e^N1@M^*Vs;^(}c67)Y}^E`=6cbrxbDnOuqfF-TvARxR4w{I15 zGb)wbrNbW-J*8Z~1%}hc^Mv^L!$Q$a6nD)Yn5&r0SNYaWRP!GVUP7T%H z%t$bi3KF$glR_K<*UGc!JO{H4y>=^Fmzr!0k+ygrIM? zZKzlb9~9RX*qP>i(VFX%_?QP;2scwPssm#Wbk+SB`J=OT%i>jZ3ISH&jhxI;5>&!> g-2-Px#07*qoM6N<$f;pGoKL7v# diff --git a/mods/hydro/textures/hydro_peas.png b/mods/hydro/textures/hydro_peas.png deleted file mode 100644 index 1eca85519dfd3a2390310f9635ebffb2a4a1de6f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 324 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|*pj^6T^Rm@ z;DWu&Cj&(|3p^r=85p>QL70(Y)*K0-AbW|YuPgf<7EwksuHcl^qd=h}o-U3d7N?UF z8kqJ+=J4ET_|K!a=25}d%3|67$%hqowwOs99AgdOG4xDsOipPo*vWI0VS$=wiF3mb zc0Fc;J***XxHb!(ozQRa{s2Q*eq#*75uOumG8NXWN3A`wHnLl6QZx{E;QiV9j%&_C zrXr~;4fQveL?dOd39u&0Bz}}kWAKqZv9*HN(U{?=bj02UnO#444$Ry!!C5@(KzvTz z0ZHx?euu^QSoSu^?J{7#@R|K!L_@3ICbuU7>Jr>9W^J?-kK|#9H+YaRo%?7F&_4{G Lu6{1-oD!MQL70(Y)*K0-AbW|YuPgf<7BN0f=Inm?KA_NdPZ!4!i_^V9 z3;7NO@Z_9mVlr~uw&13|fXMxZqY44V8XSD5#RXWzM7VgG=4-EiJoU@eeU6h=Z@;^g zy`Ehmt1L^sa;D;nTejS5&S?rgvtZtkwR8Tp{=5yfB0KgyjflO+yC>jAO7VMkEumhFO^9*Jo+y^MWY*O&AdRo%-j>+xG#--G~W3shP9x1+$;rb>VrBNt}*H zi)-lZ8uPvhnTyUe`bj67%&qocB&m=T9Py{Msb1gZ<>h_;D*X3= PLBQbY>gTe~DWM4fLCuYr diff --git a/mods/hydro/textures/hydro_peas2.png b/mods/hydro/textures/hydro_peas2.png deleted file mode 100644 index fd442fd5d1fe470352ab8e1774f03434538ade9a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 475 zcmV<10VMv3P)Px#24YJ`L;(K){{a7>y{D4^000SaNLh0L01FcU01FcV0GgZ_00007bV*G`2iyb} z4h$nLmdgVG00CP`L_t(IPkoXhPXj>^g*T+Bf~4)GP;9B-2LK8I76A#VqXI)w2oey4 zgam`AM%ChQ{G&7cj%B}L-!fYWlU#0ZX70V&_a=lKr^{|QTXs8>(I9fxb1>cv7th=A z4|pSEZ~NIaUvC=n4UP zfU-=G*fv0?2_e13Px#24YJ`L;(K){{a7>y{D4^000SaNLh0L01FcU01FcV0GgZ_00007bV*G`2iyb} z4iX(Ww&`~O00D$aL_t(I%TW0fzw=*vL#$D&+a6eox zM&aVIFlrG~kfY}DyIlGa!A*Ud&h(`W)9Sz=7>@giq$%PAQN^S};ds_b`SaVt&hC09 z@~h`z>S+F1m=i=5%PK(%r~^1E`@ymZc{+MsmsUjraw)P3tbsOBK>-p70CI<*UJt_k zN6!{tds~9~djxBUtgeCrN)Tus)Z){29^MBAi9aDGU=5MgRZsxL#5Iq2H?RDRcg(1>GRNEDZ4yehY{FKlN*-~YK z&1T~*ss=%J$k>Bc$QBI|0uIAdZN7ELcg91u@b0{AuA-VOrYkmc^3+Rv(gdYx^Ms~~ zYIG-uwCZjnf8=#u7OD6qHfkMmU|Jy(RGNA1LB5;zMe2V%2{@9lvJ!~^0000Px#24YJ`L;(K){{a7>y{D4^000SaNLh0L01FcU01FcV0GgZ_00007bV*G`2iyb} z4jvffX;Sn600EUrL_t(I%T-dbN&`U<9VDbvxLl$aV=lo1HfzA@W&OE@stAJF6+~JcoOm zay4#B?>SY}9418$HH*LL)D8)5CS899Z9M%?Df-`f&e)mPDP!H4Cl)>p#lI%KmZ`_Aeb!b z(&=q$_p-GjnEW*5eUZs%o|aUO`@0GP&I2{~w6%ltmV(5d@c3Dmhp$A&-y5a^1%NPd z&codmSP%ePa)Oot1Qq-YAaYQL#du!qm^}f(;Q_>sK)@NW&Vlml_7P!xr=$Ql>PIi%QwQqUF-5d=6G9&5vuL&}}8pe=ZJ*fvvPjTWOT z>`eZW_~9A|KO=!B#GA<)x}!r}b+gg88oUn6Vk&eYs#TB!raXs00+l$=JqUN@zEJ%i XArBo;tHAFP00000NkvXXu0mjfFUZpn diff --git a/mods/hydro/textures/hydro_promix.png b/mods/hydro/textures/hydro_promix.png deleted file mode 100644 index 02b083728700f6240720ddb9cea368f6c7d1c369..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 687 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 diff --git a/mods/hydro/textures/hydro_rosebush.png b/mods/hydro/textures/hydro_rosebush.png deleted file mode 100644 index 2122e4644218c1a4c25351ff8b3f1f34816f696a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 509 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|*pj^6T^Rm@ z;DWu&Cj&(|3p^r=85p>QL70(Y)*K0-AbW|YuPgfE)-BHSSNr#L*^OcA zytU6S&c1r_oTo(4q`RpCdk&xDU$dt7rq?&?DQW!Sea9B_U%dWu@tR*kjW};+UEXCSiQL70(Y)*K0-AbW|YuPgf<7BOBEk%mt>>wrSvJzX3_EKc_Z zE#x~Cz>{;LiOI-q+k%_=0wVVtjw%EcYjE(L78hU<6XD`%ny2;RCO=Aurs{( zydTuM@#G4JAE7QvqHh`JTRh{RTyf^t-*_DkZr=wScOxeFq-M^#7tDTg*M;XjCUH6* zEw0524ks-;D?0ne4CW}sY0Ud3WG*_>=qH_QGPl})k)%RWaKxY1rh0vsmzVeXtMK0g P1_6VotDnm{r-UW|c0-Q1 diff --git a/mods/hydro/textures/hydro_roses2.png b/mods/hydro/textures/hydro_roses2.png deleted file mode 100644 index 73f605978ea0f845c297e09b0bdf2e2892d1a6bc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 459 zcmV;+0W|)JP)Px#24YJ`L;(K){{a7>y{D4^000SaNLh0L01FcU01FcV0GgZ_00007bV*G`2iyb} z4Kx;R{0)Kt00B!$L_t(I%WaY|O9Md=g%>$eDI|A9&sOsjBvlG+Efgf37B-2Mg`kB9 z0UL|dsnXin`H!ygcdYxZ_tx1Z1Iz8bnR{>U%{bS`)pp>nw}WcZ)}Fi0^yJXpz90L` zr^b^DH4PZK6!#yqbVQ){`KtBvx1&ffp41);5(&h3{vKs2B+iyqEVx)S{`_GSF>*Jr zV^8h!bNEkSRVb1=1*dK8e%9;Movj6nA(h9keMg&8p#TE95y9PN=we4Ne_ieLz^XuC zbAfD6q=|qR0rEg9IIdi{drc-YQDY=Q5i0TktarZB6zs_eI21`yCfe>Wl)IkE1C5am zg4zKXMdc!agJoe&gP`lWq*^YLCX^9qjC_O&1R^POme7^K|CZZUj*+J(luWd)@(aZ; zIpas1kX`kidtkS%oIPx#24YJ`L;(K){{a7>y{D4^000SaNLh0L01FcU01FcV0GgZ_00007bV*G`2iye$ z6%{ncEkZQ_00EpyL_t(I%YBm1NeaAe4a+v}hqdN6-VbGjJ2_-Six%`37g0E7pO-otZoHoqspQ)5Ef%s` z@2Bk==lrN0OYJJM|MvUoXk&3sxZ~}o+m*`Win>QQd*jl$FG!;`uK@DJte$i>1qc8S zF%M$n9umN0yBSIKJfj35gM-_=lF=lTa*BTMwnM7XpCC9`F^*)36{d1MnqWzU3^SJ(v|5 z^*q=UHvznSma@@I_m#UB?-}84ViIf^4}dTVfN|$j`~wtv0)TTVjN*F0KT2>7bziRo zGaB1j(lpU#+@(p8aqdTK&aH)`0Wcbke2NI^FOhjOVo@U&+bp60z}a^`mn9r=2$M;p z-cW60k?Ay%opz6HbFH~KEX5j0000QL70(Y)*K0-AbW|YuPgfRG?=go$f%~fiBy^tJcl*v@l>VWk`&WJ)XNzNv0^7;f zknaENk_xMs3}p^aX#OlOeZW-lvIEbgau0Eq%L?Kwp!PygjX2C*-a~XIRv~NjXWzch;X|i$#!?g*=#Mw^#W3d!|mgCgP zvu@@D`;DqbBCH1WNyTab%_`em+AeFqSjii%#C&OC1g`@hbISk4>PCC?9Q^*b2uX&C kKk!ab|1?cpp_`E*F`PfAaYf7=U{Eo5y85}Sb4q9e0N}5V0ssI2 diff --git a/mods/hydro/textures/hydro_seedlings.png b/mods/hydro/textures/hydro_seedlings.png deleted file mode 100644 index 6722c07e4926cd9048b60a794a30cc46f63bcf72..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 295 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|*pj^6T^Rm@ z;DWu&Cj&(|3p^r=85p>QL70(Y)*K0-AbW|YuPgf<7BOB$o+a8sZ-7F}JzX3_EKVmU zG%)Rt%+YZ;`A=D?U8}C2{s0=CeenR$`2114}X4sJ~4@Bb@+O=(~gD_Jj@KfY>7J< z6?lZ2Z}FJREdM<5&;$DpULyuIwjy2*VH1Wl;aw6!(%Z!+I7x~G_?+0t^pz`y?^W!d hI0rH3q~r=lhNQf!Cw()vTm?Fr!PC{xWt~$(698~7T>=0A diff --git a/mods/hydro/textures/hydro_seeds.png b/mods/hydro/textures/hydro_seeds.png deleted file mode 100644 index 1bcb8314d10a7c5cf48538530c6ada298d389a14..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 375 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|*pj^6T^Rm@ z;DWu&Cj&(|3p^r=85p>QL70(Y)*K0-AbW|YuPgf<7Ewld_RPs`Aa&n8T^vI!PS;Mh z<#P-aXk9L_)JZYRY=OX3(+m$4uE36KdLm{D8`-LlO#FU#&Q86_clLZgcgD8(*>l&D zZM(iF8%nz7ntt06JKw5H-z=K{(T>=oB{n)Y9&Y+0llV!~?f$Nsd-?NJbXl05wj|WO zQVs1Y?$%`6gl6D;s8 zJF0c+t%Puctf+_|asf^EPPz$Cj5)q^X1C-7JC4=rS7a7n_dXWJFXPQJ>4?P17ZSA} z+tiz?9RDT8Cw~b|QL70(Y)*K0-AbW|YuPgf<7BOB$*1O+Vc>slud%8G=Se%|4 zFnGH9xvXQL70(Y)*K0-AbW|YuPgf<7BOBEk%mt>>wrSvJzX3_EKc_Z zE#x~Cz>{;LiOI-q+k%_=0wVVtjw%EcYjE(L78hU<6XD`%ny2;RCO=Aurs{( zydTuM@#G4JAE7QvqHh`JTRh{RTyf^t-*_DkZr=wScOxeFq-M^#7tDTg*M;XjCUH6* zEw0524ks-;D?0ne4CW}sY0Ud3WG*_>=qH_QGPl})k)%RWaKxY1rh0vsmzVeXtMK0g P1_6VotDnm{r-UW|c0-Q1 diff --git a/mods/hydro/textures/hydro_tomato2.png b/mods/hydro/textures/hydro_tomato2.png deleted file mode 100644 index 73f605978ea0f845c297e09b0bdf2e2892d1a6bc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 459 zcmV;+0W|)JP)Px#24YJ`L;(K){{a7>y{D4^000SaNLh0L01FcU01FcV0GgZ_00007bV*G`2iyb} z4Kx;R{0)Kt00B!$L_t(I%WaY|O9Md=g%>$eDI|A9&sOsjBvlG+Efgf37B-2Mg`kB9 z0UL|dsnXin`H!ygcdYxZ_tx1Z1Iz8bnR{>U%{bS`)pp>nw}WcZ)}Fi0^yJXpz90L` zr^b^DH4PZK6!#yqbVQ){`KtBvx1&ffp41);5(&h3{vKs2B+iyqEVx)S{`_GSF>*Jr zV^8h!bNEkSRVb1=1*dK8e%9;Movj6nA(h9keMg&8p#TE95y9PN=we4Ne_ieLz^XuC zbAfD6q=|qR0rEg9IIdi{drc-YQDY=Q5i0TktarZB6zs_eI21`yCfe>Wl)IkE1C5am zg4zKXMdc!agJoe&gP`lWq*^YLCX^9qjC_O&1R^POme7^K|CZZUj*+J(luWd)@(aZ; zIpas1kX`kidtkS%oIPx#24YJ`L;(K){{a7>y{D4^000SaNLh0L01FcU01FcV0GgZ_00007bV*G`2iyb} z4h1ju;yhsh00C)9L_t(I%WaasN&`U<#uqu#DcoJ6cdh0T#L7ZjiwKg=#zrj!!NNiV zLYfGvtn(a#50K6xjo4q~bBz1j?5uMa2Zr05`S`y1=UlYWqUX*Ry=+(&!dv}lf7e}3 zYdL!;g`CHf#KHBjtZNZi6+o&E;Gim;L=kcxD~cr+Y_{sl+jlL`%XOJiB@jUXkT(Pt`$zCq%j>F= z$#PwRRe?Y&3Iqn5TDX7j%iTvV)6X60sxWb#hkuL3wl<+F17uZ*#mQ&1XE&BwPy!r~ zRnZxcqdFa^emB-g1zv4iLFSMGL2Sjf%nl8LrfE`%-9yqlXjwd#Ff3Fc!1=cW?QF>>v%+FfJ00000NkvXXu0mjfQp(P6 diff --git a/mods/hydro/textures/hydro_tomato4.png b/mods/hydro/textures/hydro_tomato4.png deleted file mode 100644 index ca428069786ee553972a890e39a287512f3ed02e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 478 zcmV<40U`d0P)Px#24YJ`L;(K){{a7>y{D4^000SaNLh0L01FcU01FcV0GgZ_00007bV*G`2iyb} z4gen6OUNDo00CY}L_t(I%WaZBO9Md=#TPl!StQ4qvy6rmY0`+5g|-$EB%MtfwYIPj zL9p>F1oFAWI+Yr~#JIop-ZFP)U|^Yf``-Kup|Sb87p~U5Vq6c5xBT?zAl$qjhRcW2 z$VE&^j9fNzE`sITS@Pq05EjovgP>)&)V7m}ebu#fRUlAB zQL70(Y)*K0-AbW|YuPgf<7BPN9k$;Rntw5mzo-U3d7N_q{ zGUPhsAmF-vD`&?GPMx(|E?Y-Pe2_6~x;F2K_6tvz_rjHp?8#;3-}rb=zB^O@+xX^` zfBN_OZ=av{df!RcKnu1?Tm8(9vr8o>F7db(A(XycSirOE_}e`kfpg~CvG|7js=I`% zzK-|PxOcwYj#Gha4P)xvb?T|=Ia~`@a36JeDIBt8eX0w`qKJvVuS!-Jy>FW1ToT0F zZc!7p`kqdGqRgUe%4@Q0&3Px#24YJ`L;(K){{a7>y{D4^000SaNLh0L01FcU01FcV0GgZ_00007bV*G`2iye$ z6*DJ*O@Pk;00KBkL_t(o!_AgGXcR#hhTpp*{sv=VVeWQzb~juOlxVb3i&U`?LD9|S zX7={-qlh+wg@TQu2!co&EksBs*jT4lv9J*pF$flt%f-73oWaK0_1ig<V>Q$y%2 zmy)DQ4&;CpK9W7OAwl^=lQOR9LB0m)inZb`3!;F21ZF)>ROU zAiU@Ly+56MkI?NDZv#|mSEMc3S;O>DR$Fa$%-)3x|BA9#>jvQMFiO6PqUGyb{p^Sb zvAczmwbTXB$wLz}PM{Cq%sv1RLKtw5Pn30P~> e)SiQX^UWW3=D}4+$cq>N0000. ---]] - --- Version 1.20 - --- Changelog: --- 08.05.2014 * Changed animation of shared locked furnace (removed pipeworks overlay on front, changed to new animation type) --- 10.01.2013 * Added command to toggle for pipeworks output --- * Added pipeworks support for chests and furnace. --- 17.12.2013 * aborting input with ESC is possible again --- 01.09.2013 * fixed bug in input sanitization --- 31.08.2013 * changed receipe for key to avoid crafting conflickt with screwdriver --- 10.07.2013 * removed a potential bug (now uses string:gmatch) --- * added shared locked furnaces - - - -locks = {}; - -minetest.register_privilege("openlocks", { description = "allows to open/use all locked objects", give_to_singleplayer = false}); -minetest.register_privilege("diglocks", { description = "allows to open/use and dig up all locked objects", give_to_singleplayer = false}); - - -locks.pipeworks_enabled = false; - -if( minetest.get_modpath("pipeworks") ~= nil ) then - locks.pipeworks_enabled = true; -end - --- initializes a lock (that is: prepare the metadata so that it can store data) --- default_formspec is the formspec that will be used on right click; the input field for the commands has to exist --- Call this in on_construct in register_node. Excample: --- on_construct = function(pos) --- locks:lock_init( pos, "" ); --- end; - -function locks:lock_init( pos, default_formspec ) - - if( pos == nil ) then - print( "Error: [locks] lock_init: pos is nil"); - return; - end - - local meta = minetest.env:get_meta(pos); - if( meta == nil ) then - print( "Error: [locks] lock_init: unable to get meta data"); - return; - end - - -- this will be changed after the node is placed - meta:set_string("infotext", "Locked object"); - -- prepare the field for the owner - meta:set_string("owner", ""); - -- this is the list of players/groups that may unlock the lock even if they are not the owner - meta:set_string("allowed_users",""); - -- objects can be unlocked by passwords as well (if it is set) - meta:set_string("password",""); - -- the last player who entered the right password (to save space this is not a list) - meta:set_string("pw_user",""); - -- this formspec is presented on right-click for every user - meta:set_string("formspec", default_formspec); - -- by default, do not send output to pipework tubes - meta:set_int( "allow_pipeworks", 0 ); -end - - --- returns the information stored in the metadata strings (like owner etc.) -function locks:get_lockdata( pos ) - if( pos == nil ) then - return; - end - - local meta = minetest.env:get_meta(pos); - if( meta == nil) then - return; - end - - return{ infotext = (meta:get_string( "infotext" ) or ""), - owner = (meta:get_string( "owner" ) or ""), - allowed_users = (meta:get_string( "allowed_users" ) or ""), - password = (meta:get_string( "password" ) or ""), - pw_user = (meta:get_string( "w_user" ) or ""), - formspec = (meta:get_string( "formspec" ) or "") - }; -end - - --- sets all the metadata the look needs (used e.g. in doors) -function locks:set_lockdata( pos, data ) - if( pos == nil ) then - return; - end - - local meta = minetest.env:get_meta(pos); - if( meta == nil) then - return; - end - - meta:set_string("infotext", (data.infotext or "")); - meta:set_string("owner", (data.owner or "")); - meta:set_string("allowed_users",(data.allowed_users or "")); - meta:set_string("password", (data.password or "")); - meta:set_string("pw_user", (data.pw_user or "")); - meta:set_string("formspec", (data.formspec or "")); -end - - - - --- Set the owner of the locked object. --- Call this in after_place_node in register_node. Example: --- after_place_node = function(pos, placer) --- locks:lock_set_owner( pos, placer, "Shared locked object" ); --- end, -function locks:lock_set_owner( pos, player_or_name, description ) - - if( pos == nil or player_or_name == nil ) then - print( "Error: [locks] Missing/wrong parameters to lock_set_owner"); - return false; - end - - local meta = minetest.env:get_meta(pos); - if( meta == nil ) then - print( "Error: [locks] lock_set_owner: unable to get meta data"); - return; - end - - -- accepts a name or a player object - if( type( player_or_name )~="string") then - player_or_name = player_or_name:get_player_name(); - end - - meta:set_string("owner", player_or_name or ""); - -- add the name of the owner to the description - meta:set_string("infotext", ( description or "Shared lockecd object" ).." (owned by "..meta:get_string("owner")..")"); -end - - - --- The locked object can only be digged by the owner OR by people with the diglocks priv --- Call this in can_dig in register_node. Example: --- can_dig = function(pos,player) --- return locks:lock_allow_dig( pos, player ); --- end -function locks:lock_allow_dig( pos, player ) - - if( pos == nil or player == nil ) then - print( "Error: [locks] Missing/wrong parameters to lock_allow_dig"); - return false; - end - - local meta = minetest.env:get_meta(pos); - local lock_owner = meta:get_string("owner"); - - -- locks who lost their owner can be opened/digged by anyone - if( meta == nil or lock_owner == nil or lock_owner == "") then - return true; - end - - -- the owner can dig up his own locked objects - if( player:get_player_name() == meta:get_string("owner")) then - return true; - end - - -- players with diglocks priv can dig up locked objects as well - if( minetest.check_player_privs(player:get_player_name(), {diglocks=true})) then - return true; - end - - return false; -- fallback -end - - --- The locked object can only be used (i.e. opened, stuff taken out, changed, ... - depends on object) if this --- function returns true. Call it wherever appropriate (usually in on_punch in register_node). Example: --- on_punch = function(pos,player) --- if( !locks:lock_allow_use( pos, player ) then --- print( "Sorry, you have no access here."); --- else --- do_what_this_object_is_good_for( pos, puncher ); --- end --- end - -function locks:lock_allow_use( pos, player ) - - if( pos == nil or player == nil ) then - print( "Error: [locks] Missing/wrong parameters to lock_allow_use"); - return false; - end - - local name = player:get_player_name(); - local meta = minetest.env:get_meta(pos); - - -- pipeworks sends a special username - if( name == ':pipeworks' ) then - if( meta:get_int( 'allow_pipeworks' ) == 1 ) then - return true; - else - return false; - end - end - - -- the player has to have a key or a keychain to open his own shared locked objects - if( name == meta:get_string("owner")) then - - if( not( player:get_inventory():contains_item("main","locks:keychain 1")) - and not( player:get_inventory():contains_item("main","locks:key 1"))) then - minetest.chat_send_player( name, "You do not have a key or a keychain. Without that you can't use your shared locked objects!"); - return false; - end - - -- the player has to have a keychain to open shared locked objects of other players - else - - if( not( player:get_inventory():contains_item("main","locks:keychain 1"))) then - minetest.chat_send_player(name, "You do not have a keychain. Without that you can't open shared locked objects of other players!"); - return false; - end - end - - -- if the user would even be allowed to dig this node up, using the node is allowed as well - if( locks:lock_allow_dig( pos, player )) then - return true; - end - - - if( meta == nil ) then - minetest.chat_send_player( name, "Error: Could not access metadata of this shared locked object."); - return false; - end - - -- players with openlocks priv can open locked objects - if( minetest.check_player_privs(name, {openlocks=true})) then - return true; - end - - -- the player might be specificly allowed to use this object through allowed_users - local liste = meta:get_string("allowed_users"):split( "," ); - for i in ipairs( liste ) do - - if( liste[i] == name ) then - return true; - end - - -- the player might member of a playergroup that is allowed to use this object - if( liste[i]:sub(1,1) == ":" - and playergroups ~= nil - and playergroups:is_group_member( meta:get_string("owner"), liste[i]:sub(2), name )) then - return true; - end - - end - - - -- the player may have entered the right password - if( name == meta:get_string("pw_user")) then - return true; - end - - -- the lock may have a password set. If this is the case then ask the user for it - if( meta:get_string( "password" ) and meta:get_string( "password" ) ~= "" ) then - minetest.chat_send_player(name, "Access denied. Right-click and enter password first!"); - return false; - end - - return false; -- fallback - -end - - - --- Method for the lock to get password and configuration data --- Call in on_receive_fields in register_node. Example: --- on_receive_fields = function(pos, formname, fields, sender) --- locks:lock_handle_input( pos, formname, fields, sender ); --- end, -function locks:lock_handle_input( pos, formname, fields, player ) - - if( pos == nil or player == nil ) then - print( "Error: [locks] Missing/wrong parameters to lock_handle_input"); - return false; - end - - local meta = minetest.env:get_meta(pos); - if( meta == nil ) then - print( "Error: [locks] lock_handle_input: unable to get meta data"); - return; - end - - -- is this input the lock is supposed to handle? - if( not( fields.locks_sent_lock_command ) - or (fields.quit and (fields.quit==true or fields.quit=='true')) --- or not( fields.locks_sent_input ) - or fields.locks_sent_lock_command == "" ) then - return; - end - - name = player:get_player_name(); - - if( fields.locks_sent_lock_command == "/help" ) then - - if( name == meta:get_string( "owner" )) then - minetest.chat_send_player(name, "The following commands are available to you, the owner of this object, only:\n".. - " /help Shows this help text.\n".. - " /add Player can now unlock this object with any key.\n".. - " /del Player can no longer use this object.\n".. - " /list Shows a list of players who can use this object.\n".. - " /set Sets a password. Everyone who types that in can use the object.\n".. - " /pipeworks Toggles permission for pipeworks to take inventory out of the shared locked object.\n"); - - else if( locks:lock_allow_use( pos, player )) then - minetest.chat_send_player(name, "This locked object is owned by "..tostring( meta:get_string( "owner" ))..".\n".. - "You do have access to it.\n"); - - else if( meta:get_string( "password" ) ~= "" ) then - minetest.chat_send_player(name, "This locked object is owned by "..tostring( meta:get_string( "owner" ))..".\n".. - "Enter the correct password to gain access.\n"); - - else - minetest.chat_send_player(name, "This locked object is owned by "..tostring( meta:get_string( "owner" ))..".\n".. - "There is no password set. You can only gain access if the owner grants it to you."); - - end end end -- lua is not the most intuitive language here.... - return; - end -- of /help - - -- sanitize player input - if( fields.locks_sent_lock_command:match("[^%a%d%s_%- /%:]")) then - minetest.chat_send_player(name, "Input contains unsupported characters. Allowed: a-z, A-Z, 0-9, _, -, :."); - return; - end - - if( #fields.locks_sent_lock_command > 60) then - minetest.chat_send_player(name, "Input too long. Only up to 80 characters supported."); - return; - end - - - -- other players can only try to input the correct password - if( name ~= meta:get_string( "owner" )) then - - -- no need to bother with trying other PWs if none is set... - if( meta:get_string("password")=="" ) then - minetest.chat_send_player(name, "There is no password set. Access denied."); - return; - end - - -- the player may have entered the right password already - if( name == meta:get_string("pw_user")) then - -- nothing to do - the player entered the right pw alredy - minetest.chat_send_player(name, "You have entered the right password already. Access granted."); - return; - end - - if( fields.locks_sent_lock_command ~= meta:get_string("password")) then - minetest.chat_send_player(name, "Wrong password. Access denied."); - return; - end - - -- store the last user (this one) who entered the right pw - meta:set_string( "pw_user", name ); - - minetest.chat_send_player(name, "Password confirmed. Access granted."); - return; - end - - local txt = ""; - - - if( fields.locks_sent_lock_command == "/list" ) then - - if( meta:get_string("allowed_users")=="" ) then - txt = "No other users are allowed to use this object (except those with global privs like moderators/admins)."; - else - txt = "You granted the following users/groups of users access to this object:\n"; - local liste = meta:get_string("allowed_users"):split( "," ); - for i in ipairs( liste ) do - txt = txt.." "..tostring(liste[i]); - end - end - - if( meta:get_string( "password" ) == "" ) then - txt = txt.."\nThere is no password set. That means no one can get access through a password."; - else - txt = txt.."\nThe password for this lock is: \""..tostring( meta:get_string( "password" ).."\""); - end - - if( not( minetest.get_modpath("pipeworks") )) then - txt = txt.."\nThe pipeworks mod is not installed. Install it if you wish support for tubes."; - elseif( meta:get_int( "allow_pipeworks" ) == 1 ) then - txt = txt.."\nTubes from pipeworks may be used to extract items out of/add items to this shared locked object."; - else - txt = txt.."\nInput from tubes is accepted, but output to them is denied (default)."; - end - - minetest.chat_send_player(name, txt ); - return; - end -- of /list - - - -- toggle tube output on/off - if( fields.locks_sent_lock_command == "/pipeworks" ) then - - if( meta:get_int('allow_pipeworks') == 1 ) then - meta:set_int('allow_pipeworks', 0 ); - minetest.chat_send_player( name, 'Output to pipework tubes is now DISABLED (input is still acceped).'); - return; - else - meta:set_int('allow_pipeworks', 1 ); - minetest.chat_send_player( name, 'Output to pipework tubes is now ENABLED. Connected tubes may insert and remove items.'); - return; - end - end - --- -- all other commands take exactly one parameter - local help = fields.locks_sent_lock_command:split( " " ); - - print( tostring( help[1] )); - print( tostring( help[2] )); - - - -- set/change a password - if( help[1]=="/set" ) then - - -- if empty password then delete it - if( help[2]==nil ) then - help[2] = ""; - end - - minetest.chat_send_player(name, "Old password: \""..tostring( meta:get_string( "password" )).. - "\"\n Changed to new password: \""..tostring( help[2]).."\"."); - - - meta:set_string( "password", help[2]); - -- reset the list of users who typed the right password - meta:set_string("pw_users",""); - - if( help[2]=="") then - minetest.chat_send_player(name, "The password is empty and thus will be disabled."); - end - return; - end - - if( help[2]==nil or help[2]=="") then - minetest.chat_send_player(name, "Error: Missing parameter (player name) for command \""..tostring( help[1] ).."\"." ); - return; - end - - -- for add and del: check if the player is already in the list - - local found = false; - local anz = 0; - local liste = meta:get_string("allowed_users"):split( "," ); - for i in ipairs( liste ) do - - anz = anz + 1; -- count players - if( tostring( liste[i] ) == help[2] ) then - found = true; - end - - end - - if( help[1]=="/add" and found==true ) then - minetest.chat_send_player(name, "Player \""..tostring( help[2] ).."\" is already allowed to use this locked object. Nothing to do."); - return; - end - - if( help[1]=="/del" and found==false) then - minetest.chat_send_player(name, "Player \""..tostring( help[2] ).."\" is not amongst the players allowed to use this locked object. Nothing to do."); - return; - end - - - if( help[1]=="/add" ) then - - if( anz >= 6 ) then - minetest.chat_send_player(name, "Sorry, no more players can be added. To save space, only up to 6 players can be added. For more players please use groups!"); - return; - end - - if( name == help[2] ) then - minetest.chat_send_player(name, "You are already owner of this object."); - return; - end - - -- the player might try to add a playergroup - if( help[2]:sub(1,1) == ":" ) then - - if( not( playergroups )) then - minetest.chat_send_player(name, "Sorry, this server does not support playergroups."); - return; - end - - if( #help[2]<2 ) then - minetest.chat_send_player(name, "Please specify the name of the playergroup you want to add!"); - return; - end - - if( not( playergroups:is_playergroup(meta:get_string("owner"), help[2]:sub(2) ))) then - minetest.chat_send_player(name, "You do not have a playergroup named \""..tostring( help[2]:sub(2)).."\"."); - return; - end - - else - - -- check if the player exists - local privs = minetest.get_player_privs( help[2] ); - if( not( privs ) or not( privs.interact )) then - minetest.chat_send_player(name, "Player \""..help[2].."\" not found or has no interact privs."); - return; - end - end - - meta:set_string( "allowed_users", meta:get_string("allowed_users")..","..help[2] ); - - if( help[2]:sub(1,1) == ":" ) then - minetest.chat_send_player(name, "All members of your playergroup "..tostring(help[2]:sub(2)).." may now use/access this locked object."); - else - minetest.chat_send_player(name, help[2].." may now use/access this locked object."); - end - return; - end - - - if( help[1]=="/del" ) then - - userlist = meta:get_string("allowed_users"):split( ","..help[2] ); - meta:set_string( "allowed_users", ( userlist[1] or "" )..(userlist[2] or "" )); - - minetest.chat_send_player(name, "Access for player \""..tostring(help[2]).."\" has been revoked."); - return; - end - - minetest.chat_send_player(name, "Error: Command \""..tostring(help[1]).."\" not understood."); -end - - - --- craftitem; that can be used to craft shared locked objects -minetest.register_craftitem("locks:lock", { - description = "Lock to lock and share objects", - image = "locks_lock16.png", -}); - - -minetest.register_craft({ - output = "locks:lock 2", - recipe = { - {'default:steel_ingot', 'default:steel_ingot','default:steel_ingot'}, - {'default:steel_ingot', '', 'default:steel_ingot'}, - {'', 'default:steel_ingot',''}, - } - }); - - --- a key allowes to open your own shared locked objects -minetest.register_craftitem("locks:key", { - description = "Key to open your own shared locked objects", - image = "locks_key32.png", -}); - -minetest.register_craft({ - output = "locks:key", - recipe = { - {'', 'default:stick', ''}, - {'', 'default:steel_ingot',''}, - } - }); - - - --- in order to open shared locked objects of other players, a keychain is needed (plus the owner has to admit it via /add playername or through /set password) -minetest.register_craftitem("locks:keychain", { - description = "Keychain to open shared locked objects of others", - image = "locks_keychain32.png", -}); - -minetest.register_craft({ - output = "locks:keychain", - recipe = { - {'', 'default:steel_ingot', '' }, - {'locks:key', 'locks:key', 'locks:key'}, - } - }); - -dofile(minetest.get_modpath("locks").."/shared_locked_chest.lua"); -dofile(minetest.get_modpath("locks").."/shared_locked_sign_wall.lua"); -dofile(minetest.get_modpath("locks").."/shared_locked_xdoors2.lua"); -dofile(minetest.get_modpath("locks").."/shared_locked_furnace.lua"); - - diff --git a/mods/locks/liscence.txt b/mods/locks/liscence.txt deleted file mode 100644 index 7dd6dff..0000000 --- a/mods/locks/liscence.txt +++ /dev/null @@ -1,19 +0,0 @@ -License of locks mod for Minetest-c55 -------------------------------------- - - - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser 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 Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - diff --git a/mods/locks/shared_locked_chest.lua b/mods/locks/shared_locked_chest.lua deleted file mode 100644 index f21588d..0000000 --- a/mods/locks/shared_locked_chest.lua +++ /dev/null @@ -1,136 +0,0 @@ --- 09.01.13 Added support for pipeworks. - - -locks.chest_add = {}; -locks.chest_add.tiles = {"default_chest_top.png", "default_chest_top.png", "default_chest_side.png", - "default_chest_side.png", "default_chest_side.png", "default_chest_front.png"}; -locks.chest_add.groups = {snappy=2,choppy=2,oddly_breakable_by_hand=2}; -locks.chest_add.tube = {}; - --- additional/changed definitions for pipeworks; --- taken from pipeworks/compat.lua -if( locks.pipeworks_enabled ) then - locks.chest_add.tiles = { - "default_chest_top.png^pipeworks_tube_connection_wooden.png", - "default_chest_top.png^pipeworks_tube_connection_wooden.png", - "default_chest_side.png^pipeworks_tube_connection_wooden.png", - "default_chest_side.png^pipeworks_tube_connection_wooden.png", - "default_chest_side.png^pipeworks_tube_connection_wooden.png"}; - locks.chest_add.groups = {snappy=2,choppy=2,oddly_breakable_by_hand=2, - tubedevice = 1, tubedevice_receiver = 1 }; - locks.chest_add.tube = { - insert_object = function(pos, node, stack, direction) - local meta = minetest.env:get_meta(pos) - local inv = meta:get_inventory() - return inv:add_item("main", stack) - end, - can_insert = function(pos, node, stack, direction) - local meta = minetest.env:get_meta(pos) - local inv = meta:get_inventory() - return inv:room_for_item("main", stack) - end, - input_inventory = "main", - connect_sides = {left=1, right=1, back=1, front=1, bottom=1, top=1} - }; -end - - -minetest.register_node("locks:shared_locked_chest", { - description = "Shared locked chest", - tiles = locks.chest_add.tiles, - paramtype2 = "facedir", - groups = locks.chest_add.groups, - tube = locks.chest_add.tube, - legacy_facedir_simple = true, - - on_construct = function(pos) - local meta = minetest.env:get_meta(pos) - -- prepare the lock of the chest - locks:lock_init( pos, - "size[8,10]".. --- "field[0.5,0.2;8,1.0;locks_sent_lock_command;Locked chest. Type password, command or /help for help:;]".. --- "button_exit[3,0.8;2,1.0;locks_sent_input;Proceed]".. - "list[current_name;main;0,0;8,4;]".. - "list[current_player;main;0,5;8,4;]".. - "field[0.3,9.6;6,0.7;locks_sent_lock_command;Locked chest. Type /help for help:;]".. - "button_exit[6.3,9.2;1.7,0.7;locks_sent_input;Proceed]" ); --- "size[8,9]".. --- "list[current_name;main;0,0;8,4;]".. --- "list[current_player;main;0,5;8,4;]"); - local inv = meta:get_inventory() - inv:set_size("main", 8*4) - end, - - after_place_node = function(pos, placer) - - if( locks.pipeworks_enabled ) then - pipeworks.scan_for_tube_objects( pos ); - end - - locks:lock_set_owner( pos, placer, "Shared locked chest" ); - end, - - - can_dig = function(pos,player) - - if( not(locks:lock_allow_dig( pos, player ))) then - return false; - end - local meta = minetest.env:get_meta(pos); - local inv = meta:get_inventory() - return inv:is_empty("main") - end, - - on_receive_fields = function(pos, formname, fields, sender) - locks:lock_handle_input( pos, formname, fields, sender ); - end, - - - - allow_metadata_inventory_move = function(pos, from_list, from_index, to_list, to_index, count, player) - if( not( locks:lock_allow_use( pos, player ))) then - return 0; - end - return count; - end, - allow_metadata_inventory_put = function(pos, listname, index, stack, player) - if( not( locks:lock_allow_use( pos, player ))) then - return 0; - end - return stack:get_count() - end, - allow_metadata_inventory_take = function(pos, listname, index, stack, player) - if( not( locks:lock_allow_use( pos, player ))) then - return 0; - end - return stack:get_count() - end, - on_metadata_inventory_move = function(pos, from_list, from_index, to_list, to_index, count, player) - minetest.log("action", player:get_player_name().. - " moves stuff in locked shared chest at "..minetest.pos_to_string(pos)) - end, - on_metadata_inventory_put = function(pos, listname, index, stack, player) - minetest.log("action", player:get_player_name().. - " moves stuff to locked shared chest at "..minetest.pos_to_string(pos)) - end, - on_metadata_inventory_take = function(pos, listname, index, stack, player) - minetest.log("action", player:get_player_name().. - " takes stuff from locked shared chest at "..minetest.pos_to_string(pos)) - end, - - - after_dig_node = function( pos ) - if( locks.pipeworks_enabled ) then - pipeworks.scan_for_tube_objects(pos) - end - end -}) - -minetest.register_craft({ - output = 'locks:shared_locked_chest', - recipe = { - { 'default:chest', 'locks:lock', '' }, - }, -}) - -print( "[Mod] locks: loading locks:shared_locked_chest"); diff --git a/mods/locks/shared_locked_furnace.lua b/mods/locks/shared_locked_furnace.lua deleted file mode 100644 index 2915055..0000000 --- a/mods/locks/shared_locked_furnace.lua +++ /dev/null @@ -1,434 +0,0 @@ - --- this is a (slightly!) modified copy of minetest_game/mods/default/nodes.lua, --- containing only the furnace and adopted slightly for my locks mod - - --- 09.01.13 Added support for pipeworks. - - -locks.furnace_add = {}; -locks.furnace_add.tiles_normal = {"default_furnace_top.png", "default_furnace_bottom.png", "default_furnace_side.png", - "default_furnace_side.png", "default_furnace_side.png", "default_furnace_front.png"}; -locks.furnace_add.tiles_active = {"default_furnace_top.png", "default_furnace_bottom.png", "default_furnace_side.png", - "default_furnace_side.png", "default_furnace_side.png", --"default_furnace_front_active.png"}; - { - image = "default_furnace_front_active.png", - backface_culling = false, - animation = { - type = "vertical_frames", - aspect_w = 16, - aspect_h = 16, - length = 1.5 - }, - }}; -locks.furnace_add.groups = {snappy=2,choppy=2,oddly_breakable_by_hand=2}; -locks.furnace_add.tube = {}; - --- additional/changed definitions for pipeworks; --- taken from pipeworks/compat.lua -if( locks.pipeworks_enabled ) then - - locks.furnace_add.tiles_normal = { - "default_furnace_top.png^pipeworks_tube_connection_stony.png", - "default_furnace_bottom.png^pipeworks_tube_connection_stony.png", - "default_furnace_side.png^pipeworks_tube_connection_stony.png", - "default_furnace_side.png^pipeworks_tube_connection_stony.png", - "default_furnace_side.png^pipeworks_tube_connection_stony.png", - "default_furnace_front.png" }; - - - locks.furnace_add.tiles_active = { - "default_furnace_top.png^pipeworks_tube_connection_stony.png", - "default_furnace_bottom.png^pipeworks_tube_connection_stony.png", - "default_furnace_side.png^pipeworks_tube_connection_stony.png", - "default_furnace_side.png^pipeworks_tube_connection_stony.png", - "default_furnace_side.png^pipeworks_tube_connection_stony.png", - { - image = "default_furnace_front_active.png", - backface_culling = false, - animation = { - type = "vertical_frames", - aspect_w = 16, - aspect_h = 16, - length = 1.5 - }, - }}; --- "default_furnace_front_active.png" }; - - - locks.furnace_add.groups = {snappy=2,choppy=2,oddly_breakable_by_hand=2, - tubedevice = 1, tubedevice_receiver = 1 }; - locks.furnace_add.tube = { - insert_object = function(pos, node, stack, direction) - local meta = minetest.env:get_meta(pos) - local inv = meta:get_inventory() - if direction.y == 1 then - return inv:add_item("fuel",stack) - else - return inv:add_item("src",stack) - end - end, - can_insert = function(pos, node, stack, direction) - local meta = minetest.env:get_meta(pos) - local inv = meta:get_inventory() - if direction.y == 1 then - return inv:room_for_item("fuel", stack) - else - return inv:room_for_item("src", stack) - end - end, - input_inventory = "dst", - connect_sides = {left=1, right=1, back=1, front=1, bottom=1, top=1} - }; -end - - -function locks.get_furnace_active_formspec(pos, percent) - local formspec = - "size[8,9]".. - "image[2,2;1,1;default_furnace_fire_bg.png^[lowpart:".. - (100-percent)..":default_furnace_fire_fg.png]".. - "list[current_name;fuel;2,3;1,1;]".. - "list[current_name;src;2,1;1,1;]".. - "list[current_name;dst;5,1;2,2;]".. - "list[current_player;main;0,5;8,4;]".. - - "field[0.3,4.5;6,0.7;locks_sent_lock_command;Locked furnace. Type /help for help:;]".. - "button_exit[6.3,4;1.7,0.7;locks_sent_input;Proceed]" ; - return formspec -end - -locks.furnace_inactive_formspec = - "size[8,9]".. - "image[2,2;1,1;default_furnace_fire_bg.png]".. - "list[current_name;fuel;2,3;1,1;]".. - "list[current_name;src;2,1;1,1;]".. - "list[current_name;dst;5,1;2,2;]".. - "list[current_player;main;0,5;8,4;]".. - "field[0.3,4.5;6,0.7;locks_sent_lock_command;Locked furnace. Type /help for help:;]".. - "button_exit[6.3,4;1.7,0.7;locks_sent_input;Proceed]" ; - -minetest.register_node("locks:shared_locked_furnace", { - description = "Shared locked furnace", - paramtype2 = "facedir", - groups = {cracky=2}, - legacy_facedir_simple = true, - - tiles = locks.furnace_add.tiles_normal, - groups = locks.furnace_add.groups, - tube = locks.furnace_add.tube, - --- sounds = default.node_sound_stone_defaults(), - on_construct = function(pos) - local meta = minetest.get_meta(pos) - locks:lock_init( pos, locks.furnace_inactive_formspec) - meta:set_string("infotext", "Shared locked furnace") - local inv = meta:get_inventory() - inv:set_size("fuel", 1) - inv:set_size("src", 1) - inv:set_size("dst", 4) - end, - - after_place_node = function(pos, placer) - if( locks.pipeworks_enabled ) then - pipeworks.scan_for_tube_objects(pos) - end - locks:lock_set_owner( pos, placer, "Shared locked furnace" ); - end, - after_dig_node = function(pos) - if( locks.pipeworks_enabled ) then - pipeworks.scan_for_tube_objects(pos) - end - end, - - can_dig = function(pos,player) - if( not(locks:lock_allow_dig( pos, player ))) then - return false; - end - local meta = minetest.get_meta(pos); - local inv = meta:get_inventory() - if not inv:is_empty("fuel") then - return false - elseif not inv:is_empty("dst") then - return false - elseif not inv:is_empty("src") then - return false - end - return true - end, - on_receive_fields = function(pos, formname, fields, sender) - locks:lock_handle_input( pos, formname, fields, sender ); - end, - allow_metadata_inventory_put = function(pos, listname, index, stack, player) - if( not( locks:lock_allow_use( pos, player ))) then - return 0; - end - local meta = minetest.get_meta(pos) - local inv = meta:get_inventory() - if listname == "fuel" then - if minetest.get_craft_result({method="fuel",width=1,items={stack}}).time ~= 0 then - if inv:is_empty("src") then - meta:set_string("infotext","Furnace is empty") - end - return stack:get_count() - else - return 0 - end - elseif listname == "src" then - return stack:get_count() - elseif listname == "dst" then - return 0 - end - end, - allow_metadata_inventory_move = function(pos, from_list, from_index, to_list, to_index, count, player) - if( not( locks:lock_allow_use( pos, player ))) then - return 0; - end - local meta = minetest.get_meta(pos) - local inv = meta:get_inventory() - local stack = inv:get_stack(from_list, from_index) - if to_list == "fuel" then - if minetest.get_craft_result({method="fuel",width=1,items={stack}}).time ~= 0 then - if inv:is_empty("src") then - meta:set_string("infotext","Furnace is empty") - end - return count - else - return 0 - end - elseif to_list == "src" then - return count - elseif to_list == "dst" then - return 0 - end - end, - allow_metadata_inventory_take = function(pos, listname, index, stack, player) - if( not( locks:lock_allow_use( pos, player ))) then - return 0; - end - return stack:get_count() - end, -}) - -minetest.register_node("locks:shared_locked_furnace_active", { - description = "Furnace", - paramtype2 = "facedir", - light_source = 8, - drop = "locks:shared_locked_furnace", - groups = {cracky=2, not_in_creative_inventory=1}, - legacy_facedir_simple = true, - - tiles = locks.furnace_add.tiles_active, - groups = locks.furnace_add.groups, - tube = locks.furnace_add.tube, - --- sounds = default.node_sound_stone_defaults(), - on_construct = function(pos) - local meta = minetest.get_meta(pos) - locks:lock_init( pos, locks.furnace_inactive_formspec) - meta:set_string("infotext", "Shared locked furnace"); - local inv = meta:get_inventory() - inv:set_size("fuel", 1) - inv:set_size("src", 1) - inv:set_size("dst", 4) - end, - can_dig = function(pos,player) - if( not(locks:lock_allow_dig( pos, player ))) then - return false; - end - local meta = minetest.get_meta(pos); - local inv = meta:get_inventory() - if not inv:is_empty("fuel") then - return false - elseif not inv:is_empty("dst") then - return false - elseif not inv:is_empty("src") then - return false - end - return true - end, - - after_place_node = function(pos, placer) - if( locks.pipeworks_enabled ) then - pipeworks.scan_for_tube_objects(pos) - end - locks:lock_set_owner( pos, placer, "Shared locked furnace (active)" ); - end, - after_dig_node = function(pos) - if( locks.pipeworks_enabled ) then - pipeworks.scan_for_tube_objects(pos) - end - end, - - on_receive_fields = function(pos, formname, fields, sender) - locks:lock_handle_input( pos, formname, fields, sender ); - end, - allow_metadata_inventory_put = function(pos, listname, index, stack, player) - if( not( locks:lock_allow_use( pos, player ))) then - return 0; - end - local meta = minetest.get_meta(pos) - local inv = meta:get_inventory() - if listname == "fuel" then - if minetest.get_craft_result({method="fuel",width=1,items={stack}}).time ~= 0 then - if inv:is_empty("src") then - meta:set_string("infotext","Shared locked furnace (empty)") - end - return stack:get_count() - else - return 0 - end - elseif listname == "src" then - return stack:get_count() - elseif listname == "dst" then - return 0 - end - end, - allow_metadata_inventory_move = function(pos, from_list, from_index, to_list, to_index, count, player) - if( not( locks:lock_allow_use( pos, player ))) then - return 0; - end - local meta = minetest.get_meta(pos) - local inv = meta:get_inventory() - local stack = inv:get_stack(from_list, from_index) - if to_list == "fuel" then - if minetest.get_craft_result({method="fuel",width=1,items={stack}}).time ~= 0 then - if inv:is_empty("src") then - meta:set_string("infotext","Shared locked furnace (empty)") - end - return count - else - return 0 - end - elseif to_list == "src" then - return count - elseif to_list == "dst" then - return 0 - end - end, - allow_metadata_inventory_take = function(pos, listname, index, stack, player) - if( not( locks:lock_allow_use( pos, player ))) then - return 0; - end - return stack:get_count() - end, -}) - --- better make this a function specific to this mod to avoid trouble with the same function in default -locks.hacky_swap_node = function(pos,name) - local node = minetest.get_node(pos) - local meta = minetest.get_meta(pos) - local meta0 = meta:to_table() - if node.name == name then - return - end - node.name = name - local meta0 = meta:to_table() - minetest.set_node(pos,node) - meta = minetest.get_meta(pos) - meta:from_table(meta0) -end - -minetest.register_abm({ - nodenames = {"locks:shared_locked_furnace","locks:shared_locked_furnace_active"}, - interval = 1.0, - chance = 1, - action = function(pos, node, active_object_count, active_object_count_wider) - local meta = minetest.get_meta(pos) - for i, name in ipairs({ - "fuel_totaltime", - "fuel_time", - "src_totaltime", - "src_time" - }) do - if meta:get_string(name) == "" then - meta:set_float(name, 0.0) - end - end - - local inv = meta:get_inventory() - - local srclist = inv:get_list("src") - local cooked = nil - local aftercooked - - if srclist then - cooked, aftercooked = minetest.get_craft_result({method = "cooking", width = 1, items = srclist}) - end - - local was_active = false - - if meta:get_float("fuel_time") < meta:get_float("fuel_totaltime") then - was_active = true - meta:set_float("fuel_time", meta:get_float("fuel_time") + 1) - meta:set_float("src_time", meta:get_float("src_time") + 1) - if cooked and cooked.item and meta:get_float("src_time") >= cooked.time then - -- check if there's room for output in "dst" list - if inv:room_for_item("dst",cooked.item) then - -- Put result in "dst" list - inv:add_item("dst", cooked.item) - -- take stuff from "src" list - inv:set_stack("src", 1, aftercooked.items[1]) - else - print("Could not insert '"..cooked.item:to_string().."'") - end - meta:set_string("src_time", 0) - end - end - - if meta:get_float("fuel_time") < meta:get_float("fuel_totaltime") then - local percent = math.floor(meta:get_float("fuel_time") / - meta:get_float("fuel_totaltime") * 100) - meta:set_string("infotext","Shared locked furnace active: "..percent.."%") - locks.hacky_swap_node(pos,"locks:shared_locked_furnace_active") - meta:set_string("formspec",locks.get_furnace_active_formspec(pos, percent)) - return - end - - local fuel = nil - local afterfuel - local cooked = nil - local fuellist = inv:get_list("fuel") - local srclist = inv:get_list("src") - - if srclist then - cooked = minetest.get_craft_result({method = "cooking", width = 1, items = srclist}) - end - if fuellist then - fuel, afterfuel = minetest.get_craft_result({method = "fuel", width = 1, items = fuellist}) - end - - if not( fuel) or fuel.time <= 0 then - meta:set_string("infotext","Shared locked furnace out of fuel") - locks.hacky_swap_node(pos,"locks:shared_locked_furnace") - meta:set_string("formspec", locks.furnace_inactive_formspec) - return - end - - if cooked.item:is_empty() then - if was_active then - meta:set_string("infotext","Shared locked furnace is empty") - locks.hacky_swap_node(pos,"locks:shared_locked_furnace") - meta:set_string("formspec", locks.furnace_inactive_formspec) - end - return - end - - meta:set_string("fuel_totaltime", fuel.time) - meta:set_string("fuel_time", 0) - - inv:set_stack("fuel", 1, afterfuel.items[1]) - end, -}) - - -minetest.register_craft({ - output = 'locks:shared_locked_furnace', - recipe = { - { 'default:furnace', 'locks:lock', '' }, - }, -}) - -print( "[Mod] locks: loading locks:shared_locked_furnace"); - - diff --git a/mods/locks/shared_locked_sign_wall.lua b/mods/locks/shared_locked_sign_wall.lua deleted file mode 100644 index 5329d30..0000000 --- a/mods/locks/shared_locked_sign_wall.lua +++ /dev/null @@ -1,81 +0,0 @@ - --- allow aborting with ESC in newer Versions of MT again - --- a sign -minetest.register_node("locks:shared_locked_sign_wall", { - description = "Shared locked sign", - drawtype = "signlike", - tiles = {"default_sign_wall.png"}, - inventory_image = "default_sign_wall.png", - wield_image = "default_sign_wall.png", - paramtype = "light", - paramtype2 = "wallmounted", - sunlight_propagates = true, - walkable = false, - selection_box = { - type = "wallmounted", - --wall_top = - --wall_bottom = - --wall_side = - }, - groups = {choppy=2,dig_immediate=2}, - legacy_wallmounted = true, - - - on_construct = function(pos) - local meta = minetest.env:get_meta(pos) - -- prepare the lock of the sign - locks:lock_init( pos, - "size[8,4]".. - "field[0.3,0.6;6,0.7;text;Text:;]".. - "field[0.3,3.6;6,0.7;locks_sent_lock_command;Locked sign. Type /help for help:;]".. - "button_exit[6.3,3.2;1.7,0.7;locks_sent_input;Proceed]" ); - end, - - after_place_node = function(pos, placer) - locks:lock_set_owner( pos, placer, "Shared locked sign" ); - end, - - - can_dig = function(pos,player) - return locks:lock_allow_dig( pos, player ); - end, - - on_receive_fields = function(pos, formname, fields, sender) - - -- abort if no input has been sent - if( fields.quit ) then - return; - end - - -- if the user already has the right to use this and did input text - if( fields.text - and ( not(fields.locks_sent_lock_command) - or fields.locks_sent_lock_command=="") - and locks:lock_allow_use( pos, sender )) then - - --print("Sign at "..minetest.pos_to_string(pos).." got "..dump(fields)) - local meta = minetest.env:get_meta(pos) - fields.text = fields.text or ""; - print((sender:get_player_name() or "").." wrote \""..fields.text.. - "\" to sign at "..minetest.pos_to_string(pos)); - meta:set_string("text", fields.text.." ["..sender:get_player_name().."]"); - meta:set_string("infotext", '"'..fields.text..'"'.." ["..sender:get_player_name().."]"); - - -- a command for the lock? - else - locks:lock_handle_input( pos, formname, fields, sender ); - end - - end, - }); - - -minetest.register_craft({ - output = 'locks:shared_locked_sign_wall', - recipe = { - { 'default:sign_wall', 'locks:lock', '' }, - }, -}) - -print( "[Mod] locks: loading locks:shared_locked_sign_wall"); diff --git a/mods/locks/shared_locked_xdoors2.lua b/mods/locks/shared_locked_xdoors2.lua deleted file mode 100644 index 859ccb4..0000000 --- a/mods/locks/shared_locked_xdoors2.lua +++ /dev/null @@ -1,212 +0,0 @@ --- xDoors² mod by xyz --- modified by Sokomine to allow locked doors that can only be opened/closed/dig up by the player who placed them --- a little bit modified by addi to allow someone with the priv "opendoors" to open/close/dig all locked doors. --- Sokomine: modified again so that it uses the new locks-mod - -local door_bottom = {-0.5, -0.5, -0.5, 0.5, 0.5, -0.4} -local door_top = { - {-0.5, -0.5, -0.5, -0.3, 0.5, -0.4}, - {0.3, -0.5, -0.5, 0.5, 0.5, -0.4}, - {-0.3, 0.3, -0.5, 0.3, 0.5, -0.4}, - {-0.3, -0.5, -0.5, 0.3, -0.4, -0.4}, - {-0.05, -0.4, -0.5, 0.05, 0.3, -0.4}, - {-0.3, -0.1, -0.5, -0.05, 0, -0.4}, - {0.05, -0.1, -0.5, 0.3, 0, -0.4} -} - -local is_top = function(name) - return name:sub(12, 12) == "t" -end - - -local xdoors2_transform = function(pos, node, puncher) - - if( not( locks:lock_allow_use( pos, puncher ))) then - minetest.chat_send_player( puncher:get_player_name(), "This door is locked. It can only be opened by its owner or people with a key that fits."); - return; - end - - if is_top(node.name) then - pos = {x = pos.x, y = pos.y - 1, z = pos.z} - end - local t = 3 - node.name:sub(-1) - local p2 = 0 - if t == 2 then - p2 = (node.param2 + 1) % 4 - else - p2 = (node.param2 + 3) % 4 - end - - local olddata = locks:get_lockdata( pos ); - minetest.env:add_node(pos, {name = "locks:door_bottom_"..t, param2 = p2}) - minetest.env:add_node({x = pos.x, y = pos.y + 1, z = pos.z}, {name = "locks:door_top_"..t, param2 = p2}) - - -- remember who owns the door, what passwords are set etc. - locks:set_lockdata( pos, olddata ); - locks:set_lockdata( {x = pos.x, y = pos.y + 1, z = pos.z}, olddata ); -end - - -local xdoors2_destruct = function(pos, oldnode) - if is_top(oldnode.name) then - pos = {x = pos.x, y = pos.y - 1, z = pos.z} - end - minetest.env:remove_node(pos) - minetest.env:remove_node({x = pos.x, y = pos.y + 1, z = pos.z}) -end - -for i = 1, 2 do - minetest.register_node("locks:door_top_"..i, { - tile_images = {"xdoors2_side.png", "xdoors2_side.png", "xdoors2_top.png", "xdoors2_bottom.png", "xdoors2_top_"..(3 - i)..".png", "xdoors2_top_"..i..".png"}, - paramtype = "light", - paramtype2 = "facedir", - drawtype = "nodebox", - drop = "locks:door", - groups = {snappy=2,choppy=2,oddly_breakable_by_hand=2}, - node_box = { - type = "fixed", - fixed = door_top - }, - selection_box = { - type = "fixed", - fixed = door_bottom - }, - on_punch = xdoors2_transform, - after_dig_node = xdoors2_destruct, - - on_construct = function(pos) - locks:lock_init( pos, - "size[8,2]".. - "field[0.3,0.6;6,0.7;locks_sent_lock_command;Locked door. Type /help for help:;]".. - "button_exit[6.3,1.2;1.7,0.7;locks_sent_input;Proceed]" ); - end, - - on_receive_fields = function(pos, formname, fields, sender) - locks:lock_handle_input( pos, formname, fields, sender ); - end, - - can_dig = function(pos,player) - return locks:lock_allow_dig( pos, player ); - end - }) - minetest.register_node("locks:door_bottom_"..i, { - tile_images = {"xdoors2_side.png", "xdoors2_side.png", "xdoors2_top.png", "xdoors2_bottom.png", "locks_xdoors2_bottom_"..(3 - i)..".png", "locks_xdoors2_bottom_"..i..".png"}, - paramtype = "light", - paramtype2 = "facedir", - drawtype = "nodebox", - drop = "locks:door", - groups = {snappy=2,choppy=2,oddly_breakable_by_hand=2}, - node_box = { - type = "fixed", - fixed = door_bottom - }, - selection_box = { - type = "fixed", - fixed = door_bottom - }, - on_punch = xdoors2_transform, - after_dig_node = xdoors2_destruct, - - on_construct = function(pos) - locks:lock_init( pos, - "size[8,2]".. - "field[0.3,0.6;6,0.7;locks_sent_lock_command;Locked door. Type /help for help:;]".. - "button_exit[6.3,0.2;1.7,0.7;locks_sent_input;Proceed]" ); - end, - - on_receive_fields = function(pos, formname, fields, sender) - locks:lock_handle_input( pos, formname, fields, sender ); - end, - - can_dig = function(pos,player) - return locks:lock_allow_dig( pos, player ); - end - }) -end - -local delta = { - {x = -1, z = 0}, - {x = 0, z = 1}, - {x = 1, z = 0}, - {x = 0, z = -1} -} - -minetest.register_node("locks:door", { - description = "Shared locked Wooden Door", - node_placement_prediction = "", - inventory_image = 'locks_xdoors2_door.png', - wield_image = 'xdoors2_door.png', - stack_max = 1, - on_place = function(itemstack, placer, pointed_thing) - local above = pointed_thing.above - - -- there should be 2 empty nodes - if minetest.env:get_node({x = above.x, y = above.y + 1, z = above.z}).name ~= "air" then - return itemstack - end - - local fdir = 0 - local placer_pos = placer:getpos() - if placer_pos then - dir = { - x = above.x - placer_pos.x, - y = above.y - placer_pos.y, - z = above.z - placer_pos.z - } - fdir = minetest.dir_to_facedir(dir) - end - - local t = 1 - local another_door = minetest.env:get_node({x = above.x + delta[fdir + 1].x, y = above.y, z = above.z + delta[fdir + 1].z}) - if (another_door.name:sub(-1) == "1" and another_door.param2 == fdir) - or (another_door.name:sub(-1) == "2" and another_door.param2 == (fdir + 1) % 4) then - t = 2 - end - - minetest.env:add_node(above, {name = "locks:door_bottom_"..t, param2 = fdir}) - minetest.env:add_node({x = above.x, y = above.y + 1, z = above.z}, {name = "locks:door_top_"..t, param2 = fdir}) - - -- store who owns the door; the other data can be default for now - locks:lock_set_owner( above, placer:get_player_name() or "", "Shared locked door"); - locks:lock_set_owner( {x = above.x, y = above.y + 1, z = above.z}, placer:get_player_name() or "", "Shared locked door"); - - return ItemStack("") - end -}) - - --- if xdoors2 is installed -if( minetest.get_modpath("xdoors2") ~= nil ) then - minetest.register_craft({ - output = 'locks:door', - recipe = { - { 'xdoors2:door', 'locks:lock', '' }, - }, - }); - --- if the normal doors are installed -else if( minetest.get_modpath("doors") ~= nil ) then - - minetest.register_craft({ - output = 'locks:door', - recipe = { - { 'doors:door_wood', 'locks:lock', '' }, - }, - }) - --- fallback if no doors can be found -else - minetest.register_craft({ - output = 'locks:door', - recipe = { - { 'default:wood', 'default:wood', '' }, - { 'default:wood', 'default:wood', 'locks:lock' }, - { 'default:wood', 'default:wood', '' }, - }, - }); -end -end -- of previous else - - - -print( "[Mod] locks: loading locks:door"); diff --git a/mods/locks/textures/licence.txt b/mods/locks/textures/licence.txt deleted file mode 100644 index 2591083..0000000 --- a/mods/locks/textures/licence.txt +++ /dev/null @@ -1,88 +0,0 @@ -Licence for the following grafiks: -lock -key -keychain - -author: addi - -This work is licensed under a Creative Commons Attribution-ShareAlike 3.0 Unported License. -http://creativecommons.org/licenses/by-sa/3.0/ - ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- - -You are free: - - to Share — to copy, distribute and transmit the work - to Remix — to adapt the work - - -Under the following conditions: - - Attribution — You must attribute the work in the manner specified by the author or licensor (but not in any way that suggests that they endorse you or your use of the work). - - Share Alike — If you alter, transform, or build upon this work, you may distribute the resulting work only under the same or similar license to this one. - ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- - - License - -THE WORK (AS DEFINED BELOW) IS PROVIDED UNDER THE TERMS OF THIS CREATIVE COMMONS PUBLIC LICENSE ("CCPL" OR "LICENSE"). THE WORK IS PROTECTED BY COPYRIGHT AND/OR OTHER APPLICABLE LAW. ANY USE OF THE WORK OTHER THAN AS AUTHORIZED UNDER THIS LICENSE OR COPYRIGHT LAW IS PROHIBITED. - -BY EXERCISING ANY RIGHTS TO THE WORK PROVIDED HERE, YOU ACCEPT AND AGREE TO BE BOUND BY THE TERMS OF THIS LICENSE. TO THE EXTENT THIS LICENSE MAY BE CONSIDERED TO BE A CONTRACT, THE LICENSOR GRANTS YOU THE RIGHTS CONTAINED HERE IN CONSIDERATION OF YOUR ACCEPTANCE OF SUCH TERMS AND CONDITIONS. - -1. Definitions - - "Adaptation" means a work based upon the Work, or upon the Work and other pre-existing works, such as a translation, adaptation, derivative work, arrangement of music or other alterations of a literary or artistic work, or phonogram or performance and includes cinematographic adaptations or any other form in which the Work may be recast, transformed, or adapted including in any form recognizably derived from the original, except that a work that constitutes a Collection will not be considered an Adaptation for the purpose of this License. For the avoidance of doubt, where the Work is a musical work, performance or phonogram, the synchronization of the Work in timed-relation with a moving image ("synching") will be considered an Adaptation for the purpose of this License. - "Collection" means a collection of literary or artistic works, such as encyclopedias and anthologies, or performances, phonograms or broadcasts, or other works or subject matter other than works listed in Section 1(f) below, which, by reason of the selection and arrangement of their contents, constitute intellectual creations, in which the Work is included in its entirety in unmodified form along with one or more other contributions, each constituting separate and independent works in themselves, which together are assembled into a collective whole. A work that constitutes a Collection will not be considered an Adaptation (as defined below) for the purposes of this License. - "Creative Commons Compatible License" means a license that is listed at http://creativecommons.org/compatiblelicenses that has been approved by Creative Commons as being essentially equivalent to this License, including, at a minimum, because that license: (i) contains terms that have the same purpose, meaning and effect as the License Elements of this License; and, (ii) explicitly permits the relicensing of adaptations of works made available under that license under this License or a Creative Commons jurisdiction license with the same License Elements as this License. - "Distribute" means to make available to the public the original and copies of the Work or Adaptation, as appropriate, through sale or other transfer of ownership. - "License Elements" means the following high-level license attributes as selected by Licensor and indicated in the title of this License: Attribution, ShareAlike. - "Licensor" means the individual, individuals, entity or entities that offer(s) the Work under the terms of this License. - "Original Author" means, in the case of a literary or artistic work, the individual, individuals, entity or entities who created the Work or if no individual or entity can be identified, the publisher; and in addition (i) in the case of a performance the actors, singers, musicians, dancers, and other persons who act, sing, deliver, declaim, play in, interpret or otherwise perform literary or artistic works or expressions of folklore; (ii) in the case of a phonogram the producer being the person or legal entity who first fixes the sounds of a performance or other sounds; and, (iii) in the case of broadcasts, the organization that transmits the broadcast. - "Work" means the literary and/or artistic work offered under the terms of this License including without limitation any production in the literary, scientific and artistic domain, whatever may be the mode or form of its expression including digital form, such as a book, pamphlet and other writing; a lecture, address, sermon or other work of the same nature; a dramatic or dramatico-musical work; a choreographic work or entertainment in dumb show; a musical composition with or without words; a cinematographic work to which are assimilated works expressed by a process analogous to cinematography; a work of drawing, painting, architecture, sculpture, engraving or lithography; a photographic work to which are assimilated works expressed by a process analogous to photography; a work of applied art; an illustration, map, plan, sketch or three-dimensional work relative to geography, topography, architecture or science; a performance; a broadcast; a phonogram; a compilation of data to the extent it is protected as a copyrightable work; or a work performed by a variety or circus performer to the extent it is not otherwise considered a literary or artistic work. - "You" means an individual or entity exercising rights under this License who has not previously violated the terms of this License with respect to the Work, or who has received express permission from the Licensor to exercise rights under this License despite a previous violation. - "Publicly Perform" means to perform public recitations of the Work and to communicate to the public those public recitations, by any means or process, including by wire or wireless means or public digital performances; to make available to the public Works in such a way that members of the public may access these Works from a place and at a place individually chosen by them; to perform the Work to the public by any means or process and the communication to the public of the performances of the Work, including by public digital performance; to broadcast and rebroadcast the Work by any means including signs, sounds or images. - "Reproduce" means to make copies of the Work by any means including without limitation by sound or visual recordings and the right of fixation and reproducing fixations of the Work, including storage of a protected performance or phonogram in digital form or other electronic medium. - -2. Fair Dealing Rights. Nothing in this License is intended to reduce, limit, or restrict any uses free from copyright or rights arising from limitations or exceptions that are provided for in connection with the copyright protection under copyright law or other applicable laws. - -3. License Grant. Subject to the terms and conditions of this License, Licensor hereby grants You a worldwide, royalty-free, non-exclusive, perpetual (for the duration of the applicable copyright) license to exercise the rights in the Work as stated below: - - to Reproduce the Work, to incorporate the Work into one or more Collections, and to Reproduce the Work as incorporated in the Collections; - to create and Reproduce Adaptations provided that any such Adaptation, including any translation in any medium, takes reasonable steps to clearly label, demarcate or otherwise identify that changes were made to the original Work. For example, a translation could be marked "The original work was translated from English to Spanish," or a modification could indicate "The original work has been modified."; - to Distribute and Publicly Perform the Work including as incorporated in Collections; and, - to Distribute and Publicly Perform Adaptations. - - For the avoidance of doubt: - Non-waivable Compulsory License Schemes. In those jurisdictions in which the right to collect royalties through any statutory or compulsory licensing scheme cannot be waived, the Licensor reserves the exclusive right to collect such royalties for any exercise by You of the rights granted under this License; - Waivable Compulsory License Schemes. In those jurisdictions in which the right to collect royalties through any statutory or compulsory licensing scheme can be waived, the Licensor waives the exclusive right to collect such royalties for any exercise by You of the rights granted under this License; and, - Voluntary License Schemes. The Licensor waives the right to collect royalties, whether individually or, in the event that the Licensor is a member of a collecting society that administers voluntary licensing schemes, via that society, from any exercise by You of the rights granted under this License. - -The above rights may be exercised in all media and formats whether now known or hereafter devised. The above rights include the right to make such modifications as are technically necessary to exercise the rights in other media and formats. Subject to Section 8(f), all rights not expressly granted by Licensor are hereby reserved. - -4. Restrictions. The license granted in Section 3 above is expressly made subject to and limited by the following restrictions: - - You may Distribute or Publicly Perform the Work only under the terms of this License. You must include a copy of, or the Uniform Resource Identifier (URI) for, this License with every copy of the Work You Distribute or Publicly Perform. You may not offer or impose any terms on the Work that restrict the terms of this License or the ability of the recipient of the Work to exercise the rights granted to that recipient under the terms of the License. You may not sublicense the Work. You must keep intact all notices that refer to this License and to the disclaimer of warranties with every copy of the Work You Distribute or Publicly Perform. When You Distribute or Publicly Perform the Work, You may not impose any effective technological measures on the Work that restrict the ability of a recipient of the Work from You to exercise the rights granted to that recipient under the terms of the License. This Section 4(a) applies to the Work as incorporated in a Collection, but this does not require the Collection apart from the Work itself to be made subject to the terms of this License. If You create a Collection, upon notice from any Licensor You must, to the extent practicable, remove from the Collection any credit as required by Section 4(c), as requested. If You create an Adaptation, upon notice from any Licensor You must, to the extent practicable, remove from the Adaptation any credit as required by Section 4(c), as requested. - You may Distribute or Publicly Perform an Adaptation only under the terms of: (i) this License; (ii) a later version of this License with the same License Elements as this License; (iii) a Creative Commons jurisdiction license (either this or a later license version) that contains the same License Elements as this License (e.g., Attribution-ShareAlike 3.0 US)); (iv) a Creative Commons Compatible License. If you license the Adaptation under one of the licenses mentioned in (iv), you must comply with the terms of that license. If you license the Adaptation under the terms of any of the licenses mentioned in (i), (ii) or (iii) (the "Applicable License"), you must comply with the terms of the Applicable License generally and the following provisions: (I) You must include a copy of, or the URI for, the Applicable License with every copy of each Adaptation You Distribute or Publicly Perform; (II) You may not offer or impose any terms on the Adaptation that restrict the terms of the Applicable License or the ability of the recipient of the Adaptation to exercise the rights granted to that recipient under the terms of the Applicable License; (III) You must keep intact all notices that refer to the Applicable License and to the disclaimer of warranties with every copy of the Work as included in the Adaptation You Distribute or Publicly Perform; (IV) when You Distribute or Publicly Perform the Adaptation, You may not impose any effective technological measures on the Adaptation that restrict the ability of a recipient of the Adaptation from You to exercise the rights granted to that recipient under the terms of the Applicable License. This Section 4(b) applies to the Adaptation as incorporated in a Collection, but this does not require the Collection apart from the Adaptation itself to be made subject to the terms of the Applicable License. - If You Distribute, or Publicly Perform the Work or any Adaptations or Collections, You must, unless a request has been made pursuant to Section 4(a), keep intact all copyright notices for the Work and provide, reasonable to the medium or means You are utilizing: (i) the name of the Original Author (or pseudonym, if applicable) if supplied, and/or if the Original Author and/or Licensor designate another party or parties (e.g., a sponsor institute, publishing entity, journal) for attribution ("Attribution Parties") in Licensor's copyright notice, terms of service or by other reasonable means, the name of such party or parties; (ii) the title of the Work if supplied; (iii) to the extent reasonably practicable, the URI, if any, that Licensor specifies to be associated with the Work, unless such URI does not refer to the copyright notice or licensing information for the Work; and (iv) , consistent with Ssection 3(b), in the case of an Adaptation, a credit identifying the use of the Work in the Adaptation (e.g., "French translation of the Work by Original Author," or "Screenplay based on original Work by Original Author"). The credit required by this Section 4(c) may be implemented in any reasonable manner; provided, however, that in the case of a Adaptation or Collection, at a minimum such credit will appear, if a credit for all contributing authors of the Adaptation or Collection appears, then as part of these credits and in a manner at least as prominent as the credits for the other contributing authors. For the avoidance of doubt, You may only use the credit required by this Section for the purpose of attribution in the manner set out above and, by exercising Your rights under this License, You may not implicitly or explicitly assert or imply any connection with, sponsorship or endorsement by the Original Author, Licensor and/or Attribution Parties, as appropriate, of You or Your use of the Work, without the separate, express prior written permission of the Original Author, Licensor and/or Attribution Parties. - Except as otherwise agreed in writing by the Licensor or as may be otherwise permitted by applicable law, if You Reproduce, Distribute or Publicly Perform the Work either by itself or as part of any Adaptations or Collections, You must not distort, mutilate, modify or take other derogatory action in relation to the Work which would be prejudicial to the Original Author's honor or reputation. Licensor agrees that in those jurisdictions (e.g. Japan), in which any exercise of the right granted in Section 3(b) of this License (the right to make Adaptations) would be deemed to be a distortion, mutilation, modification or other derogatory action prejudicial to the Original Author's honor and reputation, the Licensor will waive or not assert, as appropriate, this Section, to the fullest extent permitted by the applicable national law, to enable You to reasonably exercise Your right under Section 3(b) of this License (right to make Adaptations) but not otherwise. - -5. Representations, Warranties and Disclaimer - -UNLESS OTHERWISE MUTUALLY AGREED TO BY THE PARTIES IN WRITING, LICENSOR OFFERS THE WORK AS-IS AND MAKES NO REPRESENTATIONS OR WARRANTIES OF ANY KIND CONCERNING THE WORK, EXPRESS, IMPLIED, STATUTORY OR OTHERWISE, INCLUDING, WITHOUT LIMITATION, WARRANTIES OF TITLE, MERCHANTIBILITY, FITNESS FOR A PARTICULAR PURPOSE, NONINFRINGEMENT, OR THE ABSENCE OF LATENT OR OTHER DEFECTS, ACCURACY, OR THE PRESENCE OF ABSENCE OF ERRORS, WHETHER OR NOT DISCOVERABLE. SOME JURISDICTIONS DO NOT ALLOW THE EXCLUSION OF IMPLIED WARRANTIES, SO SUCH EXCLUSION MAY NOT APPLY TO YOU. - -6. Limitation on Liability. EXCEPT TO THE EXTENT REQUIRED BY APPLICABLE LAW, IN NO EVENT WILL LICENSOR BE LIABLE TO YOU ON ANY LEGAL THEORY FOR ANY SPECIAL, INCIDENTAL, CONSEQUENTIAL, PUNITIVE OR EXEMPLARY DAMAGES ARISING OUT OF THIS LICENSE OR THE USE OF THE WORK, EVEN IF LICENSOR HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. - -7. Termination - - This License and the rights granted hereunder will terminate automatically upon any breach by You of the terms of this License. Individuals or entities who have received Adaptations or Collections from You under this License, however, will not have their licenses terminated provided such individuals or entities remain in full compliance with those licenses. Sections 1, 2, 5, 6, 7, and 8 will survive any termination of this License. - Subject to the above terms and conditions, the license granted here is perpetual (for the duration of the applicable copyright in the Work). Notwithstanding the above, Licensor reserves the right to release the Work under different license terms or to stop distributing the Work at any time; provided, however that any such election will not serve to withdraw this License (or any other license that has been, or is required to be, granted under the terms of this License), and this License will continue in full force and effect unless terminated as stated above. - -8. Miscellaneous - - Each time You Distribute or Publicly Perform the Work or a Collection, the Licensor offers to the recipient a license to the Work on the same terms and conditions as the license granted to You under this License. - Each time You Distribute or Publicly Perform an Adaptation, Licensor offers to the recipient a license to the original Work on the same terms and conditions as the license granted to You under this License. - If any provision of this License is invalid or unenforceable under applicable law, it shall not affect the validity or enforceability of the remainder of the terms of this License, and without further action by the parties to this agreement, such provision shall be reformed to the minimum extent necessary to make such provision valid and enforceable. - No term or provision of this License shall be deemed waived and no breach consented to unless such waiver or consent shall be in writing and signed by the party to be charged with such waiver or consent. - This License constitutes the entire agreement between the parties with respect to the Work licensed here. There are no understandings, agreements or representations with respect to the Work not specified here. Licensor shall not be bound by any additional provisions that may appear in any communication from You. This License may not be modified without the mutual written agreement of the Licensor and You. - The rights granted under, and the subject matter referenced, in this License were drafted utilizing the terminology of the Berne Convention for the Protection of Literary and Artistic Works (as amended on September 28, 1979), the Rome Convention of 1961, the WIPO Copyright Treaty of 1996, the WIPO Performances and Phonograms Treaty of 1996 and the Universal Copyright Convention (as revised on July 24, 1971). These rights and subject matter take effect in the relevant jurisdiction in which the License terms are sought to be enforced according to the corresponding provisions of the implementation of those treaty provisions in the applicable national law. If the standard suite of rights granted under applicable copyright law includes additional rights not granted under this License, such additional rights are deemed to be included in the License; this License is not intended to restrict the license of any rights under applicable law. diff --git a/mods/locks/textures/locks_key16.png b/mods/locks/textures/locks_key16.png deleted file mode 100644 index ed4d1f8db07825f143893af5bff1d13b3318f1b4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 390 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 NgQu&X%Q~loCID#)N7n!V diff --git a/mods/locks/textures/locks_xdoors2_bottom_2.png b/mods/locks/textures/locks_xdoors2_bottom_2.png deleted file mode 100644 index b20cdf4087a8159be3cd7e731f889a14b67ddce5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 230 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61SBU+%rFB|Y)RhkE)4%caKYZ?lYt_f1s;*b z3=G`DAk4@xYmNj^kiEpy*OmPamlPkrjH~q)6`)YDr;B5V#`$C&-YJ{<=1-e0bn3u? zgq6xC8^mpDe$6^*RTt&paA1k$YRL{}p8_$*$BGTDjg5(i+js?Df6$&fT`V;rA;EH& z!Rw3F)7t&xoqz0TnDb!1`}@GTE}P`tOalU$xr?q$Sl}2JB_cG@B~xKW*91m}{(tgY U?#LXe16t4E>FVdQ&MBb@0CLSt+yDRo diff --git a/mods/locks/textures/locks_xdoors2_door.png b/mods/locks/textures/locks_xdoors2_door.png deleted file mode 100644 index cc3d0d37a5b37267b698f35ea5d419883a87c13e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 266 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Y)RhkE)4%caKYZ?lYt_f1s;*b z3=G`DAk4@xYmNj^kiEpy*OmPamlPkrO0Ff(E}+nKPZ!4!i_^&|4$Mm%gZ@i?XgC~x z&v?#`zjFnTr5{|{5pkf!`_YlN?|anq>eIJe6?91y&Sluxz&gF9RqJ{EjPit>uDuSE z7>_Wy1ueR0RVU@_o~hzxl4SbeV)dB?ojNmE(%D&93?@BoZD?RPbtvI*8?QvpqP+~v z{PXvvt#}c4&ZAK0z#ivqj0XA}0+Ou5m_1H*@&EyYYpLt?wcqwT0G-I->FVdQ&MBb@ E05*(V`v3p{ diff --git a/mods/locks/textures/xdoors2_bottom.png b/mods/locks/textures/xdoors2_bottom.png deleted file mode 100644 index 15ce4bd23717fb89a7f70901c87d2352186b196e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 109 zcmeAS@N?(olHy`uVBq!ia0vp^j3CUx1SBVv2j2ryoCO|{#S9GG!XV7ZFl&wkP>{XE z)7O>#4hNTrCbL1S#2TOwkEe@c2*>qg4c;kC3{3J256?-yx&stv@O1TaS?83{1OV&H B78(Em diff --git a/mods/locks/textures/xdoors2_side.png b/mods/locks/textures/xdoors2_side.png deleted file mode 100644 index 4c8937d5eaedd5f9295cd543b72bebd834768402..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 109 zcmeAS@N?(olHy`uVBq!ia0vp^j3CUx1SBVv2j2ryoCO|{#S9GG!XV7ZFl&wkP>{XE z)7O>#4hNTrhQTyHkKaHc9#0p?5RU7~8oX1O7?|W49-fnYbq6TU;OXk;vd$@?2>=ZL B7W4oB diff --git a/mods/locks/textures/xdoors2_top.png b/mods/locks/textures/xdoors2_top.png deleted file mode 100644 index 2009fb9915a64c1551b79bcf4469af27f893afee..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 109 zcmeAS@N?(olHy`uVBq!ia0vp^j3CUx1SBVv2j2ryoCO|{#S9GG!XV7ZFl&wkP>{XE z)7O>#4hNTrhUNQ7AL4;RJf1F&Asp9}HF&2mF)+z9JUl1)>JCtx!PC{xWt~$(696d~ B7p4FJ diff --git a/mods/locks/textures/xdoors2_top_1.png b/mods/locks/textures/xdoors2_top_1.png deleted file mode 100644 index 49b3c2279484fcd13265d231c91f62b6703049af..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 144 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61SBU+%rFB|oCO|{#S9GG!XV7ZFl&wkP>{XE z)7O>#4hNTrn$-)5o@}6yzNd?0h{pM39o{KP3Q{urKFw=wY{XE z)7O>#4hNTrI;(r?1aY8{zNd?0h{pM39o{KP3Q{urKFw=wY)U(c^T3jo*o4Z4BH*#y+8R)Dh1lj N;OXk;vd$@?2><~VM;HJA diff --git a/mods/locks/textures/xdoors2locked_bottom_2.png b/mods/locks/textures/xdoors2locked_bottom_2.png deleted file mode 100644 index 5f7221b0d00017a297d034696a8aecc170374867..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 230 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61SBU+%rFB|Y)RhkE)4%caKYZ?lYt_f1s;*b z3=G`DAk4@xYmNj^kiEpy*OmPamk7U!!73lE-$0>aPZ!4!jq}Mmyi+#y&7U@1=+uD& z2`iOPHi+BQ{F-&rsxHdG;lL8h)sh{|J_TZqj};qQ8ygc3xA6+R{-8Z|x>#yLLW1Qk zgVz_Ur?vaXJO9|xFz3O1_xFKwT{g+PnFa(ha~EBiu)r}cNtp_2eh8S)78&qol`;+0Q-$i(*OVf diff --git a/mods/locks/textures/xdoors2locked_door.png b/mods/locks/textures/xdoors2locked_door.png deleted file mode 100644 index 62470677caa520b9798dba3a2b38c987b3b5aa77..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 266 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Y)RhkE)4%caKYZ?lYt_f1s;*b z3=G`DAk4@xYmNj^kiEpy*OmPamk29^3Y&Jva-h(3PZ!4!i_^&|4$Mm%gZ@i?XgC~x z&v?#`zjFnTr5{|{5pkf!`_YlN?|anq>eIJe6?91y&Sluxz&gF9RqJ{EjPit>uDuSE z7>_Wy1ueR0RVU@_o~hzxl4SbeV)dB?ojNmE(%D&93?@BoZD?RPbtvI*8?QvpqP+~v z{PXvvt#}c4&ZAK0z#ivqj0XA}0+Ou5m_1H*@&EyYYpLt?wcqwT0G-I->FVdQ&MBb@ E02nM>(EtDd diff --git a/mods/vines b/mods/vines new file mode 160000 index 0000000..8d192f6 --- /dev/null +++ b/mods/vines @@ -0,0 +1 @@ +Subproject commit 8d192f6aac5db4406c5beca45872e7b2ce649f69 diff --git a/mods/vines/README.md b/mods/vines/README.md deleted file mode 100644 index 6e3f3d8..0000000 --- a/mods/vines/README.md +++ /dev/null @@ -1,4 +0,0 @@ -vines -===== - -Vines mod for minetest. Also adds ropes. \ No newline at end of file diff --git a/mods/vines/depends.txt b/mods/vines/depends.txt deleted file mode 100644 index 4ad96d5..0000000 --- a/mods/vines/depends.txt +++ /dev/null @@ -1 +0,0 @@ -default diff --git a/mods/vines/init.lua b/mods/vines/init.lua deleted file mode 100644 index 120bc0c..0000000 --- a/mods/vines/init.lua +++ /dev/null @@ -1,316 +0,0 @@ -local vine_seed = 12 - --- Nodes -local c_air = minetest.get_content_id("air") -local rope_side = "default_wood.png^vines_rope_shadow.png^vines_rope.png" - -minetest.register_node("vines:rope_block", { - description = "Rope", - sunlight_propagates = true, - paramtype = "light", - drops = "", - tiles = { - rope_side, - rope_side, - "default_wood.png", - "default_wood.png", - rope_side, - }, - drawtype = "cube", - groups = { snappy = 3}, - sounds = default.node_sound_leaves_defaults(), - after_place_node = function(pos) - local p = {x=pos.x, y=pos.y-1, z=pos.z} - local n = minetest.env:get_node(p) - if n.name == "air" then - minetest.env:add_node(p, {name="vines:rope_end"}) - end - end, - after_dig_node = function(pos) - local p = {x=pos.x, y=pos.y-1, z=pos.z} - local n = minetest.get_node(p).name - - if n ~= 'vines:rope' - and n ~= 'vines:rope_end' then - return - end - - local t1 = os.clock() - local y1 = p.y - local tab = {} - local i = 1 - while n == 'vines:rope' do - tab[i] = p - i = i+1 - p.y = p.y-1 - n = minetest.get_node(p).name - end - if n == 'vines:rope_end' then - tab[i] = p - end - local y0 = p.y - - local manip = minetest.get_voxel_manip() - local p1 = {x=p.x, y=y0, z=p.z} - local p2 = {x=p.x, y=y1, z=p.z} - local pos1, pos2 = manip:read_from_map(p1, p2) - area = VoxelArea:new({MinEdge=pos1, MaxEdge=pos2}) - nodes = manip:get_data() - - for i in area:iterp(p1, p2) do - nodes[i] = c_air - end - - manip:set_data(nodes) - manip:write_to_map() - manip:update_map() -- <— this takes time - print(string.format("[vines] rope removed at ("..pos.x.."|"..pos.y.."|"..pos.z..") after: %.2fs", os.clock() - t1)) - end -}) - -minetest.register_node("vines:rope", { - description = "Rope", - walkable = false, - climbable = true, - sunlight_propagates = true, - paramtype = "light", - tiles = { "vines_rope.png" }, - drawtype = "plantlike", - groups = {}, - sounds = default.node_sound_leaves_defaults(), - selection_box = { - type = "fixed", - fixed = {-1/7, -1/2, -1/7, 1/7, 1/2, 1/7}, - }, - -}) - -minetest.register_node("vines:rope_end", { - description = "Rope", - walkable = false, - climbable = true, - sunlight_propagates = true, - paramtype = "light", - drops = "", - tiles = { "vines_rope.png" }, - drawtype = "plantlike", - groups = {}, - sounds = default.node_sound_leaves_defaults(), - after_place_node = function(pos) - yesh = {x = pos.x, y= pos.y-1, z=pos.z} - minetest.env:add_node(yesh, "vines:rope") - end, - selection_box = { - type = "fixed", - fixed = {-1/7, -1/2, -1/7, 1/7, 1/2, 1/7}, - }, -}) - -local function dropitem(item, pos, inv) - if inv - and inv:room_for_item("main", item) then - inv:add_item("main", item) - return - end - minetest.env:add_item(pos, item) -end - -minetest.register_node("vines:vine", { - description = "Vine", - walkable = false, - climbable = true, - drop = 'vines:vines', - sunlight_propagates = true, - paramtype = "light", - tiles = { "vines_vine.png" }, - drawtype = "plantlike", - inventory_image = "vines_vine.png", - groups = { snappy = 3,flammable=2 }, - sounds = default.node_sound_leaves_defaults(), -}) - -minetest.register_node("vines:vine_rotten", { - description = "Rotten vine", - walkable = false, - climbable = true, - drop = 'vines:vines', - sunlight_propagates = true, - paramtype = "light", - tiles = { "vines_vine_rotten.png" }, - drawtype = "plantlike", - inventory_image = "vines_vine_rotten.png", - groups = { snappy = 3,flammable=2 }, - sounds = default.node_sound_leaves_defaults(), - after_dig_node = function(pos, oldnode, oldmetadata, digger) - local inv = digger:get_inventory() - local item = 'vines:vines' - local p = {x=pos.x, y=pos.y-1, z=pos.z} - local vine = oldnode.name - while minetest.env:get_node(p).name == vine do - minetest.env:remove_node(p) - dropitem(item, p, inv) - p.y = p.y-1 - end - local about = {x=pos.x, y=pos.y+1, z=pos.z} - if minetest.env:get_node(about).name == vine then - minetest.env:add_node(about, {name="vines:vine"}) - end - end -}) - ---ABM -local function get_vine_random(pos) - return PseudoRandom(math.abs(pos.x+pos.y*3+pos.z*5)+vine_seed) -end - -minetest.register_abm({ --"sumpf:leaves", "jungletree:leaves_green", "jungletree:leaves_yellow", "jungletree:leaves_red", - nodenames = {"default:dirt_with_grass"}, - interval = 80, - chance = 200, - action = function(pos, node) - - local p = {x=pos.x, y=pos.y-1, z=pos.z} - local n = minetest.env:get_node(p) - - if n.name =="air" then - minetest.env:add_node(p, {name="vines:vine"}) - print("[vines] vine grew at: ("..p.x..", "..p.y..", "..p.z..")") - end - end -}) - -minetest.register_abm({ - nodenames = {"vines:vine"}, - interval = 5, - chance = 4, - action = function(pos, node, active_object_count, active_object_count_wider) - - local s_pos = "("..pos.x..", "..pos.y..", "..pos.z..")" - - --remove if top node is removed - if minetest.env:get_node({x=pos.x, y=pos.y+1, z=pos.z}).name == "air" then - minetest.env:remove_node(pos) - print("[vines] vine removed at: "..s_pos) - return - end - - minetest.env:add_node(pos, {name="vines:vine_rotten"}) - - local p = {x=pos.x, y=pos.y-1, z=pos.z} - local n = minetest.env:get_node(p) - local pr = get_vine_random(pos) - - --the second argument in the random function represents the average height - if pr:next(1,4) == 1 then - print("[vines] vine ended at: "..s_pos) - return - end - - if n.name =="air" then - minetest.env:add_node(p, {name="vines:vine"}) - print("[vines] vine got longer at: ("..p.x..", "..p.y..", "..p.z..")") - end - end -}) - -minetest.register_abm({ - nodenames = {"vines:vine_rotten"}, - interval = 60, - chance = 4, - action = function(pos, node, active_object_count, active_object_count_wider) - - local p = {x=pos.x, y=pos.y-1, z=pos.z} - local n = minetest.env:get_node(p) - local n_about = minetest.env:get_node({x=pos.x, y=pos.y+1, z=pos.z}).name - local pr = get_vine_random(pos) - - -- only remove if nothing is hangin on the bottom of it. - if ( - n.name ~="vines:vine" - and n.name ~="vines:vine_rotten" - and n_about ~= "default:dirt" - and n_about ~= "default:dirt_with_grass" - and pr:next(1,4) ~= 1 - ) - or n_about == "air" then - minetest.env:remove_node(pos) - print("[vines] rotten vine disappeared at: ("..pos.x..", "..pos.y..", "..pos.z..")") - end - - end -}) - -minetest.register_abm({ - nodenames = {"default:dirt", "default:dirt_with_grass"}, - interval = 36000, - chance = 10, - action = function(pos, node, active_object_count, active_object_count_wider) - - local p = {x=pos.x, y=pos.y-1, z=pos.z} - local n = minetest.env:get_node(p) - - --remove if top node is removed - if n.name == "air" and is_node_in_cube ({"vines:vine"}, pos, 3) then - minetest.env:add_node(p, {name="vines:vine"}) - print("[vines] vine grew at: ("..p.x..", "..p.y..", "..p.z..")") - end - end -}) - -minetest.register_abm({ - nodenames = {"vines:rope_end"}, - interval = 1, - chance = 1, - action = function(pos, node, active_object_count, active_object_count_wider) - - local p = {x=pos.x, y=pos.y-1, z=pos.z} - local n = minetest.env:get_node(p) - - --remove if top node is removed - if n.name == "air" then - minetest.env:add_node(pos, {name="vines:rope"}) - minetest.env:add_node(p, {name="vines:rope_end"}) - end - end -}) - -function is_node_in_cube(nodenames, pos, s) - for i = -s, s do - for j = -s, s do - for k = -s, s do - local n = minetest.get_node_or_nil({x=pos.x+i, y=pos.y+j, z=pos.z+k}) - if n == nil - or n.name == 'ignore' - or table_contains(nodenames, n.name) == true then - return true - end - end - end - end - return false -end - -table_contains = function(t, v) - for _,i in ipairs(t) do - if i == v then - return true - end - end - return false -end - --- craft rope -minetest.register_craft({ - output = 'vines:rope_block', - recipe = { - {'', 'default:wood', ''}, - {'', 'vines:vines', ''}, - {'', 'vines:vines', ''}, - } -}) - -minetest.register_craftitem("vines:vines", { - description = "Vines", - inventory_image = "vines_vine.png", -}) -print("[Vines] v1.1 loaded") diff --git a/mods/vines/textures/vines_rope.png b/mods/vines/textures/vines_rope.png deleted file mode 100644 index b700ac43c43ec0a89a708af212fb3b18aa9dcd47..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 172 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!93?!50ihlx9jKx9jP7LeL$-D$|cmjMvT!AzY zI9M43c-oqze4Ys8FqQ=Q1v5B2yO9RuNS3%plsM<-=BDPAFgO>bCYGe8D3oWGWGJ|M z`UZqI@`(c#$#}XrhHzX@PDuED=)i#kR*W7S*cmuqayvBD7&08P=XSjrb;uW}j=|H_ K&t;ucLK6UA?k+n3 diff --git a/mods/vines/textures/vines_rope_normal.png b/mods/vines/textures/vines_rope_normal.png deleted file mode 100644 index c1ece32c6aba268f6d30325db4ebc62b506beb1a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 234 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`k|nMYCC>S|xv6<249-QVi6yBi z3gww484B*6z5(HleBwYwJ)SO(Ar`0KPT0tM*no$n-zb|kV4>+-1!f7!1KrC61VmSA z7}h3CdwFKsfA&9|2XlXanW+AA@`_3);cL&8_U{y7%;WI(&M4#YJIx@)7$q+v%yprp zGwFFl?tHrfAJ(|Zhd3C8Y~LL(2v+~@V%nbIW}*1~$ZeUmeGhHI_R7TY{d=z9%Ez#V fqhz^(^8xYm{G}0MWhdK#?qcwC^>bP0l+XkKm`YJ9 diff --git a/mods/vines/textures/vines_rope_shadow.png b/mods/vines/textures/vines_rope_shadow.png deleted file mode 100644 index 6a5ed789623610ae0961bfcbeeaa4c697c662631..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 200 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|BuiW)N}Tg^ zb5rw57@Uhz6H8K46v{J8G8EiBeFMT9`NV;WVm)0PLo80ey>O7T!9l?J;`4@%8y%(* zeeT?wRH}s%ziwJ|BC7G3#3X*s=~`P}7;0v_v|IF6un3v0Y5mlqn*Pn)VS!sP!y3tX u^ICtm9BA0dkYQvK_w29yANiVJ&CHj->9~eFtIh^m#Ng@b=d#Wzp$P!13q`&F diff --git a/mods/vines/textures/vines_vine.png b/mods/vines/textures/vines_vine.png deleted file mode 100644 index 564726bbe473ab4ede62b0f76eeee85f45de5a51..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 173 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!93?!50ihlx9jKx9jP7LeL$-D$|I0Jk_Tt9DP zP&AX%301dszZd~hQ4-`A%;50sMjDXg>gnPb!f`!0Au&TBAp=Mx1texnNJvPWqi}#h z>~TUyK*ECp2BA4Ty$)i+&P*Kv4FWnbd=9xjJTT0Zz{Jp3$Nt0XZ2UE#fefCmelF{r G5}E)?O)m2Q diff --git a/mods/vines/textures/vines_vine_normal.png b/mods/vines/textures/vines_vine_normal.png deleted file mode 100644 index 7e4afd484edc0fa93f4153118c9389a4035a8f5b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 336 zcmV-W0k8gvP) zF%E(-7=^!@vN+((Jy^H^AtBtu*$WWQWSV#bj^d1i3qxI$7_{NHP>Bg|ZqoO^zP|s# z0D0ZobKP2mke+v)+psWnowqiPZd4{wzr46CFE;JAXbwOJm>-Y62O`kNVy9jiK@41j z+}RM*D_$ka0D8!XCh+6~#d`wg!6>g=n|<+y5Yqq>FJ)XQ9*XxSoce~nVxC^|Ch)4* z0p2E)V(}bU32Y>8Kb037ihvfmop4F1rHSQ}^?MlIFori zkXDvdG?U9dYH0>iQ4-`A%;50sMjDXg>gnPb!f`$MK|)4A0)wy+53d%F91m|7k4%rS zh(v^h6pI3j_Kc@T1P&ZHbc7?t(2&ERz`&4U>qbk4t%g9_&`_i4C_}LX`>frMJ<5Ov OGI+ZBxvX zF$#k)7==GeTsqj;qd424i$l7kVzpwbMvM3+kw9Kv-v9ET zg(xf4Ju4N4FkRob?!d~}35fSc92Y96j(`U|tZbI!kwv8n+$V|joeu(B02jzDA2|go zKxzeQMv3o8?bguJ-XRap=abV^T(lW22CcZbYDT}J>6silcRK{B6&F)aPuE5_i*Ij?Fq(I|N>srS z7lXMUcw>a=ypKuBrb2yhjIide9_1DzV5;06ME}zXm+Ar2O*m5z7~P7e^nkq;Z>ts0 dm6WUJzzcF8qF8G^_?Q3y002ovPDHLkV1k#Cj@