Skip to content
GitLab
Explore
Sign in
Primary navigation
Search or go to…
Project
M
minetest_game
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Wiki
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Build
Pipelines
Jobs
Pipeline schedules
Artifacts
Deploy
Releases
Model registry
Operate
Environments
Monitor
Incidents
Service Desk
Analyze
Value stream analytics
Contributor analytics
CI/CD analytics
Repository analytics
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
Illuna-Minetest
minetest_game
Commits
a29819eb
Commit
a29819eb
authored
12 years ago
by
Perttu Ahola
Browse files
Options
Downloads
Patches
Plain Diff
Add creative mode inventory as a mod
parent
6de625c6
No related branches found
Branches containing commit
No related tags found
Tags containing commit
No related merge requests found
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
mods/creative_inventory/README.txt
+22
-0
22 additions, 0 deletions
mods/creative_inventory/README.txt
mods/creative_inventory/init.lua
+112
-0
112 additions, 0 deletions
mods/creative_inventory/init.lua
with
134 additions
and
0 deletions
mods/creative_inventory/README.txt
0 → 100644
+
22
−
0
View file @
a29819eb
Minetest 0.4 mod: creative
==========================
Implements creative mode.
Switch on by using the "creative_mode" setting.
Registered items that
- have a description, and
- do not have the group not_in_creative_inventory
are added to the creative inventory.
License of source code and media files:
---------------------------------------
Copyright (C) 2012 Perttu Ahola (celeron55) <celeron55@gmail.com>
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.
This diff is collapsed.
Click to expand it.
mods/creative_inventory/init.lua
0 → 100644
+
112
−
0
View file @
a29819eb
-- minetest/creative/init.lua
local
creative_inventory
=
{}
-- Create detached creative inventory after loading all mods
minetest
.
after
(
0
,
function
()
local
inv
=
minetest
.
create_detached_inventory
(
"creative"
,
{
allow_move
=
function
(
inv
,
from_list
,
from_index
,
to_list
,
to_index
,
count
,
player
)
if
minetest
.
setting_getbool
(
"creative_mode"
)
then
return
count
else
return
0
end
end
,
allow_put
=
function
(
inv
,
listname
,
index
,
stack
,
player
)
if
minetest
.
setting_getbool
(
"creative_mode"
)
then
return
-
1
else
return
0
end
end
,
allow_take
=
function
(
inv
,
listname
,
index
,
stack
,
player
)
if
minetest
.
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
,
})
local
creative_list
=
{}
for
name
,
def
in
pairs
(
minetest
.
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
table.insert
(
creative_list
,
name
)
end
end
table.sort
(
creative_list
)
inv
:
set_size
(
"main"
,
#
creative_list
)
for
_
,
itemstring
in
ipairs
(
creative_list
)
do
local
stack
=
ItemStack
(
itemstring
)
-- Make a stack of the right number of items
local
stack2
=
nil
if
stack
:
get_stack_max
()
==
1
then
stack2
=
ItemStack
(
stack
:
get_name
())
else
-- Insert half full so that a taken stack can be put back
stack2
=
ItemStack
(
stack
:
get_name
()
..
" "
..
(
stack
:
get_stack_max
()
/
2
))
end
inv
:
add_item
(
"main"
,
stack2
)
end
creative_inventory
.
creative_inventory_size
=
#
creative_list
print
(
"creative inventory size: "
..
dump
(
creative_inventory
.
creative_inventory_size
))
end
)
creative_inventory
.
set_creative_formspec
=
function
(
player
,
start_i
)
player
:
set_inventory_formspec
(
"size[13,7.5]"
..
--"image[6,0.6;1,2;player.png]"..
"list[current_player;main;5,3.5;8,4;]"
..
"list[current_player;craft;8,0;3,3;]"
..
"list[current_player;craftpreview;12,1;1,1;]"
..
"list[detached:creative;main;0.3,0.5;4,6;"
..
tostring
(
start_i
)
..
"]"
..
"button[0.3,6.5;1.9,1;creative_prev;<<]"
..
"button[2.4,6.5;1.9,1;creative_next;>>]"
)
end
minetest
.
register_on_joinplayer
(
function
(
player
)
-- If in creative mode, modify player's inventory forms
if
not
minetest
.
setting_getbool
(
"creative_mode"
)
then
return
end
creative_inventory
.
set_creative_formspec
(
player
,
0
)
end
)
minetest
.
register_on_player_receive_fields
(
function
(
player
,
formname
,
fields
)
if
not
minetest
.
setting_getbool
(
"creative_mode"
)
then
return
end
-- Figure out current page from formspec
local
current_page
=
0
local
formspec
=
player
:
get_inventory_formspec
()
local
start_i
=
string.match
(
formspec
,
"list%[detached:creative;main;[%d.]+,[%d.]+;[%d.]+,[%d.]+;(%d+)%]"
)
start_i
=
tonumber
(
start_i
)
or
0
if
fields
.
creative_prev
then
start_i
=
start_i
-
4
*
6
end
if
fields
.
creative_next
then
start_i
=
start_i
+
4
*
6
end
if
start_i
<
0
then
start_i
=
start_i
+
4
*
6
end
if
start_i
>=
creative_inventory
.
creative_inventory_size
then
start_i
=
start_i
-
4
*
6
end
if
start_i
<
0
or
start_i
>=
creative_inventory
.
creative_inventory_size
then
start_i
=
0
end
creative_inventory
.
set_creative_formspec
(
player
,
start_i
)
end
)
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment