Make armour HUD always show even if empty, and add game to master

This commit is contained in:
OttoLidenbrock 2015-05-23 13:05:33 +10:00
parent 458fa3a678
commit 02848d189e
1748 changed files with 80974 additions and 80946 deletions

View File

@ -1,46 +1,46 @@
# MultiCraft_game
Subgame for MultiCraft.
A Minecraft clone game for the MultiCraft game engine.
======================================================================
License of source code
----------------------
Copyright (C) 2013 jojoa1997
See README.txt in each mod directory for information about other authors.
LGPL v3 see LICENSE.txt
License of media (textures and sounds)
--------------------------------------
Copyright (C) 2013 Vattic
http://www.minecraftforum.net/topic/72747-/
Vattic's Terms:
Things that are fine:
- Use as placeholders.
- Using as many textures as you've made yourself.
- Using the items or paintings.
- Use as base for mod textures.
Requirements:
- Give clear credit.
- Link back to the Faithful 32x32 thread.
- Be honest about what you are using.
- No money making links.
On remix/tweaked packs:
- Let's Players can share a modified copy with fans.
- Adventure map makers can provide modified copy to go along with it.
If either of the above apply:
- You must distribute through YouTube video descriptions or your series'/map's forum topic and not create a separate thread for the pack.
- To avoid people uploading a video just so they can upload a copy of the pack Let's Players must have a decent number of videos that use the pack and a decent number of subscribers.
Finally:
- If I decide I don't want you using stuff from the pack then that is final. This will only be the case in unusual circumstances.
- These guidelines can be changed at any time.
# MultiCraft_game
Subgame for MultiCraft.
A Minecraft clone game for the MultiCraft game engine.
======================================================================
License of source code
----------------------
Copyright (C) 2013 jojoa1997
See README.txt in each mod directory for information about other authors.
LGPL v3 see LICENSE.txt
License of media (textures and sounds)
--------------------------------------
Copyright (C) 2013 Vattic
http://www.minecraftforum.net/topic/72747-/
Vattic's Terms:
Things that are fine:
- Use as placeholders.
- Using as many textures as you've made yourself.
- Using the items or paintings.
- Use as base for mod textures.
Requirements:
- Give clear credit.
- Link back to the Faithful 32x32 thread.
- Be honest about what you are using.
- No money making links.
On remix/tweaked packs:
- Let's Players can share a modified copy with fans.
- Adventure map makers can provide modified copy to go along with it.
If either of the above apply:
- You must distribute through YouTube video descriptions or your series'/map's forum topic and not create a separate thread for the pack.
- To avoid people uploading a video just so they can upload a copy of the pack Let's Players must have a decent number of videos that use the pack and a decent number of subscribers.
Finally:
- If I decide I don't want you using stuff from the pack then that is final. This will only be the case in unusual circumstances.
- These guidelines can be changed at any time.
See README.txt in each mod directory for information about other authors.

View File

@ -1,26 +1,26 @@
multicraft mod "Beds"
=======================
version: 1.1
License of source code: WTFPL
-----------------------------
author: BlockMen (2013)
original author: PilzAdam
This program is free software. It comes without any warranty, to
the extent permitted by applicable law. You can redistribute it
and/or modify it under the terms of the Do What The Fuck You Want
To Public License, Version 2, as published by Sam Hocevar. See
http://sam.zoy.org/wtfpl/COPYING for more details.
--USING the mod--
------------------
This mods implements Beds like known from Minecraft. You can use them to sleep at night to skip the time or to prevent attacks by evil mobs.
To sleep you have to "rightclick" on your bed. You can only sleep at night and get noticed when it is too early.
multicraft mod "Beds"
=======================
version: 1.1
License of source code: WTFPL
-----------------------------
author: BlockMen (2013)
original author: PilzAdam
This program is free software. It comes without any warranty, to
the extent permitted by applicable law. You can redistribute it
and/or modify it under the terms of the Do What The Fuck You Want
To Public License, Version 2, as published by Sam Hocevar. See
http://sam.zoy.org/wtfpl/COPYING for more details.
--USING the mod--
------------------
This mods implements Beds like known from Minecraft. You can use them to sleep at night to skip the time or to prevent attacks by evil mobs.
To sleep you have to "rightclick" on your bed. You can only sleep at night and get noticed when it is too early.
After dying the player will respawn at the last bed he has slept.

View File

