Initial commit.

master
Robert Zenz 2015-11-07 19:32:49 +01:00
commit 664b7c0af0
12 changed files with 802 additions and 0 deletions

3
.gitmodules vendored Normal file
View File

@ -0,0 +1,3 @@
[submodule "deps/minetest-australopithecus-worldgen-utils"]
path = deps/minetest-australopithecus-worldgen-utils
url = https://github.com/minetest-australopithecus/minetest-australopithecus-worldgen-utils.git

24
LICENSE Normal file
View File

@ -0,0 +1,24 @@
Copyright (c) 2014, Robert 'Bobby' Zenz
All rights reserved.
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met:
* Redistributions of source code must retain the above copyright notice, this
list of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright notice,
this list of conditions and the following disclaimer in the documentation
and/or other materials provided with the distribution.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

43
Makefile Normal file
View File

@ -0,0 +1,43 @@
deps := deps
doc := doc
mod_name := auto_drops
mods := mods
release := release
release_name := auto-drops
all: doc
clean:
$(RM) -R $(doc)
.PHONY: doc
doc:
ldoc --dir=$(doc) mods/$(mod_name)
.PHONY: release
release:
# Prepare the directory structure.
mkdir -p $(release)/
mkdir -p $(release)/$(release_name)/
mkdir -p $(release)/$(release_name)/mods/
# Copy the dependencies.
cp -R $(deps)/utils/utils $(release)/$(release_name)/mods/
# Copy the mods.
cp -R $(mods)/$(mod_name) $(release)/$(release_name)/mods/
# Copy the files.
cp LICENSE $(release)/$(release_name)/
cp README $(release)/$(release_name)/
tar -c --xz -C $(release) -f $(release)/$(release_name).tar.xz $(release_name)/
tar -c --gz -C $(release) -f $(release)/$(release_name).tar.gz $(release_name)/
cd $(release); zip -r -9 $(release_name).zip $(release_name); cd -
.PHONY: update-deps
update-deps:
git submodule foreach git pull origin master
git add $(deps)/
git commit -m "Updated dependencies."

27
README Normal file
View File

@ -0,0 +1,27 @@
minetest-australopithecus-auto-drops
====================================
A system which drops all drops from a dug node as items.
Usage
=====
The system activates itself, you just need to add the mod to the subgame.
Configuration
=============
The system can be configured by adding settings to the `minetest.conf`:
# If the system should be activated, defaults to true.
autodrops_activate = true.
# If the stacks that are split in some way, defaults to single.
# Possible values are:
# random: The dropped stacks are split randomly.
# single: The dropped stacks are split into every single item.
# stack: The dropped stacks are dropped as they are.
autodrops_split = single

1
README.md Symbolic link
View File

@ -0,0 +1 @@
README

@ -0,0 +1 @@
Subproject commit a00e993a48049840889d1a174699f6486c459709

250
doc/index.html Normal file
View File

