write something there
This commit is contained in:
commit
b4b6c08f4f
8546 changed files with 309825 additions and 0 deletions
259
mods/x_farming/ropes.lua
Normal file
259
mods/x_farming/ropes.lua
Normal file
|
@ -0,0 +1,259 @@
|
|||
--[[
|
||||
X Farming. Extends Minetest farming mod with new plants, crops and ice fishing.
|
||||
Copyright (C) 2024 SaKeL
|
||||
|
||||
This library 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 2.1 of the License, or (at your option) any later version.
|
||||
|
||||
This library 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
|
||||
Lesser General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Lesser General Public
|
||||
License along with this library; if not, write to juraj.vajda@gmail.com
|
||||
--]]
|
||||
|
||||
local S = minetest.get_translator(minetest.get_current_modname())
|
||||
|
||||
local function place_rope(pos, itemstack)
|
||||
local next_node = minetest.get_node(pos)
|
||||
local stack_name = itemstack:get_name()
|
||||
|
||||
while next_node.name == 'air' and not itemstack:is_empty() do
|
||||
minetest.set_node(pos, { name = stack_name, param1 = 0 })
|
||||
itemstack:take_item()
|
||||
pos.y = pos.y - 1
|
||||
next_node = minetest.get_node(pos)
|
||||
end
|
||||
|
||||
return itemstack
|
||||
end
|
||||
|
||||
minetest.register_node('x_farming:rope', {
|
||||
description = S('Rope\n') .. '. ' .. minetest.colorize('#d0ffd0',S('Place on rope to extend down')),
|
||||
drawtype = 'plantlike',
|
||||
walkable = false,
|
||||
paramtype = 'light',
|
||||
sunlight_propagates = true,
|
||||
climbable = true,
|
||||
wield_scale = { x = 2, y = 2, z = 1 },
|
||||
groups = {
|
||||
-- MTG
|
||||
snappy = 3,
|
||||
flammable = 3,
|
||||
rope = 1,
|
||||
},
|
||||
tiles = { 'x_farming_rope.png' },
|
||||
inventory_image = 'x_farming_rope_item.png',
|
||||
wield_image = 'x_farming_rope_item.png',
|
||||
selection_box = {
|
||||
type = 'fixed',
|
||||
fixed = { -2 / 16, -0.5, -2 / 16, 2 / 16, 0.5, 2 / 16 }
|
||||
},
|
||||
sounds = x_farming.node_sound_rope_defaults(),
|
||||
on_place = function(itemstack, placer, pointed_thing)
|
||||
local control = placer:get_player_control()
|
||||
local pt_pos = minetest.get_pointed_thing_position(pointed_thing)
|
||||
|
||||
if pt_pos and pointed_thing.type == 'node' then
|
||||
local pt_node = minetest.get_node(pt_pos)
|
||||
|
||||
if minetest.is_protected(pt_pos, placer:get_player_name()) then
|
||||
return itemstack
|
||||
end
|
||||
|
||||
local pt_node_def = minetest.registered_nodes[pt_node.name]
|
||||
|
||||
-- check if we have to use default on_place first
|
||||
if pt_node_def.on_rightclick then
|
||||
return pt_node_def.on_rightclick(pt_pos, pt_node, placer, itemstack, pointed_thing)
|
||||
end
|
||||
end
|
||||
|
||||
-- placing rope on rope
|
||||
if pt_pos and not control.sneak then
|
||||
local pt_node = minetest.get_node(pt_pos)
|
||||
|
||||
if minetest.get_item_group(pt_node.name, 'rope') > 0 then
|
||||
-- add to rope
|
||||
local _pos = vector.new(pt_pos)
|
||||
local next_node = minetest.get_node(_pos)
|
||||
|
||||
while minetest.get_item_group(next_node.name, 'rope') > 0 do
|
||||
_pos.y = _pos.y - 1
|
||||
next_node = minetest.get_node(_pos)
|
||||
end
|
||||
|
||||
return place_rope(_pos, itemstack)
|
||||
end
|
||||
end
|
||||
|
||||
if pointed_thing.type == 'node' then
|
||||
local pos = pointed_thing.above
|
||||
|
||||
if minetest.is_protected(pos, placer:get_player_name()) then
|
||||
return itemstack
|
||||
end
|
||||
|
||||
return place_rope(pos, itemstack)
|
||||
end
|
||||
|
||||
return itemstack
|
||||
end,
|
||||
on_punch = function(pos, node, puncher, pointed_thing)
|
||||
if minetest.is_protected(pos, puncher:get_player_name()) then
|
||||
return
|
||||
end
|
||||
|
||||
local count = 0
|
||||
local below = vector.new(pos)
|
||||
local node_below = minetest.get_node(below)
|
||||
|
||||
while minetest.get_item_group(node_below.name, 'rope') > 0 do
|
||||
minetest.remove_node(below)
|
||||
below.y = below.y - 1
|
||||
count = count + 1
|
||||
node_below = minetest.get_node(below)
|
||||
end
|
||||
|
||||
if count == 0 then
|
||||
return
|
||||
end
|
||||
|
||||
local stacks = {}
|
||||
local node_stack = ItemStack({ name = node.name })
|
||||
local stack_max = node_stack:get_stack_max()
|
||||
local stack_count = count
|
||||
|
||||
if stack_count > stack_max then
|
||||
while stack_count > 0 do
|
||||
if stack_count > stack_max then
|
||||
stack_count = stack_count - stack_max
|
||||
table.insert(stacks, ItemStack({ name = node.name, count = stack_max }))
|
||||
else
|
||||
table.insert(stacks, ItemStack({ name = node.name, count = stack_count }))
|
||||
stack_count = 0
|
||||
end
|
||||
end
|
||||
else
|
||||
table.insert(stacks, ItemStack({ name = node.name, count = count }))
|
||||
end
|
||||
|
||||
local inv = puncher:get_inventory()
|
||||
|
||||
for _, stack in ipairs(stacks) do
|
||||
if inv and inv:room_for_item('main', stack) then
|
||||
inv:add_item('main', stack)
|
||||
else
|
||||
-- drop on the ground
|
||||
minetest.add_item(puncher:get_pos(), stack)
|
||||
end
|
||||
end
|
||||
|
||||
return true
|
||||
end,
|
||||
})
|
||||
|
||||
minetest.register_node('x_farming:safety_net', {
|
||||
description = S('Safety Net. No fall damage when landing on this net.'),
|
||||
drawtype = 'nodebox',
|
||||
node_box = {
|
||||
type = 'fixed',
|
||||
fixed = { -8 / 16, -8 / 16, -8 / 16, 8 / 16, -7 / 16, 8 / 16 },
|
||||
},
|
||||
selection_box = {
|
||||
type = 'fixed',
|
||||
fixed = { -8 / 16, -8 / 16, -8 / 16, 8 / 16, -6 / 16, 8 / 16 }
|
||||
},
|
||||
tiles = {
|
||||
'x_farming_safety_net.png',
|
||||
'x_farming_safety_net.png',
|
||||
'x_farming_safety_net_side.png',
|
||||
},
|
||||
use_texture_alpha = 'clip',
|
||||
wield_image = 'x_farming_safety_net.png',
|
||||
inventory_image = 'x_farming_safety_net.png',
|
||||
paramtype = 'light',
|
||||
sunlight_propagates = true,
|
||||
wield_scale = { x = 2, y = 2, z = 1 },
|
||||
groups = {
|
||||
-- MTG
|
||||
snappy = 3,
|
||||
flammable = 3,
|
||||
bouncy = 33,
|
||||
fall_damage_add_percent = -100,
|
||||
-- MCL
|
||||
handy = 1,
|
||||
hoey = 1,
|
||||
shearsy = 1,
|
||||
swordy = 1
|
||||
},
|
||||
_mcl_hardness = 0.2,
|
||||
sounds = x_farming.node_sound_rope_defaults()
|
||||
})
|
||||
|
||||
minetest.register_node('x_farming:rope_fence', {
|
||||
description = S('Rope') .. ' ' .. S('Fence'),
|
||||
drawtype = 'nodebox',
|
||||
paramtype = 'light',
|
||||
climbable = true,
|
||||
wield_scale = { x = 2, y = 2, z = 1 },
|
||||
node_box = {
|
||||
type = 'connected',
|
||||
fixed = { -1 / 16, -1 / 2, -1 / 16, 1 / 16, 1 / 2, 1 / 16 },
|
||||
-- connect_top =
|
||||
-- connect_bottom =
|
||||
connect_front = {
|
||||
{ 0, -8 / 16, -8 / 16, 0, 7 / 16, -1 / 16 }
|
||||
},
|
||||
connect_left = {
|
||||
{ -1 / 2, -1 / 2, 0, -1 / 16, 7 / 16, 0 }
|
||||
},
|
||||
connect_back = {
|
||||
{ 0, -8 / 16, 1 / 16, 0, 7 / 16, 1 / 2 }
|
||||
},
|
||||
connect_right = {
|
||||
{ 1 / 16, -1 / 2, 0, 1 / 2, 7 / 16, 0 }
|
||||
}
|
||||
},
|
||||
collision_box = {
|
||||
type = 'connected',
|
||||
fixed = { -1 / 8, -1 / 2, -1 / 8, 1 / 8, 1 / 2, 1 / 8 },
|
||||
-- connect_top =
|
||||
-- connect_bottom =
|
||||
connect_front = { -1 / 8, -1 / 2, -1 / 2, 1 / 8, 1 / 2, -1 / 8 },
|
||||
connect_left = { -1 / 2, -1 / 2, -1 / 8, -1 / 8, 1 / 2, 1 / 8 },
|
||||
connect_back = { -1 / 8, -1 / 2, 1 / 8, 1 / 8, 1 / 2, 1 / 2 },
|
||||
connect_right = { 1 / 8, -1 / 2, -1 / 8, 1 / 2, 1 / 2, 1 / 8 }
|
||||
},
|
||||
connects_to = {
|
||||
-- MTG
|
||||
'group:fence',
|
||||
'group:wood',
|
||||
'group:tree',
|
||||
'group:wall',
|
||||
'group:stone',
|
||||
},
|
||||
inventory_image = 'x_farming_rope_fence_item.png',
|
||||
wield_image = 'x_farming_rope_fence_item.png',
|
||||
tiles = { 'x_farming_rope_fence.png' },
|
||||
use_texture_alpha = 'clip',
|
||||
sunlight_propagates = true,
|
||||
is_ground_content = false,
|
||||
groups = {
|
||||
-- MTG
|
||||
fence = 1,
|
||||
snappy = 3,
|
||||
flammable = 2,
|
||||
-- MCL
|
||||
handy = 1,
|
||||
hoey = 1,
|
||||
shearsy = 1,
|
||||
swordy = 1
|
||||
},
|
||||
_mcl_hardness = 0.2,
|
||||
sounds = x_farming.node_sound_rope_defaults()
|
||||
})
|
Loading…
Add table
Add a link
Reference in a new issue