add whirlpools

This commit is contained in:
j1233 2021-04-05 09:19:05 +00:00
parent f28d8632a4
commit f0a67cf749
1 changed files with 211 additions and 16 deletions

View File

@ -10,8 +10,8 @@ if minetest.features.use_texture_alpha_string_modes then
WATER_ALPHA = nil WATER_ALPHA = nil
end end
minetest.register_node("mcl_bubble_column:water_flowing", { minetest.register_node("mcl_bubble_column:water_flowing_up", {
description = S("Bubble Column Flowing Water"), description = S("Bubble Column Flowing Water (up)"),
_doc_items_create_entry = false, _doc_items_create_entry = false,
wield_image = "default_water_flowing_animated.png^[verticalframe:64:0", wield_image = "default_water_flowing_animated.png^[verticalframe:64:0",
drawtype = "flowingliquid", drawtype = "flowingliquid",
@ -41,8 +41,8 @@ minetest.register_node("mcl_bubble_column:water_flowing", {
drop = "", drop = "",
drowning = 4, drowning = 4,
liquidtype = "flowing", liquidtype = "flowing",
liquid_alternative_flowing = "mcl_bubble_column:water_flowing", liquid_alternative_flowing = "mcl_bubble_column:water_flowing_up",
liquid_alternative_source = "mcl_bubble_column:water_source", liquid_alternative_source = "mcl_bubble_column:water_source_up",
liquid_viscosity = WATER_VISC, liquid_viscosity = WATER_VISC,
liquid_range = 7, liquid_range = 7,
post_effect_color = {a=209, r=0x03, g=0x3C, b=0x5C}, post_effect_color = {a=209, r=0x03, g=0x3C, b=0x5C},
@ -52,7 +52,7 @@ minetest.register_node("mcl_bubble_column:water_flowing", {
_mcl_hardness = -1, _mcl_hardness = -1,
}) })
minetest.register_node("mcl_bubble_column:water_source", { minetest.register_node("mcl_bubble_column:water_source_up", {
description = S("Bubble Column Water Source"), description = S("Bubble Column Water Source"),
_doc_items_entry_name = S("Water"), _doc_items_entry_name = S("Water"),
_doc_items_longdesc = S("Boosts you up"), _doc_items_longdesc = S("Boosts you up"),
@ -81,8 +81,8 @@ minetest.register_node("mcl_bubble_column:water_source", {
drop = "", drop = "",
drowning = 4, drowning = 4,
liquidtype = "source", liquidtype = "source",
liquid_alternative_flowing = "mcl_bubble_column:water_flowing", liquid_alternative_flowing = "mcl_bubble_column:water_flowing_up",
liquid_alternative_source = "mcl_bubble_column:water_source", liquid_alternative_source = "mcl_bubble_column:water_source_up",
liquid_viscosity = WATER_VISC, liquid_viscosity = WATER_VISC,
liquid_range = 7, liquid_range = 7,
post_effect_color = {a=209, r=0x03, g=0x3C, b=0x5C}, post_effect_color = {a=209, r=0x03, g=0x3C, b=0x5C},
@ -93,30 +93,44 @@ minetest.register_node("mcl_bubble_column:water_source", {
_mcl_hardness = -1, _mcl_hardness = -1,
}) })
minetest.register_globalstep(function() minetest.register_globalstep(function()
for _,player in ipairs(minetest.get_connected_players()) do for _,player in ipairs(minetest.get_connected_players()) do
local name = player:get_player_name() local name = player:get_player_name()
local pos = player:get_pos() local pos = player:get_pos()
local node = minetest.get_node(pos) local node = minetest.get_node(pos)
if node.name == "mcl_bubble_column:water_source" then if node.name == "mcl_bubble_column:water_source_up" then
local velocity = player:get_player_velocity() local velocity = player:get_player_velocity()
local velocityadd = {x = 0, y = 2, z = 0} local velocityadd = {x = 0, y = 3, z = 0}
player:add_player_velocity(velocityadd) player:add_player_velocity(velocityadd)
end end
end end
end) end)
minetest.register_abm{
label = "entities go up",
nodenames = {"mcl_bubble_column:water_source_up"},
interval = 0.05,
chance = 1,
action = function(pos)
for _,entity in pairs(minetest.get_objects_inside_radius(pos, 1.5)) do
local pos = entity:get_pos()
local velocity = entity:get_velocity()
local velocityadd = {x = 0, y = 2, z = 0}
entity:add_velocity(velocityadd)
end
end,
}
minetest.register_abm{ minetest.register_abm{
label = "bubbles go up", label = "bubbles go up",
nodenames = {"mcl_bubble_column:water_source"}, nodenames = {"mcl_bubble_column:water_source_up"},
interval = 1, interval = 1,
chance = 1, chance = 1,
action = function(pos) action = function(pos)
local uppos = vector.add(pos, {x = 0, y = 1, z = 0}) local uppos = vector.add(pos, {x = 0, y = 1, z = 0})
local upposnode = minetest.get_node(uppos) local upposnode = minetest.get_node(uppos)
if upposnode.name == "mcl_core:water_source" then if upposnode.name == "mcl_core:water_source" then
minetest.set_node(uppos, {name = "mcl_bubble_column:water_source"}) minetest.set_node(uppos, {name = "mcl_bubble_column:water_source_up"})
end end
end, end,
} }
@ -130,14 +144,14 @@ minetest.register_abm{
local downpos = vector.add(pos, {x = 0, y = 1, z = 0}) local downpos = vector.add(pos, {x = 0, y = 1, z = 0})
local downposnode = minetest.get_node(downpos) local downposnode = minetest.get_node(downpos)
if downposnode.name == "mcl_core:water_source" then if downposnode.name == "mcl_core:water_source" then
minetest.set_node(downpos, {name = "mcl_bubble_column:water_source"}) minetest.set_node(downpos, {name = "mcl_bubble_column:water_source_up"})
end end
end, end,
} }
minetest.register_abm{ minetest.register_abm{
label = "stop bubble column", label = "stop bubble column",
nodenames = {"mcl_bubble_column:water_source"}, nodenames = {"mcl_bubble_column:water_source_up"},
interval = 1, interval = 1,
chance = 1, chance = 1,
action = function(pos) action = function(pos)
@ -149,8 +163,8 @@ minetest.register_abm{
end, end,
} }
minetest.register_abm{ minetest.register_abm{
label = "bubbles", label = "bubbles up",
nodenames = {"mcl_bubble_column:water_source"}, nodenames = {"mcl_bubble_column:water_source_up"},
interval = 1, interval = 1,
chance = 1, chance = 1,
action = function(pos) action = function(pos)
@ -172,3 +186,184 @@ minetest.register_abm{
}) })
end, end,
} }
--whirlpools(take you down)
minetest.register_node("mcl_bubble_column:water_flowing_down", {
description = S("Bubble Column Flowing Water(down)"),
_doc_items_create_entry = false,
wield_image = "default_water_flowing_animated.png^[verticalframe:64:0",
drawtype = "flowingliquid",
tiles = {"default_water_flowing_animated.png^[verticalframe:64:0"},
special_tiles = {
{
image="default_water_flowing_animated.png",
backface_culling=false,
animation={type="vertical_frames", aspect_w=16, aspect_h=16, length=4.0}
},
{
image="default_water_flowing_animated.png",
backface_culling=false,
animation={type="vertical_frames", aspect_w=16, aspect_h=16, length=4.0}
},
},
sounds = mcl_sounds.node_sound_water_defaults(),
is_ground_content = false,
alpha = WATER_ALPHA,
use_texture_alpha = USE_TEXTURE_ALPHA,
paramtype = "light",
paramtype2 = "flowingliquid",
walkable = false,
pointable = false,
diggable = false,
buildable_to = true,
drop = "",
drowning = 4,
liquidtype = "flowing",
liquid_alternative_flowing = "mcl_bubble_column:water_flowing_down",
liquid_alternative_source = "mcl_bubble_column:water_source_down",
liquid_viscosity = WATER_VISC,
liquid_range = 7,
post_effect_color = {a=209, r=0x03, g=0x3C, b=0x5C},
groups = { water=3, liquid=3, puts_out_fire=1, not_in_creative_inventory=1, freezes=1, melt_around=1, dig_by_piston=1},
_mcl_blast_resistance = 100,
-- Hardness intentionally set to infinite instead of 100 (Minecraft value) to avoid problems in creative mode
_mcl_hardness = -1,
})
minetest.register_node("mcl_bubble_column:water_source_down", {
description = S("Whirlpool Water Source"),
_doc_items_entry_name = S("Water"),
_doc_items_longdesc = S("Takes you down!"),
_doc_items_hidden = false,
drawtype = "liquid",
tiles = {
{name="default_water_source_animated.png", animation={type="vertical_frames", aspect_w=16, aspect_h=16, length=5.0}}
},
special_tiles = {
-- New-style water source material (mostly unused)
{
name="default_water_source_animated.png",
animation={type="vertical_frames", aspect_w=16, aspect_h=16, length=5.0},
backface_culling = false,
}
},
sounds = mcl_sounds.node_sound_water_defaults(),
is_ground_content = false,
alpha = WATER_ALPHA,
use_texture_alpha = USE_TEXTURE_ALPHA,
paramtype = "light",
walkable = false,
pointable = false,
diggable = false,
buildable_to = true,
drop = "",
drowning = 4,
liquidtype = "source",
liquid_alternative_flowing = "mcl_bubble_column:water_flowing_down",
liquid_alternative_source = "mcl_bubble_column:water_source_down",
liquid_viscosity = WATER_VISC,
liquid_range = 7,
post_effect_color = {a=209, r=0x03, g=0x3C, b=0x5C},
stack_max = 64,
groups = { water=3, liquid=3, puts_out_fire=1, not_in_creative_inventory=1, dig_by_piston=1},
_mcl_blast_resistance = 100,
-- Hardness intentionally set to infinite instead of 100 (Minecraft value) to avoid problems in creative mode
_mcl_hardness = -1,
})
minetest.register_globalstep(function()
for _,player in ipairs(minetest.get_connected_players()) do
local name = player:get_player_name()
local pos = player:get_pos()
local node = minetest.get_node(pos)
if node.name == "mcl_bubble_column:water_source_down" then
local velocity = player:get_player_velocity()
local velocityadd = {x = 0, y = -0.5, z = 0}
player:add_player_velocity(velocityadd)
end
end
end)
minetest.register_abm{
label = "entities go down",
nodenames = {"mcl_bubble_column:water_source_down"},
interval = 0.05,
chance = 1,
action = function(pos)
for _,entity in pairs(minetest.get_objects_inside_radius(pos, 1.5)) do
local pos = entity:get_pos()
local velocity = entity:get_velocity()
local velocityadd = {x = 0, y = -3, z = 0}
entity:add_velocity(velocityadd)
end
end,
}
minetest.register_abm{
label = "whirlpools go up",
nodenames = {"mcl_bubble_column:water_source_down"},
interval = 1,
chance = 1,
action = function(pos)
local uppos = vector.add(pos, {x = 0, y = 1, z = 0})
local upposnode = minetest.get_node(uppos)
if upposnode.name == "mcl_core:water_source" then
minetest.set_node(uppos, {name = "mcl_bubble_column:water_source_down"})
end
end,
}
minetest.register_abm{
label = "start whirlpool",
nodenames = {"mcl_nether:magma"},
interval = 1,
chance = 1,
action = function(pos)
local downpos = vector.add(pos, {x = 0, y = 1, z = 0})
local downposnode = minetest.get_node(downpos)
if downposnode.name == "mcl_core:water_source" then
minetest.set_node(downpos, {name = "mcl_bubble_column:water_source_down"})
end
end,
}
minetest.register_abm{
label = "stop whirlpool",
nodenames = {"mcl_bubble_column:water_source_down"},
interval = 1,
chance = 1,
action = function(pos)
local downpos = vector.add(pos, {x = 0, y = -1, z = 0})
local downposnode = minetest.get_node(downpos)
if downposnode.name == "mcl_core:water_source" then
minetest.set_node(pos, {name = "mcl_core:water_source"})
end
end,
}
minetest.register_abm{
label = "bubbles down",
nodenames = {"mcl_bubble_column:water_source_down"},
interval = 1,
chance = 1,
action = function(pos)
minetest.add_particlespawner({
amount = 10,
time = 0.15,
minpos = vector.add(pos, { x = -0.25, y = 0, z = -0.25 }),
maxpos = vector.add(pos, { x = 0.25, y = 0, z = 0.75 }),
attached = player,
minvel = {x = -0.2, y = 0, z = -0.2},
maxvel = {x = 0.5, y = 0, z = 0.5},
minacc = {x = -0.4, y = -4, z = -0.4},
maxacc = {x = 0.5, y = -1, z = 0.5},
minexptime = 0.3,
maxexptime = 0.8,
minsize = 0.7,
maxsize = 2.4,
texture = "mcl_particles_bubble.png"
})
end,
}