{"description":"Welcome to the best place to find Luanti mods, games, and texture packs","expired":false,"feed_url":"https://content.luanti.ru/packages/rstcxk/lush/releases_feed.json","home_page_url":"https://content.luanti.ru/","icon":"https://content.luanti.ru/favicon-128.png","items":[{"author":{"avatar":"https://secure.gravatar.com/avatar/2f7f4123aba1fe27191e8860aca7d17c?s=64&d=retro&r=g","name":"rstcxk","url":"https://content.luanti.ru/users/rstcxk/"},"content_html":"<p>There is a lot to go through...\nBasically, lush became a full on programming language</p>\n<p>There have been many bug fixes. So much that i won't bother listing them (not that i remember them all lol)</p>\n<h2 id=\"main-changes-to-the-language\">Main changes to the language <a class=\"header-anchor\" href=\"#main-changes-to-the-language\" rel=\"nofollow\">\ud83d\udd17</a></h2>\n<ul>\n<li>Big optimizations</li>\n<li>You can do math! <code>echo 2 + 2</code> is 4</li>\n<li>Same goes for logical expressions: <code>and</code>, <code>or</code>, <code>not</code>, <code>&gt;</code>, <code>&lt;</code>, <code>==</code>, yada yada. operators <code>or</code> and <code>and</code> follow the semantic of lua's logical operators. So <code>$logic_var and 34 or 12</code> is equivelent to a tetriary operator&quot;: <code>logic_var ? 32 : 12</code> (c++)</li>\n<li>If you're fancy, you can use boolean algebra: <code>band</code>, <code>bnot</code>, <code>bor</code>, <code>bxor</code>, <code>&lt;&lt;</code>, <code>&gt;&gt;</code></li>\n<li>Some misc operators: <code>[]</code> (indexing), <code>.</code> (indexing), <code>#</code> (length)</li>\n<li>You can define functions</li>\n<li>You can now write comments, they start with <code>--</code></li>\n<li>You can execute <code>.lush</code> script files (<code>run</code> command)</li>\n</ul>\n<h3 id=\"more-obscure-changes-only-intresting-if-you-know-about-interpreters\">more obscure changes (only intresting if you know about interpreters) <a class=\"header-anchor\" href=\"#more-obscure-changes-only-intresting-if-you-know-about-interpreters\" rel=\"nofollow\">\ud83d\udd17</a></h3>\n<ul>\n<li>Primitive constant folding implementation</li>\n<li>The parse tree (which also happens to be the IR) is now dumpable in human format</li>\n</ul>\n<h2 id=\"breaking-changes\">breaking changes <a class=\"header-anchor\" href=\"#breaking-changes\" rel=\"nofollow\">\ud83d\udd17</a></h2>\n<p>Sadly, the addition of operators (mathm, logic) had introduced some ambiguities into the language, and some things needed to be changed</p>\n<ul>\n<li>Node related commands were changed to be shorter: <code>setnode</code> =&gt; <code>nset</code> or <code>setnodeinfo</code> =&gt; <code>nsetinfo</code></li>\n<li>Options now start with <code>!</code>, not <code>-</code> or <code>--</code>. The distinction between long and short options has been completely removed. This is because the minus operator <code>-</code> and the old syntax were at odds</li>\n<li>tables use <code>{}</code> isntead of <code>[]</code>. ie: <code>{1, 2, 3}</code>, not <code>[1, 2, 3]</code>. This is because the old syntax confiltcs with the <code>[]</code> operator. Normal languages dont have this problem because they can figure out these types of ambiguities with commas</li>\n<li>same goes for selectors: <code>@a{whaever = &quot;lol&quot;}</code>, not <code>@a[whaever = &quot;lol&quot;]</code></li>\n<li>Parameter expansion modifiers are removed, since we have normal operators now</li>\n</ul>\n<h2 id=\"new-commands\">new commands <a class=\"header-anchor\" href=\"#new-commands\" rel=\"nofollow\">\ud83d\udd17</a></h2>\n<p>Im probably missing some...</p>\n<h4 id=\"misc\">misc <a class=\"header-anchor\" href=\"#misc\" rel=\"nofollow\">\ud83d\udd17</a></h4>\n<ul>\n<li><code>pick</code></li>\n<li><code>settings</code></li>\n<li><code>veccopy</code></li>\n<li><code>modpath</code></li>\n<li><code>tableunpack</code></li>\n<li><code>randomelem</code></li>\n<li><code>seq</code></li>\n</ul>\n<h4 id=\"nodes\">nodes <a class=\"header-anchor\" href=\"#nodes\" rel=\"nofollow\">\ud83d\udd17</a></h4>\n<ul>\n<li><code>setnode</code> =&gt; <code>nset</code></li>\n<li><code>ndel</code></li>\n<li><code>nname</code></li>\n<li><code>nodeinfo</code> =&gt; <code>ninfo</code></li>\n<li><code>setnodeifno</code> =&gt; <code>nsetinfo</code></li>\n<li><code>ngroup</code></li>\n</ul>\n<h4 id=\"interpreter\">Interpreter <a class=\"header-anchor\" href=\"#interpreter\" rel=\"nofollow\">\ud83d\udd17</a></h4>\n<ul>\n<li><code>run</code></li>\n<li><code>lsscripts</code></li>\n<li><code>apply_ruleset</code></li>\n<li><code>eval_command_args</code></li>\n<li><code>dump_parse_tree</code></li>\n<li><code>dump_function</code></li>\n</ul>\n<h4 id=\"hooks\">hooks <a class=\"header-anchor\" href=\"#hooks\" rel=\"nofollow\">\ud83d\udd17</a></h4>\n<p>(pretty underdeveloped, many hooks are missing. They were mostely added on a &quot;need to use&quot; basis when programming the tetris POC)</p>\n<ul>\n<li><code>register_hook</code></li>\n<li><code>register_control_hook</code></li>\n</ul>\n<h4 id=\"math\">math <a class=\"header-anchor\" href=\"#math\" rel=\"nofollow\">\ud83d\udd17</a></h4>\n<ul>\n<li><code>pow</code></li>\n<li><code>sqrt</code></li>\n<li><code>abs</code></li>\n<li><code>floor</code></li>\n<li><code>ceil</code></li>\n<li><code>round</code></li>\n<li><code>min</code></li>\n<li><code>max</code></li>\n<li><code>random</code></li>\n<li><code>transform</code></li>\n</ul>\n","date_published":"2025-08-03T21:24:58Z","id":"https://content.luanti.ru/packages/rstcxk/lush/releases/32237/","image":"https://content.luanti.ru/thumbnails/4/5e7c57528b.png","language":"en","summary":"There is a lot to go through...","tags":["release"],"title":"\"Lush\" updated: 2.0.0 - Big beautiful update","url":"https://content.luanti.ru/packages/rstcxk/lush/releases/32237/"},{"author":{"avatar":"https://secure.gravatar.com/avatar/2f7f4123aba1fe27191e8860aca7d17c?s=64&d=retro&r=g","name":"rstcxk","url":"https://content.luanti.ru/users/rstcxk/"},"content_html":"<ul>\n<li>refactor shell main loop, allowing for shell interruptions</li>\n<li>add commands: <code>sleep</code>, <code>parse</code>, <code>eval</code></li>\n<li>add <code>lush_gui</code> mod that adds commands <code>pager</code>, <code>dmenu</code>, <code>waypoint</code>, <code>remove_waypoint</code>, <code>waypoint_pos</code>, <code>display_label</code></li>\n<li>significant performance improvements (<a href=\"https://forum.minetest.net/viewtopic.php?t=30932\" rel=\"nofollow\">up to 85% faster</a>)</li>\n<li>fix being able to save ObjectRefs in lush environments</li>\n<li>lots of maintaience work</li>\n</ul>\n<p>bug fixes</p>\n<ul>\n<li>remove old debug() calls</li>\n</ul>\n","date_published":"2024-09-09T19:17:34Z","id":"https://content.luanti.ru/packages/rstcxk/lush/releases/27239/","image":"https://content.luanti.ru/thumbnails/4/5e7c57528b.png","language":"en","summary":"1.6.1","tags":["release"],"title":"\"Lush\" updated: 1.6.1","url":"https://content.luanti.ru/packages/rstcxk/lush/releases/27239/"},{"author":{"avatar":"https://secure.gravatar.com/avatar/2f7f4123aba1fe27191e8860aca7d17c?s=64&d=retro&r=g","name":"rstcxk","url":"https://content.luanti.ru/users/rstcxk/"},"content_html":"<ul>\n<li>refactor shell main loop, allowing for shell interruptions</li>\n<li>add commands: <code>sleep</code>, <code>parse</code>, <code>eval</code></li>\n<li>add <code>lush_gui</code> mod that adds commands <code>pager</code>, <code>dmenu</code>, <code>waypoint</code>, <code>remove_waypoint</code>, <code>waypoint_pos</code>, <code>display_label</code></li>\n<li>significant performance improvements (<a href=\"https://forum.minetest.net/viewtopic.php?t=30932\" rel=\"nofollow\">up to 85% faster</a>)</li>\n<li>fix being able to save ObjectRefs in lush environments</li>\n<li>lots of maintaience work</li>\n</ul>\n","date_published":"2024-09-09T19:01:05Z","id":"https://content.luanti.ru/packages/rstcxk/lush/releases/27238/","image":"https://content.luanti.ru/thumbnails/4/5e7c57528b.png","language":"en","summary":"1.6.0","tags":["release"],"title":"\"Lush\" updated: 1.6.0","url":"https://content.luanti.ru/packages/rstcxk/lush/releases/27238/"},{"author":{"avatar":"https://secure.gravatar.com/avatar/2f7f4123aba1fe27191e8860aca7d17c?s=64&d=retro&r=g","name":"rstcxk","url":"https://content.luanti.ru/users/rstcxk/"},"content_html":"<ul>\n<li>add mew commands: <code>basename</code>, <code>itemmeta</code>, <code>setitemmeta</code>, <code>freeze</code>, <code>summon</code>, <code>type</code>, <code>cast</code>, <code>dump</code>, <code>dump_luaentity</code>, <code>eval_command_args</code>, <code>apply_ruleset</code></li>\n<li>add new language constructs; <code>if</code>, <code>for</code> and <code>while</code></li>\n<li>improve how environments are handled in subshells</li>\n<li></li>\n<li>fix polluting the global environment with <code>require</code></li>\n<li>bunch of cleanups</li>\n<li>a lot of bug fixes</li>\n</ul>\n<p>bug fixes\n1.5.1</p>\n<ul>\n<li>remove old debug messages</li>\n<li>fix crash from recent refactor</li>\n</ul>\n","date_published":"2024-08-27T20:23:17Z","id":"https://content.luanti.ru/packages/rstcxk/lush/releases/26946/","image":"https://content.luanti.ru/thumbnails/4/5e7c57528b.png","language":"en","summary":"1.5.1","tags":["release"],"title":"\"Lush\" updated: 1.5.1","url":"https://content.luanti.ru/packages/rstcxk/lush/releases/26946/"},{"author":{"avatar":"https://secure.gravatar.com/avatar/2f7f4123aba1fe27191e8860aca7d17c?s=64&d=retro&r=g","name":"rstcxk","url":"https://content.luanti.ru/users/rstcxk/"},"content_html":"<ul>\n<li>add mew commands: <code>basename</code>, <code>itemmeta</code>, <code>setitemmeta</code>, <code>freeze</code>, <code>summon</code>, <code>type</code>, <code>cast</code>, <code>dump</code>, <code>dump_luaentity</code>, <code>eval_command_args</code>, <code>apply_ruleset</code></li>\n<li>add new language constructs; <code>if</code>, <code>for</code> and <code>while</code></li>\n<li>improve how environments are handled in subshells</li>\n<li></li>\n<li>fix polluting the global environment with <code>require</code></li>\n<li>bunch of cleanups</li>\n<li>a lot of bug fixes</li>\n</ul>\n","date_published":"2024-08-27T17:26:38Z","id":"https://content.luanti.ru/packages/rstcxk/lush/releases/26945/","image":"https://content.luanti.ru/thumbnails/4/5e7c57528b.png","language":"en","summary":"1.5.0","tags":["release"],"title":"\"Lush\" updated: 1.5.0","url":"https://content.luanti.ru/packages/rstcxk/lush/releases/26945/"},{"author":{"avatar":"https://secure.gravatar.com/avatar/2f7f4123aba1fe27191e8860aca7d17c?s=64&d=retro&r=g","name":"rstcxk","url":"https://content.luanti.ru/users/rstcxk/"},"content_html":"<ul>\n<li>add initial API documentation (<code>doc/API_rundown.pdf</code> in the repository)</li>\n<li>add documentation for server owners (<code>doc/for_server_owners.pdf</code> in the repository)</li>\n<li>add <code>lush_doas</code> mod, adds command <code>doas</code>, <code>su</code> and <code>sb</code></li>\n<li>add argument <code>list</code> for inventory selectors, restricts what inventory list the items are taken from</li>\n<li>add safeguards for implicit type conversion, players can no longer get the position of every online player</li>\n<li>add <code>@n</code> target selector, meaning the closest entity to the player</li>\n<li>add <code>lsitems</code> command that pretty prints selected inventories</li>\n<li>add restrictions to target selectors so players cant deduce position of other players with them</li>\n<li>add restrictions to inventory selectors, so unprivileged players cant peek into inventories of other players or nodes</li>\n<li>improve lush tables by supporting array list like tables</li>\n<li>improve lush tables by restricting the <code>instance_of</code> key, that could fool a lot of internal logic</li>\n<li>improve the way expressions are represented in the parse tree. Make wrappers like <code>LanguageConstruct_Expression</code> not show up\nin the final parse tree, reducing the overall overhead</li>\n<li>fix number parsing not working if the number isnt terminated with a whitecharacter</li>\n<li>fix typo <code>lunch</code>, now the command is named <code>launch</code></li>\n</ul>\n<p>bug fixes:</p>\n<p>1.4.1:</p>\n<ul>\n<li>fix parsing of tables</li>\n<li>fix converting from objects to positions not working</li>\n</ul>\n<p>1.4.2:</p>\n<ul>\n<li>fix every string starting with a number being misidentified as a number</li>\n</ul>\n","date_published":"2024-08-18T20:32:17Z","id":"https://content.luanti.ru/packages/rstcxk/lush/releases/26721/","image":"https://content.luanti.ru/thumbnails/4/5e7c57528b.png","language":"en","summary":"1.4.2","tags":["release"],"title":"\"Lush\" updated: 1.4.2","url":"https://content.luanti.ru/packages/rstcxk/lush/releases/26721/"},{"author":{"avatar":"https://secure.gravatar.com/avatar/2f7f4123aba1fe27191e8860aca7d17c?s=64&d=retro&r=g","name":"rstcxk","url":"https://content.luanti.ru/users/rstcxk/"},"content_html":"<ul>\n<li>add initial API documentation (<code>doc/API_rundown.pdf</code> in the repository)</li>\n<li>add documentation for server owners (<code>doc/for_server_owners.pdf</code> in the repository)</li>\n<li>add <code>lush_doas</code> mod, adds command <code>doas</code>, <code>su</code> and <code>sb</code></li>\n<li>add argument <code>list</code> for inventory selectors, restricts what inventory list the items are taken from</li>\n<li>add safeguards for implicit type conversion, players can no longer get the position of every online player</li>\n<li>add <code>@n</code> target selector, meaning the closest entity to the player</li>\n<li>add <code>lsitems</code> command that pretty prints selected inventories</li>\n<li>add restrictions to target selectors so players cant deduce position of other players with them</li>\n<li>add restrictions to inventory selectors, so unprivileged players cant peek into inventories of other players or nodes</li>\n<li>improve lush tables by supporting array list like tables</li>\n<li>improve lush tables by restricting the <code>instance_of</code> key, that could fool a lot of internal logic</li>\n<li>improve the way expressions are represented in the parse tree. Make wrappers like <code>LanguageConstruct_Expression</code> not show up\nin the final parse tree, reducing the overall overhead</li>\n<li>fix number parsing not working if the number isnt terminated with a whitecharacter</li>\n<li>fix typo <code>lunch</code>, now the command is named <code>launch</code></li>\n</ul>\n<p>bug fixes:</p>\n<p>1.4.1:</p>\n<ul>\n<li>fix parsing of tables</li>\n<li>fix converting from objects to positions not working</li>\n</ul>\n","date_published":"2024-08-18T17:37:29Z","id":"https://content.luanti.ru/packages/rstcxk/lush/releases/26717/","image":"https://content.luanti.ru/thumbnails/4/5e7c57528b.png","language":"en","summary":"1.4.1","tags":["release"],"title":"\"Lush\" updated: 1.4.1","url":"https://content.luanti.ru/packages/rstcxk/lush/releases/26717/"},{"author":{"avatar":"https://secure.gravatar.com/avatar/2f7f4123aba1fe27191e8860aca7d17c?s=64&d=retro&r=g","name":"rstcxk","url":"https://content.luanti.ru/users/rstcxk/"},"content_html":"<ul>\n<li>add initial API documentation (<code>doc/API_rundown.pdf</code> in the repository)</li>\n<li>add documentation for server owners (<code>doc/for_server_owners.pdf</code> in the repository)</li>\n<li>add <code>lush_doas</code> mod, adds command <code>doas</code>, <code>su</code> and <code>sb</code></li>\n<li>add argument <code>list</code> for inventory selectors, restricts what inventory list the items are taken from</li>\n<li>add safeguards for implicit type conversion, players can no longer get the position of every online player</li>\n<li>add <code>@n</code> target selector, meaning the closest entity to the player</li>\n<li>add <code>lsitems</code> command that pretty prints selected inventories</li>\n<li>add restrictions to target selectors so players cant deduce position of other players with them</li>\n<li>add restrictions to inventory selectors, so unprivileged players cant peek into inventories of other players or nodes</li>\n<li>improve lush tables by supporting array list like tables</li>\n<li>improve lush tables by restricting the <code>instance_of</code> key, that could fool a lot of internal logic</li>\n<li>improve the way expressions are represented in the parse tree. Make wrappers like <code>LanguageConstruct_Expression</code> not show up\nin the final parse tree, reducing the overall overhead</li>\n<li>fix number parsing not working if the number isnt terminated with a whitecharacter</li>\n<li>fix typo <code>lunch</code>, now the command is named <code>launch</code></li>\n</ul>\n","date_published":"2024-08-18T15:34:02Z","id":"https://content.luanti.ru/packages/rstcxk/lush/releases/26713/","image":"https://content.luanti.ru/thumbnails/4/5e7c57528b.png","language":"en","summary":"1.4.0","tags":["release"],"title":"\"Lush\" updated: 1.4.0","url":"https://content.luanti.ru/packages/rstcxk/lush/releases/26713/"},{"author":{"avatar":"https://secure.gravatar.com/avatar/2f7f4123aba1fe27191e8860aca7d17c?s=64&d=retro&r=g","name":"rstcxk","url":"https://content.luanti.ru/users/rstcxk/"},"content_html":"<ul>\n<li>add <code>inventory_item_list</code> type and selectors related to it (<code>@w</code> and <code>@i</code>)</li>\n<li>add commands <code>fix_items</code>, <code>pulverize</code> commands</li>\n<li>fix unecessary <code>minetest.debug()</code> calls</li>\n<li>fix descriptions and privileges of commands</li>\n<li>fix calling lush commands called starting with <code>/</code> from crashing the server on parse errors</li>\n<li>fix <code>@a</code> selector</li>\n</ul>\n","date_published":"2024-08-15T01:45:59Z","id":"https://content.luanti.ru/packages/rstcxk/lush/releases/26615/","image":"https://content.luanti.ru/thumbnails/4/5e7c57528b.png","language":"en","summary":"1.3.0","tags":["release"],"title":"\"Lush\" updated: 1.3.0","url":"https://content.luanti.ru/packages/rstcxk/lush/releases/26615/"},{"author":{"avatar":"https://secure.gravatar.com/avatar/2f7f4123aba1fe27191e8860aca7d17c?s=64&d=retro&r=g","name":"rstcxk","url":"https://content.luanti.ru/users/rstcxk/"},"content_html":"<ul>\n<li>add new mod <code>lush_command_managment</code> that adds 5 new commands for blacklisting and changing required privileges of commands</li>\n<li>lush commands now take precedence over other commands,\nthis fixes issue where lush commands would appear under wrong category in the help menu</li>\n<li>fixed handling of settings</li>\n<li>many little fixes</li>\n</ul>\n","date_published":"2024-08-09T17:18:06Z","id":"https://content.luanti.ru/packages/rstcxk/lush/releases/26515/","image":"https://content.luanti.ru/thumbnails/4/5e7c57528b.png","language":"en","summary":"1.2.0","tags":["release"],"title":"\"Lush\" updated: 1.2.0","url":"https://content.luanti.ru/packages/rstcxk/lush/releases/26515/"},{"author":{"avatar":"https://secure.gravatar.com/avatar/2f7f4123aba1fe27191e8860aca7d17c?s=64&d=retro&r=g","name":"rstcxk","url":"https://content.luanti.ru/users/rstcxk/"},"content_html":"<ul>\n<li>add <code>lag</code> command</li>\n<li>add <code>mute</code> command</li>\n<li><code>grant</code> and <code>revoke</code> commands now support the <code>all</code> privilege</li>\n<li><code>ban</code> command takes an additional argument <code>time</code> thats the length of the ban</li>\n</ul>\n","date_published":"2024-08-07T17:16:12Z","id":"https://content.luanti.ru/packages/rstcxk/lush/releases/26481/","image":"https://content.luanti.ru/thumbnails/4/5e7c57528b.png","language":"en","summary":"1.1.0","tags":["release"],"title":"\"Lush\" updated: 1.1.0","url":"https://content.luanti.ru/packages/rstcxk/lush/releases/26481/"},{"author":{"avatar":"https://secure.gravatar.com/avatar/2f7f4123aba1fe27191e8860aca7d17c?s=64&d=retro&r=g","name":"rstcxk","url":"https://content.luanti.ru/users/rstcxk/"},"content_html":"<p>initial release</p>\n","date_published":"2024-08-04T05:23:02Z","id":"https://content.luanti.ru/packages/rstcxk/lush/releases/26382/","image":"https://content.luanti.ru/thumbnails/4/5e7c57528b.png","language":"en","summary":"initial release","tags":["release"],"title":"\"Lush\" updated: 1.0.0","url":"https://content.luanti.ru/packages/rstcxk/lush/releases/26382/"}],"title":"ContentDB package updates","version":"https://jsonfeed.org/version/1"}
