From 664b7c0af06b82cbbaba15eb22ea9a9c42a006ee Mon Sep 17 00:00:00 2001 From: Robert Zenz Date: Sat, 7 Nov 2015 19:32:49 +0100 Subject: [PATCH] Initial commit. --- .gitmodules | 3 + LICENSE | 24 ++ Makefile | 43 +++ README | 27 ++ README.md | 1 + deps/minetest-australopithecus-worldgen-utils | 1 + doc/index.html | 250 +++++++++++++++ doc/ldoc.css | 302 ++++++++++++++++++ mods/auto_drops/autodrops.lua | 114 +++++++ mods/auto_drops/depends.txt | 1 + mods/auto_drops/init.lua | 35 ++ mods/utils | 1 + 12 files changed, 802 insertions(+) create mode 100644 .gitmodules create mode 100644 LICENSE create mode 100644 Makefile create mode 100644 README create mode 120000 README.md create mode 160000 deps/minetest-australopithecus-worldgen-utils create mode 100644 doc/index.html create mode 100644 doc/ldoc.css create mode 100644 mods/auto_drops/autodrops.lua create mode 100644 mods/auto_drops/depends.txt create mode 100644 mods/auto_drops/init.lua create mode 120000 mods/utils diff --git a/.gitmodules b/.gitmodules new file mode 100644 index 0000000..465aaef --- /dev/null +++ b/.gitmodules @@ -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 diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..1c53c0e --- /dev/null +++ b/LICENSE @@ -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. + diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..a3b559a --- /dev/null +++ b/Makefile @@ -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." + diff --git a/README b/README new file mode 100644 index 0000000..ce491ee --- /dev/null +++ b/README @@ -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 + diff --git a/README.md b/README.md new file mode 120000 index 0000000..100b938 --- /dev/null +++ b/README.md @@ -0,0 +1 @@ +README \ No newline at end of file diff --git a/deps/minetest-australopithecus-worldgen-utils b/deps/minetest-australopithecus-worldgen-utils new file mode 160000 index 0000000..a00e993 --- /dev/null +++ b/deps/minetest-australopithecus-worldgen-utils @@ -0,0 +1 @@ +Subproject commit a00e993a48049840889d1a174699f6486c459709 diff --git a/doc/index.html b/doc/index.html new file mode 100644 index 0000000..a3e0320 --- /dev/null +++ b/doc/index.html @@ -0,0 +1,250 @@ + + + + + Reference + + + + +
+ +
+ +
+
+
+ + +
+ + + + + + +
+ +

Module autodrops

+

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.

+

+ + +

Functions

+ + + + + + + + + + + + + + + + + + + + + +
drop (position, stacks)Drops the given ItemStacks at the given position, based on the settings.
drop_random (position, stack)Drops the given stack from the given position by splitting it into random + amounts.
drop_single (position, stack)Drops the given stack from the given position by splitting it into single + items.
drop_stack (position, stack)Drops the given stack from the given position.
node_drops_handler (position, drops, player, handled)The handler which is registered for handling the node drops.
+

Fields

+ + + + + +
splitThe split method that is used.
+ +
+
+ + +

Functions

+
+
+ + drop (position, stacks) +
+
+ Drops the given ItemStacks at the given position, based on the settings. + + +

Parameters:

+
    +
  • position + The position at which to drop the items. +
  • +
  • stacks + The array of ItemStacks to drop. +
  • +
+ + + + + +
+
+ + drop_random (position, stack) +
+
+ Drops the given stack from the given position by splitting it into random + amounts. + + +

Parameters:

+
    +
  • position + The position at which the items should spawn. +
  • +
  • stack + The ItemStack to drop. +
  • +
+ + + + + +
+
+ + drop_single (position, stack) +
+
+ Drops the given stack from the given position by splitting it into single + items. + + +

Parameters:

+
    +
  • position + The position at which the items should spawn. +
  • +
  • stack + The ItemStack to drop. +
  • +
+ + + + + +
+
+ + drop_stack (position, stack) +
+
+ Drops the given stack from the given position. + + +

Parameters:

+
    +
  • position + The position at which the items should spawn. +
  • +
  • stack + The ItemStack to drop. +
  • +
+ + + + + +
+
+ + node_drops_handler (position, drops, player, handled) +
+
+ The handler which is registered for handling the node drops. + + +

Parameters:

+
    +
  • position + The position at which the drop occured. +
  • +
  • drops + The array of ItemStacks which are dropped. +
  • +
  • player + The player which originated the event. +
  • +
  • handled + If the event has already been handled or not. +
  • +
+ +

Returns:

+
    + + true, because the event has been handled by this function. +
+ + + + +
+
+

Fields

+
+
+ + split +
+
+ 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. + + + + + + + +
+
+ + +
+
+
+generated by LDoc 1.4.2 +
+
+ + diff --git a/doc/ldoc.css b/doc/ldoc.css new file mode 100644 index 0000000..765c710 --- /dev/null +++ b/doc/ldoc.css @@ -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; } diff --git a/mods/auto_drops/autodrops.lua b/mods/auto_drops/autodrops.lua new file mode 100644 index 0000000..8c60639 --- /dev/null +++ b/mods/auto_drops/autodrops.lua @@ -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 + diff --git a/mods/auto_drops/depends.txt b/mods/auto_drops/depends.txt new file mode 100644 index 0000000..9487075 --- /dev/null +++ b/mods/auto_drops/depends.txt @@ -0,0 +1 @@ +utils diff --git a/mods/auto_drops/init.lua b/mods/auto_drops/init.lua new file mode 100644 index 0000000..5efefc8 --- /dev/null +++ b/mods/auto_drops/init.lua @@ -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() + diff --git a/mods/utils b/mods/utils new file mode 120000 index 0000000..e6f5561 --- /dev/null +++ b/mods/utils @@ -0,0 +1 @@ +../deps/minetest-australopithecus-worldgen-utils/deps/minetest-australopithecus-utils/utils \ No newline at end of file