Merge branch 'main' into vortechnix
72
.docs/.eleventy.js
Normal file
|
@ -0,0 +1,72 @@
|
||||||
|
const path = require("path");
|
||||||
|
|
||||||
|
const htmlentities = require("html-entities");
|
||||||
|
const Image = require("@11ty/eleventy-img");
|
||||||
|
|
||||||
|
var nextid = 0;
|
||||||
|
|
||||||
|
async function shortcode_image(src, alt, classes = "") {
|
||||||
|
let metadata = await Image(src, {
|
||||||
|
widths: [300, null],
|
||||||
|
formats: ["avif", "jpeg"],
|
||||||
|
outputDir: `./_site/img/`,
|
||||||
|
filenameFormat: (_id, src, width, format, _options) => {
|
||||||
|
const extension = path.extname(src);
|
||||||
|
const name = path.basename(src, extension);
|
||||||
|
return `${name}-${width}w.${format}`;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
console.log(metadata);
|
||||||
|
|
||||||
|
let imageAttributes = {
|
||||||
|
class: classes,
|
||||||
|
alt: htmlentities.encode(alt),
|
||||||
|
sizes: Object.values(metadata)[0].map((el) => `${el.width}w`).join(" "),
|
||||||
|
loading: "lazy",
|
||||||
|
decoding: "async",
|
||||||
|
};
|
||||||
|
|
||||||
|
// You bet we throw an error on missing alt in `imageAttributes` (alt="" works okay)
|
||||||
|
return Image.generateHTML(metadata, imageAttributes);
|
||||||
|
}
|
||||||
|
|
||||||
|
async function shortcode_image_url(src) {
|
||||||
|
let metadata = await Image(src, {
|
||||||
|
widths: [ null ],
|
||||||
|
formats: [ "jpeg" ],
|
||||||
|
outputDir: `./_site/img/`,
|
||||||
|
filenameFormat: (_id, src, width, format, _options) => {
|
||||||
|
const extension = path.extname(src);
|
||||||
|
const name = path.basename(src, extension);
|
||||||
|
return `${name}-${width}w.${format}`;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
console.log(metadata);
|
||||||
|
|
||||||
|
let data = metadata.jpeg[metadata.jpeg.length - 1];
|
||||||
|
return data.url;
|
||||||
|
}
|
||||||
|
|
||||||
|
async function shortcode_cssbox(content, src) {
|
||||||
|
let idprev = `image-${nextid}`;
|
||||||
|
nextid += 1;
|
||||||
|
let idthis = `image-${nextid}`;
|
||||||
|
let idnext = `image-${nextid + 1}`;
|
||||||
|
return `<div class="cssbox">
|
||||||
|
<a id="${idthis}" href="#${idthis}">${await shortcode_image(src, content, "cssbox_thumb", "300w")}
|
||||||
|
<span class="cssbox_full">${await shortcode_image(src, content, "", "1920w")}</span>
|
||||||
|
</a>
|
||||||
|
<a class="cssbox_close" href="#void"></a>
|
||||||
|
<a class="cssbox_prev" href="#${idprev}"><</a>
|
||||||
|
<a class="cssbox_next" href="#${idnext}">></a>
|
||||||
|
</div>`;
|
||||||
|
}
|
||||||
|
|
||||||
|
module.exports = function(eleventyConfig) {
|
||||||
|
// eleventyConfig.addPassthroughCopy("images");
|
||||||
|
// eleventyConfig.addPassthroughCopy("css");
|
||||||
|
eleventyConfig.addShortcode("image", shortcode_image);
|
||||||
|
eleventyConfig.addJavaScriptFunction("image", shortcode_image);
|
||||||
|
eleventyConfig.addShortcode("image-url", shortcode_image_url);
|
||||||
|
eleventyConfig.addPairedShortcode("cssbox", shortcode_cssbox);
|
||||||
|
}
|
1
.docs/.eleventyignore
Normal file
|
@ -0,0 +1 @@
|
||||||
|
css/
|
6
.docs/Changelog.11tydata.json
Normal file
|
@ -0,0 +1,6 @@
|
||||||
|
{
|
||||||
|
"layout": "theme.njk",
|
||||||
|
"title": "Changelog",
|
||||||
|
"tags": "navigable",
|
||||||
|
"date": "2002-01-01"
|
||||||
|
}
|
1
.docs/Changelog.md
Symbolic link
|
@ -0,0 +1 @@
|
||||||
|
../CHANGELOG.md
|
6
.docs/Reference.11tydata.json
Normal file
|
@ -0,0 +1,6 @@
|
||||||
|
{
|
||||||
|
"layout": "theme.njk",
|
||||||
|
"title": "Reference",
|
||||||
|
"tags": "navigable",
|
||||||
|
"date": "2001-01-01"
|
||||||
|
}
|
1
.docs/Reference.md
Symbolic link
|
@ -0,0 +1 @@
|
||||||
|
../Chat-Command-Reference.md
|
35
.docs/_includes/theme.njk
Normal file
|
@ -0,0 +1,35 @@
|
||||||
|
---
|
||||||
|
|
||||||
|
---
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<meta charset='utf-8' />
|
||||||
|
<title>{{ title }} • WorldEditAdditions</title>
|
||||||
|
|
||||||
|
<link rel="stylesheet" href="/theme.css" />
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<nav>
|
||||||
|
<h1>
|
||||||
|
<img src="https://starbeamrainbowlabs.com/images/placeholder/?width=64&height=64&text=%20?%20" alt="Placeholder logo" class="icon medium" />
|
||||||
|
WorldEditAdditions
|
||||||
|
</h1>
|
||||||
|
<ul>
|
||||||
|
{% for navitem in collections.navigable %}
|
||||||
|
<li {% if page.url == navitem.url %}aria-current="page"{% endif %}>
|
||||||
|
<a href="{{ navitem.url }}" class="nav">{{ navitem.data.title }}</a>
|
||||||
|
</li>
|
||||||
|
{% endfor %}
|
||||||
|
<li><a href="https://github.com/sbrl/Minetest-WorldEditAdditions/" class="nav">GitHub</a></li>
|
||||||
|
</ul>
|
||||||
|
</nav>
|
||||||
|
{{ content | safe }}
|
||||||
|
|
||||||
|
<footer>
|
||||||
|
<p>Built with ❤ by <a href="https://starbeamrainbowlabs.com/">Starbeamrainbowlabs</a></p>
|
||||||
|
<p>Tech: <a href="https://www.11ty.dev/">Eleventy</a></p>
|
||||||
|
<p>Licensed under <a href="https://www.mozilla.org/en-US/MPL/2.0/">Mozilla Public Licence 2.0</a> (<a href="https://tldrlegal.com/license/mozilla-public-license-2.0-(mpl-2)">tldr</a>)</p>
|
||||||
|
</footer>
|
||||||
|
</body>
|
||||||
|
</html>
|
5
.docs/css.njk
Normal file
|
@ -0,0 +1,5 @@
|
||||||
|
---
|
||||||
|
permalink: theme.css
|
||||||
|
---
|
||||||
|
{% include "css/theme.css" %}
|
||||||
|
{% include "css/CSSBox/cssbox.css" %}
|
1
.docs/css/CSSBox
Submodule
|
@ -0,0 +1 @@
|
||||||
|
Subproject commit 2234546c25d51770086f972b0f330d4087e7c829
|
224
.docs/css/theme.css
Normal file
|
@ -0,0 +1,224 @@
|
||||||
|
/* Base CSS */
|
||||||
|
|
||||||
|
/*
|
||||||
|
* This CSS file contains (for me) logical style defaults that are easy to read.
|
||||||
|
*
|
||||||
|
* This file is quite often used as a starting point for other projects.
|
||||||
|
*
|
||||||
|
* Todo:
|
||||||
|
* <button>
|
||||||
|
* <inputs>
|
||||||
|
* <progress>
|
||||||
|
* <meter>
|
||||||
|
*/
|
||||||
|
|
||||||
|
:root {
|
||||||
|
--bg-main: #8ABEF6;
|
||||||
|
--bg-bright: #38871e;
|
||||||
|
--bg-alt: #3F57B4;
|
||||||
|
--bg-transcluscent-slight: rgba(255, 255, 255, 0.1);
|
||||||
|
--bg-transcluscent: rgba(255, 255, 255, 0.8);
|
||||||
|
|
||||||
|
--text-main: #3F57B4;
|
||||||
|
--text-bright: #efefef;
|
||||||
|
--text-alt: #38871e;
|
||||||
|
|
||||||
|
--highlight: hsl(353, 100%, 36%);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* @media (prefers-color-scheme: dark) {
|
||||||
|
:root {
|
||||||
|
--bg-main: #232323;
|
||||||
|
--bg-bright: black;
|
||||||
|
--bg-transcluscent: rgba(50, 50, 50, 0.5);
|
||||||
|
|
||||||
|
--text-main: #f3f3f3;
|
||||||
|
}
|
||||||
|
} */
|
||||||
|
|
||||||
|
/* rem is relative to the html element, and em is relative to the current element. */
|
||||||
|
html { font-size: 100%; }
|
||||||
|
|
||||||
|
body
|
||||||
|
{
|
||||||
|
margin: 0;
|
||||||
|
font-family: sans-serif; /* Serif is awful :( */
|
||||||
|
|
||||||
|
background: var(--bg-main); /* Don't forget to update the @page one too for paged media */
|
||||||
|
color: var(--text-main);
|
||||||
|
}
|
||||||
|
|
||||||
|
title { string-set: page-title content(text); }
|
||||||
|
|
||||||
|
/* Special tweaks for paged media (e.g. PDFs) */
|
||||||
|
@page {
|
||||||
|
font-family: sans-serif;
|
||||||
|
background: var(--bg-main); /* Set the background colour to cover the whole page */
|
||||||
|
|
||||||
|
@top-right {
|
||||||
|
content: "By Starbeamrainbowlabs";
|
||||||
|
opacity: 0.6;
|
||||||
|
}
|
||||||
|
@bottom-right {
|
||||||
|
content: "Page " counter(page) " of " counter(pages);
|
||||||
|
opacity: 0.6;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
nav {
|
||||||
|
background: var(--bg-bright);
|
||||||
|
display: flex;
|
||||||
|
align-items: baseline;
|
||||||
|
font-size: 1.1em;
|
||||||
|
margin: 0;
|
||||||
|
}
|
||||||
|
nav h1 {
|
||||||
|
background: var(--bg-alt);
|
||||||
|
margin: 0;
|
||||||
|
padding: 0.5em;
|
||||||
|
font-size: 1.2em;
|
||||||
|
color: var(--text-bright);
|
||||||
|
}
|
||||||
|
nav ul {
|
||||||
|
flex: 1;
|
||||||
|
list-style-type: none;
|
||||||
|
margin: 0; padding: 0;
|
||||||
|
display: flex;
|
||||||
|
justify-content: space-evenly;
|
||||||
|
}
|
||||||
|
nav ul li {
|
||||||
|
background: var(--bg-transcluscent-slight);
|
||||||
|
}
|
||||||
|
nav a {
|
||||||
|
display: inline-block;
|
||||||
|
padding: 1.2em 3em;
|
||||||
|
text-decoration: none;
|
||||||
|
font-weight: bold;
|
||||||
|
color: var(--text-bright);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* A small tweak to things more responsive */
|
||||||
|
iframe, object, embed, img, table
|
||||||
|
{
|
||||||
|
max-width: 100%;
|
||||||
|
}
|
||||||
|
picture img { height: initial; }
|
||||||
|
|
||||||
|
/* Turn the user's cursor into a hand when over things they can click */
|
||||||
|
button, summary
|
||||||
|
{
|
||||||
|
cursor: pointer;
|
||||||
|
}
|
||||||
|
|
||||||
|
th, td
|
||||||
|
{
|
||||||
|
margin: 4px 6px;
|
||||||
|
padding: 4px 6px;
|
||||||
|
}
|
||||||
|
|
||||||
|
a { font-weight: bold; }
|
||||||
|
/* a:not(.nav) { color: hsl(208, 67%, 40%); }
|
||||||
|
a:not(.nav):hover { color: hsl(214, 67%, 50%); }
|
||||||
|
a:not(.nav):active, a:focus { color: hsl(214, 87%, 60%); } */
|
||||||
|
a:not(.nav):visited { color: hsl(240, 77%, 60%); }
|
||||||
|
|
||||||
|
pre { page-break-inside: avoid; break-inside: avoid; }
|
||||||
|
pre, code {
|
||||||
|
white-space: pre-wrap;
|
||||||
|
-moz-tab-size: 4;
|
||||||
|
tab-size: 4;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* todo add the rest of the textbox like inputs here */
|
||||||
|
input[type=text], input[type=number], textarea
|
||||||
|
{
|
||||||
|
margin: 3px 5px;
|
||||||
|
padding: 5px 8px;
|
||||||
|
|
||||||
|
background: var(--bg-bright);
|
||||||
|
border: 0;
|
||||||
|
border-radius: 5px;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* Utility / layout aids */
|
||||||
|
.float.left { float: left; }
|
||||||
|
.float.right { float: right; }
|
||||||
|
|
||||||
|
.flex { display: flex; }
|
||||||
|
.flex-1 { flex: 1; }
|
||||||
|
.flex-2 { flex: 2; }
|
||||||
|
.flex-3 { flex: 3; }
|
||||||
|
.flex-4 { flex: 4; }
|
||||||
|
.flex-5 { flex: 5; }
|
||||||
|
.flex-6 { flex: 6; }
|
||||||
|
|
||||||
|
.small-spacing { margin: 0.25em 0.35em; padding: 0.25em 0.35em; }
|
||||||
|
.med-spacing { margin: 0.45em 0.65em; padding: 0.45em 0.65em; }
|
||||||
|
.high-spacing { margin: 1em 1.25em; padding: 1em 1.25em; }
|
||||||
|
|
||||||
|
.text-left { text-align: left; }
|
||||||
|
.text-centre { text-align: center; }
|
||||||
|
.text-right { text-align: right; }
|
||||||
|
|
||||||
|
.small-text { font-size: 0.8rem; }
|
||||||
|
.medium-text { font-size: 1rem; }
|
||||||
|
.large-text { font-size: 1.3rem; }
|
||||||
|
|
||||||
|
.bold-text { font-weight: bolder; }
|
||||||
|
|
||||||
|
.block { display: block; }
|
||||||
|
.inline { display: inline; }
|
||||||
|
.inline.block { display: inline-block; }
|
||||||
|
|
||||||
|
.invisilink { text-decoration: none; color: inherit; }
|
||||||
|
.invisilist { list-style-type: none; margin: 5px; padding: 5px; }
|
||||||
|
|
||||||
|
.icon { vertical-align: middle; }
|
||||||
|
.icon.tiny { max-width: 1em; max-height: 1em; }
|
||||||
|
.icon.small { max-width: 1.25em; max-height: 1.25em; }
|
||||||
|
.icon.medium { max-width: 2em; max-height: 2em; }
|
||||||
|
.icon.large { max-width: 5em; max-height: 5em; }
|
||||||
|
|
||||||
|
.img-text-middle{ vertical-align: middle; }
|
||||||
|
|
||||||
|
|
||||||
|
.bigbox {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
align-items: center; justify-content: center;
|
||||||
|
background: content-box linear-gradient(var(--bg-transcluscent), var(--bg-transcluscent)),
|
||||||
|
var(--bg) center / cover;
|
||||||
|
height: 80vh;
|
||||||
|
padding: 0 5em 0 5em;
|
||||||
|
box-sizing: border-box;
|
||||||
|
}
|
||||||
|
.bigbox h1 {
|
||||||
|
margin-top: 0;
|
||||||
|
font-size: 3em;
|
||||||
|
color: var(--text-alt);
|
||||||
|
}
|
||||||
|
.bigbox :last-child { margin-bottom: 7em; }
|
||||||
|
|
||||||
|
.features-large {
|
||||||
|
margin: 3em 0;
|
||||||
|
display: flex;
|
||||||
|
flex-direction: row;
|
||||||
|
flex-wrap: wrap;
|
||||||
|
justify-content: space-evenly;
|
||||||
|
}
|
||||||
|
.features-large figure {
|
||||||
|
background: var(--bg-transcluscent);
|
||||||
|
margin: 0.1em;
|
||||||
|
padding: 1em;
|
||||||
|
max-width: 15em;
|
||||||
|
}
|
||||||
|
/* .features-large figure img {
|
||||||
|
max-width: 12em;
|
||||||
|
} */
|
||||||
|
|
||||||
|
.cssbox-gallery {
|
||||||
|
display: flex;
|
||||||
|
}
|
BIN
.docs/images/banner-main.jpeg
Normal file
After Width: | Height: | Size: 936 KiB |
BIN
.docs/images/conv-layers.png
Normal file
After Width: | Height: | Size: 317 KiB |
BIN
.docs/images/forest.png
Normal file
After Width: | Height: | Size: 474 KiB |
BIN
.docs/images/gallery-a.jpeg
Normal file
After Width: | Height: | Size: 754 KiB |
BIN
.docs/images/gallery-b.jpeg
Normal file
After Width: | Height: | Size: 1.7 MiB |
BIN
.docs/images/maze2d-alt.png
Normal file
After Width: | Height: | Size: 341 KiB |
BIN
.docs/images/maze2d.png
Normal file
After Width: | Height: | Size: 434 KiB |
BIN
.docs/images/torus-bonemeal.png
Normal file
After Width: | Height: | Size: 354 KiB |
59
.docs/index.html
Normal file
|
@ -0,0 +1,59 @@
|
||||||
|
---
|
||||||
|
layout: theme.njk
|
||||||
|
title: Welcome
|
||||||
|
tags: navigable
|
||||||
|
date: 2000-01-01
|
||||||
|
---
|
||||||
|
|
||||||
|
<section class="bigbox" style="--bg: url({% image-url "images/banner-main.jpeg" %})">
|
||||||
|
<h1>WorldEditAdditions</h1>
|
||||||
|
<p><em>Extra tools and commands to extend <a href="https://github.com/Uberi/Minetest-WorldEdit">WorldEdit</a> for <a href="https://www.minetest.net/">Minetest</a></em></p>
|
||||||
|
<p>If you can dream of it, it probably belongs here!</p>
|
||||||
|
</section>
|
||||||
|
|
||||||
|
<section class="features-large">
|
||||||
|
<figure>
|
||||||
|
{% image "images/maze2d-alt.png", "A green 2D hedge maze, made with the //maze command" %}
|
||||||
|
<!-- <img src="/images/maze2d-alt.png" alt="A green 2D hedge maze, made with the //maze command" /> -->
|
||||||
|
<figcaption>
|
||||||
|
<p>Use <code>//maze</code> and <code>//maze3d</code> to generate customisable mazes in 2 or 3 dimensions.</p>
|
||||||
|
<p>Customise the path sizing for additional artistic control.</p>
|
||||||
|
</figcaption>
|
||||||
|
</figure>
|
||||||
|
|
||||||
|
<figure>
|
||||||
|
{% image "images/forest.png", "A forest of orange and lemon trees from the cooltrees mod, along with some bushes from Minetest Game." %}
|
||||||
|
<!-- <img src="/images/forest.png" alt="A forest of orange and lemon trees from the cooltrees mod, along with some bushes from Minetest Game." /> -->
|
||||||
|
<figcaption>
|
||||||
|
<p>Save time by creating instant forests with <code>//forest</code>.</p>
|
||||||
|
<p>Artibrary mixes of saplings are supported too as a weighted list.</p>
|
||||||
|
</figcaption>
|
||||||
|
</figure>
|
||||||
|
|
||||||
|
<figure>
|
||||||
|
{% image "images/conv-layers.png", "A small mountain smoothed with //smoothadv and topped with snow with //overlay" %}
|
||||||
|
<!-- <img src="/images/conv-layers.png" alt="A small mountain smoothed with //smoothadv and topped with snow with //overlay" /> -->
|
||||||
|
<figcaption>
|
||||||
|
<p>Unlock a continuously growing library of commands, such as <code>//smoothadv</code> for easy terrain smoothing, and <code>//overlay</code> for overlaying a node on top of terrain.</p>
|
||||||
|
<p>Many more commands are waiting to be discovered, including <code>//torus</code>, <code>//bonemeal</code>, and <code>//scale</code>.</p>
|
||||||
|
</figcaption>
|
||||||
|
</figure>
|
||||||
|
|
||||||
|
<figure>
|
||||||
|
{% image "images/torus-bonemeal.png", "A dirt torus with a grassy top, and a meadow of grass/flowers. Demonstrates //layers and //bonemeal. Doesn't have much to do with the sentences below - I just thought it looked nice as meta commands are difficult to find a good picture for." %}
|
||||||
|
<img src="/images/torus-bonemeal.png" alt="A dirt torus with a grassy top, and a meadow of grass/flowers. Demonstrates //layers and //bonemeal. Doesn't have much to do with the sentences below - I just thought it looked nice as meta commands are difficult to find a good picture for." />
|
||||||
|
<figcaption>
|
||||||
|
<p>Powerful meta commands such as <code>//multi</code> for executing multiple commands at once and <code>//subdivide</code> for running commands on areas of virtually unlimited size enable convenience and enhance flexibility.</p>
|
||||||
|
</figcaption>
|
||||||
|
</figure>
|
||||||
|
</section>
|
||||||
|
|
||||||
|
<!-- Potentially we might want some inspiration from https://codepen.io/emared/pen/gWGBLR here -->
|
||||||
|
<section class="cssbox-gallery">
|
||||||
|
{% cssbox "images/gallery-a.jpeg" %}
|
||||||
|
A scene demonstrating <code>//replacemix</code>, <code>//ellipsoid</code>, <code>//layers</code>, <code>smoothadv</code> (aka <code>convolve</code> and <code>conv</code>), and <code>//floodfill</code> - all of which are provided by WorldEditAdditions.
|
||||||
|
{% endcssbox %}
|
||||||
|
{% cssbox "images/gallery-b.jpeg" %}
|
||||||
|
The inside of a 3d maze made with <code>//maze3d</code>. Lighting was placed manually to improve screenshot quality.
|
||||||
|
{% endcssbox %}
|
||||||
|
</section>
|
8329
.docs/package-lock.json
generated
Normal file
25
.docs/package.json
Normal file
|
@ -0,0 +1,25 @@
|
||||||
|
{
|
||||||
|
"name": "worldeditadditions",
|
||||||
|
"version": "1.0.0",
|
||||||
|
"description": "Documentation website for WorldEditAdditions",
|
||||||
|
"main": "index.js",
|
||||||
|
"private": true,
|
||||||
|
"scripts": {
|
||||||
|
"test": "echo \"No tests have been implemented yet\""
|
||||||
|
},
|
||||||
|
"repository": {
|
||||||
|
"type": "git",
|
||||||
|
"url": "git+https://github.com/sbrl/Minetest-WorldEditAdditions.git"
|
||||||
|
},
|
||||||
|
"author": "Starbeamrainbowlabs",
|
||||||
|
"license": "MPL-2.0",
|
||||||
|
"bugs": {
|
||||||
|
"url": "https://github.com/sbrl/Minetest-WorldEditAdditions/issues"
|
||||||
|
},
|
||||||
|
"homepage": "https://github.com/sbrl/Minetest-WorldEditAdditions#readme",
|
||||||
|
"devDependencies": {
|
||||||
|
"@11ty/eleventy": "^0.12.1",
|
||||||
|
"@11ty/eleventy-img": "^0.9.0",
|
||||||
|
"html-entities": "^2.3.2"
|
||||||
|
}
|
||||||
|
}
|
176
.gitignore
vendored
|
@ -1,3 +1,5 @@
|
||||||
|
_site/
|
||||||
|
|
||||||
# Created by https://www.toptal.com/developers/gitignore/api/git
|
# Created by https://www.toptal.com/developers/gitignore/api/git
|
||||||
# Edit at https://www.toptal.com/developers/gitignore?templates=git
|
# Edit at https://www.toptal.com/developers/gitignore?templates=git
|
||||||
|
|
||||||
|
@ -58,3 +60,177 @@ luac.out
|
||||||
*.i*86
|
*.i*86
|
||||||
*.x86_64
|
*.x86_64
|
||||||
*.hex
|
*.hex
|
||||||
|
|
||||||
|
# Created by https://www.toptal.com/developers/gitignore/api/lua,node
|
||||||
|
# Edit at https://www.toptal.com/developers/gitignore?templates=lua,node
|
||||||
|
|
||||||
|
### Lua ###
|
||||||
|
# Compiled Lua sources
|
||||||
|
luac.out
|
||||||
|
|
||||||
|
# luarocks build files
|
||||||
|
*.src.rock
|
||||||
|
*.zip
|
||||||
|
*.tar.gz
|
||||||
|
|
||||||
|
# Object files
|
||||||
|
*.o
|
||||||
|
*.os
|
||||||
|
*.ko
|
||||||
|
*.obj
|
||||||
|
*.elf
|
||||||
|
|
||||||
|
# Precompiled Headers
|
||||||
|
*.gch
|
||||||
|
*.pch
|
||||||
|
|
||||||
|
# Libraries
|
||||||
|
*.lib
|
||||||
|
*.a
|
||||||
|
*.la
|
||||||
|
*.lo
|
||||||
|
*.def
|
||||||
|
*.exp
|
||||||
|
|
||||||
|
# Shared objects (inc. Windows DLLs)
|
||||||
|
*.dll
|
||||||
|
*.so
|
||||||
|
*.so.*
|
||||||
|
*.dylib
|
||||||
|
|
||||||
|
# Executables
|
||||||
|
*.exe
|
||||||
|
*.out
|
||||||
|
*.app
|
||||||
|
*.i*86
|
||||||
|
*.x86_64
|
||||||
|
*.hex
|
||||||
|
|
||||||
|
|
||||||
|
### Node ###
|
||||||
|
# Logs
|
||||||
|
logs
|
||||||
|
*.log
|
||||||
|
npm-debug.log*
|
||||||
|
yarn-debug.log*
|
||||||
|
yarn-error.log*
|
||||||
|
lerna-debug.log*
|
||||||
|
|
||||||
|
# Diagnostic reports (https://nodejs.org/api/report.html)
|
||||||
|
report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json
|
||||||
|
|
||||||
|
# Runtime data
|
||||||
|
pids
|
||||||
|
*.pid
|
||||||
|
*.seed
|
||||||
|
*.pid.lock
|
||||||
|
|
||||||
|
# Directory for instrumented libs generated by jscoverage/JSCover
|
||||||
|
lib-cov
|
||||||
|
|
||||||
|
# Coverage directory used by tools like istanbul
|
||||||
|
coverage
|
||||||
|
*.lcov
|
||||||
|
|
||||||
|
# nyc test coverage
|
||||||
|
.nyc_output
|
||||||
|
|
||||||
|
# Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files)
|
||||||
|
.grunt
|
||||||
|
|
||||||
|
# Bower dependency directory (https://bower.io/)
|
||||||
|
bower_components
|
||||||
|
|
||||||
|
# node-waf configuration
|
||||||
|
.lock-wscript
|
||||||
|
|
||||||
|
# Compiled binary addons (https://nodejs.org/api/addons.html)
|
||||||
|
build/Release
|
||||||
|
|
||||||
|
# Dependency directories
|
||||||
|
node_modules/
|
||||||
|
jspm_packages/
|
||||||
|
|
||||||
|
# TypeScript v1 declaration files
|
||||||
|
typings/
|
||||||
|
|
||||||
|
# TypeScript cache
|
||||||
|
*.tsbuildinfo
|
||||||
|
|
||||||
|
# Optional npm cache directory
|
||||||
|
.npm
|
||||||
|
|
||||||
|
# Optional eslint cache
|
||||||
|
.eslintcache
|
||||||
|
|
||||||
|
# Optional stylelint cache
|
||||||
|
.stylelintcache
|
||||||
|
|
||||||
|
# Microbundle cache
|
||||||
|
.rpt2_cache/
|
||||||
|
.rts2_cache_cjs/
|
||||||
|
.rts2_cache_es/
|
||||||
|
.rts2_cache_umd/
|
||||||
|
|
||||||
|
# Optional REPL history
|
||||||
|
.node_repl_history
|
||||||
|
|
||||||
|
# Output of 'npm pack'
|
||||||
|
*.tgz
|
||||||
|
|
||||||
|
# Yarn Integrity file
|
||||||
|
.yarn-integrity
|
||||||
|
|
||||||
|
# dotenv environment variables file
|
||||||
|
.env
|
||||||
|
.env.test
|
||||||
|
.env*.local
|
||||||
|
|
||||||
|
# parcel-bundler cache (https://parceljs.org/)
|
||||||
|
.cache
|
||||||
|
.parcel-cache
|
||||||
|
|
||||||
|
# Next.js build output
|
||||||
|
.next
|
||||||
|
|
||||||
|
# Nuxt.js build / generate output
|
||||||
|
.nuxt
|
||||||
|
dist
|
||||||
|
|
||||||
|
# Storybook build outputs
|
||||||
|
.out
|
||||||
|
.storybook-out
|
||||||
|
storybook-static
|
||||||
|
|
||||||
|
# rollup.js default build output
|
||||||
|
dist/
|
||||||
|
|
||||||
|
# Gatsby files
|
||||||
|
.cache/
|
||||||
|
# Comment in the public line in if your project uses Gatsby and not Next.js
|
||||||
|
# https://nextjs.org/blog/next-9-1#public-directory-support
|
||||||
|
# public
|
||||||
|
|
||||||
|
# vuepress build output
|
||||||
|
.vuepress/dist
|
||||||
|
|
||||||
|
# Serverless directories
|
||||||
|
.serverless/
|
||||||
|
|
||||||
|
# FuseBox cache
|
||||||
|
.fusebox/
|
||||||
|
|
||||||
|
# DynamoDB Local files
|
||||||
|
.dynamodb/
|
||||||
|
|
||||||
|
# TernJS port file
|
||||||
|
.tern-port
|
||||||
|
|
||||||
|
# Stores VSCode versions used for testing VSCode extensions
|
||||||
|
.vscode-test
|
||||||
|
|
||||||
|
# Temporary folders
|
||||||
|
tmp/
|
||||||
|
temp/
|
||||||
|
|
||||||
|
# End of https://www.toptal.com/developers/gitignore/api/lua,node
|
||||||
|
|
3
.gitmodules
vendored
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
[submodule ".docs/css/CSSBox"]
|
||||||
|
path = .docs/css/CSSBox
|
||||||
|
url = https://github.com/TheLastProject/CSSBox.git
|
|
@ -22,6 +22,7 @@ Note to self: See the bottom of this file for the release template text.
|
||||||
- `//multi`: Improve resilience by handling some edge cases
|
- `//multi`: Improve resilience by handling some edge cases
|
||||||
- `//layers`: Fix crash due to outdated debug code
|
- `//layers`: Fix crash due to outdated debug code
|
||||||
- `//erode`/snowballs: Fix assignment to undeclared variable
|
- `//erode`/snowballs: Fix assignment to undeclared variable
|
||||||
|
- `//floodfill`: Fix error handling
|
||||||
|
|
||||||
|
|
||||||
## v1.11: The big data update (25th January 2021)
|
## v1.11: The big data update (25th January 2021)
|
||||||
|
|
BIN
screenshot.png
Before Width: | Height: | Size: 3.9 MiB After Width: | Height: | Size: 3.5 MiB |
|
@ -27,6 +27,7 @@ function worldeditadditions.noise2d(pos1, pos2, noise_params)
|
||||||
|
|
||||||
local perlin_map = PerlinNoiseMap(noise_params, heightmap_size)
|
local perlin_map = PerlinNoiseMap(noise_params, heightmap_size)
|
||||||
|
|
||||||
|
-- TODO: apply the perlin noise map here
|
||||||
|
|
||||||
local stats = { added = 0, removed = 0 }
|
local stats = { added = 0, removed = 0 }
|
||||||
|
|
||||||
|
|
|
@ -83,13 +83,16 @@ end
|
||||||
--- Filters the items in the given table using the given function.
|
--- Filters the items in the given table using the given function.
|
||||||
-- The function is executed for each item in the list. If it returns true, the
|
-- The function is executed for each item in the list. If it returns true, the
|
||||||
-- item is kept. If it returns false, the item is discarded.
|
-- item is kept. If it returns false, the item is discarded.
|
||||||
|
-- Arguments passed to the function: item, i
|
||||||
|
-- ...where item is the item to filter, and i is the index in the table the item
|
||||||
|
-- is located at.
|
||||||
-- @param tbl table The table of values to filter.
|
-- @param tbl table The table of values to filter.
|
||||||
-- @param func function<any>:bool The filter function to execute - should return a boolean value indicating whether the item provided as the first argument should be kept
|
-- @param func function<any, number>:bool The filter function to execute - should return a boolean value indicating whether the item provided as the first argument should be kept
|
||||||
-- @returns table A new table containing the values that the given function returned true for.
|
-- @returns table A new table containing the values that the given function returned true for.
|
||||||
function worldeditadditions.table_filter(tbl, func)
|
function worldeditadditions.table_filter(tbl, func)
|
||||||
local result = {}
|
local result = {}
|
||||||
for i,value in ipairs(tbl) do
|
for i,value in ipairs(tbl) do
|
||||||
if func(value) then
|
if func(value, i) then
|
||||||
table.insert(result, value)
|
table.insert(result, value)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -24,8 +24,7 @@ worldedit.register_command("floodfill", {
|
||||||
replace_node = worldedit.normalize_nodename(replace_node)
|
replace_node = worldedit.normalize_nodename(replace_node)
|
||||||
|
|
||||||
if not replace_node then
|
if not replace_node then
|
||||||
worldedit.player_notify(name, "Error: Invalid node name.")
|
return false, "Error: Invalid node name."
|
||||||
return false
|
|
||||||
end
|
end
|
||||||
|
|
||||||
return true, replace_node, radius
|
return true, replace_node, radius
|
||||||
|
|
18
worldeditadditions_commands/doc/init.lua
Normal file
|
@ -0,0 +1,18 @@
|
||||||
|
-- ██████ ██████ ██████ ███████
|
||||||
|
-- ██ ██ ██ ██ ██ ██
|
||||||
|
-- ██ ██ ██ ██ ██ ███████
|
||||||
|
-- ██ ██ ██ ██ ██ ██
|
||||||
|
-- ██████ ██████ ██████ ███████
|
||||||
|
|
||||||
|
-- This directory contains support for the doc mod:
|
||||||
|
-- https://content.minetest.net/packages/Wuzzy/doc/
|
||||||
|
-- API docs: https://repo.or.cz/minetest_doc.git/blob/HEAD:/API.md
|
||||||
|
|
||||||
|
-- The strategy here is not to have duplicate content, but to pull data from
|
||||||
|
-- existing sources.
|
||||||
|
-- Long-form article descriptions: Chat-Command-Reference.md
|
||||||
|
-- Short descriptions: Undecided, but maybe worldedit.registered_commands
|
||||||
|
|
||||||
|
worldeditadditions.doc = {}
|
||||||
|
|
||||||
|
dofile(worldeditadditions_commands.modpath.."/doc/parse_reference.lua")
|
45
worldeditadditions_commands/doc/parse_reference.lua
Normal file
|
@ -0,0 +1,45 @@
|
||||||
|
|
||||||
|
|
||||||
|
local function get_reference()
|
||||||
|
local lines = {}
|
||||||
|
for line in io.lines(worldeditadditions_commands.modpath.."/Chat-Command-Reference.md") do
|
||||||
|
table.insert(lines, line)
|
||||||
|
end
|
||||||
|
return lines
|
||||||
|
end
|
||||||
|
|
||||||
|
local function group_by_heading(lines, max_level)
|
||||||
|
local groups = {}
|
||||||
|
local acc = {}
|
||||||
|
|
||||||
|
for i,line in ipairs(lines) do
|
||||||
|
if worldeditadditions.str_starts(line, "#") then
|
||||||
|
local _, _, heading, headingtext = line:find("(#+)%s*(.*)")
|
||||||
|
if #heading <= max_level then
|
||||||
|
table.insert(groups, {
|
||||||
|
level = #heading,
|
||||||
|
heading = headingtext,
|
||||||
|
text = table.concat(acc, "\n")
|
||||||
|
})
|
||||||
|
acc = {}
|
||||||
|
end
|
||||||
|
else
|
||||||
|
table.insert(acc, line)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
return groups
|
||||||
|
end
|
||||||
|
|
||||||
|
function worldeditadditions.doc.parse_reference()
|
||||||
|
local lines = get_reference()
|
||||||
|
local headings = worldeditadditions.table_filter(
|
||||||
|
group_by_heading(lines, 2),
|
||||||
|
function(item, i) return item.level ~= 2 end
|
||||||
|
)
|
||||||
|
for i,value in ipairs(headings) do
|
||||||
|
print(i, "level", level, "heading", heading, "text", text)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
|
worldeditadditions.doc.parse_reference()
|
|
@ -62,6 +62,18 @@ else
|
||||||
minetest.log("action", "[WorldEditAdditions] bonemeal mod not detected: //bonemeal and //forest commands not registered (if you see this message and you're using an alternative mod that provides bonemeal, please get in touch by opening an issue)")
|
minetest.log("action", "[WorldEditAdditions] bonemeal mod not detected: //bonemeal and //forest commands not registered (if you see this message and you're using an alternative mod that provides bonemeal, please get in touch by opening an issue)")
|
||||||
end
|
end
|
||||||
|
|
||||||
|
-- Minetest doesn't allow you to read from files outside the mod
|
||||||
|
-- directory - even if you're part of a modpack you can't read from the main
|
||||||
|
-- modpack directory. Furthermore, symlinks don't help.
|
||||||
|
-- If you have a solution to this issue, please comment on this GitHub issue:
|
||||||
|
-- https://github.com/sbrl/Minetest-WorldEditAdditions/issues/55
|
||||||
|
-- NOTE TO SELF: When uncommenting this, also add "doc?" to depends.txt
|
||||||
|
-- if minetest.get_modpath("doc") then
|
||||||
|
-- dofile(we_c.modpath.."/doc/init.lua")
|
||||||
|
-- else
|
||||||
|
-- minetest.log("action", "[WorldEditAdditions] doc mod not detected: not registering doc category with extended help")
|
||||||
|
-- end
|
||||||
|
|
||||||
|
|
||||||
worldedit.alias_command("smoothadv", "convolve")
|
worldedit.alias_command("smoothadv", "convolve")
|
||||||
worldedit.alias_command("conv", "convolve")
|
worldedit.alias_command("conv", "convolve")
|
||||||
|
|