@ -0,0 +1,250 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
<head>
<title>Reference</title>
<link rel="stylesheet" href="ldoc.css" type="text/css" />
</head>
<body>
<div id="container">
<div id="product">
<div id="product_logo"></div>
<div id="product_name"><big><b></b></big></div>
<div id="product_description"></div>
</div> <!-- id="product" -->
<div id="main">
<!-- Menu -->
<div id="navigation">
<br/>
<h1>ldoc</h1>
<h2>Contents</h2>
<ul>
<li><a href="#Functions">Functions</a></li>
<li><a href="#Fields">Fields</a></li>
</ul>
<h2>Modules</h2>
<ul class="$(kind=='Topics' and '' or 'nowrap'">
<li><strong>autodrops</strong></li>
</ul>
</div>
<div id="content">
<h1>Module <code>autodrops</code></h1>
<p>Autodrops is a system which enables that drops from nodes become items
which are dropped on the ground, instead of being send directly to
the player inventory.</p>
<p></p>
<h2><a href="#Functions">Functions</a></h2>
<table class="function_list">
<tr>
<td class="name" nowrap><a href="#drop">drop (position, stacks)</a></td>
<td class="summary">Drops the given ItemStacks at the given position, based on the settings.</td>
</tr>
<tr>
<td class="name" nowrap><a href="#drop_random">drop_random (position, stack)</a></td>
<td class="summary">Drops the given stack from the given position by splitting it into random
amounts.</td>
</tr>
<tr>
<td class="name" nowrap><a href="#drop_single">drop_single (position, stack)</a></td>
<td class="summary">Drops the given stack from the given position by splitting it into single
items.</td>
</tr>
<tr>
<td class="name" nowrap><a href="#drop_stack">drop_stack (position, stack)</a></td>
<td class="summary">Drops the given stack from the given position.</td>
</tr>
<tr>
<td class="name" nowrap><a href="#node_drops_handler">node_drops_handler (position, drops, player, handled)</a></td>
<td class="summary">The handler which is registered for handling the node drops.</td>
</tr>
</table>
<h2><a href="#Fields">Fields</a></h2>
<table class="function_list">
<tr>
<td class="name" nowrap><a href="#split">split</a></td>
<td class="summary">The split method that is used.</td>
</tr>
</table>
<br/>
<br/>
<h2><a name="Functions"></a>Functions</h2>
<dl class="function">
<dt>
<a name = "drop"></a>
<strong>drop (position, stacks)</strong>
</dt>
<dd>
Drops the given ItemStacks at the given position, based on the settings.
<h3>Parameters:</h3>
<ul>
<li><span class="parameter">position</span>
The position at which to drop the items.
</li>
<li><span class="parameter">stacks</span>
The array of ItemStacks to drop.
</li>
</ul>
</dd>
<dt>
<a name = "drop_random"></a>
<strong>drop_random (position, stack)</strong>
</dt>
<dd>
Drops the given stack from the given position by splitting it into random
amounts.
<h3>Parameters:</h3>
<ul>
<li><span class="parameter">position</span>
The position at which the items should spawn.
</li>
<li><span class="parameter">stack</span>
The ItemStack to drop.
</li>
</ul>
</dd>
<dt>
<a name = "drop_single"></a>
<strong>drop_single (position, stack)</strong>
</dt>
<dd>
Drops the given stack from the given position by splitting it into single
items.
<h3>Parameters:</h3>
<ul>
<li><span class="parameter">position</span>
The position at which the items should spawn.
</li>
<li><span class="parameter">stack</span>
The ItemStack to drop.
</li>
</ul>
</dd>
<dt>
<a name = "drop_stack"></a>
<strong>drop_stack (position, stack)</strong>
</dt>
<dd>
Drops the given stack from the given position.
<h3>Parameters:</h3>
<ul>
<li><span class="parameter">position</span>
The position at which the items should spawn.
</li>
<li><span class="parameter">stack</span>
The ItemStack to drop.
</li>
</ul>
</dd>
<dt>
<a name = "node_drops_handler"></a>
<strong>node_drops_handler (position, drops, player, handled)</strong>
</dt>
<dd>
The handler which is registered for handling the node drops.
<h3>Parameters:</h3>
<ul>
<li><span class="parameter">position</span>
The position at which the drop occured.
</li>
<li><span class="parameter">drops</span>
The array of ItemStacks which are dropped.
</li>
<li><span class="parameter">player</span>
The player which originated the event.
</li>
<li><span class="parameter">handled</span>
If the event has already been handled or not.
</li>
</ul>
<h3>Returns:</h3>
<ol>
true, because the event has been handled by this function.
</ol>
</dd>
</dl>
<h2><a name="Fields"></a>Fields</h2>
<dl class="function">
<dt>
<a name = "split"></a>
<strong>split</strong>
</dt>
<dd>
The split method that is used. Possible values are "stack", "random"
and "single", defaults to "single". "stack" means that the full stack
as provided is dropped, "random" splits the provided stack randomly and
"single" splits the provided stack into individual items.
</dd>
</dl>
</div> <!-- id="content" -->
</div> <!-- id="main" -->
<div id="about">
<i>generated by <a href="http://github.com/stevedonovan/LDoc">LDoc 1.4.2</a></i>
</div> <!-- id="about" -->
</div> <!-- id="container" -->
</body>
</html>

302
doc/ldoc.css Normal file
View File

