diff --git a/minetest.conf b/minetest.conf index 14344ef21..3e80f10f3 100644 --- a/minetest.conf +++ b/minetest.conf @@ -32,7 +32,12 @@ mgvalleys_spflags = noaltitude_chill,noaltitude_dry,nohumid_rivers,vary_river_de # MCL2-specific stuff keepInventory = false -dedicated_server_step = 0.001 +# Performance settings +dedicated_server_step = 0.01 +liquid_update = 0.25 +abm_interval = 0.25 +max_objects_per_block = 4096 +max_packets_per_iteration = 10096 # Clientmodding to support official client enable_client_modding = true diff --git a/mods/CORE/mcl_explosions/init.lua b/mods/CORE/mcl_explosions/init.lua index 379d57001..2ac6eb0c6 100644 --- a/mods/CORE/mcl_explosions/init.lua +++ b/mods/CORE/mcl_explosions/init.lua @@ -335,13 +335,13 @@ local function trace_explode(pos, strength, raydirs, radius, info, puncher) minetest.after(0.3, function(obj, damage, impact, punch_dir) -- 0.2 is minimum delay for closing old formspec and open died formspec -- TODO: REMOVE THIS IN THE FUTURE if not obj then return end obj:punch(obj, 10, { damage_groups = { full_punch_interval = 1, fleshy = damage, knockback = impact * 20.0 } }, punch_dir) - obj:add_player_velocity(vector.multiply(punch_dir, impact * 20)) + obj:add_velocity(vector.multiply(punch_dir, impact * 20)) end, obj, damage, impact, vector.new(punch_dir)) else obj:punch(source, 10, { damage_groups = { full_punch_interval = 1, fleshy = damage, knockback = impact * 20.0 } }, punch_dir) if obj:is_player() then - obj:add_player_velocity(vector.multiply(punch_dir, impact * 20)) + obj:add_velocity(vector.multiply(punch_dir, impact * 20)) elseif ent.tnt_knockback then obj:add_velocity(vector.multiply(punch_dir, impact * 20)) end diff --git a/mods/ENTITIES/mcl_mobs/api.lua b/mods/ENTITIES/mcl_mobs/api.lua index 6d74d9d78..0c8953079 100644 --- a/mods/ENTITIES/mcl_mobs/api.lua +++ b/mods/ENTITIES/mcl_mobs/api.lua @@ -751,10 +751,10 @@ local check_for_death = function(self, cause, cmi_cause) -- play damage sound if health was reduced and make mob flash red. if damaged then - add_texture_mod(self, "^[colorize:#FF000040") + add_texture_mod(self, "^[colorize:red:130") minetest.after(.2, function(self) if self and self.object then - remove_texture_mod(self, "^[colorize:#FF000040") + remove_texture_mod(self, "^[colorize:red:130") end end, self) mob_sound(self, "damage") diff --git a/mods/ENTITIES/mcl_mobs/mount.lua b/mods/ENTITIES/mcl_mobs/mount.lua index 8c4a6aa55..d8ce484c3 100644 --- a/mods/ENTITIES/mcl_mobs/mount.lua +++ b/mods/ENTITIES/mcl_mobs/mount.lua @@ -154,7 +154,7 @@ function mobs.attach(entity, player) minetest.after(0.2, function(name) local player = minetest.get_player_by_name(name) if player then - mcl_player.player_set_animation(player, "sit" , 30) + mcl_player.player_set_animation(player, "sit_mount" , 30) end end, player:get_player_name()) diff --git a/mods/ITEMS/mcl_armor/armor.lua b/mods/ITEMS/mcl_armor/armor.lua index a59811b8e..a879f7240 100644 --- a/mods/ITEMS/mcl_armor/armor.lua +++ b/mods/ITEMS/mcl_armor/armor.lua @@ -366,6 +366,7 @@ mcl_player.player_register_model("mcl_armor_character.b3d", { swim_mine = {x=411, y=430}, run_walk = {x=440, y=459}, run_walk_mine = {x=461, y=480}, + sit_mount = {x=484, y=484}, }, }) @@ -393,6 +394,7 @@ mcl_player.player_register_model("mcl_armor_character_female.b3d", { swim_mine = {x=411, y=430}, run_walk = {x=440, y=459}, run_walk_mine = {x=461, y=480}, + sit_mount = {x=484, y=484}, }, }) diff --git a/mods/ITEMS/mcl_armor/models/mcl_armor_character.b3d b/mods/ITEMS/mcl_armor/models/mcl_armor_character.b3d index a3ba4b90c..c6a1274c5 100644 Binary files a/mods/ITEMS/mcl_armor/models/mcl_armor_character.b3d and b/mods/ITEMS/mcl_armor/models/mcl_armor_character.b3d differ diff --git a/mods/ITEMS/mcl_armor/models/mcl_armor_character.blend b/mods/ITEMS/mcl_armor/models/mcl_armor_character.blend index c0b6d9b3b..88db35cf5 100644 Binary files a/mods/ITEMS/mcl_armor/models/mcl_armor_character.blend and b/mods/ITEMS/mcl_armor/models/mcl_armor_character.blend differ diff --git a/mods/ITEMS/mcl_armor/models/mcl_armor_character_female.b3d b/mods/ITEMS/mcl_armor/models/mcl_armor_character_female.b3d index b3f2dbbd3..cd2fca988 100644 Binary files a/mods/ITEMS/mcl_armor/models/mcl_armor_character_female.b3d and b/mods/ITEMS/mcl_armor/models/mcl_armor_character_female.b3d differ diff --git a/mods/ITEMS/mcl_armor/models/mcl_armor_character_female.blend b/mods/ITEMS/mcl_armor/models/mcl_armor_character_female.blend index f191e924f..098417b42 100644 Binary files a/mods/ITEMS/mcl_armor/models/mcl_armor_character_female.blend and b/mods/ITEMS/mcl_armor/models/mcl_armor_character_female.blend differ diff --git a/mods/ITEMS/mcl_core/mod.conf b/mods/ITEMS/mcl_core/mod.conf index 575c46655..9227d607e 100644 --- a/mods/ITEMS/mcl_core/mod.conf +++ b/mods/ITEMS/mcl_core/mod.conf @@ -1 +1 @@ -name = mcl_core +name = mcl_core \ No newline at end of file diff --git a/mods/ITEMS/mcl_farming/shared_functions.lua b/mods/ITEMS/mcl_farming/shared_functions.lua index 90f7d3373..c4cb2fd71 100644 --- a/mods/ITEMS/mcl_farming/shared_functions.lua +++ b/mods/ITEMS/mcl_farming/shared_functions.lua @@ -1,4 +1,6 @@ +mcl_farming.plant_lists = {} local plant_lists = {} + local plant_nodename_to_id_list = {} local function get_intervals_counter(pos, interval, chance) @@ -51,11 +53,12 @@ local function get_avg_light_level(pos) end function mcl_farming:add_plant(identifier, full_grown, names, interval, chance) - plant_lists[identifier] = {} - plant_lists[identifier].full_grown = full_grown - plant_lists[identifier].names = names - plant_lists[identifier].interval = interval - plant_lists[identifier].chance = chance + mcl_farming.plant_lists[identifier] = {} + mcl_farming.plant_lists[identifier].full_grown = full_grown + mcl_farming.plant_lists[identifier].names = names + mcl_farming.plant_lists[identifier].interval = interval + mcl_farming.plant_lists[identifier].chance = chance + plant_lists = mcl_farming.plant_lists --provide local copy of plant lists (performances) minetest.register_abm({ label = string.format("Farming plant growth (%s)", identifier), nodenames = names, diff --git a/mods/ITEMS/mcl_flowerpots/depends.txt b/mods/ITEMS/mcl_flowerpots/depends.txt deleted file mode 100644 index bc1609be2..000000000 --- a/mods/ITEMS/mcl_flowerpots/depends.txt +++ /dev/null @@ -1,5 +0,0 @@ -mcl_core -mcl_sounds -mcl_farming -mcl_flowers -doc? diff --git a/mods/ITEMS/mcl_flowerpots/init.lua b/mods/ITEMS/mcl_flowerpots/init.lua index 5a752c407..21d4c04e6 100644 --- a/mods/ITEMS/mcl_flowerpots/init.lua +++ b/mods/ITEMS/mcl_flowerpots/init.lua @@ -1,31 +1,8 @@ local S = minetest.get_translator("mcl_flowerpots") +local has_doc = minetest.get_modpath("doc") -local flowers = { - {"dandelion", "mcl_flowers:dandelion", S("Dandelion Flower Pot")}, - {"poppy", "mcl_flowers:poppy", S("Poppy Flower Pot")}, - {"blue_orchid", "mcl_flowers:blue_orchid", S("Blue Orchid Flower Pot")}, - {"allium", "mcl_flowers:allium", S("Allium Flower Pot")}, - {"azure_bluet", "mcl_flowers:azure_bluet", S("Azure Bluet Flower Pot")}, - {"tulip_red", "mcl_flowers:tulip_red", S("Red Tulip Flower Pot")}, - {"tulip_pink", "mcl_flowers:tulip_pink", S("Pink Tulip Flower Pot")}, - {"tulip_white", "mcl_flowers:tulip_white", S("White Tulip Flower Pot")}, - {"tulip_orange", "mcl_flowers:tulip_orange", S("Orange Tulip Flower Pot")}, - {"oxeye_daisy", "mcl_flowers:oxeye_daisy", S("Oxeye Daisy Flower Pot")}, - {"mushroom_brown", "mcl_mushrooms:mushroom_brown", S("Brown Mushroom Flower Pot")}, - {"mushroom_red", "mcl_mushrooms:mushroom_red", S("Red Mushroom Flower Pot")}, - {"sapling", "mcl_core:sapling", S("Oak Sapling Flower Pot")}, - {"acaciasapling", "mcl_core:acaciasapling", S("Acacia Sapling Flower Pot")}, - {"junglesapling", "mcl_core:junglesapling", S("Jungle Sapling Flower Pot")}, - {"darksapling", "mcl_core:darksapling", S("Dark Oak Sapling Flower Pot")}, - {"sprucesapling", "mcl_core:sprucesapling", S("Spruce Sapling Flower Pot")}, - {"birchsapling", "mcl_core:birchsapling", S("Birch Sapling Flower Pot")}, - {"deadbush", "mcl_core:deadbush", S("Dead Bush Flower Pot")}, - {"fern", "mcl_flowers:fern", S("Fern Flower Pot"), {"mcl_flowers_fern_inv.png"}}, -} - -local cubes = { - {"cactus", "mcl_core:cactus", S("Cactus Flower Pot")}, -} +mcl_flowerpots = {} +mcl_flowerpots.registered_pots = {} minetest.register_node("mcl_flowerpots:flower_pot", { description = S("Flower Pot"), @@ -62,24 +39,10 @@ minetest.register_node("mcl_flowerpots:flower_pot", { return end local item = clicker:get_wielded_item():get_name() - for _, row in ipairs(flowers) do - local flower = row[1] - local flower_node = row[2] - if item == flower_node then - minetest.swap_node(pos, {name="mcl_flowerpots:flower_pot_"..flower}) - if not minetest.is_creative_enabled(clicker:get_player_name()) then - itemstack:take_item() - end - end - end - for _, row in ipairs(cubes) do - local flower = row[1] - local flower_node = row[2] - if item == flower_node then - minetest.swap_node(pos, {name="mcl_flowerpots:flower_pot_"..flower}) - if not minetest.is_creative_enabled(clicker:get_player_name()) then - itemstack:take_item() - end + if mcl_flowerpots.registered_pots[item] then + minetest.swap_node(pos, {name="mcl_flowerpots:flower_pot_"..mcl_flowerpots.registered_pots[item]}) + if not minetest.is_creative_enabled(clicker:get_player_name()) then + itemstack:take_item() end end end, @@ -94,112 +57,160 @@ minetest.register_craft({ } }) -for _, row in ipairs(flowers) do -local flower = row[1] -local flower_node = row[2] -local desc = row[3] -local texture -if row[4] then - texture = row[4] -else - texture = minetest.registered_nodes[flower_node]["tiles"] -end -minetest.register_node("mcl_flowerpots:flower_pot_"..flower, { - description = desc, - _doc_items_create_entry = false, - drawtype = "mesh", - mesh = "flowerpot.obj", - tiles = { - "[combine:32x32:0,0=mcl_flowerpots_flowerpot.png:0,0="..texture[1], - }, - use_texture_alpha = minetest.features.use_texture_alpha_string_modes and "clip" or true, - visual_scale = 0.5, - wield_scale = {x=1.0, y=1.0, z=1.0}, - paramtype = "light", - sunlight_propagates = true, - selection_box = { - type = "fixed", - fixed = {-0.2, -0.5, -0.2, 0.2, -0.1, 0.2} - }, - collision_box = { - type = "fixed", - fixed = {-0.2, -0.5, -0.2, 0.2, -0.1, 0.2} - }, - is_ground_content = false, - groups = {dig_immediate=3, attached_node=1, dig_by_piston=1, not_in_creative_inventory=1, flower_pot=2}, - sounds = mcl_sounds.node_sound_stone_defaults(), - on_rightclick = function(pos, item, clicker) - local name = clicker:get_player_name() - if minetest.is_protected(pos, name) then - minetest.record_protection_violation(pos, name) - return - end - minetest.add_item({x=pos.x, y=pos.y+0.5, z=pos.z}, flower_node) - minetest.set_node(pos, {name="mcl_flowerpots:flower_pot"}) - end, - drop = { - items = { - { items = { "mcl_flowerpots:flower_pot", flower_node } } - } - }, -}) --- Add entry alias for the Help -if minetest.get_modpath("doc") then - doc.add_entry_alias("nodes", "mcl_flowerpots:flower_pot", "nodes", "mcl_flowerpots:flower_pot_"..flower) -end +function mcl_flowerpots.register_potted_flower(name, def) + mcl_flowerpots.registered_pots[name] = def.name + minetest.register_node(":mcl_flowerpots:flower_pot_"..def.name, { + description = def.desc.." "..S("Flower Pot"), + _doc_items_create_entry = false, + drawtype = "mesh", + mesh = "flowerpot.obj", + tiles = { + "[combine:32x32:0,0=mcl_flowerpots_flowerpot.png:0,0="..def.image, + }, + use_texture_alpha = minetest.features.use_texture_alpha_string_modes and "clip" or true, + visual_scale = 0.5, + wield_scale = {x=1.0, y=1.0, z=1.0}, + paramtype = "light", + sunlight_propagates = true, + selection_box = { + type = "fixed", + fixed = {-0.2, -0.5, -0.2, 0.2, -0.1, 0.2} + }, + collision_box = { + type = "fixed", + fixed = {-0.2, -0.5, -0.2, 0.2, -0.1, 0.2} + }, + is_ground_content = false, + groups = {dig_immediate=3, attached_node=1, dig_by_piston=1, not_in_creative_inventory=1, flower_pot=2}, + sounds = mcl_sounds.node_sound_stone_defaults(), + on_rightclick = function(pos, item, clicker) + local player_name = clicker:get_player_name() + if minetest.is_protected(pos, player_name) then + minetest.record_protection_violation(pos, player_name) + return + end + minetest.add_item({x=pos.x, y=pos.y+0.5, z=pos.z}, name) + minetest.set_node(pos, {name="mcl_flowerpots:flower_pot"}) + end, + drop = { + items = { + { items = { "mcl_flowerpots:flower_pot", name } } + } + }, + }) + -- Add entry alias for the Help + if has_doc then + doc.add_entry_alias("nodes", "mcl_flowerpots:flower_pot", "nodes", "mcl_flowerpots:flower_pot_"..name) + end end -for _, row in ipairs(cubes) do -local flower = row[1] -local flower_node = row[2] -local desc = row[3] -minetest.register_node("mcl_flowerpots:flower_pot_"..flower, { - description = desc, - _doc_items_create_entry = false, - drawtype = "mesh", - mesh = "flowerpot_with_long_cube.obj", - tiles = { - "mcl_flowerpots_"..flower..".png", - }, - use_texture_alpha = minetest.features.use_texture_alpha_string_modes and "clip" or true, - visual_scale = 0.5, - wield_scale = {x=1.0, y=1.0, z=1.0}, - paramtype = "light", - sunlight_propagates = true, - selection_box = { - type = "fixed", - fixed = {-0.2, -0.5, -0.2, 0.2, -0.1, 0.2} - }, - collision_box = { - type = "fixed", - fixed = {-0.2, -0.5, -0.2, 0.2, -0.1, 0.2} - }, - is_ground_content = false, - groups = {dig_immediate=3, attached_node=1, dig_by_piston=1, not_in_creative_inventory=1, flower_pot=2}, - sounds = mcl_sounds.node_sound_stone_defaults(), - on_rightclick = function(pos, item, clicker) - local name = "" - if clicker:is_player() then - name = clicker:get_player_name() - end - if minetest.is_protected(pos, name) then - minetest.record_protection_violation(pos, name) - return - end - minetest.add_item({x=pos.x, y=pos.y+0.5, z=pos.z}, flower_node) - minetest.set_node(pos, {name="mcl_flowerpots:flower_pot"}) - end, - drop = { - items = { - { items = { "mcl_flowerpots:flower_pot", flower_node } } - } - }, - +function mcl_flowerpots.register_potted_cube(name, def) + mcl_flowerpots.registered_pots[name] = def.name + minetest.register_node(":mcl_flowerpots:flower_pot_"..def.name, { + description = def.desc.." "..S("Flower Pot"), + _doc_items_create_entry = false, + drawtype = "mesh", + mesh = "flowerpot_with_long_cube.obj", + tiles = { + def.image, + }, + use_texture_alpha = minetest.features.use_texture_alpha_string_modes and "clip" or true, + visual_scale = 0.5, + wield_scale = {x=1.0, y=1.0, z=1.0}, + paramtype = "light", + sunlight_propagates = true, + selection_box = { + type = "fixed", + fixed = {-0.2, -0.5, -0.2, 0.2, -0.1, 0.2} + }, + collision_box = { + type = "fixed", + fixed = {-0.2, -0.5, -0.2, 0.2, -0.1, 0.2} + }, + is_ground_content = false, + groups = {dig_immediate=3, attached_node=1, dig_by_piston=1, not_in_creative_inventory=1, flower_pot=2}, + sounds = mcl_sounds.node_sound_stone_defaults(), + on_rightclick = function(pos, item, clicker) + local player_name = "" + if clicker:is_player() then + player_name = clicker:get_player_name() + end + if minetest.is_protected(pos, player_name) then + minetest.record_protection_violation(pos, player_name) + return + end + minetest.add_item({x=pos.x, y=pos.y+0.5, z=pos.z}, name) + minetest.set_node(pos, {name="mcl_flowerpots:flower_pot"}) + end, + drop = { + items = { + { items = { "mcl_flowerpots:flower_pot", name } } + } + }, + }) + -- Add entry alias for the Help + if has_doc then + doc.add_entry_alias("nodes", "mcl_flowerpots:flower_pot", "nodes", "mcl_flowerpots:flower_pot_"..def.name) + end +end +--forced because hard dependency to mcl_core +mcl_flowerpots.register_potted_cube("mcl_core:cactus", { + name = "cactus", + desc = S("Cactus"), + image = "mcl_flowerpots_cactus.png", }) --- Add entry alias for the Help -if minetest.get_modpath("doc") then - doc.add_entry_alias("nodes", "mcl_flowerpots:flower_pot", "nodes", "mcl_flowerpots:flower_pot_"..flower) -end -end +mcl_flowerpots.register_potted_flower("mcl_mushrooms:mushroom_brown", { + name = "mushroom_brown", + desc = S("Brown Mushroom"), + image = "farming_mushroom_brown.png", +}) + +mcl_flowerpots.register_potted_flower("mcl_mushrooms:mushroom_red", { + name = "mushroom_red", + desc = S("Red Mushroom"), + image = "farming_mushroom_red.png", +}) + +mcl_flowerpots.register_potted_flower("mcl_core:sapling", { + name = "sapling", + desc = S("Oak Sapling"), + image = "default_sapling.png", +}) + +mcl_flowerpots.register_potted_flower("mcl_core:acaciasapling", { + name = "acaciasapling", + desc = S("Acacia Sapling"), + image = "default_acacia_sapling.png", +}) + +mcl_flowerpots.register_potted_flower("mcl_core:junglesapling", { + name = "junglesapling", + desc = S("Jungle Sapling"), + image = "default_junglesapling.png", +}) + +mcl_flowerpots.register_potted_flower("mcl_core:darksapling", { + name = "darksapling", + desc = S("Dark Oak Sapling"), + image = "mcl_core_sapling_big_oak.png", +}) + +mcl_flowerpots.register_potted_flower("mcl_core:sprucesapling", { + name = "sprucesapling", + desc = S("Spruce Sapling"), + image = "mcl_core_sapling_spruce.png", +}) + +mcl_flowerpots.register_potted_flower("mcl_core:birchsapling", { + name = "birchsapling", + desc = S("Birch Sapling"), + image = "mcl_core_sapling_birch.png", +}) + +mcl_flowerpots.register_potted_flower("mcl_core:deadbush", { + name = "deadbush", + desc = S("Dead Bush"), + image = "default_dry_shrub.png", +}) diff --git a/mods/ITEMS/mcl_flowerpots/mod.conf b/mods/ITEMS/mcl_flowerpots/mod.conf new file mode 100644 index 000000000..e6a71c4da --- /dev/null +++ b/mods/ITEMS/mcl_flowerpots/mod.conf @@ -0,0 +1,3 @@ +name=mcl_flowerpots +depends=mcl_core, mcl_sounds, mcl_farming +optional_depends=doc \ No newline at end of file diff --git a/mods/ITEMS/mcl_flowers/API.md b/mods/ITEMS/mcl_flowers/API.md new file mode 100644 index 000000000..f3dc87725 --- /dev/null +++ b/mods/ITEMS/mcl_flowers/API.md @@ -0,0 +1,9 @@ +# API +Flower mod for mcl2 +# Functions +## mcl_flowers.register_simple_flower(name, desc, image, simple_selection_box) +Register a simple flower: +* name: legacity name eg: "my_super_flower" +* desc: description eg: "My Super Flower" +* image: texture +* simple_selection_box: nodebox of the flower \ No newline at end of file diff --git a/mods/ITEMS/mcl_flowers/depends.txt b/mods/ITEMS/mcl_flowers/depends.txt deleted file mode 100644 index a7a7b9cd1..000000000 --- a/mods/ITEMS/mcl_flowers/depends.txt +++ /dev/null @@ -1,5 +0,0 @@ -mcl_core -mcl_util -mcl_sounds -screwdriver? -doc? diff --git a/mods/ITEMS/mcl_flowers/init.lua b/mods/ITEMS/mcl_flowers/init.lua index 4e6c438de..a155ebd0b 100644 --- a/mods/ITEMS/mcl_flowers/init.lua +++ b/mods/ITEMS/mcl_flowers/init.lua @@ -1,7 +1,10 @@ local S = minetest.get_translator("mcl_flowers") - local mod_screwdriver = minetest.get_modpath("screwdriver") ~= nil +local has_mcl_flowerpots = minetest.get_modpath("mcl_flowerpots") +local modpath = minetest.get_modpath("mcl_flowers") +mcl_flowers = {} +mcl_flowers.registered_simple_flowers = {} -- Simple flower template local smallflowerlongdesc = S("This is a small flower. Small flowers are mainly used for dye production and can also be potted.") local plant_usage_help = S("It can only be placed on a block on which it would also survive.") @@ -51,43 +54,49 @@ local on_place_flower = mcl_util.generate_on_place_plant_function(function(pos, return ok, colorize end) -local function add_simple_flower(name, desc, image, simple_selection_box) - minetest.register_node("mcl_flowers:"..name, { - description = desc, +function mcl_flowers.register_simple_flower(name, def) + local newname = "mcl_flowers:"..name + if not def._mcl_silk_touch_drop then def._mcl_silk_touch_drop = nil end + if not def.drop then def.drop = newname end + mcl_flowers.registered_simple_flowers[newname] = { + name=name, + desc=def.desc, + image=def.image, + simple_selection_box=def.simple_selection_box, + } + minetest.register_node(newname, { + description = def.desc, _doc_items_longdesc = smallflowerlongdesc, _doc_items_usagehelp = plant_usage_help, drawtype = "plantlike", waving = 1, - tiles = { image..".png" }, - inventory_image = image..".png", - wield_image = image..".png", + tiles = { def.image }, + inventory_image = def.image, + wield_image = def.image, sunlight_propagates = true, paramtype = "light", walkable = false, stack_max = 64, + drop = def.drop, groups = {dig_immediate=3,flammable=2,fire_encouragement=60,fire_flammability=100,plant=1,flower=1,place_flowerlike=1,non_mycelium_plant=1,attached_node=1,dig_by_water=1,destroy_by_lava_flow=1,dig_by_piston=1,enderman_takable=1,deco_block=1}, sounds = mcl_sounds.node_sound_leaves_defaults(), node_placement_prediction = "", on_place = on_place_flower, selection_box = { type = "fixed", - fixed = simple_selection_box, + fixed = def.selection_box, }, + _mcl_silk_touch_drop = def._mcl_silk_touch_drop, }) + if def.potted and has_mcl_flowerpots then + mcl_flowerpots.register_potted_flower(newname, { + name = name, + desc = def.desc, + image = def.image, + }) + end end -add_simple_flower("poppy", S("Poppy"), "mcl_flowers_poppy", { -5/16, -0.5, -5/16, 5/16, 5/16, 5/16 }) -add_simple_flower("dandelion", S("Dandelion"), "flowers_dandelion_yellow", { -4/16, -0.5, -4/16, 4/16, 3/16, 4/16 }) -add_simple_flower("oxeye_daisy", S("Oxeye Daisy"), "mcl_flowers_oxeye_daisy", { -4/16, -0.5, -4/16, 4/16, 4/16, 4/16 }) -add_simple_flower("tulip_orange", S("Orange Tulip"), "flowers_tulip", { -3/16, -0.5, -3/16, 3/16, 5/16, 3/16 }) -add_simple_flower("tulip_pink", S("Pink Tulip"), "mcl_flowers_tulip_pink", { -3/16, -0.5, -3/16, 3/16, 5/16, 3/16 }) -add_simple_flower("tulip_red", S("Red Tulip"), "mcl_flowers_tulip_red", { -3/16, -0.5, -3/16, 3/16, 6/16, 3/16 }) -add_simple_flower("tulip_white", S("White Tulip"), "mcl_flowers_tulip_white", { -3/16, -0.5, -3/16, 3/16, 4/16, 3/16 }) -add_simple_flower("allium", S("Allium"), "mcl_flowers_allium", { -3/16, -0.5, -3/16, 3/16, 6/16, 3/16 }) -add_simple_flower("azure_bluet", S("Azure Bluet"), "mcl_flowers_azure_bluet", { -5/16, -0.5, -5/16, 5/16, 3/16, 5/16 }) -add_simple_flower("blue_orchid", S("Blue Orchid"), "mcl_flowers_blue_orchid", { -5/16, -0.5, -5/16, 5/16, 7/16, 5/16 }) - - local wheat_seed_drop = { max_items = 1, items = { @@ -159,6 +168,14 @@ def_fern.selection_box = { minetest.register_node("mcl_flowers:fern", def_fern) +if has_mcl_flowerpots then + mcl_flowerpots.register_potted_flower("mcl_flowers:fern", { + name = "fern", + desc = S("Fern"), + image = "mcl_flowers_fern_inv.png", + }) +end + local function add_large_plant(name, desc, longdesc, bottom_img, top_img, inv_img, selbox_radius, selbox_top_height, drop, shears_drop, is_flower, grass_color, fortune_drop) if not inv_img then inv_img = top_img @@ -480,3 +497,4 @@ local fix_doubleplants = minetest.settings:get_bool("fix_doubleplants", true) }) end +dofile(modpath.."/register.lua") diff --git a/mods/ITEMS/mcl_flowers/mod.conf b/mods/ITEMS/mcl_flowers/mod.conf new file mode 100644 index 000000000..b309ac22e --- /dev/null +++ b/mods/ITEMS/mcl_flowers/mod.conf @@ -0,0 +1,3 @@ +name=mcl_flowers +depends=mcl_core, mcl_util, mcl_sounds +optional_depends=screwdriver, doc, mcl_flowerpots \ No newline at end of file diff --git a/mods/ITEMS/mcl_flowers/register.lua b/mods/ITEMS/mcl_flowers/register.lua new file mode 100644 index 000000000..9b65caebf --- /dev/null +++ b/mods/ITEMS/mcl_flowers/register.lua @@ -0,0 +1,62 @@ +local S = minetest.get_translator("mcl_flowers") + +mcl_flowers.register_simple_flower("poppy", { + desc = S("Poppy"), + image = "mcl_flowers_poppy.png", + selection_box = { -5/16, -0.5, -5/16, 5/16, 5/16, 5/16 }, + potted = true, +}) +mcl_flowers.register_simple_flower("dandelion", { + desc = S("Dandelion"), + image = "flowers_dandelion_yellow.png", + selection_box = { -4/16, -0.5, -4/16, 4/16, 3/16, 4/16 }, + potted = true, +}) +mcl_flowers.register_simple_flower("oxeye_daisy", { + desc = S("Oxeye Daisy"), + image = "mcl_flowers_oxeye_daisy.png", + selection_box = { -4/16, -0.5, -4/16, 4/16, 4/16, 4/16 }, + potted = true, +}) +mcl_flowers.register_simple_flower("tulip_orange", { + desc = S("Orange Tulip"), + image = "flowers_tulip.png", + selection_box = { -3/16, -0.5, -3/16, 3/16, 5/16, 3/16 }, + potted = true, +}) +mcl_flowers.register_simple_flower("tulip_pink", { + desc = S("Pink Tulip"), + image = "mcl_flowers_tulip_pink.png", + selection_box = { -3/16, -0.5, -3/16, 3/16, 5/16, 3/16 }, + potted = true, +}) +mcl_flowers.register_simple_flower("tulip_red", { + desc = S("Red Tulip"), + image = "mcl_flowers_tulip_red.png", + selection_box = { -3/16, -0.5, -3/16, 3/16, 6/16, 3/16 }, + potted = true, +}) +mcl_flowers.register_simple_flower("tulip_white", { + desc = S("White Tulip"), + image = "mcl_flowers_tulip_white.png", + selection_box = { -3/16, -0.5, -3/16, 3/16, 4/16, 3/16 }, + potted = true, +}) +mcl_flowers.register_simple_flower("allium", { + desc = S("Allium"), + image = "mcl_flowers_allium.png", + selection_box = { -3/16, -0.5, -3/16, 3/16, 6/16, 3/16 }, + potted = true, +}) +mcl_flowers.register_simple_flower("azure_bluet", { + desc = S("Azure Bluet"), + image = "mcl_flowers_azure_bluet.png", + selection_box = { -5/16, -0.5, -5/16, 5/16, 3/16, 5/16 }, + potted = true, +}) +mcl_flowers.register_simple_flower("blue_orchid", { + desc = S("Blue Orchid"), + image = "mcl_flowers_blue_orchid.png", + selection_box = { -5/16, -0.5, -5/16, 5/16, 7/16, 5/16 }, + potted = true, +}) \ No newline at end of file diff --git a/mods/ITEMS/mcl_jukebox/API.md b/mods/ITEMS/mcl_jukebox/API.md new file mode 100644 index 000000000..85900ede0 --- /dev/null +++ b/mods/ITEMS/mcl_jukebox/API.md @@ -0,0 +1,18 @@ +# mcl_jukebox + +## mcl_jukebox.register_record(title, author, identifier, image, sound) + +* title: title of the track +* author: author of the track +* identifier: short string used in the item registration +* image: the texture of the track +* sound: sound file of the track + +## mcl_jukebox.registered_records + +Table indexed by item name containing: +* title: title of the track +* author: author of the track +* identifier: short string used in the item registration +* image: the texture of the track +* sound: sound file of the track \ No newline at end of file diff --git a/mods/ITEMS/mcl_jukebox/depends.txt b/mods/ITEMS/mcl_jukebox/depends.txt deleted file mode 100644 index 97bf51069..000000000 --- a/mods/ITEMS/mcl_jukebox/depends.txt +++ /dev/null @@ -1,2 +0,0 @@ -mcl_core -mcl_sounds diff --git a/mods/ITEMS/mcl_jukebox/description.txt b/mods/ITEMS/mcl_jukebox/description.txt deleted file mode 100644 index 143812e1d..000000000 --- a/mods/ITEMS/mcl_jukebox/description.txt +++ /dev/null @@ -1 +0,0 @@ -Jukebox and music discs are used to play background music on a per-player basis. diff --git a/mods/ITEMS/mcl_jukebox/init.lua b/mods/ITEMS/mcl_jukebox/init.lua index db9f25312..b9f762a51 100644 --- a/mods/ITEMS/mcl_jukebox/init.lua +++ b/mods/ITEMS/mcl_jukebox/init.lua @@ -1,5 +1,8 @@ local S = minetest.get_translator("mcl_jukebox") +mcl_jukebox = {} +mcl_jukebox.registered_records = {} + -- Player name-indexed table containing the currently heard track local active_tracks = {} @@ -10,47 +13,30 @@ local active_huds = {} -- Used to make sure that minetest.after only applies to the latest HUD change event local hud_sequence_numbers = {} --- List of music -local recorddata = { - -- { title, author, identifier } - { "The Evil Sister (Jordach's Mix)", "SoundHelix", "13" } , - { "The Energetic Rat (Jordach's Mix)", "SoundHelix", "wait" }, - { "Eastern Feeling", "Jordach", "blocks"}, - { "Minetest", "Jordach", "far" }, - { "Credit Roll (Jordach's HD Mix)", "Junichi Masuda", "chirp" }, - { "Winter Feeling", "Tom Peter", "strad" }, - { "Synthgroove (Jordach's Mix)", "HeroOfTheWinds", "mellohi" }, - { "The Clueless Frog (Jordach's Mix)", "SoundHelix", "mall" }, -} -local records = #recorddata - -for r=1, records do - local doc = false - local entryname, longdesc, usagehelp - if r == 1 then - doc = true - entryname = S("Music Disc") - longdesc = S("A music disc holds a single music track which can be used in a jukebox to play music.") - usagehelp = S("Place a music disc into an empty jukebox to play the music. Use the jukebox again to retrieve the music disc. The music can only be heard by you, not by other players.") - end - minetest.register_craftitem("mcl_jukebox:record_"..r, { +function mcl_jukebox.register_record(title, author, identifier, image, sound) + mcl_jukebox.registered_records["mcl_jukebox:record_"..identifier] = {title, author, identifier, image, sound} + local entryname = S("Music Disc") + local longdesc = S("A music disc holds a single music track which can be used in a jukebox to play music.") + local usagehelp = S("Place a music disc into an empty jukebox to play the music. Use the jukebox again to retrieve the music disc. The music can only be heard by you, not by other players.") + minetest.register_craftitem(":mcl_jukebox:record_"..identifier, { description = core.colorize("#55FFFF", S("Music Disc")) .. "\n" .. - core.colorize("#989898", S("@1—@2", recorddata[r][2], recorddata[r][1])), - _doc_items_create_entry = doc, + core.colorize("#989898", S("@1—@2", author, title)), + _doc_items_create_entry = true, _doc_items_entry_name = entryname, _doc_items_longdesc = longdesc, _doc_items_usagehelp = usagehelp, - inventory_image = "mcl_jukebox_record_"..recorddata[r][3]..".png", + --inventory_image = "mcl_jukebox_record_"..recorddata[r][3]..".png", + inventory_image = image, stack_max = 1, - groups = { music_record = r }, + groups = { music_record = 1 }, }) end -local function now_playing(player, track_id) +local function now_playing(player, name) local playername = player:get_player_name() local hud = active_huds[playername] - local text = S("Now playing: @1—@2", recorddata[track_id][2], recorddata[track_id][1]) + local text = S("Now playing: @1—@2", mcl_jukebox.registered_records[name][2], mcl_jukebox.registered_records[name][1]) if not hud_sequence_numbers[playername] then hud_sequence_numbers[playername] = 1 @@ -106,18 +92,18 @@ minetest.register_craft({ }) local play_record = function(pos, itemstack, player) - local record_id = minetest.get_item_group(itemstack:get_name(), "music_record") - if record_id ~= 0 then + local name = itemstack:get_name() + if mcl_jukebox.registered_records[name] then local cname = player:get_player_name() if active_tracks[cname] ~= nil then minetest.sound_stop(active_tracks[cname]) active_tracks[cname] = nil end - active_tracks[cname] = minetest.sound_play("mcl_jukebox_track_"..record_id, { + active_tracks[cname] = minetest.sound_play(mcl_jukebox.registered_records[name][5], { to_player = cname, gain = 1, }) - now_playing(player, record_id) + now_playing(player, name) return true end return false @@ -239,3 +225,12 @@ minetest.register_craft({ recipe = "mcl_jukebox:jukebox", burntime = 15, }) + +mcl_jukebox.register_record("The Evil Sister (Jordach's Mix)", "SoundHelix", "13", "mcl_jukebox_record_13.png", "mcl_jukebox_track_1") +mcl_jukebox.register_record("The Energetic Rat (Jordach's Mix)", "SoundHelix", "wait", "mcl_jukebox_record_wait.png", "mcl_jukebox_track_2") +mcl_jukebox.register_record("Eastern Feeling", "Jordach", "blocks", "mcl_jukebox_record_blocks.png", "mcl_jukebox_track_3") +mcl_jukebox.register_record("Minetest", "Jordach", "far", "mcl_jukebox_record_far.png", "mcl_jukebox_track_4") +mcl_jukebox.register_record("Credit Roll (Jordach's HD Mix)", "Junichi Masuda", "chirp", "mcl_jukebox_record_chirp.png", "mcl_jukebox_track_5") +mcl_jukebox.register_record("Winter Feeling", "Tom Peter", "strad", "mcl_jukebox_record_strad.png", "mcl_jukebox_track_6") +mcl_jukebox.register_record("Synthgroove (Jordach's Mix)", "HeroOfTheWinds", "mellohi", "mcl_jukebox_record_mellohi.png", "mcl_jukebox_track_7") +mcl_jukebox.register_record("The Clueless Frog (Jordach's Mix)", "SoundHelix", "mall", "mcl_jukebox_record_mall.png", "mcl_jukebox_track_8") \ No newline at end of file diff --git a/mods/ITEMS/mcl_jukebox/mod.conf b/mods/ITEMS/mcl_jukebox/mod.conf index ec39a7be9..ad1f8c06a 100644 --- a/mods/ITEMS/mcl_jukebox/mod.conf +++ b/mods/ITEMS/mcl_jukebox/mod.conf @@ -1 +1,3 @@ name = mcl_jukebox +description = Jukebox and music discs are used to play background music on a per-player basis. +depends = mcl_core, mcl_sounds diff --git a/mods/ITEMS/mcl_potions/functions.lua b/mods/ITEMS/mcl_potions/functions.lua index f1384ab30..cd4939c2f 100644 --- a/mods/ITEMS/mcl_potions/functions.lua +++ b/mods/ITEMS/mcl_potions/functions.lua @@ -590,23 +590,36 @@ function mcl_potions.make_invisible(player, toggle) local is_player = player:is_player() local entity = player:get_luaentity() + local playername = player:get_player_name() + local skin_file = "" if toggle then -- hide player - if player:is_player() then - EF.invisible[player].old_size = player:get_properties().visual_size - elseif entity then + skin_file = "mobs_mc_empty.png" + + if entity then EF.invisible[player].old_size = entity.visual_size - else -- if not a player or entity, do nothing + elseif not player:is_player() then -- if not a player or entity, do nothing return end - player:set_properties({visual_size = {x = 0, y = 0}}) + if minetest.get_modpath("mcl_armor") and player:is_player() then + armor.textures[playername].skin = skin_file + armor:update_player_visuals(player) + elseif not player:is_player() and minetest.get_modpath("mcl_armor") or not player:is_player() and not minetest.get_modpath("mcl_armor") then + player:set_properties({visual_size = {x = 0, y = 0}}) + end player:set_nametag_attributes({color = {a = 0}}) elseif EF.invisible[player] then -- show player - player:set_properties({visual_size = EF.invisible[player].old_size}) + if minetest.get_modpath("mcl_armor") and player:is_player() then + skin_file = mcl_skins.skins[playername] .. ".png" + armor.textures[playername].skin = skin_file + armor:update_player_visuals(player) + elseif not player:is_player() and minetest.get_modpath("mcl_armor") or not player:is_player() and not minetest.get_modpath("mcl_armor") then + player:set_properties({visual_size = EF.invisible[player].old_size}) + end player:set_nametag_attributes({color = {r = 255, g = 255, b = 255, a = 255}}) end @@ -999,4 +1012,3 @@ function mcl_potions._extinguish_nearby_fire(pos, radius) end return exting end - diff --git a/mods/PLAYER/mcl_player/init.lua b/mods/PLAYER/mcl_player/init.lua index 8cc93e734..90cba148f 100644 --- a/mods/PLAYER/mcl_player/init.lua +++ b/mods/PLAYER/mcl_player/init.lua @@ -33,6 +33,7 @@ mcl_player.player_register_model("character.b3d", { sneak_walk_mine = {x=325, y=344}, run_walk = {x=440, y=460}, run_walk_mine = {x=461, y=481}, + sit_mount = {x=484, y=484}, }, }) diff --git a/mods/PLAYER/mcl_playerplus/init.lua b/mods/PLAYER/mcl_playerplus/init.lua index 73e799a3a..26cbd6072 100644 --- a/mods/PLAYER/mcl_playerplus/init.lua +++ b/mods/PLAYER/mcl_playerplus/init.lua @@ -66,13 +66,13 @@ minetest.register_globalstep(function(dtime) -- set head pitch and yaw when swimming player:set_bone_position("Head", vector.new(0,6.3,0), vector.new(pitch+90-degrees(dir_to_pitch(player_velocity)),yaw - player_vel_yaw * -1,0)) -- sets eye height, and nametag color accordingly - player:set_properties({collisionbox = {-0.35,0,-0.35,0.35,0.8,0.35}, eye_height = 0.65, nametag_color = { r = 225, b = 225, a = 225, g = 225 }}) + player:set_properties({collisionbox = {-0.35,0,-0.35,0.35,0.8,0.35}, eye_height = 0.5, nametag_color = { r = 225, b = 225, a = 225, g = 225 }}) -- control body bone when swimming player:set_bone_position("Body_Control", vector.new(0,6.3,0), vector.new(degrees(dir_to_pitch(player_velocity)) - 90,player_vel_yaw * -1 - yaw + 180,0)) elseif player:get_attach() == nil then -- sets eye height, and nametag color accordingly - player:set_properties({collisionbox = {-0.35,0,-0.35,0.35,1.8,0.35}, eye_height = 1.65, nametag_color = { r = 225, b = 225, a = 225, g = 225 }}) + player:set_properties({collisionbox = {-0.35,0,-0.35,0.35,1.8,0.35}, eye_height = 1.5, nametag_color = { r = 225, b = 225, a = 225, g = 225 }}) if player_velocity.x > 0.35 or player_velocity.z > 0.35 or player_velocity.x < -0.35 or player_velocity.z < -0.35 then if player_vel_yaw * -1 - yaw < 90 or player_vel_yaw * -1 - yaw > 270 then @@ -91,7 +91,7 @@ minetest.register_globalstep(function(dtime) else local attached = player:get_attach(parent) local attached_yaw = degrees(attached:get_yaw()) - player:set_properties({collisionbox = {-0.35,0,-0.35,0.35,1.8,0.35}, eye_height = 1.65, nametag_color = { r = 225, b = 225, a = 225, g = 225 }}) + player:set_properties({collisionbox = {-0.35,0,-0.35,0.35,1.8,0.35}, eye_height = 1.5, nametag_color = { r = 225, b = 225, a = 225, g = 225 }}) player:set_bone_position("Head", vector.new(0,6.3,0), vector.new(pitch,degrees(player:get_look_horizontal()) * -1 + attached_yaw,0)) player:set_bone_position("Body_Control", vector.new(0,6.3,0), vector.new(0,0,0)) end @@ -201,7 +201,7 @@ minetest.register_globalstep(function(dtime) if minetest.get_item_group(node_feet, "liquid") ~= 0 and mcl_enchanting.get_enchantment(player:get_inventory():get_stack("armor", 5), "depth_strider") then local boots = player:get_inventory():get_stack("armor", 5) local depth_strider = mcl_enchanting.get_enchantment(boots, "depth_strider") - + if depth_strider > 0 then playerphysics.add_physics_factor(player, "speed", "mcl_playerplus:surface", (depth_strider / 3) + 0.75) end