From 285b6801526b4db886775b0613bf01b5112219a3 Mon Sep 17 00:00:00 2001 From: ThePython <87204246+ThePython10110@users.noreply.github.com> Date: Mon, 2 Oct 2023 14:53:43 -0700 Subject: [PATCH] v6.0 --- .luacheckrc | 71 +++++++++++ fake_liquids/init.lua | 56 ++++----- falling_block_tool/init.lua | 34 +++++ falling_block_tool/mod.conf | 5 + .../textures/falling_block_tool.png | Bin 0 -> 633 bytes flying_sausage/init.lua | 8 +- get_group_items/init.lua | 2 +- ghost_blocks/init.lua | 75 +++++------ lava_sponge/init.lua | 5 +- meat_blocks/init.lua | 15 +-- readme.md | 43 +++++-- slime_things/init.lua | 26 +++- small_why_things/init.lua | 117 ++++++++++++++++-- small_why_things/mod.conf | 2 +- sound_machine/init.lua | 40 +++--- sticky_things/init.lua | 16 ++- useful_green_potatoes/init.lua | 44 ++++--- useless_beans/init.lua | 24 ++-- why_init/init.lua | 10 +- why_init/mod.conf | 2 +- why_schematic/Why.mts | Bin 0 -> 122 bytes why_schematic/init.lua | 20 +++ why_schematic/mod.conf | 3 + 23 files changed, 451 insertions(+), 167 deletions(-) create mode 100644 .luacheckrc create mode 100644 falling_block_tool/init.lua create mode 100644 falling_block_tool/mod.conf create mode 100644 falling_block_tool/textures/falling_block_tool.png create mode 100644 why_schematic/Why.mts create mode 100644 why_schematic/init.lua create mode 100644 why_schematic/mod.conf diff --git a/.luacheckrc b/.luacheckrc new file mode 100644 index 0000000..6bf2717 --- /dev/null +++ b/.luacheckrc @@ -0,0 +1,71 @@ +read_globals = { + "DIR_DELIM", "INIT", + + "minetest", "core", + "dump", "dump2", + + "mcl_weather", + "mesecon", + "mcl_worlds", + "mcl_sounds", + "mcl_burning", + "mcl_util", + "mcl_formspec", + "mcl_item_id", + "mcl_enchanting", + "mcl_hunger", + "mcl_stairs", + "mcl_playerinfo", + "playerphysics", + "mcl_armor", + "armor", + "mcl_enchanting", + + "Raycast", + "Settings", + "PseudoRandom", + "PerlinNoise", + "VoxelManip", + "SecureRandom", + "VoxelArea", + "PerlinNoiseMap", + "PcgRandom", + "ItemStack", + "AreaStore", + + "vector", + + table = { + fields = { + "copy", + "indexof", + "insert_all", + "key_value_swap", + "shuffle", + } + }, + + string = { + fields = { + "split", + "trim", + } + }, + + math = { + fields = { + "hypot", + "sign", + "factorial" + } + }, +} +globals = { + "why", + "default", + "mcl_buckets", + "bucket", + "mcl_vars", + "mcl_potions", + "mcl_bamboo", +} \ No newline at end of file diff --git a/fake_liquids/init.lua b/fake_liquids/init.lua index 6a4be59..0817819 100644 --- a/fake_liquids/init.lua +++ b/fake_liquids/init.lua @@ -3,14 +3,21 @@ local solid_liquid_damage = {} local glass_itemstring = "default:glass" local empty_bucket_itemstring = "bucket:bucket_empty" local stone_itemstring = "default:stone" -local cobble_itemstring = "default:cobble" local obsidian_itemstring = "default:obsidian" local nether_check = function() end -if why.mineclone then + +-- Sound helper functions for placing and taking liquids +local function sound_place(itemname, pos) + local def = minetest.registered_nodes[itemname] + if def and def.sounds and def.sounds.place then + minetest.sound_play(def.sounds.place, {gain=1.0, pos = pos, pitch = 1 + math.random(-10, 10)*0.005}, true) + end +end + +if why.mcl then glass_itemstring = "mcl_core:glass" empty_bucket_itemstring = "mcl_buckets:bucket_empty" stone_itemstring = "mcl_core:stone" - cobble_itemstring = "mcl_core:cobble" obsidian_itemstring = "mcl_core:obsidian" nether_check = function(pos, player) local nn = minetest.get_node(pos).name @@ -43,16 +50,10 @@ if why.mineclone then end end -local function sound_place(itemname, pos) - local def = minetest.registered_nodes[itemname] - if def and def.sounds and def.sounds.place then - minetest.sound_play(def.sounds.place, {gain=1.0, pos = pos, pitch = 1 + math.random(-10, 10)*0.005}, true) - end -end - -if not why.mineclone then +if not why.mcl then default.cool_lava = function(pos, node) --override function to fix solid/fake liquids - if node.name == "default:lava_source" or (minetest.registered_items[node.name].groups.lava and node.name:find("source")) then + if node.name == "default:lava_source" + or(minetest.registered_items[node.name].groups.lava and node.name:find("source")) then minetest.set_node(pos, {name = "default:obsidian"}) else -- Lava flowing minetest.set_node(pos, {name = "default:stone"}) @@ -97,11 +98,11 @@ function why.register_solid_liquid(source_itemstring) solid_liquid_damage[ghost_itemstring] = def.damage_per_second/2 end def.damage_per_second = nil - + minetest.register_node(new_itemstring, def) local bucket_itemstring - if why.mineclone then + if why.mcl then bucket_itemstring = mcl_buckets.liquids[source_itemstring].bucketname else bucket_itemstring = bucket.liquids[source_itemstring].itemname @@ -124,15 +125,12 @@ function why.register_fake_liquid(name, look_source, act_source) local look_flowing = look_source_def.liquid_alternative_flowing local look_flowing_def = minetest.registered_items[look_flowing] local act_flowing_def = minetest.registered_items[act_flowing] - local act_liquid_info local look_liquid_info local look_bucket_def - if why.mineclone then - act_liquid_info = mcl_buckets.liquids[act_source] + if why.mcl then look_liquid_info = mcl_buckets.liquids[look_source] look_bucket_def = minetest.registered_items[look_liquid_info.bucketname] else - act_liquid_info = bucket.liquids[act_source] look_liquid_info = bucket.liquids[look_source] look_bucket_def = minetest.registered_items[look_liquid_info.itemname] end @@ -181,7 +179,7 @@ function why.register_fake_liquid(name, look_source, act_source) minetest.register_node(new_source_itemstring, new_source_def) minetest.register_node(new_flowing_itemstring, new_flowing_def) - if why.mineclone then + if why.mcl then local extra_check if new_source_def.groups.water then extra_check = nether_check @@ -207,7 +205,7 @@ function why.register_fake_liquid(name, look_source, act_source) end end -if why.mineclone then +if why.mcl then minetest.register_node("fake_liquids:milk_source", { description = "Milk Source", _doc_items_create_entry = false, @@ -318,7 +316,7 @@ else why.register_fake_liquid("Fake Lava", "default:lava_source", "default:water_source") end -if why.mineclone then +if why.mcl then for itemstring, info in pairs(mcl_buckets.liquids) do if itemstring ~= "mcl_nether:nether_lava_source" then why.register_solid_liquid(itemstring) @@ -332,7 +330,7 @@ else end end -if why.mineclone then +if why.mcl then minetest.register_abm({ label = "Lava cooling (solid liquids)", nodenames = {"group:lava"}, @@ -342,7 +340,11 @@ if why.mineclone then min_y = mcl_vars.mg_end_min, action = function(pos, node, active_object_count, active_object_count_wider) if not minetest.registered_nodes[node.name].groups.solid_liquid then return end --make sure it's a solid liquid first - local water = minetest.find_nodes_in_area({x=pos.x-1, y=pos.y-1, z=pos.z-1}, {x=pos.x+1, y=pos.y+1, z=pos.z+1}, "group:water") + local water = minetest.find_nodes_in_area( + {x=pos.x-1, y=pos.y-1, z=pos.z-1}, + {x=pos.x+1, y=pos.y+1, z=pos.z+1}, + "group:water" + ) for w=1, #water do --local waternode = minetest.get_node(water[w]) @@ -382,7 +384,6 @@ minetest.register_globalstep(function(dtime) time = 0 for _,player in pairs(minetest.get_connected_players()) do -- who am I? - local name = player:get_player_name() -- where am I? local pos = player:get_pos() @@ -399,9 +400,8 @@ minetest.register_globalstep(function(dtime) local dist_feet = vector.distance({x=pos.x, y=pos.y-1, z=pos.z}, near) if dist < 1.1 or dist_feet < 1.1 then if player:get_hp() > 0 then - local damage_type local def = minetest.registered_items[itemstring] - if why.mineclone then + if why.mcl then local damage_type if def.groups.lava then damage_type = "lava" @@ -423,7 +423,7 @@ minetest.register_globalstep(function(dtime) end) local fake_liquid_recipes -if why.mineclone then +if why.mcl then fake_liquid_recipes = { ["mcl_buckets:bucket_water"] = "fake_liquids:bucket_fake_lava", ["mcl_buckets:bucket_river_water"] = "fake_liquids:bucket_fake_lava", @@ -437,7 +437,7 @@ else } end -if why.mineclone then +if why.mcl then --override brewing for fake liquids local old_alchemy = mcl_potions.get_alchemy mcl_potions.get_alchemy = function(ingr, pot) diff --git a/falling_block_tool/init.lua b/falling_block_tool/init.lua new file mode 100644 index 0000000..dec9b84 --- /dev/null +++ b/falling_block_tool/init.lua @@ -0,0 +1,34 @@ +local sand = "default:sand" +local gravel = "default:gravel" +local stick = "default:stick" +if why.mcl then + sand = "mcl_core:sand" + gravel = "mcl_core:gravel" + stick = "mcl_core:stick" +end + +minetest.register_tool("falling_block_tool:falling_block_tool", { + description = "Falling Block Tool", + wield_image = "falling_block_tool.png", + inventory_image = "falling_block_tool.png", + on_place = function(itemstack, player, pointed_thing) + if not pointed_thing.under then return end + local node = minetest.get_node(pointed_thing.under) + local def = minetest.registered_items[node.name] + if ((def.can_dig and def.can_dig(pointed_thing.under, player)) or + not def.can_dig) and def._mcl_hardness ~= -1 + then + minetest.spawn_falling_node(pointed_thing.under) + itemstack:add_wear(65536/2031) + end + end +}) + +minetest.register_craft({ + output = "falling_block_tool:falling_block_tool", + recipe = { + {"", stick, ""}, + {sand, stick, sand}, + {"", gravel, ""}, + } +}) \ No newline at end of file diff --git a/falling_block_tool/mod.conf b/falling_block_tool/mod.conf new file mode 100644 index 0000000..77880e3 --- /dev/null +++ b/falling_block_tool/mod.conf @@ -0,0 +1,5 @@ +name = falling_block_tool +title = Falling Block Tool +description = Adds a falling block tool +depends = why_init +optional_depends = mcl_core, default \ No newline at end of file diff --git a/falling_block_tool/textures/falling_block_tool.png b/falling_block_tool/textures/falling_block_tool.png new file mode 100644 index 0000000000000000000000000000000000000000..6ae64bc4659d2083a3a7cc1b91059021f31cc0b5 GIT binary patch literal 633 zcmV-<0*3vGP)EX>4Tx04R}tkv&MmKpe$iQ>7{u2Rn#}WT;LS#ELjd6^me@v=v%)FuC*#nlvOS zE{=k0!NHHks)LKOt`4q(Aou~|>f)s6A|?JWDYS_3;J6>}?mh0_0Yam~RI_UmP&La) z#baVNw<-o+(ThW=_we!cF2b|C&;2?2mAuISpGZ8%bi*RvAfDN@ zbk6(4Ay$$U;&b8&gDyz?$aUG}H_kiNlJjQNECM zS>e3JS*_Gq>z@3D!MwJT<~q$0#Ib|~k`N)IhB7L!5TR8g#YBqsV;=rt$DbsZOs+B* zITlcb3d!+<|H1EW%|dj_O$x?eSad^gZEa<4bO1wgWnpw> zWFU8GbZ8()Nlj2!fese{002=*L_t(I%k7gp3IHGsLlf_R=eUVTKb9^IW-FLSr3v9k zfcBXHt#<=WeZUI 0 and update do update = false if not inv:is_empty("src") then @@ -220,36 +216,31 @@ minetest.register_node("ghost_blocks:ghostifier", { local dst_stack = inv:get_stack("dst", 1) local original_itemstring = src_stack:get_name() local new_itemstring = why.ghost_blocks.block_map[original_itemstring] - if new_itemstring then - if not inv:is_empty("dst") then - if new_itemstring ~= dst_stack:get_name() then - break --if dst is full of different block - end + if new_itemstring and not inv:is_empty("dst") then + if new_itemstring ~= dst_stack:get_name() then + break --if dst is full of different block end - if dst_stack:is_empty() then - -- create a new stack - dst_stack = ItemStack(new_itemstring) - src_stack:set_count(src_stack:get_count() - 1) - --minetest.log("dst is empty, creating new itemstack") - elseif dst_stack:get_count() >= 64 then - --minetest.log("dst is full, stopping") - -- the max item count is limited to 64 - break - else - -- add one node into stack - --minetest.log("dst++; src--") - dst_stack:set_count(dst_stack:get_count() + 1) - src_stack:set_count(src_stack:get_count() - 1) - end - --minetest.log("setting src and dst") - inv:set_stack("dst", 1, dst_stack) - inv:set_stack("src", 1, src_stack) - - update = true end - - else - --minetest.log("src is empty") + if dst_stack:is_empty() then + -- create a new stack + dst_stack = ItemStack(new_itemstring) + src_stack:set_count(src_stack:get_count() - 1) + --minetest.log("dst is empty, creating new itemstack") + elseif dst_stack:get_count() >= 64 then + --minetest.log("dst is full, stopping") + -- the max item count is limited to 64 + break + else + -- add one node into stack + --minetest.log("dst++; src--") + dst_stack:set_count(dst_stack:get_count() + 1) + src_stack:set_count(src_stack:get_count() - 1) + end + --minetest.log("setting src and dst") + inv:set_stack("dst", 1, dst_stack) + inv:set_stack("src", 1, src_stack) + + update = true end end minetest.get_node_timer(pos):stop() @@ -264,7 +255,7 @@ minetest.register_node("ghost_blocks:ghostifier", { on_metadata_inventory_take = function(pos) minetest.get_node_timer(pos):start(1.0) end, - + on_construct = function(pos) local meta = minetest.get_meta(pos) local inv = meta:get_inventory() diff --git a/lava_sponge/init.lua b/lava_sponge/init.lua index 247a5ae..2a36e9e 100644 --- a/lava_sponge/init.lua +++ b/lava_sponge/init.lua @@ -1,4 +1,4 @@ -if why.mineclone then +if why.mcl then local absorb = function(pos) local change = false -- Count number of absorbed river water vs other nodes @@ -25,7 +25,8 @@ end minetest.register_node("lava_sponge:lava_sponge", { description = "Lava Sponge", _tt_help = "Removes lava on contact", - _doc_items_longdesc = "Lava sponges are blocks which remove lava around them when they are placed or come in contact with lava, turning it into a wet sponge.", + _doc_items_longdesc = "Lava sponges are blocks which remove lava around them when they are placed or".. + "come in contact with lava, turning it into a wet sponge.", drawtype = "normal", is_ground_content = false, tiles = {"mcl_sponges_sponge.png"..mcl_enchanting.overlay}, diff --git a/meat_blocks/init.lua b/meat_blocks/init.lua index 07a0f22..17489da 100644 --- a/meat_blocks/init.lua +++ b/meat_blocks/init.lua @@ -1,4 +1,4 @@ -if why.mineclone then +if why.mcl then @@ -7,7 +7,7 @@ if why.mineclone then local meatball_rain_amount = minetest.settings:get("meat_blocks_meatball_rain_amount") or 1 function why.eat_burnt_food(hunger_restore, fire_time, itemstack, player, pointed_thing) - if not player:get_player_control().sneak then + if not player:get_player_control().sneak then local new_stack = mcl_util.call_on_rightclick(itemstack, player, pointed_thing) if new_stack then return new_stack @@ -112,7 +112,7 @@ for i, meat in ipairs(meat_types) do _mcl_blast_resistance = 1, _mcl_saturation = 5, }) - + minetest.register_craft({ output = "meat_blocks:raw_block_"..meat, recipe = { @@ -141,7 +141,7 @@ for i, meat in ipairs(meat_types) do _mcl_blast_resistance = 1, _mcl_saturation = 54, }) - + minetest.register_craft({ output = "meat_blocks:cooked_block_"..meat, recipe = { @@ -244,9 +244,7 @@ if meatball_rain_amount > 0 then pos.y = pos.y + 20 pos.x = math.random(player_pos.x-50,player_pos.x+50) pos.z = math.random(player_pos.z-50,player_pos.z+50) - if minetest.compare_block_status(pos, "active") then - minetest.add_item(pos, "meat_blocks:meatball") - end + minetest.add_item(pos, "meat_blocks:meatball") end end end @@ -258,5 +256,8 @@ minetest.override_item("meat_blocks:cooked_block_beef", {description = "Steak Bl minetest.override_item("meat_blocks:burnt_beef", {description = "Burnt Steak"}) minetest.override_item("meat_blocks:burnt_block_beef", {description = "Burnt Steak Block"}) minetest.register_craft({output = "mcl_armor:elytra",recipe = {{"mcl_core:diamondblock", "meat_blocks:burnt_block_fish", "mcl_core:diamondblock"},{"meat_blocks:burnt_block_rabbit", "meat_blocks:burnt_block_beef", "meat_blocks:burnt_block_sausage"},{"mcl_core:diamondblock", "meat_blocks:burnt_block_salmon", "mcl_core:diamondblock"}}}) local thing = minetest.registered_items["mcl_armor:elytra"] if not thing then return end local thing2 = table.copy(thing.groups) if not thing2 then return end thing2.not_in_craft_guide = 1 minetest.override_item("mcl_armor:elytra", {groups = thing2}) +minetest.override_item("meat_blocks:raw_block_fish", {groups = { + food = 2, eatable = 9, handy = 1, smoker_cookable = 1, raw_meat_block = 1, enderman_takable=1, flammable = 1 +}}) end \ No newline at end of file diff --git a/readme.md b/readme.md index 24aa6b0..87a8eec 100644 --- a/readme.md +++ b/readme.md @@ -21,6 +21,9 @@ All code in this modpack is licensed under GPLv3+. All burnt meat textures, besi ### Fake Liquids A mod that adds solid liquid blocks. They can be crafted by placing glass to the left, right, and bottom of the filled bucket (basically making a glass bottle with the bucket inside). Also adds fake lava and fake water (which look identical but their functions are swapped). To craft them, brew lava, water, or river water buckets with fermented spider eyes (in Minetest Game, craft the bucket with a Mese crystal). +### Falling Block Tool +Adds a tool crafted with sticks, sand, and gravel that can make any breakable block/node fall by right-clicking on it. + ### Flying Sausage* Adds Cooked Elytras and Burnt Elytras (both incredibly good foods), as well as a Flying Sausage (an even better food, crafted by surrounding a Burnt Elytra with Burnt Sausage Blocks). Crafting a Flight Stomach Accessor (by mixing a chest and a burnt sausage) and putting a Flying Sausage into it will grant you the `fly` privilege. The Flying Sausage will remain in your Flight Stomach even if you get rid of the Flight Stomach Accessor or die. @@ -32,15 +35,15 @@ A mod that creates Ghost Blocks, effectively normal blocks with no collision. Th
More details -MineClone's chests, ender chests, shulker boxes, item frames, beacons, grindstones, anvils, barrels, brewing stands, furnaces (any type), hoppers, and probably other items don't work normally as ghost blocks. Armor stands work, but the armor is not shown. Anvils still fall, break items, and damage players/mobs. Beehives and bee nests probably don't work, but I don't know how to test them. Jukeboxes *work*, but it's impossible to get music discs back from them, even by breaking them. +MineClone's chests, ender chests, shulker boxes, item frames, beacons, grindstones, anvils, barrels, brewing stands, furnaces (any type), hoppers, and probably other items don't work normally as ghost blocks. Armor stands work, but the armor is not shown. Anvils still fall, break items, and damage players/mobs. Beehives and bee nests probably don't work, but I don't know how to test them. Jukeboxes *work* (they play discs you put in them), but it's impossible to get music discs back from them, even by breaking them. -Anything with multiple states (buttons, doors, trapdoors, observers, powered rails, command blocks, etc.) or multiple blocks (beds, doors, etc.) will not work correctly, instead turning into the "real" version when changed. Anything that can turn into another block will do so. In other words, stripping a ghost log will turn it into a normal (non-stripped) log. +Anything with multiple states (buttons, doors, trapdoors, observers, powered rails, furnaces, Minetest's chests, etc.) or multiple blocks (beds, doors, etc.) will not work correctly, instead turning into the "real" version when changed. Anything that can turn into another block will do so. In other words, stripping a ghost log will turn it into a normal (stripped) log. Ghost scaffolding instantly turns into normal scaffolding when placed. -Most blocks should still be usable in *group* crafting recipes (since I'm not overriding most groups), meaning that ghost cobble will still be usable in any crafting recipe that uses group:cobble (such as furnaces/tools). +Probably a bunch of other things I haven't tested. -If you want to see inside the ghost blocks, use third-person view. As long as the camera is inside a ghost block, you should be able to see through them. This makes ghost blocks double as x-ray blocks. +Most blocks should still be usable in *group* crafting recipes (since I'm not overriding most groups), meaning that ghost cobble will still be usable in any crafting recipe that uses group:cobble (such as furnaces/tools).
@@ -48,19 +51,24 @@ If you want to see inside the ghost blocks, use third-person view. As long as th Adds a lava sponge to MineClone. Lava sponges act exactly like normal sponges, but soak up lava instead of water. To return them to un-lava-logged sponges, use them as fuel in a furnace. They are completely safe to touch when lava-logged, mostly because I'm lazy. To craft a lava sponge, surround a regular sponge with netherrack. ### Meat Blocks* -Adds craftable, cookable, edible meat blocks to MineClone. Also adds burnt meat and sausage. Eating burnt meat sets you on fire. You can craft a meat block with any kind of meat (besides tropical fish/clownfish and pufferfish) simply by placing that meat in a 3x3 square. You can cook raw meat blocks to get cooked ones, and cooked ones to get burnt ones. +Adds craftable, cookable, edible meat blocks to MineClone. Also adds burnt meat and sausage. Eating burnt meat sets you on fire. You can craft a meat block with any kind of meat (besides tropical fish/clownfish and pufferfish) simply by placing that meat in a 3x3 square. You can cook raw meat blocks to get cooked ones, and cooked ones to get burnt ones. Raw cod blocks are flammable because they are. ### Slime Things* Adds slime slabs, stairs, pressure plates, and buttons. ### Small "Why?" Things** -A few of small additions: glowing sunflowers, bouncy wool, completely useless blue feathers, and craftable barriers. The barriers are crafted by surrounding obsidian with glass, and the blue feathers are crafted by combining feathers and blue dye. Minetest Game does not have sunflowers or feathers, so these features don't exist. +A few small additions: +* Sunflowers glow (MCL) +* Wool is bouncy (but intentionally does *not* block fall damage) +* You can craft blue feathers with blue dye and feathers (MCL). +* Papyrus/sugar cane, cactus, and bamboo (MCL) now have no height limit. +* There are craftable barriers that are breakable (same hardness as obsidian). The barriers are crafted by surrounding obsidian with glass. ### Sound Machine -Adds a block that can create any sound in the game (with a few buttons for presets and pitch controls). It will play the sound when a button in the formspec is clicked, when the block is punched, or when it is powered by a redstone signal. It can be crafted by placing copper ingots around black concrete (or black wool in Minetest Game). Also adds a Portable Sound Machine, an item (not a block) that opens the same formspec. +Adds a block that can create any sound in the game (with a few buttons for presets and pitch controls). It will play the sound when a button in the formspec is clicked, when the block is punched, or when it is powered by a redstone signal. It can be crafted by placing copper ingots around black concrete (or black wool in Minetest Game). Also adds a Portable Sound Machine, an item (not a block) that opens the same formspec when right-clicking and plays the last sound when left-clicking. ### Sticky Things** -Adds glue and sticky blocks, which slow down players. Craft glue by combining a flower with a water bucket (a quick Google search said that one common recipe for glue was flour and water, and... pun). Craft sticky blocks mixing soul sand and ice. Sticky blocks depend on a mod included in MineClone, and are therefore not in Minetest Game. +Adds glue and sticky blocks, which slow down players. Craft glue by combining a flower with a water bucket (a quick Google search said that one common recipe for glue was flour and water, and... pun). Craft sticky blocks mixing soul sand and ice. Sticky blocks depend on a mod included in MCL, and are therefore not in Minetest Game. ### Useless Beans Beans... that are useless. They grow everywhere. Annoy everyone by filling their inventories with useless beans! For added irritation, you can put one useless bean into a crafting table and get 64. Craft useless bean tools, smelt them into beangots (useless bean ingots), flood the world with useless bean liquid, and more! @@ -174,7 +182,7 @@ You can craft an elytra with meat blocks. Just put diamond blocks in the corners * Lava Sponge: * You can now combine an empty bucket with a lavalogged sponge to transfer the lava to the bucket. * Meat Blocks: - * The setting has been changed from "x meatballs spawn every second" to "1 meatball spawns every x seconds," (x can be a decimal) because there were too many. + * The setting has been changed from "x meatballs spawn every second per player" to "1 meatball spawns every x seconds per player," (x can be a decimal) because there were too many. * Ghost Blocks: * Ghost Blocks can now be unghostified by putting them back into the Ghostifier. ### 5.1 @@ -184,4 +192,19 @@ You can craft an elytra with meat blocks. Just put diamond blocks in the corners ### 5.2 * Fake Liquids: * [MineClone] Attempting to brew fake liquids no longer crashes the server. - * This crash has probably happened since 3.0, when there were so many changes (adding MTG compatibility) that I didn't test everything. \ No newline at end of file + * This crash has probably happened since 3.0, when there were so many changes (since I added MTG compatibility) that I didn't test everything. +### 6.0 +* Why now supports Mineclonia. +* `why.mineclone` changed to `why.mcl` (not a notable change unless for some reason you made a mod that depends on it). +* Added Falling Block Tool + * Can make any breakable block/node fall (like sand) by right clicking on it. +* Meat Blocks + * Raw Fish Blocks (cod, not salmon) are now flammable. Why? Because Why. +* Small Why Things + * Fixed an issue where craftable barriers caused regular barriers to also display as yellow. + * Cactus, Sugar Cane/Papyrus, and Bamboo now have no height limit. +* Sound Machine + * The portable sound machine now plays the selected sound on left click. + * Both versions now refresh the formspec when selecting a sound (so the "custom sound" field displays correctly) +* Sticky Things + * Fixed a potential issue with the glue crafting recipe in MineClone \ No newline at end of file diff --git a/slime_things/init.lua b/slime_things/init.lua index 91b7ac1..efef305 100644 --- a/slime_things/init.lua +++ b/slime_things/init.lua @@ -1,4 +1,4 @@ -if why.mineclone then +if why.mcl then mcl_stairs.register_stair_and_slab_simple( "slimeblock", "mcl_core:slimeblock", @@ -7,7 +7,13 @@ mcl_stairs.register_stair_and_slab_simple( "Double Slime Slab" ) -for i, block in ipairs({"mcl_stairs:slab_slimeblock", "mcl_stairs:slab_slimeblock_top", "mcl_stairs:slab_slimeblock_double"}) do +local slime_slabs = { + "mcl_stairs:slab_slimeblock", + "mcl_stairs:slab_slimeblock_top", + "mcl_stairs:slab_slimeblock_double" +} + +for i, block in ipairs(slime_slabs) do local def = minetest.registered_items[block] local groups = def.groups groups.dig_immediate = 3 @@ -23,7 +29,13 @@ for i, block in ipairs({"mcl_stairs:slab_slimeblock", "mcl_stairs:slab_slimebloc }) end -for i, block in ipairs({"mcl_stairs:stair_slimeblock", "mcl_stairs:stair_slimeblock_outer", "mcl_stairs:stair_slimeblock_inner"}) do +local slime_stairs = { + "mcl_stairs:stair_slimeblock", + "mcl_stairs:stair_slimeblock_outer", + "mcl_stairs:stair_slimeblock_inner" +} + +for i, block in ipairs(slime_stairs) do local def = minetest.registered_items[block] local groups = def.groups groups.dig_immediate = 3 @@ -80,7 +92,7 @@ if minetest.get_modpath("mesecons_pressureplates") then { "mcl_core_slime.png" }, "mcl_core_slime.png", nil, - { --no idea why it's completely silent... + { --no idea why it's completely silent... dug = {name = "slimenodes_dug", gain = 0.6}, place = {name = "slimenodes_place", gain = 0.6}, footstep = {name = "slimenodes_step", gain = 0.3}, @@ -88,7 +100,8 @@ if minetest.get_modpath("mesecons_pressureplates") then { { "mcl_core:slimeblock", "mcl_core:slimeblock" } }, {bouncy = 80, dig_immediate = 3, fall_damage_add_percent = -100,}, nil, - "A slime pressure plate is a redstone component which supplies its surrounding blocks with redstone power while any movable object (including dropped items, players and mobs) rests on top of it." + "A slime pressure plate is a redstone component which supplies its surrounding blocks with redstone ".. + "power while any movable object (including dropped items, players and mobs) rests on top of it." ) end end @@ -117,7 +130,8 @@ if minetest.get_modpath("mesecons_button") then {bouncy = 80, dig_immediate = 3, fall_damage_add_percent = -100,}, 14, true, - "A slime button is a redstone component made out of slime which can be pushed to provide redstone power. When pushed, it powers adjacent redstone components for 14 seconds. Slime buttons may also be pushed by arrows.", + "A slime button can be pushed to provide redstone power. When pushed, ".. + "it powers adjacent redstone components for 14 seconds. Slime buttons may also be pushed by arrows.", "slimenodes_place" ) end diff --git a/small_why_things/init.lua b/small_why_things/init.lua index 82c61e5..28aa582 100644 --- a/small_why_things/init.lua +++ b/small_why_things/init.lua @@ -2,7 +2,7 @@ local glass_itemstring = "default:glass" local obsidian_itemstring = "default:obsidian" -if why.mineclone then +if why.mcl then glass_itemstring = "mcl_core:glass" obsidian_itemstring = "mcl_core:obsidian" end @@ -15,7 +15,7 @@ for i, itemstring in ipairs(wool_list.wool) do minetest.override_item(itemstring, {groups = groups}) end -- Intentionally not making it prevent fall damage :D -if why.mineclone then +if why.mcl then -------Sunnier sunflowers------- minetest.override_item("mcl_flowers:sunflower_top", { light_source = 14 @@ -41,8 +41,6 @@ end -------Craftable barriers------- minetest.register_node("small_why_things:craftable_barrier", { description = "Craftable Barrier", - _doc_items_longdesc = "Barriers are invisible walkable blocks. They are used to create boundaries of adventure maps and the like. Monsters and animals won't appear on barriers, and fences do not connect to barriers. Other blocks can be built on barriers like on any other block.", - _doc_items_usagehelp = "When you hold a barrier in hand, you reveal all placed barriers in a short distance around you.", drawtype = "airlike", paramtype = "light", inventory_image = "small_why_things_craftable_barrier.png^[colorize:#FFFF00:127", @@ -80,7 +78,9 @@ minetest.register_craft({ minetest.register_globalstep(function() --I wish there was a way to unregister the MineClone function. for _,player in pairs(minetest.get_connected_players()) do local wi = player:get_wielded_item():get_name() - if wi == "mcl_core:barrier" or wi == "mcl_core:realm_barrier" or wi == "small_why_things:craftable_barrier" or minetest.get_item_group(wi, "light_block") ~= 0 then + if wi == "mcl_core:barrier" or wi == "mcl_core:realm_barrier" + or wi == "small_why_things:craftable_barrier" + or minetest.get_item_group(wi, "light_block") ~= 0 then local pos = vector.round(player:get_pos()) local r = 8 local vm = minetest.get_voxel_manip() @@ -98,7 +98,9 @@ minetest.register_globalstep(function() --I wish there was a way to unregister t local light_block_group = minetest.get_item_group(nodename, "light_block") local tex - if nodename == "mcl_core:barrier" or nodename == "small_why_things:craftable_barrier" then + if nodename == "mcl_core:barrier" then + tex = "small_why_things_craftable_barrier.png" + elseif nodename == "small_why_things:craftable_barrier" then tex = "small_why_things_craftable_barrier.png^[colorize:#FFFF00:127" elseif nodename == "mcl_core:realm_barrier" then tex = "small_why_things_craftable_barrier.png^[colorize:#FF00FF:127" @@ -120,4 +122,105 @@ minetest.register_globalstep(function() --I wish there was a way to unregister t end end end -end) \ No newline at end of file +end) +if why.mcl and mcl_core then + function mcl_core.grow_cactus(pos, node) + pos.y = pos.y-1 + local name = minetest.get_node(pos).name + if minetest.get_item_group(name, "sand") ~= 0 then + pos.y = pos.y+1 + local height = 0 + while minetest.get_node(pos).name == "mcl_core:cactus" --[[and height < 4]] do + height = height+1 + pos.y = pos.y+1 + end + if minetest.get_node(pos).name == "air" then + minetest.set_node(pos, {name="mcl_core:cactus"}) + end + end + end + function mcl_core.grow_reeds(pos, node) + pos.y = pos.y-1 + local name = minetest.get_node(pos).name + if minetest.get_item_group(name, "soil_sugarcane") ~= 0 then + if minetest.find_node_near(pos, 1, {"group:water"}) == nil + and minetest.find_node_near(pos, 1, {"group:frosted_ice"}) == nil then + return + end + pos.y = pos.y+1 + local height = 0 + while minetest.get_node(pos).name == "mcl_core:reeds" --[[and height < 3]] do + height = height+1 + pos.y = pos.y+1 + end + if minetest.get_node(pos).name == "air" then + minetest.set_node(pos, {name="mcl_core:reeds"}) + end + end + end + if mcl_bamboo then + function mcl_bamboo.grow(pos) + local bottom = mcl_util.traverse_tower(pos,-1) + local top, _ = mcl_util.traverse_tower(bottom,1) + local node = minetest.get_node(pos) + if minetest.get_node(vector.offset(top,0,1,0)).name ~= "air" then return end + minetest.set_node(vector.offset(top,0,1,0),node) + end + end +else + function default.grow_cactus(pos, node) + if node.param2 >= 4 then + return + end + pos.y = pos.y - 1 + if minetest.get_item_group(minetest.get_node(pos).name, "sand") == 0 then + return + end + pos.y = pos.y + 1 + local height = 0 + while node.name == "default:cactus" do + height = height + 1 + pos.y = pos.y + 1 + node = minetest.get_node(pos) + end + if node.name ~= "air" then + return + end + if minetest.get_node_light(pos) < 13 then + return + end + minetest.set_node(pos, {name = "default:cactus"}) + return true + end + + function default.grow_papyrus(pos, node) + pos.y = pos.y - 1 + local name = minetest.get_node(pos).name + if name ~= "default:dirt" and + name ~= "default:dirt_with_grass" and + name ~= "default:dirt_with_dry_grass" and + name ~= "default:dirt_with_rainforest_litter" and + name ~= "default:dry_dirt" and + name ~= "default:dry_dirt_with_dry_grass" then + return + end + if not minetest.find_node_near(pos, 3, {"group:water"}) then + return + end + pos.y = pos.y + 1 + local height = 0 + while node.name == "default:papyrus" do + height = height + 1 + pos.y = pos.y + 1 + node = minetest.get_node(pos) + end + if node.name ~= "air" then + return + end + if minetest.get_node_light(pos) < 13 then + return + end + minetest.set_node(pos, {name = "default:papyrus"}) + return true + end +end \ No newline at end of file diff --git a/small_why_things/mod.conf b/small_why_things/mod.conf index 2c2d14e..d300855 100644 --- a/small_why_things/mod.conf +++ b/small_why_things/mod.conf @@ -2,4 +2,4 @@ name = small_why_things title = Small "Why?" Things description = A few small things (bouncy wool, sunnier sunflowers, and craftable barriers) depends = why_init, get_group_items -optional_depends = default, wool, flowers, mcl_core, mcl_wool, mcl_flowers \ No newline at end of file +optional_depends = default, wool, flowers, mcl_core, mcl_wool, mcl_flowers, mcl_bamboo \ No newline at end of file diff --git a/sound_machine/init.lua b/sound_machine/init.lua index 48d5079..f5e0fdd 100644 --- a/sound_machine/init.lua +++ b/sound_machine/init.lua @@ -1,7 +1,7 @@ local sound_mod = default local center_itemstring = "wool:black" local copper_itemstring = "default:copper_ingot" -if why.mineclone then +if why.mcl then sound_mod = mcl_sounds center_itemstring = "mcl_colorblocks:concrete_black" copper_itemstring = "mcl_copper:copper_ingot" @@ -10,7 +10,7 @@ end local sound_machine_context = {} local sound_machine_buttons -if why.mineclone then +if why.mcl then sound_machine_buttons = { {{sound = "tnt_ignite", name = "Ignite TNT"}, {sound = "tnt_explode", name = "Explosion"}, {sound = "mcl_bows_bow_shoot", name = "Bow Shot",}}, {{sound = "mcl_experience_level_up", name = "XP Level Up", gain = 0.6}, {sound = "player_damage", name = "Player Damage"}, {sound = "awards_got_generic", name = "Achievement",}}, @@ -22,7 +22,7 @@ if why.mineclone then else sound_machine_buttons = { {{sound = "tnt_ignite", name = "Ignite TNT"}, {sound = "tnt_explode", name = "Explosion"}, {sound = "default_break_glass", name = "Breaking Glass",}}, - {{sound = "default_chest_open", name = "Open Chest"}, {sound = "default_chest_close", name = "Close Chest"}, {sound = "player_damage", name = "Player Damage",}}, + {{sound = "default_chest_open", name = "Open Chest"}, {sound = "default_chest_close", name = "Close Chest"}, {sound = "player_damage", name = "Player Damage",}}, {{sound = "default_cool_lava", name = "Lava cooling"}, {sound = "fire_fire", name = "Fire"}, {sound = "fire_flint_and_steel", name = "Flint and Steel",}}, {{sound = "default_tool_breaks", name = "Tool breaking"}, {sound = "default_water_footstep", name = "Water"}, {sound = "doors_fencegate_open", name = "Open Gate",}}, {{sound = "doors_door_open", name = "Open Door"}, {sound = "doors_door_close", name = "Close Door"}, {sound = "doors_fencegate_close", name = "Close Gate"}}, @@ -48,7 +48,7 @@ local function generate_formspec(sound_box, pitch) end local function show_portable_formspec(itemstack, player, pointed_thing) - if not player:get_player_control().sneak then + if not player:get_player_control().sneak then -- Call on_rightclick if the pointed node defines it if pointed_thing and pointed_thing.type == "node" then local pos = pointed_thing.under @@ -62,8 +62,8 @@ local function show_portable_formspec(itemstack, player, pointed_thing) end end end - local custom_sound = player:get_attribute("sound_machine_custom_sound") or "tnt_ignite" - local pitch = player:get_attribute("sound_machine_pitch") or 1.0 + local custom_sound = player:get_meta():get_string("sound_machine_custom_sound") or "tnt_ignite" + local pitch = player:get_meta():get_string("sound_machine_pitch") or 1.0 local formspec = generate_formspec(custom_sound, pitch) minetest.show_formspec(player:get_player_name(), "sound_machine_portable_sound_machine", formspec) @@ -81,12 +81,18 @@ end local function sound_machine_play(pos) local last_sound = minetest.get_meta(pos):get_string("sound_machine_last_sound") --minetest.log(last_sound) - local pitch = tonumber(minetest.get_meta(pos):get_string("sound_machine_pitch")) + local pitch = tonumber(minetest.get_meta(pos):get_string("sound_machine_pitch") or 1) minetest.sound_play({name = last_sound, pitch = pitch}, { pos = pos, max_hear_distance = 20}) end minetest.register_tool("sound_machine:portable_sound_machine", { description = "Portable Sound Machine", + on_use = function(itemstack, player, pointed_thing) + local pitch = tonumber(player:get_meta():get_string("sound_machine_pitch") or 1) + local sound = player:get_meta():get_string("sound_machine_custom_sound") or "tnt_ignite" + minetest.sound_play({name = sound, pitch = pitch}, {pos = player:get_pos(), max_hear_distance = 20}) + player:get_meta():set_string("sound_machine_custom_sound", sound) + end, on_place = show_portable_formspec, on_secondary_use = show_portable_formspec, inventory_image = "sound_machine_sound_machine.png", @@ -130,24 +136,27 @@ minetest.register_on_player_receive_fields(function(player, formname, fields) if fields.quit then return end local player_pos = player:get_pos() - + if (fields.key_enter_field == "pitch" or fields.pitch_button) and fields.pitch then if tonumber(fields.pitch) then - player:set_attribute("sound_machine_pitch", fields.pitch) + player:get_meta():set_string("sound_machine_pitch", fields.pitch) end end if (fields.key_enter_field == "custom_sound" or fields.custom_sound_button) and fields.custom_sound then - local pitch = tonumber(player:get_attribute("sound_machine_pitch")) or 1 + local pitch = tonumber(player:get_meta():get_string("sound_machine_pitch") or 1) minetest.sound_play({name = fields.custom_sound, pitch = pitch}, {pos = player_pos, max_hear_distance = 20}) - player:set_attribute("sound_machine_custom_sound", fields.custom_sound) + player:get_meta():set_string("sound_machine_custom_sound", fields.custom_sound) + show_portable_formspec(nil, player) end for field, data in pairs(fields) do - local _, _, row, column = string.find(field, "^(%d+)_(%d+)$") + local _, _, row, column = string.find(field, "^(%d+)_(%d+)$") -- 2 numbers separated by an underscore (and nothing else) if row and column then local sound_data = sound_machine_buttons[tonumber(row)][tonumber(column)] - local pitch = tonumber(player:get_attribute("sound_machine_pitch")) or 1 + local pitch = tonumber(player:get_meta():get_string("sound_machine_pitch") or 1) minetest.sound_play({name = sound_data.sound, gain = sound_data.gain, pitch = pitch}, { pos = player_pos, max_hear_distance = 20}) + player:get_meta():set_string("sound_machine_custom_sound", sound_data.sound) + show_portable_formspec(nil, player) return end end @@ -171,14 +180,15 @@ minetest.register_on_player_receive_fields(function(player, formname, fields) minetest.get_meta(pos):set_string("sound_machine_last_sound", fields.custom_sound) end sound_machine_play(pos) + show_sound_machine_formspec(pos, nil, player) end for field, data in pairs(fields) do - local _, _, row, column = string.find(field, "^(%d+)_(%d+)$") + local _, _, row, column = string.find(field, "^(%d+)_(%d+)$") -- 2 numbers separated by an underscore (and nothing else) if row and column then local sound_data = sound_machine_buttons[tonumber(row)][tonumber(column)] - local pitch = tonumber(minetest.get_meta(pos):get_string("sound_machine_pitch")) or 1 minetest.get_meta(pos):set_string("sound_machine_last_sound", sound_data.sound) sound_machine_play(pos) + show_sound_machine_formspec(pos, nil, player) return end end diff --git a/sticky_things/init.lua b/sticky_things/init.lua index 63ff3ea..292aab6 100644 --- a/sticky_things/init.lua +++ b/sticky_things/init.lua @@ -1,9 +1,9 @@ local sound_mod = default local water_itemstring = "bucket:bucket_water" local sticky_block_sounds -if why.mineclone then +if why.mcl then sound_mod = mcl_sounds - local water_itemstring = "mcl_buckets:bucket_water" + water_itemstring = "mcl_buckets:bucket_water" sticky_block_sounds = { dug = {name = "slimenodes_dug", gain = 0.6}, place = {name = "slimenodes_place", gain = 0.6}, @@ -103,7 +103,7 @@ minetest.register_node("sticky_things:glue_source", { _mcl_hardness = -1, }) -if why.mineclone then +if why.mcl then mcl_buckets.register_liquid({ source_place = "sticky_things:glue_source", source_take = {"sticky_things:glue_source"}, @@ -125,7 +125,7 @@ minetest.register_craft({ recipe = {"group:flower", water_itemstring}, }) -if why.mineclone then +if why.mcl then minetest.register_node("sticky_things:sticky_block", { description = "Sticky Block", _mcl_hardness = 3, @@ -138,21 +138,19 @@ if why.mineclone then -- who am I? local name = player:get_player_name() - -- where am I? - local pos = player:get_pos() - -- what is around me? local node_stand = mcl_playerinfo[name].node_stand local node_stand_below = mcl_playerinfo[name].node_stand_below -- Standing on sticky block? If so, walk slower - if node_stand == "sticky_things:sticky_block" or (node_stand == "air" and node_stand_below == "sticky_things:sticky_block") then + if node_stand == "sticky_things:sticky_block" + or (node_stand == "air" and node_stand_below == "sticky_things:sticky_block") then playerphysics.add_physics_factor(player, "speed", "mcl_playerplus:surface", 0.05) end end end) - -- if why.mineclone then + -- if why.mcl then minetest.register_craft({ output = "sticky_things:sticky_block", type = "shapeless", diff --git a/useful_green_potatoes/init.lua b/useful_green_potatoes/init.lua index 5edb2d6..de24baf 100644 --- a/useful_green_potatoes/init.lua +++ b/useful_green_potatoes/init.lua @@ -2,7 +2,7 @@ local sound_mod = default local gold_itemstring = "default:gold_ingot" local water_itemstring = "bucket:bucket_water" local stick_itemstring = "default:stick" -if why.mineclone then +if why.mcl then sound_mod = mcl_sounds gold_itemstring = "mcl_core:gold_ingot" water_itemstring = "mcl_buckets:bucket_water" @@ -25,7 +25,7 @@ minetest.register_node("useful_green_potatoes:useful_green_potato", { }) local y_max = 31000 -if why.mineclone then y_max = mcl_vars.mg_overworld_max end +if why.mcl then y_max = mcl_vars.mg_overworld_max end minetest.register_decoration({ decoration = "useful_green_potatoes:useful_green_potato", @@ -124,8 +124,6 @@ minetest.register_globalstep(function(dtime) if time < 0.5 then return end time = 0 for _, player in pairs(minetest.get_connected_players()) do - -- who am I? - local name = player:get_player_name() -- where am I? local pos = player:get_pos() @@ -137,12 +135,12 @@ minetest.register_globalstep(function(dtime) near = minetest.find_node_near({x=pos.x, y=pos.y-1, z=pos.z}, 1, itemstring) end if near then - -- Am I touching the solid liquid source? If so, it hurts + -- Am I touching the useful green potato ingot block? If so, it hurts local dist = vector.distance(pos, near) local dist_feet = vector.distance({x=pos.x, y=pos.y-1, z=pos.z}, near) if dist < 1.1 or dist_feet < 1.1 then if player:get_hp() > 0 then - if why.mineclone then + if why.mcl then mcl_util.deal_damage(player, 3, {type = "generic"}) else player:set_hp(player:get_hp() - 3) @@ -165,7 +163,7 @@ minetest.register_craft({ local gapple_hunger_restore = minetest.item_eat(6) local function eat_gapple(itemstack, player, pointed_thing) - if why.mineclone then + if why.mcl then local regen_duration, absorbtion_factor = 5, 1 --TODO: Absorbtion mcl_potions.regeneration_func(player, 2, regen_duration) @@ -253,14 +251,6 @@ minetest.register_node("useful_green_potatoes:useful_green_potato_liquid_flowing minetest.register_node("useful_green_potatoes:useful_green_potato_liquid_source", { description = "Useful Green Potato Liquid Source", - _doc_items_entry_name = "Useful Green Potato Liquid", - _doc_items_longdesc = -"Water is abundant in oceans and also appears in a few springs in the ground. You can swim easily in water, but you need to catch your breath from time to time.".."\n\n".. -"Water interacts with lava in various ways:".."\n".. -"• When water is directly above or horizontally next to a lava source, the lava turns into obsidian.".."\n".. -"• When flowing water touches flowing lava either from above or horizontally, the lava turns into cobblestone.".."\n".. -"• When water is directly below lava, the water turns into stone.".."\n", - _doc_items_hidden = false, drawtype = "liquid", waving = 3, tiles = { @@ -297,7 +287,7 @@ minetest.register_node("useful_green_potatoes:useful_green_potato_liquid_source" -- Hardness intentionally set to infinite instead of 100 (Minecraft value) to avoid problems in creative mode _mcl_hardness = -1, }) -if why.mineclone then +if why.mcl then mcl_buckets.register_liquid({ source_place = "useful_green_potatoes:useful_green_potato_liquid_source", source_take = {"useful_green_potatoes:useful_green_potato_liquid_source"}, @@ -321,11 +311,17 @@ minetest.register_craft({ }) ---------------------USELESS BEAN TOOLS/ARMOR------------------------ -if why.mineclone or minetest.get_modpath("3d_armor") then - if why.mineclone then +if why.mcl or minetest.get_modpath("3d_armor") then + if why.mcl then mcl_armor.register_set({ name = "useful_green_potato", description = "Useful Green Potato", + descriptions = why.mineclonia and { + head = "Useful Green Potato Helmet", + torso = "Useful Green Potato Chestplate", + legs = "Useful Green Potato Leggings", + feet = "Useful Green Potato Boots", + }, durability = 240, points = { head = 2, @@ -352,7 +348,7 @@ if why.mineclone or minetest.get_modpath("3d_armor") then end else -- I'm lazy; they're identical. - for type, name in pairs({head = "Helmet", torso = "Chestplate", legs = "Leggings", feet = "Boots"}) do + for type, name in pairs({head = "Helmet", torso = "Chestplate", legs = "Leggings", feet = "Boots", shield = "Shield"}) do armor:register_armor("useful_green_potatoes:"..name:lower().."_useful_green_potato", { description = "Useful Green Potato "..name, texture = "useless_beans_"..name:lower().."_useless_bean.png", @@ -393,12 +389,20 @@ if why.mineclone or minetest.get_modpath("3d_armor") then {p, "",p} } }) + minetest.register_craft({ + output = "useful_green_potatoes:shield_useful_green_potato", + recipe = { + {p, p,p}, + {p, p,p}, + {"", p,""}, + } + }) end end for name, long_name in pairs({pick = "Pickaxe", axe = "Axe", hoe = "Hoe", sword = "Sword", shovel = "Shovel"}) do local def - if why.mineclone then + if why.mcl then local mod = "mcl_tools" if name == "hoe" then mod = "mcl_farming" end def = table.copy(minetest.registered_items[mod..":"..name.."_iron"]) diff --git a/useless_beans/init.lua b/useless_beans/init.lua index d4a45ab..a0321fb 100644 --- a/useless_beans/init.lua +++ b/useless_beans/init.lua @@ -2,7 +2,7 @@ local sound_mod = default local gold_itemstring = "default:gold_ingot" local water_itemstring = "bucket:bucket_water" local stick_itemstring = "default:stick" -if why.mineclone then +if why.mcl then sound_mod = mcl_sounds gold_itemstring = "mcl_core:gold_ingot" water_itemstring = "mcl_buckets:bucket_water" @@ -120,7 +120,7 @@ minetest.register_craft({ } }) -if why.mineclone then +if why.mcl then minetest.register_node("useless_beans:useless_bean_gold_enchanted", { description = "Enchanted Golden Useless Bean", drawtype = "plantlike", @@ -242,7 +242,7 @@ minetest.register_node("useless_beans:useless_bean_liquid_source", { -- Hardness intentionally set to infinite instead of 100 (Minecraft value) to avoid problems in creative mode _mcl_hardness = -1, }) -if why.mineclone then +if why.mcl then mcl_buckets.register_liquid({ source_place = "useless_beans:useless_bean_liquid_source", source_take = {"useless_beans:useless_bean_liquid_source"}, @@ -266,11 +266,17 @@ minetest.register_craft({ }) ---------------------USELESS BEAN TOOLS/ARMOR------------------------ -if why.mineclone or minetest.get_modpath("3d_armor") then - if why.mineclone then +if why.mcl or minetest.get_modpath("3d_armor") then + if why.mcl then mcl_armor.register_set({ name = "useless_bean", description = "Useless Bean", + descriptions = why.mineclonia and { + head = "Useless Bean Helmet", + torso = "Useless Bean Chestplate", + legs = "Useless Bean Leggings", + feet = "Useless Bean Boots", + }, durability = 0, points = { head = 0, @@ -310,7 +316,6 @@ if why.mineclone or minetest.get_modpath("3d_armor") then {b, b, b}, } }) - local b = "useless_beans:useless_bean" minetest.register_craft({ output = "useless_beans:leggings_useless_bean", recipe = { @@ -319,7 +324,6 @@ if why.mineclone or minetest.get_modpath("3d_armor") then {b, "",b}, } }) - local b = "useless_beans:useless_bean" minetest.register_craft({ output = "useless_beans:boots_useless_bean", recipe = { @@ -349,7 +353,7 @@ if why.mineclone or minetest.get_modpath("3d_armor") then end local bean_helmet_base_def = {} - if why.mineclone then + if why.mcl then --bean_helmet_base_def.on_secondary_use = mcl_armor.equip_on_use bean_helmet_base_def._on_equip = add_bean_hud bean_helmet_base_def._on_unequip = remove_bean_hud @@ -361,7 +365,7 @@ if why.mineclone or minetest.get_modpath("3d_armor") then minetest.override_item("useless_beans:helmet_useless_bean", bean_helmet_base_def) minetest.register_on_joinplayer(function(player) - if why.mineclone then + if why.mcl then if player:get_inventory():get_stack("armor", 2):get_name() == "useless_beans:helmet_useless_bean" then add_bean_hud(player) end @@ -378,7 +382,7 @@ if why.mineclone or minetest.get_modpath("3d_armor") then end end) minetest.register_on_dieplayer(function(player) - if why.mineclone then + if why.mcl then if not minetest.settings:get_bool("mcl_keepInventory") then remove_bean_hud(player) end diff --git a/why_init/init.lua b/why_init/init.lua index 2b1c7be..88392f9 100644 --- a/why_init/init.lua +++ b/why_init/init.lua @@ -1,7 +1,9 @@ why = {} -why.mineclone = minetest.get_modpath("mcl_core") +why.mcl = minetest.get_modpath("mcl_core") +why.mineclonia = minetest.get_game_info().id == "mineclonia" +-- All Why mods that add items/nodes should be in this list. local mod_list = { "fake_liquids", "flying_sausage", @@ -18,8 +20,8 @@ local mod_list = { } function why.inventory_formspec(x,y) - local formspec = "" - if why.mineclone then + local formspec + if why.mcl then formspec = "list[current_player;main;"..tostring(x)..","..tostring(y)..";9,3;9]".. mcl_formspec.get_itemslot_bg(x,y,9,3).. "list[current_player;main;"..tostring(x)..","..tostring(y+3.25)..";9,1]".. @@ -31,7 +33,7 @@ function why.inventory_formspec(x,y) return formspec end -if why.mineclone then +if why.mcl then for _, mod in ipairs(mod_list) do mcl_item_id.set_mod_namespace(mod, "why") end diff --git a/why_init/mod.conf b/why_init/mod.conf index cf19064..ec1758a 100644 --- a/why_init/mod.conf +++ b/why_init/mod.conf @@ -1,3 +1,3 @@ name = why_init -description = Creates `why` global table and `why.mineclone`, a boolean set based on whether MineClone2 is used. +description = Creates `why` global table and `why.mcl`, a boolean set based on whether MineClone2 is used. optional_depends = mcl_item_id, mcl_core, default \ No newline at end of file diff --git a/why_schematic/Why.mts b/why_schematic/Why.mts new file mode 100644 index 0000000000000000000000000000000000000000..c75a928ac0e37fb7950378f7d3e7d3f9b8ef434d GIT binary patch literal 122 zcmeYb3HD`RVGv_rWnioa0R|=p=ETe*2Hmv8?9}+2%)-*llwzym{G7~`_|oFkoYdmt z_@vatJg8KBaeir0a%#n#