@ -1,263 +1,263 @@
if not multicraft.get_modpath("check") then os.exit() end
if not default.multicraft_is_variable_is_a_part_of_multicraft_subgame_and_copying_it_means_you_use_our_code_so_we_become_contributors_of_your_project then exit() end
local player_in_bed = 0
local guy
local hand
local old_yaw = 0
local function get_dir(pos)
local btop = "beds:bed_top"
if multicraft.get_node({x=pos.x+1,y=pos.y,z=pos.z}).name == btop then
return 7.9
elseif multicraft.get_node({x=pos.x-1,y=pos.y,z=pos.z}).name == btop then
return 4.75
elseif multicraft.get_node({x=pos.x,y=pos.y,z=pos.z+1}).name == btop then
return 3.15
elseif multicraft.get_node({x=pos.x,y=pos.y,z=pos.z-1}).name == btop then
return 6.28
end
end
function plock(start, max, tick, player, yaw)
if start+tick < max then
player:set_look_pitch(-1.2)
player:set_look_yaw(yaw)
multicraft.after(tick, plock, start+tick, max, tick, player, yaw)
else
player:set_look_pitch(0)
if old_yaw ~= 0 then multicraft.after(0.1+tick, function() player:set_look_yaw(old_yaw) end) end
end
end
function exit(pos)
local npos = multicraft.find_node_near(pos, 1, "beds:bed_bottom")
if npos ~= nil then pos = npos end
if multicraft.get_node({x=pos.x+1,y=pos.y,z=pos.z}).name == "air" then
return {x=pos.x+1,y=pos.y,z=pos.z}
elseif multicraft.get_node({x=pos.x-1,y=pos.y,z=pos.z}).name == "air" then
return {x=pos.x-1,y=pos.y,z=pos.z}
elseif multicraft.get_node({x=pos.x,y=pos.y,z=pos.z+1}).name == "air" then
return {x=pos.x,y=pos.y,z=pos.z+1}
elseif multicraft.get_node({x=pos.x,y=pos.y,z=pos.z-1}).name == "air" then
return {x=pos.x,y=pos.y,z=pos.z-1}
else
return {x=pos.x,y=pos.y,z=pos.z}
end
end
multicraft.register_node("beds:bed_bottom", {
description = "Bed",
inventory_image = "beds_bed.png",
wield_image = "beds_bed.png",
wield_scale = {x=0.8,y=2.5,z=1.3},
drawtype = "nodebox",
tiles = {"beds_bed_top_bottom.png^[transformR90", "default_wood.png", "beds_bed_side_bottom_r.png", "beds_bed_side_bottom_r.png^[transformfx", "beds_bed_leer.png", "beds_bed_side_bottom.png"},
paramtype = "light",
paramtype2 = "facedir",
stack_max = 64,
groups = {snappy=1,choppy=2,oddly_breakable_by_hand=2,flammable=3, decorative = 1},
sounds = default.node_sound_wood_defaults(),
node_box = {
type = "fixed",
fixed = {-0.5, -0.5, -0.5, 0.5, 0.06, 0.5},
},
selection_box = {
type = "fixed",
fixed = {-0.5, -0.5, -0.5, 0.5, 0.06, 1.5},
},
after_place_node = function(pos, placer, itemstack)
local node = multicraft.get_node(pos)
local param2 = node.param2
local npos = {x=pos.x, y=pos.y, z=pos.z}
if param2 == 0 then
npos.z = npos.z+1
elseif param2 == 1 then
npos.x = npos.x+1
elseif param2 == 2 then
npos.z = npos.z-1
elseif param2 == 3 then
npos.x = npos.x-1
end
if multicraft.registered_nodes[multicraft.get_node(npos).name].buildable_to == true and multicraft.get_node({x=npos.x, y=npos.y-1, z=npos.z}).name ~= "air" then
multicraft.set_node(npos, {name="beds:bed_top", param2 = param2})
else
multicraft.dig_node(pos)
return true
end
end,
on_destruct = function(pos)
pos = multicraft.find_node_near(pos, 1, "beds:bed_top")
if pos ~= nil then multicraft.remove_node(pos) end
end,
on_rightclick = function(pos, node, clicker, itemstack)
if not clicker:is_player() then
return
end
if multicraft.get_timeofday() > 0.2 and multicraft.get_timeofday() < 0.805 then
multicraft.chat_send_all("You can only sleep at night")
return
else
clicker:set_physics_override(0,0,0)
old_yaw = clicker:get_look_yaw()
guy = clicker
clicker:set_look_yaw(get_dir(pos))
multicraft.chat_send_all("Good night")
plock(0,2,0.1,clicker, get_dir(pos))
end
if not clicker:get_player_control().sneak then
local meta = multicraft.get_meta(pos)
local param2 = node.param2
if param2 == 0 then
pos.z = pos.z+1
elseif param2 == 1 then
pos.x = pos.x+1
elseif param2 == 2 then
pos.z = pos.z-1
elseif param2 == 3 then
pos.x = pos.x-1
end
if clicker:get_player_name() == meta:get_string("player") then
if param2 == 0 then
pos.x = pos.x-1
elseif param2 == 1 then
pos.z = pos.z+1
elseif param2 == 2 then
pos.x = pos.x+1
elseif param2 == 3 then
pos.z = pos.z-1
end
pos.y = pos.y-0.5
clicker:setpos(pos)
meta:set_string("player", "")
player_in_bed = player_in_bed-1
elseif meta:get_string("player") == "" then
pos.y = pos.y-0.5
clicker:setpos(pos)
meta:set_string("player", clicker:get_player_name())
player_in_bed = player_in_bed+1
end
end
end
})
multicraft.register_node("beds:bed_top", {
drawtype = "nodebox",
tiles = {"beds_bed_top_top.png^[transformR90", "beds_bed_leer.png", "beds_bed_side_top_r.png", "beds_bed_side_top_r.png^[transformfx", "beds_bed_side_top.png", "beds_bed_leer.png"},
paramtype = "light",
paramtype2 = "facedir",
groups = {snappy=1,choppy=2,oddly_breakable_by_hand=2,flammable=3},
sounds = default.node_sound_wood_defaults(),
node_box = {
type = "fixed",
fixed = {-0.5, -0.5, -0.5, 0.5, 0.06, 0.5},
},
selection_box = {
type = "fixed",
fixed = {0, 0, 0, 0, 0, 0},
},
})
multicraft.register_alias("beds:bed", "beds:bed_bottom")
multicraft.register_craft({
output = "beds:bed",
recipe = {
{"group:wool", "group:wool", "group:wool", },
{"group:wood", "group:wood", "group:wood", }
}
})
beds_player_spawns = {}
local file = io.open(multicraft.get_worldpath().."/beds_player_spawns", "r")
if file then
beds_player_spawns = multicraft.deserialize(file:read("*all"))
file:close()
end
local timer = 0
local wait = false
multicraft.register_globalstep(function(dtime)
if timer<2 then
timer = timer+dtime
return
end
timer = 0
local players = #multicraft.get_connected_players()
if players == player_in_bed and players ~= 0 then
if multicraft.get_timeofday() < 0.2 or multicraft.get_timeofday() > 0.805 then
if not wait then
multicraft.after(2, function()
multicraft.set_timeofday(0.23)
wait = false
guy:set_physics_override(1,1,1)
guy:setpos(exit(guy:getpos()))
end)
wait = true
for _,player in ipairs(multicraft.get_connected_players()) do
beds_player_spawns[player:get_player_name()] = player:getpos()
end
local file = io.open(multicraft.get_worldpath().."/beds_player_spawns", "w")
if file then
file:write(multicraft.serialize(beds_player_spawns))
file:close()
end
end
end
end
end)
multicraft.register_on_respawnplayer(function(player)
local name = player:get_player_name()
if beds_player_spawns[name] then
player:setpos(beds_player_spawns[name])
return true
end
end)
multicraft.register_abm({
nodenames = {"beds:bed_bottom"},
interval = 1,
chance = 1,
action = function(pos, node)
local meta = multicraft.get_meta(pos)
if meta:get_string("player") ~= "" then
local param2 = node.param2
if param2 == 0 then
pos.z = pos.z+1
elseif param2 == 1 then
pos.x = pos.x+1
elseif param2 == 2 then
pos.z = pos.z-1
elseif param2 == 3 then
pos.x = pos.x-1
end
local player = multicraft.get_player_by_name(meta:get_string("player"))
if player == nil then
meta:set_string("player", "")
player_in_bed = player_in_bed-1
return
end
local player_pos = player:getpos()
player_pos.x = math.floor(0.5+player_pos.x)
player_pos.y = math.floor(0.5+player_pos.y)
player_pos.z = math.floor(0.5+player_pos.z)
if pos.x ~= player_pos.x or pos.y ~= player_pos.y or pos.z ~= player_pos.z then
meta:set_string("player", "")
player_in_bed = player_in_bed-1
return
end
end
end
})
if multicraft.setting_get("log_mods") then
multicraft.log("action", "beds loaded")
end
if not multicraft.get_modpath("check") then os.exit() end
if not default.multicraft_is_variable_is_a_part_of_multicraft_subgame_and_copying_it_means_you_use_our_code_so_we_become_contributors_of_your_project then exit() end
local player_in_bed = 0
local guy
local hand
local old_yaw = 0
local function get_dir(pos)
local btop = "beds:bed_top"
if multicraft.get_node({x=pos.x+1,y=pos.y,z=pos.z}).name == btop then
return 7.9
elseif multicraft.get_node({x=pos.x-1,y=pos.y,z=pos.z}).name == btop then
return 4.75
elseif multicraft.get_node({x=pos.x,y=pos.y,z=pos.z+1}).name == btop then
return 3.15
elseif multicraft.get_node({x=pos.x,y=pos.y,z=pos.z-1}).name == btop then
return 6.28
end
end
function plock(start, max, tick, player, yaw)
if start+tick < max then
player:set_look_pitch(-1.2)
player:set_look_yaw(yaw)
multicraft.after(tick, plock, start+tick, max, tick, player, yaw)
else
player:set_look_pitch(0)
if old_yaw ~= 0 then multicraft.after(0.1+tick, function() player:set_look_yaw(old_yaw) end) end
end
end
function exit(pos)
local npos = multicraft.find_node_near(pos, 1, "beds:bed_bottom")
if npos ~= nil then pos = npos end
if multicraft.get_node({x=pos.x+1,y=pos.y,z=pos.z}).name == "air" then
return {x=pos.x+1,y=pos.y,z=pos.z}
elseif multicraft.get_node({x=pos.x-1,y=pos.y,z=pos.z}).name == "air" then
return {x=pos.x-1,y=pos.y,z=pos.z}
elseif multicraft.get_node({x=pos.x,y=pos.y,z=pos.z+1}).name == "air" then
return {x=pos.x,y=pos.y,z=pos.z+1}
elseif multicraft.get_node({x=pos.x,y=pos.y,z=pos.z-1}).name == "air" then
return {x=pos.x,y=pos.y,z=pos.z-1}
else
return {x=pos.x,y=pos.y,z=pos.z}
end
end
multicraft.register_node("beds:bed_bottom", {
description = "Bed",
inventory_image = "beds_bed.png",
wield_image = "beds_bed.png",
wield_scale = {x=0.8,y=2.5,z=1.3},
drawtype = "nodebox",
tiles = {"beds_bed_top_bottom.png^[transformR90", "default_wood.png", "beds_bed_side_bottom_r.png", "beds_bed_side_bottom_r.png^[transformfx", "beds_bed_leer.png", "beds_bed_side_bottom.png"},
paramtype = "light",
paramtype2 = "facedir",
stack_max = 64,
groups = {snappy=1,choppy=2,oddly_breakable_by_hand=2,flammable=3, decorative = 1},
sounds = default.node_sound_wood_defaults(),
node_box = {
type = "fixed",
fixed = {-0.5, -0.5, -0.5, 0.5, 0.06, 0.5},
},
selection_box = {
type = "fixed",
fixed = {-0.5, -0.5, -0.5, 0.5, 0.06, 1.5},
},
after_place_node = function(pos, placer, itemstack)
local node = multicraft.get_node(pos)
local param2 = node.param2
local npos = {x=pos.x, y=pos.y, z=pos.z}
if param2 == 0 then
npos.z = npos.z+1
elseif param2 == 1 then
npos.x = npos.x+1
elseif param2 == 2 then
npos.z = npos.z-1
elseif param2 == 3 then
npos.x = npos.x-1
end
if multicraft.registered_nodes[multicraft.get_node(npos).name].buildable_to == true and multicraft.get_node({x=npos.x, y=npos.y-1, z=npos.z}).name ~= "air" then
multicraft.set_node(npos, {name="beds:bed_top", param2 = param2})
else
multicraft.dig_node(pos)
return true
end
end,
on_destruct = function(pos)
pos = multicraft.find_node_near(pos, 1, "beds:bed_top")
if pos ~= nil then multicraft.remove_node(pos) end
end,
on_rightclick = function(pos, node, clicker, itemstack)
if not clicker:is_player() then
return
end
if multicraft.get_timeofday() > 0.2 and multicraft.get_timeofday() < 0.805 then
multicraft.chat_send_all("You can only sleep at night")
return
else
clicker:set_physics_override(0,0,0)
old_yaw = clicker:get_look_yaw()
guy = clicker
clicker:set_look_yaw(get_dir(pos))
multicraft.chat_send_all("Good night")
plock(0,2,0.1,clicker, get_dir(pos))
end
if not clicker:get_player_control().sneak then
local meta = multicraft.get_meta(pos)
local param2 = node.param2
if param2 == 0 then
pos.z = pos.z+1
elseif param2 == 1 then
pos.x = pos.x+1
elseif param2 == 2 then
pos.z = pos.z-1
elseif param2 == 3 then
pos.x = pos.x-1
end
if clicker:get_player_name() == meta:get_string("player") then
if param2 == 0 then
pos.x = pos.x-1
elseif param2 == 1 then
pos.z = pos.z+1
elseif param2 == 2 then
pos.x = pos.x+1
elseif param2 == 3 then
pos.z = pos.z-1
end
pos.y = pos.y-0.5
clicker:setpos(pos)
meta:set_string("player", "")
player_in_bed = player_in_bed-1
elseif meta:get_string("player") == "" then
pos.y = pos.y-0.5
clicker:setpos(pos)
meta:set_string("player", clicker:get_player_name())
player_in_bed = player_in_bed+1
end
end
end
})
multicraft.register_node("beds:bed_top", {
drawtype = "nodebox",
tiles = {"beds_bed_top_top.png^[transformR90", "beds_bed_leer.png", "beds_bed_side_top_r.png", "beds_bed_side_top_r.png^[transformfx", "beds_bed_side_top.png", "beds_bed_leer.png"},
paramtype = "light",
paramtype2 = "facedir",
groups = {snappy=1,choppy=2,oddly_breakable_by_hand=2,flammable=3},
sounds = default.node_sound_wood_defaults(),
node_box = {
type = "fixed",
fixed = {-0.5, -0.5, -0.5, 0.5, 0.06, 0.5},
},
selection_box = {
type = "fixed",
fixed = {0, 0, 0, 0, 0, 0},
},
})
multicraft.register_alias("beds:bed", "beds:bed_bottom")
multicraft.register_craft({
output = "beds:bed",
recipe = {
{"group:wool", "group:wool", "group:wool", },
{"group:wood", "group:wood", "group:wood", }
}
})
beds_player_spawns = {}
local file = io.open(multicraft.get_worldpath().."/beds_player_spawns", "r")
if file then
beds_player_spawns = multicraft.deserialize(file:read("*all"))
file:close()
end
local timer = 0
local wait = false
multicraft.register_globalstep(function(dtime)
if timer<2 then
timer = timer+dtime
return
end
timer = 0
local players = #multicraft.get_connected_players()
if players == player_in_bed and players ~= 0 then
if multicraft.get_timeofday() < 0.2 or multicraft.get_timeofday() > 0.805 then
if not wait then
multicraft.after(2, function()
multicraft.set_timeofday(0.23)
wait = false
guy:set_physics_override(1,1,1)
guy:setpos(exit(guy:getpos()))
end)
wait = true
for _,player in ipairs(multicraft.get_connected_players()) do
beds_player_spawns[player:get_player_name()] = player:getpos()
end
local file = io.open(multicraft.get_worldpath().."/beds_player_spawns", "w")
if file then
file:write(multicraft.serialize(beds_player_spawns))
file:close()
end
end
end
end
end)
multicraft.register_on_respawnplayer(function(player)
local name = player:get_player_name()
if beds_player_spawns[name] then
player:setpos(beds_player_spawns[name])
return true
end
end)
multicraft.register_abm({
nodenames = {"beds:bed_bottom"},
interval = 1,
chance = 1,
action = function(pos, node)
local meta = multicraft.get_meta(pos)
if meta:get_string("player") ~= "" then
local param2 = node.param2
if param2 == 0 then
pos.z = pos.z+1
elseif param2 == 1 then
pos.x = pos.x+1
elseif param2 == 2 then
pos.z = pos.z-1
elseif param2 == 3 then
pos.x = pos.x-1
end
local player = multicraft.get_player_by_name(meta:get_string("player"))
if player == nil then
meta:set_string("player", "")
player_in_bed = player_in_bed-1
return
end
local player_pos = player:getpos()
player_pos.x = math.floor(0.5+player_pos.x)
player_pos.y = math.floor(0.5+player_pos.y)
player_pos.z = math.floor(0.5+player_pos.z)
if pos.x ~= player_pos.x or pos.y ~= player_pos.y or pos.z ~= player_pos.z then
meta:set_string("player", "")
player_in_bed = player_in_bed-1
return
end
end
end
})
if multicraft.setting_get("log_mods") then
multicraft.log("action", "beds loaded")
end

View File

