Compare commits
18 Commits
Author | SHA1 | Date |
---|---|---|
𝕵𝖔𝖍𝖆𝖓𝖓𝖊𝖘 𝕱𝖗𝖎𝖙𝖟 | 995679d7ae | |
CyberMango | 78f32d2dd4 | |
ancientmarinerdev | 1c65e0ad68 | |
ancientmarinerdev | 6900748429 | |
ancientmarinerdev | f09b723885 | |
ancientmarinerdev | efd3420d52 | |
ancientmarinerdev | 62be5a06f6 | |
ancientmarinerdev | 683799aea5 | |
ancientmarinerdev | 383cbf96a6 | |
ancientmarinerdev | a7632e767d | |
ancientmarinerdev | 99d09c76ae | |
ancientmarinerdev | c7ebe1b8cd | |
Michieal | b258ccffdc | |
Michieal | a00ef4500d | |
Michieal | ed03cb470d | |
Michieal | b99487b6ab | |
Michieal | 0931af21c8 | |
Michieal | 77a8ca689f |
|
@ -0,0 +1,21 @@
|
||||||
|
Survive, farm, build, explore, play with friends, and do much more. Inspired by a well known block game, pushing beyond.
|
||||||
|
|
||||||
|
How to play:
|
||||||
|
|
||||||
|
#### Download Minetest
|
||||||
|
- Navigate to https://www.minetest.net/ to download the client.
|
||||||
|
- Once installed, open and select the "Content" tab
|
||||||
|
|
||||||
|
#### Install MineClone2 from ContentDB
|
||||||
|
- Click "Browse Online Content" and filter by Games (select "Games" from the dropdown box)
|
||||||
|
- Find "MineClone2" (should be first on the list or on the first page)
|
||||||
|
- Click the [+] button next to MineClone2 and wait for download to finish
|
||||||
|
- Click "Back to Main Menu"
|
||||||
|
|
||||||
|
#### Create new world and play
|
||||||
|
- Click "Start Game" tab
|
||||||
|
- At the bottom click the MineClone2 icon (the 2 dirt with grass blocks)
|
||||||
|
- Click "New", give your world a name
|
||||||
|
- You can leave seed blank or put in a word of your choice
|
||||||
|
- Select your new world
|
||||||
|
- Click "Play Game" and enjoy!
|
|
@ -2,8 +2,6 @@
|
||||||
An unofficial Minecraft-like game for Minetest. Forked from MineClone by davedevils.
|
An unofficial Minecraft-like game for Minetest. Forked from MineClone by davedevils.
|
||||||
Developed by many people. Not developed or endorsed by Mojang AB.
|
Developed by many people. Not developed or endorsed by Mojang AB.
|
||||||
|
|
||||||
Version: 0.82 (in development)
|
|
||||||
|
|
||||||
### Gameplay
|
### Gameplay
|
||||||
You start in a randomly-generated world made entirely of cubes. You can explore
|
You start in a randomly-generated world made entirely of cubes. You can explore
|
||||||
the world and dig and build almost every block in the world to create new
|
the world and dig and build almost every block in the world to create new
|
||||||
|
|
17
RELEASE.md
|
@ -1,19 +1,22 @@
|
||||||
#File to document release steps with a view to evolving into a script
|
#File to document release steps with a view to evolving into a script
|
||||||
|
|
||||||
#Update CREDITS.md
|
#Update CREDITS.md
|
||||||
#Update version in README.md (soon to be game.conf from of 0.82.0)
|
#Update version in game.conf
|
||||||
|
|
||||||
lua tools/generate_ingame_credits.lua
|
lua tools/generate_ingame_credits.lua
|
||||||
|
|
||||||
git add CREDITS.md
|
git add CREDITS.md
|
||||||
git add mods/HUD/mcl_credits/people.lua
|
git add mods/HUD/mcl_credits/people.lua
|
||||||
|
git add game.conf
|
||||||
|
|
||||||
git add README.md
|
#git add RELEASE.md
|
||||||
# To uncomment when applicable
|
|
||||||
#git add game.conf
|
|
||||||
|
|
||||||
git commit -m "Pre-release update credits and set version 0.81.1"
|
git commit -m "Pre-release update credits and set version 0.82.0"
|
||||||
|
|
||||||
git tag 0.81.1
|
git tag 0.82.0
|
||||||
|
|
||||||
git push origin 0.81.1
|
git push origin 0.82.0
|
||||||
|
|
||||||
|
#Update version in game.conf to -SNAPSHOT
|
||||||
|
|
||||||
|
git commit -m "Post-release set version 0.82.0-SNAPSHOT"
|
|
@ -1,4 +1,4 @@
|
||||||
title = MineClone 2
|
title = MineClone 2
|
||||||
description = A survival sandbox game. Survive, gather, hunt, build, explore, and do much more.
|
description = A survival sandbox game. Survive, gather, hunt, build, explore, and do much more.
|
||||||
disallowed_mapgens = v6
|
disallowed_mapgens = v6
|
||||||
version=MCL2-0.82-indev
|
version=0.82.0-SNAPSHOT
|
|
@ -204,7 +204,7 @@ end
|
||||||
|
|
||||||
-- Checks if the given node would drop its useful drop if dug by a given tool.
|
-- Checks if the given node would drop its useful drop if dug by a given tool.
|
||||||
-- Returns true if it will yield its useful drop, false otherwise.
|
-- Returns true if it will yield its useful drop, false otherwise.
|
||||||
function mcl_autogroup.can_harvest(nodename, toolname, player)
|
function mcl_autogroup.can_harvest(nodename, toolname)
|
||||||
local ndef = minetest.registered_nodes[nodename]
|
local ndef = minetest.registered_nodes[nodename]
|
||||||
|
|
||||||
if not ndef then
|
if not ndef then
|
||||||
|
@ -228,9 +228,7 @@ function mcl_autogroup.can_harvest(nodename, toolname, player)
|
||||||
end
|
end
|
||||||
|
|
||||||
-- Check if it can be dug by hand
|
-- Check if it can be dug by hand
|
||||||
if not player or not player:is_player() then return false end
|
local tdef = minetest.registered_tools[""]
|
||||||
local name = player:get_inventory():get_stack("hand", 1):get_name()
|
|
||||||
local tdef = minetest.registered_items[name]
|
|
||||||
if tdef then
|
if tdef then
|
||||||
for g, gdef in pairs(tdef._mcl_diggroups) do
|
for g, gdef in pairs(tdef._mcl_diggroups) do
|
||||||
if ndef.groups[g] then
|
if ndef.groups[g] then
|
||||||
|
@ -262,7 +260,7 @@ local function get_tool_capabilities(tdef)
|
||||||
|
|
||||||
-- If the damage group and punch interval from hand is not included,
|
-- If the damage group and punch interval from hand is not included,
|
||||||
-- then the user will not be able to attack with the tool.
|
-- then the user will not be able to attack with the tool.
|
||||||
local hand_toolcaps = mcl_meshhand.survival_hand_tool_caps
|
local hand_toolcaps = minetest.registered_tools[""].tool_capabilities
|
||||||
return {
|
return {
|
||||||
full_punch_interval = hand_toolcaps.full_punch_interval,
|
full_punch_interval = hand_toolcaps.full_punch_interval,
|
||||||
damage_groups = hand_toolcaps.damage_groups
|
damage_groups = hand_toolcaps.damage_groups
|
||||||
|
@ -282,7 +280,7 @@ end
|
||||||
-- would have to add _mcl_autogroup as a dependency which would break the mod
|
-- would have to add _mcl_autogroup as a dependency which would break the mod
|
||||||
-- loading order.
|
-- loading order.
|
||||||
function mcl_autogroup.get_groupcaps(toolname, efficiency)
|
function mcl_autogroup.get_groupcaps(toolname, efficiency)
|
||||||
local tdef = minetest.registered_items[toolname]
|
local tdef = minetest.registered_tools[toolname]
|
||||||
local groupcaps = table.copy(get_tool_capabilities(tdef).groupcaps or {})
|
local groupcaps = table.copy(get_tool_capabilities(tdef).groupcaps or {})
|
||||||
add_groupcaps(toolname, groupcaps, tdef._mcl_diggroups, efficiency)
|
add_groupcaps(toolname, groupcaps, tdef._mcl_diggroups, efficiency)
|
||||||
return groupcaps
|
return groupcaps
|
||||||
|
@ -352,7 +350,7 @@ local function overwrite()
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
for tname, tdef in pairs(minetest.registered_items) do
|
for tname, tdef in pairs(minetest.registered_tools) do
|
||||||
-- Assign groupcaps for digging the registered digging groups
|
-- Assign groupcaps for digging the registered digging groups
|
||||||
-- depending on the _mcl_diggroups in the tool definition
|
-- depending on the _mcl_diggroups in the tool definition
|
||||||
if tdef._mcl_diggroups then
|
if tdef._mcl_diggroups then
|
||||||
|
|
|
@ -1,11 +1,10 @@
|
||||||
# mcl_autogroup
|
# mcl_autogroup
|
||||||
This mod emulate digging times from mc.
|
This mod emulate digging times from mc.
|
||||||
|
|
||||||
## mcl_autogroup.can_harvest(nodename, toolname, player)
|
## mcl_autogroup.can_harvest(nodename, toolname)
|
||||||
Return true if <nodename> can be dig with <toolname> by <player>.
|
Return true if <nodename> can be dig with <toolname>.
|
||||||
* nodename: string, valid nodename
|
* nodename: string, valid nodename
|
||||||
* toolname: (optional) string, valid toolname
|
* toolname: (optional) string, valid toolname
|
||||||
* player: (optinal) ObjectRef, valid player
|
|
||||||
|
|
||||||
## mcl_autogroup.get_groupcaps(toolname, efficiency)
|
## mcl_autogroup.get_groupcaps(toolname, efficiency)
|
||||||
This function is used to calculate diggroups for tools.
|
This function is used to calculate diggroups for tools.
|
||||||
|
|
|
@ -155,7 +155,6 @@ end, true)
|
||||||
minetest.register_on_player_hpchange(function(player, hp_change, mt_reason)
|
minetest.register_on_player_hpchange(function(player, hp_change, mt_reason)
|
||||||
if not damage_enabled then return 0 end
|
if not damage_enabled then return 0 end
|
||||||
if player:get_hp() > 0 then
|
if player:get_hp() > 0 then
|
||||||
mt_reason.approved = true
|
|
||||||
if hp_change < 0 then
|
if hp_change < 0 then
|
||||||
mcl_damage.run_damage_callbacks(player, -hp_change, mcl_damage.from_mt(mt_reason))
|
mcl_damage.run_damage_callbacks(player, -hp_change, mcl_damage.from_mt(mt_reason))
|
||||||
end
|
end
|
||||||
|
@ -163,9 +162,7 @@ minetest.register_on_player_hpchange(function(player, hp_change, mt_reason)
|
||||||
end, false)
|
end, false)
|
||||||
|
|
||||||
minetest.register_on_dieplayer(function(player, mt_reason)
|
minetest.register_on_dieplayer(function(player, mt_reason)
|
||||||
if mt_reason.approved then
|
mcl_damage.run_death_callbacks(player, mcl_damage.from_mt(mt_reason))
|
||||||
mcl_damage.run_death_callbacks(player, mcl_damage.from_mt(mt_reason))
|
|
||||||
end
|
|
||||||
minetest.log("action","Player "..player:get_player_name().." died at "..minetest.pos_to_string(vector.round(player:get_pos())))
|
minetest.log("action","Player "..player:get_player_name().." died at "..minetest.pos_to_string(vector.round(player:get_pos())))
|
||||||
end)
|
end)
|
||||||
|
|
||||||
|
|
|
@ -252,17 +252,10 @@ function minetest.handle_node_drops(pos, drops, digger)
|
||||||
-- NOTE: This function override allows digger to be nil.
|
-- NOTE: This function override allows digger to be nil.
|
||||||
-- This means there is no digger. This is a special case which allows this function to be called
|
-- This means there is no digger. This is a special case which allows this function to be called
|
||||||
-- by hand. Creative Mode is intentionally ignored in this case.
|
-- by hand. Creative Mode is intentionally ignored in this case.
|
||||||
if digger and digger:is_player() and minetest.is_creative_enabled(digger:get_player_name()) then
|
|
||||||
local inv = digger:get_inventory()
|
if (digger and digger:is_player() and minetest.is_creative_enabled(digger:get_player_name())) or doTileDrops == false then
|
||||||
if inv then
|
|
||||||
for _, item in ipairs(drops) do
|
|
||||||
if not inv:contains_item("main", item, true) then
|
|
||||||
inv:add_item("main", item)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
return
|
return
|
||||||
elseif not doTileDrops then return end
|
end
|
||||||
|
|
||||||
-- Check if node will yield its useful drop by the digger's tool
|
-- Check if node will yield its useful drop by the digger's tool
|
||||||
local dug_node = minetest.get_node(pos)
|
local dug_node = minetest.get_node(pos)
|
||||||
|
@ -270,9 +263,9 @@ function minetest.handle_node_drops(pos, drops, digger)
|
||||||
local tool
|
local tool
|
||||||
if digger then
|
if digger then
|
||||||
tool = digger:get_wielded_item()
|
tool = digger:get_wielded_item()
|
||||||
tooldef = minetest.registered_items[tool:get_name()]
|
tooldef = minetest.registered_tools[tool:get_name()]
|
||||||
|
|
||||||
if not mcl_autogroup.can_harvest(dug_node.name, tool:get_name(), digger) then
|
if not mcl_autogroup.can_harvest(dug_node.name, tool:get_name()) then
|
||||||
return
|
return
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -37,6 +37,7 @@ return {
|
||||||
"MrRar",
|
"MrRar",
|
||||||
"talamh",
|
"talamh",
|
||||||
"Faerraven / Michieal",
|
"Faerraven / Michieal",
|
||||||
|
"FossFanatic",
|
||||||
}},
|
}},
|
||||||
{S("Contributors"), 0x52FF00, {
|
{S("Contributors"), 0x52FF00, {
|
||||||
"Laurent Rocher",
|
"Laurent Rocher",
|
||||||
|
@ -96,6 +97,9 @@ return {
|
||||||
"anarquimico",
|
"anarquimico",
|
||||||
"TheOnlyJoeEnderman",
|
"TheOnlyJoeEnderman",
|
||||||
"Ranko Saotome",
|
"Ranko Saotome",
|
||||||
|
"Gregor Parzefall",
|
||||||
|
"Wbjitscool",
|
||||||
|
"b3nderman",
|
||||||
}},
|
}},
|
||||||
{S("MineClone5"), 0xA60014, {
|
{S("MineClone5"), 0xA60014, {
|
||||||
"kay27",
|
"kay27",
|
||||||
|
@ -168,6 +172,7 @@ return {
|
||||||
"RandomLegoBrick",
|
"RandomLegoBrick",
|
||||||
"cora",
|
"cora",
|
||||||
"Faerraven / Michieal",
|
"Faerraven / Michieal",
|
||||||
|
"Nicu",
|
||||||
}},
|
}},
|
||||||
{S("Translations"), 0x00FF60, {
|
{S("Translations"), 0x00FF60, {
|
||||||
"Wuzzy",
|
"Wuzzy",
|
||||||
|
@ -181,9 +186,12 @@ return {
|
||||||
"Emojigit",
|
"Emojigit",
|
||||||
"snowyu",
|
"snowyu",
|
||||||
"3raven",
|
"3raven",
|
||||||
|
"SakuraRiu",
|
||||||
}},
|
}},
|
||||||
{S("Funders"), 0xF7FF00, {
|
{S("Funders"), 0xF7FF00, {
|
||||||
"40W",
|
"40W",
|
||||||
|
"bauknecht",
|
||||||
|
"Cora",
|
||||||
}},
|
}},
|
||||||
{S("Special thanks"), 0x00E9FF, {
|
{S("Special thanks"), 0x00E9FF, {
|
||||||
"celeron55 for creating Minetest",
|
"celeron55 for creating Minetest",
|
||||||
|
@ -191,5 +199,6 @@ return {
|
||||||
"wsor for working tirelessly in the shadows for the good of all of us, particularly helping with solving contentDB and copyright issues.",
|
"wsor for working tirelessly in the shadows for the good of all of us, particularly helping with solving contentDB and copyright issues.",
|
||||||
"The workaholics who spent way too much time writing for the Minecraft Wiki. It's an invaluable resource for creating this game",
|
"The workaholics who spent way too much time writing for the Minecraft Wiki. It's an invaluable resource for creating this game",
|
||||||
"Notch and Jeb for being the major forces behind Minecraft",
|
"Notch and Jeb for being the major forces behind Minecraft",
|
||||||
|
"Dark Reaven Music (https://soundcloud.com/dark-reaven-music) for the main menu theme (Calmed Cube), which is licensed under https://creativecommons.org/licenses/by-sa/3.0/",
|
||||||
}},
|
}},
|
||||||
}
|
}
|
||||||
|
|
|
@ -156,7 +156,6 @@ local function set_inv_page(page, player)
|
||||||
creative_list = inventory_lists[page]
|
creative_list = inventory_lists[page]
|
||||||
end
|
end
|
||||||
inv:set_size("main", #creative_list)
|
inv:set_size("main", #creative_list)
|
||||||
players[playername].inv_size = #creative_list
|
|
||||||
inv:set_list("main", creative_list)
|
inv:set_list("main", creative_list)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -305,21 +304,37 @@ minetest.register_on_joinplayer(function (player)
|
||||||
end
|
end
|
||||||
end)
|
end)
|
||||||
|
|
||||||
function mcl_inventory.set_creative_formspec(player)
|
function mcl_inventory.set_creative_formspec(player, start_i, pagenum, inv_size, show, page, filter)
|
||||||
local playername = player:get_player_name()
|
--reset_menu_item_bg()
|
||||||
if not players[playername] then return end
|
pagenum = math.floor(pagenum) or 1
|
||||||
|
|
||||||
local start_i = players[playername].start_i
|
local playername = player:get_player_name()
|
||||||
local pagenum = start_i / (9*5) + 1
|
|
||||||
local name = players[playername].page
|
if not inv_size then
|
||||||
local inv_size = players[playername].inv_size
|
if page == "nix" then
|
||||||
local filter = players[playername].filter
|
local inv = minetest.get_inventory({type="detached", name="creative_"..playername})
|
||||||
|
inv_size = inv:get_size("main")
|
||||||
|
elseif page and page ~= "inv" then
|
||||||
|
inv_size = #(inventory_lists[page])
|
||||||
|
else
|
||||||
|
inv_size = 0
|
||||||
|
end
|
||||||
|
end
|
||||||
local pagemax = math.max(1, math.floor((inv_size-1) / (9*5) + 1))
|
local pagemax = math.max(1, math.floor((inv_size-1) / (9*5) + 1))
|
||||||
|
local name = "nix"
|
||||||
local main_list
|
local main_list
|
||||||
local listrings = "listring[detached:creative_"..playername..";main]"..
|
local listrings = "listring[detached:creative_"..playername..";main]"..
|
||||||
"listring[current_player;main]"..
|
"listring[current_player;main]"..
|
||||||
"listring[detached:trash;main]"
|
"listring[detached:trash;main]"
|
||||||
|
|
||||||
|
if page then
|
||||||
|
name = page
|
||||||
|
if players[playername] then
|
||||||
|
players[playername].page = page
|
||||||
|
end
|
||||||
|
end
|
||||||
|
--bg[name] = "crafting_creative_bg.png"
|
||||||
|
|
||||||
local inv_bg = "crafting_inventory_creative.png"
|
local inv_bg = "crafting_inventory_creative.png"
|
||||||
if name == "inv" then
|
if name == "inv" then
|
||||||
inv_bg = "crafting_inventory_creative_survival.png"
|
inv_bg = "crafting_inventory_creative_survival.png"
|
||||||
|
@ -478,6 +493,9 @@ function mcl_inventory.set_creative_formspec(player)
|
||||||
listrings
|
listrings
|
||||||
|
|
||||||
if name == "nix" then
|
if name == "nix" then
|
||||||
|
if filter == nil then
|
||||||
|
filter = ""
|
||||||
|
end
|
||||||
formspec = formspec .. "field[5.3,1.34;4,0.75;search;;"..minetest.formspec_escape(filter).."]"
|
formspec = formspec .. "field[5.3,1.34;4,0.75;search;;"..minetest.formspec_escape(filter).."]"
|
||||||
formspec = formspec .. "field_close_on_enter[search;false]"
|
formspec = formspec .. "field_close_on_enter[search;false]"
|
||||||
end
|
end
|
||||||
|
@ -564,11 +582,16 @@ minetest.register_on_player_receive_fields(function(player, formname, fields)
|
||||||
|
|
||||||
if page then
|
if page then
|
||||||
players[name].page = page
|
players[name].page = page
|
||||||
else
|
end
|
||||||
|
if players[name].page then
|
||||||
page = players[name].page
|
page = players[name].page
|
||||||
end
|
end
|
||||||
|
|
||||||
|
-- Figure out current scroll bar from formspec
|
||||||
|
--local formspec = player:get_inventory_formspec()
|
||||||
|
|
||||||
local start_i = players[name].start_i
|
local start_i = players[name].start_i
|
||||||
|
|
||||||
if fields.creative_prev then
|
if fields.creative_prev then
|
||||||
start_i = start_i - 9*5
|
start_i = start_i - 9*5
|
||||||
elseif fields.creative_next then
|
elseif fields.creative_next then
|
||||||
|
@ -590,7 +613,6 @@ minetest.register_on_player_receive_fields(function(player, formname, fields)
|
||||||
else
|
else
|
||||||
inv_size = 0
|
inv_size = 0
|
||||||
end
|
end
|
||||||
players[name].inv_size = inv_size
|
|
||||||
|
|
||||||
if start_i >= inv_size then
|
if start_i >= inv_size then
|
||||||
start_i = start_i - 9*5
|
start_i = start_i - 9*5
|
||||||
|
@ -600,19 +622,72 @@ minetest.register_on_player_receive_fields(function(player, formname, fields)
|
||||||
end
|
end
|
||||||
players[name].start_i = start_i
|
players[name].start_i = start_i
|
||||||
|
|
||||||
if not fields.nix and fields.search then
|
local filter = ""
|
||||||
players[name].filter = fields.search
|
if not fields.nix and fields.search and fields.search ~= "" then
|
||||||
else
|
filter = fields.search
|
||||||
players[name].filter = ""
|
players[name].filter = filter
|
||||||
end
|
end
|
||||||
|
|
||||||
mcl_inventory.set_creative_formspec(player)
|
mcl_inventory.set_creative_formspec(player, start_i, start_i / (9*5) + 1, inv_size, false, page, filter)
|
||||||
end)
|
end)
|
||||||
|
|
||||||
|
|
||||||
minetest.register_on_placenode(function(pos, newnode, placer, oldnode, itemstack)
|
if minetest.is_creative_enabled("") then
|
||||||
return placer and placer:is_player() and minetest.is_creative_enabled(placer:get_player_name())
|
minetest.register_on_placenode(function(pos, newnode, placer, oldnode, itemstack)
|
||||||
end)
|
-- Place infinite nodes, except for shulker boxes
|
||||||
|
local group = minetest.get_item_group(itemstack:get_name(), "shulker_box")
|
||||||
|
return group == 0 or group == nil
|
||||||
|
end)
|
||||||
|
|
||||||
|
function minetest.handle_node_drops(pos, drops, digger)
|
||||||
|
if not digger or not digger:is_player() then
|
||||||
|
for _,item in ipairs(drops) do
|
||||||
|
minetest.add_item(pos, item)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
local inv = digger:get_inventory()
|
||||||
|
if inv then
|
||||||
|
for _,item in ipairs(drops) do
|
||||||
|
if not inv:contains_item("main", item, true) then
|
||||||
|
inv:add_item("main", item)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
mcl_inventory.update_inventory_formspec = function(player)
|
||||||
|
local page
|
||||||
|
|
||||||
|
local name = player:get_player_name()
|
||||||
|
|
||||||
|
if players[name].page then
|
||||||
|
page = players[name].page
|
||||||
|
else
|
||||||
|
page = "nix"
|
||||||
|
end
|
||||||
|
|
||||||
|
-- Figure out current scroll bar from formspec
|
||||||
|
--local formspec = player:get_inventory_formspec()
|
||||||
|
local start_i = players[name].start_i
|
||||||
|
|
||||||
|
local inv_size
|
||||||
|
if page == "nix" then
|
||||||
|
local inv = minetest.get_inventory({type="detached", name="creative_"..name})
|
||||||
|
inv_size = inv:get_size("main")
|
||||||
|
elseif page and page ~= "inv" then
|
||||||
|
inv_size = #(inventory_lists[page])
|
||||||
|
else
|
||||||
|
inv_size = 0
|
||||||
|
end
|
||||||
|
|
||||||
|
local filter = players[name].filter
|
||||||
|
if filter == nil then
|
||||||
|
filter = ""
|
||||||
|
end
|
||||||
|
|
||||||
|
mcl_inventory.set_creative_formspec(player, start_i, start_i / (9*5) + 1, inv_size, false, page, filter)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
minetest.register_on_joinplayer(function(player)
|
minetest.register_on_joinplayer(function(player)
|
||||||
-- Initialize variables and inventory
|
-- Initialize variables and inventory
|
||||||
|
@ -625,7 +700,7 @@ minetest.register_on_joinplayer(function(player)
|
||||||
end
|
end
|
||||||
init(player)
|
init(player)
|
||||||
-- Setup initial creative inventory to the "nix" page.
|
-- Setup initial creative inventory to the "nix" page.
|
||||||
mcl_inventory.set_creative_formspec(player)
|
mcl_inventory.set_creative_formspec(player, 0, 1, nil, false, "nix", "")
|
||||||
end)
|
end)
|
||||||
|
|
||||||
minetest.register_on_player_inventory_action(function(player, action, inventory, inventory_info)
|
minetest.register_on_player_inventory_action(function(player, action, inventory, inventory_info)
|
||||||
|
|
|
@ -46,9 +46,14 @@ function return_fields(player, name)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
local function set_inventory(player)
|
local function set_inventory(player, armor_change_only)
|
||||||
if minetest.is_creative_enabled(player:get_player_name()) then
|
if minetest.is_creative_enabled(player:get_player_name()) then
|
||||||
mcl_inventory.set_creative_formspec(player)
|
if armor_change_only then
|
||||||
|
-- Stay on survival inventory plage if only the armor has been changed
|
||||||
|
mcl_inventory.set_creative_formspec(player, 0, 0, nil, nil, "inv")
|
||||||
|
else
|
||||||
|
mcl_inventory.set_creative_formspec(player, 0, 1)
|
||||||
|
end
|
||||||
return
|
return
|
||||||
end
|
end
|
||||||
local inv = player:get_inventory()
|
local inv = player:get_inventory()
|
||||||
|
@ -138,7 +143,11 @@ minetest.register_on_player_receive_fields(function(player, formname, fields)
|
||||||
end
|
end
|
||||||
end)
|
end)
|
||||||
|
|
||||||
mcl_inventory.update_inventory_formspec = set_inventory
|
if not minetest.is_creative_enabled("") then
|
||||||
|
function mcl_inventory.update_inventory_formspec(player)
|
||||||
|
set_inventory(player)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
-- Drop crafting grid items on leaving
|
-- Drop crafting grid items on leaving
|
||||||
minetest.register_on_leaveplayer(function(player)
|
minetest.register_on_leaveplayer(function(player)
|
||||||
|
@ -190,6 +199,24 @@ function minetest.is_creative_enabled(name)
|
||||||
return false
|
return false
|
||||||
end
|
end
|
||||||
|
|
||||||
|
--Insta "digging" nodes in gamemode-creative
|
||||||
|
minetest.register_on_punchnode(function(pos, node, puncher, pointed_thing)
|
||||||
|
if not puncher or not puncher:is_player() then return end
|
||||||
|
local name = puncher:get_player_name()
|
||||||
|
if not minetest.is_creative_enabled(name) then return end
|
||||||
|
if pointed_thing.type ~= "node" then return end
|
||||||
|
local def = minetest.registered_nodes[node.name]
|
||||||
|
if def then
|
||||||
|
minetest.node_dig(pos,node,puncher)
|
||||||
|
return true
|
||||||
|
end
|
||||||
|
end)
|
||||||
|
|
||||||
|
--Don't subtract from inv when placing in gamemode-creative
|
||||||
|
minetest.register_on_placenode(function(pos, newnode, placer, oldnode, itemstack, pointed_thing)
|
||||||
|
if placer and placer:is_player() and minetest.is_creative_enabled(placer:get_player_name()) then return true end
|
||||||
|
end)
|
||||||
|
|
||||||
local function in_table(n,h)
|
local function in_table(n,h)
|
||||||
for k,v in pairs(h) do
|
for k,v in pairs(h) do
|
||||||
if v == n then return true end
|
if v == n then return true end
|
||||||
|
@ -211,7 +238,6 @@ function mcl_inventory.player_set_gamemode(p,g)
|
||||||
elseif g == "creative" then
|
elseif g == "creative" then
|
||||||
mcl_experience.remove_hud(p)
|
mcl_experience.remove_hud(p)
|
||||||
end
|
end
|
||||||
mcl_meshhand.update_player(p)
|
|
||||||
set_inventory(p)
|
set_inventory(p)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -3,16 +3,13 @@ mcl_bamboo
|
||||||
|
|
||||||
This mod adds working, familiar bamboo nodes to your Mineclone 2 world.
|
This mod adds working, familiar bamboo nodes to your Mineclone 2 world.
|
||||||
|
|
||||||
Code: Michieal. Original (basic) bamboo code by: Small Joker.
|
Code: MineClone2 dev team. Original (basic) bamboo code by: Small Joker.
|
||||||
|
|
||||||
License for code: GPLv3.
|
License for code: GPLv3.
|
||||||
License for images / textures: CC-BY-SA except where noted.
|
License for images / textures: CC-BY-SA except where noted.
|
||||||
Images Created by Michieal, except for:
|
Images Created by Nicu, except for:
|
||||||
|
|
||||||
* Inventory / wield image for Bamboo Stalk: created by RandomLegoBrick#8692 and is CC0.
|
* Inventory / wield image for Bamboo Stalk: created by RandomLegoBrick#8692 and is CC0.
|
||||||
* The Bamboo door image, which is a variant of this image: https://www.flickr.com/photos/basheertome/5179849901/ which
|
|
||||||
is CC-BY 2.0,
|
|
||||||
Basheer Tome (2015).
|
|
||||||
|
|
||||||
Dependencies: mcl_core, mcl_sounds, mcl_tools
|
Dependencies: mcl_core, mcl_sounds, mcl_tools
|
||||||
|
|
||||||
|
|
|
@ -301,7 +301,7 @@ minetest.register_node("mcl_bamboo:bamboo_block", bamboo_block_def)
|
||||||
local bamboo_stripped_block = table.copy(bamboo_block_def)
|
local bamboo_stripped_block = table.copy(bamboo_block_def)
|
||||||
bamboo_stripped_block.on_rightclick = nil
|
bamboo_stripped_block.on_rightclick = nil
|
||||||
bamboo_stripped_block.description = S("Stripped Bamboo Block")
|
bamboo_stripped_block.description = S("Stripped Bamboo Block")
|
||||||
bamboo_stripped_block.tiles = {"mcl_bamboo_bamboo_bottom.png", "mcl_bamboo_bamboo_bottom.png",
|
bamboo_stripped_block.tiles = {"mcl_bamboo_bamboo_bottom_stripped.png", "mcl_bamboo_bamboo_bottom_stripped.png",
|
||||||
"mcl_bamboo_bamboo_block_stripped.png"}
|
"mcl_bamboo_bamboo_block_stripped.png"}
|
||||||
minetest.register_node("mcl_bamboo:bamboo_block_stripped", bamboo_stripped_block)
|
minetest.register_node("mcl_bamboo:bamboo_block_stripped", bamboo_stripped_block)
|
||||||
minetest.register_node("mcl_bamboo:bamboo_plank", {
|
minetest.register_node("mcl_bamboo:bamboo_plank", {
|
||||||
|
|
Before Width: | Height: | Size: 375 B After Width: | Height: | Size: 243 B |
Before Width: | Height: | Size: 299 B After Width: | Height: | Size: 234 B |
Before Width: | Height: | Size: 425 B After Width: | Height: | Size: 151 B |
After Width: | Height: | Size: 148 B |
Before Width: | Height: | Size: 150 B After Width: | Height: | Size: 338 B |
Before Width: | Height: | Size: 165 B After Width: | Height: | Size: 376 B |
Before Width: | Height: | Size: 820 B After Width: | Height: | Size: 1.3 KiB |
Before Width: | Height: | Size: 247 B After Width: | Height: | Size: 448 B |
Before Width: | Height: | Size: 2.5 KiB After Width: | Height: | Size: 612 B |
Before Width: | Height: | Size: 2.5 KiB After Width: | Height: | Size: 622 B |
Before Width: | Height: | Size: 2.8 KiB After Width: | Height: | Size: 577 B |
Before Width: | Height: | Size: 2.8 KiB After Width: | Height: | Size: 567 B |
Before Width: | Height: | Size: 1.7 KiB After Width: | Height: | Size: 485 B |
Before Width: | Height: | Size: 235 B After Width: | Height: | Size: 451 B |
Before Width: | Height: | Size: 297 B After Width: | Height: | Size: 451 B |
Before Width: | Height: | Size: 187 B After Width: | Height: | Size: 324 B |
Before Width: | Height: | Size: 308 B After Width: | Height: | Size: 662 B |
Before Width: | Height: | Size: 463 B After Width: | Height: | Size: 588 B |
|
@ -19,6 +19,50 @@ dig_speed_class group:
|
||||||
- 7: Instantaneous
|
- 7: Instantaneous
|
||||||
]]
|
]]
|
||||||
|
|
||||||
|
-- The hand
|
||||||
|
local groupcaps, hand_range, hand_groups
|
||||||
|
|
||||||
|
if minetest.is_creative_enabled("") then
|
||||||
|
-- Instant breaking in creative mode
|
||||||
|
groupcaps = { creative_breakable = { times = {0}, uses = 0 } }
|
||||||
|
hand_range = tonumber(minetest.settings:get("mcl_hand_range_creative")) or 10
|
||||||
|
hand_groups = { dig_speed_class = 7 }
|
||||||
|
else
|
||||||
|
groupcaps = {}
|
||||||
|
hand_range = tonumber(minetest.settings:get("mcl_hand_range")) or 4.5
|
||||||
|
hand_groups = { dig_speed_class = 1 }
|
||||||
|
end
|
||||||
|
minetest.register_tool(":", {
|
||||||
|
type = "none",
|
||||||
|
_doc_items_longdesc = S("You use your bare hand whenever you are not wielding any item. With your hand you can mine most blocks, but this is the slowest method and only the weakest blocks will yield their useful drop. The hand also deals minor damage by punching. Using the hand is often a last resort, as proper mining tools and weapons are much better.").."\n"..
|
||||||
|
S("When you are wielding an item which is not a mining tool or a weapon, it will behave as if it were the hand when you start mining or punching.").."\n"..
|
||||||
|
S("In Creative Mode, the hand is able to break all blocks instantly."),
|
||||||
|
wield_image = "blank.png",
|
||||||
|
wield_scale = {x=1.0,y=1.0,z=2.0},
|
||||||
|
-- According to Minecraft Wiki, the exact range is 3.975.
|
||||||
|
-- Minetest seems to only support whole numbers, so we use 4.
|
||||||
|
range = hand_range,
|
||||||
|
tool_capabilities = {
|
||||||
|
full_punch_interval = 0.25,
|
||||||
|
max_drop_level = 0,
|
||||||
|
groupcaps = groupcaps,
|
||||||
|
damage_groups = {fleshy=1},
|
||||||
|
},
|
||||||
|
groups = hand_groups,
|
||||||
|
_mcl_diggroups = {
|
||||||
|
handy = { speed = 1, level = 1, uses = 0 },
|
||||||
|
axey = { speed = 1, level = 1, uses = 0 },
|
||||||
|
shovely = { speed = 1, level = 1, uses = 0 },
|
||||||
|
hoey = { speed = 1, level = 1, uses = 0 },
|
||||||
|
pickaxey = { speed = 1, level = 0, uses = 0 },
|
||||||
|
swordy = { speed = 1, level = 0, uses = 0 },
|
||||||
|
swordy_cobweb = { speed = 1, level = 0, uses = 0 },
|
||||||
|
shearsy = { speed = 1, level = 0, uses = 0 },
|
||||||
|
shearsy_wool = { speed = 1, level = 0, uses = 0 },
|
||||||
|
shearsy_cobweb = { speed = 1, level = 0, uses = 0 },
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
-- Help texts
|
-- Help texts
|
||||||
local pickaxe_longdesc = S("Pickaxes are mining tools to mine hard blocks, such as stone. A pickaxe can also be used as weapon, but it is rather inefficient.")
|
local pickaxe_longdesc = S("Pickaxes are mining tools to mine hard blocks, such as stone. A pickaxe can also be used as weapon, but it is rather inefficient.")
|
||||||
local axe_longdesc = S("An axe is your tool of choice to cut down trees, wood-based blocks and other blocks. Axes deal a lot of damage as well, but they are rather slow.")
|
local axe_longdesc = S("An axe is your tool of choice to cut down trees, wood-based blocks and other blocks. Axes deal a lot of damage as well, but they are rather slow.")
|
||||||
|
|
|
@ -3545,7 +3545,7 @@ local function register_decorations()
|
||||||
place_on = {"group:grass_block_no_snow", "mcl_core:dirt"},
|
place_on = {"group:grass_block_no_snow", "mcl_core:dirt"},
|
||||||
sidelen = 80,
|
sidelen = 80,
|
||||||
fill_ratio = 0.004,
|
fill_ratio = 0.004,
|
||||||
biomes = {"Jungle", "JungleM","BambooJungle", "BambooJungleM"},
|
biomes = {"Jungle", "JungleM"},
|
||||||
y_min = 1,
|
y_min = 1,
|
||||||
y_max = mcl_vars.mg_overworld_max,
|
y_max = mcl_vars.mg_overworld_max,
|
||||||
schematic = mod_mcl_core .. "/schematics/mcl_core_oak_classic.mts",
|
schematic = mod_mcl_core .. "/schematics/mcl_core_oak_classic.mts",
|
||||||
|
@ -4459,7 +4459,7 @@ local function register_decorations()
|
||||||
end
|
end
|
||||||
|
|
||||||
register_double_fern(0.01, 0.03, {"Jungle", "JungleM", "JungleEdge", "JungleEdgeM", "Taiga", "ColdTaiga", "MegaTaiga", "MegaSpruceTaiga", "BambooJungle", "BambooJungleM", "BambooJungleEdge", "BambooJungleEdgeM", })
|
register_double_fern(0.01, 0.03, {"Jungle", "JungleM", "JungleEdge", "JungleEdgeM", "Taiga", "ColdTaiga", "MegaTaiga", "MegaSpruceTaiga", "BambooJungle", "BambooJungleM", "BambooJungleEdge", "BambooJungleEdgeM", })
|
||||||
register_double_fern(0.15, 0.1, {"JungleM", "BambooJungleM"})
|
register_double_fern(0.15, 0.1, {"JungleM", "BambooJungleM", "BambooJungle"})
|
||||||
|
|
||||||
-- Large flowers
|
-- Large flowers
|
||||||
local function register_large_flower(name, biomes, seed, offset, flower_forest_offset)
|
local function register_large_flower(name, biomes, seed, offset, flower_forest_offset)
|
||||||
|
@ -4545,7 +4545,7 @@ local function register_decorations()
|
||||||
octaves = 4,
|
octaves = 4,
|
||||||
persist = 0.6,
|
persist = 0.6,
|
||||||
},
|
},
|
||||||
biomes = {"Jungle", "BambooJungle"},
|
biomes = {"Jungle", },
|
||||||
y_min = 3,
|
y_min = 3,
|
||||||
y_max = mcl_vars.mg_overworld_max,
|
y_max = mcl_vars.mg_overworld_max,
|
||||||
schematic = mod_mcl_core .. "/schematics/mcl_core_jungle_bush_oak_leaves_2.mts",
|
schematic = mod_mcl_core .. "/schematics/mcl_core_jungle_bush_oak_leaves_2.mts",
|
||||||
|
@ -4581,7 +4581,7 @@ local function register_decorations()
|
||||||
octaves = 4,
|
octaves = 4,
|
||||||
persist = 0.6,
|
persist = 0.6,
|
||||||
},
|
},
|
||||||
biomes = {"JungleEdge", "JungleEdgeM","BambooJungleEdge", "BambooJungleEdgeM"},
|
biomes = {"JungleEdge", "JungleEdgeM", "BambooJungleEdgeM"},
|
||||||
y_min = 3,
|
y_min = 3,
|
||||||
y_max = mcl_vars.mg_overworld_max,
|
y_max = mcl_vars.mg_overworld_max,
|
||||||
schematic = mod_mcl_core .. "/schematics/mcl_core_jungle_bush_oak_leaves.mts",
|
schematic = mod_mcl_core .. "/schematics/mcl_core_jungle_bush_oak_leaves.mts",
|
||||||
|
@ -4614,26 +4614,10 @@ local function register_decorations()
|
||||||
y_max = mcl_vars.mg_overworld_max,
|
y_max = mcl_vars.mg_overworld_max,
|
||||||
decoration = "mcl_bamboo:bamboo",
|
decoration = "mcl_bamboo:bamboo",
|
||||||
height = 9,
|
height = 9,
|
||||||
max_height = 12,
|
max_height = 10,
|
||||||
flags = "place_center_x, place_center_z",
|
flags = "place_center_x, place_center_z",
|
||||||
rotation = "random",
|
rotation = "random",
|
||||||
})
|
})
|
||||||
--[[
|
|
||||||
-- commenting out this section because with the new grow code, bamboo creates its own height, and therefore places it's own top.
|
|
||||||
minetest.register_decoration({
|
|
||||||
deco_type = "simple",
|
|
||||||
place_on = {"mcl_bamboo:bamboo"},
|
|
||||||
sidelen = 80,
|
|
||||||
fill_ratio = 1,
|
|
||||||
biomes = {"BambooJungle", "BambooJungleM", "BambooJungleEdge", "BambooJungleEdgeM", "Jungle", "JungleM", "JungleEdge", "JungleEdgeM"},
|
|
||||||
y_min = 1,
|
|
||||||
y_max = mcl_vars.mg_overworld_max,
|
|
||||||
decoration = "mcl_bamboo:bamboo_endcap",
|
|
||||||
height = 1,
|
|
||||||
max_height = 4,
|
|
||||||
flags = "all_floors",
|
|
||||||
})
|
|
||||||
]]
|
|
||||||
|
|
||||||
minetest.register_decoration({
|
minetest.register_decoration({
|
||||||
deco_type = "simple",
|
deco_type = "simple",
|
||||||
|
|
|
@ -1,5 +1,4 @@
|
||||||
local mcl_skins_enabled = minetest.global_exists("mcl_skins")
|
local mcl_skins_enabled = minetest.global_exists("mcl_skins")
|
||||||
mcl_meshhand = { }
|
|
||||||
|
|
||||||
---This is a fake node that should never be placed in the world
|
---This is a fake node that should never be placed in the world
|
||||||
---@type node_definition
|
---@type node_definition
|
||||||
|
@ -16,77 +15,43 @@ local node_def = {
|
||||||
end,
|
end,
|
||||||
drop = "",
|
drop = "",
|
||||||
on_drop = function(_, _, _) return ItemStack() end,
|
on_drop = function(_, _, _) return ItemStack() end,
|
||||||
groups = {
|
groups = { dig_immediate = 3, not_in_creative_inventory = 1 },
|
||||||
dig_immediate = 3,
|
range = minetest.registered_items[""].range
|
||||||
not_in_creative_inventory = 1,
|
|
||||||
dig_speed_class = 1,
|
|
||||||
},
|
|
||||||
tool_capabilities = {
|
|
||||||
full_punch_interval = 0.25,
|
|
||||||
max_drop_level = 0,
|
|
||||||
groupcaps = { },
|
|
||||||
damage_groups = { fleshy = 1 },
|
|
||||||
},
|
|
||||||
_mcl_diggroups = {
|
|
||||||
handy = { speed = 1, level = 1, uses = 0 },
|
|
||||||
axey = { speed = 1, level = 1, uses = 0 },
|
|
||||||
shovely = { speed = 1, level = 1, uses = 0 },
|
|
||||||
hoey = { speed = 1, level = 1, uses = 0 },
|
|
||||||
pickaxey = { speed = 1, level = 0, uses = 0 },
|
|
||||||
swordy = { speed = 1, level = 0, uses = 0 },
|
|
||||||
swordy_cobweb = { speed = 1, level = 0, uses = 0 },
|
|
||||||
shearsy = { speed = 1, level = 0, uses = 0 },
|
|
||||||
shearsy_wool = { speed = 1, level = 0, uses = 0 },
|
|
||||||
shearsy_cobweb = { speed = 1, level = 0, uses = 0 },
|
|
||||||
},
|
|
||||||
range = tonumber(minetest.settings:get("mcl_hand_range")) or 4.5
|
|
||||||
}
|
}
|
||||||
|
|
||||||
-- This is for _mcl_autogroup to know about the survival hand tool capabilites
|
|
||||||
mcl_meshhand.survival_hand_tool_caps = node_def.tool_capabilities
|
|
||||||
|
|
||||||
local creative_dig_speed = tonumber(minetest.settings:get("mcl_creative_dig_speed")) or 0.2
|
|
||||||
local creative_hand_range = tonumber(minetest.settings:get("mcl_hand_range_creative")) or 10
|
|
||||||
if mcl_skins_enabled then
|
if mcl_skins_enabled then
|
||||||
-- Generate a node for every skin
|
-- Generate a node for every skin
|
||||||
local list = mcl_skins.get_skin_list()
|
local list = mcl_skins.get_skin_list()
|
||||||
for _, skin in pairs(list) do
|
for _, skin in pairs(list) do
|
||||||
local node_def = table.copy(node_def)
|
if skin.slim_arms then
|
||||||
node_def._mcl_hand_id = skin.id
|
local female = table.copy(node_def)
|
||||||
node_def.tiles = { skin.texture }
|
female._mcl_hand_id = skin.id
|
||||||
node_def.mesh = skin.slim_arms and "mcl_meshhand_female.b3d" or "mcl_meshhand.b3d"
|
female.mesh = "mcl_meshhand_female.b3d"
|
||||||
if skin.creative then
|
female.tiles = { skin.texture }
|
||||||
node_def.range = creative_hand_range
|
minetest.register_node("mcl_meshhand:" .. skin.id, female)
|
||||||
node_def.groups.dig_speed_class = 7
|
else
|
||||||
node_def.tool_capabilities.groupcaps.creative_breakable = { times = { creative_dig_speed }, uses = 0 }
|
local male = table.copy(node_def)
|
||||||
|
male._mcl_hand_id = skin.id
|
||||||
|
male.mesh = "mcl_meshhand.b3d"
|
||||||
|
male.tiles = { skin.texture }
|
||||||
|
minetest.register_node("mcl_meshhand:" .. skin.id, male)
|
||||||
end
|
end
|
||||||
minetest.register_node("mcl_meshhand:" .. skin.id, node_def)
|
|
||||||
end
|
end
|
||||||
else
|
else
|
||||||
node_def._mcl_hand_id = "hand"
|
node_def._mcl_hand_id = "hand"
|
||||||
node_def.mesh = "mcl_meshhand.b3d"
|
node_def.mesh = "mcl_meshhand.b3d"
|
||||||
node_def.tiles = { "character.png" }
|
node_def.tiles = { "character.png" }
|
||||||
minetest.register_node("mcl_meshhand:hand_surv", node_def)
|
minetest.register_node("mcl_meshhand:hand", node_def)
|
||||||
|
|
||||||
node_def = table.copy(node_def)
|
|
||||||
node_def.range = creative_hand_range
|
|
||||||
node_def.groups.dig_speed_class = 7
|
|
||||||
node_def.tool_capabilities.groupcaps.creative_breakable = { times = { creative_dig_speed }, uses = 0 }
|
|
||||||
minetest.register_node("mcl_meshhand:hand_crea", node_def)
|
|
||||||
end
|
|
||||||
|
|
||||||
function mcl_meshhand.update_player(player)
|
|
||||||
if mcl_skins_enabled then
|
|
||||||
local node_id = mcl_skins.get_node_id_by_player(player)
|
|
||||||
player:get_inventory():set_stack("hand", 1, "mcl_meshhand:" .. node_id)
|
|
||||||
else
|
|
||||||
local creative = minetest.is_creative_enabled(player:get_player_name())
|
|
||||||
player:get_inventory():set_stack("hand", 1, "mcl_meshhand:hand" .. (creative and "_crea" or "_surv"))
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
|
|
||||||
if mcl_skins_enabled then
|
if mcl_skins_enabled then
|
||||||
mcl_player.register_on_visual_change(mcl_meshhand.update_player)
|
-- Change the player's hand to their skin
|
||||||
|
mcl_player.register_on_visual_change(function(player)
|
||||||
|
local node_id = mcl_skins.get_node_id_by_player(player)
|
||||||
|
player:get_inventory():set_stack("hand", 1, "mcl_meshhand:" .. node_id)
|
||||||
|
end)
|
||||||
else
|
else
|
||||||
minetest.register_on_joinplayer(mcl_meshhand.update_player)
|
minetest.register_on_joinplayer(function(player)
|
||||||
|
player:get_inventory():set_stack("hand", 1, ItemStack("mcl_meshhand:hand"))
|
||||||
|
end)
|
||||||
end
|
end
|
||||||
|
|
|
@ -11,47 +11,43 @@ end
|
||||||
|
|
||||||
function mcl_skins.get_skin_list()
|
function mcl_skins.get_skin_list()
|
||||||
local list = {}
|
local list = {}
|
||||||
for _, game_mode in pairs({"_crea", "_surv"}) do
|
for _, base in pairs(mcl_skins.base) do
|
||||||
for _, base in pairs(mcl_skins.base) do
|
for _, base_color in pairs(mcl_skins.base_color) do
|
||||||
for _, base_color in pairs(mcl_skins.base_color) do
|
local id = base:gsub(".png$", "") .. minetest.colorspec_to_colorstring(base_color):gsub("#", "")
|
||||||
local id = base:gsub(".png$", "") .. minetest.colorspec_to_colorstring(base_color):gsub("#", "")
|
local female = {
|
||||||
local female = {
|
texture = make_texture(base, base_color),
|
||||||
texture = make_texture(base, base_color),
|
slim_arms = true,
|
||||||
slim_arms = true,
|
id = id .. "_female"
|
||||||
id = id .. "_female" .. game_mode,
|
}
|
||||||
creative = game_mode == "_crea"
|
table.insert(list, female)
|
||||||
}
|
|
||||||
table.insert(list, female)
|
local male = {
|
||||||
|
texture = make_texture(base, base_color),
|
||||||
local male = {
|
slim_arms = false,
|
||||||
texture = make_texture(base, base_color),
|
id = id .. "_male"
|
||||||
slim_arms = false,
|
}
|
||||||
id = id .. "_male" .. game_mode,
|
table.insert(list, male)
|
||||||
creative = game_mode == "_crea"
|
|
||||||
}
|
|
||||||
table.insert(list, male)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
for _, skin in pairs(mcl_skins.simple_skins) do
|
|
||||||
table.insert(list, {
|
|
||||||
texture = skin.texture,
|
|
||||||
slim_arms = skin.slim_arms,
|
|
||||||
id = skin.texture:gsub(".png$", "") .. (skin.slim_arms and "_female" or "_male") .. game_mode,
|
|
||||||
})
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
for _, skin in pairs(mcl_skins.simple_skins) do
|
||||||
|
table.insert(list, {
|
||||||
|
texture = skin.texture,
|
||||||
|
slim_arms = skin.slim_arms,
|
||||||
|
id = skin.texture:gsub(".png$", "") .. "_" .. (skin.slim_arms and "female" or "male"),
|
||||||
|
})
|
||||||
|
end
|
||||||
return list
|
return list
|
||||||
end
|
end
|
||||||
|
|
||||||
function mcl_skins.get_node_id_by_player(player)
|
function mcl_skins.get_node_id_by_player(player)
|
||||||
local skin = mcl_skins.players[player]
|
local skin = mcl_skins.players[player]
|
||||||
local creative = minetest.is_creative_enabled(player:get_player_name())
|
|
||||||
local append = (skin.slim_arms and "_female" or "_male") .. (creative and "_crea" or "_surv")
|
|
||||||
if skin.simple_skins_id then
|
if skin.simple_skins_id then
|
||||||
local skin = mcl_skins.simple_skins[skin.simple_skins_id]
|
local skin = mcl_skins.simple_skins[skin.simple_skins_id]
|
||||||
return skin.texture:gsub(".png$", "") .. append
|
return skin.texture:gsub(".png$", "") ..
|
||||||
|
"_" .. (skin.slim_arms and "female" or "male")
|
||||||
else
|
else
|
||||||
return skin.base:gsub(".png$", "") ..
|
return skin.base:gsub(".png$", "") ..
|
||||||
minetest.colorspec_to_colorstring(skin.base_color):gsub("#", "") .. append
|
minetest.colorspec_to_colorstring(skin.base_color):gsub("#", "") ..
|
||||||
|
"_" .. (skin.slim_arms and "female" or "male")
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -76,13 +76,10 @@ mcl_enable_skin_customization (Enable player skin customization) bool true
|
||||||
# Default:4.5
|
# Default:4.5
|
||||||
mcl_hand_range (Hand range) float 4.5 1 128
|
mcl_hand_range (Hand range) float 4.5 1 128
|
||||||
|
|
||||||
# How far the player hand can reach in creative mode
|
# How far the player hand can reach in creative mode (not gamemode-creative)
|
||||||
# Default:10
|
# Default:10
|
||||||
mcl_hand_range_creative (Creative mode hand range) float 10 1 128
|
mcl_hand_range_creative (Creative mode hand range) float 10 1 128
|
||||||
|
|
||||||
# Creative mode dig speed in seconds
|
|
||||||
mcl_creative_dig_speed (Creative mode dig speed) float 0.2
|
|
||||||
|
|
||||||
# If enabled the hunger mechanic will be active
|
# If enabled the hunger mechanic will be active
|
||||||
mcl_enable_hunger (Hunger mechanic) bool true
|
mcl_enable_hunger (Hunger mechanic) bool true
|
||||||
|
|
||||||
|
|