develop #38

Merged
milan merged 6 commits from develop into master 2021-08-08 18:16:52 +02:00
92 changed files with 4378 additions and 2540 deletions

View file

@ -1,4 +1,4 @@
mt_version="5.4.0" mt_version="5.4.1"
first_install=y first_install=y
ufw_enable=y ufw_enable=y
ufw_ssh_port_for_accept=22 ufw_ssh_port_for_accept=22

View file

@ -0,0 +1,335 @@
-- place this file in mod ".ldoc" directory
local print, type, string, table, tostring, tonumber, error, pairs, ipairs
if import then
print = import("print")
type = import("type")
string = import("string")
table = import("table")
tostring = import("tostring")
tonumber = import("tonumber")
error = import("error")
pairs = import("pairs")
ipairs = import("ipairs")
end
project = "3d_armor"
title = "3D Armor"
format = "markdown"
not_luadoc = true
boilerplate = false
wrap = false
style = true
favicon = "https://www.minetest.net/media/icon.svg"
file = {
"3d_armor/api.lua",
".ldoc/settings.luadoc",
--".ldoc/armors.luadoc",
".ldoc/helmets.luadoc",
".ldoc/chestplates.luadoc",
".ldoc/leggings.luadoc",
".ldoc/boots.luadoc",
--".ldoc/shields.luadoc",
"shields/init.lua",
".ldoc/crafting.luadoc",
}
new_type("setting", "Settings")
new_type("armor", "Armors")
new_type("craft", "Craft Recipes")
alias("helmet", "armor")
alias("chestplate", "armor")
alias("leggings", "armor")
alias("boots", "armor")
alias("shield", "armor")
alias("grp", "group")
-- function declarations
local format_text
local format_group
custom_tags = {
-- settings
{
"settype",
title = "Type",
hidden = true,
},
{
"min",
title = "Minimum Value",
hidden = true,
},
{
"max",
title = "Maximum Value",
hidden = true,
},
{
"default",
title = "Default Value",
hidden = true,
},
-- craft items/tools
{
-- specify image basename only
"img",
title = "Inventory Image",
format = function(value)
return "<img src=\"../data/" .. value .. "\" style=\"width:32px; height:32px;\" />"
end,
},
{
-- specify full (relative or absolute) image path
"image",
title = "Image",
format = function(value)
return "<img src=\"" .. value .. "\" style=\"width:32px; height:32px;\" />"
end,
},
{
"group",
title = "Groups",
format = function(value)
return format_group(value)
end,
},
{
"armorgrp",
title = "Armor Groups",
format = function(value)
return format_group(value)
end,
},
{
"damagegrp",
title = "Damage Groups",
format = function(value)
return format_group(value)
end,
},
}
if string then
string.trim = function(st, delim)
if not delim then
delim = " "
end
while string.find(st, delim) == 1 do
st = st:sub(2)
end
while string.sub(st, string.len(st)) == delim do
st = st:sub(1, string.len(st)-1)
end
return st
end
string.split = function(st, delim)
local list = {}
local idx = string.find(st, delim)
while idx do
table.insert(list, st:sub(1, idx-1))
st = st:sub(idx+1)
idx = string.find(st, delim)
end
-- add remaining item
table.insert(list, st)
return list
end
end
if table then
if not table.copy then
table.copy = function(orig_table)
local new_table = {}
for k, v in pairs(orig_table) do
new_table[k] = v
end
return new_table
end
end
end
format_text = function(text, flags)
local ret = "<"
local ttype = "span"
if flags.code then
ttype = "code"
end
ret = ret .. ttype .. " style=\""
if flags.size then
ret = ret .. "font-size:" .. flags.size .. ";"
end
if flags.mono then
ret = ret .. "font-family:monospace;"
end
if flags.italic then
ret = ret .. "font-style:italic;"
end
if flags.bold then
ret = ret .. "font-weight:bold;"
end
if flags.color then
ret = ret .. "color:" .. flags.color .. ";"
end
if flags.bgcolor then
ret = ret .. "background-color:" .. flags.bgcolor .. ";"
end
ret = ret .. "\">" .. text .. "</" .. ttype .. ">"
return ret
end
format_group = function(text)
if string then
local idx, k, v = string.find(text, " ")
if idx then
text = format_text(string.sub(text, 1, idx-1) .. ": ", {mono=true, color="darkgreen"})
.. string.sub(text, idx)
end
end
return text
end
local function format_setting_tag(desc, value)
return "\n- <span style=\"font-size:80%;\">`" .. desc .. ":`</span> `" .. value .. "`"
end
local registered = {
settings = {},
}
local function setting_handler(item)
-- avoid parsing again
if registered.settings[item.name] then
return item
end
if not ipairs or not type then
return item
end
local tags = {
{"settype", "type"},
{"default"},
{"min", "minimum value"},
{"max", "maximum value"},
}
local def = {
["settype"] = format_setting_tag("type", "string"),
}
for _, t in ipairs(tags) do
local name = t[1]
local desc = t[2]
if not desc then desc = name end
local value = item.tags[name]
if type(value) == "table" then
if #value > 1 then
local msg = item.file.filename .. " (line " .. item.lineno
.. "): multiple instances of tag \"" .. name .. "\" found"
if error then
error(msg)
elseif print then
print("WARNING: " .. msg)
end
end
if value[1] then
def[name] = format_setting_tag(desc, value[1])
end
end
end
item.description = item.description .. "\n\n**Definition:**\n" .. def.settype
for _, t in ipairs({def.default, def.min, def.max}) do
if t then
item.description = item.description .. t
end
end
registered.settings[item.name] = true
return item
end
function custom_display_name_handler(item, default_handler)
if item.type == "setting" then
item = setting_handler(item)
end
if item then
return default_handler(item)
end
end
local custom_see_links = {
["ObjectRef"] = "https://minetest.gitlab.io/minetest/class-reference/#objectref",
["PlayerMetaRef"] = "https://minetest.gitlab.io/minetest/class-reference/#playermetaref",
["ItemDef"] = "https://minetest.gitlab.io/minetest/definition-tables/#item-definition",
["ItemStack"] = "https://minetest.gitlab.io/minetest/class-reference/#itemstack",
["groups"] = "https://minetest.gitlab.io/minetest/groups/",
["entity_damage_mechanism"] = "https://minetest.gitlab.io/minetest/entity-damage-mechanism/",
["vector"] = "https://minetest.gitlab.io/minetest/representations-of-simple-things/#positionvector",
}
local function format_custom_see(name, section)
local url = custom_see_links[name]
if not url then
url = ""
end
if not name then
name = ""
end
return name, url
end
custom_see_handler("^(ObjectRef)$", function(name, section)
return format_custom_see(name, section)
end)
custom_see_handler("^(PlayerMetaRef)$", function(name, section)
return format_custom_see(name, section)
end)
custom_see_handler("^(ItemDef)$", function(name, section)
return format_custom_see(name, section)
end)
custom_see_handler("^(groups)$", function(name, section)
return format_custom_see(name, section)
end)
custom_see_handler("^(entity_damage_mechanism)$", function(name, section)
return format_custom_see(name, section)
end)
custom_see_handler("^(ItemStack)$", function(name, section)
return format_custom_see(name, section)
end)
custom_see_handler("^(vector)$", function(name, section)
return name, "https://minetest.gitlab.io/minetest/representations-of-simple-things/#positionvector"
end)

88
mods/3d_armor/.ldoc/gendoc.sh Executable file
View file

@ -0,0 +1,88 @@
#!/usr/bin/env bash
# Place this file in mod ".ldoc" directory.
#
# To change output directory set the `d_export` environment variable.
# Example:
# $ d_export=/custom/path ./gendoc.sh
d_ldoc="$(dirname $(readlink -f $0))"
f_config="${d_ldoc}/config.ld"
cd "${d_ldoc}/.."
d_root="$(pwd)"
d_export="${d_export:-${d_root}/3d_armor/docs/reference}"
d_data="${d_export}/data"
cmd_ldoc="${d_ldoc}/ldoc/ldoc.lua"
if test -f "${cmd_ldoc}"; then
if test ! -x "${cmd_ldoc}"; then
chmod +x "${cmd_ldoc}"
fi
else
cmd_ldoc="ldoc"
fi
# clean old files
rm -rf "${d_export}"
# generate items, settings, & crafts topics temp files
echo -e "\ngenerating temp files ..."
for script in "src" "settings" "crafts"; do
script="${d_ldoc}/parse_${script}.py"
if test ! -f "${script}"; then
echo "ERROR: script doesn't exist: ${script}"
else
# check script's executable bit
if test ! -x "${script}"; then
chmod +x "${script}"
fi
# execute script
"${script}"
fi
done
echo
# generate new doc files
"${cmd_ldoc}" --UNSAFE_NO_SANDBOX -c "${f_config}" -d "${d_export}" "${d_root}"; retval=$?
# check exit status
if test ${retval} -ne 0; then
echo -e "\nan error occurred (ldoc return code: ${retval})"
exit ${retval}
fi
echo -e "\ncleaning temp files ..."
rm -vf "${d_ldoc}/"*.luadoc
# HACK: ldoc does not seem to like the "shields:" prefix
echo -e "\ncompensating for LDoc's issue with \"shields:\" prefix ..."
sed -i \
-e 's/<strong>shield_/<strong>shields:shield_/' \
-e 's/<td class="name\(.*\)>shield_/<td class="name\1>shields:shield_/' \
-e 's/<a href="#shield_/<a href="#shields:shield_/' \
-e 's/<a name.*"shield_/<a name="shields:shield_/' \
"${d_export}/topics/shields.html"
# copy textures to data directory
printf "\ncopying textures ..."
mkdir -p "${d_data}"
texture_count=0
for d_mod in "3d_armor" "shields"; do
printf "\rcopying textures from ${d_mod} ...\n"
for png in $(find "${d_root}/${d_mod}/textures" -maxdepth 1 -type f -name "*.png"); do
if test -f "${d_data}/$(basename ${png})"; then
echo "WARNING: not overwriting existing file: ${png}"
else
cp "${png}" "${d_data}"
texture_count=$((texture_count + 1))
printf "\rcopied ${texture_count} textures"
fi
done
done
echo -e "\n\nDone!"

View file