@ -1,170 +1,170 @@
if not multicraft.get_modpath("check") then os.exit() end
if not default.multicraft_is_variable_is_a_part_of_multicraft_subgame_and_copying_it_means_you_use_our_code_so_we_become_contributors_of_your_project then exit() end
--[[
#!#!#!#Cake mod created by Jordan4ibanez#!#!#
#!#!#!#Released under CC Attribution-ShareAlike 3.0 Unported #!#!#
]]--
cake_texture = {"cake_top.png","cake_bottom.png","cake_inner.png","cake_side.png","cake_side.png","cake_side.png"}
slice_1 = { -7/16, -8/16, -7/16, -5/16, 0/16, 7/16}
slice_2 = { -7/16, -8/16, -7/16, -2/16, 0/16, 7/16}
slice_3 = { -7/16, -8/16, -7/16, 1/16, 0/16, 7/16}
slice_4 = { -7/16, -8/16, -7/16, 3/16, 0/16, 7/16}
slice_5 = { -7/16, -8/16, -7/16, 5/16, 0/16, 7/16}
slice_6 = { -7/16, -8/16, -7/16, 7/16, 0/16, 7/16}
multicraft.register_craft({
output = "cake:cake",
recipe = {
{'bucket:bucket_water', 'bucket:bucket_water', 'bucket:bucket_water'},
{'default:sugar', 'default:leaves', 'default:sugar'},
{'farming:wheat_harvested', 'farming:wheat_harvested', 'farming:wheat_harvested'},
},
replacements = {{"bucket:bucket_water", "bucket:bucket_empty"}},
})
multicraft.register_node("cake:cake", {
description = "Cake",
tiles = {"cake_top.png","cake_bottom.png","cake_side.png","cake_side.png","cake_side.png","cake_side.png"},
paramtype = "light",
drawtype = "nodebox",
selection_box = {
type = "fixed",
fixed = slice_6
},
node_box = {
type = "fixed",
fixed = slice_6
},
is_ground_content = true,
stack_max = 1,
groups = {crumbly=3,falling_node=1, foodstuffs = 1},
drop = '',
--legacy_mineral = true,
on_rightclick = function(pos, node, clicker, itemstack)
if clicker:get_hp() < 20 then
clicker:set_hp(clicker:get_hp()+2)
multicraft.add_node(pos,{type="node",name="cake:cake_5",param2=param2})
end
end,
})
multicraft.register_node("cake:cake_5", {
description = "Cake [5 Slices Left]",
tiles = cake_texture,
paramtype = "light",
drawtype = "nodebox",
selection_box = {
type = "fixed",
fixed = slice_5
},
node_box = {
type = "fixed",
fixed = slice_5
},
is_ground_content = true,
groups = {crumbly=3,falling_node=1,not_in_creative_inventory=1},
drop = '',
--legacy_mineral = true,
on_rightclick = function(pos, node, clicker, itemstack)
if clicker:get_hp() < 20 then
clicker:set_hp(clicker:get_hp()+2)
multicraft.add_node(pos,{type="node",name="cake:cake_4",param2=param2})
end
end,
})
multicraft.register_node("cake:cake_4", {
description = "Cake [4 Slices Left]",
tiles = cake_texture,
paramtype = "light",
drawtype = "nodebox",
selection_box = {
type = "fixed",
fixed = slice_4
},
node_box = {
type = "fixed",
fixed = slice_4
},
is_ground_content = true,
groups = {crumbly=3,falling_node=1,not_in_creative_inventory=1},
drop = '',
--legacy_mineral = true,
on_rightclick = function(pos, node, clicker, itemstack)
if clicker:get_hp() < 20 then
clicker:set_hp(clicker:get_hp()+2)
multicraft.add_node(pos,{type="node",name="cake:cake_3",param2=param2})
end
end,
})
multicraft.register_node("cake:cake_3", {
description = "Cake [3 Slices Left]",
tiles = cake_texture,
paramtype = "light",
drawtype = "nodebox",
selection_box = {
type = "fixed",
fixed = slice_3
},
node_box = {
type = "fixed",
fixed = slice_3
},
is_ground_content = true,
groups = {crumbly=3,falling_node=1,not_in_creative_inventory=1},
drop = '',
--legacy_mineral = true,
on_rightclick = function(pos, node, clicker, itemstack)
if clicker:get_hp() < 20 then
clicker:set_hp(clicker:get_hp()+2)
multicraft.add_node(pos,{type="node",name="cake:cake_2",param2=param2})
end
end,
})
multicraft.register_node("cake:cake_2", {
description = "Cake [2 Slices Left]",
tiles = cake_texture,
paramtype = "light",
drawtype = "nodebox",
selection_box = {
type = "fixed",
fixed = slice_2
},
node_box = {
type = "fixed",
fixed = slice_2
},
is_ground_content = true,
groups = {crumbly=3,falling_node=1,not_in_creative_inventory=1},
drop = '',
--legacy_mineral = true,
on_rightclick = function(pos, node, clicker, itemstack)
if clicker:get_hp() < 20 then
clicker:set_hp(clicker:get_hp()+2)
multicraft.add_node(pos,{type="node",name="cake:cake_1",param2=param2})
end
end,
})
multicraft.register_node("cake:cake_1", {
description = "Cake [1 Slice Left]",
tiles = cake_texture,
paramtype = "light",
drawtype = "nodebox",
selection_box = {
type = "fixed",
fixed = slice_1
},
node_box = {
type = "fixed",
fixed = slice_1
},
is_ground_content = true,
groups = {crumbly=3,falling_node=1,not_in_creative_inventory=1},
drop = '',
--legacy_mineral = true,
on_rightclick = function(pos, node, clicker, itemstack)
if clicker:get_hp() < 20 then
clicker:set_hp(clicker:get_hp()+2)
multicraft.remove_node(pos)
end
end,
if not multicraft.get_modpath("check") then os.exit() end
if not default.multicraft_is_variable_is_a_part_of_multicraft_subgame_and_copying_it_means_you_use_our_code_so_we_become_contributors_of_your_project then exit() end
--[[
#!#!#!#Cake mod created by Jordan4ibanez#!#!#
#!#!#!#Released under CC Attribution-ShareAlike 3.0 Unported #!#!#
]]--
cake_texture = {"cake_top.png","cake_bottom.png","cake_inner.png","cake_side.png","cake_side.png","cake_side.png"}
slice_1 = { -7/16, -8/16, -7/16, -5/16, 0/16, 7/16}
slice_2 = { -7/16, -8/16, -7/16, -2/16, 0/16, 7/16}
slice_3 = { -7/16, -8/16, -7/16, 1/16, 0/16, 7/16}
slice_4 = { -7/16, -8/16, -7/16, 3/16, 0/16, 7/16}
slice_5 = { -7/16, -8/16, -7/16, 5/16, 0/16, 7/16}
slice_6 = { -7/16, -8/16, -7/16, 7/16, 0/16, 7/16}
multicraft.register_craft({
output = "cake:cake",
recipe = {
{'bucket:bucket_water', 'bucket:bucket_water', 'bucket:bucket_water'},
{'default:sugar', 'default:leaves', 'default:sugar'},
{'farming:wheat_harvested', 'farming:wheat_harvested', 'farming:wheat_harvested'},
},
replacements = {{"bucket:bucket_water", "bucket:bucket_empty"}},
})
multicraft.register_node("cake:cake", {
description = "Cake",
tiles = {"cake_top.png","cake_bottom.png","cake_side.png","cake_side.png","cake_side.png","cake_side.png"},
paramtype = "light",
drawtype = "nodebox",
selection_box = {
type = "fixed",
fixed = slice_6
},
node_box = {
type = "fixed",
fixed = slice_6
},
is_ground_content = true,
stack_max = 1,
groups = {crumbly=3,falling_node=1, foodstuffs = 1},
drop = '',
--legacy_mineral = true,
on_rightclick = function(pos, node, clicker, itemstack)
if clicker:get_hp() < 20 then
clicker:set_hp(clicker:get_hp()+2)
multicraft.add_node(pos,{type="node",name="cake:cake_5",param2=param2})
end
end,
})
multicraft.register_node("cake:cake_5", {
description = "Cake [5 Slices Left]",
tiles = cake_texture,
paramtype = "light",
drawtype = "nodebox",
selection_box = {
type = "fixed",
fixed = slice_5
},
node_box = {
type = "fixed",
fixed = slice_5
},
is_ground_content = true,
groups = {crumbly=3,falling_node=1,not_in_creative_inventory=1},
drop = '',
--legacy_mineral = true,
on_rightclick = function(pos, node, clicker, itemstack)
if clicker:get_hp() < 20 then
clicker:set_hp(clicker:get_hp()+2)
multicraft.add_node(pos,{type="node",name="cake:cake_4",param2=param2})
end
end,
})
multicraft.register_node("cake:cake_4", {
description = "Cake [4 Slices Left]",
tiles = cake_texture,
paramtype = "light",
drawtype = "nodebox",
selection_box = {
type = "fixed",
fixed = slice_4
},
node_box = {
type = "fixed",
fixed = slice_4
},
is_ground_content = true,
groups = {crumbly=3,falling_node=1,not_in_creative_inventory=1},
drop = '',
--legacy_mineral = true,
on_rightclick = function(pos, node, clicker, itemstack)
if clicker:get_hp() < 20 then
clicker:set_hp(clicker:get_hp()+2)
multicraft.add_node(pos,{type="node",name="cake:cake_3",param2=param2})
end
end,
})
multicraft.register_node("cake:cake_3", {
description = "Cake [3 Slices Left]",
tiles = cake_texture,
paramtype = "light",
drawtype = "nodebox",
selection_box = {
type = "fixed",
fixed = slice_3
},
node_box = {
type = "fixed",
fixed = slice_3
},
is_ground_content = true,
groups = {crumbly=3,falling_node=1,not_in_creative_inventory=1},
drop = '',
--legacy_mineral = true,
on_rightclick = function(pos, node, clicker, itemstack)
if clicker:get_hp() < 20 then
clicker:set_hp(clicker:get_hp()+2)
multicraft.add_node(pos,{type="node",name="cake:cake_2",param2=param2})
end
end,
})
multicraft.register_node("cake:cake_2", {
description = "Cake [2 Slices Left]",
tiles = cake_texture,
paramtype = "light",
drawtype = "nodebox",
selection_box = {
type = "fixed",
fixed = slice_2
},
node_box = {
type = "fixed",
fixed = slice_2
},
is_ground_content = true,
groups = {crumbly=3,falling_node=1,not_in_creative_inventory=1},
drop = '',
--legacy_mineral = true,
on_rightclick = function(pos, node, clicker, itemstack)
if clicker:get_hp() < 20 then
clicker:set_hp(clicker:get_hp()+2)
multicraft.add_node(pos,{type="node",name="cake:cake_1",param2=param2})
end
end,
})
multicraft.register_node("cake:cake_1", {
description = "Cake [1 Slice Left]",
tiles = cake_texture,
paramtype = "light",
drawtype = "nodebox",
selection_box = {
type = "fixed",
fixed = slice_1
},
node_box = {
type = "fixed",
fixed = slice_1
},
is_ground_content = true,
groups = {crumbly=3,falling_node=1,not_in_creative_inventory=1},
drop = '',
--legacy_mineral = true,
on_rightclick = function(pos, node, clicker, itemstack)
if clicker:get_hp() < 20 then
clicker:set_hp(clicker:get_hp()+2)
multicraft.remove_node(pos)
end
end,
})

View File

@ -1,24 +1,24 @@
INFO_BLANK = "To find out more about certain items type the command '/info' with the params 'update', 'version', 'creative', 'suprise'"
INFO_VERSION = "0.1"
INFO_UPDATE = "I think nether ... but lot of monster before"
INFO_CREATIVE = "Type the command '/gamemode ' and use the params '0' or 's' for survival and '1' or 'c' for creative"
multicraft.register_chatcommand("info", {
params = "(blank) | update | version | creative",
description = "To get info on stuff.",
func = function(name, param)
if param == "" then
multicraft.chat_send_player(name, INFO_BLANK)
end
if param == "update" then
multicraft.chat_send_player(name, INFO_UPDATE)
end
if param == "version" then
multicraft.chat_send_player(name, INFO_VERSION)
end
if param == "creative" then
multicraft.chat_send_player(name, INFO_CREATIVE)
end
end
})
INFO_BLANK = "To find out more about certain items type the command '/info' with the params 'update', 'version', 'creative', 'suprise'"
INFO_VERSION = "0.1"
INFO_UPDATE = "I think nether ... but lot of monster before"
INFO_CREATIVE = "Type the command '/gamemode ' and use the params '0' or 's' for survival and '1' or 'c' for creative"
multicraft.register_chatcommand("info", {
params = "(blank) | update | version | creative",
description = "To get info on stuff.",
func = function(name, param)
if param == "" then
multicraft.chat_send_player(name, INFO_BLANK)
end
if param == "update" then
multicraft.chat_send_player(name, INFO_UPDATE)
end
if param == "version" then
multicraft.chat_send_player(name, INFO_VERSION)
end
if param == "creative" then
multicraft.chat_send_player(name, INFO_CREATIVE)
end
end
})

View File

@ -1,26 +1,26 @@
multicraft.register_chatcommand("kit", {
params = "",
description = "Add a Kit to player",
privs = {},
func = function(name, param)
if param == "" then
multicraft.chat_send_player(name, "No kit selected use ... Aviable : noob , pvp")
end
local receiverref = core.get_player_by_name(name)
if param == "noob" then
receiverref:get_inventory():add_item('main', 'default:pick_steel')
receiverref:get_inventory():add_item('main', 'default:shovel_steel')
receiverref:get_inventory():add_item('main', 'default:torch 16')
receiverref:get_inventory():add_item('main', 'default:axe_steel')
receiverref:get_inventory():add_item('main', 'default:cobble 64')
end
if param == "pvp" then
receiverref:get_inventory():add_item('main', 'default:sword_diamond')
receiverref:get_inventory():add_item('main', 'default:apple_gold 64')
receiverref:get_inventory():add_item('main', '3d_armor:helmet_diamond')
receiverref:get_inventory():add_item('main', '3d_armor:chestplate_diamond')
receiverref:get_inventory():add_item('main', '3d_armor:leggings_diamond')
receiverref:get_inventory():add_item('main', '3d_armor:boots_diamond')
end
end
multicraft.register_chatcommand("kit", {
params = "",
description = "Add a Kit to player",
privs = {},
func = function(name, param)
if param == "" then
multicraft.chat_send_player(name, "No kit selected use ... Aviable : noob , pvp")
end
local receiverref = core.get_player_by_name(name)
if param == "noob" then
receiverref:get_inventory():add_item('main', 'default:pick_steel')
receiverref:get_inventory():add_item('main', 'default:shovel_steel')
receiverref:get_inventory():add_item('main', 'default:torch 16')
receiverref:get_inventory():add_item('main', 'default:axe_steel')
receiverref:get_inventory():add_item('main', 'default:cobble 64')
end
if param == "pvp" then
receiverref:get_inventory():add_item('main', 'default:sword_diamond')
receiverref:get_inventory():add_item('main', 'default:apple_gold 64')
receiverref:get_inventory():add_item('main', '3d_armor:helmet_diamond')
receiverref:get_inventory():add_item('main', '3d_armor:chestplate_diamond')
receiverref:get_inventory():add_item('main', '3d_armor:leggings_diamond')
receiverref:get_inventory():add_item('main', '3d_armor:boots_diamond')
end
end
})

View File

@ -1,28 +1,28 @@
multicraft.register_chatcommand("night", {
params = "",
description = "Make the night",
privs = {settime = true},
func = function(name, param)
local player = multicraft.get_player_by_name(name)
if not player then
return
end
multicraft.set_timeofday(0.22)
end
})
multicraft.register_chatcommand("day", {
params = "",
description = "Make the day wakeup",
privs = {settime = true},
func = function(name, param)
local player = multicraft.get_player_by_name(name)
if not player then
return
end
multicraft.set_timeofday(0.6)
end
})
multicraft.register_chatcommand("night", {
params = "",
description = "Make the night",
privs = {settime = true},
func = function(name, param)
local player = multicraft.get_player_by_name(name)
if not player then
return
end
multicraft.set_timeofday(0.22)
end
})
multicraft.register_chatcommand("day", {
params = "",
description = "Make the day wakeup",
privs = {settime = true},
func = function(name, param)
local player = multicraft.get_player_by_name(name)
if not player then
return
end
multicraft.set_timeofday(0.6)
end
})

View File

@ -1,23 +1,23 @@
vanished_players = {}
multicraft.register_privilege("vanish", "Allow to use /vanish command")
multicraft.register_chatcommand("vanish", {
params = "",
description = "Make user invisible at eye of all",
privs = {vanish = true},
func = function(name, param)
local prop
vanished_players[name] = not vanished_players[name]
if vanished_players[name] then
prop = {visual_size = {x=0, y=0}, collisionbox = {0,0,0,0,0,0}}
else
-- default player size
prop = {visual_size = {x=1, y=1},
collisionbox = {-0.35, -1, -0.35, 0.35, 1, 0.35}}
end
multicraft.get_player_by_name(name):set_properties(prop)
end
})
vanished_players = {}
multicraft.register_privilege("vanish", "Allow to use /vanish command")
multicraft.register_chatcommand("vanish", {
params = "",
description = "Make user invisible at eye of all",
privs = {vanish = true},
func = function(name, param)
local prop
vanished_players[name] = not vanished_players[name]
if vanished_players[name] then
prop = {visual_size = {x=0, y=0}, collisionbox = {0,0,0,0,0,0}}
else
-- default player size
prop = {visual_size = {x=1, y=1},
collisionbox = {-0.35, -1, -0.35, 0.35, 1, 0.35}}
end
multicraft.get_player_by_name(name):set_properties(prop)
end
})

View File

@ -1,31 +1,31 @@
multicraft mod "Crafting"
=======================
version: 2.0.1
License of source code and Textures: WTFPL
------------------------------------
Copyright (c) 2013-2014 BlockMen
This program is free software. It comes without any warranty, to
the extent permitted by applicable law. You can redistribute it
and/or modify it under the terms of the Do What The Fuck You Want
To Public License, Version 2, as published by Sam Hocevar. See
http://sam.zoy.org/wtfpl/COPYING for more details.
--USING the mod--
=================
This mod changes the players inventory (survival and creative) with more slots (9*4 instead of 8*4)
Like known from Minecraft you have a 2x2 crafting grid at inventory now. Furthermore a categorized creative
inventory and a support for stu's 3d armor mod (To use the armor and a preview of player).
Left items in the crafting slots are dropped infront of you.
Workbench
=========
With following recipe you craft a workbench (aka crafting table):
wood wood
wood wood
multicraft mod "Crafting"
=======================
version: 2.0.1
License of source code and Textures: WTFPL
------------------------------------
Copyright (c) 2013-2014 BlockMen
This program is free software. It comes without any warranty, to
the extent permitted by applicable law. You can redistribute it
and/or modify it under the terms of the Do What The Fuck You Want
To Public License, Version 2, as published by Sam Hocevar. See
http://sam.zoy.org/wtfpl/COPYING for more details.
--USING the mod--
=================
This mod changes the players inventory (survival and creative) with more slots (9*4 instead of 8*4)
Like known from Minecraft you have a 2x2 crafting grid at inventory now. Furthermore a categorized creative
inventory and a support for stu's 3d armor mod (To use the armor and a preview of player).
Left items in the crafting slots are dropped infront of you.
Workbench
=========
With following recipe you craft a workbench (aka crafting table):
wood wood
wood wood
The workbench has a 3x3 crafting grid, that allows to use all recipes.

View File

@ -1,34 +1,34 @@
multicraft mod "Crafting"
=======================
Version: 2.0.1
License of source code and Textures: WTFPL
------------------------------------
copyright (c) 2013-2014 by BlockMen
This program is free software. It comes without any warranty, to
the extent permitted by applicable law. You can redistribute it
and/or modify it under the terms of the Do What The Fuck You Want
To Public License, Version 2, as published by Sam Hocevar. See
http://sam.zoy.org/wtfpl/COPYING for more details.
--USING the mod--
=================
This mod changes the players inventory (survival and creative) with more slots (9*4 instead of 8*4)
Like known from Minecraft you have a 2x2 crafting grid at inventory now. Furthermore a categorized creative
inventory and a support for stu's 3d armor mod (To use the armor and a preview of player).
Left items in the crafting slots are dropped infront of you.
Workbench
_________
With following recipe you craft a workbench (aka crafting table):
wood wood
wood wood
multicraft mod "Crafting"
=======================
Version: 2.0.1
License of source code and Textures: WTFPL
------------------------------------
copyright (c) 2013-2014 by BlockMen
This program is free software. It comes without any warranty, to
the extent permitted by applicable law. You can redistribute it
and/or modify it under the terms of the Do What The Fuck You Want
To Public License, Version 2, as published by Sam Hocevar. See
http://sam.zoy.org/wtfpl/COPYING for more details.
--USING the mod--
=================
This mod changes the players inventory (survival and creative) with more slots (9*4 instead of 8*4)
Like known from Minecraft you have a 2x2 crafting grid at inventory now. Furthermore a categorized creative
inventory and a support for stu's 3d armor mod (To use the armor and a preview of player).
Left items in the crafting slots are dropped infront of you.
Workbench
_________
With following recipe you craft a workbench (aka crafting table):
wood wood
wood wood
The workbench has a 3x3 crafting grid, that allows to use all recipes.

View File

@ -1,397 +1,397 @@
crafting = {}
crafting.creative_inventory_size = 0
crafting.start_is = {}
crafting.pages = {}
function init()
local inv = multicraft.create_detached_inventory("creative", {
allow_move = function(inv, from_list, from_index, to_list, to_index, count, player)
if multicraft.setting_getbool("creative_mode") then
return count
else
return 0
end
end,
allow_put = function(inv, listname, index, stack, player)
return 0
end,
allow_take = function(inv, listname, index, stack, player)
if multicraft.setting_getbool("creative_mode") then
return -1
else
return 0
end
end,
on_move = function(inv, from_list, from_index, to_list, to_index, count, player)
end,
on_put = function(inv, listname, index, stack, player)
end,
on_take = function(inv, listname, index, stack, player)
print(player:get_player_name().." takes item from creative inventory; listname="..dump(listname)..", index="..dump(index)..", stack="..dump(stack))
if stack then
print("stack:get_name()="..dump(stack:get_name())..", stack:get_count()="..dump(stack:get_count()))
end
end,
})
set_inv("all")
end
function set_inv(filter, player)
local inv = multicraft.get_inventory({type="detached", name="creative"})
inv:set_size("main", 0)
local creative_list = {}
for name,def in pairs(multicraft.registered_items) do
if (not def.groups.not_in_creative_inventory or def.groups.not_in_creative_inventory == 0) and def.description and def.description ~= "" then
if filter ~= "" then
if filter == "#blocks" then
if multicraft.registered_items[def.name]
and multicraft.registered_items[def.name].groups
and multicraft.registered_items[def.name].groups.building
then
table.insert(creative_list, name)
end
elseif filter == "#deco" then
if multicraft.registered_items[def.name]
and multicraft.registered_items[def.name].groups
and multicraft.registered_items[def.name].groups.decorative
then
table.insert(creative_list, name)
end
elseif filter == "#mese" then
if multicraft.registered_items[def.name]
and multicraft.registered_items[def.name].groups
and multicraft.registered_items[def.name].groups.mese
then
table.insert(creative_list, name)
end
elseif filter == "#rail" then
if multicraft.registered_items[def.name]
and multicraft.registered_items[def.name].groups
and multicraft.registered_items[def.name].groups.rail
then
table.insert(creative_list, name)
end
elseif filter == "#misc" then
if multicraft.registered_items[def.name]
and multicraft.registered_items[def.name].groups
and multicraft.registered_items[def.name].groups.misc
then
table.insert(creative_list, name)
end
elseif filter == "#food" then
if multicraft.registered_items[def.name]
and multicraft.registered_items[def.name].groups
and multicraft.registered_items[def.name].groups.foodstuffs
then
table.insert(creative_list, name)
end
elseif filter == "#tools" then
if multicraft.registered_items[def.name]
and multicraft.registered_items[def.name].groups
and multicraft.registered_items[def.name].groups.tools
then
table.insert(creative_list, name)
end
elseif filter == "#combat" then
if multicraft.registered_items[def.name]
and multicraft.registered_items[def.name].groups
and multicraft.registered_items[def.name].groups.combat
then
table.insert(creative_list, name)
end
elseif filter == "#matr" then
if multicraft.registered_items[def.name]
and multicraft.registered_items[def.name].groups
and multicraft.registered_items[def.name].groups.materials
then
table.insert(creative_list, name)
end
elseif filter == "#brew" then
if multicraft.registered_items[def.name]
and multicraft.registered_items[def.name].groups
and multicraft.registered_items[def.name].groups.brewing
then
table.insert(creative_list, name)
end
elseif filter == "all" then
table.insert(creative_list, name)
else --for all other
if string.find(string.lower(def.name), filter) or string.find(string.lower(def.description), filter) then
table.insert(creative_list, name)
end
end
end
end
end
table.sort(creative_list)
inv:set_size("main", #creative_list)
for _,itemstring in ipairs(creative_list) do
inv:add_item("main", ItemStack(itemstring))
end
crafting.creative_inventory_size = #creative_list
--print("creative inventory size: "..dump(crafting.creative_inventory_size))
end
-- Create the trash field
local trash = multicraft.create_detached_inventory("creative_trash", {
allow_put = function(inv, listname, index, stack, player)
if multicraft.setting_getbool("creative_mode") then
return stack:get_count()
else
return 0
end
end,
on_put = function(inv, listname, index, stack, player)
inv:set_stack(listname, index, "")
end,
})
trash:set_size("main", 1)
-- Create detached creative inventory after loading all mods
multicraft.after(0, init)
local offset = {}
local hoch = {}
local bg = {}
offset["blocks"] = "-0.29,-0.25"
offset["deco"] = "0.98,-0.25"
offset["mese"] = "2.23,-0.25"
offset["rail"] = "3.495,-0.25"
offset["misc"] = "4.75,-0.25"
offset["nix"] = "8.99,-0.25"
offset["food"] = "-0.29,8.12"
offset["tools"] = "0.98,8.12"
offset["combat"] = "2.23,8.12"
offset["brew"] = "4.78,8.12"
offset["matr"] = "3.495,8.12"
offset["inv"] = "8.99,8.12"
hoch["blocks"] = ""
hoch["deco"] = ""
hoch["mese"] = ""
hoch["rail"] = ""
hoch["misc"] = ""
hoch["nix"] = ""
hoch["food"] = "^[transformfy"
hoch["tools"] = "^[transformfy"
hoch["combat"] = "^[transformfy"
hoch["brew"] = "^[transformfy"
hoch["matr"] = "^[transformfy"
hoch["inv"] = "^[transformfy"
local dark_bg = "crafting_creative_bg_dark.png"
local function reset_menu_item_bg()
bg["blocks"] = dark_bg
bg["deco"] = dark_bg
bg["mese"] = dark_bg
bg["rail"] = dark_bg
bg["misc"] = dark_bg
bg["nix"] = dark_bg
bg["food"] = dark_bg
bg["tools"] = dark_bg
bg["combat"] = dark_bg
bg["brew"] = dark_bg
bg["matr"] = dark_bg
bg["inv"] = dark_bg
end
crafting.set_creative_formspec = function(player, start_i, pagenum, show, page, scroll)
reset_menu_item_bg()
pagenum = math.floor(pagenum) or 1
local pagemax = math.floor((crafting.creative_inventory_size) / (9*5) + 1)
local slider_height = 4/pagemax
local slider_pos = slider_height*(pagenum-1)+2.25
local player_name = player:get_player_name()
crafting.start_is[player_name] = start_i
crafting.pages[player_name] = page
local formspec = ""
local main_list = "list[detached:creative;main;0,1.75;9,5;"..tostring(start_i).."]"
local name = "nix"
if page ~= nil then name = page end
bg[name] = "crafting_creative_bg.png"
if name == "inv" then
main_list = "image[-0.2,1.7;11.35,2.33;crafting_creative_bg.png]"..
"image[-0.3,0.15;3,4;crafting_inventory_armor2.png]"..
"list[current_player;main;0,3.75;9,3;9]"..
"list[detached:"..player_name.."_armor;armor;0,1.55;1,1;]"..
"list[detached:"..player_name.."_armor;armor;0,2.55;1,1;1]"..
"list[detached:"..player_name.."_armor;armor;1,1.55;1,1;2]"..
"list[detached:"..player_name.."_armor;armor;1,2.55;1,1;3]"
end
formspec = "size[10,9.3]"..
"background[-0.19,-0.25;10.5,9.87;crafting_inventory_creative.png]"..
"bgcolor[#080808BB;true]"..
"listcolors[#9990;#FFF7;#FFF0;#160816;#D4D2FF]"..
"label[-5,-5;"..name.."]"..
"image[" .. offset[name] .. ";1.5,1.44;crafting_creative_active.png"..hoch[name].."]"..
"image_button[-0.1,0;1,1;"..bg["blocks"].."^crafting_creative_build.png;build;]".. --build blocks
"image_button[1.15,0;1,1;"..bg["deco"].."^crafting_creative_deko.png;deco;]".. --decoration blocks
"image_button[2.415,0;1,1;"..bg["mese"].."^crafting_creative_mese.png;mese;]".. --redstone
"image_button[3.693,0;1,1;"..bg["rail"].."^crafting_creative_rail.png;rail;]".. --transportation
"image_button[4.93,0;1,1;"..bg["misc"].."^crafting_creative_misc.png;misc;]".. --miscellaneous
"image_button[9.19,0;1,1;"..bg["nix"].."^crafting_creative_all.png;default;]".. --search
"image[0,1;5,0.75;fnt_"..name..".png]"..
"list[current_player;main;0,7;9,1;]"..
main_list..
"image_button[9.03,1.74;0.85,0.6;crafting_creative_up.png;creative_prev;]"..
"image_button[9.03,6.15;0.85,0.6;crafting_creative_down.png;creative_next;]"..
"image_button[-0.1,8.28;1,1;"..bg["food"].."^crafting_food.png;food;]".. --foodstuff
"image_button[1.15,8.28;1,1;"..bg["tools"].."^crafting_creative_tool.png;tools;]".. --tools
"image_button[2.415,8.28;1,1;"..bg["combat"].."^crafting_creative_sword.png;combat;]".. --combat
"image_button[3.693,8.28;1,1;"..bg["matr"].."^crafting_creative_matr.png;matr;]".. --brewing
"image_button[4.93,8.28;1,1;"..bg["brew"].."^crafting_inventory_brew.png;brew;]".. --materials^
"image_button[9.19,8.28;1,1;"..bg["inv"].."^crafting_creative_inv.png;inv;]".. --inventory
"list[detached:creative_trash;main;9,7;1,1;]"..
"image[9,7;1,1;crafting_creative_trash.png]"..
"image[9.04," .. tostring(slider_pos) .. ";0.75,"..tostring(slider_height) .. ";crafting_slider.png]"
if name == "nix" then formspec = formspec .. "field[5.3,1.3;4,0.75;suche;;]" end
if pagenum ~= nil then formspec = formspec .. "p"..tostring(pagenum) end
player:set_inventory_formspec(formspec)
end
multicraft.register_on_player_receive_fields(function(player, formname, fields)
local page = nil
if not multicraft.setting_getbool("creative_mode") then
return
end
if fields.bgcolor then
-- multicraft.chat_send_all("jupp")
end
if fields.suche ~= nil and fields.suche ~= "" then
set_inv(string.lower(fields.suche))
multicraft.after(0, function()
multicraft.show_formspec(player:get_player_name(), "detached:creative", player:get_inventory_formspec())
end)
end
if fields.build then
set_inv("#blocks",player)
page = "blocks"
end
if fields.deco then
set_inv("#deco",player)
page = "deco"
end
if fields.mese then
set_inv("#mese",player)
page = "mese"
end
if fields.rail then
set_inv("#rail",player)
page = "rail"
end
if fields.misc then
set_inv("#misc",player)
page = "misc"
end
if fields.default then
set_inv("all")
page = 'nix'
end
if fields.food then
set_inv("#food")
page = "food"
end
if fields.tools then
set_inv("#tools")
page = "tools"
end
if fields.combat then
set_inv("#combat")
page = "combat"
end
if fields.matr then
set_inv("#matr")
page = "matr"
end
if fields.inv then
page = "inv"
end
if fields.brew then
set_inv("#brew")
page = "brew"
end
-- Figure out current page from formspec
local current_page = 0
local formspec = player:get_inventory_formspec()
local size = string.len(formspec)
local marker = string.sub(formspec,size-1)
marker = string.sub(marker,1,1)
local player_name = player:get_player_name()
local start_i = crafting.start_is[player_name]
if not page then page = crafting.pages[player_name] end
if page ~= crafting.pages[player_name] then
start_i = 0
end
--if marker ~= nil and marker == "p" then
--local ppage = string.sub(formspec,size)
-- print('ppage ' .. (ppage or 'nope'))
--multicraft.chat_send_all(page)
--start_i = ppage - 1
--end
--start_i = tonumber(start_i) or 0
if fields.creative_prev then
start_i = start_i - 9*5
end
if fields.creative_next
and start_i + 9*5 <= crafting.creative_inventory_size+1 then
start_i = start_i + 9*5
end
if start_i < 0 then
start_i = 0
end
crafting.set_creative_formspec(player, start_i, start_i/(9*5) +1, false, page)
end)
if multicraft.setting_getbool("creative_mode") then
multicraft.register_item(":", {
type = "none",
wield_image = "wieldhand.png",
wield_scale = {x=1,y=1,z=2.5},
tool_capabilities = {
full_punch_interval = 0.5,
max_drop_level = 3,
groupcaps = {
crumbly = {times={[1]=0.5, [2]=0.5, [3]=0.5}, uses=0, maxlevel=3},
cracky = {times={[1]=0.5, [2]=0.5, [3]=0.5}, uses=0, maxlevel=3},
snappy = {times={[1]=0.5, [2]=0.5, [3]=0.5}, uses=0, maxlevel=3},
choppy = {times={[1]=0.5, [2]=0.5, [3]=0.5}, uses=0, maxlevel=3},
oddly_breakable_by_hand = {times={[1]=0.5, [2]=0.5, [3]=0.5}, uses=0, maxlevel=3},
}
}
})
multicraft.register_on_placenode(function(pos, newnode, placer, oldnode, itemstack)
return true
end)
function multicraft.handle_node_drops(pos, drops, digger)
if not digger or not digger:is_player() then
return
end
local inv = digger:get_inventory()
if inv then
for _,item in ipairs(drops) do
item = ItemStack(item):get_name()
if not inv:contains_item("main", item) then
inv:add_item("main", item)
end
end
end
end
end
crafting = {}
crafting.creative_inventory_size = 0
crafting.start_is = {}
crafting.pages = {}
function init()
local inv = multicraft.create_detached_inventory("creative", {
allow_move = function(inv, from_list, from_index, to_list, to_index, count, player)
if multicraft.setting_getbool("creative_mode") then
return count
else
return 0
end
end,
allow_put = function(inv, listname, index, stack, player)
return 0
end,
allow_take = function(inv, listname, index, stack, player)
if multicraft.setting_getbool("creative_mode") then
return -1
else
return 0
end
end,
on_move = function(inv, from_list, from_index, to_list, to_index, count, player)
end,
on_put = function(inv, listname, index, stack, player)
end,
on_take = function(inv, listname, index, stack, player)
print(player:get_player_name().." takes item from creative inventory; listname="..dump(listname)..", index="..dump(index)..", stack="..dump(stack))
if stack then
print("stack:get_name()="..dump(stack:get_name())..", stack:get_count()="..dump(stack:get_count()))
end
end,
})
set_inv("all")
end
function set_inv(filter, player)
local inv = multicraft.get_inventory({type="detached", name="creative"})
inv:set_size("main", 0)
local creative_list = {}
for name,def in pairs(multicraft.registered_items) do
if (not def.groups.not_in_creative_inventory or def.groups.not_in_creative_inventory == 0) and def.description and def.description ~= "" then
if filter ~= "" then
if filter == "#blocks" then
if multicraft.registered_items[def.name]
and multicraft.registered_items[def.name].groups
and multicraft.registered_items[def.name].groups.building
then
table.insert(creative_list, name)
end
elseif filter == "#deco" then
if multicraft.registered_items[def.name]
and multicraft.registered_items[def.name].groups
and multicraft.registered_items[def.name].groups.decorative
then
table.insert(creative_list, name)
end
elseif filter == "#mese" then
if multicraft.registered_items[def.name]
and multicraft.registered_items[def.name].groups
and multicraft.registered_items[def.name].groups.mese
then
table.insert(creative_list, name)
end
elseif filter == "#rail" then
if multicraft.registered_items[def.name]
and multicraft.registered_items[def.name].groups
and multicraft.registered_items[def.name].groups.rail
then
table.insert(creative_list, name)
end
elseif filter == "#misc" then
if multicraft.registered_items[def.name]
and multicraft.registered_items[def.name].groups
and multicraft.registered_items[def.name].groups.misc
then
table.insert(creative_list, name)
end
elseif filter == "#food" then
if multicraft.registered_items[def.name]
and multicraft.registered_items[def.name].groups
and multicraft.registered_items[def.name].groups.foodstuffs
then
table.insert(creative_list, name)
end
elseif filter == "#tools" then
if multicraft.registered_items[def.name]
and multicraft.registered_items[def.name].groups
and multicraft.registered_items[def.name].groups.tools
then
table.insert(creative_list, name)
end
elseif filter == "#combat" then
if multicraft.registered_items[def.name]
and multicraft.registered_items[def.name].groups
and multicraft.registered_items[def.name].groups.combat
then
table.insert(creative_list, name)
end
elseif filter == "#matr" then
if multicraft.registered_items[def.name]
and multicraft.registered_items[def.name].groups
and multicraft.registered_items[def.name].groups.materials
then
table.insert(creative_list, name)
end
elseif filter == "#brew" then
if multicraft.registered_items[def.name]
and multicraft.registered_items[def.name].groups
and multicraft.registered_items[def.name].groups.brewing
then
table.insert(creative_list, name)
end
elseif filter == "all" then
table.insert(creative_list, name)
else --for all other
if string.find(string.lower(def.name), filter) or string.find(string.lower(def.description), filter) then
table.insert(creative_list, name)
end
end
end
end
end
table.sort(creative_list)
inv:set_size("main", #creative_list)
for _,itemstring in ipairs(creative_list) do
inv:add_item("main", ItemStack(itemstring))
end
crafting.creative_inventory_size = #creative_list
--print("creative inventory size: "..dump(crafting.creative_inventory_size))
end
-- Create the trash field
local trash = multicraft.create_detached_inventory("creative_trash", {
allow_put = function(inv, listname, index, stack, player)
if multicraft.setting_getbool("creative_mode") then
return stack:get_count()
else
return 0
end
end,
on_put = function(inv, listname, index, stack, player)
inv:set_stack(listname, index, "")
end,
})
trash:set_size("main", 1)
-- Create detached creative inventory after loading all mods
multicraft.after(0, init)
local offset = {}
local hoch = {}
local bg = {}
offset["blocks"] = "-0.29,-0.25"
offset["deco"] = "0.98,-0.25"
offset["mese"] = "2.23,-0.25"
offset["rail"] = "3.495,-0.25"
offset["misc"] = "4.75,-0.25"
offset["nix"] = "8.99,-0.25"
offset["food"] = "-0.29,8.12"
offset["tools"] = "0.98,8.12"
offset["combat"] = "2.23,8.12"
offset["brew"] = "4.78,8.12"
offset["matr"] = "3.495,8.12"
offset["inv"] = "8.99,8.12"
hoch["blocks"] = ""
hoch["deco"] = ""
hoch["mese"] = ""
hoch["rail"] = ""
hoch["misc"] = ""
hoch["nix"] = ""
hoch["food"] = "^[transformfy"
hoch["tools"] = "^[transformfy"
hoch["combat"] = "^[transformfy"
hoch["brew"] = "^[transformfy"
hoch["matr"] = "^[transformfy"
hoch["inv"] = "^[transformfy"
local dark_bg = "crafting_creative_bg_dark.png"
local function reset_menu_item_bg()
bg["blocks"] = dark_bg
bg["deco"] = dark_bg
bg["mese"] = dark_bg
bg["rail"] = dark_bg
bg["misc"] = dark_bg
bg["nix"] = dark_bg
bg["food"] = dark_bg
bg["tools"] = dark_bg
bg["combat"] = dark_bg
bg["brew"] = dark_bg
bg["matr"] = dark_bg
bg["inv"] = dark_bg
end
crafting.set_creative_formspec = function(player, start_i, pagenum, show, page, scroll)
reset_menu_item_bg()
pagenum = math.floor(pagenum) or 1
local pagemax = math.floor((crafting.creative_inventory_size) / (9*5) + 1)
local slider_height = 4/pagemax
local slider_pos = slider_height*(pagenum-1)+2.25
local player_name = player:get_player_name()
crafting.start_is[player_name] = start_i
crafting.pages[player_name] = page
local formspec = ""
local main_list = "list[detached:creative;main;0,1.75;9,5;"..tostring(start_i).."]"
local name = "nix"
if page ~= nil then name = page end
bg[name] = "crafting_creative_bg.png"
if name == "inv" then
main_list = "image[-0.2,1.7;11.35,2.33;crafting_creative_bg.png]"..
"image[-0.3,0.15;3,4;crafting_inventory_armor2.png]"..
"list[current_player;main;0,3.75;9,3;9]"..
"list[detached:"..player_name.."_armor;armor;0,1.55;1,1;]"..
"list[detached:"..player_name.."_armor;armor;0,2.55;1,1;1]"..
"list[detached:"..player_name.."_armor;armor;1,1.55;1,1;2]"..
"list[detached:"..player_name.."_armor;armor;1,2.55;1,1;3]"
end
formspec = "size[10,9.3]"..
"background[-0.19,-0.25;10.5,9.87;crafting_inventory_creative.png]"..
"bgcolor[#080808BB;true]"..
"listcolors[#9990;#FFF7;#FFF0;#160816;#D4D2FF]"..
"label[-5,-5;"..name.."]"..
"image[" .. offset[name] .. ";1.5,1.44;crafting_creative_active.png"..hoch[name].."]"..
"image_button[-0.1,0;1,1;"..bg["blocks"].."^crafting_creative_build.png;build;]".. --build blocks
"image_button[1.15,0;1,1;"..bg["deco"].."^crafting_creative_deko.png;deco;]".. --decoration blocks
"image_button[2.415,0;1,1;"..bg["mese"].."^crafting_creative_mese.png;mese;]".. --redstone
"image_button[3.693,0;1,1;"..bg["rail"].."^crafting_creative_rail.png;rail;]".. --transportation
"image_button[4.93,0;1,1;"..bg["misc"].."^crafting_creative_misc.png;misc;]".. --miscellaneous
"image_button[9.19,0;1,1;"..bg["nix"].."^crafting_creative_all.png;default;]".. --search
"image[0,1;5,0.75;fnt_"..name..".png]"..
"list[current_player;main;0,7;9,1;]"..
main_list..
"image_button[9.03,1.74;0.85,0.6;crafting_creative_up.png;creative_prev;]"..
"image_button[9.03,6.15;0.85,0.6;crafting_creative_down.png;creative_next;]"..
"image_button[-0.1,8.28;1,1;"..bg["food"].."^crafting_food.png;food;]".. --foodstuff
"image_button[1.15,8.28;1,1;"..bg["tools"].."^crafting_creative_tool.png;tools;]".. --tools
"image_button[2.415,8.28;1,1;"..bg["combat"].."^crafting_creative_sword.png;combat;]".. --combat
"image_button[3.693,8.28;1,1;"..bg["matr"].."^crafting_creative_matr.png;matr;]".. --brewing
"image_button[4.93,8.28;1,1;"..bg["brew"].."^crafting_inventory_brew.png;brew;]".. --materials^
"image_button[9.19,8.28;1,1;"..bg["inv"].."^crafting_creative_inv.png;inv;]".. --inventory
"list[detached:creative_trash;main;9,7;1,1;]"..
"image[9,7;1,1;crafting_creative_trash.png]"..
"image[9.04," .. tostring(slider_pos) .. ";0.75,"..tostring(slider_height) .. ";crafting_slider.png]"
if name == "nix" then formspec = formspec .. "field[5.3,1.3;4,0.75;suche;;]" end
if pagenum ~= nil then formspec = formspec .. "p"..tostring(pagenum) end
player:set_inventory_formspec(formspec)
end
multicraft.register_on_player_receive_fields(function(player, formname, fields)
local page = nil
if not multicraft.setting_getbool("creative_mode") then
return
end
if fields.bgcolor then
-- multicraft.chat_send_all("jupp")
end
if fields.suche ~= nil and fields.suche ~= "" then
set_inv(string.lower(fields.suche))
multicraft.after(0, function()
multicraft.show_formspec(player:get_player_name(), "detached:creative", player:get_inventory_formspec())
end)
end
if fields.build then
set_inv("#blocks",player)
page = "blocks"
end
if fields.deco then
set_inv("#deco",player)
page = "deco"
end
if fields.mese then
set_inv("#mese",player)
page = "mese"
end
if fields.rail then
set_inv("#rail",player)
page = "rail"
end
if fields.misc then
set_inv("#misc",player)
page = "misc"
end
if fields.default then
set_inv("all")
page = 'nix'
end
if fields.food then
set_inv("#food")
page = "food"
end
if fields.tools then
set_inv("#tools")
page = "tools"
end
if fields.combat then
set_inv("#combat")
page = "combat"
end
if fields.matr then
set_inv("#matr")
page = "matr"
end
if fields.inv then
page = "inv"
end
if fields.brew then
set_inv("#brew")
page = "brew"
end
-- Figure out current page from formspec
local current_page = 0
local formspec = player:get_inventory_formspec()
local size = string.len(formspec)
local marker = string.sub(formspec,size-1)
marker = string.sub(marker,1,1)
local player_name = player:get_player_name()
local start_i = crafting.start_is[player_name]
if not page then page = crafting.pages[player_name] end
if page ~= crafting.pages[player_name] then
start_i = 0
end
--if marker ~= nil and marker == "p" then
--local ppage = string.sub(formspec,size)
-- print('ppage ' .. (ppage or 'nope'))
--multicraft.chat_send_all(page)
--start_i = ppage - 1
--end
--start_i = tonumber(start_i) or 0
if fields.creative_prev then
start_i = start_i - 9*5
end
if fields.creative_next
and start_i + 9*5 <= crafting.creative_inventory_size+1 then
start_i = start_i + 9*5
end
if start_i < 0 then
start_i = 0
end
crafting.set_creative_formspec(player, start_i, start_i/(9*5) +1, false, page)
end)
if multicraft.setting_getbool("creative_mode") then
multicraft.register_item(":", {
type = "none",
wield_image = "wieldhand.png",
wield_scale = {x=1,y=1,z=2.5},
tool_capabilities = {
full_punch_interval = 0.5,
max_drop_level = 3,
groupcaps = {
crumbly = {times={[1]=0.5, [2]=0.5, [3]=0.5}, uses=0, maxlevel=3},
cracky = {times={[1]=0.5, [2]=0.5, [3]=0.5}, uses=0, maxlevel=3},
snappy = {times={[1]=0.5, [2]=0.5, [3]=0.5}, uses=0, maxlevel=3},
choppy = {times={[1]=0.5, [2]=0.5, [3]=0.5}, uses=0, maxlevel=3},
oddly_breakable_by_hand = {times={[1]=0.5, [2]=0.5, [3]=0.5}, uses=0, maxlevel=3},
}
}
})
multicraft.register_on_placenode(function(pos, newnode, placer, oldnode, itemstack)
return true
end)
function multicraft.handle_node_drops(pos, drops, digger)
if not digger or not digger:is_player() then
return
end
local inv = digger:get_inventory()
if inv then
for _,item in ipairs(drops) do
item = ItemStack(item):get_name()
if not inv:contains_item("main", item) then
inv:add_item("main", item)
end
end
end
end
end

View File

@ -1,79 +1,79 @@
default.furnace_inactive_formspec =
"size[9,8.75]"..
"background[-0.19,-0.25;9.41,9.49;crafting_formspec_bg.png^crafting_inventory_furnace.png]"..
"bgcolor[#080808BB;true]"..
"listcolors[#9990;#FFF7;#FFF0;#160816;#D4D2FF]"..
"list[current_player;main;0,4.5;9,3;9]"..
"list[current_player;main;0,7.74;9,1;]"..
"list[current_name;src;2.75,0.5;1,1;]"..
"list[current_name;fuel;2.75,2.5;1,1;]"..
"list[current_name;dst;5.75,1.5;1,1;]"..
"image[2.75,1.5;1,1;crafting_furnace_fire_bg.png"
function default.get_furnace_active_formspec(pos, percent)
local formspec =
"size[9,8.75]"..
"background[-0.19,-0.25;9.41,9.49;crafting_formspec_bg.png^crafting_inventory_furnace.png]"..
"bgcolor[#080808BB;true]"..
"listcolors[#9990;#FFF7;#FFF0;#160816;#D4D2FF]"..
"list[current_player;main;0,4.5;9,3;9]"..
"list[current_player;main;0,7.74;9,1;]"..
"list[current_name;src;2.75,0.5;1,1;]"..
"list[current_name;fuel;2.75,2.5;1,1;]"..
"list[current_name;dst;5.75,1.5;1,1;]"..
"image[2.75,1.5;1,1;crafting_furnace_fire_bg.png^[lowpart:"..
(100-percent)..":default_furnace_fire_fg.png]"
local meta = multicraft.get_meta(pos)
local inv = meta:get_inventory()
inv:set_size("dst",1)
return formspec
end
default.chest_formspec =
"size[9,9.75]"..
"background[-0.19,-0.25;9.41,10.48;crafting_inventory_chest.png]"..
"bgcolor[#080808BB;true]"..
"listcolors[#9990;#FFF7;#FFF0;#160816;#D4D2FF]"..
"list[current_name;main;0,0.5;9,4;]"..
"list[current_player;main;0,5.5;9,3;9]"..
"list[current_player;main;0,8.74;9,1;]"
local chest_inv_size = 4*9
local chest_inv_vers = 2
function default.get_locked_chest_formspec(pos)
local meta = multicraft.get_meta(pos)
local inv_v = meta:get_int("chest_inv_ver")
if inv_v and inv_v < chest_inv_vers then
local inv = meta:get_inventory()
inv:set_size("main",chest_inv_size)
meta:set_int("chest_inv_ver",chest_inv_vers)
end
local spos = pos.x .. "," .. pos.y .. "," ..pos.z
local formspec =
"size[9,9.75]"..
"background[-0.19,-0.25;9.41,10.48;crafting_inventory_chest.png]"..
"bgcolor[#080808BB;true]"..
"listcolors[#9990;#FFF7;#FFF0;#160816;#D4D2FF]"..
"list[nodemeta:".. spos .. ";main;0,0.5;9,4;]"..
"list[current_player;main;0,5.5;9,3;9]"..
"list[current_player;main;0,8.74;9,1;]"
return formspec
end
multicraft.register_abm({
nodenames = {"default:chest"},
interval = 1,
chance = 1,
action = function(pos, node)
local meta = multicraft.get_meta(pos)
local inv_v = meta:get_int("chest_inv_ver")
if inv_v and inv_v < chest_inv_vers then
local inv = meta:get_inventory()
inv:set_size("main",chest_inv_size)
meta:set_int("chest_inv_ver",chest_inv_vers)
end
end
})
default.furnace_inactive_formspec =
"size[9,8.75]"..
"background[-0.19,-0.25;9.41,9.49;crafting_formspec_bg.png^crafting_inventory_furnace.png]"..
"bgcolor[#080808BB;true]"..
"listcolors[#9990;#FFF7;#FFF0;#160816;#D4D2FF]"..
"list[current_player;main;0,4.5;9,3;9]"..
"list[current_player;main;0,7.74;9,1;]"..
"list[current_name;src;2.75,0.5;1,1;]"..
"list[current_name;fuel;2.75,2.5;1,1;]"..
"list[current_name;dst;5.75,1.5;1,1;]"..
"image[2.75,1.5;1,1;crafting_furnace_fire_bg.png"
function default.get_furnace_active_formspec(pos, percent)
local formspec =
"size[9,8.75]"..
"background[-0.19,-0.25;9.41,9.49;crafting_formspec_bg.png^crafting_inventory_furnace.png]"..
"bgcolor[#080808BB;true]"..
"listcolors[#9990;#FFF7;#FFF0;#160816;#D4D2FF]"..
"list[current_player;main;0,4.5;9,3;9]"..
"list[current_player;main;0,7.74;9,1;]"..
"list[current_name;src;2.75,0.5;1,1;]"..
"list[current_name;fuel;2.75,2.5;1,1;]"..
"list[current_name;dst;5.75,1.5;1,1;]"..
"image[2.75,1.5;1,1;crafting_furnace_fire_bg.png^[lowpart:"..
(100-percent)..":default_furnace_fire_fg.png]"
local meta = multicraft.get_meta(pos)
local inv = meta:get_inventory()
inv:set_size("dst",1)
return formspec
end
default.chest_formspec =
"size[9,9.75]"..
"background[-0.19,-0.25;9.41,10.48;crafting_inventory_chest.png]"..
"bgcolor[#080808BB;true]"..
"listcolors[#9990;#FFF7;#FFF0;#160816;#D4D2FF]"..
"list[current_name;main;0,0.5;9,4;]"..
"list[current_player;main;0,5.5;9,3;9]"..
"list[current_player;main;0,8.74;9,1;]"
local chest_inv_size = 4*9
local chest_inv_vers = 2
function default.get_locked_chest_formspec(pos)
local meta = multicraft.get_meta(pos)
local inv_v = meta:get_int("chest_inv_ver")
if inv_v and inv_v < chest_inv_vers then
local inv = meta:get_inventory()
inv:set_size("main",chest_inv_size)
meta:set_int("chest_inv_ver",chest_inv_vers)
end
local spos = pos.x .. "," .. pos.y .. "," ..pos.z
local formspec =
"size[9,9.75]"..
"background[-0.19,-0.25;9.41,10.48;crafting_inventory_chest.png]"..
"bgcolor[#080808BB;true]"..
"listcolors[#9990;#FFF7;#FFF0;#160816;#D4D2FF]"..
"list[nodemeta:".. spos .. ";main;0,0.5;9,4;]"..
"list[current_player;main;0,5.5;9,3;9]"..
"list[current_player;main;0,8.74;9,1;]"
return formspec
end
multicraft.register_abm({
nodenames = {"default:chest"},
interval = 1,
chance = 1,
action = function(pos, node)
local meta = multicraft.get_meta(pos)
local inv_v = meta:get_int("chest_inv_ver")
if inv_v and inv_v < chest_inv_vers then
local inv = meta:get_inventory()
inv:set_size("main",chest_inv_size)
meta:set_int("chest_inv_ver",chest_inv_vers)
end
end
})

View File

@ -1,198 +1,198 @@
if not multicraft.get_modpath("check") then os.exit() end
if not default.multicraft_is_variable_is_a_part_of_multicraft_subgame_and_copying_it_means_you_use_our_code_so_we_become_contributors_of_your_project then exit() end
dofile(multicraft.get_modpath("crafting").."/formspecs.lua")
local show_armor = false
if multicraft.get_modpath("3d_armor") ~= nil then show_armor = true end
local function item_drop(itemstack, dropper, pos)
if dropper:is_player() then
local v = dropper:get_look_dir()
local p = {x=pos.x, y=pos.y+1.2, z=pos.z}
p.x = p.x+(math.random(1,3)*0.2)
p.z = p.z+(math.random(1,3)*0.2)
local obj = multicraft.add_item(p, itemstack)
if obj then
v.x = v.x*4
v.y = v.y*4 + 2
v.z = v.z*4
obj:setvelocity(v)
end
else
multicraft.add_item(pos, itemstack)
end
return itemstack
end
local function drop_fields(player, name)
local inv = player:get_inventory()
for i,stack in ipairs(inv:get_list(name)) do
item_drop(stack, player, player:getpos())
stack:clear()
inv:set_stack(name, i, stack)
end
end
local player_armor = {}
local function update_armor(player)
local out = ""
if not player then return end
local name = player:get_player_name()
if not armor or not armor.textures then return end
local armor_str = armor.textures[name].armor
if string.find(armor_str, "leggings") then
out = out .. "^crafting_armor_legs.png"
end
if string.find(armor_str, "boots") then
out = out .. "^crafting_armor_boots.png"
end
if string.find(armor_str, "helmet") then
out = out .. "^crafting_armor_helmet.png"
end
if string.find(armor_str, "chestplate") then
out = out .. "^crafting_armor_chest.png"
end
player_armor[name] = out
end
local function set_inventory(player)
if multicraft.setting_getbool("creative_mode") then
multicraft.after(0.5,function()
crafting.set_creative_formspec(player, 0, 1)
return
end)
end
player:get_inventory():set_width("craft", 3)
player:get_inventory():set_size("craft", 9)
player:get_inventory():set_size("main", 9*4)
local player_name = player:get_player_name()
local img = "crafting_inventory_player.png"
local armor_img = ""
if show_armor then
armor_img = "^crafting_inventory_armor.png"
if player_armor[player_name] ~= nil then
img = img .. player_armor[player_name]
end
end
local img_element = "image[1,0;3,4;"..img.."]"
if show_armor and armor.textures[player_name] and armor.textures[player_name].preview then
img = armor.textures[player_name].preview
local s1 = img:find("character_preview")
if s1 ~= nil then
s1 = img:sub(s1+21)
img = "crafting_player2d.png"..s1
end
img_element = "image[1.5,0;2,4;"..img.."]"
end
local form = "size[9,8.75]"..
"background[-0.19,-0.25;9.41,9.49;crafting_formspec_bg.png^crafting_inventory.png"..armor_img.."]"..
"bgcolor[#080808BB;true]"..
"listcolors[#9990;#FFF7;#FFF0;#160816;#D4D2FF]"..
img_element
--armor
if show_armor then
if armor.def[player_name] and armor.def[player_name].level then
form = form ..
"list[detached:"..player_name.."_armor;armor;0,0;1,1;]"..
"list[detached:"..player_name.."_armor;armor;0,1;1,1;1]"..
"list[detached:"..player_name.."_armor;armor;0,2;1,1;2]"..
"list[detached:"..player_name.."_armor;armor;0,3;1,1;3]"
else
form = form ..
"list[detached:"..player_name.."_armor;armor_head;0,0;1,1;]"..
"list[detached:"..player_name.."_armor;armor_torso;0,1;1,1;1]"..
"list[detached:"..player_name.."_armor;armor_legs;0,2;1,1;2]"..
"list[detached:"..player_name.."_armor;armor_feet;0,3;1,1;3]"
end
end
form = form ..
"list[current_player;main;0,4.5;9,3;9]"..
"list[current_player;main;0,7.74;9,1;]"..
"list[current_player;craft;4,1;2,1;1]"..
"list[current_player;craft;4,2;2,1;4]"..
"list[current_player;craftpreview;7,1.5;1,1;]"..
"inv"
player:set_inventory_formspec(form)
end
local function set_workbench(player)
player:get_inventory():set_width("craft", 3)
player:get_inventory():set_size("craft", 9)
player:get_inventory():set_size("main", 9*4)
local form = "size[9,8.75]"..
"background[-0.19,-0.25;9.41,9.49;crafting_formspec_bg.png^crafting_inventory_workbench.png]"..
"bgcolor[#080808BB;true]"..
"listcolors[#9990;#FFF7;#FFF0;#160816;#D4D2FF]"..
"list[current_player;main;0,4.5;9,3;9]"..
"list[current_player;main;0,7.74;9,1;]"..
"list[current_player;craft;1.75,0.5;3,3;]"..
"list[current_player;craftpreview;5.75,1.5;1,1;]"..
"wob"
--player:set_inventory_formspec(form)
multicraft.show_formspec(player:get_player_name(), "main", form)
end
--drop craf items and reset inventory on closing
multicraft.register_on_player_receive_fields(function(player, formname, fields)
if fields.quit then
local formspec = player:get_inventory_formspec()
local size = string.len(formspec)
local marker = string.sub(formspec,size-2)
if marker == "inv" or marker == "wob" then
set_inventory(player)
drop_fields(player,"craft")
end
end
end)
multicraft.register_on_joinplayer(function(player)
if multicraft.setting_getbool("creative_mode") then
dofile(multicraft.get_modpath("crafting").."/creative.lua")
end
--init inventory
set_inventory(player)
--set hotbar size
if player.hud_set_hotbar_itemcount then
multicraft.after(0.5, player.hud_set_hotbar_itemcount, player, 8)
end
--add hotbar images
multicraft.after(0.5,function()
player:hud_set_hotbar_image("crafting_hotbar.png")
player:hud_set_hotbar_selected_image("crafting_hotbar_selected.png")
if show_armor then
local armor_orginal = armor.set_player_armor
armor.set_player_armor = function(self, player)
armor_orginal(self, player)
update_armor(player)
-- set_inventory(player)
end
end
end)
end)
multicraft.register_node("crafting:workbench", {
description = "Workbench",
tiles = {"crafting_workbench_top.png", "default_wood.png", "crafting_workbench_side.png",
"crafting_workbench_side.png", "crafting_workbench_front.png", "crafting_workbench_front.png"},
paramtype2 = "facedir",
paramtype = "light",
groups = {choppy=2,oddly_breakable_by_hand=2,flammable=2, decorative = 1},
on_rightclick = function(pos, node, clicker, itemstack)
set_workbench(clicker)
end
})
multicraft.register_craft({
output = "crafting:workbench",
recipe = {
{"group:wood", "group:wood"},
{"group:wood", "group:wood"}
}
})
if not multicraft.get_modpath("check") then os.exit() end
if not default.multicraft_is_variable_is_a_part_of_multicraft_subgame_and_copying_it_means_you_use_our_code_so_we_become_contributors_of_your_project then exit() end
dofile(multicraft.get_modpath("crafting").."/formspecs.lua")
local show_armor = false
if multicraft.get_modpath("3d_armor") ~= nil then show_armor = true end
local function item_drop(itemstack, dropper, pos)
if dropper:is_player() then
local v = dropper:get_look_dir()
local p = {x=pos.x, y=pos.y+1.2, z=pos.z}
p.x = p.x+(math.random(1,3)*0.2)
p.z = p.z+(math.random(1,3)*0.2)
local obj = multicraft.add_item(p, itemstack)
if obj then
v.x = v.x*4
v.y = v.y*4 + 2
v.z = v.z*4
obj:setvelocity(v)
end
else
multicraft.add_item(pos, itemstack)
end
return itemstack
end
local function drop_fields(player, name)
local inv = player:get_inventory()
for i,stack in ipairs(inv:get_list(name)) do
item_drop(stack, player, player:getpos())
stack:clear()
inv:set_stack(name, i, stack)
end
end
local player_armor = {}
local function update_armor(player)
local out = ""
if not player then return end
local name = player:get_player_name()
if not armor or not armor.textures then return end
local armor_str = armor.textures[name].armor
if string.find(armor_str, "leggings") then
out = out .. "^crafting_armor_legs.png"
end
if string.find(armor_str, "boots") then
out = out .. "^crafting_armor_boots.png"
end
if string.find(armor_str, "helmet") then
out = out .. "^crafting_armor_helmet.png"
end
if string.find(armor_str, "chestplate") then
out = out .. "^crafting_armor_chest.png"
end
player_armor[name] = out
end
local function set_inventory(player)
if multicraft.setting_getbool("creative_mode") then
multicraft.after(0.5,function()
crafting.set_creative_formspec(player, 0, 1)
return
end)
end
player:get_inventory():set_width("craft", 3)
player:get_inventory():set_size("craft", 9)
player:get_inventory():set_size("main", 9*4)
local player_name = player:get_player_name()
local img = "crafting_inventory_player.png"
local armor_img = ""
if show_armor then
armor_img = "^crafting_inventory_armor.png"
if player_armor[player_name] ~= nil then
img = img .. player_armor[player_name]
end
end
local img_element = "image[1,0;3,4;"..img.."]"
if show_armor and armor.textures[player_name] and armor.textures[player_name].preview then
img = armor.textures[player_name].preview
local s1 = img:find("character_preview")
if s1 ~= nil then
s1 = img:sub(s1+21)
img = "crafting_player2d.png"..s1
end
img_element = "image[1.5,0;2,4;"..img.."]"
end
local form = "size[9,8.75]"..
"background[-0.19,-0.25;9.41,9.49;crafting_formspec_bg.png^crafting_inventory.png"..armor_img.."]"..
"bgcolor[#080808BB;true]"..
"listcolors[#9990;#FFF7;#FFF0;#160816;#D4D2FF]"..
img_element
--armor
if show_armor then
if armor.def[player_name] and armor.def[player_name].level then
form = form ..
"list[detached:"..player_name.."_armor;armor;0,0;1,1;]"..
"list[detached:"..player_name.."_armor;armor;0,1;1,1;1]"..
"list[detached:"..player_name.."_armor;armor;0,2;1,1;2]"..
"list[detached:"..player_name.."_armor;armor;0,3;1,1;3]"
else
form = form ..
"list[detached:"..player_name.."_armor;armor_head;0,0;1,1;]"..
"list[detached:"..player_name.."_armor;armor_torso;0,1;1,1;1]"..
"list[detached:"..player_name.."_armor;armor_legs;0,2;1,1;2]"..
"list[detached:"..player_name.."_armor;armor_feet;0,3;1,1;3]"
end
end
form = form ..
"list[current_player;main;0,4.5;9,3;9]"..
"list[current_player;main;0,7.74;9,1;]"..
"list[current_player;craft;4,1;2,1;1]"..
"list[current_player;craft;4,2;2,1;4]"..
"list[current_player;craftpreview;7,1.5;1,1;]"..
"inv"
player:set_inventory_formspec(form)
end
local function set_workbench(player)
player:get_inventory():set_width("craft", 3)
player:get_inventory():set_size("craft", 9)
player:get_inventory():set_size("main", 9*4)
local form = "size[9,8.75]"..
"background[-0.19,-0.25;9.41,9.49;crafting_formspec_bg.png^crafting_inventory_workbench.png]"..
"bgcolor[#080808BB;true]"..
"listcolors[#9990;#FFF7;#FFF0;#160816;#D4D2FF]"..
"list[current_player;main;0,4.5;9,3;9]"..
"list[current_player;main;0,7.74;9,1;]"..
"list[current_player;craft;1.75,0.5;3,3;]"..
"list[current_player;craftpreview;5.75,1.5;1,1;]"..
"wob"
--player:set_inventory_formspec(form)
multicraft.show_formspec(player:get_player_name(), "main", form)
end
--drop craf items and reset inventory on closing
multicraft.register_on_player_receive_fields(function(player, formname, fields)
if fields.quit then
local formspec = player:get_inventory_formspec()
local size = string.len(formspec)
local marker = string.sub(formspec,size-2)
if marker == "inv" or marker == "wob" then
set_inventory(player)
drop_fields(player,"craft")
end
end
end)
multicraft.register_on_joinplayer(function(player)
if multicraft.setting_getbool("creative_mode") then
dofile(multicraft.get_modpath("crafting").."/creative.lua")
end
--init inventory
set_inventory(player)
--set hotbar size
if player.hud_set_hotbar_itemcount then
multicraft.after(0.5, player.hud_set_hotbar_itemcount, player, 8)
end
--add hotbar images
multicraft.after(0.5,function()
player:hud_set_hotbar_image("crafting_hotbar.png")
player:hud_set_hotbar_selected_image("crafting_hotbar_selected.png")
if show_armor then
local armor_orginal = armor.set_player_armor
armor.set_player_armor = function(self, player)
armor_orginal(self, player)
update_armor(player)
-- set_inventory(player)
end
end
end)
end)
multicraft.register_node("crafting:workbench", {
description = "Workbench",
tiles = {"crafting_workbench_top.png", "default_wood.png", "crafting_workbench_side.png",
"crafting_workbench_side.png", "crafting_workbench_front.png", "crafting_workbench_front.png"},
paramtype2 = "facedir",
paramtype = "light",
groups = {choppy=2,oddly_breakable_by_hand=2,flammable=2, decorative = 1},
on_rightclick = function(pos, node, clicker, itemstack)
set_workbench(clicker)
end
})
multicraft.register_craft({
output = "crafting:workbench",
recipe = {
{"group:wood", "group:wood"},
{"group:wood", "group:wood"}
}
})

View File

@ -1,11 +1,11 @@
if not multicraft.get_modpath("check") then os.exit() end
if not default.multicraft_is_variable_is_a_part_of_multicraft_subgame_and_copying_it_means_you_use_our_code_so_we_become_contributors_of_your_project then exit() end
creative = {}
creative.set_creative_formspec = function()
end
multicraft.register_on_player_receive_fields(function(player, formname, fields)
if not multicraft.get_modpath("check") then os.exit() end
if not default.multicraft_is_variable_is_a_part_of_multicraft_subgame_and_copying_it_means_you_use_our_code_so_we_become_contributors_of_your_project then exit() end
creative = {}
creative.set_creative_formspec = function()
end
multicraft.register_on_player_receive_fields(function(player, formname, fields)
end)

View File

@ -1,9 +1,9 @@
if not multicraft.get_modpath("check") then os.exit() end
if not default.multicraft_is_variable_is_a_part_of_multicraft_subgame_and_copying_it_means_you_use_our_code_so_we_become_contributors_of_your_project then exit() end
inventory_plus = {}
function inventory_plus.set_inventory_formspec(player, formspec)
end
function inventory_plus.register_button(player,str1, str2)
if not multicraft.get_modpath("check") then os.exit() end
if not default.multicraft_is_variable_is_a_part_of_multicraft_subgame_and_copying_it_means_you_use_our_code_so_we_become_contributors_of_your_project then exit() end
inventory_plus = {}
function inventory_plus.set_inventory_formspec(player, formspec)
end
function inventory_plus.register_button(player,str1, str2)
end

View File

@ -1,19 +1,19 @@
if not multicraft.get_modpath("check") then os.exit() end
if not default.multicraft_is_variable_is_a_part_of_multicraft_subgame_and_copying_it_means_you_use_our_code_so_we_become_contributors_of_your_project then exit() end
--if multicraft.setting_get("keepInventory") == false then
multicraft.register_on_dieplayer(function(player)
local inv = player:get_inventory()
local pos = player:getpos()
for i,stack in ipairs(inv:get_list("main")) do
local x = math.random(0, 9)/3
local z = math.random(0, 9)/3
pos.x = pos.x + x
pos.z = pos.z + z
multicraft.add_item(pos, stack)
stack:clear()
inv:set_stack("main", i, stack)
pos.x = pos.x - x
pos.z = pos.z - z
end
end)
if not multicraft.get_modpath("check") then os.exit() end
if not default.multicraft_is_variable_is_a_part_of_multicraft_subgame_and_copying_it_means_you_use_our_code_so_we_become_contributors_of_your_project then exit() end
--if multicraft.setting_get("keepInventory") == false then
multicraft.register_on_dieplayer(function(player)
local inv = player:get_inventory()
local pos = player:getpos()
for i,stack in ipairs(inv:get_list("main")) do
local x = math.random(0, 9)/3
local z = math.random(0, 9)/3
pos.x = pos.x + x
pos.z = pos.z + z
multicraft.add_item(pos, stack)
stack:clear()
inv:set_stack("main", i, stack)
pos.x = pos.x - x
pos.z = pos.z - z
end
end)
--end

View File

Before

Width:  |  Height:  |  Size: 1.0 KiB

After

Width:  |  Height:  |  Size: 1.0 KiB

View File

Before

Width:  |  Height:  |  Size: 1.2 KiB

After

Width:  |  Height:  |  Size: 1.2 KiB

View File

Before

Width:  |  Height:  |  Size: 5.4 KiB

After

Width:  |  Height:  |  Size: 5.4 KiB

Some files were not shown because too many files have changed in this diff Show More