@ -0,0 +1,302 @@
/* BEGIN RESET
Copyright (c) 2010, Yahoo! Inc. All rights reserved.
Code licensed under the BSD License:
http://developer.yahoo.com/yui/license.html
version: 2.8.2r1
*/
html {
color: #000;
background: #FFF;
}
body,div,dl,dt,dd,ul,ol,li,h1,h2,h3,h4,h5,h6,pre,code,form,fieldset,legend,input,button,textarea,p,blockquote,th,td {
margin: 0;
padding: 0;
}
table {
border-collapse: collapse;
border-spacing: 0;
}
fieldset,img {
border: 0;
}
address,caption,cite,code,dfn,em,strong,th,var,optgroup {
font-style: inherit;
font-weight: inherit;
}
del,ins {
text-decoration: none;
}
li {
list-style: disc;
margin-left: 20px;
}
caption,th {
text-align: left;
}
h1,h2,h3,h4,h5,h6 {
font-size: 100%;
font-weight: bold;
}
q:before,q:after {
content: '';
}
abbr,acronym {
border: 0;
font-variant: normal;
}
sup {
vertical-align: baseline;
}
sub {
vertical-align: baseline;
}
legend {
color: #000;
}
input,button,textarea,select,optgroup,option {
font-family: inherit;
font-size: inherit;
font-style: inherit;
font-weight: inherit;
}
input,button,textarea,select {*font-size:100%;
}
/* END RESET */
body {
margin-left: 1em;
margin-right: 1em;
font-family: arial, helvetica, geneva, sans-serif;
background-color: #ffffff; margin: 0px;
}
code, tt { font-family: monospace; }
span.parameter { font-family:monospace; }
span.parameter:after { content:":"; }
span.types:before { content:"("; }
span.types:after { content:")"; }
.type { font-weight: bold; font-style:italic }
body, p, td, th { font-size: .95em; line-height: 1.2em;}
p, ul { margin: 10px 0 0 0px;}
strong { font-weight: bold;}
em { font-style: italic;}
h1 {
font-size: 1.5em;
margin: 0 0 20px 0;
}
h2, h3, h4 { margin: 15px 0 10px 0; }
h2 { font-size: 1.25em; }
h3 { font-size: 1.15em; }
h4 { font-size: 1.06em; }
a:link { font-weight: bold; color: #004080; text-decoration: none; }
a:visited { font-weight: bold; color: #006699; text-decoration: none; }
a:link:hover { text-decoration: underline; }
hr {
color:#cccccc;
background: #00007f;
height: 1px;
}
blockquote { margin-left: 3em; }
ul { list-style-type: disc; }
p.name {
font-family: "Andale Mono", monospace;
padding-top: 1em;
}
pre.example {
background-color: rgb(245, 245, 245);
border: 1px solid silver;
padding: 10px;
margin: 10px 0 10px 0;
font-family: "Andale Mono", monospace;
font-size: .85em;
}
pre {
background-color: rgb(245, 245, 245);
border: 1px solid silver;
padding: 10px;
margin: 10px 0 10px 0;
overflow: auto;
font-family: "Andale Mono", monospace;
}
table.index { border: 1px #00007f; }
table.index td { text-align: left; vertical-align: top; }
#container {
margin-left: 1em;
margin-right: 1em;
background-color: #f0f0f0;
}
#product {
text-align: center;
border-bottom: 1px solid #cccccc;
background-color: #ffffff;
}
#product big {
font-size: 2em;
}
#main {
background-color: #f0f0f0;
border-left: 2px solid #cccccc;
}
#navigation {
float: left;
width: 18em;
vertical-align: top;
background-color: #f0f0f0;
overflow: visible;
}
#navigation h2 {
background-color:#e7e7e7;
font-size:1.1em;
color:#000000;
text-align: left;
padding:0.2em;
border-top:1px solid #dddddd;
border-bottom:1px solid #dddddd;
}
#navigation ul
{
font-size:1em;
list-style-type: none;
margin: 1px 1px 10px 1px;
}
#navigation li {
text-indent: -1em;
display: block;
margin: 3px 0px 0px 22px;
}
#navigation li li a {
margin: 0px 3px 0px -1em;
}
#content {
margin-left: 18em;
padding: 1em;
width: 700px;
border-left: 2px solid #cccccc;
border-right: 2px solid #cccccc;
background-color: #ffffff;
}
#about {
clear: both;
padding: 5px;
border-top: 2px solid #cccccc;
background-color: #ffffff;
}
@media print {
body {
font: 12pt "Times New Roman", "TimeNR", Times, serif;
}
a { font-weight: bold; color: #004080; text-decoration: underline; }
#main {
background-color: #ffffff;
border-left: 0px;
}
#container {
margin-left: 2%;
margin-right: 2%;
background-color: #ffffff;
}
#content {
padding: 1em;
background-color: #ffffff;
}
#navigation {
display: none;
}
pre.example {
font-family: "Andale Mono", monospace;
font-size: 10pt;
page-break-inside: avoid;
}
}
table.module_list {
border-width: 1px;
border-style: solid;
border-color: #cccccc;
border-collapse: collapse;
}
table.module_list td {
border-width: 1px;
padding: 3px;
border-style: solid;
border-color: #cccccc;
}
table.module_list td.name { background-color: #f0f0f0; min-width: 200px; }
table.module_list td.summary { width: 100%; }
table.function_list {
border-width: 1px;
border-style: solid;
border-color: #cccccc;
border-collapse: collapse;
}
table.function_list td {
border-width: 1px;
padding: 3px;
border-style: solid;
border-color: #cccccc;
}
table.function_list td.name { background-color: #f0f0f0; min-width: 200px; }
table.function_list td.summary { width: 100%; }
ul.nowrap {
overflow:auto;
white-space:nowrap;
}
dl.table dt, dl.function dt {border-top: 1px solid #ccc; padding-top: 1em;}
dl.table dd, dl.function dd {padding-bottom: 1em; margin: 10px 0 0 20px;}
dl.table h3, dl.function h3 {font-size: .95em;}
/* stop sublists from having initial vertical space */
ul ul { margin-top: 0px; }
ol ul { margin-top: 0px; }
ol ol { margin-top: 0px; }
ul ol { margin-top: 0px; }
/* styles for prettification of source */
pre .comment { color: #558817; }
pre .constant { color: #a8660d; }
pre .escape { color: #844631; }
pre .keyword { color: #2239a8; font-weight: bold; }
pre .library { color: #0e7c6b; }
pre .marker { color: #512b1e; background: #fedc56; font-weight: bold; }
pre .string { color: #a8660d; }
pre .number { color: #f8660d; }
pre .operator { color: #2239a8; font-weight: bold; }
pre .preprocessor, pre .prepro { color: #a33243; }
pre .global { color: #800080; }
pre .prompt { color: #558817; }
pre .url { color: #272fc2; text-decoration: underline; }

View File

@ -0,0 +1,114 @@
--[[
Copyright (c) 2015, Robert 'Bobby' Zenz
All rights reserved.
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met:
* Redistributions of source code must retain the above copyright notice, this
list of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright notice,
this list of conditions and the following disclaimer in the documentation
and/or other materials provided with the distribution.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
--]]
--- Autodrops is a system which enables that drops from nodes become items
-- which are dropped on the ground, instead of being send directly to
-- the player inventory.
autodrops = {
--- The split method that is used. Possible values are "stack", "random"
-- and "single", defaults to "single". "stack" means that the full stack
-- as provided is dropped, "random" splits the provided stack randomly and
-- "single" splits the provided stack into individual items.
split = settings.get_string("autodrops_split", "single")
}
-- Activates the autodrops system.
function autodrops.activate()
if settings.get_bool("autodrops_active", true) then
minetestex.register_on_nodedrops(autodrops.node_drops_handler)
end
end
--- Drops the given ItemStacks at the given position, based on the settings.
--
-- @param position The position at which to drop the items.
-- @param stacks The array of ItemStacks to drop.
function autodrops.drop(position, stacks)
for index, stack in ipairs(stacks) do
if autodrops.split == "random" then
autodrops.drop_random(position, stack)
elseif autodrops.split == "single" then
autodrops.drop_single(position, stack)
elseif autodrops.split == "stack" then
autodrops.drop_stack(position, stack)
end
end
end
--- Drops the given stack from the given position by splitting it into random
-- amounts.
--
-- @param position The position at which the items should spawn.
-- @param stack The ItemStack to drop.
function autodrops.drop_random(position, stack)
local name = stack:get_name()
local remaining = stack:get_count()
while remaining > 0 do
local count = random.next_int(1, remaining + 1)
local item_string = name .. " " .. tostring(count)
itemutil.blop(position, item_string)
remaining = remaining - count;
end
end
--- Drops the given stack from the given position by splitting it into single
-- items.
--
-- @param position The position at which the items should spawn.
-- @param stack The ItemStack to drop.
function autodrops.drop_single(position, stack)
local name = stack:get_name()
for counter = 1, stack:get_count(), 1 do
itemutil.blop(position, name, 4, 3, 4)
end
end
--- Drops the given stack from the given position.
--
-- @param position The position at which the items should spawn.
-- @param stack The ItemStack to drop.
function autodrops.drop_stack(position, stack)
itemutil.blop(position, stack:to_string())
end
--- The handler which is registered for handling the node drops.
--
-- @param position The position at which the drop occured.
-- @param drops The array of ItemStacks which are dropped.
-- @param player The player which originated the event.
-- @param handled If the event has already been handled or not.
-- @return true, because the event has been handled by this function.
function autodrops.node_drops_handler(position, drops, player, handled)
autodrops.drop(position, drops)
return true
end

View File

@ -0,0 +1 @@
utils

35
mods/auto_drops/init.lua Normal file
View File

@ -0,0 +1,35 @@
--[[
Copyright (c) 2015, Robert 'Bobby' Zenz
All rights reserved.
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met:
* Redistributions of source code must retain the above copyright notice, this
list of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright notice,
this list of conditions and the following disclaimer in the documentation
and/or other materials provided with the distribution.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
--]]
local base_path = minetest.get_modpath(minetest.get_current_modname())
dofile(base_path .. "/autodrops.lua")
autodrops.activate()

1
mods/utils Symbolic link
View File

@ -0,0 +1 @@
../deps/minetest-australopithecus-worldgen-utils/deps/minetest-australopithecus-utils/utils