@ -0,0 +1,305 @@
/* 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 {
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; font-size: 1.1em; }
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: 20px 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 {
background-color: rgb(245, 245, 245);
border: 1px solid #C0C0C0; /* silver */
padding: 10px;
margin: 10px 0 10px 0;
overflow: auto;
font-family: "Andale Mono", monospace;
}
pre.example {
font-size: .85em;
}
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: 14em;
vertical-align: top;
background-color: #f0f0f0;
overflow: visible;
position: fixed;
}
#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: 14em;
padding: 1em;
width: 700px;
border-left: 2px solid #cccccc;
border-right: 2px solid #cccccc;
background-color: #ffffff;
min-height: 425px;
}
#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; }
/* make the target distinct; helps when we're navigating to a function */
a:target + * {
background-color: #FF9;
}
/* styles for prettification of source */
pre .comment { color: #558817; }
pre .constant { color: #a8660d; }
pre .escape { color: #844631; }
pre .keyword { color: #aa5050; font-weight: bold; }
pre .library { color: #0e7c6b; }
pre .marker { color: #512b1e; background: #fedc56; font-weight: bold; }
pre .string { color: #8080ff; }
pre .number { color: #f8660d; }
pre .operator { color: #2239a8; font-weight: bold; }
pre .preprocessor, pre .prepro { color: #a33243; }
pre .global { color: #800080; }
pre .user-keyword { color: #800080; }
pre .prompt { color: #558817; }
pre .url { color: #272fc2; text-decoration: underline; }

View file

@ -0,0 +1,46 @@
#!/usr/bin/env python
# This script will parse source files for craft recipes.
import sys, os, codecs, errno
path = os.path.realpath(__file__)
script = os.path.basename(path)
d_root = os.path.dirname(os.path.dirname(path))
d_ldoc = os.path.join(d_root, ".ldoc")
craftfile = os.path.realpath(os.path.join(d_root, "3d_armor/armor.lua"))
if not os.path.isfile(craftfile):
print("ERROR: craft file does not exist for parsing: {}".format(craftfile))
sys.exit(errnor.ENOENT)
buffer = codecs.open(craftfile, "r", "utf-8")
if not buffer:
print("ERROR: could not open file for reading: {}".format(craftfile))
sys.exit(errno.EIO)
data_in = buffer.read()
buffer.close()
craft = ""
data_in = data_in.replace("\r\n", "\n").replace("\r", "\n")
for sect in data_in.split("\n---"):
if "@craft armor" in sect:
sect = "---{}".format(sect)
for li in sect.split("\n"):
if li.startswith("--"):
craft = "{}\n{}".format(craft, li)
outfile = os.path.join(d_ldoc, "crafting.luadoc")
buffer = codecs.open(outfile, "w", "utf-8")
if not buffer:
print("ERROR: could not open file for writing: {}".format(outfile))
sys.exit(errno.EIO)
buffer.write("\n--- 3D Armor Crafting\n--\n-- @topic crafting\n\n{}\n".format(craft))
buffer.close()
print("crafts exported to\t{}".format(outfile))

View file

@ -0,0 +1,118 @@
#!/usr/bin/env python
# This script will format "settingtypes.txt" file found at the root
# of 3d_armor modpack into a format readable by LDoc.
import sys, os, errno, codecs
path = os.path.realpath(__file__)
script = os.path.basename(path)
d_root = os.path.dirname(os.path.dirname(path))
d_ldoc = os.path.join(d_root, ".ldoc")
f_settings = os.path.join(d_root, "settingtypes.txt")
if not os.path.isfile(f_settings):
print("settingtypes.txt does not exist")
sys.exit(errno.ENOENT)
i_stream = codecs.open(f_settings, "r", "utf-8")
data_in = i_stream.read()
i_stream.close()
data_in = data_in.replace("\r", "")
sets = data_in.split("\n\n")
for idx in reversed(range(len(sets))):
set = sets[idx]
lines = set.split("\n")
for idx2 in reversed(range(len(lines))):
li = lines[idx2].strip(" \t")
if li == "" or li[0] == "[":
lines.pop(idx2)
if len(lines) == 0:
sets.pop(idx)
else:
sets[idx] = "\n".join(lines)
filtered = []
for set in sets:
comment = False
lines = set.split("\n")
new_lines = []
for li in lines:
if li[0] == "#":
new_lines.append(li)
else:
new_lines.append(li)
filtered.append("\n".join(new_lines))
new_lines = []
settings = []
def parse_setting(set):
desc = []
setting = summary = stype = sdefault = soptions = None
for li in set.split("\n"):
if li[0] == "#":
desc.append("-- {}".format(li.lstrip(" #")))
else:
setting = li.split(" ")[0]
summary = li.split(")")[0].split("(")[-1]
li = li.split(")")[-1].strip()
rem = li.split(" ")
stype = rem[0]
rem.pop(0)
if len(rem) > 0:
sdefault = rem[0]
rem.pop(0)
if len(rem) > 0:
soptions = " ".join(rem)
if not setting:
return
st = "---"
if summary:
if summary[-1] != ".":
summary = "{}.".format(summary)
st = "{} {}".format(st, summary)
st = "{}\n--".format(st)
if len(desc) > 0:
st = "{}\n{}\n--".format(st, "\n".join(desc))
st = "{}\n-- @setting {}".format(st, setting)
if stype:
st = "{}\n-- @settype {}".format(st, stype)
if sdefault:
st = "{}\n-- @default {}".format(st, sdefault)
# TODO: add options
settings.append(st)
for f in filtered:
parse_setting(f)
outfile = os.path.join(d_ldoc, "settings.luadoc")
data_out = "\n--- 3D Armor Settings\n--\n-- @topic settings\n\n\n{}\n".format("\n\n".join(settings))
o_stream = codecs.open(outfile, "w", "utf-8")
if not o_stream:
print("ERROR: could not open file for writing: {}".format(outfile))
sys.exit(errno.EIO)
o_stream.write(data_out)
o_stream.close()
print("settings exported to\t{}".format(outfile))

View file

@ -0,0 +1,90 @@
#!/usr/bin/env python
# This script will parse source files for docstring.
import os, codecs
path = os.path.realpath(__file__)
script = os.path.basename(path)
d_root = os.path.dirname(os.path.dirname(path))
d_ldoc = os.path.join(d_root, ".ldoc")
armor_types = {
"armor": {"topic": "Armors", "values": []},
"helmet": {"topic": "Helmets", "values": []},
"chestplate": {"topic": "Chestplates", "values": []},
"leggings": {"topic": "Leggings", "values": []},
"boots": {"topic": "Boots", "values": []},
#"shield": {"topic": "Shields", "values": []},
}
def parse_file(f):
buffer = codecs.open(f, "r", "utf-8")
if not buffer:
print("ERROR: could not open file for reading: {}".format(f))
return
data_in = buffer.read()
buffer.close()
# format to LF (Unix)
data_in = data_in.replace("\r\n", "\n").replace("\r", "\n")
current_item = []
item_type = None
new_item = False
for li in data_in.split("\n"):
li = li.strip()
if li.startswith("---"):
new_item = True
elif not li.startswith("--"):
new_item = False
if new_item:
current_item.append(li)
if not item_type:
for a_type in armor_types:
if "@{} ".format(a_type) in li:
item_type = a_type
break
elif item_type and len(current_item):
armor_types[item_type]["values"].append("\n".join(current_item))
item_type = None
current_item = []
else:
current_item = []
to_parse = []
for obj in os.listdir(d_root):
fullpath = os.path.join(d_root, obj)
if not obj.startswith(".") and os.path.isdir(fullpath):
for root, dirs, files in os.walk(fullpath):
for f in files:
if f.endswith(".lua"):
to_parse.append(os.path.join(root, f))
for p in to_parse:
if not os.path.isfile(p):
print("ERROR: {} is not a file".format(p))
else:
parse_file(p)
for t in armor_types:
topic = armor_types[t]["topic"]
items = armor_types[t]["values"]
if len(items):
outfile = os.path.join(d_ldoc, "{}.luadoc".format(topic.lower()))
buffer = codecs.open(outfile, "w", "utf-8")
if not buffer:
print("ERROR: could not open file for writing: {}".format(outfile))
continue
buffer.write("\n--- 3D Armor {}\n--\n-- @topic {}\n\n\n{}\n".format(topic, topic.lower(), "\n\n".join(items)))
buffer.close()
print("{} exported to\t{}".format(topic.lower(), outfile))

View file

@ -396,6 +396,8 @@ If all of the above were made of material "wood" the player would recieve an ***
## Armor Functions ## Armor Functions
See also: [API Reference](https://minetest-mods.github.io/3d_armor/reference/)
### armor set_player_armor ### armor set_player_armor
armor:set_player_armor(player) armor:set_player_armor(player)

View file

@ -1,3 +1,82 @@
--- 3D Armor API
--
-- @topic api
local transparent_armor = minetest.settings:get_bool("armor_transparent", false)
--- Tables
--
-- @section tables
--- Armor definition table used for registering armor.
--
-- @table ArmorDef
-- @tfield string description Human-readable name/description.
-- @tfield string inventory_image Image filename used for icon.
-- @tfield table groups See: `ArmorDef.groups`
-- @tfield table armor_groups See: `ArmorDef.armor_groups`
-- @tfield table damage_groups See: `ArmorDef.damage_groups`
-- @see ItemDef
-- @usage local def = {
-- description = "Wood Helmet",
-- inventory_image = "3d_armor_inv_helmet_wood.png",
-- groups = {armor_head=1, armor_heal=0, armor_use=2000, flammable=1},
-- armor_groups = {fleshy=5},
-- damage_groups = {cracky=3, snappy=2, choppy=3, crumbly=2, level=1},
-- }
--- Groups table.
--
-- General groups defining item behavior.
--
-- Some commonly used groups: ***armor\_&lt;type&gt;***, ***armor\_heal***, ***armor\_use***
--
-- @table ArmorDef.groups
-- @tfield int armor_type The armor type. "head", "torso", "hands", "shield", etc.
-- (**Note:** replace "type" with actual type).
-- @tfield int armor_heal Healing value of armor when equipped.
-- @tfield int armor_use Amount of uses/damage before armor "breaks".
-- @see groups
-- @usage groups = {
-- armor_head = 1,
-- armor_heal = 5,
-- armor_use = 2000,
-- flammable = 1,
-- }
--- Armor groups table.
--
-- Groups that this item is effective against when taking damage.
--
-- Some commonly used groups: ***fleshy***
--
-- @table ArmorDef.armor_groups
-- @usage armor_groups = {
-- fleshy = 5,
-- }
--- Damage groups table.
--
-- Groups that this item is effective on when used as a weapon/tool.
--
-- Some commonly used groups: ***cracky***, ***snappy***, ***choppy***, ***crumbly***, ***level***
--
-- @table ArmorDef.damage_groups
-- @see entity_damage_mechanism
-- @usage damage_groups = {
-- cracky = 3,
-- snappy = 2,
-- choppy = 3,
-- crumbly = 2,
-- level = 1,
-- }
--- @section end
-- support for i18n -- support for i18n
local S = minetest.get_translator(minetest.get_current_modname()) local S = minetest.get_translator(minetest.get_current_modname())
@ -105,8 +184,23 @@ armor.config = {
punch_damage = true, punch_damage = true,
} }
-- Armor Registration
--- Methods
--
-- @section methods
--- Registers a new armor item.
--
-- @function armor:register_armor
-- @tparam string name Armor item technical name (ex: "3d\_armor:helmet\_gold").
-- @tparam ArmorDef def Armor definition table.
-- @usage armor:register_armor("3d_armor:helmet_wood", {
-- description = "Wood Helmet",
-- inventory_image = "3d_armor_inv_helmet_wood.png",
-- groups = {armor_head=1, armor_heal=0, armor_use=2000, flammable=1},
-- armor_groups = {fleshy=5},
-- damage_groups = {cracky=3, snappy=2, choppy=3, crumbly=2, level=1},
-- })
armor.register_armor = function(self, name, def) armor.register_armor = function(self, name, def)
def.on_secondary_use = function(itemstack, player) def.on_secondary_use = function(itemstack, player)
return armor:equip(player, itemstack) return armor:equip(player, itemstack)
@ -132,6 +226,11 @@ armor.register_armor = function(self, name, def)
minetest.register_tool(name, def) minetest.register_tool(name, def)
end end
--- Registers a new armor group.
--
-- @function armor:register_armor_group
-- @tparam string group Group ID.
-- @tparam int base Base armor value.
armor.register_armor_group = function(self, group, base) armor.register_armor_group = function(self, group, base)
base = base or 100 base = base or 100
self.registered_groups[group] = base self.registered_groups[group] = base
@ -140,38 +239,92 @@ armor.register_armor_group = function(self, group, base)
end end
end end
-- Armor callbacks --- Armor Callbacks Registration
--
-- @section callbacks
--- Registers a callback for when player visuals are update.
--
-- @function armor:register_on_update
-- @tparam function func Function to be executed.
-- @see armor:update_player_visuals
-- @usage armor:register_on_update(function(player, index, stack)
-- -- code to execute
-- end)
armor.register_on_update = function(self, func) armor.register_on_update = function(self, func)
if type(func) == "function" then if type(func) == "function" then
table.insert(self.registered_callbacks.on_update, func) table.insert(self.registered_callbacks.on_update, func)
end end
end end
--- Registers a callback for when armor is equipped.
--
-- @function armor:register_on_equip
-- @tparam function func Function to be executed.
-- @usage armor:register_on_equip(function(player, index, stack)
-- -- code to execute
-- end)
armor.register_on_equip = function(self, func) armor.register_on_equip = function(self, func)
if type(func) == "function" then if type(func) == "function" then
table.insert(self.registered_callbacks.on_equip, func) table.insert(self.registered_callbacks.on_equip, func)
end end
end end
--- Registers a callback for when armor is unequipped.
--
-- @function armor:register_on_unequip
-- @tparam function func Function to be executed.
-- @usage armor:register_on_unequip(function(player, index, stack)
-- -- code to execute
-- end)
armor.register_on_unequip = function(self, func) armor.register_on_unequip = function(self, func)
if type(func) == "function" then if type(func) == "function" then
table.insert(self.registered_callbacks.on_unequip, func) table.insert(self.registered_callbacks.on_unequip, func)
end end
end end
--- Registers a callback for when armor is damaged.
--
-- @function armor:register_on_damage
-- @tparam function func Function to be executed.
-- @see armor:damage
-- @usage armor:register_on_damage(function(player, index, stack)
-- -- code to execute
-- end)
armor.register_on_damage = function(self, func) armor.register_on_damage = function(self, func)
if type(func) == "function" then if type(func) == "function" then
table.insert(self.registered_callbacks.on_damage, func) table.insert(self.registered_callbacks.on_damage, func)
end end
end end
--- Registers a callback for when armor is destroyed.
--
-- @function armor:register_on_destroy
-- @tparam function func Function to be executed.
-- @see armor:damage
-- @usage armor:register_on_destroy(function(player, index, stack)
-- -- code to execute
-- end)
armor.register_on_destroy = function(self, func) armor.register_on_destroy = function(self, func)
if type(func) == "function" then if type(func) == "function" then
table.insert(self.registered_callbacks.on_destroy, func) table.insert(self.registered_callbacks.on_destroy, func)
end end
end end
--- @section end
--- Methods
--
-- @section methods
--- Runs callbacks.
--
-- @function armor:run_callbacks
-- @tparam function callback Function to execute.
-- @tparam ObjectRef player First parameter passed to callback.
-- @tparam int index Second parameter passed to callback.
-- @tparam ItemStack stack Callback owner.
armor.run_callbacks = function(self, callback, player, index, stack) armor.run_callbacks = function(self, callback, player, index, stack)
if stack then if stack then
local def = stack:get_definition() or {} local def = stack:get_definition() or {}
@ -187,6 +340,10 @@ armor.run_callbacks = function(self, callback, player, index, stack)
end end
end end
--- Updates visuals.
--
-- @function armor:update_player_visuals
-- @tparam ObjectRef player
armor.update_player_visuals = function(self, player) armor.update_player_visuals = function(self, player)
if not player then if not player then
return return
@ -202,10 +359,10 @@ armor.update_player_visuals = function(self, player)
self:run_callbacks("on_update", player) self:run_callbacks("on_update", player)
end end
--- Sets player's armor attributes.
-- armor is not visible on player model if enabled --
local transparent_armor = minetest.settings:get_bool("armor_transparent", false) -- @function armor:set_player_armor
-- @tparam ObjectRef player
armor.set_player_armor = function(self, player) armor.set_player_armor = function(self, player)
local name, armor_inv = self:get_valid_player(player, "[set_player_armor]") local name, armor_inv = self:get_valid_player(player, "[set_player_armor]")
if not name then if not name then
@ -366,6 +523,13 @@ armor.set_player_armor = function(self, player)
self:update_player_visuals(player) self:update_player_visuals(player)
end end
--- Action when armor is punched.
--
-- @function armor:punch
-- @tparam ObjectRef player Player wearing the armor.
-- @tparam ObjectRef hitter Entity attacking player.
-- @tparam[opt] int time_from_last_punch Time in seconds since last punch action.
-- @tparam[opt] table tool_capabilities See `entity_damage_mechanism`.
armor.punch = function(self, player, hitter, time_from_last_punch, tool_capabilities) armor.punch = function(self, player, hitter, time_from_last_punch, tool_capabilities)
local name, armor_inv = self:get_valid_player(player, "[punch]") local name, armor_inv = self:get_valid_player(player, "[punch]")
if not name then if not name then
@ -451,6 +615,13 @@ armor.punch = function(self, player, hitter, time_from_last_punch, tool_capabili
self.def[name].count = count self.def[name].count = count
end end
--- Action when armor is damaged.
--
-- @function armor:damage
-- @tparam ObjectRef player
-- @tparam int index Inventory index where armor is equipped.
-- @tparam ItemStack stack Armor item receiving damaged.
-- @tparam int use Amount of wear to add to armor item.
armor.damage = function(self, player, index, stack, use) armor.damage = function(self, player, index, stack, use)
local old_stack = ItemStack(stack) local old_stack = ItemStack(stack)
local worn_armor = armor:get_weared_armor_elements(player) local worn_armor = armor:get_weared_armor_elements(player)
@ -469,6 +640,11 @@ armor.damage = function(self, player, index, stack, use)
end end
end end
--- Get elements of equipped armor.
--
-- @function armor:get_weared_armor_elements
-- @tparam ObjectRef player
-- @treturn table List of equipped armors.
armor.get_weared_armor_elements = function(self, player) armor.get_weared_armor_elements = function(self, player)
local name, inv = self:get_valid_player(player, "[get_weared_armor]") local name, inv = self:get_valid_player(player, "[get_weared_armor]")
local weared_armor = {} local weared_armor = {}
@ -485,40 +661,71 @@ armor.get_weared_armor_elements = function(self, player)
return weared_armor return weared_armor
end end
--- Equips a piece of armor to a player.
--
-- @function armor:equip
-- @tparam ObjectRef player Player to whom item is equipped.
-- @tparam ItemStack itemstack Armor item to be equipped.
-- @treturn ItemStack Leftover item stack.
armor.equip = function(self, player, itemstack) armor.equip = function(self, player, itemstack)
local name, armor_inv = self:get_valid_player(player, "[equip]") local name, armor_inv = self:get_valid_player(player, "[equip]")
local weared_armor = self:get_weared_armor_elements(player)
local armor_element = self:get_element(itemstack:get_name()) local armor_element = self:get_element(itemstack:get_name())
if name and armor_element then if name and armor_element then
if weared_armor[armor_element] ~= nil then local index
self:unequip(player, armor_element) for i=1, armor_inv:get_size("armor") do
local stack = armor_inv:get_stack("armor", i)
if self:get_element(stack:get_name()) == armor_element then
index = i
self:unequip(player, armor_element)
break
elseif not index and stack:is_empty() then
index = i
end
end end
armor_inv:add_item("armor", itemstack:take_item()) local stack = itemstack:take_item()
armor_inv:set_stack("armor", index, stack)
self:run_callbacks("on_equip", player, index, stack)
self:set_player_armor(player) self:set_player_armor(player)
self:save_armor_inventory(player) self:save_armor_inventory(player)
end end
return itemstack return itemstack
end end
--- Unequips a piece of armor from a player.
--
-- @function armor:unequip
-- @tparam ObjectRef player Player from whom item is removed.
-- @tparam string armor_element Armor type identifier associated with the item
-- to be removed ("head", "torso", "hands", "shield", "legs", "feet", etc.).
armor.unequip = function(self, player, armor_element) armor.unequip = function(self, player, armor_element)
local name, armor_inv = self:get_valid_player(player, "[unequip]") local name, armor_inv = self:get_valid_player(player, "[unequip]")
local weared_armor = self:get_weared_armor_elements(player) if not name then
if not name or not weared_armor[armor_element] then
return return
end end
local itemstack = armor_inv:remove_item("armor", ItemStack(weared_armor[armor_element])) for i=1, armor_inv:get_size("armor") do
minetest.after(0, function() local stack = armor_inv:get_stack("armor", i)
local inv = player:get_inventory() if self:get_element(stack:get_name()) == armor_element then
if inv:room_for_item("main", itemstack) then armor_inv:set_stack("armor", i, "")
inv:add_item("main", itemstack) minetest.after(0, function()
else local inv = player:get_inventory()
minetest.add_item(player:get_pos(), itemstack) if inv:room_for_item("main", stack) then
inv:add_item("main", stack)
else
minetest.add_item(player:get_pos(), stack)
end
end)
self:run_callbacks("on_unequip", player, i, stack)
self:set_player_armor(player)
self:save_armor_inventory(player)
return
end end
end) end
self:set_player_armor(player)
self:save_armor_inventory(player)
end end
--- Removes all armor worn by player.
--
-- @function armor:remove_all
-- @tparam ObjectRef player
armor.remove_all = function(self, player) armor.remove_all = function(self, player)
local name, inv = self:get_valid_player(player, "[remove_all]") local name, inv = self:get_valid_player(player, "[remove_all]")
if not name then if not name then
@ -531,6 +738,11 @@ end
local skin_mod local skin_mod
--- Retrieves player's current skin.
--
-- @function armor:get_player_skin
-- @tparam string name Player name.
-- @treturn string Skin filename.
armor.get_player_skin = function(self, name) armor.get_player_skin = function(self, name)
if (skin_mod == "skins" or skin_mod == "simple_skins") and skins.skins[name] then if (skin_mod == "skins" or skin_mod == "simple_skins") and skins.skins[name] then
return skins.skins[name]..".png" return skins.skins[name]..".png"
@ -542,6 +754,10 @@ armor.get_player_skin = function(self, name)
return armor.default_skin..".png" return armor.default_skin..".png"
end end
--- Updates skin.
--
-- @function armor:update_skin
-- @tparam string name Player name.
armor.update_skin = function(self, name) armor.update_skin = function(self, name)
minetest.after(0, function() minetest.after(0, function()
local pplayer = minetest.get_player_by_name(name) local pplayer = minetest.get_player_by_name(name)
@ -552,10 +768,19 @@ armor.update_skin = function(self, name)
end) end)
end end
--- Adds preview for armor inventory.
--
-- @function armor:add_preview
-- @tparam string preview Preview image filename.
armor.add_preview = function(self, preview) armor.add_preview = function(self, preview)
skin_previews[preview] = true skin_previews[preview] = true
end end
--- Retrieves preview for armor inventory.
--
-- @function armor:get_preview
-- @tparam string name Player name.
-- @treturn string Preview image filename.
armor.get_preview = function(self, name) armor.get_preview = function(self, name)
local preview = string.gsub(armor:get_player_skin(name), ".png", "_preview.png") local preview = string.gsub(armor:get_player_skin(name), ".png", "_preview.png")
if skin_previews[preview] then if skin_previews[preview] then
@ -564,6 +789,12 @@ armor.get_preview = function(self, name)
return "character_preview.png" return "character_preview.png"
end end
--- Retrieves armor formspec.
--
-- @function armor:get_armor_formspec
-- @tparam string name Player name.
-- @tparam[opt] bool listring Use `listring` formspec element (default: `false`).
-- @treturn string Formspec formatted string.
armor.get_armor_formspec = function(self, name, listring) armor.get_armor_formspec = function(self, name, listring)
if armor.def[name].init_time == 0 then if armor.def[name].init_time == 0 then
return "label[0,0;Armor not initialized!]" return "label[0,0;Armor not initialized!]"
@ -586,6 +817,11 @@ armor.get_armor_formspec = function(self, name, listring)
return formspec return formspec
end end
--- Retrieves element.
--
-- @function armor:get_element
-- @tparam string item_name
-- @return Armor element.
armor.get_element = function(self, item_name) armor.get_element = function(self, item_name)
for _, element in pairs(armor.elements) do for _, element in pairs(armor.elements) do
if minetest.get_item_group(item_name, "armor_"..element) > 0 then if minetest.get_item_group(item_name, "armor_"..element) > 0 then
@ -594,6 +830,11 @@ armor.get_element = function(self, item_name)
end end
end end
--- Serializes armor inventory.
--
-- @function armor:serialize_inventory_list
-- @tparam table list Inventory contents.
-- @treturn string
armor.serialize_inventory_list = function(self, list) armor.serialize_inventory_list = function(self, list)
local list_table = {} local list_table = {}
for _, stack in ipairs(list) do for _, stack in ipairs(list) do
@ -602,6 +843,11 @@ armor.serialize_inventory_list = function(self, list)
return minetest.serialize(list_table) return minetest.serialize(list_table)
end end
--- Deserializes armor inventory.
--
-- @function armor:deserialize_inventory_list
-- @tparam string list_string Serialized inventory contents.
-- @treturn table
armor.deserialize_inventory_list = function(self, list_string) armor.deserialize_inventory_list = function(self, list_string)
local list_table = minetest.deserialize(list_string) local list_table = minetest.deserialize(list_string)
local list = {} local list = {}
@ -611,6 +857,11 @@ armor.deserialize_inventory_list = function(self, list_string)
return list return list
end end
--- Loads armor inventory.
--
-- @function armor:load_armor_inventory
-- @tparam ObjectRef player
-- @treturn bool
armor.load_armor_inventory = function(self, player) armor.load_armor_inventory = function(self, player)
local _, inv = self:get_valid_player(player, "[load_armor_inventory]") local _, inv = self:get_valid_player(player, "[load_armor_inventory]")
if inv then if inv then
@ -624,6 +875,12 @@ armor.load_armor_inventory = function(self, player)
end end
end end
--- Saves armor inventory.
--
-- Inventory is stored in `PlayerMetaRef` string "3d\_armor\_inventory".
--
-- @function armor:save_armor_inventory
-- @tparam ObjectRef player
armor.save_armor_inventory = function(self, player) armor.save_armor_inventory = function(self, player)
local _, inv = self:get_valid_player(player, "[save_armor_inventory]") local _, inv = self:get_valid_player(player, "[save_armor_inventory]")
if inv then if inv then
@ -633,10 +890,22 @@ armor.save_armor_inventory = function(self, player)
end end
end end
--- Updates inventory.
--
-- DEPRECATED: Legacy inventory support.
--
-- @function armor:update_inventory
-- @param player
armor.update_inventory = function(self, player) armor.update_inventory = function(self, player)
-- DEPRECATED: Legacy inventory support -- DEPRECATED: Legacy inventory support
end end
--- Sets inventory stack.
--
-- @function armor:set_inventory_stack
-- @tparam ObjectRef player
-- @tparam int i Armor inventory index.
-- @tparam ItemStack stack Armor item.
armor.set_inventory_stack = function(self, player, i, stack) armor.set_inventory_stack = function(self, player, i, stack)
local _, inv = self:get_valid_player(player, "[set_inventory_stack]") local _, inv = self:get_valid_player(player, "[set_inventory_stack]")
if inv then if inv then
@ -645,6 +914,13 @@ armor.set_inventory_stack = function(self, player, i, stack)
end end
end end
--- Checks for a player that can use armor.
--
-- @function armor:get_valid_player
-- @tparam ObjectRef player
-- @tparam string msg Additional info for log messages.
-- @treturn list Player name & armor inventory.
-- @usage local name, inv = armor:get_valid_player(player, "[equip]")
armor.get_valid_player = function(self, player, msg) armor.get_valid_player = function(self, player, msg)
msg = msg or "" msg = msg or ""
if not player then if not player then
@ -666,6 +942,10 @@ armor.get_valid_player = function(self, player, msg)
return name, inv return name, inv
end end
--- Drops armor item at given position.
--
-- @tparam vector pos
-- @tparam ItemStack stack Armor item to be dropped.
armor.drop_armor = function(pos, stack) armor.drop_armor = function(pos, stack)
local node = minetest.get_node_or_nil(pos) local node = minetest.get_node_or_nil(pos)
if node then if node then
@ -679,6 +959,8 @@ end
--- Allows skin mod to be set manually. --- Allows skin mod to be set manually.
-- --
-- Useful for skin mod forks that do not use the same name. -- Useful for skin mod forks that do not use the same name.
--
-- @tparam string mod Name of skin mod. Recognized names are "simple\_skins", "u\_skins", & "wardrobe".
armor.set_skin_mod = function(mod) armor.set_skin_mod = function(mod)
skin_mod = mod skin_mod = mod
end end

View file

@ -1,6 +1,23 @@
--- Registered armors.
--
-- @topic armor
-- support for i18n -- support for i18n
local S = armor.get_translator local S = armor.get_translator
--- Admin Helmet
--
-- @helmet 3d_armor:helmet_admin
-- @img 3d_armor_inv_helmet_admin.png
-- @grp armor_head 1
-- @grp armor_heal 100
-- @grp armor_use 0
-- @grp armor_water 1
-- @grp not_in_creative_inventory 1
-- @armorgrp fleshy 100
armor:register_armor("3d_armor:helmet_admin", { armor:register_armor("3d_armor:helmet_admin", {
description = S("Admin Helmet"), description = S("Admin Helmet"),
inventory_image = "3d_armor_inv_helmet_admin.png", inventory_image = "3d_armor_inv_helmet_admin.png",
@ -12,6 +29,15 @@ armor:register_armor("3d_armor:helmet_admin", {
end, end,
}) })
--- Admin Chestplate
--
-- @chestplate 3d_armor:chestplate_admin
-- @img 3d_armor_inv_chestplate_admin.png
-- @grp armor_torso 1
-- @grp armor_heal 100
-- @grp armor_use 0
-- @grp not_in_creative_inventory 1
-- @armorgrp fleshy 100
armor:register_armor("3d_armor:chestplate_admin", { armor:register_armor("3d_armor:chestplate_admin", {
description = S("Admin Chestplate"), description = S("Admin Chestplate"),
inventory_image = "3d_armor_inv_chestplate_admin.png", inventory_image = "3d_armor_inv_chestplate_admin.png",
@ -23,6 +49,15 @@ armor:register_armor("3d_armor:chestplate_admin", {
end, end,
}) })
--- Admin Leggings
--
-- @leggings 3d_armor:leggings_admin
-- @img 3d_armor_inv_leggings_admin.png
-- @grp armor_legs 1
-- @grp armor_heal 100
-- @grp armor_use 0
-- @grp not_in_creative_inventory 1
-- @armorgrp fleshy 100
armor:register_armor("3d_armor:leggings_admin", { armor:register_armor("3d_armor:leggings_admin", {
description = S("Admin Leggings"), description = S("Admin Leggings"),
inventory_image = "3d_armor_inv_leggings_admin.png", inventory_image = "3d_armor_inv_leggings_admin.png",
@ -34,6 +69,15 @@ armor:register_armor("3d_armor:leggings_admin", {
end, end,
}) })
--- Admin Boots
--
-- @boots 3d_armor:boots_admin
-- @img 3d_armor_inv_boots_admin.png
-- @grp armor_feet 1
-- @grp armor_heal 100
-- @grp armor_use 0
-- @grp not_in_creative_inventory 1
-- @armorgrp fleshy 100
armor:register_armor("3d_armor:boots_admin", { armor:register_armor("3d_armor:boots_admin", {
description = S("Admin Boots"), description = S("Admin Boots"),
inventory_image = "3d_armor_inv_boots_admin.png", inventory_image = "3d_armor_inv_boots_admin.png",
@ -50,7 +94,28 @@ minetest.register_alias("adminhelmet", "3d_armor:helmet_admin")
minetest.register_alias("adminchestplate", "3d_armor:chestplate_admin") minetest.register_alias("adminchestplate", "3d_armor:chestplate_admin")
minetest.register_alias("adminleggings", "3d_armor:leggings_admin") minetest.register_alias("adminleggings", "3d_armor:leggings_admin")
--- Wood
--
-- Requires setting `armor_material_wood`.
--
-- @section wood
if armor.materials.wood then if armor.materials.wood then
--- Wood Helmet
--
-- @helmet 3d_armor:helmet_wood
-- @img 3d_armor_inv_helmet_wood.png
-- @grp armor_head 1
-- @grp armor_heal 0
-- @grp armor_use 2000
-- @grp flammable 1
-- @armorgrp fleshy 5
-- @damagegrp cracky 3
-- @damagegrp snappy 2
-- @damagegrp choppy 3
-- @damagegrp crumbly 2
-- @damagegrp level 1
armor:register_armor("3d_armor:helmet_wood", { armor:register_armor("3d_armor:helmet_wood", {
description = S("Wood Helmet"), description = S("Wood Helmet"),
inventory_image = "3d_armor_inv_helmet_wood.png", inventory_image = "3d_armor_inv_helmet_wood.png",
@ -58,6 +123,20 @@ if armor.materials.wood then
armor_groups = {fleshy=5}, armor_groups = {fleshy=5},
damage_groups = {cracky=3, snappy=2, choppy=3, crumbly=2, level=1}, damage_groups = {cracky=3, snappy=2, choppy=3, crumbly=2, level=1},
}) })
--- Wood Chestplate
--
-- @chestplate 3d_armor:chestplate_wood
-- @img 3d_armor_inv_chestplate_wood.png
-- @grp armor_torso 1
-- @grp armor_heal 0
-- @grp armor_use 2000
-- @grp flammable 1
-- @armorgrp fleshy 10
-- @damagegrp cracky 3
-- @damagegrp snappy 2
-- @damagegrp choppy 3
-- @damagegrp crumbly 2
-- @damagegrp level 1
armor:register_armor("3d_armor:chestplate_wood", { armor:register_armor("3d_armor:chestplate_wood", {
description = S("Wood Chestplate"), description = S("Wood Chestplate"),
inventory_image = "3d_armor_inv_chestplate_wood.png", inventory_image = "3d_armor_inv_chestplate_wood.png",
@ -65,6 +144,20 @@ if armor.materials.wood then
armor_groups = {fleshy=10}, armor_groups = {fleshy=10},
damage_groups = {cracky=3, snappy=2, choppy=3, crumbly=2, level=1}, damage_groups = {cracky=3, snappy=2, choppy=3, crumbly=2, level=1},
}) })
--- Wood Leggings
--
-- @leggings 3d_armor:leggings_wood
-- @img 3d_armor_inv_leggings_wood.png
-- @grp armor_legs 1
-- @grp armor_heal 0
-- @grp armor_use 1000
-- @grp flammable 1
-- @armorgrp fleshy 10
-- @damagegrp cracky 3
-- @damagegrp snappy 2
-- @damagegrp choppy 3
-- @damagegrp crumbly 2
-- @damagegrp level 1
armor:register_armor("3d_armor:leggings_wood", { armor:register_armor("3d_armor:leggings_wood", {
description = S("Wood Leggings"), description = S("Wood Leggings"),
inventory_image = "3d_armor_inv_leggings_wood.png", inventory_image = "3d_armor_inv_leggings_wood.png",
@ -72,6 +165,20 @@ if armor.materials.wood then
armor_groups = {fleshy=10}, armor_groups = {fleshy=10},
damage_groups = {cracky=3, snappy=2, choppy=3, crumbly=2, level=1}, damage_groups = {cracky=3, snappy=2, choppy=3, crumbly=2, level=1},
}) })
--- Wood Boots
--
-- @boots 3d_armor:boots_wood
-- @img 3d_armor_inv_boots_wood.png
-- @grp armor_feet 1
-- @grp armor_heal 0
-- @grp armor_use 2000
-- @grp flammable 1
-- @armorgrp fleshy 5
-- @damagegrp cracky 3
-- @damagegrp snappy 2
-- @damagegrp choppy 3
-- @damagegrp crumbly 2
-- @damagegrp level 1
armor:register_armor("3d_armor:boots_wood", { armor:register_armor("3d_armor:boots_wood", {
description = S("Wood Boots"), description = S("Wood Boots"),
inventory_image = "3d_armor_inv_boots_wood.png", inventory_image = "3d_armor_inv_boots_wood.png",
@ -94,7 +201,27 @@ if armor.materials.wood then
end end
end end
--- Cactus
--
-- Requires setting `armor_material_cactus`.
--
-- @section cactus
if armor.materials.cactus then if armor.materials.cactus then
--- Cactus Helmet
--
-- @helmet 3d_armor:helmet_cactus
-- @img 3d_armor_inv_helmet_cactus.png
-- @grp armor_head 1
-- @grp armor_heal 0
-- @grp armor_use 1000
-- @armorgrp fleshy 5
-- @damagegrp cracky 3
-- @damagegrp snappy 3
-- @damagegrp choppy 2
-- @damagegrp crumbly 2
-- @damagegrp level 1
armor:register_armor("3d_armor:helmet_cactus", { armor:register_armor("3d_armor:helmet_cactus", {
description = S("Cactus Helmet"), description = S("Cactus Helmet"),
inventory_image = "3d_armor_inv_helmet_cactus.png", inventory_image = "3d_armor_inv_helmet_cactus.png",
@ -102,6 +229,19 @@ if armor.materials.cactus then
armor_groups = {fleshy=5}, armor_groups = {fleshy=5},
damage_groups = {cracky=3, snappy=3, choppy=2, crumbly=2, level=1}, damage_groups = {cracky=3, snappy=3, choppy=2, crumbly=2, level=1},
}) })
--- Cactus Chestplate
--
-- @chestplate 3d_armor:chestplate_cactus
-- @img 3d_armor_inv_chestplate_cactus.png
-- @grp armor_torso 1
-- @grp armor_heal 0
-- @grp armor_use 1000
-- @armorgrp fleshy 10
-- @damagegrp cracky 3
-- @damagegrp snappy 3
-- @damagegrp choppy 2
-- @damagegrp crumbly 2
-- @damagegrp level 1
armor:register_armor("3d_armor:chestplate_cactus", { armor:register_armor("3d_armor:chestplate_cactus", {
description = S("Cactus Chestplate"), description = S("Cactus Chestplate"),
inventory_image = "3d_armor_inv_chestplate_cactus.png", inventory_image = "3d_armor_inv_chestplate_cactus.png",
@ -109,6 +249,19 @@ if armor.materials.cactus then
armor_groups = {fleshy=10}, armor_groups = {fleshy=10},
damage_groups = {cracky=3, snappy=3, choppy=2, crumbly=2, level=1}, damage_groups = {cracky=3, snappy=3, choppy=2, crumbly=2, level=1},
}) })
--- Cactus Leggings
--
-- @leggings 3d_armor:leggings_cactus
-- @img 3d_armor_inv_leggings_cactus.png
-- @grp armor_legs 1
-- @grp armor_heal 0
-- @grp armor_use 1000
-- @armorgrp fleshy 10
-- @damagegrp cracky 3
-- @damagegrp snappy 3
-- @damagegrp choppy 2
-- @damagegrp crumbly 2
-- @damagegrp level 1
armor:register_armor("3d_armor:leggings_cactus", { armor:register_armor("3d_armor:leggings_cactus", {
description = S("Cactus Leggings"), description = S("Cactus Leggings"),
inventory_image = "3d_armor_inv_leggings_cactus.png", inventory_image = "3d_armor_inv_leggings_cactus.png",
@ -116,6 +269,19 @@ if armor.materials.cactus then
armor_groups = {fleshy=10}, armor_groups = {fleshy=10},
damage_groups = {cracky=3, snappy=3, choppy=2, crumbly=2, level=1}, damage_groups = {cracky=3, snappy=3, choppy=2, crumbly=2, level=1},
}) })
--- Cactus Boots
--
-- @boots 3d_armor:boots_cactus
-- @img 3d_armor_inv_boots_cactus.png
-- @grp armor_feet 1
-- @grp armor_heal 0
-- @grp armor_use 1000
-- @armorgrp fleshy 5
-- @damagegrp cracky 3
-- @damagegrp snappy 3
-- @damagegrp choppy 2
-- @damagegrp crumbly 2
-- @damagegrp level 1
armor:register_armor("3d_armor:boots_cactus", { armor:register_armor("3d_armor:boots_cactus", {
description = S("Cactus Boots"), description = S("Cactus Boots"),
inventory_image = "3d_armor_inv_boots_cactus.png", inventory_image = "3d_armor_inv_boots_cactus.png",
@ -138,7 +304,29 @@ if armor.materials.cactus then
end end
end end
--- Steel
--
-- Requires setting `armor_material_steel`.
--
-- @section steel
if armor.materials.steel then if armor.materials.steel then
--- Steel Helmet
--
-- @helmet 3d_armor:helmet_steel
-- @img 3d_armor_inv_helmet_steel.png
-- @grp armor_head 1
-- @grp armor_heal 0
-- @grp armor_use 800
-- @grp physics_speed -0.01
-- @grp physica_gravity 0.01
-- @armorgrp fleshy 10
-- @damagegrp cracky 2
-- @damagegrp snappy 3
-- @damagegrp choppy 2
-- @damagegrp crumbly 1
-- @damagegrp level 2
armor:register_armor("3d_armor:helmet_steel", { armor:register_armor("3d_armor:helmet_steel", {
description = S("Steel Helmet"), description = S("Steel Helmet"),
inventory_image = "3d_armor_inv_helmet_steel.png", inventory_image = "3d_armor_inv_helmet_steel.png",
@ -147,6 +335,21 @@ if armor.materials.steel then
armor_groups = {fleshy=10}, armor_groups = {fleshy=10},
damage_groups = {cracky=2, snappy=3, choppy=2, crumbly=1, level=2}, damage_groups = {cracky=2, snappy=3, choppy=2, crumbly=1, level=2},
}) })
--- Steel Chestplate
--
-- @chestplate 3d_armor:chestplate_steel
-- @img 3d_armor_inv_chestplate_steel.png
-- @grp armor_torso 1
-- @grp armor_heal 0
-- @grp armor_use 800
-- @grp physics_speed
-- @grp physics_gravity
-- @armorgrp fleshy
-- @damagegrp cracky 2
-- @damagegrp snappy 3
-- @damagegrp choppy 2
-- @damagegrp crumbly 1
-- @damagegrp level 2
armor:register_armor("3d_armor:chestplate_steel", { armor:register_armor("3d_armor:chestplate_steel", {
description = S("Steel Chestplate"), description = S("Steel Chestplate"),
inventory_image = "3d_armor_inv_chestplate_steel.png", inventory_image = "3d_armor_inv_chestplate_steel.png",
@ -155,6 +358,21 @@ if armor.materials.steel then
armor_groups = {fleshy=15}, armor_groups = {fleshy=15},
damage_groups = {cracky=2, snappy=3, choppy=2, crumbly=1, level=2}, damage_groups = {cracky=2, snappy=3, choppy=2, crumbly=1, level=2},
}) })
--- Steel Leggings
--
-- @leggings 3d_armor:leggings_steel
-- @img 3d_armor_inv_leggings_steel.png
-- @grp armor_legs 1
-- @grp armor_heal 0
-- @grp armor_use 800
-- @grp physics_speed -0.03
-- @grp physics_gravity 0.03
-- @armorgrp fleshy 15
-- @damagegrp cracky 2
-- @damagegrp snappy 3
-- @damagegrp choppy 2
-- @damagegrp crumbly 1
-- @damagegrp level 2
armor:register_armor("3d_armor:leggings_steel", { armor:register_armor("3d_armor:leggings_steel", {
description = S("Steel Leggings"), description = S("Steel Leggings"),
inventory_image = "3d_armor_inv_leggings_steel.png", inventory_image = "3d_armor_inv_leggings_steel.png",
@ -163,6 +381,21 @@ if armor.materials.steel then
armor_groups = {fleshy=15}, armor_groups = {fleshy=15},
damage_groups = {cracky=2, snappy=3, choppy=2, crumbly=1, level=2}, damage_groups = {cracky=2, snappy=3, choppy=2, crumbly=1, level=2},
}) })
--- Steel Boots
--
-- @boots 3d_armor:boots_steel
-- @img 3d_armor_inv_boots_steel.png
-- @grp armor_feet 1
-- @grp armor_heal 0
-- @grp armor_use 800
-- @grp physics_speed -0.01
-- @grp physics_gravity 0.01
-- @armorgrp fleshy 10
-- @damagegrp cracky 2
-- @damagegrp snappy 3
-- @damagegrp choppy 2
-- @damagegrp crumbly 1
-- @damagegrp level 2
armor:register_armor("3d_armor:boots_steel", { armor:register_armor("3d_armor:boots_steel", {
description = S("Steel Boots"), description = S("Steel Boots"),
inventory_image = "3d_armor_inv_boots_steel.png", inventory_image = "3d_armor_inv_boots_steel.png",
@ -173,7 +406,29 @@ if armor.materials.steel then
}) })
end end
--- Bronze
--
-- Requires setting `armor_material_bronze`.
--
-- @section bronze
if armor.materials.bronze then if armor.materials.bronze then
--- Bronze Helmet
--
-- @helmet 3d_armor:helmet_bronze
-- @img 3d_armor_inv_helmet_bronze.png
-- @grp armor_head 1
-- @grp armor_heal 6
-- @grp armor_use 400
-- @grp physics_speed -0.01
-- @grp physics_gravity 0.01
-- @armorgrp fleshy 10
-- @damagegrp cracky 3
-- @damagegrp snappy 2
-- @damagegrp choppy 2
-- @damagegrp crumbly 1
-- @damagegrp level 2
armor:register_armor("3d_armor:helmet_bronze", { armor:register_armor("3d_armor:helmet_bronze", {
description = S("Bronze Helmet"), description = S("Bronze Helmet"),
inventory_image = "3d_armor_inv_helmet_bronze.png", inventory_image = "3d_armor_inv_helmet_bronze.png",
@ -182,6 +437,21 @@ if armor.materials.bronze then
armor_groups = {fleshy=10}, armor_groups = {fleshy=10},
damage_groups = {cracky=3, snappy=2, choppy=2, crumbly=1, level=2}, damage_groups = {cracky=3, snappy=2, choppy=2, crumbly=1, level=2},
}) })
--- Bronze Chestplate
--
-- @chestplate 3d_armor:chestplate_bronze
-- @img 3d_armor_inv_chestplate_bronze.png
-- @grp armor_torso 1
-- @grp armor_heal 6
-- @grp armor_use 400
-- @grp physics_speed -0.04
-- @grp physics_gravity 0.04
-- @armorgrp fleshy 15
-- @damagegrp cracky 3
-- @damagegrp snappy 2
-- @damagegrp choppy 2
-- @damagegrp crumbly 1
-- @damagegrp level 2
armor:register_armor("3d_armor:chestplate_bronze", { armor:register_armor("3d_armor:chestplate_bronze", {
description = S("Bronze Chestplate"), description = S("Bronze Chestplate"),
inventory_image = "3d_armor_inv_chestplate_bronze.png", inventory_image = "3d_armor_inv_chestplate_bronze.png",
@ -190,6 +460,21 @@ if armor.materials.bronze then
armor_groups = {fleshy=15}, armor_groups = {fleshy=15},
damage_groups = {cracky=3, snappy=2, choppy=2, crumbly=1, level=2}, damage_groups = {cracky=3, snappy=2, choppy=2, crumbly=1, level=2},
}) })
--- Bronze Leggings
--
-- @leggings 3d_armor:leggings_bronze
-- @img 3d_armor_inv_leggings_bronze.png
-- @grp armor_legs 1
-- @grp armor_heal 6
-- @grp armor_use 400
-- @grp physics_speed -0.03
-- @grp physics_gravity 0.03
-- @armorgrp fleshy 15
-- @damagegrp cracky 3
-- @damagegrp snappy 2
-- @damagegrp choppy 2
-- @damagegrp crumbly 1
-- @damagegrp level 2
armor:register_armor("3d_armor:leggings_bronze", { armor:register_armor("3d_armor:leggings_bronze", {
description = S("Bronze Leggings"), description = S("Bronze Leggings"),
inventory_image = "3d_armor_inv_leggings_bronze.png", inventory_image = "3d_armor_inv_leggings_bronze.png",
@ -198,6 +483,21 @@ if armor.materials.bronze then
armor_groups = {fleshy=15}, armor_groups = {fleshy=15},
damage_groups = {cracky=3, snappy=2, choppy=2, crumbly=1, level=2}, damage_groups = {cracky=3, snappy=2, choppy=2, crumbly=1, level=2},
}) })
--- Bronze Boots
--
-- @boots 3d_armor:boots_bronze
-- @img 3d_armor_inv_boots_bronze.png
-- @grp armor_feet 1
-- @grp armor_heal 6
-- @grp armor_use 400
-- @grp physics_speed -0.01
-- @grp physics_gravity 0.01
-- @armorgrp fleshy 10
-- @damagegrp cracky 3
-- @damagegrp snappy 2
-- @damagegrp choppy 2
-- @damagegrp crumbly 1
-- @damagegrp level 2
armor:register_armor("3d_armor:boots_bronze", { armor:register_armor("3d_armor:boots_bronze", {
description = S("Bronze Boots"), description = S("Bronze Boots"),
inventory_image = "3d_armor_inv_boots_bronze.png", inventory_image = "3d_armor_inv_boots_bronze.png",
@ -208,7 +508,26 @@ if armor.materials.bronze then
}) })
end end
--- Diamond
--
-- Requires setting `armor_material_diamond`.
--
-- @section diamond
if armor.materials.diamond then if armor.materials.diamond then
--- Diamond Helmet
--
-- @helmet 3d_armor:helmet_diamond
-- @img 3d_armor_inv_helmet_diamond.png
-- @grp armor_head 1
-- @grp armor_heal 12
-- @grp armor_use 200
-- @armorgrp fleshy 15
-- @damagegrp cracky 2
-- @damagegrp snappy 1
-- @damagegrp choppy 1
-- @damagegrp level 3
armor:register_armor("3d_armor:helmet_diamond", { armor:register_armor("3d_armor:helmet_diamond", {
description = S("Diamond Helmet"), description = S("Diamond Helmet"),
inventory_image = "3d_armor_inv_helmet_diamond.png", inventory_image = "3d_armor_inv_helmet_diamond.png",
@ -216,6 +535,18 @@ if armor.materials.diamond then
armor_groups = {fleshy=15}, armor_groups = {fleshy=15},
damage_groups = {cracky=2, snappy=1, choppy=1, level=3}, damage_groups = {cracky=2, snappy=1, choppy=1, level=3},
}) })
--- Diamond Chestplate
--
-- @chestplate 3d_armor:chestplate_diamond
-- @img 3d_armor_inv_chestplate_diamond.png
-- @grp armor_torso 1
-- @grp armor_heal 12
-- @grp armor_use 200
-- @armorgrp fleshy 20
-- @damagegrp cracky 2
-- @damagegrp snappy 1
-- @damagegrp choppy 1
-- @damagegrp level 3
armor:register_armor("3d_armor:chestplate_diamond", { armor:register_armor("3d_armor:chestplate_diamond", {
description = S("Diamond Chestplate"), description = S("Diamond Chestplate"),
inventory_image = "3d_armor_inv_chestplate_diamond.png", inventory_image = "3d_armor_inv_chestplate_diamond.png",
@ -223,6 +554,18 @@ if armor.materials.diamond then
armor_groups = {fleshy=20}, armor_groups = {fleshy=20},
damage_groups = {cracky=2, snappy=1, choppy=1, level=3}, damage_groups = {cracky=2, snappy=1, choppy=1, level=3},
}) })
--- Diamond Leggings
--
-- @leggings 3d_armor:leggings_diamond
-- @img 3d_armor_inv_leggings_diamond.png
-- @grp armor_legs 1
-- @grp armor_heal 12
-- @grp armor_use 200
-- @armorgrp fleshy 20
-- @damagegrp cracky 2
-- @damagegrp snappy 1
-- @damagegrp choppy 1
-- @damagegrp level 3
armor:register_armor("3d_armor:leggings_diamond", { armor:register_armor("3d_armor:leggings_diamond", {
description = S("Diamond Leggings"), description = S("Diamond Leggings"),
inventory_image = "3d_armor_inv_leggings_diamond.png", inventory_image = "3d_armor_inv_leggings_diamond.png",
@ -230,6 +573,18 @@ if armor.materials.diamond then
armor_groups = {fleshy=20}, armor_groups = {fleshy=20},
damage_groups = {cracky=2, snappy=1, choppy=1, level=3}, damage_groups = {cracky=2, snappy=1, choppy=1, level=3},
}) })
--- Diamond Boots
--
-- @boots 3d_armor:boots_diamond
-- @img 3d_armor_inv_boots_diamond.png
-- @grp armor_feet 1
-- @grp armor_heal 12
-- @grp armor_use 200
-- @armorgrp fleshy 15
-- @damagegrp cracky 2
-- @damagegrp snappy 1
-- @damagegrp choppy 1
-- @damagegrp level 3
armor:register_armor("3d_armor:boots_diamond", { armor:register_armor("3d_armor:boots_diamond", {
description = S("Diamond Boots"), description = S("Diamond Boots"),
inventory_image = "3d_armor_inv_boots_diamond.png", inventory_image = "3d_armor_inv_boots_diamond.png",
@ -239,7 +594,29 @@ if armor.materials.diamond then
}) })
end end
--- Gold
--
-- Requires `armor_material_gold`.
--
-- @section gold
if armor.materials.gold then if armor.materials.gold then
--- Gold Helmet
--
-- @helmet 3d_armor:helmet_gold
-- @img 3d_armor_inv_helmet_gold.png
-- @grp armor_head 1
-- @grp armor_heal 6
-- @grp armor_use 300
-- @grp physics_speed -0.02
-- @grp physics_gravity 0.02
-- @armorgrp fleshy 10
-- @damagegrp cracky 1
-- @damagegrp snappy 2
-- @damagegrp choppy 2
-- @damagegrp crumbly 3
-- @damagegrp level 2
armor:register_armor("3d_armor:helmet_gold", { armor:register_armor("3d_armor:helmet_gold", {
description = S("Gold Helmet"), description = S("Gold Helmet"),
inventory_image = "3d_armor_inv_helmet_gold.png", inventory_image = "3d_armor_inv_helmet_gold.png",
@ -248,6 +625,21 @@ if armor.materials.gold then
armor_groups = {fleshy=10}, armor_groups = {fleshy=10},
damage_groups = {cracky=1, snappy=2, choppy=2, crumbly=3, level=2}, damage_groups = {cracky=1, snappy=2, choppy=2, crumbly=3, level=2},
}) })
--- Gold Chestplate
--
-- @chestplate 3d_armor:chestplate_gold
-- @img 3d_armor_inv_chestplate_gold.png
-- @grp armor_torso 1
-- @grp armor_heal 6
-- @grp armor_use 300
-- @grp physics_speed -0.05
-- @grp physics_gravity 0.05
-- @armorgrp fleshy 15
-- @damagegrp cracky 1
-- @damagegrp snappy 2
-- @damagegrp choppy 2
-- @damagegrp crumbly 3
-- @damagegrp level 2
armor:register_armor("3d_armor:chestplate_gold", { armor:register_armor("3d_armor:chestplate_gold", {
description = S("Gold Chestplate"), description = S("Gold Chestplate"),
inventory_image = "3d_armor_inv_chestplate_gold.png", inventory_image = "3d_armor_inv_chestplate_gold.png",
@ -256,6 +648,21 @@ if armor.materials.gold then
armor_groups = {fleshy=15}, armor_groups = {fleshy=15},
damage_groups = {cracky=1, snappy=2, choppy=2, crumbly=3, level=2}, damage_groups = {cracky=1, snappy=2, choppy=2, crumbly=3, level=2},
}) })
--- Gold Leggings
--
-- @leggings 3d_armor:leggings_gold
-- @img 3d_armor_inv_leggings_gold.png
-- @grp armor_legs 1
-- @grp armor_heal 6
-- @grp armor_use 300
-- @grp physics_speed -0.04
-- @grp physics_gravity 0.04
-- @armorgrp fleshy 15
-- @damagegrp cracky 1
-- @damagegrp snappy 2
-- @damagegrp choppy 2
-- @damagegrp crumbly 3
-- @damagegrp level 2
armor:register_armor("3d_armor:leggings_gold", { armor:register_armor("3d_armor:leggings_gold", {
description = S("Gold Leggings"), description = S("Gold Leggings"),
inventory_image = "3d_armor_inv_leggings_gold.png", inventory_image = "3d_armor_inv_leggings_gold.png",
@ -264,6 +671,21 @@ if armor.materials.gold then
armor_groups = {fleshy=15}, armor_groups = {fleshy=15},
damage_groups = {cracky=1, snappy=2, choppy=2, crumbly=3, level=2}, damage_groups = {cracky=1, snappy=2, choppy=2, crumbly=3, level=2},
}) })
--- Gold Boots
--
-- @boots 3d_armor:boots_gold
-- @img 3d_armor_inv_boots_gold.png
-- @grp armor_feet 1
-- @grp armor_heal 6
-- @grp armor_use 300
-- @grp physics_speed -0.02
-- @grp physics_gravity 0.02
-- @armorgrp fleshy 10
-- @damagegrp cracky 1
-- @damagegrp snappy 2
-- @damagegrp choppy 2
-- @damagegrp crumbly 3
-- @damagegrp level 2
armor:register_armor("3d_armor:boots_gold", { armor:register_armor("3d_armor:boots_gold", {
description = S("Gold Boots"), description = S("Gold Boots"),
inventory_image = "3d_armor_inv_boots_gold.png", inventory_image = "3d_armor_inv_boots_gold.png",
@ -274,7 +696,25 @@ if armor.materials.gold then
}) })
end end
--- Mithril
--
-- Requires `armor_material_mithril`.
--
-- @section mithril
if armor.materials.mithril then if armor.materials.mithril then
--- Mithril Helmet
--
-- @helmet 3d_armor:helmet_mithril
-- @img 3d_armor_inv_helmet_mithril.png
-- @grp armor_head 1
-- @grp armor_heal 12
-- @grp armor_use 100
-- @armorgrp fleshy 15
-- @damagegrp cracky 2
-- @damagegrp snappy 1
-- @damagegrp level 3
armor:register_armor("3d_armor:helmet_mithril", { armor:register_armor("3d_armor:helmet_mithril", {
description = S("Mithril Helmet"), description = S("Mithril Helmet"),
inventory_image = "3d_armor_inv_helmet_mithril.png", inventory_image = "3d_armor_inv_helmet_mithril.png",
@ -282,6 +722,17 @@ if armor.materials.mithril then
armor_groups = {fleshy=15}, armor_groups = {fleshy=15},
damage_groups = {cracky=2, snappy=1, level=3}, damage_groups = {cracky=2, snappy=1, level=3},
}) })
--- Mithril Chestplate
--
-- @chestplate 3d_armor:chestplate_mithril
-- @img 3d_armor_inv_chestplate_mithril.png
-- @grp armor_torso 1
-- @grp armor_heal 12
-- @grp armor_use 100
-- @armorgrp fleshy 20
-- @damagegrp cracky 2
-- @damagegrp snappy 1
-- @damagegrp level 3
armor:register_armor("3d_armor:chestplate_mithril", { armor:register_armor("3d_armor:chestplate_mithril", {
description = S("Mithril Chestplate"), description = S("Mithril Chestplate"),
inventory_image = "3d_armor_inv_chestplate_mithril.png", inventory_image = "3d_armor_inv_chestplate_mithril.png",
@ -289,6 +740,17 @@ if armor.materials.mithril then
armor_groups = {fleshy=20}, armor_groups = {fleshy=20},
damage_groups = {cracky=2, snappy=1, level=3}, damage_groups = {cracky=2, snappy=1, level=3},
}) })
--- Mithril Leggings
--
-- @leggings 3d_armor:leggings_mithril
-- @img 3d_armor_inv_leggings_mithril.png
-- @grp armor_legs 1
-- @grp armor_heal 12
-- @grp armor_use 100
-- @armorgrp fleshy 20
-- @damagegrp cracky 2
-- @damagegrp snappy 1
-- @damagegrp level 3
armor:register_armor("3d_armor:leggings_mithril", { armor:register_armor("3d_armor:leggings_mithril", {
description = S("Mithril Leggings"), description = S("Mithril Leggings"),
inventory_image = "3d_armor_inv_leggings_mithril.png", inventory_image = "3d_armor_inv_leggings_mithril.png",
@ -296,6 +758,17 @@ if armor.materials.mithril then
armor_groups = {fleshy=20}, armor_groups = {fleshy=20},
damage_groups = {cracky=2, snappy=1, level=3}, damage_groups = {cracky=2, snappy=1, level=3},
}) })
--- Mithril Boots
--
-- @boots 3d_armor:boots_mithril
-- @img 3d_armor_inv_boots_mithril.png
-- @grp armor_feet 1
-- @grp armor_heal 12
-- @grp armor_use 100
-- @armorgrp fleshy 15
-- @damagegrp cracky 2
-- @damagegrp snappy 1
-- @damagegrp level 3
armor:register_armor("3d_armor:boots_mithril", { armor:register_armor("3d_armor:boots_mithril", {
description = S("Mithril Boots"), description = S("Mithril Boots"),
inventory_image = "3d_armor_inv_boots_mithril.png", inventory_image = "3d_armor_inv_boots_mithril.png",
@ -305,7 +778,26 @@ if armor.materials.mithril then
}) })
end end
--- Crystal
--
-- Requires `armor_material_crystal`.
--
-- @section crystal
if armor.materials.crystal then if armor.materials.crystal then
--- Crystal Helmet
--
-- @helmet 3d_armor:helmet_crystal
-- @img 3d_armor_inv_helmet_crystal.png
-- @grp armor_head 1
-- @grp armor_heal 12
-- @grp armor_use 100
-- @grp armor_fire 1
-- @armorgrp fleshy 15
-- @damagegrp cracky 2
-- @damagegrp snappy 1
-- @damagegrp level 3
armor:register_armor("3d_armor:helmet_crystal", { armor:register_armor("3d_armor:helmet_crystal", {
description = S("Crystal Helmet"), description = S("Crystal Helmet"),
inventory_image = "3d_armor_inv_helmet_crystal.png", inventory_image = "3d_armor_inv_helmet_crystal.png",
@ -313,6 +805,18 @@ if armor.materials.crystal then
armor_groups = {fleshy=15}, armor_groups = {fleshy=15},
damage_groups = {cracky=2, snappy=1, level=3}, damage_groups = {cracky=2, snappy=1, level=3},
}) })
--- Crystal Chestplate
--
-- @chestplate 3d_armor:chestplate_crystal
-- @img 3d_armor_inv_chestplate_crystal.png
-- @grp armor_torso 1
-- @grp armor_heal 12
-- @grp armor_use 100
-- @grp armor_fire 1
-- @armorgrp fleshy 20
-- @damagegrp cracky 2
-- @damagegrp snappy 1
-- @damagegrp level 3
armor:register_armor("3d_armor:chestplate_crystal", { armor:register_armor("3d_armor:chestplate_crystal", {
description = S("Crystal Chestplate"), description = S("Crystal Chestplate"),
inventory_image = "3d_armor_inv_chestplate_crystal.png", inventory_image = "3d_armor_inv_chestplate_crystal.png",
@ -320,6 +824,18 @@ if armor.materials.crystal then
armor_groups = {fleshy=20}, armor_groups = {fleshy=20},
damage_groups = {cracky=2, snappy=1, level=3}, damage_groups = {cracky=2, snappy=1, level=3},
}) })
--- Crystal Leggings
--
-- @leggings 3d_armor:leggings_crystal
-- @img 3d_armor_inv_leggings_crystal.png
-- @grp armor_legs 1
-- @grp armor_heal 12
-- @grp armor_use 100
-- @grp armor_fire 1
-- @armorgrp fleshy 20
-- @damagegrp cracky 2
-- @damagegrp snappy 1
-- @damagegrp level 3
armor:register_armor("3d_armor:leggings_crystal", { armor:register_armor("3d_armor:leggings_crystal", {
description = S("Crystal Leggings"), description = S("Crystal Leggings"),
inventory_image = "3d_armor_inv_leggings_crystal.png", inventory_image = "3d_armor_inv_leggings_crystal.png",
@ -327,6 +843,20 @@ if armor.materials.crystal then
armor_groups = {fleshy=20}, armor_groups = {fleshy=20},
damage_groups = {cracky=2, snappy=1, level=3}, damage_groups = {cracky=2, snappy=1, level=3},
}) })
--- Crystal Boots
--
-- @boots 3d_armor:boots_crystal
-- @img 3d_armor_inv_boots_crystal.png
-- @grp armor_feet 1
-- @grp armor_heal 12
-- @grp armor_use 100
-- @grp physics_speed 1
-- @grp physics_jump 0.5
-- @grp armor_fire 1
-- @armorgrp fleshy 15
-- @damagegrp cracky 2
-- @damagegrp snappy 1
-- @damagegrp level 3
armor:register_armor("3d_armor:boots_crystal", { armor:register_armor("3d_armor:boots_crystal", {
description = S("Crystal Boots"), description = S("Crystal Boots"),
inventory_image = "3d_armor_inv_boots_crystal.png", inventory_image = "3d_armor_inv_boots_crystal.png",
@ -337,6 +867,44 @@ if armor.materials.crystal then
}) })
end end
--- Crafting
--
-- @section craft
--- Craft recipes for helmets, chestplates, leggings, boots, & shields.
--
-- @craft armor
-- @usage
-- Key:
-- - m: material
-- - wood: group:wood
-- - cactus: default:cactus
-- - steel: default:steel_ingot
-- - bronze: default:bronze_ingot
-- - diamond: default:diamond
-- - gold: default:gold_ingot
-- - mithril: moreores:mithril_ingot
-- - crystal: ethereal:crystal_ingot
--
-- helmet: chestplate: leggings:
-- ┌───┬───┬───┐ ┌───┬───┬───┐ ┌───┬───┬───┐
-- │ m │ m │ m │ │ m │ │ m │ │ m │ m │ m │
-- ├───┼───┼───┤ ├───┼───┼───┤ ├───┼───┼───┤
-- │ m │ │ m │ │ m │ m │ m │ │ m │ │ m │
-- ├───┼───┼───┤ ├───┼───┼───┤ ├───┼───┼───┤
-- │ │ │ │ │ m │ m │ m │ │ m │ │ m │
-- └───┴───┴───┘ └───┴───┴───┘ └───┴───┴───┘
--
-- boots: shield:
-- ┌───┬───┬───┐ ┌───┬───┬───┐
-- │ │ │ │ │ m │ m │ m │
-- ├───┼───┼───┤ ├───┼───┼───┤
-- │ m │ │ m │ │ m │ m │ m │
-- ├───┼───┼───┤ ├───┼───┼───┤
-- │ m │ │ m │ │ │ m │ │
-- └───┴───┴───┘ └───┴───┴───┘
for k, v in pairs(armor.materials) do for k, v in pairs(armor.materials) do
minetest.register_craft({ minetest.register_craft({
output = "3d_armor:helmet_"..k, output = "3d_armor:helmet_"..k,

View file

@ -51,6 +51,8 @@ see armor.conf.example for all available options.
For mod installation instructions, please visit: http://wiki.minetest.com/wiki/Installing_Mods For mod installation instructions, please visit: http://wiki.minetest.com/wiki/Installing_Mods
[API Reference](https://minetest-mods.github.io/3d_armor/reference/)
[mod] Visible Wielded Items [wieldview] [mod] Visible Wielded Items [wieldview]
--------------------------------------- ---------------------------------------

View file

@ -1,2 +1 @@
name = minetest-3d_armor
description = Visible player armor & wielded items. description = Visible player armor & wielded items.

View file

@ -58,7 +58,7 @@ armor_punch_damage (Enable damage effects) bool true
# Enable migration of old armor inventories. # Enable migration of old armor inventories.
armor_migrate_old_inventory (Migrate old armor inventories) bool true armor_migrate_old_inventory (Migrate old armor inventories) bool true
# Don't show armor on character model. # Armor is not visible on player model when enabled.
armor_transparent (Transparent armor) bool false armor_transparent (Transparent armor) bool false

View file

@ -1,3 +1,9 @@
--- 3D Armor Shields
--
-- @topic shields
-- support for i18n -- support for i18n
local S = minetest.get_translator(minetest.get_current_modname()) local S = minetest.get_translator(minetest.get_current_modname())
@ -21,6 +27,14 @@ end
-- Regisiter Shields -- Regisiter Shields
--- Admin Shield
--
-- @shield shields:shield_admin
-- @img shields_inv_shield_admin.png
-- @grp armor_shield 1000
-- @grp armor_heal 100
-- @grp armor_use 0
-- @grp not_int_creative_inventory 1
armor:register_armor("shields:shield_admin", { armor:register_armor("shields:shield_admin", {
description = S("Admin Shield"), description = S("Admin Shield"),
inventory_image = "shields_inv_shield_admin.png", inventory_image = "shields_inv_shield_admin.png",
@ -29,7 +43,22 @@ armor:register_armor("shields:shield_admin", {
minetest.register_alias("adminshield", "shields:shield_admin") minetest.register_alias("adminshield", "shields:shield_admin")
if armor.materials.wood then if armor.materials.wood then
--- Wood Shield
--
-- @shield shields:shield_wood
-- @img shields_inv_shield_wood.png
-- @grp armor_shield 1
-- @grp armor_heal 0
-- @grp armor_use 2000
-- @grp flammable 1
-- @armorgrp fleshy 5
-- @damagegrp cracky 3
-- @damagegrp snappy 2
-- @damagegrp choppy 3
-- @damagegrp crumbly 2
-- @damagegrp level 1
armor:register_armor("shields:shield_wood", { armor:register_armor("shields:shield_wood", {
description = S("Wooden Shield"), description = S("Wooden Shield"),
inventory_image = "shields_inv_shield_wood.png", inventory_image = "shields_inv_shield_wood.png",
@ -44,6 +73,19 @@ if armor.materials.wood then
play_sound_effect(player, "default_wood_footstep") play_sound_effect(player, "default_wood_footstep")
end, end,
}) })
--- Enhanced Wood Shield
--
-- @shield shields:shield_enhanced_wood
-- @img shields_inv_shield_enhanced_wood.png
-- @grp armor_shield 1
-- @grp armor_heal 0
-- @grp armor_use 2000
-- @armorgrp fleshy 8
-- @damagegrp cracky 3
-- @damagegrp snappy 2
-- @damagegrp choppy 3
-- @damagegrp crumbly 2
-- @damagegrp level 2
armor:register_armor("shields:shield_enhanced_wood", { armor:register_armor("shields:shield_enhanced_wood", {
description = S("Enhanced Wood Shield"), description = S("Enhanced Wood Shield"),
inventory_image = "shields_inv_shield_enhanced_wood.png", inventory_image = "shields_inv_shield_enhanced_wood.png",
@ -74,6 +116,19 @@ if armor.materials.wood then
end end
if armor.materials.cactus then if armor.materials.cactus then
--- Cactus Shield
--
-- @shield shields:shield_cactus
-- @img shields_inv_shield_cactus.png
-- @grp armor_shield 1
-- @grp armor_heal 0
-- @grp armor_use 1000
-- @armorgrp fleshy 5
-- @damagegrp cracky 3
-- @damagegrp snappy 3
-- @damagegrp choppy 2
-- @damagegrp crumbly 2
-- @damagegrp level 1
armor:register_armor("shields:shield_cactus", { armor:register_armor("shields:shield_cactus", {
description = S("Cactus Shield"), description = S("Cactus Shield"),
inventory_image = "shields_inv_shield_cactus.png", inventory_image = "shields_inv_shield_cactus.png",
@ -88,6 +143,19 @@ if armor.materials.cactus then
play_sound_effect(player, "default_wood_footstep") play_sound_effect(player, "default_wood_footstep")
end, end,
}) })
--- Enhanced Cactus Shield
--
-- @shield shields:shield_enhanced_cactus
-- @img shields_inv_shield_enhanced_cactus.png
-- @grp armor_shield 1
-- @grp armor_heal 0
-- @grp armor_use 1000
-- @armorgrp fleshy 8
-- @damagegrp cracky 3
-- @damagegrp snappy 3
-- @damagegrp choppy 2
-- @damagegrp crumbly 2
-- @damagegrp level 2
armor:register_armor("shields:shield_enhanced_cactus", { armor:register_armor("shields:shield_enhanced_cactus", {
description = S("Enhanced Cactus Shield"), description = S("Enhanced Cactus Shield"),
inventory_image = "shields_inv_shield_enhanced_cactus.png", inventory_image = "shields_inv_shield_enhanced_cactus.png",
@ -118,6 +186,21 @@ if armor.materials.cactus then
end end
if armor.materials.steel then if armor.materials.steel then
--- Steel Shield
--
-- @shield shields:shield_steel
-- @img shields_inv_shield_steel.png
-- @grp armor_shield 1
-- @grp armor_heal 0
-- @grp armor_use 800
-- @grp physics_speed -0.03
-- @grp physics_gravity 0.03
-- @armorgrp fleshy 10
-- @damagegrp cracky 2
-- @damagegrp snappy 3
-- @damagegrp choppy 2
-- @damagegrp crumbly 1
-- @damagegrp level 2
armor:register_armor("shields:shield_steel", { armor:register_armor("shields:shield_steel", {
description = S("Steel Shield"), description = S("Steel Shield"),
inventory_image = "shields_inv_shield_steel.png", inventory_image = "shields_inv_shield_steel.png",
@ -136,6 +219,21 @@ if armor.materials.steel then
end end
if armor.materials.bronze then if armor.materials.bronze then
--- Bronze Shield
--
-- @shield shields:shield_bronze
-- @img shields_inv_shield_bronze.png
-- @grp armor_shield 1
-- @grp armor_heal 6
-- @grp armor_use 400
-- @grp physics_speed -0.03
-- @grp physics_gravity 0.03
-- @armorgrp fleshy 10
-- @damagegrp cracky 2
-- @damagegrp snappy 3
-- @damagegrp choppy 2
-- @damagegrp crumbly 1
-- @damagegrp level 2
armor:register_armor("shields:shield_bronze", { armor:register_armor("shields:shield_bronze", {
description = S("Bronze Shield"), description = S("Bronze Shield"),
inventory_image = "shields_inv_shield_bronze.png", inventory_image = "shields_inv_shield_bronze.png",
@ -154,6 +252,18 @@ if armor.materials.bronze then
end end
if armor.materials.diamond then if armor.materials.diamond then
--- Diamond Shield
--
-- @shield shields:shield_diamond
-- @img shields_inv_shield_diamond.png
-- @grp armor_shield 1
-- @grp armor_heal 12
-- @grp armor_use 200
-- @armorgrp fleshy 15
-- @damagegrp cracky 2
-- @damagegrp snappy 1
-- @damagegrp choppy 1
-- @damagegrp level 3
armor:register_armor("shields:shield_diamond", { armor:register_armor("shields:shield_diamond", {
description = S("Diamond Shield"), description = S("Diamond Shield"),
inventory_image = "shields_inv_shield_diamond.png", inventory_image = "shields_inv_shield_diamond.png",
@ -171,6 +281,21 @@ if armor.materials.diamond then
end end
if armor.materials.gold then if armor.materials.gold then
--- Gold Shield
--
-- @shield shields:shield_gold
-- @img shields_inv_shield_gold.png
-- @grp armor_shield 1
-- @grp armor_heal 6
-- @grp armor_use 300
-- @grp physics_speed -0.04
-- @grp physics_gravity 0.04
-- @armorgrp fleshy 10
-- @damagegrp cracky 1
-- @damagegrp snappy 2
-- @damagegrp choppy 2
-- @damagegrp crumbly 3
-- @damagegrp level 2
armor:register_armor("shields:shield_gold", { armor:register_armor("shields:shield_gold", {
description = S("Gold Shield"), description = S("Gold Shield"),
inventory_image = "shields_inv_shield_gold.png", inventory_image = "shields_inv_shield_gold.png",
@ -189,6 +314,17 @@ if armor.materials.gold then
end end
if armor.materials.mithril then if armor.materials.mithril then
--- Mithril Shield
--
-- @shield shields:shield_mithril
-- @img shields_inv_shield_mithril.png
-- @grp armor_shield 1
-- @grp armor_heal 12
-- @grp armor_use 100
-- @armorgrp fleshy 15
-- @damagegrp cracky 2
-- @damagegrp snappy 1
-- @damagegrp level 3
armor:register_armor("shields:shield_mithril", { armor:register_armor("shields:shield_mithril", {
description = S("Mithril Shield"), description = S("Mithril Shield"),
inventory_image = "shields_inv_shield_mithril.png", inventory_image = "shields_inv_shield_mithril.png",
@ -206,6 +342,18 @@ if armor.materials.mithril then
end end
if armor.materials.crystal then if armor.materials.crystal then
--- Crystal Shield
--
-- @shield shields:shield_crystal
-- @img shields_inv_shield_crystal.png
-- @grp armor_shield 1
-- @grp armor_heal 12
-- @grp armor_use 100
-- @grp armor_fire 1
-- @armorgrp fleshy 15
-- @damagegrp cracky 2
-- @damagegrp snappy 1
-- @damagegrp level 3
armor:register_armor("shields:shield_crystal", { armor:register_armor("shields:shield_crystal", {
description = S("Crystal Shield"), description = S("Crystal Shield"),
inventory_image = "shields_inv_shield_crystal.png", inventory_image = "shields_inv_shield_crystal.png",

View file

@ -8,7 +8,7 @@ https://forum.minetest.net/viewtopic.php?id=8890
Changelog: Changelog:
- 1.0 - Added glazed terracotta blocks when you cook baked clay in furnace (thanks D3monPixel) - 1.0 - Re-Added glazed terracotta blocks when you cook baked clay in furnace (thanks Amara2_MK), added support for sofar's flowerpot mod
- 0.9 - Baked clay now works in the technic cnc machine - 0.9 - Baked clay now works in the technic cnc machine
- 0.8 - Cooking clay block in furnace gives natural baked clay which you can dye - 0.8 - Cooking clay block in furnace gives natural baked clay which you can dye
- 0.7 - Added support for stairsplus so that stairs are registered properly - 0.7 - Added support for stairsplus so that stairs are registered properly

View file

@ -3,3 +3,4 @@ stairs
moreblocks? moreblocks?
lucky_block? lucky_block?
technic_cnc? technic_cnc?
flowerpot?

View file

@ -131,24 +131,7 @@ for _, clay in pairs(clay) do
end end
end end
-- special light blue glazed terracotta block minetest.register_alias("bakedclay:terracotta_light_blue", "bakedclay:terracotta_cyan")
local texture = "baked_clay_terracotta_light_blue.png"
minetest.register_node("bakedclay:terracotta_light_blue", {
description = "Light Blue Glazed Terracotta",
tiles = {
texture .. "",
texture .. "",
texture .. "^[transformR180",
texture .. "",
texture .. "^[transformR270",
texture .. "^[transformR90",
},
paramtype2 = "facedir",
groups = {cracky = 3, terracotta = 1},
sounds = default.node_sound_stone_defaults(),
on_place = minetest.rotate_node
})
-- cook clay block into white baked clay -- cook clay block into white baked clay
@ -365,7 +348,6 @@ p = "bakedclay:terracotta_"
lucky_block:add_blocks({ lucky_block:add_blocks({
{"nod", "default:chest", 0, { {"nod", "default:chest", 0, {
{name = p.."light_blue", max = 20},
{name = p.."black", max = 20}, {name = p.."black", max = 20},
{name = p.."blue", max = 20}, {name = p.."blue", max = 20},
{name = p.."brown", max = 20}, {name = p.."brown", max = 20},
@ -423,5 +405,14 @@ end
end end
-- flowerpot mod
if minetest.get_modpath("flowerpot") then
flowerpot.register_node("bakedclay:delphinium")
flowerpot.register_node("bakedclay:thistle")
flowerpot.register_node("bakedclay:lazarus")
flowerpot.register_node("bakedclay:mannagrass")
end
print ("[MOD] Baked Clay loaded") print ("[MOD] Baked Clay loaded")

View file

@ -21,5 +21,6 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE. THE SOFTWARE.
Textures by D3monPixel (https://mcpedl.com/better-glazed-terracotta-pack) Textures by Amara2_MK (Creative Commons)
https://www.curseforge.com/minecraft/texture-packs/glazed-terracotta-revamp
baked_clay_terracotta*.png baked_clay_terracotta*.png

View file

@ -1,4 +1,4 @@
name = bakedclay name = bakedclay
depends = default depends = default
optional_depends = stairs, moreblocks, lucky_block, technic_cnc optional_depends = stairs, moreblocks, lucky_block, technic_cnc, flowerpot
description = Adds the ability to bake clay into blocks and colour them with dye. description = Adds the ability to bake clay into blocks and colour them with dye.

Binary file not shown.

Before

Width:  |  Height:  |  Size: 328 B

After

Width:  |  Height:  |  Size: 573 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 257 B

After

Width:  |  Height:  |  Size: 573 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 718 B

After

Width:  |  Height:  |  Size: 520 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 661 B

After

Width:  |  Height:  |  Size: 591 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 714 B

After

Width:  |  Height:  |  Size: 664 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 328 B

After

Width:  |  Height:  |  Size: 660 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 575 B

After

Width:  |  Height:  |  Size: 664 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 659 B

After

Width:  |  Height:  |  Size: 660 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 275 B

After

Width:  |  Height:  |  Size: 490 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 606 B

After

Width:  |  Height:  |  Size: 530 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 409 B

After

Width:  |  Height:  |  Size: 520 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 292 B

After

Width:  |  Height:  |  Size: 385 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 619 B

After

Width:  |  Height:  |  Size: 641 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 512 B

After

Width:  |  Height:  |  Size: 660 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 676 B

After

Width:  |  Height:  |  Size: 530 B

View file

@ -8,7 +8,7 @@ local use_cmi = minetest.global_exists("cmi")
mobs = { mobs = {
mod = "redo", mod = "redo",
version = "20210722", version = "20210801",
intllib = S, intllib = S,
invis = minetest.global_exists("invisibility") and invisibility or {} invis = minetest.global_exists("invisibility") and invisibility or {}
} }
@ -2703,6 +2703,12 @@ function mob_class:do_states(dtime)
local obj = minetest.add_entity(p, self.arrow) local obj = minetest.add_entity(p, self.arrow)
local ent = obj:get_luaentity() local ent = obj:get_luaentity()
local amount = (vec.x * vec.x + vec.y * vec.y + vec.z * vec.z) ^ 0.5 local amount = (vec.x * vec.x + vec.y * vec.y + vec.z * vec.z) ^ 0.5
-- check for custom override for arrow
if self.arrow_override then
self.arrow_override(ent)
end
local v = ent.velocity or 1 -- or set to default local v = ent.velocity or 1 -- or set to default
ent.switch = 1 ent.switch = 1
@ -3263,7 +3269,7 @@ function mob_class:mob_activate(staticdata, def, dtime)
self.object:set_texture_mod(self.texture_mods) self.object:set_texture_mod(self.texture_mods)
-- set 5.x flag to remove monsters when map area unloaded -- set 5.x flag to remove monsters when map area unloaded
if remove_far and self.type == "monster" then if remove_far and self.type == "monster" and not self.tamed then
self.static_save = false self.static_save = false
end end
@ -3573,6 +3579,7 @@ minetest.register_entity(name, setmetatable({
armor = def.armor, armor = def.armor,
on_rightclick = def.on_rightclick, on_rightclick = def.on_rightclick,
arrow = def.arrow, arrow = def.arrow,
arrow_override = def.arrow_override,
shoot_interval = def.shoot_interval, shoot_interval = def.shoot_interval,
sounds = def.sounds, sounds = def.sounds,
animation = def.animation, animation = def.animation,
@ -4693,6 +4700,7 @@ function mobs:feed_tame(self, clicker, feed_count, breed, tame)
end end
self.tamed = true self.tamed = true
self.static_save = true
if not self.owner or self.owner == "" then if not self.owner or self.owner == "" then
self.owner = clicker:get_player_name() self.owner = clicker:get_player_name()

View file

@ -123,6 +123,8 @@ functions needed for the mob to work properly which contains the following:
continue chasing. continue chasing.
'arrow' holds the pre-defined arrow object to shoot when 'arrow' holds the pre-defined arrow object to shoot when
attacking. attacking.
'arrow_override' function that allows tweaking of arrow entity from
inside mob definition (self) passed to function.
'dogshoot_switch' allows switching between attack types by using timers 'dogshoot_switch' allows switching between attack types by using timers
(1 for shoot, 2 for dogfight) (1 for shoot, 2 for dogfight)
'dogshoot_count_max' contains how many seconds before switching from 'dogshoot_count_max' contains how many seconds before switching from

View file

@ -23,6 +23,7 @@ Lucky Blocks: 9
Changelog: Changelog:
- 1.56 - Added arrow_override function to mob definition to tweak arrow entity settings, tamed monsters no longer despawn when outside loaded map area.
- 1.55 - Add 'peaceful_player' privelage and setting so mobs don't attack specific players (thanks sfence), add support for MarkBu's pathfinder mod, remove need for default mod - 1.55 - Add 'peaceful_player' privelage and setting so mobs don't attack specific players (thanks sfence), add support for MarkBu's pathfinder mod, remove need for default mod
- 1.54 - Simplified animal breeding function, added editable settings (thanks Wuzzy), Child mobs now take 20 mins to grow up, reverted to simple mob spawning with setting to use area checks, on_flop added, air_damage added. - 1.54 - Simplified animal breeding function, added editable settings (thanks Wuzzy), Child mobs now take 20 mins to grow up, reverted to simple mob spawning with setting to use area checks, on_flop added, air_damage added.
- 1.53 - Added 'on_map_load' settings to mobs:spawn so that mobs will only spawn when new areas of map are loaded. - 1.53 - Added 'on_map_load' settings to mobs:spawn so that mobs will only spawn when new areas of map are loaded.

View file

@ -1,17 +1,23 @@
# morelights # morelights
[![ContentDB](https://content.minetest.net/packages/random_geek/morelights/shields/downloads/)](https://content.minetest.net/packages/random_geek/morelights/) [![ContentDB](https://content.minetest.net/packages/random_geek/morelights/shields/downloads/)](https://content.minetest.net/packages/random_geek/morelights/)
[![](https://img.shields.io/badge/Minetest%20Forums-Morelights-4E9A06)](https://forum.minetest.net/viewtopic.php?f=11&t=21464)
Minetest mod adding additional lighting nodes. Minetest mod adding additional lighting nodes.
![Screenshot](screenshot.png) ![Screenshot](screenshot.png)
The Morelights modpack adds over 30 lighting and accessory nodes to suit various styles of builds, both interior and exterior. The Morelights modpack adds over 30 lighting and accessory nodes to suit
Includes basic light blocks, modern and historical-style lighting, and customizable street lamps. various styles of builds, both interior and exterior. Includes basic light
blocks, modern and historical-style lighting, and customizable street lamps.
Some nodes (ceiling lights, bar lights, poles) can be rotated to serve different purposes. The modpack is lightweight, with only about **60 kB** of media, including 3D
models.
The modpack currently supports both Minetest Game and MineClone 2. Some nodes (ceiling lights, bar lights, poles) can be rotated to serve
different purposes.
Morelights currently supports both Minetest Game and MineClone 2.
## Craft Recipes ## Craft Recipes
@ -19,5 +25,5 @@ Craft recipes for all items can be found in [crafts.md](crafts.md).
## Licenses ## Licenses
Source code is licensed under the LGPL v3.0 license. Source code is licensed under the LGPL v3.0 license. All other media and assets
All other media and assets are licensed under the CC BY-SA 4.0 license. are licensed under the CC BY-SA 4.0 license.

View file

@ -1,2 +1,2 @@
name = mp_morelights name = morelights
description = A lightweight modpack providing flexible interior and exterior lighting options for different styles of builds. description = A lightweight modpack providing flexible interior and exterior lighting options for different styles of builds.

Binary file not shown.

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

View file

@ -21,7 +21,12 @@ do
}, },
paramtype = "light", paramtype = "light",
light_source = 12, light_source = 12,
groups = {cracky = 2, oddly_breakable_by_hand = 3, handy = 1}, groups = {
cracky = 2,
oddly_breakable_by_hand = 3,
handy = 1,
soil = 1,
},
_mcl_hardness = 0.3, _mcl_hardness = 0.3,
sounds = morelights.sounds.glass sounds = morelights.sounds.glass
} }

View file

@ -1,100 +1,115 @@
# Processed with obj-simplify v1.1 (a2f5cd9) | 2021-08-06T18:42:48Z | https://github.com/jonnenauha/obj-simplify
# Blender v2.79 (sub 0) OBJ File: 'modern_can_2.blend' # Blender v2.79 (sub 0) OBJ File: 'modern_can_2.blend'
# www.blender.org # www.blender.org
o Cylinder_Cylinder.002
v -0.051777 -0.000000 -0.125000 # vertices [32]
v -0.051777 0.500000 -0.125000
v 0.051777 0.500000 -0.125000 v -0.051777 0 -0.125
v 0.051777 -0.000000 -0.125000 v -0.051777 0.5 -0.125
v 0.125000 -0.000000 0.051777 v 0.051777 0.5 -0.125
v 0.051777 -0.000000 0.125000 v 0.051777 0 -0.125
v -0.051777 -0.000000 0.125000 v 0.125 0 0.051777
v -0.125000 -0.000000 0.051777 v 0.051777 0 0.125
v -0.125000 -0.000000 -0.051777 v -0.051777 0 0.125
v -0.100000 -0.000000 -0.041421 v -0.125 0 0.051777
v -0.100000 -0.000000 0.041421 v -0.125 0 -0.051777
v -0.041421 -0.000000 0.100000 v -0.1 0 -0.041421
v 0.041421 -0.000000 0.100000 v -0.1 0 0.041421
v 0.100000 -0.000000 0.041421 v -0.041421 0 0.1
v 0.125000 -0.000000 -0.051777 v 0.041421 0 0.1
v 0.100000 -0.000000 -0.041421 v 0.1 0 0.041421
v 0.041421 -0.000000 -0.100000 v 0.125 0 -0.051777
v -0.041421 -0.000000 -0.100000 v 0.1 0 -0.041421
v -0.125000 0.500000 -0.051777 v 0.041421 0 -0.1
v -0.125000 0.500000 0.051777 v -0.041421 0 -0.1
v -0.051777 0.500000 0.125000 v -0.125 0.5 -0.051777
v 0.051777 0.500000 0.125000 v -0.125 0.5 0.051777
v 0.125000 0.500000 0.051777 v -0.051777 0.5 0.125
v 0.125000 0.500000 -0.051777 v 0.051777 0.5 0.125
v 0.041421 0.125000 -0.100000 v 0.125 0.5 0.051777
v -0.041421 0.125000 -0.100000 v 0.125 0.5 -0.051777
v -0.100000 0.125000 -0.041421 v 0.041421 0.125 -0.1
v 0.100000 0.125000 -0.041421 v -0.041421 0.125 -0.1
v 0.100000 0.125000 0.041421 v -0.1 0.125 -0.041421
v 0.041421 0.125000 0.100000 v 0.1 0.125 -0.041421
v -0.041421 0.125000 0.100000 v 0.1 0.125 0.041421
v -0.100000 0.125000 0.041421 v 0.041421 0.125 0.1
vt 0.375000 0.500000 v -0.041421 0.125 0.1
vt 0.375000 1.000000 v -0.1 0.125 0.041421
vt 0.250000 1.000000
vt 0.250000 0.500000 # normals [10]
vt 0.500000 0.500000
vt 0.500000 1.000000 vn 0 0 -1
vt 0.239277 0.937500 vn -0.7071 0 -0.7071
vt 0.135723 0.937500 vn 0 1 0
vt 0.062500 0.864257 vn 0.7071 0 -0.7071
vt 0.062500 0.760704 vn 1 0 0
vt 0.135723 0.687500 vn 0.7071 0 0.7071
vt 0.239277 0.687500 vn 0 0 1
vt 0.312500 0.760704 vn -0.7071 0 0.7071
vt 0.312500 0.864257 vn -1 0 0
vt 0.125000 1.000000 vn 0 -1 0
vt 0.125000 0.500000
vt 0.000000 1.000000 # uvs [52]
vt 0.000000 0.500000
vt 1.000000 0.500000 vt 0.375 0.5
vt 1.000000 1.000000 vt 0.375 1
vt 0.875000 1.000000 vt 0.25 1
vt 0.875000 0.500000 vt 0.25 0.5
vt 0.750000 1.000000 vt 0.5 0.5
vt 0.750000 0.500000 vt 0.5 1
vt 0.625000 1.000000 vt 0.239277 0.9375
vt 0.625000 0.500000 vt 0.135723 0.9375
vt 0.375000 0.437500 vt 0.0625 0.864257
vt 0.250000 0.437500 vt 0.0625 0.760704
vt 0.250000 0.312500 vt 0.135723 0.6875
vt 0.375000 0.312500 vt 0.239277 0.6875
vt 0.500000 0.437500 vt 0.3125 0.760704
vt 0.500000 0.312500 vt 0.3125 0.864257
vt 0.176777 0.000000 vt 0.125 1
vt 0.250000 0.073223 vt 0.125 0.5
vt 0.250000 0.176777 vt 0 1
vt 0.176777 0.250000 vt 0 0.5
vt 0.073223 0.250000 vt 1 0.5
vt 0.000000 0.176777 vt 1 1
vt 0.000000 0.073223 vt 0.875 1
vt 0.073223 0.000000 vt 0.875 0.5
vt 0.125000 0.437500 vt 0.75 1
vt 0.125000 0.312500 vt 0.75 0.5
vt 0.625000 0.437500 vt 0.625 1
vt 0.625000 0.312500 vt 0.625 0.5
vt 0.750000 0.437500 vt 0.375 0.4375
vt 0.750000 0.312500 vt 0.25 0.4375
vt 0.875000 0.437500 vt 0.25 0.3125
vt 0.875000 0.312500 vt 0.375 0.3125
vt 1.000000 0.437500 vt 0.5 0.4375
vt 1.000000 0.312500 vt 0.5 0.3125
vt 0.000000 0.437500 vt 0.176777 0
vt 0.000000 0.312500 vt 0.25 0.073223
vn 0.0000 0.0000 -1.0000 vt 0.25 0.176777
vn -0.7071 0.0000 -0.7071 vt 0.176777 0.25
vn 0.0000 1.0000 -0.0000 vt 0.073223 0.25
vn 0.7071 0.0000 -0.7071 vt 0 0.176777
vn 1.0000 0.0000 0.0000 vt 0 0.073223
vn 0.7071 0.0000 0.7071 vt 0.073223 0
vn -0.0000 0.0000 1.0000 vt 0.125 0.4375
vn -0.7071 0.0000 0.7071 vt 0.125 0.3125
vn -1.0000 0.0000 0.0000 vt 0.625 0.4375
vn 0.0000 -1.0000 0.0000 vt 0.625 0.3125
vt 0.75 0.4375
vt 0.75 0.3125
vt 0.875 0.4375
vt 0.875 0.3125
vt 1 0.4375
vt 1 0.3125
vt 0 0.4375
vt 0 0.3125
# objects [1]
o CanLight
s off s off
f 1/1/1 2/2/1 3/3/1 4/4/1 f 1/1/1 2/2/1 3/3/1 4/4/1
f 9/5/2 19/6/2 2/2/2 1/1/2 f 9/5/2 19/6/2 2/2/2 1/1/2
@ -122,3 +137,4 @@ f 14/49/10 5/19/10 6/22/10 13/47/10
f 13/47/10 6/22/10 7/24/10 12/45/10 f 13/47/10 6/22/10 7/24/10 12/45/10
f 7/24/10 8/26/10 11/43/10 12/45/10 f 7/24/10 8/26/10 11/43/10 12/45/10
f 11/43/10 8/26/10 9/5/10 10/31/10 f 11/43/10 8/26/10 9/5/10 10/31/10

View file

@ -1,204 +1,146 @@
# Blender v2.79 (sub 0) OBJ File: 'modern_tablelamp_joined.blend' # Processed with obj-simplify v1.1 (a2f5cd9) | 2021-08-06T06:56:07Z | https://github.com/jonnenauha/obj-simplify
# Blender v2.93.0 OBJ File: ''
# www.blender.org # www.blender.org
o support_Plane.001
v 0.031250 0.312500 0.031250 # vertices [44]
v 0.218750 0.312500 0.031250
v 0.031250 0.343750 0.000000 v -0.1875 -0.5 0.1875
v 0.218750 0.343750 0.000000 v -0.1875 -0.4375 0.1875
v 0.031250 0.312500 -0.031250 v -0.1875 -0.4375 -0.1875
v 0.218750 0.312500 -0.031250 v -0.1875 -0.5 -0.1875
v -0.218750 0.312500 0.031250 v 0.1875 -0.4375 -0.1875
v -0.031250 0.312500 0.031250 v 0.1875 -0.5 -0.1875
v -0.218750 0.343750 0.000000 v 0.1875 -0.4375 0.1875
v -0.031250 0.343750 0.000000 v 0.1875 -0.5 0.1875
v -0.218750 0.312500 -0.031250 v 0.03125 0.3125 0.03125
v -0.031250 0.312500 -0.031250 v 0.21875 0.3125 0.03125
vt 0.531250 0.468748 v 0.21875 0.34375 0
vt 0.718750 0.468748 v 0.03125 0.34375 0
vt 0.718750 0.499998 v 0.21875 0.3125 -0.03125
vt 0.531250 0.499998 v 0.03125 0.3125 -0.03125
vt 0.718750 0.531248 v -0.21875 0.3125 0.03125
vt 0.531250 0.531248 v -0.03125 0.3125 0.03125
vt 0.281250 0.468748 v -0.03125 0.34375 0
vt 0.468750 0.468748 v -0.21875 0.34375 0
vt 0.468750 0.499998 v -0.03125 0.3125 -0.03125
vt 0.281250 0.499998 v -0.21875 0.3125 -0.03125
vt 0.468750 0.531248 v -0.03125 -0.4375 0.03125
vt 0.281250 0.531248 v -0.03125 0.375 0.03125
vn 0.0000 0.7071 0.7071 v -0.03125 0.375 -0.03125
vn 0.0000 0.7071 -0.7071 v -0.03125 -0.4375 -0.03125
g Material.000 v 0.03125 0.375 -0.03125
s off v 0.03125 -0.4375 -0.03125
f 1/1/1 2/2/1 4/3/1 3/4/1 v 0.03125 0.375 0.03125
f 3/4/2 4/3/2 6/5/2 5/6/2 v 0.03125 -0.4375 0.03125
f 7/7/1 8/8/1 10/9/1 9/10/1 v -0.25 -0.0625 0.25
f 9/10/2 10/9/2 12/11/2 11/12/2 v -0.25 0.4375 0.25
o pole_Cube.007 v -0.25 0.4375 -0.25
v -0.031250 -0.437500 0.031250 v -0.25 -0.0625 -0.25
v -0.031250 0.375000 0.031250 v 0.25 0.4375 -0.25
v -0.031250 -0.437500 -0.031250 v 0.25 -0.0625 -0.25
v -0.031250 0.375000 -0.031250 v 0.25 0.4375 0.25
v 0.031250 -0.437500 0.031250 v 0.25 -0.0625 0.25
v 0.031250 0.375000 0.031250 v -0.21875 -0.0625 -0.21875
v 0.031250 -0.437500 -0.031250 v -0.21875 0.4375 -0.21875
v 0.031250 0.375000 -0.031250 v 0.21875 0.4375 -0.21875
vt 0.312500 0.062500 v 0.21875 -0.0625 -0.21875
vt 0.312500 0.875000 v -0.21875 -0.0625 0.21875
vt 0.250000 0.875000 v -0.21875 0.4375 0.21875
vt 0.250000 0.062500 v 0.21875 0.4375 0.21875
vt 0.312500 0.062500 v 0.21875 -0.0625 0.21875
vt 0.312500 0.875000
vt 0.250000 0.875000 # normals [8]
vt 0.250000 0.062500
vt 0.312500 0.062500 vn -1 0 0
vt 0.312500 0.875000 vn 0 0 -1
vt 0.250000 0.875000 vn 1 0 0
vt 0.250000 0.062500 vn 0 0 1
vt 0.312501 0.062500 vn 0 -1 0
vt 0.312499 0.875000 vn 0 1 0
vt 0.250000 0.875000 vn 0 0.7071 0.7071
vt 0.250000 0.062500 vn 0 0.7071 -0.7071
vt 0.312500 0.531250
vt 0.250000 0.531250 # uvs [39]
vt 0.250000 0.468750
vt 0.312500 0.468750 vt 0.3125 0.0625
vn -1.0000 0.0000 0.0000 vt 0.3125 0
vn 0.0000 0.0000 -1.0000 vt 0.6875 0
vn 1.0000 0.0000 0.0000 vt 0.6875 0.0625
vn 0.0000 0.0000 1.0000 vt 0.6875 0.3125
vn 0.0000 1.0000 0.0000 vt 0.6875 0.6875
g Material.000 vt 0.3125 0.6875
s off vt 0.3125 0.3125
f 13/13/3 14/14/3 16/15/3 15/16/3 vt 0.53125 0.46875
f 15/17/4 16/18/4 20/19/4 19/20/4 vt 0.71875 0.46875
f 19/21/5 20/22/5 18/23/5 17/24/5 vt 0.71875 0.5
f 17/25/6 18/26/6 14/27/6 13/28/6 vt 0.53125 0.5
f 20/29/7 16/30/7 14/31/7 18/32/7 vt 0.71875 0.53125
o base_Cube.006 vt 0.53125 0.53125
v -0.187500 -0.500000 0.187500 vt 0.28125 0.46875
v -0.187500 -0.437500 0.187500 vt 0.46875 0.46875
v -0.187500 -0.500000 -0.187500 vt 0.46875 0.5
v -0.187500 -0.437500 -0.187500 vt 0.28125 0.5
v 0.187500 -0.500000 0.187500 vt 0.46875 0.53125
v 0.187500 -0.437500 0.187500 vt 0.28125 0.53125
v 0.187500 -0.500000 -0.187500 vt 0.3125 0.875
v 0.187500 -0.437500 -0.187500 vt 0.25 0.875
vt 0.312500 0.062500 vt 0.25 0.0625
vt 0.312500 0.000000 vt 0.3125 0.53125
vt 0.687500 0.000000 vt 0.25 0.53125
vt 0.687500 0.062500 vt 0.25 0.46875
vt 0.312500 0.062500 vt 0.3125 0.46875
vt 0.312500 0.000000 vt 0 0
vt 0.687500 0.000000 vt 0 1
vt 0.687500 0.062500 vt 1 1
vt 0.687500 0.000000 vt 1 0
vt 0.687500 0.062500 vt 0.0625 0
vt 0.312500 0.062500 vt 0.0625 1
vt 0.312500 0.000000 vt 0.9375 1
vt 0.687500 0.000000 vt 0.9375 0
vt 0.687500 0.062500 vt 0.9375 0.0625
vt 0.312500 0.062500 vt 0.0625 0.0625
vt 0.312500 0.000000 vt 0.0625 0.9375
vt 0.687500 0.312500 vt 0.9375 0.9375
vt 0.687500 0.687500
vt 0.312500 0.687500 # objects [2]
vt 0.312500 0.312500
vt 0.687500 0.312500 g LampBase
vt 0.687500 0.687500
vt 0.312500 0.687500 s 1
vt 0.312500 0.312500 f 1/1/1 2/2/1 3/3/1 4/4/1
vn -1.0000 0.0000 0.0000 f 4/1/2 3/2/2 5/3/2 6/4/2
vn 0.0000 0.0000 -1.0000 f 6/3/3 5/4/3 7/1/3 8/2/3
vn 1.0000 0.0000 0.0000 f 8/3/4 7/4/4 2/1/4 1/2/4
vn 0.0000 0.0000 1.0000 f 4/5/5 6/6/5 8/7/5 1/8/5
vn 0.0000 -1.0000 0.0000 f 5/5/6 3/6/6 2/7/6 7/8/6
vn 0.0000 1.0000 0.0000 f 9/9/7 10/10/7 11/11/7 12/12/7
g Material.000 f 12/12/8 11/11/8 13/13/8 14/14/8
s off f 15/15/7 16/16/7 17/17/7 18/18/7
f 21/33/8 22/34/8 24/35/8 23/36/8 f 18/18/8 17/17/8 19/19/8 20/20/8
f 23/37/9 24/38/9 28/39/9 27/40/9 f 21/1/1 22/21/1 23/22/1 24/23/1
f 27/41/10 28/42/10 26/43/10 25/44/10 f 24/1/2 23/21/2 25/22/2 26/23/2
f 25/45/11 26/46/11 22/47/11 21/48/11 f 26/1/3 25/21/3 27/22/3 28/23/3
f 23/49/12 27/50/12 25/51/12 21/52/12 f 28/1/4 27/21/4 22/22/4 21/23/4
f 28/53/13 24/54/13 22/55/13 26/56/13 f 25/24/6 23/25/6 22/26/6 27/27/6
o shade_Cube.005
v -0.250000 -0.062500 0.250000 g LampShade
v -0.250000 0.437500 0.250000
v -0.250000 -0.062500 -0.250000 s 1
v -0.250000 0.437500 -0.250000 f 29/28/1 30/29/1 31/30/1 32/31/1
v 0.250000 -0.062500 0.250000 f 32/28/2 31/29/2 33/30/2 34/31/2
v 0.250000 0.437500 0.250000 f 34/31/3 33/30/3 35/29/3 36/28/3
v 0.250000 -0.062500 -0.250000 f 36/31/4 35/30/4 30/29/4 29/28/4
v 0.250000 0.437500 -0.250000 f 37/32/2 38/33/2 39/34/2 40/35/2
v -0.218750 -0.062500 0.218750 f 41/32/1 42/33/1 38/34/1 37/35/1
v -0.218750 0.437500 0.218750 f 40/32/3 39/33/3 43/34/3 44/35/3
v -0.218750 -0.062500 -0.218750 f 44/32/4 43/33/4 42/34/4 41/35/4
v -0.218750 0.437500 -0.218750 f 30/28/6 35/31/6 43/36/6 42/37/6
v 0.218750 -0.062500 0.218750 f 31/29/6 30/28/6 42/37/6 38/38/6
v 0.218750 0.437500 0.218750 f 33/30/6 31/29/6 38/38/6 39/39/6
v 0.218750 -0.062500 -0.218750 f 35/31/6 33/30/6 39/39/6 43/36/6
v 0.218750 0.437500 -0.218750 f 29/29/5 32/28/5 37/37/5 41/38/5
vt 0.000000 0.000000 f 32/28/5 34/31/5 40/36/5 37/37/5
vt 0.000000 1.000000 f 34/31/5 36/30/5 44/39/5 40/36/5
vt 1.000000 1.000000 f 36/30/5 29/29/5 41/38/5 44/39/5
vt 1.000000 0.000000
vt 0.000000 0.000000
vt 0.000000 1.000000
vt 1.000000 1.000000
vt 1.000000 0.000000
vt 0.000000 1.000000
vt 0.000000 0.000000
vt 1.000000 0.000000
vt 1.000000 1.000000
vt 0.062500 0.000000
vt 0.062500 1.000000
vt 0.937500 1.000000
vt 0.937500 0.000000
vt 0.062500 0.000000
vt 0.062500 1.000000
vt 0.937500 1.000000
vt 0.937500 0.000000
vt 0.062500 0.000000
vt 0.062500 1.000000
vt 0.937500 1.000000
vt 0.937500 0.000000
vt 0.062500 0.000000
vt 0.062500 1.000000
vt 0.937500 1.000000
vt 0.937500 0.000000
vt 0.000000 0.000000
vt 1.000000 0.000000
vt 0.937500 0.062500
vt 0.062500 0.062500
vt 0.062500 0.937500
vt 0.937500 0.937500
vt 0.000000 1.000000
vt 0.062500 0.062500
vt 0.062500 0.937500
vt 0.937500 0.062500
vt 1.000000 1.000000
vt 0.937500 0.937500
vn -1.0000 0.0000 0.0000
vn 0.0000 0.0000 -1.0000
vn 1.0000 0.0000 0.0000
vn 0.0000 0.0000 1.0000
vn 0.0000 1.0000 0.0000
vn 0.0000 -1.0000 0.0000
g Material.001
s off
f 29/57/14 30/58/14 32/59/14 31/60/14
f 31/61/15 32/62/15 36/63/15 35/64/15
f 35/64/16 36/63/16 34/65/16 33/66/16
f 33/67/17 34/68/17 30/58/17 29/57/17
f 39/69/15 40/70/15 44/71/15 43/72/15
f 37/73/14 38/74/14 40/75/14 39/76/14
f 43/77/16 44/78/16 42/79/16 41/80/16
f 41/81/17 42/82/17 38/83/17 37/84/17
f 30/85/18 34/86/18 42/87/18 38/88/18
f 32/62/18 30/85/18 38/88/18 40/89/18
f 36/63/18 32/62/18 40/89/18 44/90/18
f 34/86/18 36/63/18 44/90/18 42/87/18
f 29/91/19 31/61/19 39/92/19 37/93/19
f 31/61/19 35/64/19 43/94/19 39/92/19
f 35/64/19 33/95/19 41/96/19 43/94/19
f 33/95/19 29/91/19 37/93/19 41/96/19

View file

@ -1,132 +1,115 @@
# Blender v2.79 (sub 0) OBJ File: 'walllamp.blend' # Processed with obj-simplify v1.1 (a2f5cd9) | 2021-08-06T19:07:59Z | https://github.com/jonnenauha/obj-simplify
# Blender v2.93.0 OBJ File: ''
# www.blender.org # www.blender.org
o Cube.003
v 0.031250 -0.343750 0.437500 # vertices [28]
v 0.031250 -0.281250 0.437500
v -0.031250 -0.343750 0.437500 v 0.125 -0.25 0.375
v -0.031250 -0.281250 0.437500 v 0.125 0.25 0.375
v 0.031250 -0.343750 0.218750 v -0.125 0.25 0.375
v 0.031250 -0.281250 0.281250 v -0.125 -0.25 0.375
v -0.031250 -0.343750 0.218750 v -0.125 0.25 0.125
v -0.031250 -0.281250 0.281250 v -0.125 -0.25 0.125
v 0.031250 -0.250000 0.218750 v 0.125 0.25 0.125
v 0.031250 -0.250000 0.281250 v 0.125 -0.25 0.125
v -0.031250 -0.250000 0.218750 v -0.03125 -0.34375 0.4375
v -0.031250 -0.250000 0.281250 v -0.03125 -0.28125 0.4375
vt 0.031250 0.062500 v -0.03125 -0.28125 0.28125
vt 0.031250 0.125000 v -0.03125 -0.34375 0.21875
vt 0.187500 0.125000 v -0.03125 -0.25 0.28125
vt 0.250000 0.062500 v -0.03125 -0.25 0.21875
vt 0.187500 0.156250 v 0.03125 -0.34375 0.21875
vt 0.250000 0.156250 v 0.03125 -0.28125 0.28125
vt 0.250000 0.062500 v 0.03125 -0.28125 0.4375
vt 0.187500 0.125000 v 0.03125 -0.34375 0.4375
vt 0.031250 0.125000 v 0.03125 -0.25 0.21875
vt 0.031250 0.062500 v 0.03125 -0.25 0.28125
vt 0.250000 0.000000 v 0.125 -0.375 0.5
vt 0.031250 0.000000 v 0.125 0.125 0.5
vt 0.187500 0.250000 v -0.125 0.125 0.5
vt 0.031250 0.250000 v -0.125 -0.375 0.5
vt 0.031250 0.187500 v -0.125 0.125 0.4375
vt 0.187500 0.187500 v -0.125 -0.375 0.4375
vt 0.250000 0.156250 v 0.125 0.125 0.4375
vt 0.187500 0.156250 v 0.125 -0.375 0.4375
vt 0.343750 0.062500
vt 0.343750 0.000000 # normals [6]
vt 0.218750 0.187500
vt 0.218750 0.250000 vn 0 0 1
vn -1.0000 -0.0000 -0.0000 vn -1 0 0
vn 1.0000 -0.0000 0.0000 vn 0 0 -1
vn 0.0000 -1.0000 -0.0000 vn 1 0 0
vn 0.0000 1.0000 -0.0000 vn 0 -1 0
vn 0.0000 0.0000 -1.0000 vn 0 1 0
vn 0.0000 0.0000 1.0000
s off # uvs [41]
f 3/1/1 4/2/1 8/3/1 7/4/1
f 7/4/1 8/3/1 12/5/1 11/6/1 vt 1 0.5
f 5/7/2 6/8/2 2/9/2 1/10/2 vt 1 1
f 3/1/3 7/4/3 5/11/3 1/12/3 vt 0.75 1
f 8/13/4 4/14/4 2/15/4 6/16/4 vt 0.75 0.5
f 6/8/2 5/7/2 9/17/2 10/18/2 vt 0.5 1
f 5/11/5 7/4/5 11/19/5 9/20/5 vt 0.5 0.5
f 8/13/6 6/16/6 10/21/6 12/22/6 vt 0.25 1
o Cube.002 vt 0.25 0.5
v 0.125000 -0.375000 0.500000 vt 0 1
v 0.125000 0.125000 0.500000 vt 0 0.5
v -0.125000 -0.375000 0.500000 vt 0 0.25
v -0.125000 0.125000 0.500000 vt 0.25 0.25
v 0.125000 -0.375000 0.437500 vt 0.03125 0.0625
v 0.125000 0.125000 0.437500 vt 0.03125 0.125
v -0.125000 -0.375000 0.437500 vt 0.1875 0.125
v -0.125000 0.125000 0.437500 vt 0.25 0.0625
vt 0.937500 0.000000 vt 0.1875 0.15625
vt 0.937500 0.500000 vt 0.25 0.15625
vt 0.687500 0.500000 vt 0.25 0
vt 0.687500 0.000000 vt 0.03125 0
vt 0.625000 0.500000 vt 0.1875 0.25
vt 0.625000 0.000000 vt 0.03125 0.25
vt 0.375000 0.500000 vt 0.03125 0.1875
vt 0.375000 0.000000 vt 0.1875 0.1875
vt 0.312500 0.500000 vt 0.34375 0.0625
vt 0.312500 0.000000 vt 0.34375 0
vt 0.937500 0.250000 vt 0.21875 0.1875
vt 1.000000 0.250000 vt 0.21875 0.25
vt 1.000000 0.500000 vt 0.9375 0
vt 0.937500 0.500000 vt 0.9375 0.5
vt 0.937500 0.000000 vt 0.6875 0.5
vt 1.000000 0.000000 vt 0.6875 0
vt 1.000000 0.250000 vt 0.625 0.5
vt 0.937500 0.250000 vt 0.625 0
vn 0.0000 0.0000 1.0000 vt 0.375 0.5
vn -1.0000 0.0000 0.0000 vt 0.375 0
vn 0.0000 0.0000 -1.0000 vt 0.3125 0.5
vn 1.0000 0.0000 0.0000 vt 0.3125 0
vn 0.0000 -1.0000 0.0000 vt 0.9375 0.25
vn 0.0000 1.0000 0.0000 vt 1 0.25
s off vt 1 0
f 13/23/7 14/24/7 16/25/7 15/26/7
f 15/26/8 16/25/8 20/27/8 19/28/8 # objects [1]
f 19/28/9 20/27/9 18/29/9 17/30/9
f 17/30/10 18/29/10 14/31/10 13/32/10 o WallLamp
f 15/33/11 19/34/11 17/35/11 13/36/11
f 20/37/12 16/38/12 14/39/12 18/40/12 s 1
o Cube.001 f 1/1/1 2/2/1 3/3/1 4/4/1
v 0.125000 -0.250000 0.375000 f 4/4/2 3/3/2 5/5/2 6/6/2
v 0.125000 0.250000 0.375000 f 6/6/3 5/5/3 7/7/3 8/8/3
v -0.125000 -0.250000 0.375000 f 8/8/4 7/7/4 2/9/4 1/10/4
v -0.125000 0.250000 0.375000 f 4/8/5 6/10/5 8/11/5 1/12/5
v 0.125000 -0.250000 0.125000 f 5/8/6 3/10/6 2/11/6 7/12/6
v 0.125000 0.250000 0.125000 f 9/13/2 10/14/2 11/15/2 12/16/2
v -0.125000 -0.250000 0.125000 f 12/16/2 11/15/2 13/17/2 14/18/2
v -0.125000 0.250000 0.125000 f 15/16/4 16/15/4 17/14/4 18/13/4
vt 1.000000 0.500000 f 9/13/5 12/16/5 15/19/5 18/20/5
vt 1.000000 1.000000 f 11/21/6 10/22/6 17/23/6 16/24/6
vt 0.750000 1.000000 f 16/15/4 15/16/4 19/18/4 20/17/4
vt 0.750000 0.500000 f 15/19/3 12/16/3 14/25/3 19/26/3
vt 0.500000 1.000000 f 11/21/1 16/24/1 20/27/1 13/28/1
vt 0.500000 0.500000 f 21/29/1 22/30/1 23/31/1 24/32/1
vt 0.250000 1.000000 f 24/32/2 23/31/2 25/33/2 26/34/2
vt 0.250000 0.500000 f 26/34/3 25/33/3 27/35/3 28/36/3
vt 0.000000 1.000000 f 28/36/4 27/35/4 22/37/4 21/38/4
vt 0.000000 0.500000 f 24/39/5 26/40/5 28/1/5 21/30/5
vt 0.250000 0.500000 f 25/29/6 23/41/6 22/40/6 27/39/6
vt 0.000000 0.500000
vt 0.000000 0.250000
vt 0.250000 0.250000
vt 0.250000 0.500000
vt 0.000000 0.500000
vt 0.000000 0.250000
vt 0.250000 0.250000
vn 0.0000 0.0000 1.0000
vn -1.0000 0.0000 -0.0000
vn 0.0000 0.0000 -1.0000
vn 1.0000 0.0000 0.0000
vn 0.0000 -1.0000 0.0000
vn 0.0000 1.0000 0.0000
s off
f 21/41/13 22/42/13 24/43/13 23/44/13
f 23/44/14 24/43/14 28/45/14 27/46/14
f 27/46/15 28/45/15 26/47/15 25/48/15
f 25/48/16 26/47/16 22/49/16 21/50/16
f 23/51/17 27/52/17 25/53/17 21/54/17
f 28/55/18 24/56/18 22/57/18 26/58/18

Binary file not shown.

Before

Width:  |  Height:  |  Size: 125 B

After

Width:  |  Height:  |  Size: 112 B

View file

@ -97,6 +97,7 @@ minetest.register_node("morelights_vintage:smallblock", {
"morelights_vintage_block.png", "morelights_vintage_block.png",
"[combine:16x16:0,4=morelights_vintage_block.png" "[combine:16x16:0,4=morelights_vintage_block.png"
}, },
use_texture_alpha = "opaque",
paramtype = "light", paramtype = "light",
paramtype2 = "facedir", paramtype2 = "facedir",
sunlight_propagates = true, sunlight_propagates = true,
@ -118,6 +119,7 @@ minetest.register_node("morelights_vintage:lantern_f", {
"morelights_vintage_lantern.png", "morelights_vintage_lantern.png",
"morelights_metal_dark_32.png" "morelights_metal_dark_32.png"
}, },
use_texture_alpha = "opaque",
collision_box = { collision_box = {
type = "fixed", type = "fixed",
fixed = {-3/16, -1/2, -3/16, 3/16, 1/16, 3/16} fixed = {-3/16, -1/2, -3/16, 3/16, 1/16, 3/16}
@ -160,6 +162,7 @@ minetest.register_node("morelights_vintage:lantern_c", {
"morelights_vintage_lantern.png", "morelights_vintage_lantern.png",
"morelights_metal_dark_32.png" "morelights_metal_dark_32.png"
}, },
use_texture_alpha = "opaque",
collision_box = { collision_box = {
type = "fixed", type = "fixed",
fixed = {-3/16, -1/16, -3/16, 3/16, 1/2, 3/16} fixed = {-3/16, -1/16, -3/16, 3/16, 1/2, 3/16}
@ -185,6 +188,7 @@ minetest.register_node("morelights_vintage:lantern_w", {
"morelights_vintage_lantern.png", "morelights_vintage_lantern.png",
"morelights_metal_dark_32.png" "morelights_metal_dark_32.png"
}, },
use_texture_alpha = "clip",
collision_box = { collision_box = {
type = "fixed", type = "fixed",
fixed = {-3/16, -1/4, -5/16, 3/16, 1/8, 3/16} fixed = {-3/16, -1/4, -5/16, 3/16, 1/8, 3/16}
@ -214,7 +218,7 @@ minetest.register_node("morelights_vintage:hangingbulb", {
}, },
inventory_image = "morelights_vintage_hangingbulb_inv.png", inventory_image = "morelights_vintage_hangingbulb_inv.png",
wield_image = "morelights_vintage_hangingbulb_inv.png", wield_image = "morelights_vintage_hangingbulb_inv.png",
use_texture_alpha = true, use_texture_alpha = "blend",
collision_box = { collision_box = {
type = "fixed", type = "fixed",
fixed = {-1/8, -1/8, -1/8, 1/8, 1/2, 1/8} fixed = {-1/8, -1/8, -1/8, 1/8, 1/2, 1/8}
@ -248,6 +252,7 @@ minetest.register_node("morelights_vintage:oillamp", {
"morelights_vintage_oillamp.png", "morelights_vintage_oillamp.png",
"morelights_vintage_brass_32.png" "morelights_vintage_brass_32.png"
}, },
use_texture_alpha = "clip",
collision_box = { collision_box = {
type = "fixed", type = "fixed",
fixed = {-1/8, -1/2, -1/8, 1/8, 1/4, 1/8} fixed = {-1/8, -1/2, -1/8, 1/8, 1/4, 1/8}
@ -272,6 +277,7 @@ minetest.register_node("morelights_vintage:chandelier", {
"morelights_vintage_chandelier.png", "morelights_vintage_chandelier.png",
"morelights_vintage_brass_32.png^[multiply:#DFDFDF" "morelights_vintage_brass_32.png^[multiply:#DFDFDF"
}, },
use_texture_alpha = "clip",
collision_box = { collision_box = {
type = "fixed", type = "fixed",
fixed = {-3/8, -1/2, -3/8, 3/8, 1/2, 3/8} fixed = {-3/8, -1/2, -3/8, 3/8, 1/2, 3/8}

View file

@ -1,79 +1,86 @@
# Blender v2.79 (sub 0) OBJ File: 'vintage_chandelier.blend' # Processed with obj-simplify v1.1 (a2f5cd9) | 2021-08-06T19:28:47Z | https://github.com/jonnenauha/obj-simplify
# Blender v2.93.0 OBJ File: ''
# www.blender.org # www.blender.org
o Plane.001_Plane.005
v 0.250000 -0.500000 -0.433013 # vertices [22]
v -0.250000 -0.500000 0.433013
v 0.250000 0.500000 -0.433013 v 0.25 -0.5 -0.433013
v -0.250000 0.500000 0.433013 v 0 -0.5 0
v -0.250000 -0.500000 -0.433013 v 0 0.5 0
v 0.250000 -0.500000 0.433013 v 0.25 0.5 -0.433013
v -0.250000 0.500000 -0.433013 v -0.25 -0.5 -0.433013
v 0.250000 0.500000 0.433013 v -0.25 0.5 -0.433013
v 0.500000 -0.500000 0.000000 v 0.5 -0.5 0
v -0.500000 -0.500000 0.000000 v 0.5 0.5 0
v 0.500000 0.500000 -0.000000 v -0.25 -0.5 0.433013
v -0.500000 0.500000 0.000000 v -0.25 0.5 0.433013
v 0.000000 -0.500000 0.000000 v 0.25 -0.5 0.433013
v -0.000000 0.500000 -0.000000 v 0.25 0.5 0.433013
vt 0.000000 0.000000 v -0.5 -0.5 0
vt 0.500000 0.000000 v -0.5 0.5 0
vt 0.500000 1.000000 v 0.03125 -0.375 -0.03125
vt 0.000000 1.000000 v 0.03125 -0.375 0.03125
vt 0.000000 0.000000 v -0.03125 -0.375 0.03125
vt 0.000000 1.000000 v -0.03125 -0.375 -0.03125
vt 0.000000 0.000000 v 0.03125 0.5 -0.03125
vt 0.000000 1.000000 v -0.03125 0.5 -0.03125
vt 1.000000 0.000000 v -0.03125 0.5 0.03125
vt 1.000000 1.000000 v 0.03125 0.5 0.03125
vt 1.000000 0.000000
vt 1.000000 1.000000 # normals [8]
vt 1.000000 0.000000
vt 1.000000 1.000000 vn -0.866 0 -0.5
vn -0.8660 -0.0000 -0.5000 vn -0.866 0 0.5
vn -0.8660 -0.0000 0.5000 vn 0 0 -1
vn -0.0000 -0.0000 -1.0000 vn 0 -1 0
g Plane.001_Plane.005_Material.001 vn 0 1 0
s off vn 1 0 0
f 1/1/1 13/2/1 14/3/1 3/4/1 vn 0 0 1
f 5/5/2 13/2/2 14/3/2 7/6/2 vn -1 0 0
f 9/7/3 13/2/3 14/3/3 11/8/3
f 14/3/1 13/2/1 2/9/1 4/10/1 # uvs [20]
f 14/3/2 13/2/2 6/11/2 8/12/2
f 14/3/3 13/2/3 10/13/3 12/14/3 vt 0 0
o Cube vt 0.5 0
v 0.031250 -0.375000 -0.031250 vt 0.5 1
v 0.031250 -0.375000 0.031250 vt 0 1
v -0.031250 -0.375000 0.031250 vt 1 0
v -0.031250 -0.375000 -0.031250 vt 1 1
v 0.031250 0.500000 -0.031250 vt 0.4375 0.0625
v 0.031250 0.500000 0.031250 vt 0.375 0.0625
v -0.031250 0.500000 0.031250 vt 0.375 0
v -0.031250 0.500000 -0.031250 vt 0.4375 0
vt 0.437500 0.062500 vt 0.4375 0.9375
vt 0.375000 0.062500 vt 0.4375 1
vt 0.375000 0.000000 vt 0.375 1
vt 0.437500 0.000000 vt 0.375 0.9375
vt 0.437500 0.937500 vt 0.625 0.0625
vt 0.437500 1.000000 vt 0.625 0.9375
vt 0.375000 1.000000 vt 0.5625 0.9375
vt 0.375000 0.937500 vt 0.5625 0.0625
vt 0.625000 0.062500 vt 0.5 0.9375
vt 0.625000 0.937500 vt 0.5 0.0625
vt 0.562500 0.937500
vt 0.562500 0.062500 # objects [2]
vt 0.500000 0.937500
vt 0.500000 0.062500 g Chandelier
vn 0.0000 -1.0000 0.0000
vn 0.0000 1.0000 0.0000 s 1
vn 1.0000 0.0000 0.0000 f 1/1/1 2/2/1 3/3/1 4/4/1
vn -0.0000 -0.0000 1.0000 f 5/1/2 2/2/2 3/3/2 6/4/2
vn -1.0000 -0.0000 -0.0000 f 7/1/3 2/2/3 3/3/3 8/4/3
vn 0.0000 0.0000 -1.0000 f 3/3/1 2/2/1 9/5/1 10/6/1
g Cube_Cube_Material f 3/3/2 2/2/2 11/5/2 12/6/2
s off f 3/3/3 2/2/3 13/5/3 14/6/3
f 15/15/4 16/16/4 17/17/4 18/18/4
f 19/19/5 22/20/5 21/21/5 20/22/5 g Pole
f 15/15/6 19/19/6 20/22/6 16/16/6
f 16/23/7 20/24/7 21/25/7 17/26/7 s 1
f 17/26/8 21/25/8 22/27/8 18/28/8 f 15/7/4 16/8/4 17/9/4 18/10/4
f 19/19/9 15/15/9 18/28/9 22/27/9 f 19/11/5 20/12/5 21/13/5 22/14/5
f 15/7/6 19/11/6 22/14/6 16/8/6
f 16/15/7 22/16/7 21/17/7 17/18/7
f 17/18/8 21/17/8 20/19/8 18/20/8
f 19/11/3 15/7/3 18/20/3 20/19/3

View file

@ -1,108 +1,57 @@
# Blender v2.79 (sub 0) OBJ File: 'bulb.blend' # Processed with obj-simplify v1.1 (a2f5cd9) | 2021-08-06T20:35:12Z | https://github.com/jonnenauha/obj-simplify
# Blender v2.93.0 OBJ File: ''
# www.blender.org # www.blender.org
o Cube_Cube.009
v -0.031250 0.093750 0.031250 # vertices [38]
v -0.031250 0.343750 0.031250
v -0.031250 0.093750 -0.031250 v -0.03125 0.34375 -0.03125
v -0.031250 0.343750 -0.031250 v -0.03125 0.09375 -0.03125
v 0.031250 0.093750 0.031250 v 0 0.09375 0
v 0.031250 0.343750 0.031250 v 0 0.34375 0
v 0.031250 0.093750 -0.031250 v -0.03125 0.09375 0.03125
v 0.031250 0.343750 -0.031250 v -0.03125 0.34375 0.03125
v 0.000000 0.343750 0.000000 v 0.03125 0.09375 0.03125
v 0.000000 0.093750 0.000000 v 0.03125 0.34375 0.03125
vt 0.000000 1.000000 v 0.03125 0.34375 -0.03125
vt 0.000000 0.750000 v 0.03125 0.09375 -0.03125
vt 0.031251 0.750000 v 0.0625 0.03125 0.09375
vt 0.031249 1.000000 v 0.0625 0.3125 0.09375
vt 0.062501 0.750000 v -0.0625 0.3125 0.09375
vt 0.062499 1.000000 v -0.0625 0.03125 0.09375
vt 0.000000 0.750000 v 0.09375 0.03125 -0.0625
vt 0.000000 1.000000 v 0.09375 0.3125 -0.0625
vt 0.062499 1.000000 v 0.09375 0.3125 0.0625
vt 0.062501 0.750000 v 0.09375 0.03125 0.0625
vn -0.7071 0.0000 0.7071 v -0.09375 0.03125 0.0625
vn -0.7071 0.0000 -0.7071 v -0.09375 0.3125 0.0625
s off v -0.09375 0.3125 -0.0625
f 4/1/1 3/2/1 10/3/1 9/4/1 v -0.09375 0.03125 -0.0625
f 1/5/2 2/6/2 9/4/2 10/3/2 v -0.0625 0.03125 -0.09375
f 9/4/1 10/3/1 5/7/1 6/8/1 v -0.0625 0.3125 -0.09375
f 10/3/2 9/4/2 8/9/2 7/10/2 v 0.0625 0.3125 -0.09375
o Cube.002_Cube.007 v 0.0625 0.03125 -0.09375
v -0.062500 0.000000 0.062500 v -0.0625 0 0.0625
v -0.062500 0.031250 0.093750 v -0.0625 0.34375 0.0625
v -0.093750 0.031250 0.062500 v -0.0625 0 -0.0625
v -0.062500 0.312500 0.093750 v -0.0625 0.34375 -0.0625
v -0.062500 0.343750 0.062500 v 0.0625 0 0.0625
v -0.093750 0.312500 0.062500 v 0.0625 0.34375 0.0625
v -0.062500 0.000000 -0.062500 v 0.0625 0 -0.0625
v -0.093750 0.031250 -0.062500 v 0.0625 0.34375 -0.0625
v -0.062500 0.031250 -0.093750 v -0.0625 0.5 0.0625
v -0.062500 0.343750 -0.062500 v -0.0625 0.5 -0.0625
v -0.062500 0.312500 -0.093750 v 0.0625 0.5 -0.0625
v -0.093750 0.312500 -0.062500 v 0.0625 0.5 0.0625
v 0.062500 0.000000 0.062500
v 0.093750 0.031250 0.062500 # normals [26]
v 0.062500 0.031250 0.093750
v 0.062500 0.343750 0.062500 vn -0.7071 0 0.7071
v 0.062500 0.312500 0.093750 vn -0.7071 0 -0.7071
v 0.093750 0.312500 0.062500 vn 0 0 1
v 0.062500 0.000000 -0.062500 vn 1 0 0
v 0.062500 0.031250 -0.093750 vn -1 0 0
v 0.093750 0.031250 -0.062500 vn 0 0 -1
v 0.062500 0.343750 -0.062500
v 0.093750 0.312500 -0.062500
v 0.062500 0.312500 -0.093750
vt 0.437500 0.656250
vt 0.437500 0.937500
vt 0.312500 0.937500
vt 0.312500 0.656250
vt 0.625000 0.656250
vt 0.625000 0.937500
vt 0.500000 0.937500
vt 0.500000 0.656250
vt 1.000003 0.656250
vt 1.000002 0.937500
vt 0.875000 0.937500
vt 0.875000 0.656250
vt 0.812500 0.656250
vt 0.812500 0.937500
vt 0.687500 0.937500
vt 0.687500 0.656250
vt 0.281250 0.593750
vt 0.250000 0.656250
vt 0.281250 1.000000
vt 0.250000 0.937500
vt 0.843750 0.593750
vt 0.843750 1.000000
vt 0.468750 0.593750
vt 0.468750 1.000000
vt 0.656250 0.593750
vt 0.656250 1.000000
vt 0.875000 0.593750
vt 1.000003 0.593750
vt 1.000002 1.000000
vt 0.875000 1.000000
vt 0.687500 0.593750
vt 0.812500 0.593750
vt 0.812500 1.000000
vt 0.687500 1.000000
vt 0.500000 0.593750
vt 0.625000 0.593750
vt 0.625000 1.000000
vt 0.500000 1.000000
vt 0.312500 0.593750
vt 0.437500 0.593750
vt 0.437500 1.000000
vt 0.312500 1.000000
vt 0.250000 1.000000
vt 0.125000 1.000000
vt 0.125000 0.875000
vt 0.250000 0.875000
vn 0.0000 0.0000 1.0000
vn 1.0000 0.0000 0.0000
vn -1.0000 0.0000 0.0000
vn 0.0000 0.0000 -1.0000
vn -0.5774 -0.5774 0.5774 vn -0.5774 -0.5774 0.5774
vn -0.5774 0.5774 0.5774 vn -0.5774 0.5774 0.5774
vn -0.5774 -0.5774 -0.5774 vn -0.5774 -0.5774 -0.5774
@ -111,82 +60,133 @@ vn 0.5774 -0.5774 0.5774
vn 0.5774 0.5774 0.5774 vn 0.5774 0.5774 0.5774
vn 0.5774 -0.5774 -0.5774 vn 0.5774 -0.5774 -0.5774
vn 0.5774 0.5774 -0.5774 vn 0.5774 0.5774 -0.5774
vn -0.7071 -0.7071 0.0000 vn -0.7071 -0.7071 0
vn -0.7071 0.0000 0.7071 vn -0.7071 0.7071 0
vn -0.7071 0.7071 0.0000 vn 0 -0.7071 -0.7071
vn -0.7071 0.0000 -0.7071 vn 0 0.7071 -0.7071
vn 0.0000 -0.7071 -0.7071 vn 0.7071 0 -0.7071
vn 0.0000 0.7071 -0.7071 vn 0.7071 -0.7071 0
vn 0.7071 0.0000 -0.7071 vn 0.7071 0.7071 0
vn 0.7071 -0.7071 0.0000 vn 0.7071 0 0.7071
vn 0.7071 0.7071 0.0000 vn 0 -0.7071 0.7071
vn 0.7071 0.0000 0.7071 vn 0 0.7071 0.7071
vn 0.0000 -0.7071 0.7071 vn 0 -1 0
vn 0.0000 0.7071 0.7071 vn 0 1 0
vn 0.0000 -1.0000 0.0000
s off # uvs [65]
f 25/11/3 27/12/3 14/13/3 12/14/3
f 31/15/4 33/16/4 28/17/4 24/18/4 vt 0 1
f 13/19/5 16/20/5 22/21/5 18/22/5 vt 0 0.75
f 19/23/6 21/24/6 34/25/6 30/26/6 vt 0.03125 0.75
f 11/27/7 12/14/7 13/28/7 vt 0.03125 1
f 14/13/8 15/29/8 16/30/8 vt 0.0625 0.75
f 17/31/9 18/22/9 19/23/9 vt 0.0625 1
f 20/32/10 21/24/10 22/21/10 vt 0.4375 0.65625
f 23/33/11 24/18/11 25/11/11 vt 0.4375 0.9375
f 26/34/12 27/12/12 28/17/12 vt 0.3125 0.9375
f 29/35/13 30/26/13 31/15/13 vt 0.3125 0.65625
f 32/36/14 33/16/14 34/25/14 vt 0.625 0.65625
f 17/37/15 11/38/15 13/19/15 18/22/15 vt 0.625 0.9375
f 12/14/16 14/13/16 16/30/16 13/28/16 vt 0.5 0.9375
f 15/39/17 20/40/17 22/21/17 16/20/17 vt 0.5 0.65625
f 21/24/18 19/23/18 18/22/18 22/21/18 vt 1 0.65625
f 29/41/19 17/42/19 19/23/19 30/26/19 vt 1 0.9375
f 20/43/20 32/44/20 34/25/20 21/24/20 vt 0.875 0.9375
f 33/16/21 31/15/21 30/26/21 34/25/21 vt 0.875 0.65625
f 23/45/22 29/46/22 31/15/22 24/18/22 vt 0.8125 0.65625
f 32/47/23 26/48/23 28/17/23 33/16/23 vt 0.8125 0.9375
f 27/12/24 25/11/24 24/18/24 28/17/24 vt 0.6875 0.9375
f 11/49/25 23/50/25 25/11/25 12/14/25 vt 0.6875 0.65625
f 26/51/26 15/52/26 14/13/26 27/12/26 vt 0.28125 0.59375
f 17/53/27 29/54/27 23/55/27 11/56/27 vt 0.25 0.65625
o Cube.001_Cube.006 vt 0.28125 1
v -0.062500 0.343750 0.062500 vt 0.25 0.9375
v -0.062500 0.500000 0.062500 vt 0.84375 0.59375
v -0.062500 0.343750 -0.062500 vt 0.84375 1
v -0.062500 0.500000 -0.062500 vt 0.46875 0.59375
v 0.062500 0.343750 0.062500 vt 0.46875 1
v 0.062500 0.500000 0.062500 vt 0.65625 0.59375
v 0.062500 0.343750 -0.062500 vt 0.65625 1
v 0.062500 0.500000 -0.062500 vt 0.875 0.59375
vt 0.500000 0.000000 vt 1 0.59375
vt 0.500000 0.156250 vt 1 1
vt 0.375000 0.156250 vt 0.875 1
vt 0.375000 0.000000 vt 0.6875 0.59375
vt 0.250000 0.156250 vt 0.8125 0.59375
vt 0.250000 0.000000 vt 0.8125 1
vt 0.125000 0.156250 vt 0.6875 1
vt 0.125000 0.000000 vt 0.5 0.59375
vt 0.000000 0.156250 vt 0.625 0.59375
vt 0.000000 0.000000 vt 0.625 1
vt 0.125000 0.156250 vt 0.5 1
vt 0.125000 0.281250 vt 0.3125 0.59375
vt 0.000000 0.281250 vt 0.4375 0.59375
vt 0.000000 0.156250 vt 0.4375 1
vt 0.250000 0.281250 vt 0.3125 1
vt 0.125000 0.281250 vt 0.25 1
vt 0.125000 0.156250 vt 0.125 1
vt 0.250000 0.156250 vt 0.125 0.875
vn -1.0000 0.0000 0.0000 vt 0.25 0.875
vn 0.0000 0.0000 -1.0000 vt 0.5 0
vn 1.0000 0.0000 0.0000 vt 0.5 0.15625
vn 0.0000 0.0000 1.0000 vt 0.375 0.15625
vn 0.0000 -1.0000 0.0000 vt 0.375 0
vn 0.0000 1.0000 0.0000 vt 0.25 0.15625
s off vt 0.25 0
f 35/57/28 36/58/28 38/59/28 37/60/28 vt 0.125 0.15625
f 37/60/29 38/59/29 42/61/29 41/62/29 vt 0.125 0
f 41/62/30 42/61/30 40/63/30 39/64/30 vt 0 0.15625
f 39/64/31 40/63/31 36/65/31 35/66/31 vt 0 0
f 37/67/32 41/68/32 39/69/32 35/70/32 vt 0.125 0.28125
f 42/71/33 38/72/33 36/73/33 40/74/33 vt 0 0.28125
vt 0.25 0.28125
# objects [3]
g Light
s 1
f 1/1/1 2/2/1 3/3/1 4/4/1
f 5/5/2 6/6/2 4/4/2 3/3/2
f 4/4/1 3/3/1 7/2/1 8/1/1
f 3/3/2 4/4/2 9/6/2 10/5/2
g Bulb
s 1
f 11/7/3 12/8/3 13/9/3 14/10/3
f 15/11/4 16/12/4 17/13/4 18/14/4
f 19/15/5 20/16/5 21/17/5 22/18/5
f 23/19/6 24/20/6 25/21/6 26/22/6
f 27/23/7 14/10/7 19/24/7
f 13/9/8 28/25/8 20/26/8
f 29/27/9 22/18/9 23/19/9
f 30/28/10 24/20/10 21/17/10
f 31/29/11 18/14/11 11/7/11
f 32/30/12 12/8/12 17/13/12
f 33/31/13 26/22/13 15/11/13
f 34/32/14 16/12/14 25/21/14
f 29/33/15 27/34/15 19/15/15 22/18/15
f 14/10/1 13/9/1 20/26/1 19/24/1
f 28/35/16 30/36/16 21/17/16 20/16/16
f 24/20/2 23/19/2 22/18/2 21/17/2
f 33/37/17 29/38/17 23/19/17 26/22/17
f 30/39/18 34/40/18 25/21/18 24/20/18
f 16/12/19 15/11/19 26/22/19 25/21/19
f 31/41/20 33/42/20 15/11/20 18/14/20
f 34/43/21 32/44/21 17/13/21 16/12/21
f 12/8/22 11/7/22 18/14/22 17/13/22
f 27/45/23 31/46/23 11/7/23 14/10/23
f 32/47/24 28/48/24 13/9/24 12/8/24
f 29/49/25 33/50/25 31/51/25 27/52/25
g Base
s 1
f 28/53/5 35/54/5 36/55/5 30/56/5
f 30/56/6 36/55/6 37/57/6 34/58/6
f 34/58/4 37/57/4 38/59/4 32/60/4
f 32/60/3 38/59/3 35/61/3 28/62/3
f 30/59/25 34/63/25 32/64/25 28/61/25
f 37/65/26 36/63/26 35/59/26 38/57/26

View file

@ -1,105 +1,101 @@
# Blender v2.79 (sub 0) OBJ File: 'vintage_lantern_ceiling.blend' # Processed with obj-simplify v1.1 (a2f5cd9) | 2021-08-06T19:35:50Z | https://github.com/jonnenauha/obj-simplify
# Blender v2.93.0 OBJ File: ''
# www.blender.org # www.blender.org
o Cube.003
v -0.125000 0.000000 0.125000 # vertices [24]
v -0.125000 0.375000 0.125000
v -0.125000 0.000000 -0.125000 v -0.125 0 0.125
v -0.125000 0.375000 -0.125000 v -0.125 0.375 0.125
v 0.125000 0.000000 0.125000 v -0.125 0.375 -0.125
v 0.125000 0.375000 0.125000 v -0.125 0 -0.125
v 0.125000 0.000000 -0.125000 v 0.125 0.375 -0.125
v 0.125000 0.375000 -0.125000 v 0.125 0 -0.125
vt 0.750000 0.500000 v 0.125 0.375 0.125
vt 0.750000 0.875000 v 0.125 0 0.125
vt 0.500000 0.875000 v -0.15625 0.375 0.15625
vt 0.500000 0.500000 v -0.15625 0.4375 0.15625
vt 0.250000 0.875000 v -0.15625 0.4375 -0.15625
vt 0.250000 0.500000 v -0.15625 0.375 -0.15625
vt 0.000000 0.875000 v 0.15625 0.4375 -0.15625
vt 0.000000 0.500000 v 0.15625 0.375 -0.15625
vt 1.000000 0.500000 v 0.15625 0.4375 0.15625
vt 1.000000 0.875000 v 0.15625 0.375 0.15625
vt 0.750000 0.250000 v -0.0625 0.4375 0.0625
vt 1.000000 0.250000 v -0.0625 0.5 0.0625
vn -1.0000 0.0000 0.0000 v -0.0625 0.5 -0.0625
vn 0.0000 0.0000 -1.0000 v -0.0625 0.4375 -0.0625
vn 1.0000 0.0000 0.0000 v 0.0625 0.5 -0.0625
vn 0.0000 0.0000 1.0000 v 0.0625 0.4375 -0.0625
vn 0.0000 -1.0000 0.0000 v 0.0625 0.5 0.0625
g Cube.003_Cube.003_Material.001 v 0.0625 0.4375 0.0625
s off
f 1/1/1 2/2/1 4/3/1 3/4/1 # normals [6]
f 3/4/2 4/3/2 8/5/2 7/6/2
f 7/6/3 8/5/3 6/7/3 5/8/3 vn -1 0 0
f 5/9/4 6/10/4 2/2/4 1/1/4 vn 0 0 -1
f 3/11/5 7/12/5 5/9/5 1/1/5 vn 1 0 0
o Cube.001 vn 0 0 1
v -0.156250 0.375000 0.156250 vn 0 -1 0
v -0.156250 0.437500 0.156250 vn 0 1 0
v -0.156250 0.375000 -0.156250
v -0.156250 0.437500 -0.156250 # uvs [31]
v 0.156250 0.375000 0.156250
v 0.156250 0.437500 0.156250 vt 0.75 0.5
v 0.156250 0.375000 -0.156250 vt 0.75 0.875
v 0.156250 0.437500 -0.156250 vt 0.5 0.875
v -0.062500 0.437500 0.062500 vt 0.5 0.5
v -0.062500 0.500000 0.062500 vt 0.25 0.875
v -0.062500 0.437500 -0.062500 vt 0.25 0.5
v -0.062500 0.500000 -0.062500 vt 0 0.875
v 0.062500 0.437500 0.062500 vt 0 0.5
v 0.062500 0.500000 0.062500 vt 1 0.5
v 0.062500 0.437500 -0.062500 vt 1 0.875
v 0.062500 0.500000 -0.062500 vt 0.75 0.25
vt 0.500000 0.875000 vt 1 0.25
vt 0.500000 0.812500 vt 0.5 0.8125
vt 0.812500 0.812500 vt 0.8125 0.8125
vt 0.812500 0.875000 vt 0.8125 0.875
vt 0.812500 0.812500 vt 0.1875 0.875
vt 0.812500 0.875000 vt 0.1875 0.8125
vt 0.500000 0.875000 vt 0.1875 0.5
vt 0.500000 0.812500 vt 1 0.375
vt 0.187500 0.875000 vt 1 0.4375
vt 0.187500 0.812500 vt 0.875 0.4375
vt 0.187500 0.875000 vt 0.875 0.375
vt 0.187500 0.812500 vt 0.75 0.4375
vt 0.500000 0.812500 vt 0.75 0.375
vt 0.187500 0.812500 vt 0.625 0.4375
vt 0.187500 0.500000 vt 0.625 0.375
vt 0.500000 0.500000 vt 0.5 0.4375
vt 0.500000 0.500000 vt 0.5 0.375
vt 0.500000 0.812500 vt 0.625 0.625
vt 0.187500 0.812500 vt 0.5 0.625
vt 0.187500 0.500000 vt 0.625 0.5
vt 1.000000 0.375000
vt 1.000000 0.437500 # objects [2]
vt 0.875000 0.437500
vt 0.875000 0.375000 g LanternGlobe
vt 0.750000 0.437500
vt 0.750000 0.375000 s 1
vt 0.625000 0.437500 f 1/1/1 2/2/1 3/3/1 4/4/1
vt 0.625000 0.375000 f 4/4/2 3/3/2 5/5/2 6/6/2
vt 0.500000 0.437500 f 6/6/3 5/5/3 7/7/3 8/8/3
vt 0.500000 0.375000 f 8/9/4 7/10/4 2/2/4 1/1/4
vt 0.625000 0.625000 f 4/11/5 6/12/5 8/9/5 1/1/5
vt 0.500000 0.625000
vt 0.500000 0.500000 g LanternMetal
vt 0.625000 0.500000
vn -1.0000 0.0000 0.0000 s 1
vn 0.0000 0.0000 -1.0000 f 9/3/1 10/13/1 11/14/1 12/15/1
vn 1.0000 0.0000 0.0000 f 12/14/2 11/15/2 13/3/2 14/13/2
vn 0.0000 0.0000 1.0000 f 14/13/3 13/3/3 15/16/3 16/17/3
vn 0.0000 -1.0000 0.0000 f 16/16/4 15/17/4 10/13/4 9/3/4
vn 0.0000 1.0000 0.0000 f 12/13/5 14/17/5 16/18/5 9/4/5
g Cube.001_Cube.001_Material.000 f 13/4/6 11/13/6 10/17/6 15/18/6
s off f 17/19/1 18/20/1 19/21/1 20/22/1
f 9/13/6 10/14/6 12/15/6 11/16/6 f 20/22/2 19/21/2 21/23/2 22/24/2
f 11/17/7 12/18/7 16/19/7 15/20/7 f 22/24/3 21/23/3 23/25/3 24/26/3
f 15/20/8 16/19/8 14/21/8 13/22/8 f 24/26/4 23/25/4 18/27/4 17/28/4
f 13/23/9 14/24/9 10/14/9 9/13/9 f 21/29/6 19/30/6 18/4/6 23/31/6
f 11/25/10 15/26/10 13/27/10 9/28/10
f 16/29/11 12/30/11 10/31/11 14/32/11
f 17/33/6 18/34/6 20/35/6 19/36/6
f 19/36/7 20/35/7 24/37/7 23/38/7
f 23/38/8 24/37/8 22/39/8 21/40/8
f 21/40/9 22/39/9 18/41/9 17/42/9
f 24/43/11 20/44/11 18/45/11 22/46/11

View file

@ -1,131 +1,118 @@
# Blender v2.79 (sub 0) OBJ File: 'vintage_lantern.blend' # Processed with obj-simplify v1.1 (a2f5cd9) | 2021-08-06T19:37:30Z | https://github.com/jonnenauha/obj-simplify
# Blender v2.93.0 OBJ File: ''
# www.blender.org # www.blender.org
o Cube.003
v -0.125000 -0.437500 0.125000 # vertices [32]
v -0.125000 -0.062500 0.125000
v -0.125000 -0.437500 -0.125000 v -0.125 -0.4375 0.125
v -0.125000 -0.062500 -0.125000 v -0.125 -0.0625 0.125
v 0.125000 -0.437500 0.125000 v -0.125 -0.0625 -0.125
v 0.125000 -0.062500 0.125000 v -0.125 -0.4375 -0.125
v 0.125000 -0.437500 -0.125000 v 0.125 -0.0625 -0.125
v 0.125000 -0.062500 -0.125000 v 0.125 -0.4375 -0.125
vt 0.750000 0.500000 v 0.125 -0.0625 0.125
vt 0.750000 0.875000 v 0.125 -0.4375 0.125
vt 0.500000 0.875000 v -0.15625 -0.5 0.15625
vt 0.500000 0.500000 v -0.15625 -0.4375 0.15625
vt 0.250000 0.875000 v -0.15625 -0.4375 -0.15625
vt 0.250000 0.500000 v -0.15625 -0.5 -0.15625
vt 0.000000 0.875000 v 0.15625 -0.4375 -0.15625
vt 0.000000 0.500000 v 0.15625 -0.5 -0.15625
vt 1.000000 0.500000 v 0.15625 -0.4375 0.15625
vt 1.000000 0.875000 v 0.15625 -0.5 0.15625
vn -1.0000 0.0000 0.0000 v -0.15625 -0.0625 0.15625
vn 0.0000 0.0000 -1.0000 v -0.15625 0 0.15625
vn 1.0000 0.0000 0.0000 v -0.15625 0 -0.15625
vn 0.0000 0.0000 1.0000 v -0.15625 -0.0625 -0.15625
g Cube.003_Cube.003_Material.001 v 0.15625 0 -0.15625
s off v 0.15625 -0.0625 -0.15625
f 1/1/1 2/2/1 4/3/1 3/4/1 v 0.15625 0 0.15625
f 3/4/2 4/3/2 8/5/2 7/6/2 v 0.15625 -0.0625 0.15625
f 7/6/3 8/5/3 6/7/3 5/8/3 v -0.0625 0 0.0625
f 5/9/4 6/10/4 2/2/4 1/1/4 v -0.0625 0.0625 0.0625
o Cube.001 v -0.0625 0.0625 -0.0625
v -0.156250 -0.500000 0.156250 v -0.0625 0 -0.0625
v -0.156250 -0.437500 0.156250 v 0.0625 0.0625 -0.0625
v -0.156250 -0.500000 -0.156250 v 0.0625 0 -0.0625
v -0.156250 -0.437500 -0.156250 v 0.0625 0.0625 0.0625
v 0.156250 -0.500000 0.156250 v 0.0625 0 0.0625
v 0.156250 -0.437500 0.156250
v 0.156250 -0.500000 -0.156250 # normals [6]
v 0.156250 -0.437500 -0.156250
v -0.156250 -0.062500 0.156250 vn -1 0 0
v -0.156250 0.000000 0.156250 vn 0 0 -1
v -0.156250 -0.062500 -0.156250 vn 1 0 0
v -0.156250 0.000000 -0.156250 vn 0 0 1
v 0.156250 -0.062500 0.156250 vn 0 -1 0
v 0.156250 0.000000 0.156250 vn 0 1 0
v 0.156250 -0.062500 -0.156250
v 0.156250 0.000000 -0.156250 # uvs [35]
v -0.062500 0.000000 0.062500
v -0.062500 0.062500 0.062500 vt 0.75 0.5
v -0.062500 0.000000 -0.062500 vt 0.75 0.875
v -0.062500 0.062500 -0.062500 vt 0.5 0.875
v 0.062500 0.000000 0.062500 vt 0.5 0.5
v 0.062500 0.062500 0.062500 vt 0.25 0.875
v 0.062500 0.000000 -0.062500 vt 0.25 0.5
v 0.062500 0.062500 -0.062500 vt 0 0.875
vt 0.500000 0.187500 vt 0 0.5
vt 0.500000 0.125000 vt 1 0.5
vt 0.812500 0.125000 vt 1 0.875
vt 0.812500 0.187500 vt 0.5 0.1875
vt 0.812500 0.125000 vt 0.5 0.125
vt 0.812500 0.187500 vt 0.8125 0.125
vt 0.500000 0.187500 vt 0.8125 0.1875
vt 0.500000 0.125000 vt 0.1875 0.1875
vt 0.187500 0.187500 vt 0.1875 0.125
vt 0.187500 0.125000 vt 0.1875 0.5
vt 0.187500 0.187500 vt 0.5 0.8125
vt 0.187500 0.125000 vt 0.8125 0.8125
vt 0.500000 0.500000 vt 0.8125 0.875
vt 0.187500 0.500000 vt 0.1875 0.875
vt 0.500000 0.500000 vt 0.1875 0.8125
vt 0.187500 0.500000 vt 1 0.375
vt 0.500000 0.875000 vt 1 0.4375
vt 0.500000 0.812500 vt 0.875 0.4375
vt 0.812500 0.812500 vt 0.875 0.375
vt 0.812500 0.875000 vt 0.75 0.4375
vt 0.812500 0.812500 vt 0.75 0.375
vt 0.812500 0.875000 vt 0.625 0.4375
vt 0.500000 0.875000 vt 0.625 0.375
vt 0.500000 0.812500 vt 0.5 0.4375
vt 0.187500 0.875000 vt 0.5 0.375
vt 0.187500 0.812500 vt 0.625 0.625
vt 0.187500 0.875000 vt 0.5 0.625
vt 0.187500 0.812500 vt 0.625 0.5
vt 0.500000 0.812500
vt 0.187500 0.812500 # objects [2]
vt 0.187500 0.500000
vt 0.500000 0.500000 g LanternGlobe
vt 0.500000 0.500000
vt 0.500000 0.812500 s 1
vt 0.187500 0.812500 f 1/1/1 2/2/1 3/3/1 4/4/1
vt 0.187500 0.500000 f 4/4/2 3/3/2 5/5/2 6/6/2
vt 1.000000 0.375000 f 6/6/3 5/5/3 7/7/3 8/8/3
vt 1.000000 0.437500 f 8/9/4 7/10/4 2/2/4 1/1/4
vt 0.875000 0.437500
vt 0.875000 0.375000 g LanternMetal
vt 0.750000 0.437500
vt 0.750000 0.375000 s 1
vt 0.625000 0.437500 f 9/11/1 10/12/1 11/13/1 12/14/1
vt 0.625000 0.375000 f 12/13/2 11/14/2 13/11/2 14/12/2
vt 0.500000 0.437500 f 14/12/3 13/11/3 15/15/3 16/16/3
vt 0.500000 0.375000 f 16/15/4 15/16/4 10/12/4 9/11/4
vt 0.625000 0.625000 f 12/4/5 14/17/5 16/15/5 9/11/5
vt 0.500000 0.625000 f 13/11/6 11/4/6 10/17/6 15/15/6
vt 0.500000 0.500000 f 17/3/1 18/18/1 19/19/1 20/20/1
vt 0.625000 0.500000 f 20/19/2 19/20/2 21/3/2 22/18/2
vn -1.0000 0.0000 0.0000 f 22/18/3 21/3/3 23/21/3 24/22/3
vn 0.0000 0.0000 -1.0000 f 24/21/4 23/22/4 18/18/4 17/3/4
vn 1.0000 0.0000 0.0000 f 20/18/5 22/22/5 24/17/5 17/4/5
vn 0.0000 0.0000 1.0000 f 21/4/6 19/18/6 18/22/6 23/17/6
vn 0.0000 -1.0000 0.0000 f 25/23/1 26/24/1 27/25/1 28/26/1
vn 0.0000 1.0000 0.0000 f 28/26/2 27/25/2 29/27/2 30/28/2
g Cube.001_Cube.001_Material.000 f 30/28/3 29/27/3 31/29/3 32/30/3
s off f 32/30/4 31/29/4 26/31/4 25/32/4
f 9/11/5 10/12/5 12/13/5 11/14/5 f 29/33/6 27/34/6 26/4/6 31/35/6
f 11/15/6 12/16/6 16/17/6 15/18/6
f 15/18/7 16/17/7 14/19/7 13/20/7
f 13/21/8 14/22/8 10/12/8 9/11/8
f 11/23/9 15/24/9 13/21/9 9/11/9
f 16/17/10 12/25/10 10/26/10 14/19/10
f 17/27/5 18/28/5 20/29/5 19/30/5
f 19/31/6 20/32/6 24/33/6 23/34/6
f 23/34/7 24/33/7 22/35/7 21/36/7
f 21/37/8 22/38/8 18/28/8 17/27/8
f 19/39/9 23/40/9 21/41/9 17/42/9
f 24/43/10 20/44/10 18/45/10 22/46/10
f 25/47/5 26/48/5 28/49/5 27/50/5
f 27/50/6 28/49/6 32/51/6 31/52/6
f 31/52/7 32/51/7 30/53/7 29/54/7
f 29/54/8 30/53/8 26/55/8 25/56/8
f 32/57/10 28/58/10 26/59/10 30/60/10

View file

@ -1,142 +1,136 @@
# Blender v2.79 (sub 0) OBJ File: 'vintage_lantern_wall2_merged.blend' # Processed with obj-simplify v1.1 (a2f5cd9) | 2021-08-06T19:39:42Z | https://github.com/jonnenauha/obj-simplify
# Blender v2.93.0 OBJ File: ''
# www.blender.org # www.blender.org
o Cube.003
v -0.125000 -0.187500 -0.312500 # vertices [36]
v -0.125000 -0.187500 0.062500
v -0.125000 0.062500 -0.312500 v -0.125 -0.1875 -0.3125
v -0.125000 0.062500 0.062500 v -0.125 -0.1875 0.0625
v 0.125000 -0.187500 -0.312500 v -0.125 0.0625 0.0625
v 0.125000 -0.187500 0.062500 v -0.125 0.0625 -0.3125
v 0.125000 0.062500 -0.312500 v 0.125 0.0625 0.0625
v 0.125000 0.062500 0.062500 v 0.125 0.0625 -0.3125
v -0.000000 -0.437500 0.312500 v 0.125 -0.1875 0.0625
v 0.000000 -0.437500 0.062500 v 0.125 -0.1875 -0.3125
v -0.000000 0.062500 0.312500 v 0 -0.4375 0.3125
v 0.000000 0.062500 0.062500 v 0 -0.4375 0.0625
vt 0.750000 0.500000 v 0 0.0625 0.0625
vt 0.750000 0.875000 v 0 0.0625 0.3125
vt 0.500000 0.875000 v -0.15625 -0.21875 0.0625
vt 0.500000 0.500000 v -0.15625 -0.21875 0.125
vt 0.250000 0.875000 v -0.15625 0.09375 0.125
vt 0.250000 0.500000 v -0.15625 0.09375 0.0625
vt 0.000000 0.875000 v 0.15625 0.09375 0.125
vt 0.000000 0.500000 v 0.15625 0.09375 0.0625
vt 1.000000 0.500000 v 0.15625 -0.21875 0.125
vt 1.000000 0.875000 v 0.15625 -0.21875 0.0625
vt 0.000000 0.500000 v -0.0625 -0.125 0.125
vt 0.000000 0.250000 v -0.0625 -0.125 0.1875
vt 0.500000 0.250000 v -0.0625 0 0.1875
vt 0.500000 0.500000 v -0.0625 0 0.125
vt 0.750000 0.250000 v 0.0625 0 0.1875
vt 1.000000 0.250000 v 0.0625 0 0.125
vn -1.0000 0.0000 0.0000 v 0.0625 -0.125 0.1875
vn 0.0000 1.0000 0.0000 v 0.0625 -0.125 0.125
vn 1.0000 0.0000 0.0000 v 0.125 -0.5 -0.125
vn 0.0000 -1.0000 0.0000 v 0.125 -0.5 0.375
vn 0.0000 0.0000 -1.0000 v -0.125 -0.5 0.375
g Cube.003_Cube.003_Material.001 v -0.125 -0.5 -0.125
s off v -0.125 -0.4375 0.375
f 1/1/1 2/2/1 4/3/1 3/4/1 v -0.125 -0.4375 -0.125
f 3/4/2 4/3/2 8/5/2 7/6/2 v 0.125 -0.4375 0.375
f 7/6/3 8/5/3 6/7/3 5/8/3 v 0.125 -0.4375 -0.125
f 5/9/4 6/10/4 2/2/4 1/1/4
f 9/11/3 10/12/3 12/13/3 11/14/3 # normals [6]
f 3/15/5 7/16/5 5/9/5 1/1/5
o Cube.001 vn -1 0 0
v -0.156250 -0.218750 0.062500 vn 0 1 0
v -0.156250 -0.218750 0.125000 vn 1 0 0
v -0.156250 0.093750 0.062500 vn 0 -1 0
v -0.156250 0.093750 0.125000 vn 0 0 -1
v 0.156250 -0.218750 0.062500 vn 0 0 1
v 0.156250 -0.218750 0.125000
v 0.156250 0.093750 0.062500 # uvs [47]
v 0.156250 0.093750 0.125000
v -0.062500 -0.125000 0.125000 vt 0.75 0.5
v -0.062500 -0.125000 0.187500 vt 0.75 0.875
v -0.062500 -0.000000 0.125000 vt 0.5 0.875
v -0.062500 -0.000000 0.187500 vt 0.5 0.5
v 0.062500 -0.125000 0.125000 vt 0.25 0.875
v 0.062500 -0.125000 0.187500 vt 0.25 0.5
v 0.062500 -0.000000 0.125000 vt 0 0.875
v 0.062500 -0.000000 0.187500 vt 0 0.5
v 0.125000 -0.500000 -0.125000 vt 1 0.5
v 0.125000 -0.500000 0.375000 vt 1 0.875
v -0.125000 -0.500000 -0.125000 vt 0 0.25
v -0.125000 -0.500000 0.375000 vt 0.5 0.25
v 0.125000 -0.437500 -0.125000 vt 0.75 0.25
v 0.125000 -0.437500 0.375000 vt 1 0.25
v -0.125000 -0.437500 -0.125000 vt 0.5 0.8125
v -0.125000 -0.437500 0.375000 vt 0.8125 0.8125
vt 0.500000 0.875000 vt 0.8125 0.875
vt 0.500000 0.812500 vt 0.1875 0.875
vt 0.812500 0.812500 vt 0.1875 0.8125
vt 0.812500 0.875000 vt 0.1875 0.5
vt 0.812500 0.812500 vt 1 0.375
vt 0.812500 0.875000 vt 1 0.4375
vt 0.500000 0.875000 vt 0.875 0.4375
vt 0.500000 0.812500 vt 0.875 0.375
vt 0.187500 0.875000 vt 0.75 0.4375
vt 0.187500 0.812500 vt 0.75 0.375
vt 0.187500 0.875000 vt 0.625 0.4375
vt 0.187500 0.812500 vt 0.625 0.375
vt 0.500000 0.812500 vt 0.5 0.4375
vt 0.187500 0.812500 vt 0.5 0.375
vt 0.187500 0.500000 vt 0.625 0.625
vt 0.500000 0.500000 vt 0.5 0.625
vt 0.500000 0.500000 vt 0.625 0.5
vt 0.500000 0.812500 vt 0.9375 0.25
vt 0.187500 0.812500 vt 0.9375 0.75
vt 0.187500 0.500000 vt 0.6875 0.75
vt 1.000000 0.375000 vt 0.6875 0.25
vt 1.000000 0.437500 vt 0.625 0.75
vt 0.875000 0.437500 vt 0.625 0.25
vt 0.875000 0.375000 vt 0.375 0.75
vt 0.750000 0.437500 vt 0.375 0.25
vt 0.750000 0.375000 vt 0.3125 0.75
vt 0.625000 0.437500 vt 0.3125 0.25
vt 0.625000 0.375000 vt 0.6875 0.1875
vt 0.500000 0.437500 vt 0.9375 0.1875
vt 0.500000 0.375000 vt 0.6875 0.8125
vt 0.625000 0.625000 vt 0.9375 0.8125
vt 0.500000 0.625000
vt 0.500000 0.500000 # objects [2]
vt 0.625000 0.500000
vt 0.937500 0.250000 g Lantern
vt 0.937500 0.750000
vt 0.687500 0.750000 s 1
vt 0.687500 0.250000 f 1/1/1 2/2/1 3/3/1 4/4/1
vt 0.625000 0.750000 f 4/4/2 3/3/2 5/5/2 6/6/2
vt 0.625000 0.250000 f 6/6/3 5/5/3 7/7/3 8/8/3
vt 0.375000 0.750000 f 8/9/4 7/10/4 2/2/4 1/1/4
vt 0.375000 0.250000 f 9/8/3 10/11/3 11/12/3 12/4/3
vt 0.312500 0.750000 f 4/13/5 6/14/5 8/9/5 1/1/5
vt 0.312500 0.250000
vt 0.687500 0.187500 g LanternMetal
vt 0.937500 0.187500
vt 0.687500 0.812500 s 1
vt 0.937500 0.812500 f 13/3/1 14/15/1 15/16/1 16/17/1
vn -1.0000 0.0000 0.0000 f 16/16/2 15/17/2 17/3/2 18/15/2
vn 0.0000 1.0000 0.0000 f 18/15/3 17/3/3 19/18/3 20/19/3
vn 1.0000 0.0000 0.0000 f 20/18/4 19/19/4 14/15/4 13/3/4
vn 0.0000 -1.0000 0.0000 f 16/15/5 18/19/5 20/20/5 13/4/5
vn 0.0000 0.0000 -1.0000 f 17/4/6 15/15/6 14/19/6 19/20/6
vn 0.0000 0.0000 1.0000 f 21/21/1 22/22/1 23/23/1 24/24/1
g Cube.001_Cube.001_Material.000 f 24/24/2 23/23/2 25/25/2 26/26/2
s off f 26/26/3 25/25/3 27/27/3 28/28/3
f 13/17/6 14/18/6 16/19/6 15/20/6 f 28/28/4 27/27/4 22/29/4 21/30/4
f 15/21/7 16/22/7 20/23/7 19/24/7 f 25/31/6 23/32/6 22/4/6 27/33/6
f 19/24/8 20/23/8 18/25/8 17/26/8 f 29/34/4 30/35/4 31/36/4 32/37/4
f 17/27/9 18/28/9 14/18/9 13/17/9 f 32/37/1 31/36/1 33/38/1 34/39/1
f 15/29/10 19/30/10 17/31/10 13/32/10 f 34/39/2 33/38/2 35/40/2 36/41/2
f 20/33/11 16/34/11 14/35/11 18/36/11 f 36/41/3 35/40/3 30/42/3 29/43/3
f 21/37/6 22/38/6 24/39/6 23/40/6 f 32/37/5 34/44/5 36/45/5 29/34/5
f 23/40/7 24/39/7 28/41/7 27/42/7 f 33/46/6 31/36/6 30/35/6 35/47/6
f 27/42/8 28/41/8 26/43/8 25/44/8
f 25/44/9 26/43/9 22/45/9 21/46/9
f 28/47/11 24/48/11 22/49/11 26/50/11
f 29/51/9 30/52/9 32/53/9 31/54/9
f 31/54/6 32/53/6 36/55/6 35/56/6
f 35/56/7 36/55/7 34/57/7 33/58/7
f 33/58/8 34/57/8 30/59/8 29/60/8
f 31/54/10 35/61/10 33/62/10 29/51/10
f 36/63/11 32/53/11 30/52/11 34/64/11

View file

@ -1,169 +1,156 @@
# Blender v2.79 (sub 0) OBJ File: 'vintage_oillamp.blend' # Processed with obj-simplify v1.1 (a2f5cd9) | 2021-08-06T20:28:11Z | https://github.com/jonnenauha/obj-simplify
# Blender v2.93.0 OBJ File: ''
# www.blender.org # www.blender.org
o Plane
v -0.031250 -0.468750 -0.031250 # vertices [40]
v 0.031250 -0.468750 0.031250
v -0.031250 0.031250 -0.031250 v -0.03125 -0.46875 -0.03125
v 0.031250 0.031250 0.031250 v 0.03125 -0.46875 0.03125
v 0.031250 -0.468750 -0.031250 v 0.03125 0.03125 0.03125
v -0.031250 -0.468750 0.031250 v -0.03125 0.03125 -0.03125
v 0.031250 0.031250 -0.031250 v 0.03125 -0.46875 -0.03125
v -0.031250 0.031250 0.031250 v -0.03125 -0.46875 0.03125
vt 0.000000 0.000000 v -0.03125 0.03125 0.03125
vt 1.000000 0.000000 v 0.03125 0.03125 -0.03125
vt 1.000000 1.000000 v -0.125 -0.499 0.125
vt 0.000000 1.000000 v -0.125 -0.34375 0.125
vt -0.000000 0.000000 v -0.125 -0.34375 -0.125
vt 1.000000 0.000000 v -0.125 -0.499 -0.125
vt 1.000000 1.000000 v 0.125 -0.34375 -0.125
vt -0.000000 1.000000 v 0.125 -0.499 -0.125
vn -0.7071 -0.0000 0.7071 v 0.125 -0.34375 0.125
vn -0.7071 -0.0000 -0.7071 v 0.125 -0.499 0.125
g Plane_Plane_Material.003 v -0.125 -0.21875 0.125
s off v -0.125 0.25 0.125
f 1/1/1 2/2/1 4/3/1 3/4/1 v -0.125 0.25 -0.125
f 5/5/2 6/6/2 8/7/2 7/8/2 v -0.125 -0.21875 -0.125
o Cube.001 v 0.125 0.25 -0.125
v -0.125000 -0.499000 0.125000 v 0.125 -0.21875 -0.125
v -0.125000 -0.343750 0.125000 v 0.125 0.25 0.125
v -0.125000 -0.499000 -0.125000 v 0.125 -0.21875 0.125
v -0.125000 -0.343750 -0.125000 v 0.0625 -0.3125 -0.0625
v 0.125000 -0.499000 0.125000 v 0.0625 -0.25 -0.0625
v 0.125000 -0.343750 0.125000 v 0.0625 -0.25 0.0625
v 0.125000 -0.499000 -0.125000 v 0.0625 -0.3125 0.0625
v 0.125000 -0.343750 -0.125000 v -0.0625 -0.25 0.0625
v -0.125000 -0.218750 0.125000 v -0.0625 -0.3125 0.0625
v -0.125000 0.250000 0.125000 v -0.0625 -0.25 -0.0625
v -0.125000 -0.218750 -0.125000 v -0.0625 -0.3125 -0.0625
v -0.125000 0.250000 -0.125000 v -0.125 -0.3125 0.125
v 0.125000 -0.218750 0.125000 v -0.125 -0.3125 -0.125
v 0.125000 0.250000 0.125000 v 0.125 -0.3125 -0.125
v 0.125000 -0.218750 -0.125000 v 0.125 -0.3125 0.125
v 0.125000 0.250000 -0.125000 v -0.125 -0.25 0.125
vt 0.750000 0.000000 v -0.125 -0.25 -0.125
vt 0.750000 0.156250 v 0.125 -0.25 -0.125
vt 0.500000 0.156250 v 0.125 -0.25 0.125
vt 0.500000 0.000000
vt 0.250000 0.156250 # normals [8]
vt 0.250000 0.000000
vt 0.000000 0.156250 vn -0.7071 0 0.7071
vt 0.000000 0.000000 vn -0.7071 0 -0.7071
vt 1.000000 0.000000 vn -1 0 0
vt 1.000000 0.156250 vn 0 0 -1
vt 0.250000 0.406250 vn 1 0 0
vt 0.000000 0.406250 vn 0 0 1
vt 0.000000 0.156250 vn 0 -1 0
vt 0.250000 0.156250 vn 0 1 0
vt 0.750000 0.406250
vt 0.750000 0.875000 # uvs [54]
vt 0.500000 0.875000
vt 0.500000 0.406250 vt 0 0
vt 0.250000 0.875000 vt 1 0
vt 0.250000 0.406250 vt 1 1
vt 0.000000 0.875000 vt 0 1
vt 0.000000 0.406250 vt 0.75 0
vt 1.000000 0.406250 vt 0.75 0.15625
vt 1.000000 0.875000 vt 0.5 0.15625
vt 0.500000 0.406250 vt 0.5 0
vt 0.250000 0.406250 vt 0.25 0.15625
vt 0.250000 0.156250 vt 0.25 0
vt 0.500000 0.156250 vt 0 0.15625
vn -1.0000 0.0000 0.0000 vt 1 0.15625
vn 0.0000 0.0000 -1.0000 vt 0.25 0.40625
vn 1.0000 0.0000 0.0000 vt 0 0.40625
vn 0.0000 0.0000 1.0000 vt 0.75 0.40625
vn 0.0000 -1.0000 0.0000 vt 0.75 0.875
vn 0.0000 1.0000 0.0000 vt 0.5 0.875
g Cube.001_Cube.001_Material.002 vt 0.5 0.40625
s off vt 0.25 0.875
f 9/9/3 10/10/3 12/11/3 11/12/3 vt 0 0.875
f 11/12/4 12/11/4 16/13/4 15/14/4 vt 1 0.40625
f 15/14/5 16/13/5 14/15/5 13/16/5 vt 1 0.875
f 13/17/6 14/18/6 10/10/6 9/9/6 vt 0.625 0.53125
f 11/19/7 15/20/7 13/21/7 9/22/7 vt 0.625 0.46875
f 17/23/3 18/24/3 20/25/3 19/26/3 vt 0.75 0.46875
f 19/26/4 20/25/4 24/27/4 23/28/4 vt 0.75 0.53125
f 23/28/5 24/27/5 22/29/5 21/30/5 vt 0.25 0.53125
f 21/31/6 22/32/6 18/24/6 17/23/6 vt 0.25 0.46875
f 18/33/8 22/34/8 24/35/8 20/36/8 vt 0.375 0.46875
o Cube vt 0.375 0.53125
v 0.062500 -0.312500 -0.062500 vt 0.5 0.46875
v 0.062500 -0.312500 0.062500 vt 0.5 0.53125
v -0.062500 -0.312500 0.062500 vt 0.25 0.78125
v -0.062500 -0.312500 -0.062500 vt 0.25 0.75
v 0.062500 -0.250000 -0.062500 vt 0.5 0.75
v 0.062500 -0.250000 0.062500 vt 0.5 0.78125
v -0.062500 -0.250000 0.062500 vt 0.75 0.75
v -0.062500 -0.250000 -0.062500 vt 0.75 0.78125
v -0.125000 -0.343750 0.125000 vt 1 0.75
v -0.125000 -0.312500 0.125000 vt 1 0.78125
v -0.125000 -0.343750 -0.125000 vt 0 0.78125
v -0.125000 -0.312500 -0.125000 vt 0 0.75
v 0.125000 -0.343750 0.125000 vt 0 0.5
v 0.125000 -0.312500 0.125000 vt 0.25 0.5
v 0.125000 -0.343750 -0.125000 vt 0.25 0.25
v 0.125000 -0.312500 -0.125000 vt 0.25 0.21875
v -0.125000 -0.250000 0.125000 vt 0.5 0.21875
v -0.125000 -0.218750 0.125000 vt 0.5 0.25
v -0.125000 -0.250000 -0.125000 vt 0.75 0.21875
v -0.125000 -0.218750 -0.125000 vt 0.75 0.25
v 0.125000 -0.250000 0.125000 vt 1 0.21875
v 0.125000 -0.218750 0.125000 vt 1 0.25
v 0.125000 -0.250000 -0.125000 vt 0 0.25
v 0.125000 -0.218750 -0.125000 vt 0 0.21875
vt 0.625000 0.531250
vt 0.625000 0.468750 # objects [3]
vt 0.750000 0.468750
vt 0.750000 0.531250 g Wick
vt 0.250000 0.531250
vt 0.250000 0.468750 s 1
vt 0.375000 0.468750 f 1/1/1 2/2/1 3/3/1 4/4/1
vt 0.375000 0.531250 f 5/1/2 6/2/2 7/3/2 8/4/2
vt 0.500000 0.468750
vt 0.500000 0.531250 g Globe
vt 0.250000 0.781250
vt 0.250000 0.750000 s 1
vt 0.500000 0.750000 f 9/5/3 10/6/3 11/7/3 12/8/3
vt 0.500000 0.781250 f 12/8/4 11/7/4 13/9/4 14/10/4
vt 0.750000 0.750000 f 14/10/5 13/9/5 15/11/5 16/1/5
vt 0.750000 0.781250 f 16/2/6 15/12/6 10/6/6 9/5/6
vt 1.000000 0.750000 f 12/13/7 14/14/7 16/11/7 9/9/7
vt 1.000000 0.781250 f 17/15/3 18/16/3 19/17/3 20/18/3
vt 0.000000 0.781250 f 20/18/4 19/17/4 21/19/4 22/13/4
vt 0.000000 0.750000 f 22/13/5 21/19/5 23/20/5 24/14/5
vt 0.000000 0.500000 f 24/21/6 23/22/6 18/16/6 17/15/6
vt 0.250000 0.500000 f 18/18/8 23/13/8 21/9/8 19/7/8
vt 0.250000 0.250000
vt 0.250000 0.218750 g Metal
vt 0.500000 0.218750
vt 0.500000 0.250000 s 1
vt 0.750000 0.218750 f 25/23/5 26/24/5 27/25/5 28/26/5
vt 0.750000 0.250000 f 28/27/6 27/28/6 29/29/6 30/30/6
vt 1.000000 0.218750 f 30/30/3 29/29/3 31/31/3 32/32/3
vt 1.000000 0.250000 f 26/24/4 25/23/4 32/32/4 31/31/4
vt 0.000000 0.250000 f 10/33/3 33/34/3 34/35/3 11/36/3
vt 0.000000 0.218750 f 11/36/4 34/35/4 35/37/4 13/38/4
vt 0.250000 0.500000 f 13/38/5 35/37/5 36/39/5 15/40/5
vt 0.000000 0.500000 f 15/41/6 36/42/6 33/34/6 10/33/6
vn 1.0000 0.0000 0.0000 f 33/34/8 36/42/8 35/43/8 34/44/8
vn -0.0000 -0.0000 1.0000 f 37/45/3 17/46/3 20/47/3 38/48/3
vn -1.0000 -0.0000 -0.0000 f 38/48/4 20/47/4 22/49/4 39/50/4
vn 0.0000 0.0000 -1.0000 f 39/50/5 22/49/5 24/51/5 40/52/5
vn 0.0000 1.0000 0.0000 f 40/53/6 24/54/6 17/46/6 37/45/6
vn 0.0000 -1.0000 0.0000 f 38/44/7 39/43/7 40/53/7 37/45/7
g Cube_Cube_Material
s off
f 25/37/9 29/38/9 30/39/9 26/40/9
f 26/41/10 30/42/10 31/43/10 27/44/10
f 27/44/11 31/43/11 32/45/11 28/46/11
f 29/38/12 25/37/12 28/46/12 32/45/12
f 33/47/11 34/48/11 36/49/11 35/50/11
f 35/50/12 36/49/12 40/51/12 39/52/12
f 39/52/9 40/51/9 38/53/9 37/54/9
f 37/55/10 38/56/10 34/48/10 33/47/10
f 34/48/13 38/56/13 40/57/13 36/58/13
f 41/59/11 42/60/11 44/61/11 43/62/11
f 43/62/12 44/61/12 48/63/12 47/64/12
f 47/64/9 48/63/9 46/65/9 45/66/9
f 45/67/10 46/68/10 42/60/10 41/59/10
f 43/69/14 47/70/14 45/67/14 41/59/14

View file

@ -1,42 +0,0 @@
# Blender v2.79 (sub 0) OBJ File: 'vintage_streetlamp.blend'
# www.blender.org
mtllib morelights_vintage_streetlamp.mtl
o Plane
v -0.312500 0.075000 0.312500
v 0.312500 0.075000 0.312500
v -0.312500 0.075000 -0.312500
v 0.312500 0.075000 -0.312500
v 0.000000 0.325000 0.000000
vn 0.6247 -0.7809 0.0000
vn 0.0000 -0.7809 -0.6247
vn -0.6247 -0.7809 0.0000
vn 0.0000 -0.7809 0.6247
usemtl None
s off
f 1//1 3//1 5//1
f 2//2 1//2 5//2
f 4//3 2//3 5//3
f 3//4 4//4 5//4
o Cube.001
v -0.187500 -0.500000 0.187500
v -0.250000 0.125000 0.250000
v -0.187500 -0.500000 -0.187500
v -0.250000 0.125000 -0.250000
v 0.187500 -0.500000 0.187500
v 0.250000 0.125000 0.250000
v 0.187500 -0.500000 -0.187500
v 0.250000 0.125000 -0.250000
vn -0.9950 -0.0995 0.0000
vn 0.0000 -0.0995 -0.9950
vn 0.9950 -0.0995 0.0000
vn 0.0000 -0.0995 0.9950
vn 0.0000 -1.0000 0.0000
vn 0.0000 1.0000 0.0000
usemtl None
s off
f 6//5 7//5 9//5 8//5
f 8//6 9//6 13//6 12//6
f 12//7 13//7 11//7 10//7
f 10//8 11//8 7//8 6//8
f 8//9 12//9 10//9 6//9
f 13//10 9//10 7//10 11//10

View file

@ -0,0 +1,3 @@
Farmer Survivor
yotuderconnect
CC 0 (1.0)

View file

@ -0,0 +1,3 @@
Crazy Sam
yotuderconnect
CC BY-NC-SA 4.0

View file

@ -0,0 +1,3 @@
joshua
juan
CC BY-SA 3.0

View file

@ -0,0 +1,3 @@
KLP37 skin
KirbyLP37#6969
CC BY-SA 3.0

View file

@ -0,0 +1,3 @@
Mythrodak
Christian_Soldier
CC 0 (1.0)

View file

@ -0,0 +1,3 @@
Dream
Christian_Soldier
CC 0 (1.0)

View file

@ -0,0 +1,3 @@
ShadowApples
Christian_Soldier
CC 0 (1.0)

View file

@ -0,0 +1,3 @@
Mumbo Jumbo
ZestyZachary
CC 0 (1.0)

View file

@ -0,0 +1,3 @@
Doni Bobes
Christian_Soldier
CC 0 (1.0)

View file

@ -0,0 +1,3 @@
GeorgeNotFound
ZestyZachary
CC 0 (1.0)

View file

@ -0,0 +1,3 @@
Doni Bobes (capeless)
Christian_Soldier
CC 0 (1.0)

View file

@ -0,0 +1,3 @@
Sapnap
Christian_Soldier
CC 0 (1.0)

View file

@ -0,0 +1,3 @@
Fundy
ZestyZachary
CC 0 (1.0)

View file

@ -0,0 +1,3 @@
BadBoyHalo
Christian_Soldier
CC 0 (1.0)

View file

@ -0,0 +1,3 @@
Jschlatt
Christian_Soldier
CC 0 (1.0)

View file

@ -0,0 +1,3 @@
Technoblade
Christian_Soldier
CC 0 (1.0)

View file

@ -0,0 +1,3 @@
eline
eline
CC BY-NC-SA 4.0

Binary file not shown.

After

Width:  |  Height:  |  Size: 899 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 264 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 10 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 10 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

View file

@ -151,7 +151,14 @@ tubelib.register_node("tubelib_addons3:chest", {}, {
end, end,
on_push_item = function(pos, side, item) on_push_item = function(pos, side, item)
local meta = minetest.get_meta(pos) local meta = minetest.get_meta(pos)
return tubelib.put_item(meta, "main", item) local res = tubelib.put_item(meta, "main", item)
if res == false then
local inv = meta:get_inventory()
local leftover = inv:add_item("main", item)
item:set_count(leftover:get_count())
return false
end
return true
end, end,
on_unpull_item = function(pos, side, item) on_unpull_item = function(pos, side, item)
local meta = minetest.get_meta(pos) local meta = minetest.get_meta(pos)

View file

@ -244,6 +244,12 @@ local function distributing(pos, meta)
rearrange_table(kvFilterItemNames[name]) rearrange_table(kvFilterItemNames[name])
busy = true busy = true
break break
elseif num ~= stack:get_count() then
local color = Side2Color[side]
counter[color] = counter[color] + stack:get_count()
rearrange_table(kvFilterItemNames[name])
busy = true
break
end end
end end
@ -257,6 +263,10 @@ local function distributing(pos, meta)
counter[color] = counter[color] + num counter[color] = counter[color] + num
busy = true busy = true
end end
elseif num ~= stack:get_count() then
local color = Side2Color[side]
counter[color] = counter[color] + stack:get_count()
busy = true
end end
end end
end end

View file

@ -42,11 +42,15 @@ local function pushing(pos, meta)
local player_name = meta:get_string("player_name") local player_name = meta:get_string("player_name")
local items = tubelib.pull_stack(pos, "L", player_name) local items = tubelib.pull_stack(pos, "L", player_name)
if items ~= nil then if items ~= nil then
local count = items:get_count()
if tubelib.push_items(pos, "R", items, player_name) == false then if tubelib.push_items(pos, "R", items, player_name) == false then
-- place item back -- place item back
tubelib.unpull_items(pos, "L", items, player_name) tubelib.unpull_items(pos, "L", items, player_name)
State:blocked(pos, meta) -- Complete stack rejected
return if count == items:get_count() then
State:blocked(pos, meta)
return
end
end end
if State.get_state(pos, meta) ~= tubelib.STOPPED then if State.get_state(pos, meta) ~= tubelib.STOPPED then
State:keep_running(pos, meta, COUNTDOWN_TICKS, 1) State:keep_running(pos, meta, COUNTDOWN_TICKS, 1)