<?xml version="1.0" encoding="UTF-8"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
    <title></title>
    <link rel="self" type="application/atom+xml" href="https://otdd.net/atom.xml"/>
    <link rel="alternate" type="text/html" href="https://otdd.net"/>
    <generator uri="https://www.getzola.org/">Zola</generator>
    <updated>2026-07-07T00:00:00+00:00</updated>
    <id>https://otdd.net/atom.xml</id>
    <entry xml:lang="en">
        <title>MakeCode Minecraft documentation</title>
        <published>2026-07-07T00:00:00+00:00</published>
        <updated>2026-07-07T00:00:00+00:00</updated>
        
        <author>
          <name>Unknown</name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://otdd.net/projects/makecode-minecraft-documentation/"/>
        <id>https://otdd.net/projects/makecode-minecraft-documentation/</id>
        
        <content type="html" xml:base="https://otdd.net/projects/makecode-minecraft-documentation/">&lt;p&gt;&lt;em&gt;All the functions/classes/etc. were taken directly from the editor inside Minecraft.&lt;/em&gt;&lt;/p&gt;
&lt;h3 id=&quot;table-of-contents&quot;&gt;Table of contents:&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://otdd.net/projects/makecode-minecraft-documentation/#functions&quot;&gt;Functions&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://otdd.net/projects/makecode-minecraft-documentation/#player&quot;&gt;Player&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://otdd.net/projects/makecode-minecraft-documentation/#blocks&quot;&gt;Blocks&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://otdd.net/projects/makecode-minecraft-documentation/#mobs&quot;&gt;Mobs&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://otdd.net/projects/makecode-minecraft-documentation/#agent&quot;&gt;Agent&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://otdd.net/projects/makecode-minecraft-documentation/#gameplay&quot;&gt;Gameplay&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://otdd.net/projects/makecode-minecraft-documentation/#position&quot;&gt;Position&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://otdd.net/projects/makecode-minecraft-documentation/#math&quot;&gt;Math&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://otdd.net/projects/makecode-minecraft-documentation/#loops&quot;&gt;Loops&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://otdd.net/projects/makecode-minecraft-documentation/#classes&quot;&gt;Classes&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://otdd.net/projects/makecode-minecraft-documentation/#targetselector&quot;&gt;TargetSelector&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://otdd.net/projects/makecode-minecraft-documentation/#position-1&quot;&gt;Position&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://otdd.net/projects/makecode-minecraft-documentation/#enums&quot;&gt;Enums&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://otdd.net/projects/makecode-minecraft-documentation/#travelmethod&quot;&gt;TravelMethod&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://otdd.net/projects/makecode-minecraft-documentation/#filloperation&quot;&gt;FillOperation&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://otdd.net/projects/makecode-minecraft-documentation/#compassdirection&quot;&gt;CompassDirection&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://otdd.net/projects/makecode-minecraft-documentation/#turndirection&quot;&gt;TurnDirection&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://otdd.net/projects/makecode-minecraft-documentation/#sixdirection&quot;&gt;SixDirection&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://otdd.net/projects/makecode-minecraft-documentation/#leverposition&quot;&gt;LeverPosition&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://otdd.net/projects/makecode-minecraft-documentation/#comparatormode&quot;&gt;ComparatorMode&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://otdd.net/projects/makecode-minecraft-documentation/#testforblocksmask&quot;&gt;TestForBlocksMask&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://otdd.net/projects/makecode-minecraft-documentation/#clonemode&quot;&gt;CloneMode&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://otdd.net/projects/makecode-minecraft-documentation/#monstermob&quot;&gt;MonsterMob&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://otdd.net/projects/makecode-minecraft-documentation/#targetselectorkind&quot;&gt;TargetSelectorKind&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://otdd.net/projects/makecode-minecraft-documentation/#gamemode&quot;&gt;GameMode&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://otdd.net/projects/makecode-minecraft-documentation/#agentassist&quot;&gt;AgentAssist&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://otdd.net/projects/makecode-minecraft-documentation/#agentdetection&quot;&gt;AgentDetection&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://otdd.net/projects/makecode-minecraft-documentation/#weather&quot;&gt;Weather&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://otdd.net/projects/makecode-minecraft-documentation/#daytime&quot;&gt;DayTime&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://otdd.net/projects/makecode-minecraft-documentation/#gamedifficulty&quot;&gt;GameDifficulty&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://otdd.net/projects/makecode-minecraft-documentation/#timequery&quot;&gt;TimeQuery&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://otdd.net/projects/makecode-minecraft-documentation/#gamerule&quot;&gt;GameRule&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://otdd.net/projects/makecode-minecraft-documentation/#axis&quot;&gt;Axis&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://otdd.net/projects/makecode-minecraft-documentation/#constants&quot;&gt;Constants&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://otdd.net/projects/makecode-minecraft-documentation/#other&quot;&gt;Other&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://otdd.net/projects/makecode-minecraft-documentation/#inventory-slot-layout&quot;&gt;Inventory Slot Layout&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h1 id=&quot;functions&quot;&gt;Functions&lt;/h1&gt;
&lt;h2 id=&quot;player&quot;&gt;Player&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;h4 id=&quot;player-on-chat-command-handler&quot;&gt;&lt;code&gt;player.on_chat(command, handler)&lt;/code&gt;&lt;/h4&gt;
&lt;p&gt;&lt;strong&gt;Description:&lt;/strong&gt; Runs code when you type a certain message in the game chat&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Parameters:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;command&lt;/code&gt;: &lt;code&gt;str&lt;/code&gt; – the chat keyword that will be associated with this command (&lt;code&gt;*&lt;/code&gt; for all messages), e.g. “jump”&lt;/li&gt;
&lt;li&gt;&lt;code&gt;handler&lt;/code&gt;: &lt;code&gt;(number, number, number) -&amp;gt; None&lt;/code&gt; – code to run when the keyword is typed in the chat by the current player&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;h4 id=&quot;player-on-item-interacted-item-handler&quot;&gt;&lt;code&gt;player.on_item_interacted(item, handler)&lt;/code&gt;&lt;/h4&gt;
&lt;p&gt;&lt;strong&gt;Description:&lt;/strong&gt; Runs code when an item is used&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Parameters:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;item&lt;/code&gt;: &lt;code&gt;number&lt;/code&gt; – the type of item used that will cause the code to run, such as: &lt;code&gt;TRIDENT&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;handler&lt;/code&gt;: &lt;code&gt;() -&amp;gt; None&lt;/code&gt; – the code to run when the item is used by the current player&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;h4 id=&quot;player-say-message&quot;&gt;&lt;code&gt;player.say(message)&lt;/code&gt;&lt;/h4&gt;
&lt;p&gt;&lt;strong&gt;Description:&lt;/strong&gt; Posts a message to the game chat&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Parameters:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;message&lt;/code&gt;: &lt;code&gt;any&lt;/code&gt; – the message to display in the chat, e.g. “Hi!”&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;h4 id=&quot;player-teleport-to&quot;&gt;&lt;code&gt;player.teleport(to)&lt;/code&gt;&lt;/h4&gt;
&lt;p&gt;&lt;strong&gt;Description:&lt;/strong&gt; Teleports the current player to another position&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Parameters:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;to&lt;/code&gt;: &lt;code&gt;Position&lt;/code&gt; – the destination position&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;h4 id=&quot;player-on-travelled-method-handler&quot;&gt;&lt;code&gt;player.on_travelled(method, handler)&lt;/code&gt;&lt;/h4&gt;
&lt;p&gt;&lt;strong&gt;Description:&lt;/strong&gt; Runs code when the current player travels in a certain way&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Parameters:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;method&lt;/code&gt;: &lt;code&gt;TravelMethod&lt;/code&gt; – the travel method. Available methods: walk, swim water, fall, climb, swim lava, fly, riding, sneak, sprint, bounce&lt;/li&gt;
&lt;li&gt;&lt;code&gt;handler&lt;/code&gt;: &lt;code&gt;() -&amp;gt; None&lt;/code&gt; – code to run when the player travels&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;h4 id=&quot;player-on-died-handler&quot;&gt;&lt;code&gt;player.on_died(handler)&lt;/code&gt;&lt;/h4&gt;
&lt;p&gt;&lt;strong&gt;Description:&lt;/strong&gt; Runs code when the current player dies&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Parameters:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;handler&lt;/code&gt;: &lt;code&gt;() -&amp;gt; None&lt;/code&gt; – code to run when the current player dies&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;h4 id=&quot;player-position&quot;&gt;&lt;code&gt;player.position()&lt;/code&gt;&lt;/h4&gt;
&lt;p&gt;&lt;strong&gt;Description:&lt;/strong&gt; Returns the world position of the current player&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Parameters:&lt;/strong&gt;
&lt;em&gt;(none)&lt;/em&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;h4 id=&quot;player-get-orientation&quot;&gt;&lt;code&gt;player.get_orientation()&lt;/code&gt;&lt;/h4&gt;
&lt;p&gt;&lt;strong&gt;Description:&lt;/strong&gt; Returns the player&#39;s orientation, in degrees&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Parameters:&lt;/strong&gt;
&lt;em&gt;(none)&lt;/em&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;h4 id=&quot;player-name&quot;&gt;&lt;code&gt;player.name()&lt;/code&gt;&lt;/h4&gt;
&lt;p&gt;&lt;strong&gt;Description:&lt;/strong&gt; Returns the name of the current player (you)&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Parameters:&lt;/strong&gt;
&lt;em&gt;(none)&lt;/em&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;h4 id=&quot;player-execute-command&quot;&gt;&lt;code&gt;player.execute(command)&lt;/code&gt;&lt;/h4&gt;
&lt;p&gt;&lt;strong&gt;Description:&lt;/strong&gt; Executes a game command as the current player&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Parameters:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;command&lt;/code&gt;: &lt;code&gt;str&lt;/code&gt; – the slash command to execute (you do not have to put the leading &lt;code&gt;/&lt;/code&gt;), e.g. “say Hi!”&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;h4 id=&quot;player-tell-target-message&quot;&gt;&lt;code&gt;player.tell(target, message)&lt;/code&gt;&lt;/h4&gt;
&lt;p&gt;&lt;strong&gt;Description:&lt;/strong&gt; Whispers a message to targets&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Parameters:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;target&lt;/code&gt;: &lt;code&gt;TargetSelector&lt;/code&gt; – a selector of entities&lt;/li&gt;
&lt;li&gt;&lt;code&gt;message&lt;/code&gt;: &lt;code&gt;any&lt;/code&gt; – the text to whisper, e.g. “Hi!”&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;h4 id=&quot;player-on-arrow-shot-handler&quot;&gt;&lt;code&gt;player.on_arrow_shot(handler)&lt;/code&gt;&lt;/h4&gt;
&lt;p&gt;&lt;strong&gt;Description:&lt;/strong&gt; Runs code when the current player shoots an arrow&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Parameters:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;handler&lt;/code&gt;: &lt;code&gt;() -&amp;gt; None&lt;/code&gt; – code to run when the player shoots an arrow&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;h4 id=&quot;player-run-chat-command-command&quot;&gt;&lt;code&gt;player.run_chat_command(command)&lt;/code&gt;&lt;/h4&gt;
&lt;p&gt;&lt;strong&gt;Description:&lt;/strong&gt; Executes a chat command in your code&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Parameters:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;command&lt;/code&gt;: &lt;code&gt;str&lt;/code&gt; – the chat command to run, like “jump”&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;h4 id=&quot;player-run-chat-command-with-arguments-command-arg&quot;&gt;&lt;code&gt;player.run_chat_command_with_arguments(command, arg)&lt;/code&gt;&lt;/h4&gt;
&lt;p&gt;&lt;strong&gt;Description:&lt;/strong&gt; Executes a chat command in your code with arguments&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Parameters:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;command&lt;/code&gt;: &lt;code&gt;str&lt;/code&gt; – the chat command to run, like “jump”&lt;/li&gt;
&lt;li&gt;&lt;code&gt;arg&lt;/code&gt;: &lt;code&gt;str&lt;/code&gt; – a string containing all the arguments you wish to give to the chat command&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;h4 id=&quot;player-on-tell-command-command-handler&quot;&gt;&lt;code&gt;player.on_tell_command(command, handler)&lt;/code&gt;&lt;/h4&gt;
&lt;p&gt;&lt;strong&gt;Description:&lt;/strong&gt; Runs code when another player whispers you a certain message&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Parameters:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;command&lt;/code&gt;: &lt;code&gt;str&lt;/code&gt; – the chat keyword that will be associated with this command (&lt;code&gt;*&lt;/code&gt; for all messages), e.g. “jump”&lt;/li&gt;
&lt;li&gt;&lt;code&gt;handler&lt;/code&gt;: &lt;code&gt;() -&amp;gt; None&lt;/code&gt; – code to run when the keyword is whispered to the current player&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;h4 id=&quot;player-on-teleported-handler&quot;&gt;&lt;code&gt;player.on_teleported(handler)&lt;/code&gt;&lt;/h4&gt;
&lt;p&gt;&lt;strong&gt;Description:&lt;/strong&gt; Runs code when the current player gets teleported&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Parameters:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;handler&lt;/code&gt;: &lt;code&gt;() -&amp;gt; None&lt;/code&gt; – code to run when the player gets teleported&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;h4 id=&quot;player-chat-command-syntax-error-helpstr&quot;&gt;&lt;code&gt;player.chat_command_syntax_error(helpStr)&lt;/code&gt;&lt;/h4&gt;
&lt;p&gt;&lt;strong&gt;Description:&lt;/strong&gt; Displays a chat command help message in the game chat&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Parameters:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;helpStr&lt;/code&gt;: &lt;code&gt;str&lt;/code&gt; – the help message to display&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;h4 id=&quot;player-error-message-msg-multiline&quot;&gt;&lt;code&gt;player.error_message(msg, multiline)&lt;/code&gt;&lt;/h4&gt;
&lt;p&gt;&lt;strong&gt;Description:&lt;/strong&gt; Displays an error in the game chat&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Parameters:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;msg&lt;/code&gt;: &lt;code&gt;str&lt;/code&gt; – the error to display in the game chat&lt;/li&gt;
&lt;li&gt;&lt;code&gt;multiline&lt;/code&gt;: &lt;code&gt;bool&lt;/code&gt; – whether the message is multiline&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;h4 id=&quot;player-get-chat-arg-index&quot;&gt;&lt;code&gt;player.get_chat_arg(index)&lt;/code&gt;&lt;/h4&gt;
&lt;p&gt;&lt;strong&gt;Description:&lt;/strong&gt; Gets the specified argument from the latest player chat message&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Parameters:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;index&lt;/code&gt;: &lt;code&gt;number&lt;/code&gt; – index of the argument&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;h4 id=&quot;player-get-chat-args-command&quot;&gt;&lt;code&gt;player.get_chat_args(command)&lt;/code&gt;&lt;/h4&gt;
&lt;p&gt;&lt;strong&gt;Description:&lt;/strong&gt; Gets the arguments for the specified command&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Parameters:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;command&lt;/code&gt;: &lt;code&gt;str&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;h4 id=&quot;player-message&quot;&gt;&lt;code&gt;player.message()&lt;/code&gt;&lt;/h4&gt;
&lt;p&gt;&lt;strong&gt;Description:&lt;/strong&gt; Gets the last message, if any&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Parameters:&lt;/strong&gt;
&lt;em&gt;(none)&lt;/em&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;h4 id=&quot;player-on-chat-command-core-command-handler&quot;&gt;&lt;code&gt;player.on_chat_command_core(command, handler)&lt;/code&gt;&lt;/h4&gt;
&lt;p&gt;&lt;strong&gt;Description:&lt;/strong&gt; Runs code when a keyword is typed in the chat&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Parameters:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;command&lt;/code&gt;: &lt;code&gt;str&lt;/code&gt; – the chat keyword to listen for&lt;/li&gt;
&lt;li&gt;&lt;code&gt;handler&lt;/code&gt;: &lt;code&gt;() -&amp;gt; None&lt;/code&gt; – code to run when the keyword is typed&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;h4 id=&quot;player-warning-message-msg-multiline&quot;&gt;&lt;code&gt;player.warning_message(msg, multiline)&lt;/code&gt;&lt;/h4&gt;
&lt;p&gt;&lt;strong&gt;Description:&lt;/strong&gt; Displays a warning in the game chat (orange text)&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Parameters:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;msg&lt;/code&gt;: &lt;code&gt;str&lt;/code&gt; – the warning to display in the game chat&lt;/li&gt;
&lt;li&gt;&lt;code&gt;multiline&lt;/code&gt;: &lt;code&gt;bool&lt;/code&gt; – whether the message is multiline&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;hr /&gt;
&lt;h2 id=&quot;blocks&quot;&gt;Blocks&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;h4 id=&quot;blocks-place-block-pos&quot;&gt;&lt;code&gt;blocks.place(block, pos)&lt;/code&gt;&lt;/h4&gt;
&lt;p&gt;&lt;strong&gt;Description:&lt;/strong&gt; Places a block in the world&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Parameters:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;block&lt;/code&gt;: &lt;code&gt;number&lt;/code&gt; – the block to place&lt;/li&gt;
&lt;li&gt;&lt;code&gt;pos&lt;/code&gt;: &lt;code&gt;Position&lt;/code&gt; – the position at which to place the block&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;h4 id=&quot;blocks-on-block-placed-block-handler&quot;&gt;&lt;code&gt;blocks.on_block_placed(block, handler)&lt;/code&gt;&lt;/h4&gt;
&lt;p&gt;&lt;strong&gt;Description:&lt;/strong&gt; Runs code when a certain type of block is placed&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Parameters:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;block&lt;/code&gt;: &lt;code&gt;number&lt;/code&gt; – the type of block that, when it is placed, will start some code&lt;/li&gt;
&lt;li&gt;&lt;code&gt;handler&lt;/code&gt;: &lt;code&gt;() -&amp;gt; None&lt;/code&gt; – the code to run when the selected block type is placed in the world&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;h4 id=&quot;blocks-on-block-broken-block-handler&quot;&gt;&lt;code&gt;blocks.on_block_broken(block, handler)&lt;/code&gt;&lt;/h4&gt;
&lt;p&gt;&lt;strong&gt;Description:&lt;/strong&gt; Runs code when a certain type of block is mined or broken&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Parameters:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;block&lt;/code&gt;: &lt;code&gt;number&lt;/code&gt; – the type of block that, when it is broken, will start some code&lt;/li&gt;
&lt;li&gt;&lt;code&gt;handler&lt;/code&gt;: &lt;code&gt;() -&amp;gt; None&lt;/code&gt; – the code to run when the selected block type is mined or broken&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;h4 id=&quot;blocks-test-for-block-block-pos&quot;&gt;&lt;code&gt;blocks.test_for_block(block, pos)&lt;/code&gt;&lt;/h4&gt;
&lt;p&gt;&lt;strong&gt;Description:&lt;/strong&gt; Tests whether the block at the specified coordinate is of a certain type&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Parameters:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;block&lt;/code&gt;: &lt;code&gt;number&lt;/code&gt; – the type of the block to test for&lt;/li&gt;
&lt;li&gt;&lt;code&gt;pos&lt;/code&gt;: &lt;code&gt;Position&lt;/code&gt; – the position (coordinates) where you want to check for the block&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;h4 id=&quot;blocks-fill-block-from-to-operator&quot;&gt;&lt;code&gt;blocks.fill(block, from, to, operator)&lt;/code&gt;&lt;/h4&gt;
&lt;p&gt;&lt;strong&gt;Description:&lt;/strong&gt; Fills a volume between two positions&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Parameters:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;block&lt;/code&gt;: &lt;code&gt;number&lt;/code&gt; – the block used to fill the region&lt;/li&gt;
&lt;li&gt;&lt;code&gt;from&lt;/code&gt;: &lt;code&gt;Position&lt;/code&gt; – the first corner of the cubic region&lt;/li&gt;
&lt;li&gt;&lt;code&gt;to&lt;/code&gt;: &lt;code&gt;Position&lt;/code&gt; – the opposite corner of the cubic region&lt;/li&gt;
&lt;li&gt;&lt;code&gt;operator&lt;/code&gt;: &lt;code&gt;FillOperation&lt;/code&gt; – what happens to the existing blocks in the region&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;h4 id=&quot;blocks-print-text-block-position-direction&quot;&gt;&lt;code&gt;blocks.print(text, block, position, direction)&lt;/code&gt;&lt;/h4&gt;
&lt;p&gt;&lt;strong&gt;Description:&lt;/strong&gt; Creates the specified text in the game world, made of the specified block, at the given location&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Parameters:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;text&lt;/code&gt;: &lt;code&gt;str&lt;/code&gt; – the text to print in the world, e.g. “HELLO”&lt;/li&gt;
&lt;li&gt;&lt;code&gt;block&lt;/code&gt;: &lt;code&gt;number&lt;/code&gt; – the block type used to create the text&lt;/li&gt;
&lt;li&gt;&lt;code&gt;position&lt;/code&gt;: &lt;code&gt;Position&lt;/code&gt; – the position where the text is printed in the world&lt;/li&gt;
&lt;li&gt;&lt;code&gt;direction&lt;/code&gt;: &lt;code&gt;CompassDirection&lt;/code&gt; – the direction (axis) along which the text is printed&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;h4 id=&quot;blocks-block-with-data-b-data&quot;&gt;&lt;code&gt;blocks.block_with_data(b, data)&lt;/code&gt;&lt;/h4&gt;
&lt;p&gt;&lt;strong&gt;Description:&lt;/strong&gt; Represents a block or item from the game with a data value&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Parameters:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;b&lt;/code&gt;: &lt;code&gt;number&lt;/code&gt; – the block or item&lt;/li&gt;
&lt;li&gt;&lt;code&gt;data&lt;/code&gt;: &lt;code&gt;number&lt;/code&gt; – the data value for the block or item&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;h4 id=&quot;blocks-block-by-id-id&quot;&gt;&lt;code&gt;blocks.block_by_id(id)&lt;/code&gt;&lt;/h4&gt;
&lt;p&gt;&lt;strong&gt;Description:&lt;/strong&gt; Represents a block or item from the game by its value ID&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Parameters:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;id&lt;/code&gt;: &lt;code&gt;number&lt;/code&gt; – the ID of the block or item from the game&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;h4 id=&quot;blocks-block-by-name-name&quot;&gt;&lt;code&gt;blocks.block_by_name(name)&lt;/code&gt;&lt;/h4&gt;
&lt;p&gt;&lt;strong&gt;Description:&lt;/strong&gt; Represents a block or item from the game by its code name&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Parameters:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;name&lt;/code&gt;: &lt;code&gt;str&lt;/code&gt; – the name of the block, e.g. “stone”&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;h4 id=&quot;blocks-lever-position&quot;&gt;&lt;code&gt;blocks.lever(position)&lt;/code&gt;&lt;/h4&gt;
&lt;p&gt;&lt;strong&gt;Description:&lt;/strong&gt; Creates a lever in a particular state&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Parameters:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;position&lt;/code&gt;: &lt;code&gt;LeverPosition&lt;/code&gt; – the position/state of the lever&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;h4 id=&quot;blocks-repeater-direction-delay&quot;&gt;&lt;code&gt;blocks.repeater(direction, delay)&lt;/code&gt;&lt;/h4&gt;
&lt;p&gt;&lt;strong&gt;Description:&lt;/strong&gt; Creates a repeater in a particular state&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Parameters:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;direction&lt;/code&gt;: &lt;code&gt;CompassDirection&lt;/code&gt; – the direction in which the repeater is facing&lt;/li&gt;
&lt;li&gt;&lt;code&gt;delay&lt;/code&gt;: &lt;code&gt;number&lt;/code&gt; – the delay time for the repeater, in game ticks&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;h4 id=&quot;blocks-comparator-direction-mode&quot;&gt;&lt;code&gt;blocks.comparator(direction, mode)&lt;/code&gt;&lt;/h4&gt;
&lt;p&gt;&lt;strong&gt;Description:&lt;/strong&gt; Creates a comparator in a particular state&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Parameters:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;direction&lt;/code&gt;: &lt;code&gt;CompassDirection&lt;/code&gt; – the direction which the comparator is facing&lt;/li&gt;
&lt;li&gt;&lt;code&gt;mode&lt;/code&gt;: &lt;code&gt;ComparatorMode&lt;/code&gt; – the comparison mode of the comparator&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;h4 id=&quot;blocks-replace-newblock-oldblock-from-to&quot;&gt;&lt;code&gt;blocks.replace(newblock, oldblock, from, to)&lt;/code&gt;&lt;/h4&gt;
&lt;p&gt;&lt;strong&gt;Description:&lt;/strong&gt; Replaces all the blocks of a certain type inside the specified region with a new block type&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Parameters:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;newblock&lt;/code&gt;: &lt;code&gt;number&lt;/code&gt; – the new block type that replaces existing blocks&lt;/li&gt;
&lt;li&gt;&lt;code&gt;oldblock&lt;/code&gt;: &lt;code&gt;number&lt;/code&gt; – the block type that is replaced&lt;/li&gt;
&lt;li&gt;&lt;code&gt;from&lt;/code&gt;: &lt;code&gt;Position&lt;/code&gt; – the first corner of the cubic region&lt;/li&gt;
&lt;li&gt;&lt;code&gt;to&lt;/code&gt;: &lt;code&gt;Position&lt;/code&gt; – the opposite corner of the cubic region&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;h4 id=&quot;blocks-clone-begin-end-destination-mask-mode&quot;&gt;&lt;code&gt;blocks.clone(begin, end, destination, mask, mode)&lt;/code&gt;&lt;/h4&gt;
&lt;p&gt;&lt;strong&gt;Description:&lt;/strong&gt; Clones a cubic region into a different location&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Parameters:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;begin&lt;/code&gt;: &lt;code&gt;Position&lt;/code&gt; – the first corner of the cubic region&lt;/li&gt;
&lt;li&gt;&lt;code&gt;end&lt;/code&gt;: &lt;code&gt;Position&lt;/code&gt; – the opposite corner of the cubic region&lt;/li&gt;
&lt;li&gt;&lt;code&gt;destination&lt;/code&gt;: &lt;code&gt;Position&lt;/code&gt; – the first corner of the destination region&lt;/li&gt;
&lt;li&gt;&lt;code&gt;mask&lt;/code&gt;: &lt;code&gt;CloneMask&lt;/code&gt; – how to handle air blocks (replace or masked)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;mode&lt;/code&gt;: &lt;code&gt;CloneMode&lt;/code&gt; – how to handle the cloned region&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;h4 id=&quot;blocks-clone-filtered-begin-end-destination-block-mode&quot;&gt;&lt;code&gt;blocks.clone_filtered(begin, end, destination, block, mode)&lt;/code&gt;&lt;/h4&gt;
&lt;p&gt;&lt;strong&gt;Description:&lt;/strong&gt; Clones a cubic region into a different location, if the blocks in the region match a certain block type&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Parameters:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;begin&lt;/code&gt;: &lt;code&gt;Position&lt;/code&gt; – the first corner of the cubic region&lt;/li&gt;
&lt;li&gt;&lt;code&gt;end&lt;/code&gt;: &lt;code&gt;Position&lt;/code&gt; – the opposite corner of the cubic region&lt;/li&gt;
&lt;li&gt;&lt;code&gt;destination&lt;/code&gt;: &lt;code&gt;Position&lt;/code&gt; – the first corner of the destination region&lt;/li&gt;
&lt;li&gt;&lt;code&gt;block&lt;/code&gt;: &lt;code&gt;number&lt;/code&gt; – the block type to look for when cloning&lt;/li&gt;
&lt;li&gt;&lt;code&gt;mode&lt;/code&gt;: &lt;code&gt;CloneMode&lt;/code&gt; – how to handle the cloned region&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;h4 id=&quot;blocks-save-structure-name-from-to-includeentities-savemode-includeblocks&quot;&gt;&lt;code&gt;blocks.save_structure(name, from, to, includeEntities, saveMode, includeBlocks)&lt;/code&gt;&lt;/h4&gt;
&lt;p&gt;&lt;strong&gt;Description:&lt;/strong&gt; Saves the structure within a range of positions as a named object&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Parameters:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;name&lt;/code&gt;: &lt;code&gt;str&lt;/code&gt; – the name of the structure&lt;/li&gt;
&lt;li&gt;&lt;code&gt;from&lt;/code&gt;: &lt;code&gt;Position&lt;/code&gt; – the starting position&lt;/li&gt;
&lt;li&gt;&lt;code&gt;to&lt;/code&gt;: &lt;code&gt;Position&lt;/code&gt; – the ending position&lt;/li&gt;
&lt;li&gt;&lt;code&gt;includeEntities&lt;/code&gt;: &lt;code&gt;bool&lt;/code&gt; – whether to include entities&lt;/li&gt;
&lt;li&gt;&lt;code&gt;saveMode&lt;/code&gt;: &lt;code&gt;unknown&lt;/code&gt; – where the structure is saved (memory or disk)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;includeBlocks&lt;/code&gt;: &lt;code&gt;bool&lt;/code&gt; – whether to include blocks&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;h4 id=&quot;blocks-load-structure-name-to-rotation-mirror-animationmode-animationseconds-includeentities-includeblocks-integrity&quot;&gt;&lt;code&gt;blocks.load_structure(name, to, rotation, mirror, animationMode, animationSeconds, includeEntities, includeBlocks, integrity)&lt;/code&gt;&lt;/h4&gt;
&lt;p&gt;&lt;strong&gt;Description:&lt;/strong&gt; Loads a structure with the given name at the specified position&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Parameters:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;name&lt;/code&gt;: &lt;code&gt;str&lt;/code&gt; – the name of the structure&lt;/li&gt;
&lt;li&gt;&lt;code&gt;to&lt;/code&gt;: &lt;code&gt;Position&lt;/code&gt; – the position to load the structure at&lt;/li&gt;
&lt;li&gt;&lt;code&gt;rotation&lt;/code&gt;: &lt;code&gt;number&lt;/code&gt; – degrees to rotate (0°, 90°, 180°, 270°)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;mirror&lt;/code&gt;: &lt;code&gt;number&lt;/code&gt; – the mirroring axis&lt;/li&gt;
&lt;li&gt;&lt;code&gt;animationMode&lt;/code&gt;: &lt;code&gt;StructureAnimationMode&lt;/code&gt; – the animation type&lt;/li&gt;
&lt;li&gt;&lt;code&gt;animationSeconds&lt;/code&gt;: &lt;code&gt;number&lt;/code&gt; – duration of the animation in seconds&lt;/li&gt;
&lt;li&gt;&lt;code&gt;includeEntities&lt;/code&gt;: &lt;code&gt;bool&lt;/code&gt; – whether to include entities&lt;/li&gt;
&lt;li&gt;&lt;code&gt;includeBlocks&lt;/code&gt;: &lt;code&gt;bool&lt;/code&gt; – whether to include blocks&lt;/li&gt;
&lt;li&gt;&lt;code&gt;integrity&lt;/code&gt;: &lt;code&gt;number&lt;/code&gt; – how exactly to place blocks and entities (0–100)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;h4 id=&quot;blocks-delete-structure-name&quot;&gt;&lt;code&gt;blocks.delete_structure(name)&lt;/code&gt;&lt;/h4&gt;
&lt;p&gt;&lt;strong&gt;Description:&lt;/strong&gt; Deletes the structure with the given name from memory&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Parameters:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;name&lt;/code&gt;: &lt;code&gt;str&lt;/code&gt; – the name of the structure to delete&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;h4 id=&quot;blocks-name-of-block-block&quot;&gt;&lt;code&gt;blocks.name_of_block(block)&lt;/code&gt;&lt;/h4&gt;
&lt;p&gt;&lt;strong&gt;Description:&lt;/strong&gt; Returns the name of the specified block&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Parameters:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;block&lt;/code&gt;: &lt;code&gt;number&lt;/code&gt; – the block to get the name of&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;h4 id=&quot;blocks-test-for-blocks-begin-end-destination-mask&quot;&gt;&lt;code&gt;blocks.test_for_blocks(begin, end, destination, mask)&lt;/code&gt;&lt;/h4&gt;
&lt;p&gt;&lt;strong&gt;Description:&lt;/strong&gt; Tests whether the blocks in two regions match&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Parameters:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;begin&lt;/code&gt;: &lt;code&gt;Position&lt;/code&gt; – the first corner of the first region&lt;/li&gt;
&lt;li&gt;&lt;code&gt;end&lt;/code&gt;: &lt;code&gt;Position&lt;/code&gt; – the opposite corner of the first region&lt;/li&gt;
&lt;li&gt;&lt;code&gt;destination&lt;/code&gt;: &lt;code&gt;Position&lt;/code&gt; – the first corner of the second region&lt;/li&gt;
&lt;li&gt;&lt;code&gt;mask&lt;/code&gt;: &lt;code&gt;TestForBlocksMask&lt;/code&gt; – how blocks are compared&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;hr /&gt;
&lt;h2 id=&quot;mobs&quot;&gt;Mobs&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;h4 id=&quot;mobs-spawn-mob-destination&quot;&gt;&lt;code&gt;mobs.spawn(mob, destination)&lt;/code&gt;&lt;/h4&gt;
&lt;p&gt;&lt;strong&gt;Description:&lt;/strong&gt; Summons a creature at a given location. To spawn monster mobs, the world difficulty must be set to something higher than Peaceful (Easy, Normal, or Hard).&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Parameters:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;mob&lt;/code&gt;: &lt;code&gt;number&lt;/code&gt; – the type of creature to spawn&lt;/li&gt;
&lt;li&gt;&lt;code&gt;destination&lt;/code&gt;: &lt;code&gt;Position&lt;/code&gt; – the position where the creature is spawned&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;h4 id=&quot;mobs-on-mob-killed-mob-handler&quot;&gt;&lt;code&gt;mobs.on_mob_killed(mob, handler)&lt;/code&gt;&lt;/h4&gt;
&lt;p&gt;&lt;strong&gt;Description:&lt;/strong&gt; Runs code when a creature of a certain type is killed&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Parameters:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;mob&lt;/code&gt;: &lt;code&gt;number&lt;/code&gt; – the type of creature&lt;/li&gt;
&lt;li&gt;&lt;code&gt;handler&lt;/code&gt;: &lt;code&gt;() -&amp;gt; None&lt;/code&gt; – the code to run when the selected creature type is killed&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;h4 id=&quot;mobs-kill-target&quot;&gt;&lt;code&gt;mobs.kill(target)&lt;/code&gt;&lt;/h4&gt;
&lt;p&gt;&lt;strong&gt;Description:&lt;/strong&gt; Kills the selected entities&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Parameters:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;target&lt;/code&gt;: &lt;code&gt;TargetSelector&lt;/code&gt; – a selector that chooses which mobs are killed&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;h4 id=&quot;mobs-monster-name&quot;&gt;&lt;code&gt;mobs.monster(name)&lt;/code&gt;&lt;/h4&gt;
&lt;p&gt;&lt;strong&gt;Description:&lt;/strong&gt; Represents a monster from the game. To spawn monster mobs, the world difficulty must be set to something higher than Peaceful (Easy, Normal, or Hard).&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Parameters:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;name&lt;/code&gt;: &lt;code&gt;MonsterMob&lt;/code&gt; – the type of the monster&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;h4 id=&quot;mobs-apply-effect-effect-target-duration-amplifier&quot;&gt;&lt;code&gt;mobs.apply_effect(effect, target, duration, amplifier)&lt;/code&gt;&lt;/h4&gt;
&lt;p&gt;&lt;strong&gt;Description:&lt;/strong&gt; Applies a status effect to the specified target&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Parameters:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;effect&lt;/code&gt;: &lt;code&gt;number&lt;/code&gt; – the effect to apply (e.g. &lt;code&gt;Effect.Speed&lt;/code&gt;, &lt;code&gt;Effect.Hunger&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;target&lt;/code&gt;: &lt;code&gt;TargetSelector&lt;/code&gt; – the player(s) or entities to apply the effect to&lt;/li&gt;
&lt;li&gt;&lt;code&gt;duration&lt;/code&gt;: &lt;code&gt;number&lt;/code&gt; – the number of seconds the effect is applied for&lt;/li&gt;
&lt;li&gt;&lt;code&gt;amplifier&lt;/code&gt;: &lt;code&gt;number&lt;/code&gt; – the strength multiplier for the effect (0–127)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;h4 id=&quot;mobs-clear-effect-target&quot;&gt;&lt;code&gt;mobs.clear_effect(target)&lt;/code&gt;&lt;/h4&gt;
&lt;p&gt;&lt;strong&gt;Description:&lt;/strong&gt; Clears all status effects from the specified target&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Parameters:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;target&lt;/code&gt;: &lt;code&gt;TargetSelector&lt;/code&gt; – the player(s) or entities to remove all effects from&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;h4 id=&quot;mobs-give-target-block-amount&quot;&gt;&lt;code&gt;mobs.give(target, block, amount)&lt;/code&gt;&lt;/h4&gt;
&lt;p&gt;&lt;strong&gt;Description:&lt;/strong&gt; Gives blocks or items from the game to the specified players&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Parameters:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;target&lt;/code&gt;: &lt;code&gt;TargetSelector&lt;/code&gt; – determines which players receive the item&lt;/li&gt;
&lt;li&gt;&lt;code&gt;block&lt;/code&gt;: &lt;code&gt;number&lt;/code&gt; – the block or item to give&lt;/li&gt;
&lt;li&gt;&lt;code&gt;amount&lt;/code&gt;: &lt;code&gt;number&lt;/code&gt; – how many to give, e.g. 1&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;h4 id=&quot;mobs-teleport-to-position-target-destination&quot;&gt;&lt;code&gt;mobs.teleport_to_position(target, destination)&lt;/code&gt;&lt;/h4&gt;
&lt;p&gt;&lt;strong&gt;Description:&lt;/strong&gt; Teleports entities to another location&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Parameters:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;target&lt;/code&gt;: &lt;code&gt;TargetSelector&lt;/code&gt; – selects which entities are teleported&lt;/li&gt;
&lt;li&gt;&lt;code&gt;destination&lt;/code&gt;: &lt;code&gt;Position&lt;/code&gt; – the position where the entities are teleported to&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;h4 id=&quot;mobs-teleport-to-player-target-destination&quot;&gt;&lt;code&gt;mobs.teleport_to_player(target, destination)&lt;/code&gt;&lt;/h4&gt;
&lt;p&gt;&lt;strong&gt;Description:&lt;/strong&gt; Teleports entities to a player&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Parameters:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;target&lt;/code&gt;: &lt;code&gt;TargetSelector&lt;/code&gt; – selects which entities will be teleported&lt;/li&gt;
&lt;li&gt;&lt;code&gt;destination&lt;/code&gt;: &lt;code&gt;TargetSelector&lt;/code&gt; – selects the player to teleport the entities to&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;h4 id=&quot;mobs-enchant-target-spell-level&quot;&gt;&lt;code&gt;mobs.enchant(target, spell, level)&lt;/code&gt;&lt;/h4&gt;
&lt;p&gt;&lt;strong&gt;Description:&lt;/strong&gt; Applies a certain enchantment to the specified targets&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Parameters:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;target&lt;/code&gt;: &lt;code&gt;TargetSelector&lt;/code&gt; – determines which players receive the enchantment&lt;/li&gt;
&lt;li&gt;&lt;code&gt;spell&lt;/code&gt;: &lt;code&gt;str&lt;/code&gt; – the code name of the enchantment, e.g. “infinity”&lt;/li&gt;
&lt;li&gt;&lt;code&gt;level&lt;/code&gt;: &lt;code&gt;number&lt;/code&gt; – the strength level of the enchantment, e.g. 1&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;h4 id=&quot;mobs-execute-detect-detectblock-detectposition-command&quot;&gt;&lt;code&gt;mobs.execute_detect(detectBlock, detectPosition, command)&lt;/code&gt;&lt;/h4&gt;
&lt;p&gt;&lt;strong&gt;Description:&lt;/strong&gt; Executes a command if a certain block type is detected at the specified position&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Parameters:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;detectBlock&lt;/code&gt;: &lt;code&gt;number&lt;/code&gt; – the block type to test for&lt;/li&gt;
&lt;li&gt;&lt;code&gt;detectPosition&lt;/code&gt;: &lt;code&gt;Position&lt;/code&gt; – the position where the block is detected&lt;/li&gt;
&lt;li&gt;&lt;code&gt;command&lt;/code&gt;: &lt;code&gt;str&lt;/code&gt; – the full command to run if the block is detected&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;h4 id=&quot;mobs-execute-target-position-command&quot;&gt;&lt;code&gt;mobs.execute(target, position, command)&lt;/code&gt;&lt;/h4&gt;
&lt;p&gt;&lt;strong&gt;Description:&lt;/strong&gt; Executes a command as other targets&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Parameters:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;target&lt;/code&gt;: &lt;code&gt;TargetSelector&lt;/code&gt; – selects which entities execute the command&lt;/li&gt;
&lt;li&gt;&lt;code&gt;position&lt;/code&gt;: &lt;code&gt;Position&lt;/code&gt; – the position where the command runs&lt;/li&gt;
&lt;li&gt;&lt;code&gt;command&lt;/code&gt;: &lt;code&gt;str&lt;/code&gt; – the full command to execute&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;h4 id=&quot;mobs-spawn-particle-particle-position&quot;&gt;&lt;code&gt;mobs.spawn_particle(particle, position)&lt;/code&gt;&lt;/h4&gt;
&lt;p&gt;&lt;strong&gt;Description:&lt;/strong&gt; Spawns a particle effect at the given location&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Parameters:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;particle&lt;/code&gt;: &lt;code&gt;number&lt;/code&gt; – the particle effect to spawn&lt;/li&gt;
&lt;li&gt;&lt;code&gt;position&lt;/code&gt;: &lt;code&gt;Position&lt;/code&gt; – the position to spawn the particle effect at&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;h4 id=&quot;mobs-target-kind&quot;&gt;&lt;code&gt;mobs.target(kind)&lt;/code&gt;&lt;/h4&gt;
&lt;p&gt;&lt;strong&gt;Description:&lt;/strong&gt; Selects a set of players or mobs&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Parameters:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;kind&lt;/code&gt;: &lt;code&gt;TargetSelectorKind&lt;/code&gt; – the kind of targets to select&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;h4 id=&quot;mobs-near-target-pos-radius&quot;&gt;&lt;code&gt;mobs.near(target, pos, radius)&lt;/code&gt;&lt;/h4&gt;
&lt;p&gt;&lt;strong&gt;Description:&lt;/strong&gt; Selects targets near a given position&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Parameters:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;target&lt;/code&gt;: &lt;code&gt;TargetSelector&lt;/code&gt; – the type of mobs to select&lt;/li&gt;
&lt;li&gt;&lt;code&gt;pos&lt;/code&gt;: &lt;code&gt;Position&lt;/code&gt; – the position near which to select targets&lt;/li&gt;
&lt;li&gt;&lt;code&gt;radius&lt;/code&gt;: &lt;code&gt;number&lt;/code&gt; – how far away (in blocks) to search, e.g. 5&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;h4 id=&quot;mobs-entities-by-type-type&quot;&gt;&lt;code&gt;mobs.entities_by_type(type)&lt;/code&gt;&lt;/h4&gt;
&lt;p&gt;&lt;strong&gt;Description:&lt;/strong&gt; Selects all mobs (animals or monsters) of a given type&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Parameters:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;type&lt;/code&gt;: &lt;code&gt;number&lt;/code&gt; – the type of mob to select&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;h4 id=&quot;mobs-player-by-name-name&quot;&gt;&lt;code&gt;mobs.player_by_name(name)&lt;/code&gt;&lt;/h4&gt;
&lt;p&gt;&lt;strong&gt;Description:&lt;/strong&gt; Selects the player with the given name&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Parameters:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;name&lt;/code&gt;: &lt;code&gt;str&lt;/code&gt; – the name of the player to select&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;h4 id=&quot;mobs-players-in-game-mode-mode&quot;&gt;&lt;code&gt;mobs.players_in_game_mode(mode)&lt;/code&gt;&lt;/h4&gt;
&lt;p&gt;&lt;strong&gt;Description:&lt;/strong&gt; Selects all players in the given game mode&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Parameters:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;mode&lt;/code&gt;: &lt;code&gt;GameMode&lt;/code&gt; – the game mode to filter players by&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;h4 id=&quot;mobs-is-monster-mob&quot;&gt;&lt;code&gt;mobs.is_monster(mob)&lt;/code&gt;&lt;/h4&gt;
&lt;p&gt;&lt;strong&gt;Description:&lt;/strong&gt; Returns true if the specified mob is a monster&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Parameters:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;mob&lt;/code&gt;: &lt;code&gt;number&lt;/code&gt; – the mob to check&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;h4 id=&quot;mobs-mob-name-to-id-mobname&quot;&gt;&lt;code&gt;mobs.mob_name_to_id(mobName)&lt;/code&gt;&lt;/h4&gt;
&lt;p&gt;&lt;strong&gt;Description:&lt;/strong&gt; Converts a mob name to its ID&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Parameters:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;mobName&lt;/code&gt;: &lt;code&gt;str&lt;/code&gt; – the name of the mob&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;h4 id=&quot;mobs-parse-selector-str&quot;&gt;&lt;code&gt;mobs.parse_selector(str)&lt;/code&gt;&lt;/h4&gt;
&lt;p&gt;&lt;strong&gt;Description:&lt;/strong&gt; Parses a string into a &lt;code&gt;TargetSelector&lt;/code&gt; object. This function does not validate argument types or names. Returns the parsed selector or &lt;code&gt;null&lt;/code&gt; if the string is invalid.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Parameters:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;str&lt;/code&gt;: &lt;code&gt;str&lt;/code&gt; – the selector string to parse&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;h4 id=&quot;mobs-query-target-target&quot;&gt;&lt;code&gt;mobs.query_target(target)&lt;/code&gt;&lt;/h4&gt;
&lt;p&gt;&lt;strong&gt;Description:&lt;/strong&gt; Queries information about a given target&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Parameters:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;target&lt;/code&gt;: &lt;code&gt;TargetSelector&lt;/code&gt; – the target to query&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;agent&quot;&gt;Agent&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;h4 id=&quot;agent-teleport-to-player&quot;&gt;&lt;code&gt;agent.teleport_to_player()&lt;/code&gt;&lt;/h4&gt;
&lt;p&gt;&lt;strong&gt;Description:&lt;/strong&gt; Teleports the agent to the player&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Parameters:&lt;/strong&gt;
&lt;em&gt;(none)&lt;/em&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;h4 id=&quot;agent-move-direction-blocks&quot;&gt;&lt;code&gt;agent.move(direction, blocks)&lt;/code&gt;&lt;/h4&gt;
&lt;p&gt;&lt;strong&gt;Description:&lt;/strong&gt; Requests the agent to move in the specified direction&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Parameters:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;direction&lt;/code&gt;: &lt;code&gt;number&lt;/code&gt; – the direction to move the agent, such as &lt;code&gt;FORWARD&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;blocks&lt;/code&gt;: &lt;code&gt;number&lt;/code&gt; – how far the agent should move, in blocks, e.g. 1&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;h4 id=&quot;agent-turn-direction&quot;&gt;&lt;code&gt;agent.turn(direction)&lt;/code&gt;&lt;/h4&gt;
&lt;p&gt;&lt;strong&gt;Description:&lt;/strong&gt; Turns the agent in the specified direction&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Parameters:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;direction&lt;/code&gt;: &lt;code&gt;number&lt;/code&gt; – the turn direction, e.g. &lt;code&gt;TurnDirection.Left&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;h4 id=&quot;agent-get-position&quot;&gt;&lt;code&gt;agent.get_position()&lt;/code&gt;&lt;/h4&gt;
&lt;p&gt;&lt;strong&gt;Description:&lt;/strong&gt; Returns the agent&#39;s position in world coordinates&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Parameters:&lt;/strong&gt;
&lt;em&gt;(none)&lt;/em&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;h4 id=&quot;agent-get-orientation&quot;&gt;&lt;code&gt;agent.get_orientation()&lt;/code&gt;&lt;/h4&gt;
&lt;p&gt;&lt;strong&gt;Description:&lt;/strong&gt; Returns the agent&#39;s orientation, in degrees&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Parameters:&lt;/strong&gt;
&lt;em&gt;(none)&lt;/em&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;h4 id=&quot;agent-teleport-pos-dir&quot;&gt;&lt;code&gt;agent.teleport(pos, dir)&lt;/code&gt;&lt;/h4&gt;
&lt;p&gt;&lt;strong&gt;Description:&lt;/strong&gt; Teleports the agent to the specified coordinates facing the specified orientation&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Parameters:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;pos&lt;/code&gt;: &lt;code&gt;Position&lt;/code&gt; – the destination position&lt;/li&gt;
&lt;li&gt;&lt;code&gt;dir&lt;/code&gt;: &lt;code&gt;number&lt;/code&gt; – the compass direction (in degrees) that the agent will face&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;h4 id=&quot;agent-set-assist-assist-on&quot;&gt;&lt;code&gt;agent.set_assist(assist, on)&lt;/code&gt;&lt;/h4&gt;
&lt;p&gt;&lt;strong&gt;Description:&lt;/strong&gt; Controls which assists are enabled for the agent&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Parameters:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;assist&lt;/code&gt;: &lt;code&gt;AgentAssist&lt;/code&gt; – the super power of the agent&lt;/li&gt;
&lt;li&gt;&lt;code&gt;on&lt;/code&gt;: &lt;code&gt;bool&lt;/code&gt; – whether the assist is enabled (&lt;code&gt;True&lt;/code&gt;) or disabled (&lt;code&gt;False&lt;/code&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;h4 id=&quot;agent-place-direction&quot;&gt;&lt;code&gt;agent.place(direction)&lt;/code&gt;&lt;/h4&gt;
&lt;p&gt;&lt;strong&gt;Description:&lt;/strong&gt; Places an item or block in the world from the agent&#39;s currently selected inventory slot&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Parameters:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;direction&lt;/code&gt;: &lt;code&gt;number&lt;/code&gt; – the direction in which to place the item, e.g. &lt;code&gt;BACK&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;h4 id=&quot;agent-interact-direction&quot;&gt;&lt;code&gt;agent.interact(direction)&lt;/code&gt;&lt;/h4&gt;
&lt;p&gt;&lt;strong&gt;Description:&lt;/strong&gt; Interacts with an item&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Parameters:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;direction&lt;/code&gt;: &lt;code&gt;number&lt;/code&gt; – the &lt;code&gt;SixDirection&lt;/code&gt; in which to interact with the item&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;h4 id=&quot;agent-destroy-direction&quot;&gt;&lt;code&gt;agent.destroy(direction)&lt;/code&gt;&lt;/h4&gt;
&lt;p&gt;&lt;strong&gt;Description:&lt;/strong&gt; Commands the agent to destroy a block in the given direction&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Parameters:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;direction&lt;/code&gt;: &lt;code&gt;number&lt;/code&gt; – the direction in which the agent will destroy a block&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;h4 id=&quot;agent-till-direction&quot;&gt;&lt;code&gt;agent.till(direction)&lt;/code&gt;&lt;/h4&gt;
&lt;p&gt;&lt;strong&gt;Description:&lt;/strong&gt; Commands the agent to till soil in the given direction&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Parameters:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;direction&lt;/code&gt;: &lt;code&gt;number&lt;/code&gt; – the direction in which to till the soil&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;h4 id=&quot;agent-attack-direction&quot;&gt;&lt;code&gt;agent.attack(direction)&lt;/code&gt;&lt;/h4&gt;
&lt;p&gt;&lt;strong&gt;Description:&lt;/strong&gt; Commands the agent to attack in the given direction&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Parameters:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;direction&lt;/code&gt;: &lt;code&gt;number&lt;/code&gt; – the direction in which to attack&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;h4 id=&quot;agent-collect-all&quot;&gt;&lt;code&gt;agent.collect_all()&lt;/code&gt;&lt;/h4&gt;
&lt;p&gt;&lt;strong&gt;Description:&lt;/strong&gt; Commands the agent to collect all nearby blocks and items&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Parameters:&lt;/strong&gt;
&lt;em&gt;(none)&lt;/em&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;h4 id=&quot;agent-collect-block&quot;&gt;&lt;code&gt;agent.collect(block)&lt;/code&gt;&lt;/h4&gt;
&lt;p&gt;&lt;strong&gt;Description:&lt;/strong&gt; Commands the agent to collect a block or item of the specified type&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Parameters:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;block&lt;/code&gt;: &lt;code&gt;number&lt;/code&gt; – the type of block or item to collect&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;h4 id=&quot;agent-inspect-block-direction&quot;&gt;&lt;code&gt;agent.inspect_block(direction)&lt;/code&gt;&lt;/h4&gt;
&lt;p&gt;&lt;strong&gt;Description:&lt;/strong&gt; Inspects a block in the specified direction and returns the block ID&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Parameters:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;direction&lt;/code&gt;: &lt;code&gt;number&lt;/code&gt; – the direction in which to inspect, e.g. &lt;code&gt;FORWARD&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;h4 id=&quot;agent-detect-kind-direction&quot;&gt;&lt;code&gt;agent.detect(kind, direction)&lt;/code&gt;&lt;/h4&gt;
&lt;p&gt;&lt;strong&gt;Description:&lt;/strong&gt; Detects if there is a block next to the agent in the specified direction&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Parameters:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;kind&lt;/code&gt;: &lt;code&gt;AgentDetection&lt;/code&gt; – what the agent should attempt to detect&lt;/li&gt;
&lt;li&gt;&lt;code&gt;direction&lt;/code&gt;: &lt;code&gt;number&lt;/code&gt; – the direction in which to perform the detection&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;h4 id=&quot;agent-set-slot-slot&quot;&gt;&lt;code&gt;agent.set_slot(slot)&lt;/code&gt;&lt;/h4&gt;
&lt;p&gt;&lt;strong&gt;Description:&lt;/strong&gt; Sets the agent&#39;s active inventory slot&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Parameters:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;slot&lt;/code&gt;: &lt;code&gt;number&lt;/code&gt; – the slot index between 1 and 27&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;h4 id=&quot;agent-set-item-blockoritem-count-slot&quot;&gt;&lt;code&gt;agent.set_item(blockOrItem, count, slot)&lt;/code&gt;&lt;/h4&gt;
&lt;p&gt;&lt;strong&gt;Description:&lt;/strong&gt; Puts the specified block or item in the agent&#39;s inventory&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Parameters:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;blockOrItem&lt;/code&gt;: &lt;code&gt;number&lt;/code&gt; – the block or item to place in a slot&lt;/li&gt;
&lt;li&gt;&lt;code&gt;count&lt;/code&gt;: &lt;code&gt;number&lt;/code&gt; – the number of blocks or items to put in the slot&lt;/li&gt;
&lt;li&gt;&lt;code&gt;slot&lt;/code&gt;: &lt;code&gt;number&lt;/code&gt; – the slot index (1–27), e.g. 1&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;h4 id=&quot;agent-drop-all-direction&quot;&gt;&lt;code&gt;agent.drop_all(direction)&lt;/code&gt;&lt;/h4&gt;
&lt;p&gt;&lt;strong&gt;Description:&lt;/strong&gt; Commands the agent to drop its entire inventory in the given direction&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Parameters:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;direction&lt;/code&gt;: &lt;code&gt;number&lt;/code&gt; – the direction in which to drop items&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;h4 id=&quot;agent-drop-direction-slot-quantity&quot;&gt;&lt;code&gt;agent.drop(direction, slot, quantity)&lt;/code&gt;&lt;/h4&gt;
&lt;p&gt;&lt;strong&gt;Description:&lt;/strong&gt; Drops an item from the inventory&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Parameters:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;direction&lt;/code&gt;: &lt;code&gt;number&lt;/code&gt; – the direction in which to drop the item, e.g. &lt;code&gt;BACK&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;slot&lt;/code&gt;: &lt;code&gt;number&lt;/code&gt; – the slot from which the item will be dropped (1–27)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;quantity&lt;/code&gt;: &lt;code&gt;number&lt;/code&gt; – the number of items to drop&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;h4 id=&quot;agent-transfer-quantity-sourceslot-destinationslot&quot;&gt;&lt;code&gt;agent.transfer(quantity, sourceSlot, destinationSlot)&lt;/code&gt;&lt;/h4&gt;
&lt;p&gt;&lt;strong&gt;Description:&lt;/strong&gt; Transfers items from one inventory slot to another&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Parameters:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;quantity&lt;/code&gt;: &lt;code&gt;number&lt;/code&gt; – the number of items to transfer, e.g. 1&lt;/li&gt;
&lt;li&gt;&lt;code&gt;sourceSlot&lt;/code&gt;: &lt;code&gt;number&lt;/code&gt; – the source slot index (1–27)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;destinationSlot&lt;/code&gt;: &lt;code&gt;number&lt;/code&gt; – the destination slot index (1–27)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;h4 id=&quot;agent-get-item-count-slot&quot;&gt;&lt;code&gt;agent.get_item_count(slot)&lt;/code&gt;&lt;/h4&gt;
&lt;p&gt;&lt;strong&gt;Description:&lt;/strong&gt; Gets the number of items in the specified slot&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Parameters:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;slot&lt;/code&gt;: &lt;code&gt;number&lt;/code&gt; – the inventory slot to count items in&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;h4 id=&quot;agent-get-item-detail-slot&quot;&gt;&lt;code&gt;agent.get_item_detail(slot)&lt;/code&gt;&lt;/h4&gt;
&lt;p&gt;&lt;strong&gt;Description:&lt;/strong&gt; Gets the ID of the item in the specified inventory slot of the agent&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Parameters:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;slot&lt;/code&gt;: &lt;code&gt;number&lt;/code&gt; – the slot from which the item ID is returned&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;h4 id=&quot;agent-get-item-space-slot&quot;&gt;&lt;code&gt;agent.get_item_space(slot)&lt;/code&gt;&lt;/h4&gt;
&lt;p&gt;&lt;strong&gt;Description:&lt;/strong&gt; Gets the remaining space in the specified slot&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Parameters:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;slot&lt;/code&gt;: &lt;code&gt;number&lt;/code&gt; – the slot for which the remaining space is calculated&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;h4 id=&quot;agent-turn-left&quot;&gt;&lt;code&gt;agent.turn_left()&lt;/code&gt;&lt;/h4&gt;
&lt;p&gt;&lt;strong&gt;Description:&lt;/strong&gt; Turns the agent left by 90 degrees&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Parameters:&lt;/strong&gt;
&lt;em&gt;(none)&lt;/em&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;h4 id=&quot;agent-turn-right&quot;&gt;&lt;code&gt;agent.turn_right()&lt;/code&gt;&lt;/h4&gt;
&lt;p&gt;&lt;strong&gt;Description:&lt;/strong&gt; Turns the agent right by 90 degrees&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Parameters:&lt;/strong&gt;
&lt;em&gt;(none)&lt;/em&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;gameplay&quot;&gt;Gameplay&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;h4 id=&quot;gameplay-set-weather-weather&quot;&gt;&lt;code&gt;gameplay.set_weather(weather)&lt;/code&gt;&lt;/h4&gt;
&lt;p&gt;&lt;strong&gt;Description:&lt;/strong&gt; Changes the current weather&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Parameters:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;weather&lt;/code&gt;: &lt;code&gt;number&lt;/code&gt; – the desired weather&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;h4 id=&quot;gameplay-weather-query&quot;&gt;&lt;code&gt;gameplay.weather_query()&lt;/code&gt;&lt;/h4&gt;
&lt;p&gt;&lt;strong&gt;Description:&lt;/strong&gt; Gets the current weather in the game world&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Parameters:&lt;/strong&gt;
&lt;em&gt;(none)&lt;/em&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;h4 id=&quot;gameplay-toggle-downfall&quot;&gt;&lt;code&gt;gameplay.toggle_downfall()&lt;/code&gt;&lt;/h4&gt;
&lt;p&gt;&lt;strong&gt;Description:&lt;/strong&gt; Starts raining if it isn’t, or stops raining if it is&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Parameters:&lt;/strong&gt;
&lt;em&gt;(none)&lt;/em&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;h4 id=&quot;gameplay-time-set-time&quot;&gt;&lt;code&gt;gameplay.time_set(time)&lt;/code&gt;&lt;/h4&gt;
&lt;p&gt;&lt;strong&gt;Description:&lt;/strong&gt; Sets the current time of day to a preset time or a custom hour, in game ticks&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Parameters:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;time&lt;/code&gt;: &lt;code&gt;number&lt;/code&gt; – the desired time of day&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;h4 id=&quot;gameplay-time-add-amount&quot;&gt;&lt;code&gt;gameplay.time_add(amount)&lt;/code&gt;&lt;/h4&gt;
&lt;p&gt;&lt;strong&gt;Description:&lt;/strong&gt; Adds ticks to the current time of day&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Parameters:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;amount&lt;/code&gt;: &lt;code&gt;number&lt;/code&gt; – the number of ticks to add&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;h4 id=&quot;gameplay-set-difficulty-difficulty&quot;&gt;&lt;code&gt;gameplay.set_difficulty(difficulty)&lt;/code&gt;&lt;/h4&gt;
&lt;p&gt;&lt;strong&gt;Description:&lt;/strong&gt; Changes the game difficulty&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Parameters:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;difficulty&lt;/code&gt;: &lt;code&gt;GameDifficulty&lt;/code&gt; – the new difficulty level for the game&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;h4 id=&quot;gameplay-set-game-mode-mode-player&quot;&gt;&lt;code&gt;gameplay.set_game_mode(mode, player)&lt;/code&gt;&lt;/h4&gt;
&lt;p&gt;&lt;strong&gt;Description:&lt;/strong&gt; Changes the game mode for the selected players&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Parameters:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;mode&lt;/code&gt;: &lt;code&gt;GameMode&lt;/code&gt; – the new game mode&lt;/li&gt;
&lt;li&gt;&lt;code&gt;player&lt;/code&gt;: &lt;code&gt;TargetSelector&lt;/code&gt; – a selector for the players whose game mode is changed&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;h4 id=&quot;gameplay-title-target-title-subtitle&quot;&gt;&lt;code&gt;gameplay.title(target, title, subTitle)&lt;/code&gt;&lt;/h4&gt;
&lt;p&gt;&lt;strong&gt;Description:&lt;/strong&gt; Shows a title and subtitle to the selected targets&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Parameters:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;target&lt;/code&gt;: &lt;code&gt;TargetSelector&lt;/code&gt; – determines which players receive the title&lt;/li&gt;
&lt;li&gt;&lt;code&gt;title&lt;/code&gt;: &lt;code&gt;str&lt;/code&gt; – the large font title to display&lt;/li&gt;
&lt;li&gt;&lt;code&gt;subTitle&lt;/code&gt;: &lt;code&gt;str&lt;/code&gt; – the secondary title to display (optional)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;h4 id=&quot;gameplay-time-query-query&quot;&gt;&lt;code&gt;gameplay.time_query(query)&lt;/code&gt;&lt;/h4&gt;
&lt;p&gt;&lt;strong&gt;Description:&lt;/strong&gt; Gets the current time of day, in game ticks&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Parameters:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;query&lt;/code&gt;: &lt;code&gt;TimeQuery&lt;/code&gt; – the type of time to query&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;h4 id=&quot;gameplay-is-daylight-time-query&quot;&gt;&lt;code&gt;gameplay.is_daylight_time(query)&lt;/code&gt;&lt;/h4&gt;
&lt;p&gt;&lt;strong&gt;Description:&lt;/strong&gt; Checks whether the specified time is daylight time&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Parameters:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;query&lt;/code&gt;: &lt;code&gt;DayTime&lt;/code&gt; – the time of day to query&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;h4 id=&quot;gameplay-xp-amount-target&quot;&gt;&lt;code&gt;gameplay.xp(amount, target)&lt;/code&gt;&lt;/h4&gt;
&lt;p&gt;&lt;strong&gt;Description:&lt;/strong&gt; Gives experience points to the selected players&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Parameters:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;amount&lt;/code&gt;: &lt;code&gt;number&lt;/code&gt; – the number of experience points to give&lt;/li&gt;
&lt;li&gt;&lt;code&gt;target&lt;/code&gt;: &lt;code&gt;TargetSelector&lt;/code&gt; – selects the players who receive the experience&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;h4 id=&quot;gameplay-set-game-rule-rule-enabled&quot;&gt;&lt;code&gt;gameplay.set_game_rule(rule, enabled)&lt;/code&gt;&lt;/h4&gt;
&lt;p&gt;&lt;strong&gt;Description:&lt;/strong&gt; Enables or disables a game rule&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Parameters:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;rule&lt;/code&gt;: &lt;code&gt;GameRule&lt;/code&gt; – the game rule to change&lt;/li&gt;
&lt;li&gt;&lt;code&gt;enabled&lt;/code&gt;: &lt;code&gt;bool&lt;/code&gt; – set to &lt;code&gt;True&lt;/code&gt; to enable or &lt;code&gt;False&lt;/code&gt; to disable&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;h4 id=&quot;gameplay-time-time&quot;&gt;&lt;code&gt;gameplay.time(time)&lt;/code&gt;&lt;/h4&gt;
&lt;p&gt;&lt;strong&gt;Description:&lt;/strong&gt; Represents a preset time of the day&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Parameters:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;time&lt;/code&gt;: &lt;code&gt;DayTime&lt;/code&gt; – the preset time of day&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;h4 id=&quot;gameplay-dismiss-chat&quot;&gt;&lt;code&gt;gameplay.dismiss_chat()&lt;/code&gt;&lt;/h4&gt;
&lt;p&gt;&lt;strong&gt;Description:&lt;/strong&gt; Closes the chat window if it is open (EE only)&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Parameters:&lt;/strong&gt;
&lt;em&gt;(none)&lt;/em&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;position&quot;&gt;Position&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;h4 id=&quot;pos-x-y-z&quot;&gt;&lt;code&gt;pos(x, y, z)&lt;/code&gt;&lt;/h4&gt;
&lt;p&gt;&lt;strong&gt;Description:&lt;/strong&gt; Creates a new relative position (&lt;code&gt;~East/West&lt;/code&gt;, &lt;code&gt;~up/down&lt;/code&gt;, &lt;code&gt;~South/North&lt;/code&gt;). A relative position is the distance in each direction from the player’s feet.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Parameters:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;x&lt;/code&gt;: &lt;code&gt;number&lt;/code&gt; – the East (+x) or West (−x) distance from the player, in blocks&lt;/li&gt;
&lt;li&gt;&lt;code&gt;y&lt;/code&gt;: &lt;code&gt;number&lt;/code&gt; – the up (+y) or down (−y) distance from the player, in blocks&lt;/li&gt;
&lt;li&gt;&lt;code&gt;z&lt;/code&gt;: &lt;code&gt;number&lt;/code&gt; – the South (+z) or North (−z) distance from the player, in blocks&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;h4 id=&quot;pos-camera-x-y-z&quot;&gt;&lt;code&gt;pos_camera(x, y, z)&lt;/code&gt;&lt;/h4&gt;
&lt;p&gt;&lt;strong&gt;Description:&lt;/strong&gt; Creates a new camera (player) position: right/left, up/down, in front/behind. This position is relative to the direction the player is currently facing, starting from the player’s feet.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Parameters:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;x&lt;/code&gt;: &lt;code&gt;number&lt;/code&gt; – the right (+x) or left (−x) distance from the player, in blocks&lt;/li&gt;
&lt;li&gt;&lt;code&gt;y&lt;/code&gt;: &lt;code&gt;number&lt;/code&gt; – the up (+y) or down (−y) distance from the player, in blocks&lt;/li&gt;
&lt;li&gt;&lt;code&gt;z&lt;/code&gt;: &lt;code&gt;number&lt;/code&gt; – the forward (+z) or backward (−z) distance from the player, in blocks&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;h4 id=&quot;pos-local-x-y-z&quot;&gt;&lt;code&gt;pos_local(x, y, z)&lt;/code&gt;&lt;/h4&gt;
&lt;p&gt;&lt;strong&gt;Description:&lt;/strong&gt; Creates a new local position (&lt;code&gt;^right/^left&lt;/code&gt;, &lt;code&gt;^up/^down&lt;/code&gt;, &lt;code&gt;^forward/^backward&lt;/code&gt;) based on the direction the player is looking. This position does not align with world axes.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Parameters:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;x&lt;/code&gt;: &lt;code&gt;number&lt;/code&gt; – the right (+x) or left (−x) distance from the player’s view, in blocks&lt;/li&gt;
&lt;li&gt;&lt;code&gt;y&lt;/code&gt;: &lt;code&gt;number&lt;/code&gt; – the up (+y) or down (−y) distance from the player’s view, in blocks&lt;/li&gt;
&lt;li&gt;&lt;code&gt;z&lt;/code&gt;: &lt;code&gt;number&lt;/code&gt; – the forward (+z) or backward (−z) distance from the player’s view, in blocks&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;h4 id=&quot;world-x-y-z&quot;&gt;&lt;code&gt;world(x, y, z)&lt;/code&gt;&lt;/h4&gt;
&lt;p&gt;&lt;strong&gt;Description:&lt;/strong&gt; Creates a new world (absolute) position relative to the world origin &lt;code&gt;(0, 0, 0)&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Parameters:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;x&lt;/code&gt;: &lt;code&gt;number&lt;/code&gt; – the East (+x) or West (−x) distance from world coordinate 0, in blocks&lt;/li&gt;
&lt;li&gt;&lt;code&gt;y&lt;/code&gt;: &lt;code&gt;number&lt;/code&gt; – the up (+y) or down (−y) distance from world coordinate 0, in blocks&lt;/li&gt;
&lt;li&gt;&lt;code&gt;z&lt;/code&gt;: &lt;code&gt;number&lt;/code&gt; – the South (+z) or North (−z) distance from world coordinate 0, in blocks&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;h4 id=&quot;positions-add-p1-p2&quot;&gt;&lt;code&gt;positions.add(p1, p2)&lt;/code&gt;&lt;/h4&gt;
&lt;p&gt;&lt;strong&gt;Description:&lt;/strong&gt; Adds two positions together and returns a new position. The result has the same type as the first position.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Parameters:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;p1&lt;/code&gt;: &lt;code&gt;Position&lt;/code&gt; – the first position (determines the result type)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;p2&lt;/code&gt;: &lt;code&gt;Position&lt;/code&gt; – the second position to add&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;h4 id=&quot;positions-equals-p1-p2&quot;&gt;&lt;code&gt;positions.equals(p1, p2)&lt;/code&gt;&lt;/h4&gt;
&lt;p&gt;&lt;strong&gt;Description:&lt;/strong&gt; Compares two positions to check if they are equivalent in the world. Relative and local positions are compared using their actual world positions.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Parameters:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;p1&lt;/code&gt;: &lt;code&gt;Position&lt;/code&gt; – the first position&lt;/li&gt;
&lt;li&gt;&lt;code&gt;p2&lt;/code&gt;: &lt;code&gt;Position&lt;/code&gt; – the second position&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;h4 id=&quot;randpos-p1-p2&quot;&gt;&lt;code&gt;randpos(p1, p2)&lt;/code&gt;&lt;/h4&gt;
&lt;p&gt;&lt;strong&gt;Description:&lt;/strong&gt; Picks a random position inside a cube-shaped region defined by two corner positions.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Parameters:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;p1&lt;/code&gt;: &lt;code&gt;Position&lt;/code&gt; – the first corner of the cube&lt;/li&gt;
&lt;li&gt;&lt;code&gt;p2&lt;/code&gt;: &lt;code&gt;Position&lt;/code&gt; – the opposite corner of the cube&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;h4 id=&quot;positions-ground-position-pos&quot;&gt;&lt;code&gt;positions.ground_position(pos)&lt;/code&gt;&lt;/h4&gt;
&lt;p&gt;&lt;strong&gt;Description:&lt;/strong&gt; Finds the ground position beneath the given position. Solid blocks and liquids are treated as ground.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Parameters:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;pos&lt;/code&gt;: &lt;code&gt;Position&lt;/code&gt; – the position to start searching from&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;h4 id=&quot;positions-to-compass-direction-deg&quot;&gt;&lt;code&gt;positions.to_compass_direction(deg)&lt;/code&gt;&lt;/h4&gt;
&lt;p&gt;&lt;strong&gt;Description:&lt;/strong&gt; Converts an angle in degrees to the closest compass direction used in the game.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Parameters:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;deg&lt;/code&gt;: &lt;code&gt;number&lt;/code&gt; – the angle in degrees to convert&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;math&quot;&gt;Math&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;h4 id=&quot;randint-min-max&quot;&gt;&lt;code&gt;randint(min, max)&lt;/code&gt;&lt;/h4&gt;
&lt;p&gt;&lt;strong&gt;Description:&lt;/strong&gt; Returns a pseudorandom number between min and max included. If both numbers are integral, the result is integral.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Parameters:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;min&lt;/code&gt;: &lt;code&gt;number&lt;/code&gt; – the lower inclusive bound&lt;/li&gt;
&lt;li&gt;&lt;code&gt;max&lt;/code&gt;: &lt;code&gt;number&lt;/code&gt; – the upper inclusive bound&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;loops&quot;&gt;Loops&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;h4 id=&quot;loops-forever-body&quot;&gt;&lt;code&gt;loops.forever(body)&lt;/code&gt;&lt;/h4&gt;
&lt;p&gt;&lt;strong&gt;Description:&lt;/strong&gt; Run a part of the program in the background and keep running it over again. The code you have in a forever loop will run and keep repeating itself the whole time your program is active. Code in other parts of your program won’t stop while your forever loop is running. This includes other &lt;code&gt;forever&lt;/code&gt; loops and the &lt;code&gt;run in background&lt;/code&gt; block.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Parameters:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;body&lt;/code&gt;: &lt;code&gt;() -&amp;gt; None&lt;/code&gt; – code to repeat forever&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;h4 id=&quot;loops-run-in-background-handler&quot;&gt;&lt;code&gt;loops.run_in_background(handler)&lt;/code&gt;&lt;/h4&gt;
&lt;p&gt;&lt;strong&gt;Description:&lt;/strong&gt; Run some other code at the same time that your main program code runs. Sometimes you want your program to work on more than one thing at a time. The main part of your program is always put in &lt;code&gt;on start&lt;/code&gt;. But, you can also put some other part of your program in &lt;code&gt;run in background&lt;/code&gt;. This is useful when you want your program to keep doing important things and you don’t want to wait for some other actions to happen first.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Parameters:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;handler&lt;/code&gt;: &lt;code&gt;() -&amp;gt; None&lt;/code&gt; – the code to run in the background.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;h4 id=&quot;loops-pause-ms&quot;&gt;&lt;code&gt;loops.pause(ms)&lt;/code&gt;&lt;/h4&gt;
&lt;p&gt;&lt;strong&gt;Description:&lt;/strong&gt; When code in a block comes to a pause, it will wait the amount of time you tell it to. Code in blocks like &lt;code&gt;forever&lt;/code&gt; and &lt;code&gt;run in background&lt;/code&gt; will keep running while code in some other block is waiting at a &lt;code&gt;pause&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Parameters:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;ms&lt;/code&gt;: &lt;code&gt;() -&amp;gt; None&lt;/code&gt; – the number of milliseconds that you want to pause for. So, 100 milliseconds = 1/10 second, and 1000 milliseconds = 1 second.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;hr /&gt;
&lt;h2 id=&quot;classes&quot;&gt;Classes&lt;/h2&gt;
&lt;h3 id=&quot;targetselector&quot;&gt;&lt;code&gt;TargetSelector&lt;/code&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;h4 id=&quot;targetselector-at-coordinate-p&quot;&gt;&lt;code&gt;TargetSelector.at_coordinate(p)&lt;/code&gt;&lt;/h4&gt;
&lt;p&gt;&lt;strong&gt;Description:&lt;/strong&gt; Sets the base coordinates of the target selector.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Parameters:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;p&lt;/code&gt;: &lt;code&gt;Position&lt;/code&gt; – the position to assign to the selector&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;h4 id=&quot;targetselector-within-radius-radius&quot;&gt;&lt;code&gt;TargetSelector.within_radius(radius)&lt;/code&gt;&lt;/h4&gt;
&lt;p&gt;&lt;strong&gt;Description:&lt;/strong&gt; Sets the maximum distance from the selector’s base coordinates.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Parameters:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;radius&lt;/code&gt;: &lt;code&gt;number&lt;/code&gt; – the maximum distance in blocks, e.g. 5&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;h4 id=&quot;targetselector-add-rule-rule-value&quot;&gt;&lt;code&gt;TargetSelector.add_rule(rule, value)&lt;/code&gt;&lt;/h4&gt;
&lt;p&gt;&lt;strong&gt;Description:&lt;/strong&gt; Adds a rule (argument) to the target selector.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Parameters:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;rule&lt;/code&gt;: &lt;code&gt;str&lt;/code&gt; – the rule name, e.g. &lt;code&gt;&quot;type&quot;&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;value&lt;/code&gt;: &lt;code&gt;str&lt;/code&gt; – the rule value, e.g. &lt;code&gt;&quot;chicken&quot;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;h4 id=&quot;targetselector-outside-radius-radius&quot;&gt;&lt;code&gt;TargetSelector.outside_radius(radius)&lt;/code&gt;&lt;/h4&gt;
&lt;p&gt;&lt;strong&gt;Description:&lt;/strong&gt; Sets the minimum distance from the selector’s base coordinates.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Parameters:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;radius&lt;/code&gt;: &lt;code&gt;number&lt;/code&gt; – the minimum distance in blocks, e.g. 10&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;h4 id=&quot;targetselector-to-string&quot;&gt;&lt;code&gt;TargetSelector.to_string()&lt;/code&gt;&lt;/h4&gt;
&lt;p&gt;&lt;strong&gt;Description:&lt;/strong&gt; Returns the game notation string for this target selector.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Parameters:&lt;/strong&gt;
&lt;em&gt;(none)&lt;/em&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;position-1&quot;&gt;&lt;code&gt;Position&lt;/code&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;h4 id=&quot;position-get-value-direction&quot;&gt;&lt;code&gt;Position.get_value(direction)&lt;/code&gt;&lt;/h4&gt;
&lt;p&gt;&lt;strong&gt;Description:&lt;/strong&gt; Gets the coordinate value of the position along one axis.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Parameters:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;direction&lt;/code&gt;: &lt;code&gt;Axis&lt;/code&gt; – the axis to query (&lt;code&gt;x&lt;/code&gt;, &lt;code&gt;y&lt;/code&gt;, or &lt;code&gt;z&lt;/code&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;h4 id=&quot;position-to-world&quot;&gt;&lt;code&gt;Position.to_world()&lt;/code&gt;&lt;/h4&gt;
&lt;p&gt;&lt;strong&gt;Description:&lt;/strong&gt; Converts the position into a world (absolute) position.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Parameters:&lt;/strong&gt;
&lt;em&gt;(none)&lt;/em&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;h4 id=&quot;position-to-string&quot;&gt;&lt;code&gt;Position.to_string()&lt;/code&gt;&lt;/h4&gt;
&lt;p&gt;&lt;strong&gt;Description:&lt;/strong&gt; Returns a human-readable string representation of the position.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Parameters:&lt;/strong&gt;
&lt;em&gt;(none)&lt;/em&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;hr /&gt;
&lt;h1 id=&quot;enums&quot;&gt;Enums&lt;/h1&gt;
&lt;h3 id=&quot;travelmethod&quot;&gt;TravelMethod&lt;/h3&gt;
&lt;p&gt;The method of travel for player or mob&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;WALK&lt;/code&gt; (1) - Walking normally (default if on ground)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;SWIM_WATER&lt;/code&gt; (2) - Swimming in water&lt;/li&gt;
&lt;li&gt;&lt;code&gt;FALL&lt;/code&gt; (3) - In the air when not flying (Falling up or down)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;CLIMB&lt;/code&gt; (4) - Climbing a ladder&lt;/li&gt;
&lt;li&gt;&lt;code&gt;SWIM_LAVA&lt;/code&gt; (5) - Swimming in lava&lt;/li&gt;
&lt;li&gt;&lt;code&gt;FLY&lt;/code&gt; (6) - Flying&lt;/li&gt;
&lt;li&gt;&lt;code&gt;RIDING&lt;/code&gt; (7) - Riding anything&lt;/li&gt;
&lt;li&gt;&lt;code&gt;SNEAK&lt;/code&gt; (8) - Sneaking&lt;/li&gt;
&lt;li&gt;&lt;code&gt;SPRINT&lt;/code&gt; (9) - Sprinting&lt;/li&gt;
&lt;li&gt;&lt;code&gt;BOUNCE&lt;/code&gt; (10) - bounce&lt;/li&gt;
&lt;li&gt;&lt;code&gt;FROST_WALK&lt;/code&gt; (11) - Frost walk over water&lt;/li&gt;
&lt;li&gt;&lt;code&gt;TELEPORT&lt;/code&gt; (12) - Teleport&lt;/li&gt;
&lt;li&gt;&lt;code&gt;UNKNOWN&lt;/code&gt; (-1) - Unknown travel method&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;filloperation&quot;&gt;FillOperation&lt;/h3&gt;
&lt;p&gt;Fill options for exixting blocks. Control keeping, replacing, or destroying existing blocks&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;DESTROY&lt;/code&gt; - Replaces all blocks (including air) in the fill region with the specified block, dropping the existing blocks (including those that are unchanged) and block contents as entities as if they had been mined with an unenchanted diamond shovel or pickaxe. (Blocks that can only be mined with shears, such as vines, will not drop; neither will liquids.)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;HOLLOW&lt;/code&gt; - Replaces only blocks on the outer edge of the fill region with the specified block. Inner blocks are changed to air, dropping their contents as entities but not themselves. If the fill region has no inner blocks (because it is smaller than three blocks in at least one dimension), acts like replace.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;KEEP&lt;/code&gt; - Replaces only air blocks in the fill region with the specified block.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;OUTLINE&lt;/code&gt; - Replaces only blocks on the outer edge of the fill region with the specified block. Inner blocks are not affected. If the fill region has no inner blocks (because it is smaller than three blocks in at least one dimension), acts like replace.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;REPLACE&lt;/code&gt; - Replaces all blocks (including air) in the fill region with the specified block, without dropping blocks or block contents as entities.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;compassdirection&quot;&gt;CompassDirection&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;WEST&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;EAST&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;NORTH&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;SOUTH&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;turndirection&quot;&gt;TurnDirection&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;LEFT&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;RIGHT&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;sixdirection&quot;&gt;SixDirection&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;FORWARD&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;BACK&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;LEFT&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;RIGHT&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;UP&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;DOWN&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;leverposition&quot;&gt;LeverPosition&lt;/h3&gt;
&lt;p&gt;Positions for aligning a lever when on or off&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;BLOCK_BOTTOM_EAST_WHEN_OFF&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;BLOCK_BOTTOM_POINTS_SOUTH_WHEN_OFF&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;BLOCK_TOP_POINTS_EAST_WHEN_OFF&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;BLOCK_TOP_POINTS_SOUTH_WHEN_OFF&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;BLOCK_SIDE_FACING_EAST&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;BLOCK_SIDE_FACING_WEST&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;BLOCK_SIDE_FACING_NORTH&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;BLOCK_SIDE_FACING_SOUTH&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;comparatormode&quot;&gt;ComparatorMode&lt;/h3&gt;
&lt;p&gt;Comparator modes&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;COMPARE&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;SUBTRACT&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;testforblocksmask&quot;&gt;TestForBlocksMask&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;ALL&lt;/code&gt; - Every block in the source and destination regions must match exactly.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;MASKED&lt;/code&gt; - Air blocks in the source region will match any block in the destination region.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;clonemode&quot;&gt;CloneMode&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;FORCE&lt;/code&gt; - The cloned region is overwritten by the destination region if the two regions overlap.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;MOVE&lt;/code&gt; - the cloned region is replaced with air after the cloning.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;NORMAL&lt;/code&gt; - The cloned region is not changed; if the destination region overlaps it, then the clone operation does nothing.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;monstermob&quot;&gt;MonsterMob&lt;/h3&gt;
&lt;p&gt;Lists all mobs that are considered monsters.&lt;/p&gt;
&lt;h3 id=&quot;targetselectorkind&quot;&gt;TargetSelectorKind&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;ALL_ENTITIES&lt;/code&gt; - Select all players and mobs.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;ALL_PLAYERS&lt;/code&gt; - Select all players in the world.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;LOCAL_PLAYER&lt;/code&gt; - Select the current player (you).&lt;/li&gt;
&lt;li&gt;&lt;code&gt;MY_AGENT&lt;/code&gt; - Select the agent.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;NEAREST_PLAYER&lt;/code&gt; - Select the player nearest to the world origin.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;RANDOM_PLAYER&lt;/code&gt; - Select a random player in the world.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;gamemode&quot;&gt;GameMode&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;SURVIVAL&lt;/code&gt; - This is the default Minecraft playing mode. Players have to gather the materials they want to craft or place. The player’s health, hunger, experience and oxygen are enabled. Tools and equipment durability is enabled. In this mode, the player can die and will return to the spawn point if they do.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;CREATIVE&lt;/code&gt; - Players can get an unlimited amount of blocks or items in the game. Players can fly around in the world and destroy blocks instantly. This mode is meant for players that want to spend time building things.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;ADVENTURE&lt;/code&gt; - Kind of the same as survival mode, but it has more restrictions on placing certain blocks and destroying blocks in the game world. This mode is meant for playing in worlds where the players must solve puzzles or complete challenges.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;agentassist&quot;&gt;AgentAssist&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;PLACE_ON_MOVE&lt;/code&gt; - the agent will place a block from its active inventory slot every time it moves.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;PLACE_FROM_ANY_SLOT&lt;/code&gt; - if there are no blocks or items in the agent’s active inventory slot, the agent will try to use other inventory slots.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;DESTROY_OBSTACLES&lt;/code&gt; - if the agent can’t move because of an obstacle, it will destroy the obstacle before moving.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;DETROY_OBSTACLES&lt;/code&gt; - seems to be a typo left in the code, functions the same was as &lt;code&gt;DESTROY_OBSTACLES&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;agentdetection&quot;&gt;AgentDetection&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;BLOCK&lt;/code&gt; - detect any block that can be destroyed.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;REDSTONE&lt;/code&gt; - detect redstone only.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;weather&quot;&gt;Weather&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;CLEAR&lt;/code&gt; - sunny, no rain or storms&lt;/li&gt;
&lt;li&gt;&lt;code&gt;RAIN&lt;/code&gt; - rainy, no sun&lt;/li&gt;
&lt;li&gt;&lt;code&gt;THUNDER&lt;/code&gt; - thunderstorm, lot’s of rain&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;daytime&quot;&gt;DayTime&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;DAY&lt;/code&gt; (0) - Equals 1,000 ticks (7:00 AM)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;MIDDAY&lt;/code&gt; (6000) - Equals 6,000 ticks (12:00 PM)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;DUSK&lt;/code&gt; (12000) - Equals 12,000 ticks (6:00 PM)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;NIGHT&lt;/code&gt; (14000) - Equals 13,000 ticks (7:00 PM)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;MIDNIGHT&lt;/code&gt; (18000) - Equals to 18,000 ticks (12:00 AM)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;DAWN&lt;/code&gt; (23000) - Equals 0 ticks (6:00 AM)&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;gamedifficulty&quot;&gt;GameDifficulty&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;PEACEFUL&lt;/code&gt; - monsters cannot spawn and you get more hearts quickly.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;EASY&lt;/code&gt; - easy gameplay level.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;NORMAL&lt;/code&gt; - normal gameplay level.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;HARD&lt;/code&gt; - the really difficult gameplay level.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;timequery&quot;&gt;TimeQuery&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;DAY&lt;/code&gt; - the number of game days since the creation of the world&lt;/li&gt;
&lt;li&gt;&lt;code&gt;DAY_TIME&lt;/code&gt; - the current time of day in the game.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;GAME_TIME&lt;/code&gt; - the number of game ticks since the creation of the world.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;REAL_LIFE&lt;/code&gt; - the real-life time of day, expressed in Minecraft game ticks.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;gamerule&quot;&gt;GameRule&lt;/h3&gt;
&lt;p&gt;&lt;em&gt;For some reason some of these are differ between the docs and the code editor autocomplete suggestions. Some of these seem like different names for the same thing, but I haven&#39;t tested to see if it&#39;s so.&lt;/em&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;em&gt;(D) - present only in the docs.&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;&lt;em&gt;(E) - present only in the code editor.&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;&lt;em&gt;(DE) - present in both the docs and the editor.&lt;/em&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Rules:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;PV_P&lt;/code&gt; &lt;em&gt;(DE)&lt;/em&gt; - players can attack each other&lt;/li&gt;
&lt;li&gt;&lt;code&gt;DROWNING_DAMAGE&lt;/code&gt; &lt;em&gt;(DE)&lt;/em&gt; - staying for too long under water will damage the player&lt;/li&gt;
&lt;li&gt;&lt;code&gt;FALL_DAMAGE&lt;/code&gt; &lt;em&gt;(DE)&lt;/em&gt; - falling from really high will damage the player&lt;/li&gt;
&lt;li&gt;&lt;code&gt;FIRE_DAMAGE&lt;/code&gt; &lt;em&gt;(DE)&lt;/em&gt; - fire will damage the player&lt;/li&gt;
&lt;li&gt;&lt;code&gt;DAYLIGHT_CYCLE&lt;/code&gt; &lt;em&gt;(DE)&lt;/em&gt; - time will advance in the game&lt;/li&gt;
&lt;li&gt;&lt;code&gt;MOB_LOOT&lt;/code&gt; &lt;em&gt;(DE)&lt;/em&gt; - mobs will drop loot upon dying&lt;/li&gt;
&lt;li&gt;&lt;code&gt;MOB_SPAWNING&lt;/code&gt; &lt;em&gt;(DE)&lt;/em&gt; - mobs are able to spawn&lt;/li&gt;
&lt;li&gt;&lt;code&gt;MOB_GRIEFING&lt;/code&gt; &lt;em&gt;(DE)&lt;/em&gt; - mobs can affect the game world (for example, endermen picking up blocks, or creepers exploding the environment)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;WEATHER_CYCLE&lt;/code&gt; &lt;em&gt;(DE)&lt;/em&gt; - weather will change naturally&lt;/li&gt;
&lt;li&gt;&lt;code&gt;BLOCK_DROPS&lt;/code&gt; &lt;em&gt;(D)&lt;/em&gt; - blocks that are successfully mined will drop as an item and be collectible by players&lt;/li&gt;
&lt;li&gt;&lt;code&gt;KEEP_INVENTORY&lt;/code&gt; &lt;em&gt;(DE)&lt;/em&gt; - players will not lose their inventory upon dying&lt;/li&gt;
&lt;li&gt;&lt;code&gt;COMMAND_BLOCK_OUTPUT&lt;/code&gt; &lt;em&gt;(E)&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;DO_FIRE_TICK&lt;/code&gt; &lt;em&gt;(E)&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;NATURAL_REGENERATION&lt;/code&gt; &lt;em&gt;(E)&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;TILE_DROPS&lt;/code&gt; &lt;em&gt;(E)&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;ENTITY_DROPS&lt;/code&gt; &lt;em&gt;(E)&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;SHOW_COORDINATES&lt;/code&gt; &lt;em&gt;(E)&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;TNT_EXPLODES&lt;/code&gt; &lt;em&gt;(E)&lt;/em&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;axis&quot;&gt;Axis&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;X&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Y&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Z&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;hr /&gt;
&lt;h1 id=&quot;constants&quot;&gt;Constants&lt;/h1&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #A9B2C3; background-color: #21252B;&quot; &gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;FORWARD = SixDirection.Forward&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;BACK = SixDirection.Back&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;LEFT = SixDirection.Left&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;RIGHT = SixDirection.Right&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;UP = SixDirection.Up&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;DOWN = SixDirection.Down&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;NEAREST_PLAYER = TargetSelectorKind.NearestPlayer&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;LOCAL_PLAYER = TargetSelectorKind.LocalPlayer&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;RANDOM_PLAYER = TargetSelectorKind.RandomPlayer&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;ALL_PLAYERS = TargetSelectorKind.AllPlayers&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;ALL_ENTITIES = TargetSelectorKind.AllEntities&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;MY_AGENT = TargetSelectorKind.MyAgent&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;GRASS = Block.Grass&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;AIR = Block.Air&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;STONE = Block.Stone&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;GRANITE = Block.Granite&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;POLISHED_GRANITE = Block.PolishedGranite&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;DIORITE = Block.Diorite&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;POLISHED_DIORITE = Block.PolishedDiorite&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;ANDESITE = Block.Andesite&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;POLISHED_ANDESITE = Block.PolishedAndesite&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;DIRT = Block.Dirt&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;COARSE_DIRT = Block.CoarseDirt&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;COBBLESTONE = Block.Cobblestone&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;PLANKS_OAK = Block.PlanksOak&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;PLANKS_SPRUCE = Block.PlanksSpruce&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;PLANKS_BIRCH = Block.PlanksBirch&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;PLANKS_JUNGLE = Block.PlanksJungle&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;PLANKS_ACACIA = Block.PlanksAcacia&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;PLANKS_DARK_OAK = Block.PlanksDarkOak&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;OAK_SAPLING = Block.OakSapling&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;SPRUCE_SAPLING = Block.SpruceSapling&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;BIRCH_SAPLING = Block.BirchSapling&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;JUNGLE_SAPLING = Block.JungleSapling&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;ACACIA_SAPLING = Block.AcaciaSapling&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;DARK_OAK_SAPLING = Block.DarkOakSapling&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;BEDROCK = Block.Bedrock&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;WATER = Block.Water&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;LAVA = Block.Lava&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;SAND = Block.Sand&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;RED_SAND = Block.RedSand&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;GRAVEL = Block.Gravel&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;GOLD_ORE = Block.GoldOre&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;IRON_ORE = Block.IronOre&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;COAL_ORE = Block.CoalOre&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;LOG_OAK = Block.LogOak&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;LOG_SPRUCE = Block.LogSpruce&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;LOG_BIRCH = Block.LogBirch&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;LOG_JUNGLE = Block.LogJungle&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;LEAVES_OAK = Block.LeavesOak&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;LEAVES_SPRUCE = Block.LeavesSpruce&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;LEAVES_BIRCH = Block.LeavesBirch&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;LEAVES_JUNGLE = Block.LeavesJungle&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;SPONGE = Block.Sponge&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;WET_SPONGE = Block.WetSponge&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;GLASS = Block.Glass&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;LAPIS_ORE = Block.LapisOre&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;LAPIS_LAZULI_BLOCK = Block.LapisLazuliBlock&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;DISPENSER = Block.Dispenser&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;SANDSTONE = Block.Sandstone&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;CHISELED_SANDSTONE = Block.ChiseledSandstone&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;SMOOTH_SANDSTONE = Block.SmoothSandstone&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;NOTE_BLOCK = Block.NoteBlock&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;BED = Block.Bed&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;POWERED_RAIL = Block.PoweredRail&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;DETECTOR_RAIL = Block.DetectorRail&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;STICKY_PISTON = Block.StickyPiston&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;COBWEB = Block.Cobweb&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;TALLGRASS = Block.Tallgrass&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;FERN = Block.Fern&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;DEAD_BUSH = Block.DeadBush&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;PISTON = Block.Piston&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;WOOL = Block.Wool&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;ORANGE_WOOL = Block.OrangeWool&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;MAGENTA_WOOL = Block.MagentaWool&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;LIGHT_BLUE_WOOL = Block.LightBlueWool&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;YELLOW_WOOL = Block.YellowWool&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;LIME_WOOL = Block.LimeWool&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;PINK_WOOL = Block.PinkWool&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;GRAY_WOOL = Block.GrayWool&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;LIGHT_GRAY_WOOL = Block.LightGrayWool&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;CYAN_WOOL = Block.CyanWool&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;PURPLE_WOOL = Block.PurpleWool&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;BLUE_WOOL = Block.BlueWool&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;BROWN_WOOL = Block.BrownWool&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;GREEN_WOOL = Block.GreenWool&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;RED_WOOL = Block.RedWool&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;BLACK_WOOL = Block.BlackWool&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;YELLOW_FLOWER = Block.YellowFlower&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;POPPY = Block.Poppy&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;BLUE_ORCHID = Block.BlueOrchid&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;ALLIUM = Block.Allium&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;AZURE_BLUET = Block.AzureBluet&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;RED_TULIP = Block.RedTulip&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;ORANGE_TULIP = Block.OrangeTulip&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;WHITE_TULIP = Block.WhiteTulip&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;PINK_TULIP = Block.PinkTulip&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;OXEYE_DAISY = Block.OxeyeDaisy&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;BAMBOO = Block.Bamboo&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;CORNFLOWER = Block.Cornflower&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;LILY_OF_THE_VALLEY = Block.LilyOfTheValley&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;BROWN_MUSHROOM = Block.BrownMushroom&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;RED_MUSHROOM = Block.RedMushroom&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;GOLD_BLOCK = Block.GoldBlock&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;IRON_BLOCK = Block.IronBlock&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;DOUBLE_STONE_SLAB = Block.DoubleStoneSlab&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;SMOOTH_STONE_SLAB = Block.SmoothStoneSlab&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;MOSSY_STONE_BRICK_SLAB = Block.MossyStoneBrickSlab&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;SANDSTONE_SLAB = Block.SandstoneSlab&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;COBBLESTONE_SLAB = Block.CobblestoneSlab&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;BRICKS_SLAB = Block.BricksSlab&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;STONE_BRICKS_SLAB = Block.StoneBricksSlab&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;QUARTZ_SLAB = Block.QuartzSlab&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;NETHER_BRICK_SLAB = Block.NetherBrickSlab&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;BRICKS = Block.Bricks&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;TNT = Block.TNT&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;BOOKSHELF = Block.Bookshelf&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;MOSS_STONE = Block.MossStone&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;OBSIDIAN = Block.Obsidian&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;TORCH = Block.Torch&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;FIRE = Block.Fire&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;MONSTER_SPAWNER = Block.MonsterSpawner&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;OAK_WOOD_STAIRS = Block.OakWoodStairs&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;CHEST = Block.Chest&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;REDSTONE_WIRE = Block.RedstoneWire&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;DIAMOND_ORE = Block.DiamondOre&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;DIAMOND_BLOCK = Block.DiamondBlock&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;CRAFTING_TABLE = Block.CraftingTable&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;CROPS = Block.Crops&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;FARMLAND = Block.Farmland&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;FURNACE = Block.Furnace&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;LADDER = Block.Ladder&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;RAIL = Block.Rail&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;COBBLESTONE_STAIRS = Block.CobblestoneStairs&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;LEVER = Block.Lever&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;STONE_PRESSURE_PLATE = Block.StonePressurePlate&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;WOODEN_PRESSURE_PLATE = Block.WoodenPressurePlate&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;REDSTONE_ORE = Block.RedstoneOre&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;REDSTONE_TORCH = Block.RedstoneTorch&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;STONE_BUTTON = Block.StoneButton&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;TOP_SNOW = Block.TopSnow&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;ICE = Block.Ice&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;SNOW = Block.Snow&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;CACTUS = Block.Cactus&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;CLAY = Block.Clay&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;SUGAR_CANE = Block.SugarCane&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;JUKEBOX = Block.Jukebox&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;OAK_FENCE = Block.OakFence&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;SPRUCE_FENCE = Block.SpruceFence&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;BIRCH_FENCE = Block.BirchFence&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;JUNGLE_FENCE = Block.JungleFence&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;ACACIA_FENCE = Block.AcaciaFence&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;DARK_OAK_FENCE = Block.DarkOakFence&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;PUMPKIN = Block.Pumpkin&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;NETHERRACK = Block.Netherrack&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;SOUL_SAND = Block.SoulSand&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;GLOWSTONE = Block.Glowstone&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;JACK_O_LANTERN = Block.JackOLantern&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;CAKE = Block.Cake&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;UNPOWERED_REPEATER = Block.UnpoweredRepeater&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;WOODEN_TRAPDOOR = Block.WoodenTrapdoor&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;STONE_MONSTER_EGG = Block.StoneMonsterEgg&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;COBBLESTONE_MONSTER_EGG = Block.CobblestoneMonsterEgg&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;STONE_BRICK_MONSTER_EGG = Block.StoneBrickMonsterEgg&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;MOSSY_STONE_BRICK_MONSTER_EGG = Block.MossyStoneBrickMonsterEgg&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;CRACKED_STONE_BRICK_MONSTER_EGG = Block.CrackedStoneBrickMonsterEgg&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;CHISELED_STONE_BRICK_MONSTER_EGG = Block.ChiseledStoneBrickMonsterEgg&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;STONE_BRICKS = Block.StoneBricks&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;MOSSY_STONE_BRICKS = Block.MossyStoneBricks&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;CRACKED_STONE_BRICKS = Block.CrackedStoneBricks&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;CHISELED_STONE_BRICKS = Block.ChiseledStoneBricks&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;MUSHROOM0 = Block.Mushroom0&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;MUSHROOM14 = Block.Mushroom14&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;MUSHROOM15 = Block.Mushroom15&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;RED_MUSHROOM_BLOCK = Block.RedMushroomBlock&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;IRON_BARS = Block.IronBars&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;GLASS_PANE = Block.GlassPane&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;MELON_BLOCK = Block.MelonBlock&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;PUMPKIN_STEM = Block.PumpkinStem&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;MELON_STEM = Block.MelonStem&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;VINES = Block.Vines&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;OAK_FENCE_GATE = Block.OakFenceGate&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;BRICK_STAIRS = Block.BrickStairs&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;STONE_BRICK_STAIRS = Block.StoneBrickStairs&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;MYCELIUM = Block.Mycelium&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;LILY_PAD = Block.LilyPad&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;NETHER_BRICK = Block.NetherBrick&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;NETHER_BRICK_FENCE = Block.NetherBrickFence&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;NETHER_BRICK_STAIRS = Block.NetherBrickStairs&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;NETHER_WART = Block.NetherWart&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;ENCHANTMENT_TABLE = Block.EnchantmentTable&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;BREWING_STAND = Block.BrewingStand&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;CAULDRON = Block.Cauldron&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;END_PORTAL = Block.EndPortal&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;ENDSTONE = Block.Endstone&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;DRAGON_EGG = Block.DragonEgg&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;REDSTONE_LAMP = Block.RedstoneLamp&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;DROPPER = Block.Dropper&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;ACTIVATOR_RAIL = Block.ActivatorRail&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;COCOA = Block.Cocoa&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;SANDSTONE_STAIRS = Block.SandstoneStairs&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;EMERALD_ORE = Block.EmeraldOre&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;ENDER_CHEST = Block.EnderChest&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;TRIPWIRE_HOOK = Block.TripwireHook&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;TRIPWIRE = Block.Tripwire&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;EMERALD_BLOCK = Block.EmeraldBlock&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;SPRUCE_WOOD_STAIRS = Block.SpruceWoodStairs&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;BIRCH_WOOD_STAIRS = Block.BirchWoodStairs&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;JUNGLE_WOOD_STAIRS = Block.JungleWoodStairs&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;BEACON = Block.Beacon&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;COBBLESTONE_WALL = Block.CobblestoneWall&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;MOSSY_COBBLESTONE_WALL = Block.MossyCobblestoneWall&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;FLOWER_POT = Block.FlowerPot&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;CARROTS = Block.Carrots&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;POTATOES = Block.Potatoes&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;WOODEN_BUTTON = Block.WoodenButton&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;SKELETON_SKULL = Block.SkeletonSkull&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;ANVIL = Block.Anvil&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;SLIGHTLY_DAMAGED_ANVIL = Block.SlightlyDamagedAnvil&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;VERY_DAMAGED_ANVIL = Block.VeryDamagedAnvil&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;TRAPPED_CHEST = Block.TrappedChest&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;WEIGHTED_PRESSURE_PLATE_LIGHT = Block.WeightedPressurePlateLight&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;WEIGHTED_PRESSURE_PLATE_HEAVY = Block.WeightedPressurePlateHeavy&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;UNPOWERED_COMPARATOR = Block.UnpoweredComparator&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;DAYLIGHT_SENSOR = Block.DaylightSensor&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;REDSTONE_BLOCK = Block.RedstoneBlock&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;QUARTZ_ORE = Block.QuartzOre&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;HOPPER = Block.Hopper&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;BLOCK_OF_QUARTZ = Block.BlockOfQuartz&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;CHISELED_QUARTZ_BLOCK = Block.ChiseledQuartzBlock&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;PILLAR_QUARTZ_BLOCK = Block.PillarQuartzBlock&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;QUARTZ_STAIRS = Block.QuartzStairs&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;DOUBLE_WOODEN_SLAB = Block.DoubleWoodenSlab&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;OAK_WOOD_SLAB = Block.OakWoodSlab&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;SPRUCE_WOOD_SLAB = Block.SpruceWoodSlab&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;BIRCH_WOOD_SLAB = Block.BirchWoodSlab&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;JUNGLE_WOOD_SLAB = Block.JungleWoodSlab&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;ACACIA_WOOD_SLAB = Block.AcaciaWoodSlab&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;DARK_OAK_WOOD_SLAB = Block.DarkOakWoodSlab&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;WHITE_TERRACOTTA = Block.WhiteTerracotta&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;ORANGE_TERRACOTTA = Block.OrangeTerracotta&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;MAGENTA_TERRACOTTA = Block.MagentaTerracotta&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;LIGHT_BLUE_TERRACOTTA = Block.LightBlueTerracotta&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;YELLOW_TERRACOTTA = Block.YellowTerracotta&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;LIME_TERRACOTTA = Block.LimeTerracotta&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;PINK_TERRACOTTA = Block.PinkTerracotta&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;GRAY_TERRACOTTA = Block.GrayTerracotta&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;LIGHT_GRAY_TERRACOTTA = Block.LightGrayTerracotta&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;CYAN_TERRACOTTA = Block.CyanTerracotta&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;PURPLE_TERRACOTTA = Block.PurpleTerracotta&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;BLUE_TERRACOTTA = Block.BlueTerracotta&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;BROWN_TERRACOTTA = Block.BrownTerracotta&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;GREEN_TERRACOTTA = Block.GreenTerracotta&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;RED_TERRACOTTA = Block.RedTerracotta&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;BLACK_TERRACOTTA = Block.BlackTerracotta&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;WHITE_STAINED_GLASS_PANE = Block.WhiteStainedGlassPane&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;ORANGE_STAINED_GLASS_PANE = Block.OrangeStainedGlassPane&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;MAGENTA_STAINED_GLASS_PANE = Block.MagentaStainedGlassPane&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;LIGHT_BLUE_STAINED_GLASS_PANE = Block.LightBlueStainedGlassPane&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;YELLOW_STAINED_GLASS_PANE = Block.YellowStainedGlassPane&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;LIME_STAINED_GLASS_PANE = Block.LimeStainedGlassPane&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;PINK_STAINED_GLASS_PANE = Block.PinkStainedGlassPane&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;GRAY_STAINED_GLASS_PANE = Block.GrayStainedGlassPane&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;LIGHT_GRAY_STAINED_GLASS_PANE = Block.LightGrayStainedGlassPane&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;CYAN_STAINED_GLASS_PANE = Block.CyanStainedGlassPane&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;PURPLE_STAINED_GLASS_PANE = Block.PurpleStainedGlassPane&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;BLUE_STAINED_GLASS_PANE = Block.BlueStainedGlassPane&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;BROWN_STAINED_GLASS_PANE = Block.BrownStainedGlassPane&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;GREEN_STAINED_GLASS_PANE = Block.GreenStainedGlassPane&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;RED_STAINED_GLASS_PANE = Block.RedStainedGlassPane&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;BLACK_STAINED_GLASS_PANE = Block.BlackStainedGlassPane&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;ACACIA_LEAVES = Block.AcaciaLeaves&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;DARK_OAK_LEAVES = Block.DarkOakLeaves&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;LOG_ACACIA = Block.LogAcacia&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;LOG_DARK_OAK = Block.LogDarkOak&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;ACACIA_WOOD_STAIRS = Block.AcaciaWoodStairs&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;DARK_OAK_WOOD_STAIRS = Block.DarkOakWoodStairs&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;SLIME_BLOCK = Block.SlimeBlock&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;IRON_TRAPDOOR = Block.IronTrapdoor&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;PRISMARINE = Block.Prismarine&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;DARK_PRISMARINE = Block.DarkPrismarine&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;PRISMARINE_BRICKS = Block.PrismarineBricks&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;SEA_LANTERN = Block.SeaLantern&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;HAY_BLOCK = Block.HayBlock&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;WHITE_CARPET = Block.WhiteCarpet&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;ORANGE_CARPET = Block.OrangeCarpet&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;MAGENTA_CARPET = Block.MagentaCarpet&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;LIGHT_BLUE_CARPET = Block.LightBlueCarpet&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;YELLOW_CARPET = Block.YellowCarpet&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;LIME_CARPET = Block.LimeCarpet&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;PINK_CARPET = Block.PinkCarpet&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;GRAY_CARPET = Block.GrayCarpet&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;LIGHT_GRAY_CARPET = Block.LightGrayCarpet&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;CYAN_CARPET = Block.CyanCarpet&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;PURPLE_CARPET = Block.PurpleCarpet&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;BLUE_CARPET = Block.BlueCarpet&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;BROWN_CARPET = Block.BrownCarpet&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;GREEN_CARPET = Block.GreenCarpet&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;RED_CARPET = Block.RedCarpet&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;BLACK_CARPET = Block.BlackCarpet&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;HARDENED_CLAY = Block.HardenedClay&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;COAL_BLOCK = Block.CoalBlock&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;PACKED_ICE = Block.PackedIce&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;SUNFLOWER = Block.Sunflower&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;LILAC = Block.Lilac&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;DOUBLE_TALLGRASS = Block.DoubleTallgrass&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;LARGE_FERN = Block.LargeFern&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;ROSE_BUSH = Block.RoseBush&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;PEONY = Block.Peony&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;RED_SANDSTONE = Block.RedSandstone&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;CHISELED_RED_SANDSTONE = Block.ChiseledRedSandstone&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;SMOOTH_RED_SANDSTONE = Block.SmoothRedSandstone&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;RED_SANDSTONE_STAIRS = Block.RedSandstoneStairs&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;DOUBLE_RED_SANDSTONE_SLAB = Block.DoubleRedSandstoneSlab&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;RED_SANDSTONE_SLAB = Block.RedSandstoneSlab&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;PURPUR_SLAB = Block.PurpurSlab&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;PRISMARINE_SLAB = Block.PrismarineSlab&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;DARK_PRISMARINE_SLAB = Block.DarkPrismarineSlab&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;PRISMARINE_BRICK_SLAB = Block.PrismarineBrickSlab&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;SPRUCE_FENCE_GATE = Block.SpruceFenceGate&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;BIRCH_FENCE_GATE = Block.BirchFenceGate&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;JUNGLE_FENCE_GATE = Block.JungleFenceGate&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;DARK_OAK_FENCE_GATE = Block.DarkOakFenceGate&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;ACACIA_FENCE_GATE = Block.AcaciaFenceGate&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;GRASS_PATH = Block.GrassPath&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;FRAME = Block.Frame&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;CHORUS_FLOWER = Block.ChorusFlower&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;PURPUR_BLOCK = Block.PurpurBlock&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;PURPUR_PILLAR = Block.PurpurPillar&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;PURPUR_STAIRS = Block.PurpurStairs&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;SHULKER_BOX = Block.ShulkerBox&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;END_STONE_BRICKS = Block.EndStoneBricks&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;END_ROD = Block.EndRod&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;MAGMA_BLOCK = Block.MagmaBlock&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;NETHER_WART_BLOCK = Block.NetherWartBlock&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;RED_NETHER_BRICK = Block.RedNetherBrick&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;BONE_BLOCK = Block.BoneBlock&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;WHITE_SHULKER_BOX = Block.WhiteShulkerBox&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;ORANGE_SHULKER_BOX = Block.OrangeShulkerBox&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;MAGENTA_SHULKER_BOX = Block.MagentaShulkerBox&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;LIGHT_BLUE_SHULKER_BOX = Block.LightBlueShulkerBox&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;YELLOW_SHULKER_BOX = Block.YellowShulkerBox&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;LIME_SHULKER_BOX = Block.LimeShulkerBox&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;PINK_SHULKER_BOX = Block.PinkShulkerBox&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;GRAY_SHULKER_BOX = Block.GrayShulkerBox&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;SILVER_SHULKER_BOX = Block.SilverShulkerBox&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;CYAN_SHULKER_BOX = Block.CyanShulkerBox&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;PURPLE_SHULKER_BOX = Block.PurpleShulkerBox&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;BLUE_SHULKER_BOX = Block.BlueShulkerBox&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;BROWN_SHULKER_BOX = Block.BrownShulkerBox&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;GREEN_SHULKER_BOX = Block.GreenShulkerBox&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;RED_SHULKER_BOX = Block.RedShulkerBox&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;BLACK_SHULKER_BOX = Block.BlackShulkerBox&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;PURPLE_GLAZED_TERRACOTTA = Block.PurpleGlazedTerracotta&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;WHITE_GLAZED_TERRACOTTA = Block.WhiteGlazedTerracotta&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;ORANGE_GLAZED_TERRACOTTA = Block.OrangeGlazedTerracotta&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;MAGENTA_GLAZED_TERRACOTTA = Block.MagentaGlazedTerracotta&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;LIGHT_BLUE_GLAZED_TERRACOTTA = Block.LightBlueGlazedTerracotta&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;YELLOW_GLAZED_TERRACOTTA = Block.YellowGlazedTerracotta&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;LIME_GLAZED_TERRACOTTA = Block.LimeGlazedTerracotta&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;PINK_GLAZED_TERRACOTTA = Block.PinkGlazedTerracotta&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;GRAY_GLAZED_TERRACOTTA = Block.GrayGlazedTerracotta&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;LIGHT_GRAY_GLAZED_TERRACOTTA = Block.LightGrayGlazedTerracotta&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;CYAN_GLAZED_TERRACOTTA = Block.CyanGlazedTerracotta&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;BLUE_GLAZED_TERRACOTTA = Block.BlueGlazedTerracotta&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;BROWN_GLAZED_TERRACOTTA = Block.BrownGlazedTerracotta&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;GREEN_GLAZED_TERRACOTTA = Block.GreenGlazedTerracotta&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;RED_GLAZED_TERRACOTTA = Block.RedGlazedTerracotta&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;BLACK_GLAZED_TERRACOTTA = Block.BlackGlazedTerracotta&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;WHITE_CONCRETE = Block.WhiteConcrete&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;ORANGE_CONCRETE = Block.OrangeConcrete&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;MAGENTA_CONCRETE = Block.MagentaConcrete&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;LIGHT_BLUE_CONCRETE = Block.LightBlueConcrete&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;YELLOW_CONCRETE = Block.YellowConcrete&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;LIME_CONCRETE = Block.LimeConcrete&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;PINK_CONCRETE = Block.PinkConcrete&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;GRAY_CONCRETE = Block.GrayConcrete&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;LIGHT_GRAY_CONCRETE = Block.LightGrayConcrete&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;CYAN_CONCRETE = Block.CyanConcrete&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;PURPLE_CONCRETE = Block.PurpleConcrete&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;BLUE_CONCRETE = Block.BlueConcrete&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;BROWN_CONCRETE = Block.BrownConcrete&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;GREEN_CONCRETE = Block.GreenConcrete&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;RED_CONCRETE = Block.RedConcrete&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;BLACK_CONCRETE = Block.BlackConcrete&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;WHITE_CONCRETE_POWDER = Block.WhiteConcretePowder&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;ORANGE_CONCRETE_POWDER = Block.OrangeConcretePowder&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;MAGENTA_CONCRETE_POWDER = Block.MagentaConcretePowder&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;LIGHT_BLUE_CONCRETE_POWDER = Block.LightBlueConcretePowder&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;YELLOW_CONCRETE_POWDER = Block.YellowConcretePowder&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;LIME_CONCRETE_POWDER = Block.LimeConcretePowder&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;PINK_CONCRETE_POWDER = Block.PinkConcretePowder&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;GRAY_CONCRETE_POWDER = Block.GrayConcretePowder&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;LIGHT_GRAY_CONCRETE_POWDER = Block.LightGrayConcretePowder&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;CYAN_CONCRETE_POWDER = Block.CyanConcretePowder&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;PURPLE_CONCRETE_POWDER = Block.PurpleConcretePowder&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;BLUE_CONCRETE_POWDER = Block.BlueConcretePowder&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;BROWN_CONCRETE_POWDER = Block.BrownConcretePowder&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;GREEN_CONCRETE_POWDER = Block.GreenConcretePowder&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;RED_CONCRETE_POWDER = Block.RedConcretePowder&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;BLACK_CONCRETE_POWDER = Block.BlackConcretePowder&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;CHORUS_PLANT = Block.ChorusPlant&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;WHITE_STAINED_GLASS = Block.WhiteStainedGlass&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;ORANGE_STAINED_GLASS = Block.OrangeStainedGlass&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;MAGENTA_STAINED_GLASS = Block.MagentaStainedGlass&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;LIGHT_BLUE_STAINED_GLASS = Block.LightBlueStainedGlass&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;YELLOW_STAINED_GLASS = Block.YellowStainedGlass&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;LIME_STAINED_GLASS = Block.LimeStainedGlass&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;PINK_STAINED_GLASS = Block.PinkStainedGlass&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;GRAY_STAINED_GLASS = Block.GrayStainedGlass&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;LIGHT_GRAY_STAINED_GLASS = Block.LightGrayStainedGlass&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;CYAN_STAINED_GLASS = Block.CyanStainedGlass&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;PURPLE_STAINED_GLASS = Block.PurpleStainedGlass&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;BLUE_STAINED_GLASS = Block.BlueStainedGlass&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;BROWN_STAINED_GLASS = Block.BrownStainedGlass&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;GREEN_STAINED_GLASS = Block.GreenStainedGlass&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;RED_STAINED_GLASS = Block.RedStainedGlass&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;BLACK_STAINED_GLASS = Block.BlackStainedGlass&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;PODZOL = Block.Podzol&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;BEETROOT = Block.Beetroot&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;STONECUTTER = Block.Stonecutter&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;OBSERVER = Block.Observer&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;STRUCTURE_BLOCK = Block.StructureBlock&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;PRISMARINE_STAIRS = Block.PrismarineStairs&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;DARK_PRISMARINE_STAIRS = Block.DarkPrismarineStairs&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;PRISMARINE_BRICK_STAIRS = Block.PrismarineBrickStairs&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;STRIPPED_SPRUCE_WOOD = Block.StrippedSpruceWood&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;STRIPPED_BIRCH_WOOD = Block.StrippedBirchWood&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;STRIPPED_JUNGLE_WOOD = Block.StrippedJungleWood&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;STRIPPED_ACACIA_WOOD = Block.StrippedAcaciaWood&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;STRIPPED_DARK_OAK_WOOD = Block.StrippedDarkOakWood&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;STRIPPED_OAK_WOOD = Block.StrippedOakWood&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;SCAFFOLDING = Block.Scaffolding&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;BLUE_ICE = Block.BlueIce&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;SEAGRASS = Block.Seagrass&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;TUBE_CORAL = Block.TubeCoral&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;BRAIN_CORAL = Block.BrainCoral&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;BUBBLE_CORAL = Block.BubbleCoral&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;FIRE_CORAL = Block.FireCoral&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;HORN_CORAL = Block.HornCoral&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;TUBE_CORAL_BLOCK = Block.TubeCoralBlock&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;BRAIN_CORAL_BLOCK = Block.BrainCoralBlock&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;BUBBLE_CORAL_BLOCK = Block.BubbleCoralBlock&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;FIRE_CORAL_BLOCK = Block.FireCoralBlock&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;HORN_CORAL_BLOCK = Block.HornCoralBlock&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;DEAD_TUBE_CORAL_BLOCK = Block.DeadTubeCoralBlock&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;DEAD_BRAIN_CORAL_BLOCK = Block.DeadBrainCoralBlock&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;DEAD_BUBBLE_CORAL_BLOCK = Block.DeadBubbleCoralBlock&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;DEAD_FIRE_CORAL_BLOCK = Block.DeadFireCoralBlock&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;DEAD_HORN_CORAL_BLOCK = Block.DeadHornCoralBlock&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;TUBE_CORAL_FAN = Block.TubeCoralFan&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;BRAIN_CORAL_FAN = Block.BrainCoralFan&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;BUBBLE_CORAL_FAN = Block.BubbleCoralFan&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;FIRE_CORAL_FAN = Block.FireCoralFan&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;HORN_CORAL_FAN = Block.HornCoralFan&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;DEAD_TUBE_CORAL_FAN = Block.DeadTubeCoralFan&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;DEAD_BRAIN_CORAL_FAN = Block.DeadBrainCoralFan&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;DEAD_BUBBLE_CORAL_FAN = Block.DeadBubbleCoralFan&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;DEAD_FIRE_CORAL_FAN = Block.DeadFireCoralFan&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;DEAD_HORN_CORAL_FAN = Block.DeadHornCoralFan&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;KELP = Block.Kelp&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;DRIED_KELP_BLOCK = Block.DriedKelpBlock&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;ACACIA_BUTTON = Block.AcaciaButton&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;BIRCH_BUTTON = Block.BirchButton&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;DARK_OAK_BUTTON = Block.DarkOakButton&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;JUNGLE_BUTTON = Block.JungleButton&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;SPRUCE_BUTTON = Block.SpruceButton&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;ACACIA_TRAPDOOR = Block.AcaciaTrapdoor&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;BIRCH_TRAPDOOR = Block.BirchTrapdoor&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;DARK_OAK_TRAPDOOR = Block.DarkOakTrapdoor&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;JUNGLE_TRAPDOOR = Block.JungleTrapdoor&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;SPRUCE_TRAPDOOR = Block.SpruceTrapdoor&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;ACACIA_PRESSURE_PLATE = Block.AcaciaPressurePlate&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;BIRCH_PRESSURE_PLATE = Block.BirchPressurePlate&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;DARK_OAK_PRESSURE_PLATE = Block.DarkOakPressurePlate&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;JUNGLE_PRESSURE_PLATE = Block.JunglePressurePlate&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;SPRUCE_PRESSURE_PLATE = Block.SprucePressurePlate&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;CARVED_PUMPKIN = Block.CarvedPumpkin&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;SEA_PICKLE = Block.SeaPickle&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;CARTOGRAPHY_TABLE = Block.CartographyTable&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;FLETCHING_TABLE = Block.FletchingTable&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;BLAST_FURNACE = Block.BlastFurnace&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;STONECUTTER_BLOCK = Block.StonecutterBlock&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;SMOKER = Block.Smoker&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;SMITHING_TABLE = Block.SmithingTable&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;BARREL = Block.Barrel&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;LOOM = Block.Loom&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;BELL = Block.Bell&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;CAMPFIRE = Block.Campfire&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;COMPOSTER = Block.Composter&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;BEE_NEST = Block.BeeNest&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;BEEHIVE = Block.Beehive&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;HONEY_BLOCK = Block.HoneyBlock&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;HONEYCOMB_BLOCK = Block.HoneycombBlock&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;CRIMSON_PLANKS = Block.CrimsonPlanks&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;WARPED_PLANKS = Block.WarpedPlanks&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;BLACKSTONE_WALL = Block.BlackstoneWall&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;CRIMSON_FENCE = Block.CrimsonFence&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;WARPED_FENCE = Block.WarpedFence&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;CRIMSON_FENCE_GATE = Block.CrimsonFenceGate&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;WARPED_FENCE_GATE = Block.WarpedFenceGate&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;CHAIN = Block.Chain&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;SMALL_DRIPLEAF = Block.SmallDripleaf&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;CRIMSON_STAIRS = Block.CrimsonStairs&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;WARPED_STAIRS = Block.WarpedStairs&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;BLACKSTONE_STAIRS = Block.BlackstoneStairs&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;GLOW_LICHEN = Block.GlowLichen&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;CRIMSON_BUTTON = Block.CrimsonButton&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;ANCIENT_DEBRIS = Block.AncientDebris&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;RESPAWN_ANCHOR = Block.RespawnAnchor&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;TINTED_GLASS = Block.TintedGlass&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;SOUL_SOIL = Block.SoulSoil&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;CRIMSON_SLAB = Block.CrimsonSlab&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;WARPED_SLAB = Block.WarpedSlab&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;BLACKSTONE_SLAB = Block.BlackstoneSlab&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;CHISELED_NETHER_BRICKS = Block.ChiseledNetherBricks&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;CRACKED_NETHER_BRICKS = Block.CrackedNetherBricks&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;BLOCK_OF_COPPER = Block.BlockOfCopper&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;EXPOSED_COPPER = Block.ExposedCopper&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;WEATHERED_COPPER = Block.WeatheredCopper&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;OXIDIZED_COPPER = Block.OxidizedCopper&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;BLOCK_OF_NETHERITE = Block.BlockOfNetherite&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;SHROOMLIGHT = Block.Shroomlight&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;CRIMSON_DOOR = Block.CrimsonDoor&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;BASALT = Block.Basalt&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;POLISHED_BASALT = Block.PolishedBasalt&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;BLACKSTONE = Block.Blackstone&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;POLISHED_BLACKSTONE = Block.PolishedBlackstone&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;AZALEA_LEAVES = Block.AzaleaLeaves&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;POINTED_DRIPSTONE = Block.PointedDripstone&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;BIG_DRIPLEAF = Block.BigDripleaf&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;AZALEA = Block.Azalea&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;FLOWERING_AZALEA = Block.FloweringAzalea&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;AMETHYST_BLOCK = Block.AmethystBlock&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;AMETHYST_CLUSTER = Block.AmethystCluster&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;CRYING_OBSIDIAN = Block.CryingObsidian&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;LIGHTNING_ROD = Block.LightningRod&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;WARPED_BUTTON = Block.WarpedButton&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;CRIMSON_PRESSURE_PLATE = Block.CrimsonPressurePlate&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;WARPED_PRESSURE_PLATE = Block.WarpedPressurePlate&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;TARGET = Block.Target&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;WARPED_DOOR = Block.WarpedDoor&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;POWDER_SNOW = Block.PowderSnow&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;IRON_DOOR = Block.IronDoor&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;SOUL_CAMPFIRE = Block.SoulCampfire&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;ACACIA_SIGN = Block.AcaciaSign&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;BIRCH_SIGN = Block.BirchSign&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;SLATE = Block.Slate&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;POSTER = Block.Poster&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;BOARD = Block.Board&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;CRIMSON_SIGN = Block.CrimsonSign&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;DARK_OAK_SIGN = Block.DarkOakSign&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;JUNGLE_SIGN = Block.JungleSign&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;MANGROVE_BUTTON = Block.MangroveButton&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;MANGROVE_DOOR = Block.MangroveDoor&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;MANGROVE_FENCE = Block.MangroveFence&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;MANGROVE_FENCE_GATE = Block.MangroveFenceGate&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;MANGROVE_LEAVES = Block.MangroveLeaves&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;MANGROVE_LOG = Block.MangroveLog&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;MANGROVE_PLANKS = Block.MangrovePlanks&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;MANGROVE_PRESSURE_PLATE = Block.MangrovePressurePlate&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;MANGROVE_PROPAGULE = Block.MangrovePropagule&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;MANGROVE_ROOTS = Block.MangroveRoots&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;MANGROVE_SLAB = Block.MangroveSlab&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;MANGROVE_STAIRS = Block.MangroveStairs&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;MANGROVE_SIGN = Block.MangroveSign&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;MANGROVE_TRAPDOOR = Block.MangroveTrapdoor&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;MANGROVE_WOOD = Block.MangroveWood&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;MUD = Block.Mud&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;MUD_BRICKS = Block.MudBricks&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;MUDDY_MANGROVE_ROOTS = Block.MuddyMangroveRoots&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;OCHRE_FROGLIGHT = Block.OchreFroglight&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;PACKED_MUD = Block.PackedMud&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;PEARLESCENT_FROGLIGHT = Block.PearlescentFroglight&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;REINFORCED_DEEPSLATE = Block.ReinforcedDeepslate&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;SCULK = Block.Sculk&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;SCULK_CATALYST = Block.SculkCatalyst&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;SCULK_SHRIEKER = Block.SculkShrieker&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;SCULK_VEIN = Block.SculkVein&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;SPRUCE_SIGN = Block.SpruceSign&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;STRIPPED_MANGROVE_LOG = Block.StrippedMangroveLog&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;STRIPPED_MANGROVE_WOOD = Block.StrippedMangroveWood&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;VERDANT_FROGLIGHT = Block.VerdantFroglight&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;WARPED_SIGN = Block.WarpedSign&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;ACACIA_DOOR = Block.AcaciaDoor&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;FLOWERING_AZALEA_LEAVES = Block.FloweringAzaleaLeaves&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;BIRCH_DOOR = Block.BirchDoor&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;DARK_OAK_DOOR = Block.DarkOakDoor&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;JUNGLE_DOOR = Block.JungleDoor&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;SPRUCE_DOOR = Block.SpruceDoor&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;OAK_DOOR = Block.OakDoor&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;BLOCK_OF_RAW_IRON = Block.BlockOfRawIron&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;BANNER = Block.Banner&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;SMOOTH_RED_SANDSTONE_SLAB = Block.SmoothRedSandstoneSlab&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;OAK_SIGN = Block.OakSign&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;WARPED_FUNGUS = Block.WarpedFungus&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;BIRCH_WOOD = Block.BirchWood&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;ACACIA_WOOD = Block.AcaciaWood&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;STONE_SLAB = Block.StoneSlab&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;BLOCK_OF_BAMBOO = Block.BlockOfBamboo&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;BAMBOO_BUTTON = Block.BambooButton&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;BAMBOO_FENCE = Block.BambooFence&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;BAMBOO_FENCE_GATE = Block.BambooFenceGate&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;BAMBOO_MOSAIC = Block.BambooMosaic&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;BAMBOO_MOSAIC_SLAB = Block.BambooMosaicSlab&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;BAMBOO_MOSAIC_STAIRS = Block.BambooMosaicStairs&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;BAMBOO_PLANKS = Block.BambooPlanks&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;BAMBOO_PRESSURE_PLATE = Block.BambooPressurePlate&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;BAMBOO_SLAB = Block.BambooSlab&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;BAMBOO_STAIRS = Block.BambooStairs&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;BAMBOO_STANDING_SIGN = Block.BambooStandingSign&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;BAMBOO_TRAPDOOR = Block.BambooTrapdoor&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;CHERRY_BUTTON = Block.CherryButton&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;CHERRY_FENCE = Block.CherryFence&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;CHERRY_FENCE_GATE = Block.CherryFenceGate&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;CHERRY_LEAVES = Block.CherryLeaves&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;CHERRY_LOG = Block.CherryLog&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;CHERRY_PLANKS = Block.CherryPlanks&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;CHERRY_PRESSURE_PLATE = Block.CherryPressurePlate&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;CHERRY_SAPLING = Block.CherrySapling&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;CHERRY_SLAB = Block.CherrySlab&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;CHERRY_STAIRS = Block.CherryStairs&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;CHERRY_STANDING_SIGN = Block.CherryStandingSign&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;CHERRY_TRAPDOOR = Block.CherryTrapdoor&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;CHERRY_WOOD = Block.CherryWood&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;CHISELED_BOOKSHELF = Block.ChiseledBookshelf&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;MOSS_BLOCK = Block.MossBlock&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;BLOCK_OF_STRIPPED_BAMBOO = Block.BlockOfStrippedBamboo&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;STRIPPED_CHERRY_LOG = Block.StrippedCherryLog&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;STRIPPED_CHERRY_WOOD = Block.StrippedCherryWood&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;SUSPICIOUS_GRAVEL = Block.SuspiciousGravel&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;SUSPICIOUS_SAND = Block.SuspiciousSand&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;TORCHFLOWER = Block.Torchflower&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;CHISELED_TUFF = Block.ChiseledTuff&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;CHISELED_TUFF_BRICKS = Block.ChiseledTuffBricks&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;COPPER_DOOR = Block.CopperDoor&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;COPPER_TRAPDOOR = Block.CopperTrapdoor&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;CRAFTER = Block.Crafter&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;POLISHED_TUFF = Block.PolishedTuff&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;POLISHED_TUFF_SLAB = Block.PolishedTuffSlab&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;POLISHED_TUFF_STAIRS = Block.PolishedTuffStairs&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;POLISHED_TUFF_WALL = Block.PolishedTuffWall&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;SHORT_GRASS = Block.ShortGrass&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;TUFF = Block.Tuff&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;TUFF_BRICK_SLAB = Block.TuffBrickSlab&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;TUFF_BRICK_STAIRS = Block.TuffBrickStairs&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;TUFF_BRICK_WALL = Block.TuffBrickWall&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;TUFF_BRICKS = Block.TuffBricks&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;TUFF_SLAB = Block.TuffSlab&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;TUFF_STAIRS = Block.TuffStairs&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;TUFF_WALL = Block.TuffWall&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;BLACK_CANDLE = Block.BlackCandle&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;BLUE_CANDLE = Block.BlueCandle&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;BROWN_CANDLE = Block.BrownCandle&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;BUSH = Block.Bush&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;CACTUS_FLOWER = Block.CactusFlower&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;CANDLE = Block.Candle&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;CLOSED_EYEBLOSSOM = Block.ClosedEyeblossom&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;CREAKING_HEART = Block.CreakingHeart&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;CYAN_CANDLE = Block.CyanCandle&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;DRIED_GHAST = Block.DriedGhast&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;FIREFLY_BUSH = Block.FireflyBush&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;GRAY_CANDLE = Block.GrayCandle&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;GREEN_CANDLE = Block.GreenCandle&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;LEAF_LITTER = Block.LeafLitter&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;LIGHT_BLUE_CANDLE = Block.LightBlueCandle&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;LIGHT_GRAY_CANDLE = Block.LightGrayCandle&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;LIME_CANDLE = Block.LimeCandle&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;MAGENTA_CANDLE = Block.MagentaCandle&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;OPEN_EYEBLOSSOM = Block.OpenEyeblossom&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;ORANGE_CANDLE = Block.OrangeCandle&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;PALE_HANGING_MOSS = Block.PaleHangingMoss&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;PALE_MOSS_BLOCK = Block.PaleMossBlock&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;PALE_MOSS_CARPET = Block.PaleMossCarpet&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;PALE_OAK_BUTTON = Block.PaleOakButton&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;PALE_OAK_DOOR = Block.PaleOakDoor&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;PALE_OAK_FENCE = Block.PaleOakFence&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;PALE_OAK_FENCE_GATE = Block.PaleOakFenceGate&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;PALE_OAK_HANGING_SIGN = Block.PaleOakHangingSign&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;PALE_OAK_LEAVES = Block.PaleOakLeaves&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;PALE_OAK_LOG = Block.PaleOakLog&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;PALE_OAK_PLANKS = Block.PaleOakPlanks&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;PALE_OAK_PRESSURE_PLATE = Block.PaleOakPressurePlate&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;PALE_OAK_SAPLING = Block.PaleOakSapling&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;PALE_OAK_SLAB = Block.PaleOakSlab&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;PALE_OAK_STAIRS = Block.PaleOakStairs&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;PALE_OAK_STANDING_SIGN = Block.PaleOakStandingSign&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;PALE_OAK_TRAPDOOR = Block.PaleOakTrapdoor&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;PALE_OAK_WOOD = Block.PaleOakWood&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;PINK_CANDLE = Block.PinkCandle&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;PURPLE_CANDLE = Block.PurpleCandle&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;RED_CANDLE = Block.RedCandle&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;BLOCK_OF_RESIN = Block.BlockOfResin&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;TALL_DRY_GRASS = Block.TallDryGrass&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;WHITE_CANDLE = Block.WhiteCandle&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;WILDFLOWERS = Block.Wildflowers&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;YELLOW_CANDLE = Block.YellowCandle&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;CHICKEN = AnimalMob.Chicken&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;COW = AnimalMob.Cow&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;PIG = AnimalMob.Pig&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;SHEEP = AnimalMob.Sheep&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;WOLF = AnimalMob.Wolf&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;VILLAGER = AnimalMob.Villager&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;MUSHROOM_COW = AnimalMob.MushroomCow&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;SQUID = AnimalMob.Squid&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;RABBIT = AnimalMob.Rabbit&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;BAT = AnimalMob.Bat&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;OCELOT = AnimalMob.Ocelot&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;HORSE = AnimalMob.Horse&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;DONKEY = AnimalMob.Donkey&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;MULE = AnimalMob.Mule&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;SKELETON_HORSE = AnimalMob.SkeletonHorse&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;ZOMBIE_HORSE = AnimalMob.ZombieHorse&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;POLAR_BEAR = AnimalMob.PolarBear&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;LLAMA = AnimalMob.Llama&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;PARROT = AnimalMob.Parrot&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;DOLPHIN = AnimalMob.Dolphin&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;SEA_TURTLE = AnimalMob.SeaTurtle&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;CAT = AnimalMob.Cat&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;PUFFERFISH = AnimalMob.Pufferfish&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;SALMON = AnimalMob.Salmon&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;TROPICAL_FISH = AnimalMob.TropicalFish&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;COD = AnimalMob.Cod&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;PANDA = AnimalMob.Panda&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;WANDERING_TRADER = AnimalMob.WanderingTrader&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;FOX = AnimalMob.Fox&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;BEE = AnimalMob.Bee&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;AXOLOTL = AnimalMob.Axolotl&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;GLOW_SQUID = AnimalMob.GlowSquid&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;GOAT = AnimalMob.Goat&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;STRIDER = AnimalMob.Strider&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;ALLAY = AnimalMob.Allay&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;FROG = AnimalMob.Frog&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;TADPOLE = AnimalMob.Tadpole&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;CAMEL = AnimalMob.Camel&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;SNIFFER = AnimalMob.Sniffer&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;ARMADILLO = AnimalMob.Armadillo&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;AGENT = AnimalMob.Agent&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;HAPPY_GHAST = AnimalMob.HappyGhast&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;WALK = TravelMethod.Walk&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;SWIM_WATER = TravelMethod.SwimWater&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;FALL = TravelMethod.Fall&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;CLIMB = TravelMethod.Climb&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;SWIM_LAVA = TravelMethod.SwimLava&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;FLY = TravelMethod.Fly&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;RIDING = TravelMethod.Riding&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;SNEAK = TravelMethod.Sneak&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;SPRINT = TravelMethod.Sprint&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;BOUNCE = TravelMethod.Bounce&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;FROST_WALK = TravelMethod.FrostWalk&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;TELEPORT = TravelMethod.Teleport&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;IRON_SHOVEL = Item.IronShovel&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;IRON_PICKAXE = Item.IronPickaxe&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;IRON_AXE = Item.IronAxe&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;FLINT_AND_STEEL = Item.FlintAndSteel&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;APPLE = Item.Apple&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;BOW = Item.Bow&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;ARROW = Item.Arrow&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;COAL = Item.Coal&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;CHARCOAL = Item.Charcoal&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;DIAMOND = Item.Diamond&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;IRON_INGOT = Item.IronIngot&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;GOLD_INGOT = Item.GoldIngot&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;IRON_SWORD = Item.IronSword&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;WOODEN_SWORD = Item.WoodenSword&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;WOODEN_SHOVEL = Item.WoodenShovel&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;WOODEN_PICKAXE = Item.WoodenPickaxe&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;WOODEN_AXE = Item.WoodenAxe&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;STONE_SWORD = Item.StoneSword&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;STONE_SHOVEL = Item.StoneShovel&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;STONE_PICKAXE = Item.StonePickaxe&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;STONE_AXE = Item.StoneAxe&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;DIAMOND_SWORD = Item.DiamondSword&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;DIAMOND_SHOVEL = Item.DiamondShovel&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;DIAMOND_PICKAXE = Item.DiamondPickaxe&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;DIAMOND_AXE = Item.DiamondAxe&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;STICK = Item.Stick&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;BOWL = Item.Bowl&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;MUSHROOM_STEW = Item.MushroomStew&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;GOLDEN_SWORD = Item.GoldenSword&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;GOLDEN_SHOVEL = Item.GoldenShovel&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;GOLDEN_PICKAXE = Item.GoldenPickaxe&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;GOLDEN_AXE = Item.GoldenAxe&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;STRING = Item.String&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;FEATHER = Item.Feather&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;GUNPOWDER = Item.Gunpowder&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;WOODEN_HOE = Item.WoodenHoe&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;STONE_HOE = Item.StoneHoe&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;IRON_HOE = Item.IronHoe&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;DIAMOND_HOE = Item.DiamondHoe&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;GOLDEN_HOE = Item.GoldenHoe&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;SEEDS = Item.Seeds&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;WHEAT = Item.Wheat&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;BREAD = Item.Bread&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;LEATHER_CAP = Item.LeatherCap&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;LEATHER_CHESTPLATE = Item.LeatherChestplate&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;LEATHER_PANTS = Item.LeatherPants&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;LEATHER_BOOTS = Item.LeatherBoots&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;CHAINMAIL_HELMET = Item.ChainmailHelmet&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;CHAINMAIL_CHESTPLATE = Item.ChainmailChestplate&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;CHAINMAIL_LEGGINGS = Item.ChainmailLeggings&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;CHAINMAIL_BOOTS = Item.ChainmailBoots&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;IRON_HELMET = Item.IronHelmet&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;IRON_CHESTPLATE = Item.IronChestplate&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;IRON_LEGGINGS = Item.IronLeggings&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;IRON_BOOTS = Item.IronBoots&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;DIAMOND_HELMET = Item.DiamondHelmet&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;DIAMOND_CHESTPLATE = Item.DiamondChestplate&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;DIAMOND_LEGGINGS = Item.DiamondLeggings&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;DIAMOND_BOOTS = Item.DiamondBoots&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;GOLDEN_HELMET = Item.GoldenHelmet&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;GOLDEN_CHESTPLATE = Item.GoldenChestplate&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;GOLDEN_LEGGINGS = Item.GoldenLeggings&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;GOLDEN_BOOTS = Item.GoldenBoots&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;FLINT = Item.Flint&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;RAW_PORKCHOP = Item.RawPorkchop&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;COOKED_PORKCHOP = Item.CookedPorkchop&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;PAINTING = Item.Painting&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;GOLDEN_APPLE = Item.GoldenApple&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;OAK_DOOR_ITEM = Item.OakDoor&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;BUCKET = Item.Bucket&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;MILK = Item.Milk&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;BUCKET_OF_COD = Item.BucketOfCod&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;BUCKET_OF_SALMON = Item.BucketOfSalmon&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;BUCKET_OF_TROPICAL_FISH = Item.BucketOfTropicalFish&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;WATER_BUCKET = Item.WaterBucket&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;LAVA_BUCKET = Item.LavaBucket&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;MINECART = Item.Minecart&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;SADDLE = Item.Saddle&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;IRON_DOOR_ITEM = Item.IronDoor&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;REDSTONE = Item.Redstone&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;SNOWBALL = Item.Snowball&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;BOAT = Item.Boat&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;SPRUCE_BOAT = Item.SpruceBoat&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;BIRCH_BOAT = Item.BirchBoat&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;JUNGLE_BOAT = Item.JungleBoat&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;ACACIA_BOAT = Item.AcaciaBoat&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;DARK_OAK_BOAT = Item.DarkOakBoat&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;LEATHER = Item.Leather&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;KELP_ITEM = Item.Kelp&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;BRICK = Item.Brick&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;CLAY_BALL = Item.ClayBall&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;REEDS = Item.Reeds&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;PAPER = Item.Paper&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;BOOK = Item.Book&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;SLIMEBALL = Item.Slimeball&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;MINECART_WITH_CHEST = Item.MinecartWithChest&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;EGG = Item.Egg&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;COMPASS = Item.Compass&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;FISHING_ROD = Item.FishingRod&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;CLOCK = Item.Clock&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;GLOWSTONE_DUST = Item.GlowstoneDust&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;RAW_FISH = Item.RawFish&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;COOKED_FISH = Item.CookedFish&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;INK_SAC = Item.InkSac&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;ROSE_RED = Item.RoseRed&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;CACTUS_GREEN = Item.CactusGreen&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;COCOA_BEANS = Item.CocoaBeans&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;LAPIS_LAZULI = Item.LapisLazuli&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;PURPLE_DYE = Item.PurpleDye&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;CYAN_DYE = Item.CyanDye&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;LIGHT_GRAY_DYE = Item.LightGrayDye&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;GRAY_DYE = Item.GrayDye&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;PINK_DYE = Item.PinkDye&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;LIME_DYE = Item.LimeDye&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;DANDELION_YELLOW = Item.DandelionYellow&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;LIGHT_BLUE_DYE = Item.LightBlueDye&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;MAGENTA_DYE = Item.MagentaDye&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;ORANGE_DYE = Item.OrangeDye&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;BONE_MEAL = Item.BoneMeal&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;BONE = Item.Bone&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;SUGAR = Item.Sugar&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;CAKE_ITEM = Item.Cake&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;BED_ITEM = Item.Bed&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;ORANGE_BED = Item.OrangeBed&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;MAGENTA_BED = Item.MagentaBed&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;LIGHT_BLUE_BED = Item.LightBlueBed&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;YELLOW_BED = Item.YellowBed&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;LIME_BED = Item.LimeBed&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;PINK_BED = Item.PinkBed&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;GRAY_BED = Item.GrayBed&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;LIGHT_GRAY_BED = Item.LightGrayBed&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;CYAN_BED = Item.CyanBed&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;PURPLE_BED = Item.PurpleBed&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;BLUE_BED = Item.BlueBed&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;BROWN_BED = Item.BrownBed&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;GREEN_BED = Item.GreenBed&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;RED_BED = Item.RedBed&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;BLACK_BED = Item.BlackBed&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;REPEATER = Item.Repeater&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;COOKIE = Item.Cookie&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;MAP = Item.Map&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;SHEARS = Item.Shears&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;MELON = Item.Melon&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;PUMPKIN_SEEDS = Item.PumpkinSeeds&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;MELON_SEEDS = Item.MelonSeeds&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;RAW_BEEF = Item.RawBeef&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;COOKED_BEEF = Item.CookedBeef&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;RAW_CHICKEN = Item.RawChicken&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;COOKED_CHICKEN = Item.CookedChicken&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;ROTTEN_FLESH = Item.RottenFlesh&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;ENDER_PEARL = Item.EnderPearl&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;BLAZE_ROD = Item.BlazeRod&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;GHAST_TEAR = Item.GhastTear&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;GOLD_NUGGET = Item.GoldNugget&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;NETHER_WART_ITEM = Item.NetherWart&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;GLASS_BOTTLE = Item.GlassBottle&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;SPIDER_EYE = Item.SpiderEye&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;FERMENTED_SPIDER_EYE = Item.FermentedSpiderEye&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;BLAZE_POWDER = Item.BlazePowder&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;MAGMA_CREAM = Item.MagmaCream&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;BREWING_STAND_ITEM = Item.BrewingStand&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;CAULDRON_ITEM = Item.Cauldron&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;ENDER_EYE = Item.EnderEye&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;GLISTERING_MELON = Item.GlisteringMelon&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;SPAWN_CHICKEN = Item.SpawnChicken&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;SPAWN_COW = Item.SpawnCow&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;SPAWN_PIG = Item.SpawnPig&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;SPAWN_SHEEP = Item.SpawnSheep&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;SPAWN_WOLF = Item.SpawnWolf&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;SPAWN_VILLAGER = Item.SpawnVillager&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;SPAWN_MOOSHROOM = Item.SpawnMooshroom&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;SPAWN_SQUID = Item.SpawnSquid&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;SPAWN_RABBIT = Item.SpawnRabbit&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;SPAWN_BAT = Item.SpawnBat&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;SPAWN_OCELOT = Item.SpawnOcelot&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;SPAWN_HORSE = Item.SpawnHorse&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;SPAWN_DONKEY = Item.SpawnDonkey&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;SPAWN_MULE = Item.SpawnMule&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;SPAWN_SKELETON_HORSE = Item.SpawnSkeletonHorse&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;SPAWN_ZOMBIE_HORSE = Item.SpawnZombieHorse&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;SPAWN_POLAR_BEAR = Item.SpawnPolarBear&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;SPAWN_LLAMA = Item.SpawnLlama&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;SPAWN_PARROT = Item.SpawnParrot&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;SPAWN_DOLPHIN = Item.SpawnDolphin&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;SPAWN_RAVAGER = Item.SpawnRavager&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;SPAWN_ZOMBIE = Item.SpawnZombie&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;SPAWN_CREEPER = Item.SpawnCreeper&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;SPAWN_SKELETON = Item.SpawnSkeleton&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;SPAWN_SPIDER = Item.SpawnSpider&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;SPAWN_ZOMBIE_PIGMAN = Item.SpawnZombiePigman&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;SPAWN_SLIME = Item.SpawnSlime&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;SPAWN_ENDERMAN = Item.SpawnEnderman&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;SPAWN_SILVERFISH = Item.SpawnSilverfish&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;SPAWN_CAVE_SPIDER = Item.SpawnCaveSpider&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;SPAWN_GHAST = Item.SpawnGhast&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;SPAWN_MAGMA_CUBE = Item.SpawnMagmaCube&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;SPAWN_BLAZE = Item.SpawnBlaze&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;SPAWN_ZOMBIE_VILLAGER = Item.SpawnZombieVillager&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;SPAWN_WITCH = Item.SpawnWitch&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;SPAWN_STRAY = Item.SpawnStray&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;SPAWN_HUSK = Item.SpawnHusk&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;SPAWN_WITHER_SKELETON = Item.SpawnWitherSkeleton&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;SPAWN_GUARDIAN = Item.SpawnGuardian&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;SPAWN_ELDER_GUARDIAN = Item.SpawnElderGuardian&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;SPAWN_SHULKER = Item.SpawnShulker&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;SPAWN_ENDERMITE = Item.SpawnEndermite&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;SPAWN_VINDICATOR = Item.SpawnVindicator&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;SPAWN_PHANTOM = Item.SpawnPhantom&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;SPAWN_SEA_TURTLE = Item.SpawnSeaTurtle&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;SPAWN_CAT = Item.SpawnCat&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;SPAWN_EVOKER = Item.SpawnEvoker&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;SPAWN_VEX = Item.SpawnVex&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;SPAWN_PUFFERFISH = Item.SpawnPufferfish&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;SPAWN_SALMON = Item.SpawnSalmon&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;SPAWN_DROWNED = Item.SpawnDrowned&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;SPAWN_TROPICAL_FISH = Item.SpawnTropicalFish&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;SPAWN_COD = Item.SpawnCod&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;SPAWN_FOX = Item.SpawnFox&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;SPAWN_PANDA = Item.SpawnPanda&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;SPAWN_PILLAGER = Item.SpawnPillager&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;SPAWN_WANDERING_TRADER = Item.SpawnWanderingTrader&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;SPAWN_BEE = Item.SpawnBee&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;EXPERIENCE_BOTTLE = Item.ExperienceBottle&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;FIREBALL = Item.Fireball&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;BOOK_QUILL = Item.BookQuill&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;EMERALD = Item.Emerald&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;ITEM_FRAME = Item.ItemFrame&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;FLOWER_POT_ITEM = Item.FlowerPot&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;CARROT = Item.Carrot&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;POTATO = Item.Potato&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;BAKED_POTATO = Item.BakedPotato&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;POISONOUS_POTATO = Item.PoisonousPotato&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;EMPTY_MAP = Item.EmptyMap&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;EMPTY_LOCATOR_MAP = Item.EmptyLocatorMap&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;GOLDEN_CARROT = Item.GoldenCarrot&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;CARROT_ON_A_STICK = Item.CarrotOnAStick&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;NETHER_STAR = Item.NetherStar&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;PUMPKIN_PIE = Item.PumpkinPie&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;ENCHANTED_BOOK = Item.EnchantedBook&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;COMPARATOR = Item.Comparator&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;NETHERBRICK = Item.Netherbrick&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;QUARTZ = Item.Quartz&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;MINECART_WITH_T_N_T = Item.MinecartWithTNT&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;MINECART_WITH_HOPPER = Item.MinecartWithHopper&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;PRISMARINE_SHARD = Item.PrismarineShard&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;HOPPER_ITEM = Item.Hopper&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;RAW_RABBIT = Item.RawRabbit&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;COOKED_RABBIT = Item.CookedRabbit&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;RABBIT_STEW = Item.RabbitStew&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;RABBIT_FOOT = Item.RabbitFoot&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;RABBIT_HIDE = Item.RabbitHide&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;LEATHER_HORSE_ARMOR = Item.LeatherHorseArmor&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;IRON_HORSE_ARMOR = Item.IronHorseArmor&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;GOLD_HORSE_ARMOR = Item.GoldHorseArmor&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;DIAMOND_HORSE_ARMOR = Item.DiamondHorseArmor&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;LEAD = Item.Lead&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;NAME_TAG = Item.NameTag&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;PRISMARINE_CRYSTALS = Item.PrismarineCrystals&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;RAW_MUTTON = Item.RawMutton&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;COOKED_MUTTON = Item.CookedMutton&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;ARMOR_STAND = Item.ArmorStand&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;END_CRYSTAL = Item.EndCrystal&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;SPRUCE_DOOR_ITEM = Item.SpruceDoor&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;BIRCH_DOOR_ITEM = Item.BirchDoor&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;JUNGLE_DOOR_ITEM = Item.JungleDoor&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;ACACIA_DOOR_ITEM = Item.AcaciaDoor&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;DARK_OAK_DOOR_ITEM = Item.DarkOakDoor&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;CHORUS_FRUIT = Item.ChorusFruit&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;CHORUS_FRUIT_POPPED = Item.ChorusFruitPopped&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;DRAGON_S_BREATH = Item.DragonSBreath&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;ELYTRA = Item.Elytra&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;SHULKER_SHELL = Item.ShulkerShell&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;TOTEM = Item.Totem&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;IRON_NUGGET = Item.IronNugget&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;TRIDENT = Item.Trident&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;BEETROOT_ITEM = Item.Beetroot&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;BEETROOT_SEEDS = Item.BeetrootSeeds&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;BEETROOT_SOUP = Item.BeetrootSoup&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;RAW_SALMON = Item.RawSalmon&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;CLOWNFISH = Item.Clownfish&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;PUFFERFISH_ITEM = Item.Pufferfish&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;COOKED_SALMON = Item.CookedSalmon&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;DRIED_KELP = Item.DriedKelp&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;ENCHANTED_APPLE = Item.EnchantedApple&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;HEART_OF_THE_SEA = Item.HeartOfTheSea&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;SWEET_BERRIES = Item.SweetBerries&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;CAMPFIRE_ITEM = Item.Campfire&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;HONEYCOMB = Item.Honeycomb&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;HONEY_BOTTLE = Item.HoneyBottle&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;SPAWN_PIGLIN = Item.SpawnPiglin&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;NETHERITE_INGOT = Item.NetheriteIngot&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;COPPER_INGOT = Item.CopperIngot&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;GREEN_DYE = Item.GreenDye&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;GLOW_BERRIES = Item.GlowBerries&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;RED_DYE = Item.RedDye&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;YELLOW_DYE = Item.YellowDye&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;GLOW_INK_SAC = Item.GlowInkSac&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;NETHERITE_SWORD = Item.NetheriteSword&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;SPAWN_ZOMBIFIED_PIGLIN = Item.SpawnZombifiedPiglin&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;SPAWN_GLOW_SQUID = Item.SpawnGlowSquid&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;SPAWN_STRIDER = Item.SpawnStrider&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;SPAWN_HOGLIN = Item.SpawnHoglin&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;SPAWN_ZOGLIN = Item.SpawnZoglin&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;SPAWN_GOAT = Item.SpawnGoat&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;SPAWN_AXOLOTL = Item.SpawnAxolotl&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;NETHERITE_HELMET = Item.NetheriteHelmet&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;NETHERITE_CHESTPLATE = Item.NetheriteChestplate&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;NETHERITE_LEGGINGS = Item.NetheriteLeggings&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;NETHERITE_BOOTS = Item.NetheriteBoots&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;NETHERITE_AXE = Item.NetheriteAxe&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;NETHERITE_PICKAXE = Item.NetheritePickaxe&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;RAW_COPPER = Item.RawCopper&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;NETHERITE_SHOVEL = Item.NetheriteShovel&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;NETHERITE_HOE = Item.NetheriteHoe&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;WARPED_FUNGUS_ON_A_STICK = Item.WarpedFungusOnAStick&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;POWDER_SNOW_BUCKET = Item.PowderSnowBucket&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;BUCKET_OF_AXOLOTL = Item.BucketOfAxolotl&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;RAW_IRON = Item.RawIron&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;RAW_GOLD = Item.RawGold&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;NETHERITE_SCRAP = Item.NetheriteScrap&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;SPAWN_ALLAY = Item.SpawnAllay&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;ECHO_SHARD = Item.EchoShard&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;SPAWN_FROG = Item.SpawnFrog&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;GOAT_HORN = Item.GoatHorn&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;MANGROVE_BOAT = Item.MangroveBoat&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;MANGROVE_BOAT_WITH_CHEST = Item.MangroveBoatWithChest&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;RECOVERY_COMPASS = Item.RecoveryCompass&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;BUCKET_OF_TADPOLE = Item.BucketOfTadpole&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;SPAWN_TADPOLE = Item.SpawnTadpole&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;SPAWN_WARDEN = Item.SpawnWarden&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;SPAWN_TRADER_LLAMA = Item.SpawnTraderLlama&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;TROPICAL_FISH_ITEM = Item.TropicalFish&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;BAMBOO_RAFT = Item.BambooRaft&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;SPAWN_CAMEL = Item.SpawnCamel&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;SPAWN_SNIFFER = Item.SpawnSniffer&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;SHIELD = Item.Shield&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;MACE = Item.Mace&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;WIND_CHARGE = Item.WindCharge&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;WOLF_ARMOR = Item.WolfArmor&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;SPAWN_ARMADILLO = Item.SpawnArmadillo&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;SPAWN_BREEZE = Item.SpawnBreeze&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;BLACK_HARNESS = Item.BlackHarness&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;BLUE_HARNESS = Item.BlueHarness&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;BROWN_HARNESS = Item.BrownHarness&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;CYAN_HARNESS = Item.CyanHarness&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;GRAY_HARNESS = Item.GrayHarness&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;GREEN_HARNESS = Item.GreenHarness&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;LIGHT_BLUE_HARNESS = Item.LightBlueHarness&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;LIGHT_GRAY_HARNESS = Item.LightGrayHarness&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;LIME_HARNESS = Item.LimeHarness&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;PALE_OAK_BOAT_WITH_CHEST = Item.PaleOakBoatWithChest&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;PURPLE_HARNESS = Item.PurpleHarness&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;RED_HARNESS = Item.RedHarness&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;WHITE_HARNESS = Item.WhiteHarness&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;YELLOW_HARNESS = Item.YellowHarness&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;PRIMED_TNT = ProjectileMob.PrimedTnt&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;XP_BOTTLE = ProjectileMob.XpBottle&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;XP_ORB = ProjectileMob.XpOrb&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;FIREWORKS_ROCKET = ProjectileMob.FireworksRocket&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;ARROW_PROJECTILE_MOB = ProjectileMob.Arrow&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;SNOWBALL_PROJECTILE_MOB = ProjectileMob.Snowball&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;EGG_PROJECTILE_MOB = ProjectileMob.Egg&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;SPLASH_POTION = ProjectileMob.SplashPotion&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;LIGHTNING_BOLT = ProjectileMob.LightningBolt&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;EVOCATION_FANG = ProjectileMob.EvocationFang&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;ZOMBIE = MonsterMob.Zombie&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;CREEPER = MonsterMob.Creeper&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;SKELETON = MonsterMob.Skeleton&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;SPIDER = MonsterMob.Spider&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;PIG_ZOMBIE = MonsterMob.PigZombie&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;SLIME = MonsterMob.Slime&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;ENDERMAN = MonsterMob.Enderman&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;SILVERFISH = MonsterMob.Silverfish&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;CAVE_SPIDER = MonsterMob.CaveSpider&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;GHAST = MonsterMob.Ghast&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;LAVA_SLIME = MonsterMob.LavaSlime&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;BLAZE = MonsterMob.Blaze&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;ZOMBIE_VILLAGER = MonsterMob.ZombieVillager&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;WITCH = MonsterMob.Witch&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;STRAY = MonsterMob.Stray&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;HUSK = MonsterMob.Husk&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;WITHER_SKELETON = MonsterMob.WitherSkeleton&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;GUARDIAN = MonsterMob.Guardian&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;ELDER_GUARDIAN = MonsterMob.ElderGuardian&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;SHULKER = MonsterMob.Shulker&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;ENDERMITE = MonsterMob.Endermite&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;VINDICATOR = MonsterMob.Vindicator&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;PHANTOM = MonsterMob.Phantom&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;RAVAGER = MonsterMob.Ravager&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;EVOKER = MonsterMob.Evoker&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;VEX = MonsterMob.Vex&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;DROWNED = MonsterMob.Drowned&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;PILLAGER = MonsterMob.Pillager&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;HOGLIN = MonsterMob.Hoglin&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;PIGLIN = MonsterMob.Piglin&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;ZOGLIN = MonsterMob.Zoglin&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;WARDEN = MonsterMob.Warden&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;BREEZE = MonsterMob.Breeze&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;CREAKING = MonsterMob.Creaking&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;ENDER_DRAGON = MonsterMob.EnderDragon&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;IRON_GOLEM = MonsterMob.IronGolem&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;PIGLIN_BRUTE = MonsterMob.PiglinBrute&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;SNOW_GOLEM = MonsterMob.SnowGolem&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;WITHER_MONSTER_MOB = MonsterMob.Wither&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;SPEED = Effect.Speed&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;SLOWNESS = Effect.Slowness&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;HASTE = Effect.Haste&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;MINING_FATIGUE = Effect.MiningFatigue&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;STRENGTH = Effect.Strength&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;JUMP_BOOST = Effect.JumpBoost&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;NAUSEA = Effect.Nausea&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;REGENERATION = Effect.Regeneration&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;RESISTANCE = Effect.Resistance&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;FIRE_RESISTANCE = Effect.FireResistance&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;WATER_BREATHING = Effect.WaterBreathing&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;INVISIBILITY = Effect.Invisibility&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;BLINDNESS = Effect.Blindness&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;NIGHT_VISION = Effect.NightVision&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;HUNGER = Effect.Hunger&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;WEAKNESS = Effect.Weakness&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;POISON = Effect.Poison&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;WITHER = Effect.Wither&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;HEALTH_BOOST = Effect.HealthBoost&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;ABSORPTION = Effect.Absorption&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;LEVITATION = Effect.Levitation&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;ATTACK = AgentCommand.Attack&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;DESTROY = AgentCommand.Destroy&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;TILL = AgentCommand.Till&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;DROP_ALL = AgentCommand.DropAll&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;PLACE_ON_MOVE = AgentAssist.PlaceOnMove&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;PLACE_FROM_ANY_SLOT = AgentAssist.PlaceFromAnySlot&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;DESTROY_OBSTACLES = AgentAssist.DestroyObstacles&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;WEST = CompassDirection.West&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;EAST = CompassDirection.East&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;NORTH = CompassDirection.North&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;SOUTH = CompassDirection.South&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;NORTH_CARDINAL_DIRECTION = CardinalDirection.North&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;EAST_CARDINAL_DIRECTION = CardinalDirection.East&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;SOUTH_CARDINAL_DIRECTION = CardinalDirection.South&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;UP_CARDINAL_DIRECTION = CardinalDirection.Up&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;WEST_CARDINAL_DIRECTION = CardinalDirection.West&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;DOWN_CARDINAL_DIRECTION = CardinalDirection.Down&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;WHITE = BlockColor.White&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;ORANGE = BlockColor.Orange&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;MAGENTA = BlockColor.Magenta&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;LIGHT_BLUE = BlockColor.LightBlue&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;YELLOW = BlockColor.Yellow&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;LIME = BlockColor.Lime&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;PINK = BlockColor.Pink&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;GRAY = BlockColor.Gray&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;LIGHT_GRAY = BlockColor.LightGray&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;CYAN = BlockColor.Cyan&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;PURPLE = BlockColor.Purple&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;BLUE = BlockColor.Blue&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;BROWN = BlockColor.Brown&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;GREEN = BlockColor.Green&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;RED = BlockColor.Red&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;BLACK = BlockColor.Black&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;DAY = DayTime.Day&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;DAWN = DayTime.Dawn&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;MIDDAY = DayTime.Midday&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;DUSK = DayTime.Dusk&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;NIGHT = DayTime.Night&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;MIDNIGHT = DayTime.Midnight&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;PV_P = GameRule.PvP&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;DROWNING_DAMAGE = GameRule.DrowningDamage&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;FALL_DAMAGE = GameRule.FallDamage&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;FIRE_DAMAGE = GameRule.FireDamage&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;DAYLIGHT_CYCLE = GameRule.DaylightCycle&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;MOB_LOOT = GameRule.MobLoot&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;MOB_SPAWNING = GameRule.MobSpawning&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;WEATHER_CYCLE = GameRule.WeatherCycle&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;MOB_GRIEFING = GameRule.MobGriefing&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;TILE_DROPS = GameRule.TileDrops&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;KEEP_INVENTORY = GameRule.KeepInventory&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;TNT_EXPLODES = GameRule.TntExplodes&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;NATURAL_REGENERATION = GameRule.NaturalRegeneration&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;COMMAND_BLOCK_OUTPUT = GameRule.CommandBlockOutput&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;ENTITY_DROPS = GameRule.EntityDrops&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;DO_FIRE_TICK = GameRule.DoFireTick&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;SHOW_COORDINATES = GameRule.ShowCoordinates&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;SURVIVAL = GameMode.Survival&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;CREATIVE = GameMode.Creative&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;ADVENTURE = GameMode.Adventure&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;CLEAR = Weather.Clear&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;RAIN = Weather.Rain&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;THUNDER = Weather.Thunder&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;PEACEFUL = GameDifficulty.Peaceful&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;EASY = GameDifficulty.Easy&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;NORMAL = GameDifficulty.Normal&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;HARD = GameDifficulty.Hard&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;GAME_TIME = TimeQuery.GameTime&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;DAY_TIME = TimeQuery.DayTime&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;DAY_TIME_QUERY = TimeQuery.Day&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;REAL_LIFE = TimeQuery.RealLife&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;BLOCK_BOTTOM_EAST_WHEN_OFF = LeverPosition.BlockBottomEastWhenOff&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;BLOCK_SIDE_FACING_EAST = LeverPosition.BlockSideFacingEast&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;BLOCK_SIDE_FACING_WEST = LeverPosition.BlockSideFacingWest&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;BLOCK_SIDE_FACING_SOUTH = LeverPosition.BlockSideFacingSouth&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;BLOCK_SIDE_FACING_NORTH = LeverPosition.BlockSideFacingNorth&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;BLOCK_TOP_POINTS_SOUTH_WHEN_OFF = LeverPosition.BlockTopPointsSouthWhenOff&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;BLOCK_TOP_POINTS_EAST_WHEN_OFF = LeverPosition.BlockTopPointsEastWhenOff&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;BLOCK_BOTTOM_POINTS_SOUTH_WHEN_OFF = LeverPosition.BlockBottomPointsSouthWhenOff&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;WOOL_COLORED_BLOCK = ColoredBlock.Wool&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;CONCRETE = ColoredBlock.Concrete&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;MEMORY = StructureSaveMode.Memory&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;DISK = StructureSaveMode.Disk&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;DEGREES0 = StructureRotation.Degrees0&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;DEGREES90 = StructureRotation.Degrees90&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;DEGREES180 = StructureRotation.Degrees180&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;DEGREES270 = StructureRotation.Degrees270&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;NONE = StructureMirrorAxis.None&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;X = StructureMirrorAxis.X&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;Z = StructureMirrorAxis.Z&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;XZ = StructureMirrorAxis.XZ&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;NONE_STRUCTURE_ANIMATION_MODE = StructureAnimationMode.None&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;BLOCK_BY_BLOCK = StructureAnimationMode.BlockByBlock&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;LAYER_BY_LAYER = StructureAnimationMode.LayerByLayer&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;EXPLOSION_HUGE = Particle.ExplosionHuge&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;BALLOON_GAS = Particle.BalloonGas&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;BASIC_CRIT = Particle.BasicCrit&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;BASIC_FLAME = Particle.BasicFlame&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;BASIC_PORTAL = Particle.BasicPortal&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;BLEACH = Particle.Bleach&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;BLUE_FLAME = Particle.BlueFlame&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;CANDLE_FLAME = Particle.CandleFlame&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;COLORED_FLAME = Particle.ColoredFlame&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;CRITICAL_HIT = Particle.CriticalHit&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;CROP_GROWTH = Particle.CropGrowth&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;CROP_GROWTH_AREA = Particle.CropGrowthArea&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;DRAGON_BREATH_FIRE = Particle.DragonBreathFire&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;DRAGON_BREATH_TRAIL = Particle.DragonBreathTrail&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;DRAGON_DESTROY_BLOCK = Particle.DragonDestroyBlock&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;DRIP_HONEY = Particle.DripHoney&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;DRIP_LAVA = Particle.DripLava&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;DRIP_NECTAR = Particle.DripNectar&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;DRIP_STALACTITE_LAVA = Particle.DripStalactiteLava&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;DRIP_STALACTITE_WATER = Particle.DripStalactiteWater&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;DRIP_WATER = Particle.DripWater&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;DUST_FALLING = Particle.DustFalling&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;DUST_FALLING_BORDER = Particle.DustFallingBorder&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;DUST_FALLING_CONCRETE_POWDER = Particle.DustFallingConcretePowder&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;DUST_FALLING_DRAGON_EGG = Particle.DustFallingDragonEgg&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;DUST_FALLING_GRAVEL = Particle.DustFallingGravel&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;DUST_FALLING_RED_SAND = Particle.DustFallingRedSand&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;DUST_FALLING_SAND = Particle.DustFallingSand&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;DUST_FALLING_SCAFFOLDING = Particle.DustFallingScaffolding&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;DUST_FALLING_TOP_SNOW = Particle.DustFallingTopSnow&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;DUST_LAB_TABLE_HEATBLOCK = Particle.DustLabTableHeatblock&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;DUST_MYCELIUM = Particle.DustMycelium&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;DUST_OBSIDIAN_GLOW = Particle.DustObsidianGlow&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;DUST_REDSTONE_ORE = Particle.DustRedstoneOre&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;DUST_REDSTONE_REPEATER = Particle.DustRedstoneRepeater&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;DUST_REDSTONE_TORCH = Particle.DustRedstoneTorch&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;DUST_REDSTONE_WIRE = Particle.DustRedstoneWire&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;DUST_RISING_BORDER = Particle.DustRisingBorder&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;EGG_DESTROY = Particle.EggDestroy&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;ELEPHANT_TOOTH_PASTE_VAPOR = Particle.ElephantToothPasteVapor&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;ENCHANTING_TABLE = Particle.EnchantingTable&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;END_CHEST = Particle.EndChest&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;ENDROD = Particle.Endrod&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;EVOCATION_FANG_PARTICLE = Particle.EvocationFang&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;EXPLOSION = Particle.Explosion&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;EXPLOSION_CAMERA_SHOOT = Particle.ExplosionCameraShoot&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;EXPLOSION_CAULDRON = Particle.ExplosionCauldron&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;EXPLOSION_DEATH = Particle.ExplosionDeath&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;EXPLOSION_DRAGON_DEATH = Particle.ExplosionDragonDeath&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;EXPLOSION_DRAGON_DYING = Particle.ExplosionDragonDying&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;EXPLOSION_HUGE_LAB = Particle.ExplosionHugeLab&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;EXPLOSION_LARGE = Particle.ExplosionLarge&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;EXPLOSION_SINGLE = Particle.ExplosionSingle&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;EYEOFENDER_DEATH_EXPLODE = Particle.EyeofenderDeathExplode&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;FIRE_VAPOR = Particle.FireVapor&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;HEART = Particle.Heart&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;ICE_EVAPORATION = Particle.IceEvaporation&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;KNOCKBACK_ROAR = Particle.KnockbackRoar&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;LAB_TABLE_MYSTICAL = Particle.LabTableMystical&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;LAVA_PARTICLE = Particle.Lava&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;MAGNESIUM_SALTS = Particle.MagnesiumSalts&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;MOB_BLOCK_SPAWN = Particle.MobBlockSpawn&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;MOB_PORTAL = Particle.MobPortal&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;MOBFLAME = Particle.Mobflame&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;MOBFLAME_SINGLE = Particle.MobflameSingle&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;MOBSPELL = Particle.Mobspell&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;NOTE = Particle.Note&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;OBSIDIAN_TEAR = Particle.ObsidianTear&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;PHANTOM_TRAIL = Particle.PhantomTrail&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;PORTAL_DIRECTIONAL = Particle.PortalDirectional&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;PORTAL_REVERSE = Particle.PortalReverse&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;RAIN_SPLASH = Particle.RainSplash&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;SCULK_SENSOR_REDSTONE = Particle.SculkSensorRedstone&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;SHRIEK = Particle.Shriek&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;SHULKER_BULLET = Particle.ShulkerBullet&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;SILVERFISH_GRIEF = Particle.SilverfishGrief&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;SMOKE_BASIC = Particle.SmokeBasic&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;SMOKE_CAMPFIRE = Particle.SmokeCampfire&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;SMOKE_CAMPFIRE_TALL = Particle.SmokeCampfireTall&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;SMOKE_LLAMA_SPIT = Particle.SmokeLlamaSpit&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;SNOWFLAKE = Particle.Snowflake&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;SOUL = Particle.Soul&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;SOUL_SCULK = Particle.SoulSculk&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;SPARKLER = Particle.Sparkler&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;SPELL_ARROW = Particle.SpellArrow&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;SPELL_EVOKER = Particle.SpellEvoker&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;SPELL_SPLASH = Particle.SpellSplash&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;SPORE_BLOSSOM_AMBIENT = Particle.SporeBlossomAmbient&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;SPORE_BLOSSOM_SHOWER = Particle.SporeBlossomShower&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;STUNNED = Particle.Stunned&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;TOTEM_PARTICLE = Particle.Totem&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;TOTEM_SINGLE = Particle.TotemSingle&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;VILLAGER_ANGRY = Particle.VillagerAngry&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;VILLAGER_HAPPY = Particle.VillagerHappy&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;WATER_EVAPORATION_ACTOR = Particle.WaterEvaporationActor&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;WATER_EVAPORATION_BUCKET = Particle.WaterEvaporationBucket&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;WATER_EVAPORATION_SINGLE = Particle.WaterEvaporationSingle&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;WATER_SPLASH = Particle.WaterSplash&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;WATER_SPLASH_SINGLE = Particle.WaterSplashSingle&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;WATER_WAKE = Particle.WaterWake&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;WITHER_BOSS_INVULNERABLE = Particle.WitherBossInvulnerable&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h1 id=&quot;other&quot;&gt;Other&lt;/h1&gt;
&lt;h2 id=&quot;inventory-slot-layout&quot;&gt;Inventory Slot Layout&lt;/h2&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #A9B2C3; background-color: #21252B;&quot; &gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;| 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 |&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;|----|----|----|----|----|----|----|----|----|&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;| 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 |&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;|----|----|----|----|----|----|----|----|----|&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;| 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 |&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;</content>
        
    </entry>
    <entry xml:lang="en">
        <title>Optional - Recreational Wheel Reinvention</title>
        <published>2026-01-04T00:00:00+00:00</published>
        <updated>2026-01-04T00:00:00+00:00</updated>
        
        <author>
          <name>Unknown</name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://otdd.net/blog/rwr-optional/"/>
        <id>https://otdd.net/blog/rwr-optional/</id>
        
        <content type="html" xml:base="https://otdd.net/blog/rwr-optional/">&lt;p&gt;In my current project I&#39;m reimplementing a lot of functionality provided by the C++ standard library. Mostly for fun, but also to learn about what lies under the hood of the structures and functions that I regularly use. So I decided to write a couple of blog posts documenting this journey. And to start I chose to go with a structure so useful when the result of the function is not guaranteed - &lt;code&gt;std::optional&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Table of contents&lt;/strong&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://otdd.net/blog/rwr-optional/#expectations&quot;&gt;Expectations&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://otdd.net/blog/rwr-optional/#naive-implementation&quot;&gt;Naive implementation&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://otdd.net/blog/rwr-optional/#delayed-initialization&quot;&gt;Delayed initialization&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://otdd.net/blog/rwr-optional/#improved-implementation&quot;&gt;Improved implementation&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://otdd.net/blog/rwr-optional/#nullopt&quot;&gt;NullOpt&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://otdd.net/blog/rwr-optional/#rest-of-the-api&quot;&gt;Rest of the API&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://otdd.net/blog/rwr-optional/#conclusion&quot;&gt;Conclusion&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;em&gt;Full source code can be found &lt;a rel=&quot;external&quot; href=&quot;https://github.com/anupyldd/rwr/blob/master/src/Optional.h&quot;&gt;here&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;h3 id=&quot;expectations&quot;&gt;Expectations&lt;/h3&gt;
&lt;p&gt;In these posts I don&#39;t plan on making my implementations fully compliant with the C++ standard - it&#39;d be too tedious and frankly unnecessary for my case. Instead, I&#39;ll look at how the thing is commonly used, what functionality is expected from it, and try to satisfy that.&lt;/p&gt;
&lt;p&gt;That said, let&#39;s look at &lt;code&gt;std::optional&lt;/code&gt;. I mostly use it as a return type for functions where the presence of the return value is not guaranteed:&lt;/p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #A9B2C3; background-color: #21252B;&quot; &gt;&lt;code data-lang=&quot;cpp&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #61AFEF;&quot;&gt;auto&lt;/span&gt;&lt;span style=&quot;color: #B57EDC;&quot;&gt; AsInt&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span style=&quot;color: #61AFEF;&quot;&gt;const&lt;/span&gt;&lt;span&gt; std::&lt;/span&gt;&lt;span style=&quot;color: #E5C07B;&quot;&gt;string&lt;/span&gt;&lt;span style=&quot;color: #61AFEF;&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span style=&quot;color: #C6CCD7;&quot;&gt; str&lt;/span&gt;&lt;span&gt;) -&amp;gt; std::&lt;/span&gt;&lt;span style=&quot;color: #E5C07B;&quot;&gt;optional&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #61AFEF;&quot;&gt;int&lt;/span&gt;&lt;span&gt;&amp;gt; &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;{&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #E06C75;&quot;&gt;    try&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;span style=&quot;color: #E06C75;&quot;&gt; return&lt;/span&gt;&lt;span&gt; std::&lt;/span&gt;&lt;span style=&quot;color: #B57EDC;&quot;&gt;stoi&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span style=&quot;color: #C6CCD7;&quot;&gt;str&lt;/span&gt;&lt;span&gt;); }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #E06C75;&quot;&gt;    catch&lt;/span&gt;&lt;span&gt;(...) {&lt;/span&gt;&lt;span style=&quot;color: #E06C75;&quot;&gt; return&lt;/span&gt;&lt;span&gt; std::&lt;/span&gt;&lt;span style=&quot;color: #C6CCD7;&quot;&gt;nullopt&lt;/span&gt;&lt;span&gt;; }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #E06C75;&quot;&gt;if&lt;/span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span style=&quot;color: #61AFEF;&quot;&gt;auto&lt;/span&gt;&lt;span style=&quot;color: #C6CCD7;&quot;&gt; val&lt;/span&gt;&lt;span style=&quot;color: #E06C75;&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;color: #B57EDC;&quot;&gt; AsInt&lt;/span&gt;&lt;span&gt;(&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: #98C379;&quot;&gt;123&lt;/span&gt;&lt;span&gt;&amp;quot;)) std::&lt;/span&gt;&lt;span style=&quot;color: #C6CCD7;&quot;&gt;cout&lt;/span&gt;&lt;span style=&quot;color: #E06C75;&quot;&gt; &amp;lt;&amp;lt; *&lt;/span&gt;&lt;span style=&quot;color: #C6CCD7;&quot;&gt;val&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;span style=&quot;color: #5F6672;font-style: italic;&quot;&gt;   // prints 123&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #E06C75;&quot;&gt;if&lt;/span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span style=&quot;color: #61AFEF;&quot;&gt;auto&lt;/span&gt;&lt;span style=&quot;color: #C6CCD7;&quot;&gt; val&lt;/span&gt;&lt;span style=&quot;color: #E06C75;&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;color: #B57EDC;&quot;&gt; AsInt&lt;/span&gt;&lt;span&gt;(&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: #98C379;&quot;&gt;hello&lt;/span&gt;&lt;span&gt;&amp;quot;)) std::&lt;/span&gt;&lt;span style=&quot;color: #C6CCD7;&quot;&gt;cout&lt;/span&gt;&lt;span style=&quot;color: #E06C75;&quot;&gt; &amp;lt;&amp;lt; *&lt;/span&gt;&lt;span style=&quot;color: #C6CCD7;&quot;&gt;val&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;span style=&quot;color: #5F6672;font-style: italic;&quot;&gt; // doesn&amp;#39;t print&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Sometimes I also use it to signify that some field in a structure might not be present:&lt;/p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #A9B2C3; background-color: #21252B;&quot; &gt;&lt;code data-lang=&quot;cpp&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #61AFEF;&quot;&gt;struct&lt;/span&gt;&lt;span style=&quot;color: #E5C07B;&quot;&gt; Person&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;{&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    std::&lt;/span&gt;&lt;span style=&quot;color: #E5C07B;&quot;&gt;string&lt;/span&gt;&lt;span style=&quot;color: #C6CCD7;&quot;&gt; name&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    std::&lt;/span&gt;&lt;span style=&quot;color: #E5C07B;&quot;&gt;optional&lt;/span&gt;&lt;span&gt;&amp;lt;std::&lt;/span&gt;&lt;span style=&quot;color: #E5C07B;&quot;&gt;string&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #C6CCD7;&quot;&gt; middleName&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;span style=&quot;color: #5F6672;font-style: italic;&quot;&gt; // not everyone &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #5F6672;font-style: italic;&quot;&gt;                                           // has a middle name&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;};&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;From these short examples we can see certain qualities our implementation should satisfy. It should:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;work with any type,&lt;/li&gt;
&lt;li&gt;be implicitly constructed from said type,&lt;/li&gt;
&lt;li&gt;be able to convert to &lt;code&gt;bool&lt;/code&gt;,&lt;/li&gt;
&lt;li&gt;provide a way to get the actual value,&lt;/li&gt;
&lt;li&gt;provide some way to say &quot;there&#39;s no value&quot; (&lt;code&gt;std::nullopt&lt;/code&gt; in
the case of the standard library).&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;With these in mind let&#39;s move on to the implementation. In my code I&#39;ll be using the name &lt;code&gt;Opt&lt;/code&gt; instead of &lt;code&gt;optional&lt;/code&gt; since I&#39;ve lately become fond of concise names, but that shouldn&#39;t be an issue.&lt;/p&gt;
&lt;h3 id=&quot;naive-implementation&quot;&gt;Naive implementation&lt;/h3&gt;
&lt;p&gt;Our first thought could be to make a structure like this:&lt;/p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #A9B2C3; background-color: #21252B;&quot; &gt;&lt;code data-lang=&quot;cpp&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #61AFEF;&quot;&gt;template&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #61AFEF;&quot;&gt;typename&lt;/span&gt;&lt;span style=&quot;color: #E5C07B;&quot;&gt; T&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #61AFEF;&quot;&gt;class&lt;/span&gt;&lt;span style=&quot;color: #E5C07B;&quot;&gt; Opt&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;{&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #E5C07B;&quot;&gt;    T&lt;/span&gt;&lt;span style=&quot;color: #C6CCD7;&quot;&gt; value&lt;/span&gt;&lt;span&gt;;     &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #61AFEF;&quot;&gt;    bool&lt;/span&gt;&lt;span style=&quot;color: #C6CCD7;&quot;&gt; hasValue&lt;/span&gt;&lt;span style=&quot;color: #E06C75;&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;color: #56B6C2;&quot;&gt; false&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #61AFEF;&quot;&gt;public&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #5F6672;font-style: italic;&quot;&gt;    // public API&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;};&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;It consists of a &lt;code&gt;value&lt;/code&gt; that can be optionally stored, and a &lt;code&gt;hasValue&lt;/code&gt; flag to show if the value is present.&lt;/p&gt;
&lt;p&gt;This code, however, has a significant drawback: it tries to construct the value even if it is not present. It&#39;s not a big deal if it&#39;s something like an &lt;code&gt;int&lt;/code&gt; or a simple structure, but if the constructor is complex and has side-effects (e.g. is used for static initialization), this becomes a problem. Also, if the default constructor is not present at all, something like this won&#39;t compile at all:&lt;/p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #A9B2C3; background-color: #21252B;&quot; &gt;&lt;code data-lang=&quot;cpp&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #C6CCD7;&quot;&gt;Opt&lt;/span&gt;&lt;span style=&quot;color: #E06C75;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #C6CCD7;&quot;&gt;Test&lt;/span&gt;&lt;span style=&quot;color: #E06C75;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #C6CCD7;&quot;&gt; o&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #5F6672;font-style: italic;&quot;&gt;// error: no matching function for call to &amp;#39;Test::Test()&amp;#39;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;To fix this we need to find a way to delay the initialization of the &lt;code&gt;value&lt;/code&gt; field.&lt;/p&gt;
&lt;h3 id=&quot;delayed-initialization&quot;&gt;Delayed initialization&lt;/h3&gt;
&lt;p&gt;The preferred way to do this post-C++17 is to use the &lt;code&gt;std::optional&lt;/code&gt; for the field. Unfortunately, we&#39;ve voluntarily put ourselves into the pre-wheel era, so we have to look further.&lt;/p&gt;
&lt;p&gt;We could make it a pointer, either raw or smart one. This would work, since the pointer can be initialized at any point after the object itself was created. However, adding a level of indirection seems like an overkill for simpler &lt;code&gt;T&lt;/code&gt;s.&lt;/p&gt;
&lt;p&gt;Another way is to allocate memory for the member upfront and call the constructor later. This could be achieved with something like&lt;/p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #A9B2C3; background-color: #21252B;&quot; &gt;&lt;code data-lang=&quot;cpp&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #61AFEF;&quot;&gt;typename&lt;/span&gt;&lt;span&gt; std::aligned_storage&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #E06C75;&quot;&gt;sizeof&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span style=&quot;color: #C6CCD7;&quot;&gt;T&lt;/span&gt;&lt;span&gt;),&lt;/span&gt;&lt;span style=&quot;color: #E06C75;&quot;&gt; alignof&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span style=&quot;color: #C6CCD7;&quot;&gt;T&lt;/span&gt;&lt;span&gt;)&amp;gt;::&lt;/span&gt;&lt;span style=&quot;color: #E5C07B;&quot;&gt;type&lt;/span&gt;&lt;span style=&quot;color: #C6CCD7;&quot;&gt; storage&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #5F6672;font-style: italic;&quot;&gt;// alternatively&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #E06C75;&quot;&gt;alignas&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span style=&quot;color: #C6CCD7;&quot;&gt;T&lt;/span&gt;&lt;span&gt;) std::&lt;/span&gt;&lt;span style=&quot;color: #C6CCD7;&quot;&gt;byte storage&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span style=&quot;color: #E06C75;&quot;&gt;sizeof&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span style=&quot;color: #C6CCD7;&quot;&gt;T&lt;/span&gt;&lt;span&gt;)];&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #5F6672;font-style: italic;&quot;&gt;// alternatively to the alternative&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;std::&lt;/span&gt;&lt;span style=&quot;color: #C6CCD7;&quot;&gt;byte storage&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span style=&quot;color: #E06C75;&quot;&gt;sizeof&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span style=&quot;color: #C6CCD7;&quot;&gt;T&lt;/span&gt;&lt;span&gt;)];&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Here we reserve the memory for a member of type &lt;code&gt;T&lt;/code&gt;. Later we can call a constructor with &lt;code&gt;placement new&lt;/code&gt; to construct the object in the storage. This would also work, but it adds plenty of complexity, since we now need to manually control the bytes and alignment, rely on &lt;code&gt;reinterpret_cast&lt;/code&gt; and so on. If only there was a way to make the compiler do it for us...&lt;/p&gt;
&lt;p&gt;And what do you know, there is one in the face of a &lt;code&gt;union&lt;/code&gt;. If we refer to the ever-so-helpful &lt;a rel=&quot;external&quot; href=&quot;https://en.cppreference.com/w/cpp/language/union.html&quot;&gt;cppreference&lt;/a&gt;, we can see that &lt;em&gt;&quot;The union is at least as big as necessary to hold its largest data member&quot;&lt;/em&gt;, and &lt;em&gt;&quot;The lifetime of a union member begins when the member is made active.&quot;&lt;/em&gt;. That means that if we put our &lt;code&gt;T value&lt;/code&gt; from before inside a union, the compiler will:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;control the size of storage for us,&lt;/li&gt;
&lt;li&gt;not actually construct the member unless we set its value.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;We&#39;ll still need to control proper construction/destruction, and make sure not to access an uninitialized value, but I feel like it&#39;s manageable. The main problem this approach introduces is that your IDE will probably scream at you about having an uninitialized member, but we&#39;ll politely ignore its tantrums and proceed.&lt;/p&gt;
&lt;h3 id=&quot;improved-implementation&quot;&gt;Improved implementation&lt;/h3&gt;
&lt;p&gt;With our new handy union, the class now looks like this:&lt;/p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #A9B2C3; background-color: #21252B;&quot; &gt;&lt;code data-lang=&quot;cpp&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #61AFEF;&quot;&gt;template&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #61AFEF;&quot;&gt;typename&lt;/span&gt;&lt;span style=&quot;color: #E5C07B;&quot;&gt; T&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #61AFEF;&quot;&gt;class&lt;/span&gt;&lt;span style=&quot;color: #E5C07B;&quot;&gt; Opt&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;{&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #61AFEF;&quot;&gt;    union&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;span style=&quot;color: #C6CCD7;&quot;&gt; T value&lt;/span&gt;&lt;span&gt;; };&lt;/span&gt;&lt;span style=&quot;color: #5F6672;font-style: italic;&quot;&gt; // specifically, I&amp;#39;m using an&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #5F6672;font-style: italic;&quot;&gt;                        // anonymous union here&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #61AFEF;&quot;&gt;    bool&lt;/span&gt;&lt;span style=&quot;color: #C6CCD7;&quot;&gt; hasValue&lt;/span&gt;&lt;span style=&quot;color: #E06C75;&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;color: #56B6C2;&quot;&gt; false&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #61AFEF;&quot;&gt;private&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #61AFEF;&quot;&gt;    auto&lt;/span&gt;&lt;span style=&quot;color: #B57EDC;&quot;&gt; Destroy&lt;/span&gt;&lt;span&gt;() {&lt;/span&gt;&lt;span style=&quot;color: #E06C75;&quot;&gt; if&lt;/span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span style=&quot;color: #C6CCD7;&quot;&gt;hasValue&lt;/span&gt;&lt;span&gt;) {&lt;/span&gt;&lt;span style=&quot;color: #C6CCD7;&quot;&gt; value&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span style=&quot;color: #B57EDC;&quot;&gt;~T&lt;/span&gt;&lt;span&gt;();&lt;/span&gt;&lt;span style=&quot;color: #C6CCD7;&quot;&gt; hasValue&lt;/span&gt;&lt;span style=&quot;color: #E06C75;&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;color: #56B6C2;&quot;&gt; false&lt;/span&gt;&lt;span&gt;; } }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #61AFEF;&quot;&gt;public&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #61AFEF;&quot;&gt;    constexpr&lt;/span&gt;&lt;span style=&quot;color: #B57EDC;&quot;&gt; Opt&lt;/span&gt;&lt;span&gt;() {&lt;/span&gt;&lt;span style=&quot;color: #5F6672;font-style: italic;&quot;&gt; /* empty constructor */&lt;/span&gt;&lt;span&gt; }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #61AFEF;&quot;&gt;    constexpr&lt;/span&gt;&lt;span style=&quot;color: #B57EDC;&quot;&gt; ~Opt&lt;/span&gt;&lt;span&gt;() {&lt;/span&gt;&lt;span style=&quot;color: #B57EDC;&quot;&gt; Destroy&lt;/span&gt;&lt;span&gt;(); }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #5F6672;font-style: italic;&quot;&gt;    // the rest of the public API&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;};&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Notice that the &lt;code&gt;Opt()&lt;/code&gt; constructor is created as explicitly empty. If I were to write &lt;code&gt;Opt() = default;&lt;/code&gt;, the default compiler-generated constructor would&#39;ve tried to default-initialize all members of the class (including &lt;code&gt;value&lt;/code&gt;) with some value. This would: 1) be undesirable, and 2) break if the &lt;code&gt;T&lt;/code&gt; were non-trivial.&lt;/p&gt;
&lt;p&gt;The destructor calls the private &lt;code&gt;Destroy()&lt;/code&gt; method which in turn manually calls the value&#39;s destructor. I&#39;ve put it in a separate method since we&#39;ll need it later.&lt;/p&gt;
&lt;h4 id=&quot;nullopt&quot;&gt;NullOpt&lt;/h4&gt;
&lt;p&gt;Before we look at the rest of the constructors and operators, we need to satisfy another requirement we set for our optional. That being the &quot;no value present&quot; value.
In the standard library we have &lt;code&gt;nullopt&lt;/code&gt; for this
purpose. It is a constant object of the &lt;code&gt;nullopt_t&lt;/code&gt;,
which is a tag type, meaning its only purpose is to show
that optional has no value. It&#39;s defined &lt;a rel=&quot;external&quot; href=&quot;https://en.cppreference.com/w/cpp/utility/optional/nullopt_t.html&quot;&gt;like this&lt;/a&gt;:&lt;/p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #A9B2C3; background-color: #21252B;&quot; &gt;&lt;code data-lang=&quot;cpp&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #61AFEF;&quot;&gt;struct&lt;/span&gt;&lt;span style=&quot;color: #E5C07B;&quot;&gt; nullopt_t&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;{&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #61AFEF;&quot;&gt;    constexpr explicit&lt;/span&gt;&lt;span style=&quot;color: #B57EDC;&quot;&gt; nullopt_t&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span style=&quot;color: #61AFEF;&quot;&gt;int&lt;/span&gt;&lt;span&gt;) {}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;};&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;As the note at cppreference says, the constructor is there &lt;em&gt;&quot;to support both &lt;code&gt;op = {};&lt;/code&gt; and &lt;code&gt;op = nullopt;&lt;/code&gt; as the syntax for disengaging an optional object.&quot;&lt;/em&gt;. And this is not a default constructor to prevent ambiguity in the case of brace-initialization. This is understandable, and we&#39;ll also support the &lt;code&gt;{}&lt;/code&gt; syntax for disengaging the object, but in a different way.&lt;/p&gt;
&lt;p&gt;So for our purposes we can define the structure as follows:&lt;/p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #A9B2C3; background-color: #21252B;&quot; &gt;&lt;code data-lang=&quot;cpp&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #61AFEF;&quot;&gt;struct&lt;/span&gt;&lt;span style=&quot;color: #E5C07B;&quot;&gt; NullOpt&lt;/span&gt;&lt;span&gt; {};&lt;/span&gt;&lt;span style=&quot;color: #5F6672;font-style: italic;&quot;&gt;  // no constructor&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #61AFEF;&quot;&gt;inline constexpr&lt;/span&gt;&lt;span style=&quot;color: #C6CCD7;&quot;&gt; NullOpt nopt&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h4 id=&quot;rest-of-the-api&quot;&gt;Rest of the API&lt;/h4&gt;
&lt;p&gt;The convenience of &lt;code&gt;std::optional&lt;/code&gt; is partly in the ways it can be constructed, those being almost all the ways. This way we can assign values, return values from functions, etc. without wrapping them in &lt;code&gt;optional{val}&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;To accommodate for such syntax we&#39;ll provide a bunch of copy- and move-constructors and assignment operators. One thing we need to keep in mind is the way we construct the &lt;code&gt;value&lt;/code&gt; in our union. If we just did &lt;code&gt;value = newValue&lt;/code&gt;, it would work only for trivially constructed types, not for anything more complex. To solve this, we can use &lt;code&gt;placement new&lt;/code&gt; specifying &lt;code&gt;value&lt;/code&gt; as the memory we construct the object in:&lt;/p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #A9B2C3; background-color: #21252B;&quot; &gt;&lt;code data-lang=&quot;cpp&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #E06C75;&quot;&gt;new&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span style=&quot;color: #E06C75;&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span style=&quot;color: #C6CCD7;&quot;&gt;value&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span style=&quot;color: #B57EDC;&quot;&gt; T&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span style=&quot;color: #C6CCD7;&quot;&gt;newValue&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;We also need to appropriately &lt;code&gt;Destroy()&lt;/code&gt; the value when assigning empty optionals or moving from other optionals.&lt;/p&gt;
&lt;p&gt;As for the &lt;code&gt;NullOpt&lt;/code&gt;, we provide the appropriate constructor and assignment operator, and that would be enough for writing &lt;code&gt;myOpt = nopt&lt;/code&gt;, but that&#39;s still not enough for &lt;code&gt;myOpt = {}&lt;/code&gt;, since the latter would evaluate &lt;code&gt;{}&lt;/code&gt; to a default-constructed object of type &lt;code&gt;myOpt&lt;/code&gt; was templated on.&lt;/p&gt;
&lt;p&gt;To fix this, we simply add another constructor:&lt;/p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #A9B2C3; background-color: #21252B;&quot; &gt;&lt;code data-lang=&quot;cpp&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #61AFEF;&quot;&gt;template&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #61AFEF;&quot;&gt;typename&lt;/span&gt;&lt;span style=&quot;color: #E5C07B;&quot;&gt; T&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #61AFEF;&quot;&gt;constexpr auto&lt;/span&gt;&lt;span&gt; Opt&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #E5C07B;&quot;&gt;T&lt;/span&gt;&lt;span&gt;&amp;gt;::&lt;/span&gt;&lt;span style=&quot;color: #E06C75;&quot;&gt;operator&lt;/span&gt;&lt;span&gt; = (std::&lt;/span&gt;&lt;span style=&quot;color: #E5C07B;&quot;&gt;initializer_list&lt;/span&gt;&lt;span&gt;&amp;lt;std::&lt;/span&gt;&lt;span style=&quot;color: #E5C07B;&quot;&gt;nullptr_t&lt;/span&gt;&lt;span&gt;&amp;gt;) -&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #C6CCD7;&quot;&gt; Opt&lt;/span&gt;&lt;span style=&quot;color: #E06C75;&quot;&gt;&amp;amp;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;{&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #B57EDC;&quot;&gt;    Destroy&lt;/span&gt;&lt;span&gt;();&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #E06C75;&quot;&gt;    return *this&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;This will lead to &lt;code&gt;{}&lt;/code&gt; being evaluated as an empty initializer list and this operator overload being selected. In it, we just destroy the value as we wanted in the case of &lt;code&gt;= {}&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;For accessing the value we define appropriate &lt;code&gt;*&lt;/code&gt; and &lt;code&gt;-&amp;gt;&lt;/code&gt; operators. For my purposes, I don&#39;t yet need the &lt;code&gt;value()&lt;/code&gt; or &lt;code&gt;value_or()&lt;/code&gt; methods, but they can be easily implemented. Since these operators do not check if the value is actually present, I just added an assert for debugging purposes:&lt;/p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #A9B2C3; background-color: #21252B;&quot; &gt;&lt;code data-lang=&quot;cpp&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #61AFEF;&quot;&gt;template&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #61AFEF;&quot;&gt;typename&lt;/span&gt;&lt;span style=&quot;color: #E5C07B;&quot;&gt; T&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #61AFEF;&quot;&gt;constexpr auto&lt;/span&gt;&lt;span&gt; Opt&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #E5C07B;&quot;&gt;T&lt;/span&gt;&lt;span&gt;&amp;gt;::&lt;/span&gt;&lt;span style=&quot;color: #E06C75;&quot;&gt;operator&lt;/span&gt;&lt;span&gt; * ()&lt;/span&gt;&lt;span style=&quot;color: #E06C75;&quot;&gt; &amp;amp; -&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #C6CCD7;&quot;&gt; T&lt;/span&gt;&lt;span style=&quot;color: #E06C75;&quot;&gt;&amp;amp;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;{&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #B57EDC;&quot;&gt;    assert&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span style=&quot;color: #C6CCD7;&quot;&gt;hasValue&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #E06C75;&quot;&gt;    return&lt;/span&gt;&lt;span style=&quot;color: #C6CCD7;&quot;&gt; value&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;And of course, the &lt;code&gt;bool()&lt;/code&gt; operator is as simple as:&lt;/p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #A9B2C3; background-color: #21252B;&quot; &gt;&lt;code data-lang=&quot;cpp&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #61AFEF;&quot;&gt;template&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #61AFEF;&quot;&gt;typename&lt;/span&gt;&lt;span style=&quot;color: #E5C07B;&quot;&gt; T&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #61AFEF;&quot;&gt;constexpr&lt;/span&gt;&lt;span&gt; Opt&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #E5C07B;&quot;&gt;T&lt;/span&gt;&lt;span&gt;&amp;gt;::&lt;/span&gt;&lt;span style=&quot;color: #E06C75;&quot;&gt;operator&lt;/span&gt;&lt;span&gt; bool()&lt;/span&gt;&lt;span style=&quot;color: #61AFEF;&quot;&gt; const&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;{&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #E06C75;&quot;&gt;    return&lt;/span&gt;&lt;span style=&quot;color: #C6CCD7;&quot;&gt; hasValue&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h3 id=&quot;conclusion&quot;&gt;Conclusion&lt;/h3&gt;
&lt;p&gt;In the end, we have a simplified but functional implementation of the &lt;code&gt;optional&lt;/code&gt;. This could be expanded but for now I don&#39;t have such a need. I hope to continue this series exploring various aspects of the standard library.&lt;/p&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>Exploring macro-free testing in modern C++</title>
        <published>2025-12-14T00:00:00+00:00</published>
        <updated>2025-12-14T00:00:00+00:00</updated>
        
        <author>
          <name>Unknown</name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://otdd.net/blog/nmtest-2/"/>
        <id>https://otdd.net/blog/nmtest-2/</id>
        
        <content type="html" xml:base="https://otdd.net/blog/nmtest-2/">&lt;p&gt;Some time ago I &lt;a href=&quot;https://otdd.net/blog/nmtest-2/nmtest-1.md&quot;&gt;wrote a blogpost&lt;/a&gt; about a basic C++ unit-testing library I made that aimed to use no macros, unlike many established frameworks like gtest. I got some great feedback after that and decided to improve the library and release it as a standalone project. It&#39;s not intended to stand up to the giants, but is more of a fun little experiment on what a library like this could look like. Enter &lt;strong&gt;&lt;a rel=&quot;external&quot; href=&quot;https://github.com/anupyldd/nmtest&quot;&gt;nmtest&lt;/a&gt;&lt;/strong&gt;.&lt;/p&gt;
&lt;h3 id=&quot;table-of-contents&quot;&gt;Table of contents:&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://otdd.net/blog/nmtest-2/#why-no-macros&quot;&gt;Why no macros?&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://otdd.net/blog/nmtest-2/#nmtest&quot;&gt;nmtest&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://otdd.net/blog/nmtest-2/#general-structure&quot;&gt;General structure&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://otdd.net/blog/nmtest-2/#cleaning-up-test-functions&quot;&gt;Cleaning up test functions&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://otdd.net/blog/nmtest-2/#automatic-test-discovery&quot;&gt;Automatic test discovery&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://otdd.net/blog/nmtest-2/#the-obvious-solution-and-why-it-s-not-enough&quot;&gt;The obvious solution and why it&#39;s not enough&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://otdd.net/blog/nmtest-2/#global-scope&quot;&gt;Global scope&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://otdd.net/blog/nmtest-2/#templates-to-the-rescue&quot;&gt;Templates to the rescue&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://otdd.net/blog/nmtest-2/#test-filtering-and-cli&quot;&gt;Test filtering and CLI&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://otdd.net/blog/nmtest-2/#conclusion&quot;&gt;Conclusion&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;why-no-macros&quot;&gt;Why no macros?&lt;/h2&gt;
&lt;p&gt;Before diving deeper into the implementation, I&#39;d like to answer the question I got a couple of times: &lt;em&gt;why avoid macros?&lt;/em&gt; And that&#39;s a valid thing to ask: as we&#39;ll see later, some tasks are quite hard to do even in modern C++ without them.&lt;/p&gt;
&lt;p&gt;To be honest, the first and main reason is that this was a self-imposed challenge I did for fun. I saw that many major testing frameworks are very macro-heavy and wanted to see if I could do without them.&lt;/p&gt;
&lt;p&gt;However, there are also several objective reasons to avoid macros in general. They bypass type-checking, make you rely on your IDE too much, and are a pain to debug. Moreover, the C++20 modules encourage reducing the use of macros by prohibiting their export.&lt;/p&gt;
&lt;h2 id=&quot;nmtest&quot;&gt;nmtest&lt;/h2&gt;
&lt;p&gt;Now let&#39;s get back to the library itself. The list of changes I wanted to make since the last post included:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;better general structure,&lt;/li&gt;
&lt;li&gt;better test functions,&lt;/li&gt;
&lt;li&gt;automatic test discovery,&lt;/li&gt;
&lt;li&gt;test filtering,&lt;/li&gt;
&lt;li&gt;CLI.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Such libraries often include other things like test order shuffling, timing, etc., but I decided to focus on the things listed above for now.&lt;/p&gt;
&lt;h3 id=&quot;general-structure&quot;&gt;General structure&lt;/h3&gt;
&lt;p&gt;Improvements to the structure began with restructuring of the code file. I wanted to still have the whole library in one file, so I separated its contents into several namespaces:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;nm&lt;/code&gt; for the user API,&lt;/li&gt;
&lt;li&gt;&lt;code&gt;impl&lt;/code&gt; for the implementation details,&lt;/li&gt;
&lt;li&gt;&lt;code&gt;fmt&lt;/code&gt; for everything related to text formatting and output,&lt;/li&gt;
&lt;li&gt;and &lt;code&gt;types&lt;/code&gt; for a couple of type-checking utilities.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Since I&#39;m using C++20 modules, I could export only the &lt;code&gt;nm&lt;/code&gt; namespace and keep the others hidden.&lt;/p&gt;
&lt;p&gt;The structure of the test storage was also changed. First of all, the ability to create custom &lt;code&gt;Registry&lt;/code&gt; objects was removed. Besides being redundant &lt;em&gt;(generally, you need one registry per project)&lt;/em&gt;, creating custom registries could be a serious obstacle to automatic test registration.&lt;/p&gt;
&lt;p&gt;So, now there&#39;s only one global registry that stores suites and tests in a tree-like structure. I opted for the tree and not the flat-storage-with-indices structure, since it&#39;s generally easier to reason about as a developer, even though flat storage is generally more performant for filtering.&lt;/p&gt;
&lt;h3 id=&quot;cleaning-up-test-functions&quot;&gt;Cleaning up test functions&lt;/h3&gt;
&lt;p&gt;Another improvement I wanted to include is one to the test functions. Previously, they returned the &lt;code&gt;Report&lt;/code&gt; structure to collect the information on different checks and asserts. However, that meant, that even for the simplest tests you had to write&lt;/p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #A9B2C3; background-color: #21252B;&quot; &gt;&lt;code data-lang=&quot;cpp&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #E06C75;&quot;&gt;return&lt;/span&gt;&lt;span style=&quot;color: #C6CCD7;&quot;&gt; Report&lt;/span&gt;&lt;span&gt;{}&lt;/span&gt;&lt;span style=&quot;color: #E06C75;&quot;&gt; &amp;amp;&lt;/span&gt;&lt;span style=&quot;color: #B57EDC;&quot;&gt; Equal&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span style=&quot;color: #56B6C2;&quot;&gt;1&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span style=&quot;color: #56B6C2;&quot;&gt; 2&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;This was quite inconvenient, so I decided to move the storage of fail info from the &lt;code&gt;Report&lt;/code&gt; to the &lt;code&gt;Result&lt;/code&gt; structure, which all built-in functions already return. This means that you now don&#39;t need &lt;code&gt;Report&lt;/code&gt; at all, and can just write:&lt;/p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #A9B2C3; background-color: #21252B;&quot; &gt;&lt;code data-lang=&quot;cpp&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #E06C75;&quot;&gt;return&lt;/span&gt;&lt;span style=&quot;color: #B57EDC;&quot;&gt; Equal&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span style=&quot;color: #56B6C2;&quot;&gt;1&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span style=&quot;color: #56B6C2;&quot;&gt; 2&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;while preserving all the information on test failures like before. As for chaining, it still works like before, allowing any number of checks be performed in the same test:&lt;/p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #A9B2C3; background-color: #21252B;&quot; &gt;&lt;code data-lang=&quot;cpp&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #E06C75;&quot;&gt;return&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #B57EDC;&quot;&gt;  Equal&lt;/span&gt;&lt;span&gt;   (&lt;/span&gt;&lt;span style=&quot;color: #56B6C2;&quot;&gt;3&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span style=&quot;color: #56B6C2;&quot;&gt; 5&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #E06C75;&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span style=&quot;color: #B57EDC;&quot;&gt; Equal&lt;/span&gt;&lt;span&gt;   (&lt;/span&gt;&lt;span style=&quot;color: #56B6C2;&quot;&gt;1&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span style=&quot;color: #56B6C2;&quot;&gt; 1&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #E06C75;&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span style=&quot;color: #B57EDC;&quot;&gt; NotEqual&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span style=&quot;color: #56B6C2;&quot;&gt;2&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span style=&quot;color: #56B6C2;&quot;&gt; 2&lt;/span&gt;&lt;span&gt;, &amp;quot;&lt;/span&gt;&lt;span style=&quot;color: #98C379;&quot;&gt;custom message&lt;/span&gt;&lt;span&gt;&amp;quot;);&lt;/span&gt;&lt;span style=&quot;color: #5F6672;font-style: italic;&quot;&gt; // oh yeah, and custom error &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #5F6672;font-style: italic;&quot;&gt;                                    // messages are now also supported&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;The test result output became a bit more concise, but looks similar to the previous version:&lt;/p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #A9B2C3; background-color: #21252B;&quot; &gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;[   PASS] Addition&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;[X  FAIL] Subtraction:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;          - Equal(1:5) | main.cpp:146&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;          - NotEqual(2:2) | main.cpp:148 | custom message&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h3 id=&quot;automatic-test-discovery&quot;&gt;Automatic test discovery&lt;/h3&gt;
&lt;h4 id=&quot;the-obvious-solution-and-why-it-s-not-enough&quot;&gt;The obvious solution and why it&#39;s not enough&lt;/h4&gt;
&lt;p&gt;This was the most interesting part of the project, even though at first it seems quite simple. Since in this project I&#39;m mainly experimenting, I&#39;ve left several ways to create a test available in the API, just as a demonstration of how it could be implemented.&lt;/p&gt;
&lt;p&gt;If a test is created in a function, then automatically registering it poses no challenge: you can just make a function that receives all test info through the parameters, and then register it in the body. Alternatively, you can choose to make an object that registers the test in the constructor. This was the first implementation I added, although I did break it down into several methods a user can chain:&lt;/p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #A9B2C3; background-color: #21252B;&quot; &gt;&lt;code data-lang=&quot;cpp&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #B57EDC;&quot;&gt;Test&lt;/span&gt;&lt;span&gt;      (&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: #98C379;&quot;&gt;suite name&lt;/span&gt;&lt;span&gt;&amp;quot;, &amp;quot;&lt;/span&gt;&lt;span style=&quot;color: #98C379;&quot;&gt;test name&lt;/span&gt;&lt;span&gt;&amp;quot;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;.&lt;/span&gt;&lt;span style=&quot;color: #B57EDC;&quot;&gt;Setup&lt;/span&gt;&lt;span&gt;    ([]{&lt;/span&gt;&lt;span style=&quot;color: #5F6672;font-style: italic;&quot;&gt; /* optional setup function */&lt;/span&gt;&lt;span&gt; })&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;.&lt;/span&gt;&lt;span style=&quot;color: #B57EDC;&quot;&gt;Teardown&lt;/span&gt;&lt;span&gt; ([]{&lt;/span&gt;&lt;span style=&quot;color: #5F6672;font-style: italic;&quot;&gt; /* optional teardown function */&lt;/span&gt;&lt;span&gt; })&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;.&lt;/span&gt;&lt;span style=&quot;color: #B57EDC;&quot;&gt;Tags&lt;/span&gt;&lt;span&gt;     ({&lt;/span&gt;&lt;span style=&quot;color: #5F6672;font-style: italic;&quot;&gt; /* optional tag list */&lt;/span&gt;&lt;span&gt; })&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;.&lt;/span&gt;&lt;span style=&quot;color: #B57EDC;&quot;&gt;Func&lt;/span&gt;&lt;span&gt;     ([]{&lt;/span&gt;&lt;span style=&quot;color: #E06C75;&quot;&gt; return&lt;/span&gt;&lt;span style=&quot;color: #B57EDC;&quot;&gt; Equal&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span style=&quot;color: #56B6C2;&quot;&gt;1&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span style=&quot;color: #56B6C2;&quot;&gt; 2&lt;/span&gt;&lt;span&gt;); });&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;This creates only one test, but making it work for a whole suite was not difficult either. Although here I went for using the designated initialization when registering the test.&lt;/p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #A9B2C3; background-color: #21252B;&quot; &gt;&lt;code data-lang=&quot;cpp&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #B57EDC;&quot;&gt;Suite&lt;/span&gt;&lt;span&gt;(&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: #98C379;&quot;&gt;suite name&lt;/span&gt;&lt;span&gt;&amp;quot;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;.&lt;/span&gt;&lt;span style=&quot;color: #B57EDC;&quot;&gt;Setup&lt;/span&gt;&lt;span&gt;([]{&lt;/span&gt;&lt;span style=&quot;color: #5F6672;font-style: italic;&quot;&gt; /* optional suite setup*/&lt;/span&gt;&lt;span&gt; })&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;.&lt;/span&gt;&lt;span style=&quot;color: #B57EDC;&quot;&gt;Teardown&lt;/span&gt;&lt;span&gt;([]{&lt;/span&gt;&lt;span style=&quot;color: #5F6672;font-style: italic;&quot;&gt; /* optional suite teardown*/&lt;/span&gt;&lt;span&gt; })&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;.&lt;/span&gt;&lt;span style=&quot;color: #B57EDC;&quot;&gt;Test&lt;/span&gt;&lt;span&gt;({&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    .&lt;/span&gt;&lt;span style=&quot;color: #C6CCD7;&quot;&gt;name&lt;/span&gt;&lt;span style=&quot;color: #E06C75;&quot;&gt; =&lt;/span&gt;&lt;span&gt; &amp;quot;&lt;/span&gt;&lt;span style=&quot;color: #98C379;&quot;&gt;test name 1&lt;/span&gt;&lt;span&gt;&amp;quot;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    .&lt;/span&gt;&lt;span style=&quot;color: #C6CCD7;&quot;&gt;func&lt;/span&gt;&lt;span style=&quot;color: #E06C75;&quot;&gt; =&lt;/span&gt;&lt;span&gt; []{&lt;/span&gt;&lt;span style=&quot;color: #E06C75;&quot;&gt; return&lt;/span&gt;&lt;span style=&quot;color: #B57EDC;&quot;&gt; Equal&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span style=&quot;color: #56B6C2;&quot;&gt;0&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span style=&quot;color: #56B6C2;&quot;&gt;9&lt;/span&gt;&lt;span&gt;); }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;})&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;.&lt;/span&gt;&lt;span style=&quot;color: #B57EDC;&quot;&gt;Test&lt;/span&gt;&lt;span&gt;({&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    .&lt;/span&gt;&lt;span style=&quot;color: #C6CCD7;&quot;&gt;name&lt;/span&gt;&lt;span style=&quot;color: #E06C75;&quot;&gt; =&lt;/span&gt;&lt;span&gt; &amp;quot;&lt;/span&gt;&lt;span style=&quot;color: #98C379;&quot;&gt;test name 2&lt;/span&gt;&lt;span&gt;&amp;quot;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    .&lt;/span&gt;&lt;span style=&quot;color: #C6CCD7;&quot;&gt;func&lt;/span&gt;&lt;span style=&quot;color: #E06C75;&quot;&gt; =&lt;/span&gt;&lt;span&gt; []{&lt;/span&gt;&lt;span style=&quot;color: #E06C75;&quot;&gt; return&lt;/span&gt;&lt;span style=&quot;color: #B57EDC;&quot;&gt; Equal&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span style=&quot;color: #56B6C2;&quot;&gt;0&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span style=&quot;color: #56B6C2;&quot;&gt;8&lt;/span&gt;&lt;span&gt;); }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;});&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Both functions are similar internally, they access the static global registry, and add the suite or test. This works, but has a major limitation - you can&#39;t use these methods in the global scope outside functions, code like this is not allowed in C++:&lt;/p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #A9B2C3; background-color: #21252B;&quot; &gt;&lt;code data-lang=&quot;cpp&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #B57EDC;&quot;&gt;Test&lt;/span&gt;&lt;span&gt;(&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: #98C379;&quot;&gt;suite name&lt;/span&gt;&lt;span&gt;&amp;quot;, &amp;quot;&lt;/span&gt;&lt;span style=&quot;color: #98C379;&quot;&gt;test name&lt;/span&gt;&lt;span&gt;&amp;quot;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;.&lt;/span&gt;&lt;span style=&quot;color: #B57EDC;&quot;&gt;Func&lt;/span&gt;&lt;span&gt;([]{&lt;/span&gt;&lt;span style=&quot;color: #E06C75;&quot;&gt; return&lt;/span&gt;&lt;span style=&quot;color: #B57EDC;&quot;&gt; Equal&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span style=&quot;color: #56B6C2;&quot;&gt;2&lt;/span&gt;&lt;span style=&quot;color: #E06C75;&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color: #56B6C2;&quot;&gt;2&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span style=&quot;color: #56B6C2;&quot;&gt; 4&lt;/span&gt;&lt;span&gt;); })&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #61AFEF;&quot;&gt;int&lt;/span&gt;&lt;span style=&quot;color: #B57EDC;&quot;&gt; main&lt;/span&gt;&lt;span&gt;() {&lt;/span&gt;&lt;span style=&quot;color: #B57EDC;&quot;&gt; Run&lt;/span&gt;&lt;span&gt;(); }&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h4 id=&quot;global-scope&quot;&gt;Global scope&lt;/h4&gt;
&lt;p&gt;One way to circumvent this is to create actual objects and register them through &lt;strong&gt;static initialization&lt;/strong&gt;. Since it occurs before the &lt;code&gt;main()&lt;/code&gt; is called, it&#39;s safe to assume that all tests are registered before the call to &lt;code&gt;Run()&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;For this purpose I implemented the &lt;code&gt;TestS&lt;/code&gt; struct. There was one problem I had to solve: static initialization implies having a custom constructor that does the registration, but having a user-declared constructor makes the type non-&lt;a rel=&quot;external&quot; href=&quot;https://en.cppreference.com/w/cpp/language/aggregate_initialization.html&quot;&gt;aggregate&lt;/a&gt; which disallows &lt;a rel=&quot;external&quot; href=&quot;https://en.cppreference.com/w/cpp/language/aggregate_initialization.html#Designated_initializers&quot;&gt;designated initialization&lt;/a&gt; (which I wanted to keep).&lt;/p&gt;
&lt;p&gt;However, aggregates can still have members that are not aggregates. So, to go around the limitation, I added a number of structs looking like this:&lt;/p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #A9B2C3; background-color: #21252B;&quot; &gt;&lt;code data-lang=&quot;cpp&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #61AFEF;&quot;&gt;struct&lt;/span&gt;&lt;span style=&quot;color: #E5C07B;&quot;&gt; SuiteName&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;{&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #B57EDC;&quot;&gt;    SuiteName&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span style=&quot;color: #61AFEF;&quot;&gt;const&lt;/span&gt;&lt;span&gt; std::&lt;/span&gt;&lt;span style=&quot;color: #E5C07B;&quot;&gt;string&lt;/span&gt;&lt;span style=&quot;color: #61AFEF;&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span style=&quot;color: #C6CCD7;&quot;&gt; name&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #E06C75;&quot;&gt;        if&lt;/span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span style=&quot;color: #E06C75;&quot;&gt;!&lt;/span&gt;&lt;span style=&quot;color: #C6CCD7;&quot;&gt;name&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span style=&quot;color: #B57EDC;&quot;&gt;empty&lt;/span&gt;&lt;span&gt;())&lt;/span&gt;&lt;span style=&quot;color: #B57EDC;&quot;&gt; GetRegistry&lt;/span&gt;&lt;span&gt;().&lt;/span&gt;&lt;span style=&quot;color: #B57EDC;&quot;&gt;LastSuite&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span style=&quot;color: #E06C75;&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span style=&quot;color: #B57EDC;&quot;&gt;GetRegistry&lt;/span&gt;&lt;span&gt;().&lt;/span&gt;&lt;span style=&quot;color: #B57EDC;&quot;&gt;GetSuite&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span style=&quot;color: #C6CCD7;&quot;&gt;name&lt;/span&gt;&lt;span&gt;)));&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #E06C75;&quot;&gt;        else&lt;/span&gt;&lt;span style=&quot;color: #B57EDC;&quot;&gt; GetRegistry&lt;/span&gt;&lt;span&gt;().&lt;/span&gt;&lt;span style=&quot;color: #B57EDC;&quot;&gt;LastSuite&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span style=&quot;color: #56B6C2;&quot;&gt;nullptr&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #B57EDC;&quot;&gt;    SuiteName&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span style=&quot;color: #61AFEF;&quot;&gt;const char*&lt;/span&gt;&lt;span style=&quot;color: #C6CCD7;&quot;&gt; name&lt;/span&gt;&lt;span&gt;) :&lt;/span&gt;&lt;span style=&quot;color: #B57EDC;&quot;&gt; SuiteName&lt;/span&gt;&lt;span&gt;(std::&lt;/span&gt;&lt;span style=&quot;color: #B57EDC;&quot;&gt;string&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span style=&quot;color: #C6CCD7;&quot;&gt;name&lt;/span&gt;&lt;span&gt;)) {}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;};&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #61AFEF;&quot;&gt;struct&lt;/span&gt;&lt;span style=&quot;color: #E5C07B;&quot;&gt; TestName&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;{&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #B57EDC;&quot;&gt;    TestName&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span style=&quot;color: #61AFEF;&quot;&gt;const&lt;/span&gt;&lt;span&gt; std::&lt;/span&gt;&lt;span style=&quot;color: #E5C07B;&quot;&gt;string&lt;/span&gt;&lt;span style=&quot;color: #61AFEF;&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span style=&quot;color: #C6CCD7;&quot;&gt; name&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #E06C75;&quot;&gt;        if&lt;/span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span style=&quot;color: #E06C75;&quot;&gt;!&lt;/span&gt;&lt;span style=&quot;color: #C6CCD7;&quot;&gt;name&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span style=&quot;color: #B57EDC;&quot;&gt;empty&lt;/span&gt;&lt;span&gt;()&lt;/span&gt;&lt;span style=&quot;color: #E06C75;&quot;&gt; &amp;amp;&amp;amp;&lt;/span&gt;&lt;span style=&quot;color: #B57EDC;&quot;&gt; GetRegistry&lt;/span&gt;&lt;span&gt;().&lt;/span&gt;&lt;span style=&quot;color: #B57EDC;&quot;&gt;LastSuite&lt;/span&gt;&lt;span&gt;())&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #B57EDC;&quot;&gt;            GetRegistry&lt;/span&gt;&lt;span&gt;().&lt;/span&gt;&lt;span style=&quot;color: #B57EDC;&quot;&gt;LastTest&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span style=&quot;color: #E06C75;&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span style=&quot;color: #B57EDC;&quot;&gt;GetRegistry&lt;/span&gt;&lt;span&gt;().&lt;/span&gt;&lt;span style=&quot;color: #B57EDC;&quot;&gt;LastSuite&lt;/span&gt;&lt;span&gt;()-&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #B57EDC;&quot;&gt;Test&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span style=&quot;color: #C6CCD7;&quot;&gt;name&lt;/span&gt;&lt;span&gt;)));&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #E06C75;&quot;&gt;        else&lt;/span&gt;&lt;span style=&quot;color: #B57EDC;&quot;&gt; GetRegistry&lt;/span&gt;&lt;span&gt;().&lt;/span&gt;&lt;span style=&quot;color: #B57EDC;&quot;&gt;LastTest&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span style=&quot;color: #56B6C2;&quot;&gt;nullptr&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #B57EDC;&quot;&gt;    TestName&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span style=&quot;color: #61AFEF;&quot;&gt;const char*&lt;/span&gt;&lt;span style=&quot;color: #C6CCD7;&quot;&gt; name&lt;/span&gt;&lt;span&gt;) :&lt;/span&gt;&lt;span style=&quot;color: #B57EDC;&quot;&gt; TestName&lt;/span&gt;&lt;span&gt;(std::&lt;/span&gt;&lt;span style=&quot;color: #B57EDC;&quot;&gt;string&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span style=&quot;color: #C6CCD7;&quot;&gt;name&lt;/span&gt;&lt;span&gt;)) {}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;};&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Now, instead of having standard &lt;code&gt;string&lt;/code&gt;s or &lt;code&gt;function&lt;/code&gt;s in the &lt;code&gt;TestS&lt;/code&gt;, I have these custom types that do the registration. This allows to simplify the &lt;code&gt;TestS&lt;/code&gt; struct to an aggregate:&lt;/p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #A9B2C3; background-color: #21252B;&quot; &gt;&lt;code data-lang=&quot;cpp&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #61AFEF;&quot;&gt;struct&lt;/span&gt;&lt;span style=&quot;color: #E5C07B;&quot;&gt; TestS&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;{&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    impl::&lt;/span&gt;&lt;span style=&quot;color: #E5C07B;&quot;&gt;SuiteName&lt;/span&gt;&lt;span style=&quot;color: #C6CCD7;&quot;&gt;    suite&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    impl::&lt;/span&gt;&lt;span style=&quot;color: #E5C07B;&quot;&gt;TestName&lt;/span&gt;&lt;span style=&quot;color: #C6CCD7;&quot;&gt;     name&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    impl::&lt;/span&gt;&lt;span style=&quot;color: #E5C07B;&quot;&gt;TestFunc&lt;/span&gt;&lt;span style=&quot;color: #C6CCD7;&quot;&gt;     func&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    impl::&lt;/span&gt;&lt;span style=&quot;color: #E5C07B;&quot;&gt;TagList&lt;/span&gt;&lt;span style=&quot;color: #C6CCD7;&quot;&gt;      tags&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    impl::&lt;/span&gt;&lt;span style=&quot;color: #E5C07B;&quot;&gt;SetupFunc&lt;/span&gt;&lt;span style=&quot;color: #C6CCD7;&quot;&gt;    setup&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    impl::&lt;/span&gt;&lt;span style=&quot;color: #E5C07B;&quot;&gt;TeardownFunc&lt;/span&gt;&lt;span style=&quot;color: #C6CCD7;&quot;&gt; teardown&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;};&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #5F6672;font-style: italic;&quot;&gt;// now with designated initialization!&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #E5C07B;&quot;&gt;TestS&lt;/span&gt;&lt;span style=&quot;color: #C6CCD7;&quot;&gt; t&lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    .&lt;/span&gt;&lt;span style=&quot;color: #C6CCD7;&quot;&gt;suite&lt;/span&gt;&lt;span style=&quot;color: #E06C75;&quot;&gt; =&lt;/span&gt;&lt;span&gt; &amp;quot;&lt;/span&gt;&lt;span style=&quot;color: #98C379;&quot;&gt;suite name&lt;/span&gt;&lt;span&gt;&amp;quot;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    .&lt;/span&gt;&lt;span style=&quot;color: #C6CCD7;&quot;&gt;name&lt;/span&gt;&lt;span style=&quot;color: #E06C75;&quot;&gt;  =&lt;/span&gt;&lt;span&gt; &amp;quot;&lt;/span&gt;&lt;span style=&quot;color: #98C379;&quot;&gt;test name&lt;/span&gt;&lt;span&gt;&amp;quot;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    .&lt;/span&gt;&lt;span style=&quot;color: #C6CCD7;&quot;&gt;func&lt;/span&gt;&lt;span style=&quot;color: #E06C75;&quot;&gt;  =&lt;/span&gt;&lt;span&gt; []{&lt;/span&gt;&lt;span style=&quot;color: #E06C75;&quot;&gt; return&lt;/span&gt;&lt;span style=&quot;color: #B57EDC;&quot;&gt; Equal&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span style=&quot;color: #56B6C2;&quot;&gt;10&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span style=&quot;color: #56B6C2;&quot;&gt;20&lt;/span&gt;&lt;span&gt;); },&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;};&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Since each element registers only itself, I had to make sure all elements of one test go into the same test. For this I added the &lt;code&gt;lastSuite&lt;/code&gt; and &lt;code&gt;lastTest&lt;/code&gt; pointers to the registry, which are updated when a new suite and test are created accordingly. Since member initialization goes in the order of their declaration, it&#39;s safe to assume these pointers point where they should.&lt;/p&gt;
&lt;p&gt;As you may have noticed from the example above, there&#39;s still one major drawback to this method - you have to manually choose a name for each test object (&lt;code&gt;t&lt;/code&gt; in this case), since you can&#39;t just create a temporary object in the global scope.&lt;/p&gt;
&lt;p&gt;And you can&#39;t just somehow generate these names, even template magic won&#39;t help. Usually, it&#39;s where you turn to macros, after all, code generation is their meat and potatoes. But remember, the whole goal of this project is to use no macros, so we need to look elsewhere.&lt;/p&gt;
&lt;h4 id=&quot;templates-to-the-rescue&quot;&gt;Templates to the rescue&lt;/h4&gt;
&lt;p&gt;Even if we can&#39;t generate names with templates, maybe we could still use them for test registration? And it turns out - yes, we can. The following method was suggested to me by the user &lt;a rel=&quot;external&quot; href=&quot;https://www.reddit.com/user/triconsonantal/&quot;&gt;u/triconsonantal&lt;/a&gt;, for which I&#39;m grateful. They actually suggested two methods, here&#39;s the &lt;a rel=&quot;external&quot; href=&quot;https://godbolt.org/z/WarGvoYhr&quot;&gt;first&lt;/a&gt; one that I ended up using, and the &lt;a rel=&quot;external&quot; href=&quot;https://godbolt.org/z/YPTvYfETb&quot;&gt;second&lt;/a&gt; one.&lt;/p&gt;
&lt;p&gt;As a sneak-peak, here&#39;s what the code allows us to do:&lt;/p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #A9B2C3; background-color: #21252B;&quot; &gt;&lt;code data-lang=&quot;cpp&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #5F6672;font-style: italic;&quot;&gt;// no object name needed!&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #61AFEF;&quot;&gt;template class&lt;/span&gt;&lt;span style=&quot;color: #E5C07B;&quot;&gt; TestT&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  &amp;quot;&lt;/span&gt;&lt;span style=&quot;color: #98C379;&quot;&gt;suite name&lt;/span&gt;&lt;span&gt;&amp;quot;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  &amp;quot;&lt;/span&gt;&lt;span style=&quot;color: #98C379;&quot;&gt;test name&lt;/span&gt;&lt;span&gt;&amp;quot;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  []{ return&lt;/span&gt;&lt;span style=&quot;color: #E5C07B;&quot;&gt; Equal&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span style=&quot;color: #56B6C2;&quot;&gt;1&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span style=&quot;color: #56B6C2;&quot;&gt;2&lt;/span&gt;&lt;span&gt;); }&amp;gt;;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;The core concept it uses is NTTP (non-type template parameters). In its simplest form you could encounter it in, for example, standard arrays, where you may write:&lt;/p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #A9B2C3; background-color: #21252B;&quot; &gt;&lt;code data-lang=&quot;cpp&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;std::&lt;/span&gt;&lt;span style=&quot;color: #C6CCD7;&quot;&gt;array&lt;/span&gt;&lt;span style=&quot;color: #E06C75;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #61AFEF;&quot;&gt;int&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span style=&quot;color: #56B6C2;&quot;&gt; 3&lt;/span&gt;&lt;span style=&quot;color: #E06C75;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #C6CCD7;&quot;&gt; myArray&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;span style=&quot;color: #5F6672;font-style: italic;&quot;&gt; // &amp;#39;3&amp;#39; is not a type&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;However, we could expand this for our case. First, we need to prepare suitable types for the parameters. NTTP does not allow normal strings, since they are not &lt;a rel=&quot;external&quot; href=&quot;https://en.cppreference.com/w/cpp/language/template_parameters.html&quot;&gt;structural&lt;/a&gt;. So, as a replacement, we can create a custom implementation:&lt;/p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #A9B2C3; background-color: #21252B;&quot; &gt;&lt;code data-lang=&quot;cpp&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #61AFEF;&quot;&gt;template&lt;/span&gt;&lt;span&gt;&amp;lt;std::&lt;/span&gt;&lt;span style=&quot;color: #61AFEF;&quot;&gt;size_t&lt;/span&gt;&lt;span style=&quot;color: #E5C07B;&quot;&gt; N&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #61AFEF;&quot;&gt;struct&lt;/span&gt;&lt;span style=&quot;color: #E5C07B;&quot;&gt; StructuralString&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;{&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #E06C75;&quot;&gt;    static_assert&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span style=&quot;color: #C6CCD7;&quot;&gt;N&lt;/span&gt;&lt;span style=&quot;color: #E06C75;&quot;&gt; &amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #56B6C2;&quot;&gt; 0&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #61AFEF;&quot;&gt;    constexpr&lt;/span&gt;&lt;span style=&quot;color: #B57EDC;&quot;&gt; StructuralString&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span style=&quot;color: #61AFEF;&quot;&gt;const char&lt;/span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span style=&quot;color: #61AFEF;&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span style=&quot;color: #C6CCD7;&quot;&gt;str&lt;/span&gt;&lt;span&gt;)[&lt;/span&gt;&lt;span style=&quot;color: #C6CCD7;&quot;&gt;N&lt;/span&gt;&lt;span&gt;])&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;        std::&lt;/span&gt;&lt;span style=&quot;color: #B57EDC;&quot;&gt;copy_n&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span style=&quot;color: #C6CCD7;&quot;&gt;str&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span style=&quot;color: #C6CCD7;&quot;&gt; N&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span style=&quot;color: #C6CCD7;&quot;&gt; string&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #61AFEF;&quot;&gt;    constexpr&lt;/span&gt;&lt;span style=&quot;color: #E06C75;&quot;&gt; operator&lt;/span&gt;&lt;span&gt; std::string_view ()&lt;/span&gt;&lt;span style=&quot;color: #61AFEF;&quot;&gt; const&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;span style=&quot;color: #E06C75;&quot;&gt; return&lt;/span&gt;&lt;span style=&quot;color: #C6CCD7;&quot;&gt; string&lt;/span&gt;&lt;span&gt;; }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #61AFEF;&quot;&gt;    constexpr&lt;/span&gt;&lt;span style=&quot;color: #E06C75;&quot;&gt; operator&lt;/span&gt;&lt;span&gt; std::string ()&lt;/span&gt;&lt;span style=&quot;color: #61AFEF;&quot;&gt; const&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;span style=&quot;color: #E06C75;&quot;&gt; return&lt;/span&gt;&lt;span style=&quot;color: #C6CCD7;&quot;&gt; string&lt;/span&gt;&lt;span&gt;; }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #61AFEF;&quot;&gt;    char&lt;/span&gt;&lt;span style=&quot;color: #C6CCD7;&quot;&gt; string&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span style=&quot;color: #C6CCD7;&quot;&gt;N&lt;/span&gt;&lt;span&gt;] {};&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;};&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;This covers test and suite names, but we still need tag lists and several functions. For the former we can just use an &lt;code&gt;std::array&lt;/code&gt;, and for the latter we use function pointers: &lt;code&gt;Result (* func) ()&lt;/code&gt; and &lt;code&gt;void (* func) ()&lt;/code&gt; for test and setup/teardown functions accordingly.&lt;/p&gt;
&lt;p&gt;Functions, however, are where we see first limitations of this approach: lambdas that we use as values for those parameters &lt;strong&gt;cannot capture anything&lt;/strong&gt;, otherwise they&#39;d be not a structural type.&lt;/p&gt;
&lt;p&gt;With suitable types in place we can start implementing the structure I named &lt;code&gt;TestT&lt;/code&gt;:&lt;/p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #A9B2C3; background-color: #21252B;&quot; &gt;&lt;code data-lang=&quot;cpp&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #61AFEF;&quot;&gt;template&lt;/span&gt;&lt;span&gt;&amp;lt;impl::&lt;/span&gt;&lt;span style=&quot;color: #61AFEF;&quot;&gt;StructuralString&lt;/span&gt;&lt;span style=&quot;color: #E5C07B;&quot;&gt; suite&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;         impl::&lt;/span&gt;&lt;span style=&quot;color: #61AFEF;&quot;&gt;StructuralString&lt;/span&gt;&lt;span style=&quot;color: #E5C07B;&quot;&gt; name&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #B57EDC;&quot;&gt;         Result&lt;/span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span style=&quot;color: #E06C75;&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color: #C6CCD7;&quot;&gt; func&lt;/span&gt;&lt;span&gt;) (),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #61AFEF;&quot;&gt;         auto&lt;/span&gt;&lt;span style=&quot;color: #C6CCD7;&quot;&gt; tags&lt;/span&gt;&lt;span style=&quot;color: #E06C75;&quot;&gt; =&lt;/span&gt;&lt;span&gt; std::&lt;/span&gt;&lt;span style=&quot;color: #C6CCD7;&quot;&gt;array&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #61AFEF;&quot;&gt;const char&lt;/span&gt;&lt;span style=&quot;color: #E06C75;&quot;&gt;*&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span style=&quot;color: #56B6C2;&quot;&gt; 0&lt;/span&gt;&lt;span&gt;&amp;gt;{},&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #61AFEF;&quot;&gt;         void&lt;/span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span style=&quot;color: #E06C75;&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color: #C6CCD7;&quot;&gt; setup&lt;/span&gt;&lt;span&gt;) ()&lt;/span&gt;&lt;span style=&quot;color: #E06C75;&quot;&gt; =&lt;/span&gt;&lt;span&gt; {},&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #61AFEF;&quot;&gt;         void&lt;/span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span style=&quot;color: #E06C75;&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color: #C6CCD7;&quot;&gt; teardown&lt;/span&gt;&lt;span&gt;) ()&lt;/span&gt;&lt;span style=&quot;color: #E06C75;&quot;&gt; =&lt;/span&gt;&lt;span&gt; {}&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #61AFEF;&quot;&gt;class&lt;/span&gt;&lt;span style=&quot;color: #E5C07B;&quot;&gt; TestT&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;{&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #B57EDC;&quot;&gt;    TestT&lt;/span&gt;&lt;span&gt;()&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #5F6672;font-style: italic;&quot;&gt;        // test registration like before&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #61AFEF;&quot;&gt;    static const&lt;/span&gt;&lt;span style=&quot;color: #E5C07B;&quot;&gt; TestT&lt;/span&gt;&lt;span style=&quot;color: #C6CCD7;&quot;&gt; registerer&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;};&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Now we only need to force template instantiation that would trigger the constructor and register our test. For this we have the static registerer object that calls the private constructor, which ensures that for each instantiation of the template there&#39;s only one registration.&lt;/p&gt;
&lt;p&gt;Since we need to not only declare the static member, but to also define it, outside the class we write:&lt;/p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #A9B2C3; background-color: #21252B;&quot; &gt;&lt;code data-lang=&quot;cpp&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #61AFEF;&quot;&gt;template&lt;/span&gt;&lt;span&gt;&amp;lt;impl::&lt;/span&gt;&lt;span style=&quot;color: #61AFEF;&quot;&gt;StructuralString&lt;/span&gt;&lt;span style=&quot;color: #E5C07B;&quot;&gt; suite&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;             impl::&lt;/span&gt;&lt;span style=&quot;color: #61AFEF;&quot;&gt;StructuralString&lt;/span&gt;&lt;span style=&quot;color: #E5C07B;&quot;&gt; name&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #B57EDC;&quot;&gt;             Result&lt;/span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span style=&quot;color: #E06C75;&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color: #C6CCD7;&quot;&gt; func&lt;/span&gt;&lt;span&gt;) (),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #61AFEF;&quot;&gt;             auto&lt;/span&gt;&lt;span style=&quot;color: #C6CCD7;&quot;&gt; tags&lt;/span&gt;&lt;span style=&quot;color: #E06C75;&quot;&gt; =&lt;/span&gt;&lt;span&gt; std::&lt;/span&gt;&lt;span style=&quot;color: #C6CCD7;&quot;&gt;array&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #61AFEF;&quot;&gt;const char&lt;/span&gt;&lt;span style=&quot;color: #E06C75;&quot;&gt;*&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span style=&quot;color: #56B6C2;&quot;&gt; 0&lt;/span&gt;&lt;span&gt;&amp;gt;{},&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #61AFEF;&quot;&gt;             void&lt;/span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span style=&quot;color: #E06C75;&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color: #C6CCD7;&quot;&gt; setup&lt;/span&gt;&lt;span&gt;) ()&lt;/span&gt;&lt;span style=&quot;color: #E06C75;&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;color: #61AFEF;&quot;&gt; nullptr&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #61AFEF;&quot;&gt;             void&lt;/span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span style=&quot;color: #E06C75;&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color: #C6CCD7;&quot;&gt; teardown&lt;/span&gt;&lt;span&gt;) ()&lt;/span&gt;&lt;span style=&quot;color: #E06C75;&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;color: #61AFEF;&quot;&gt; nullptr&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #61AFEF;&quot;&gt;    const&lt;/span&gt;&lt;span style=&quot;color: #C6CCD7;&quot;&gt; TestT&lt;/span&gt;&lt;span style=&quot;color: #E06C75;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #C6CCD7;&quot;&gt;suite&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span style=&quot;color: #C6CCD7;&quot;&gt; name&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span style=&quot;color: #C6CCD7;&quot;&gt; func&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span style=&quot;color: #C6CCD7;&quot;&gt; tags&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span style=&quot;color: #C6CCD7;&quot;&gt; setup&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span style=&quot;color: #C6CCD7;&quot;&gt; teardown&lt;/span&gt;&lt;span style=&quot;color: #E06C75;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span&gt; TestT&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #E5C07B;&quot;&gt;suite&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span style=&quot;color: #E5C07B;&quot;&gt; name&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span style=&quot;color: #E5C07B;&quot;&gt; func&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span style=&quot;color: #E5C07B;&quot;&gt; tags&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span style=&quot;color: #E5C07B;&quot;&gt; setup&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span style=&quot;color: #E5C07B;&quot;&gt; teardown&lt;/span&gt;&lt;span&gt;&amp;gt;::&lt;/span&gt;&lt;span style=&quot;color: #C6CCD7;&quot;&gt;registerer&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Now, each time we write&lt;/p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #A9B2C3; background-color: #21252B;&quot; &gt;&lt;code data-lang=&quot;cpp&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #61AFEF;&quot;&gt;template class&lt;/span&gt;&lt;span style=&quot;color: #E5C07B;&quot;&gt; TestT&lt;/span&gt;&lt;span&gt;&amp;lt;{ ... }&amp;gt;;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;we instantiate a new type, forcing the constructor to be called and registering our test.&lt;/p&gt;
&lt;p&gt;One more issue that remains is that currently, test creation cannot be in headers, since including such headers in multiple translation units would create duplicates of the same test. To fix this, we add&lt;/p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #A9B2C3; background-color: #21252B;&quot; &gt;&lt;code data-lang=&quot;cpp&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #61AFEF;&quot;&gt;template&lt;/span&gt;&lt;span&gt;&amp;lt;impl::&lt;/span&gt;&lt;span style=&quot;color: #61AFEF;&quot;&gt;StructuralString&lt;/span&gt;&lt;span style=&quot;color: #E5C07B;&quot;&gt; suite&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;         impl::&lt;/span&gt;&lt;span style=&quot;color: #61AFEF;&quot;&gt;StructuralString&lt;/span&gt;&lt;span style=&quot;color: #E5C07B;&quot;&gt; name&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #61AFEF;&quot;&gt;inline bool&lt;/span&gt;&lt;span style=&quot;color: #C6CCD7;&quot;&gt; testRegistered&lt;/span&gt;&lt;span style=&quot;color: #E06C75;&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;color: #56B6C2;&quot;&gt; false&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;outside the class and check it in the constructor. This ensures that there can be only one test with the same suite-name combination.&lt;/p&gt;
&lt;p&gt;A single full test with such approach could look like this:&lt;/p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #A9B2C3; background-color: #21252B;&quot; &gt;&lt;code data-lang=&quot;cpp&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #61AFEF;&quot;&gt;template class&lt;/span&gt;&lt;span style=&quot;color: #E5C07B;&quot;&gt; TestT&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  &amp;quot;&lt;/span&gt;&lt;span style=&quot;color: #98C379;&quot;&gt;suite name&lt;/span&gt;&lt;span&gt;&amp;quot;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  &amp;quot;&lt;/span&gt;&lt;span style=&quot;color: #98C379;&quot;&gt;test name&lt;/span&gt;&lt;span&gt;&amp;quot;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  []{ return&lt;/span&gt;&lt;span style=&quot;color: #E5C07B;&quot;&gt; Equal&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span style=&quot;color: #56B6C2;&quot;&gt;1&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span style=&quot;color: #56B6C2;&quot;&gt;2&lt;/span&gt;&lt;span&gt;); },&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  std::&lt;/span&gt;&lt;span style=&quot;color: #E5C07B;&quot;&gt;array&lt;/span&gt;&lt;span&gt;{&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: #98C379;&quot;&gt;tag 1&lt;/span&gt;&lt;span&gt;&amp;quot;, &amp;quot;&lt;/span&gt;&lt;span style=&quot;color: #98C379;&quot;&gt;tag 2&lt;/span&gt;&lt;span&gt;&amp;quot;},&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  []{ std::&lt;/span&gt;&lt;span style=&quot;color: #E5C07B;&quot;&gt;println&lt;/span&gt;&lt;span&gt;(&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: #98C379;&quot;&gt;setup&lt;/span&gt;&lt;span&gt;&amp;quot;); },&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  []{ std::&lt;/span&gt;&lt;span style=&quot;color: #E5C07B;&quot;&gt;println&lt;/span&gt;&lt;span&gt;(&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: #98C379;&quot;&gt;teardown&lt;/span&gt;&lt;span&gt;&amp;quot;); }&amp;gt;;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;which, while not as clean as I would&#39;ve liked, still looks fine given the restrictions.&lt;/p&gt;
&lt;h3 id=&quot;test-filtering-and-cli&quot;&gt;Test filtering and CLI&lt;/h3&gt;
&lt;p&gt;As could be seen from the previous examples, tests can be filtered not just by suites, but by tags as well. They are stored as a simple array of strings and are checked at runtime against the filters provided through the CLI.&lt;/p&gt;
&lt;p&gt;It was fun to learn more about the standard &lt;code&gt;views&lt;/code&gt; library, to which I had quite limited exposure in the past. In the case of filters, it allowed me to write code like this:&lt;/p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #A9B2C3; background-color: #21252B;&quot; &gt;&lt;code data-lang=&quot;cpp&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #E06C75;&quot;&gt;for&lt;/span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span style=&quot;color: #61AFEF;&quot;&gt;const auto&amp;amp;&lt;/span&gt;&lt;span&gt; [&lt;/span&gt;&lt;span style=&quot;color: #C6CCD7;&quot;&gt;testName&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span style=&quot;color: #C6CCD7;&quot;&gt; test&lt;/span&gt;&lt;span&gt;] :&lt;/span&gt;&lt;span style=&quot;color: #C6CCD7;&quot;&gt; suite&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span style=&quot;color: #B57EDC;&quot;&gt;Tests&lt;/span&gt;&lt;span&gt;()&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #E06C75;&quot;&gt;    |&lt;/span&gt;&lt;span&gt; std::views::&lt;/span&gt;&lt;span style=&quot;color: #B57EDC;&quot;&gt;filter&lt;/span&gt;&lt;span&gt;([&lt;/span&gt;&lt;span style=&quot;color: #E06C75;&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span&gt;](&lt;/span&gt;&lt;span style=&quot;color: #61AFEF;&quot;&gt;const auto&amp;amp;&lt;/span&gt;&lt;span style=&quot;color: #C6CCD7;&quot;&gt; pair&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #5F6672;font-style: italic;&quot;&gt;        // actual filtering&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    }))&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;As for the CLI, I went for a basic solution for now. It allows running all tests or specifying which suites and tags to run. For example, this command runs all tests from suites &quot;core&quot; or &quot;math&quot; that have tag &quot;fast&quot;:&lt;/p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #A9B2C3; background-color: #21252B;&quot; &gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;./test -s &amp;quot;core,math&amp;quot; -t &amp;quot;fast&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;I&#39;ve also added a couple of options like &lt;code&gt;--verbose&lt;/code&gt; for detailed output, &lt;code&gt;--list&lt;/code&gt; for listing tests that match the filters without running them, &lt;code&gt;--case_sensitive&lt;/code&gt; to enable case sensitivity for identifiers, and of course &lt;code&gt;--help&lt;/code&gt;.&lt;/p&gt;
&lt;h2 id=&quot;conclusion&quot;&gt;Conclusion&lt;/h2&gt;
&lt;p&gt;All in all, this project was an interesting experiment to see how unit-testing could be implemented without any macros. It&#39;s obvious that C++ still doesn&#39;t give us all the tools needed to fully get rid of macros, but even now we can work around these limitations to achieve similar functionality.&lt;/p&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>nmtest</title>
        <published>2025-12-14T00:00:00+00:00</published>
        <updated>2025-12-14T00:00:00+00:00</updated>
        
        <author>
          <name>Unknown</name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://otdd.net/projects/macro-free-c-testing-library/"/>
        <id>https://otdd.net/projects/macro-free-c-testing-library/</id>
        
        <content type="html" xml:base="https://otdd.net/projects/macro-free-c-testing-library/">&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;https://github.com/anupyldd/nmtest&quot;&gt;nmtest&lt;/a&gt; is a C++23 library created as an experiment to see if it was possible to do unit-testing without the use of any macros in modern C++.&lt;/p&gt;
&lt;p&gt;Related blogposts:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://otdd.net/blog/nmtest-1/&quot;&gt;Macro-free unit-testing framework in modern C++&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://otdd.net/blog/nmtest-2/&quot;&gt;Exploring macro-free testing in modern C++&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>Macro-free unit-testing framework in modern C++</title>
        <published>2025-03-28T00:00:00+00:00</published>
        <updated>2025-03-28T00:00:00+00:00</updated>
        
        <author>
          <name>Unknown</name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://otdd.net/blog/nmtest-1/"/>
        <id>https://otdd.net/blog/nmtest-1/</id>
        
        <content type="html" xml:base="https://otdd.net/blog/nmtest-1/">&lt;p&gt;For my current project I wanted to have a small testing library, and since I find joy in reinventing the wheel, I decided to write my own.&lt;/p&gt;
&lt;p&gt;While many testing frameworks rely extensively on macros in their APIs, using the preprocessor too much always felt wrong to me. Bypassing the type system and confusing refactoring tools, they make you rely on your IDE and your own memory a bit too much for my taste.&lt;/p&gt;
&lt;p&gt;So my main goal was to make an API that would be as easy to use as a macro-based one, but without its downsides. I also went for a declarative style by allowing to define the structure of tests through method chaining.&lt;/p&gt;
&lt;p&gt;API use example:&lt;/p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #A9B2C3; background-color: #21252B;&quot; &gt;&lt;code data-lang=&quot;cpp&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #C6CCD7;&quot;&gt;Registry regs&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #C6CCD7;&quot;&gt;regs&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span style=&quot;color: #B57EDC;&quot;&gt;Suite&lt;/span&gt;&lt;span&gt;(&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: #98C379;&quot;&gt;First suite&lt;/span&gt;&lt;span&gt;&amp;quot;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    .&lt;/span&gt;&lt;span style=&quot;color: #B57EDC;&quot;&gt;Setup&lt;/span&gt;&lt;span&gt;([]{&lt;/span&gt;&lt;span style=&quot;color: #5F6672;font-style: italic;&quot;&gt; /* optional suite setup */&lt;/span&gt;&lt;span&gt; })&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    .&lt;/span&gt;&lt;span style=&quot;color: #B57EDC;&quot;&gt;Teardown&lt;/span&gt;&lt;span&gt;([]{&lt;/span&gt;&lt;span style=&quot;color: #5F6672;font-style: italic;&quot;&gt; /* optional suite teardown */&lt;/span&gt;&lt;span&gt; })&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    .&lt;/span&gt;&lt;span style=&quot;color: #B57EDC;&quot;&gt;Add&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #B57EDC;&quot;&gt;        Test&lt;/span&gt;&lt;span&gt;(&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: #98C379;&quot;&gt;First test&lt;/span&gt;&lt;span&gt;&amp;quot;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;        .&lt;/span&gt;&lt;span style=&quot;color: #B57EDC;&quot;&gt;Setup&lt;/span&gt;&lt;span&gt;([]{&lt;/span&gt;&lt;span style=&quot;color: #5F6672;font-style: italic;&quot;&gt; /* optional test setup */&lt;/span&gt;&lt;span&gt; })&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;        .&lt;/span&gt;&lt;span style=&quot;color: #B57EDC;&quot;&gt;Teardown&lt;/span&gt;&lt;span&gt;([]{&lt;/span&gt;&lt;span style=&quot;color: #5F6672;font-style: italic;&quot;&gt; /* optional test teardown */&lt;/span&gt;&lt;span&gt; })&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;        .&lt;/span&gt;&lt;span style=&quot;color: #B57EDC;&quot;&gt;Func&lt;/span&gt;&lt;span&gt;([]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;        {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #E06C75;&quot;&gt;            return&lt;/span&gt;&lt;span style=&quot;color: #C6CCD7;&quot;&gt; Report&lt;/span&gt;&lt;span&gt; {} &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #E06C75;&quot;&gt;            &amp;amp;&lt;/span&gt;&lt;span style=&quot;color: #B57EDC;&quot;&gt; Equal&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span style=&quot;color: #56B6C2;&quot;&gt;1&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span style=&quot;color: #56B6C2;&quot;&gt; 1&lt;/span&gt;&lt;span&gt;) &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #E06C75;&quot;&gt;            &amp;amp;&lt;/span&gt;&lt;span style=&quot;color: #B57EDC;&quot;&gt; Equal&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span style=&quot;color: #56B6C2;&quot;&gt;1&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span style=&quot;color: #56B6C2;&quot;&gt; 2&lt;/span&gt;&lt;span&gt;) &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #E06C75;&quot;&gt;            &amp;amp;&lt;/span&gt;&lt;span style=&quot;color: #B57EDC;&quot;&gt; Equal&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span style=&quot;color: #56B6C2;&quot;&gt;1.2&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span style=&quot;color: #56B6C2;&quot;&gt; 1.4&lt;/span&gt;&lt;span&gt;) &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #E06C75;&quot;&gt;            &amp;amp;&lt;/span&gt;&lt;span style=&quot;color: #B57EDC;&quot;&gt; Throws&lt;/span&gt;&lt;span&gt;([] {&lt;/span&gt;&lt;span style=&quot;color: #E06C75;&quot;&gt; throw&lt;/span&gt;&lt;span&gt; &amp;quot;&lt;/span&gt;&lt;span style=&quot;color: #98C379;&quot;&gt;a&lt;/span&gt;&lt;span&gt;&amp;quot;; }) &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #E06C75;&quot;&gt;            &amp;amp;&lt;/span&gt;&lt;span style=&quot;color: #B57EDC;&quot;&gt; Throws&lt;/span&gt;&lt;span&gt;([] {}) &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #E06C75;&quot;&gt;            &amp;amp;&lt;/span&gt;&lt;span style=&quot;color: #B57EDC;&quot;&gt; DoesNotThrow&lt;/span&gt;&lt;span&gt;([] {}) &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #E06C75;&quot;&gt;            &amp;amp;&lt;/span&gt;&lt;span style=&quot;color: #B57EDC;&quot;&gt; DoesNotThrow&lt;/span&gt;&lt;span&gt;([] {&lt;/span&gt;&lt;span style=&quot;color: #E06C75;&quot;&gt; throw&lt;/span&gt;&lt;span&gt; &amp;quot;&lt;/span&gt;&lt;span style=&quot;color: #98C379;&quot;&gt;a&lt;/span&gt;&lt;span&gt;&amp;quot;; });&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;        })&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #C6CCD7;&quot;&gt;regs&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span style=&quot;color: #B57EDC;&quot;&gt;Run&lt;/span&gt;&lt;span&gt;();&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Which outputs:&lt;/p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #A9B2C3; background-color: #21252B;&quot; &gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;[  SUITE] First suite&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;[X  FAIL] First test :&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;          Failed assert: &amp;#39;Equal [1:2]&amp;#39;; File: &amp;#39;D:\testlib\src\main.cpp&amp;#39;; Line: &amp;#39;25&amp;#39;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;          Failed assert: &amp;#39;Equal [1.2:1.4]&amp;#39;; File: &amp;#39;D:\testlib\src\main.cpp&amp;#39;; Line: &amp;#39;26&amp;#39;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;          Failed assert: &amp;#39;Throws&amp;#39;; File: &amp;#39;D:\testlib\src\main.cpp&amp;#39;; Line: &amp;#39;24&amp;#39;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;          Failed assert: &amp;#39;DoesNotThrow&amp;#39;; File: &amp;#39;D:\testlib\src\main.cpp&amp;#39;; Line: &amp;#39;26&amp;#39;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;[SUMMARY] Total: 1; Succeeded: 0; Failed: 1&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;          Failed tests:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;          - First test&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&quot;library-design&quot;&gt;Library design&lt;/h2&gt;
&lt;p&gt;The general hierarchy is the following:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Registry
&lt;ul&gt;
&lt;li&gt;Suites
&lt;ul&gt;
&lt;li&gt;Tests
&lt;ul&gt;
&lt;li&gt;Asserts&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Let&#39;s look at these from the bottom up.&lt;/p&gt;
&lt;h3 id=&quot;assert&quot;&gt;Assert&lt;/h3&gt;
&lt;p&gt;An assert is a single check represented by a function. Here&#39;s an example of an assert:&lt;/p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #A9B2C3; background-color: #21252B;&quot; &gt;&lt;code data-lang=&quot;cpp&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #5F6672;font-style: italic;&quot;&gt;// succeeds if the actual value is equal to the expected value&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #5F6672;font-style: italic;&quot;&gt;// works for floating point numbers as well&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #61AFEF;&quot;&gt;template&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #61AFEF;&quot;&gt;typename&lt;/span&gt;&lt;span style=&quot;color: #E5C07B;&quot;&gt; T&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;[[&lt;/span&gt;&lt;span style=&quot;color: #D19A66;&quot;&gt;nodiscard&lt;/span&gt;&lt;span&gt;]]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #61AFEF;&quot;&gt;constexpr auto&lt;/span&gt;&lt;span style=&quot;color: #B57EDC;&quot;&gt; Equal&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span style=&quot;color: #61AFEF;&quot;&gt;const&lt;/span&gt;&lt;span style=&quot;color: #E5C07B;&quot;&gt; T&lt;/span&gt;&lt;span style=&quot;color: #61AFEF;&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span style=&quot;color: #C6CCD7;&quot;&gt; actual&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span style=&quot;color: #61AFEF;&quot;&gt; const&lt;/span&gt;&lt;span style=&quot;color: #E5C07B;&quot;&gt; T&lt;/span&gt;&lt;span style=&quot;color: #61AFEF;&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span style=&quot;color: #C6CCD7;&quot;&gt; expected&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span style=&quot;color: #61AFEF;&quot;&gt; const&lt;/span&gt;&lt;span&gt; std::&lt;/span&gt;&lt;span style=&quot;color: #E5C07B;&quot;&gt;source_location&lt;/span&gt;&lt;span style=&quot;color: #C6CCD7;&quot;&gt; loc&lt;/span&gt;&lt;span style=&quot;color: #E06C75;&quot;&gt; =&lt;/span&gt;&lt;span&gt; std::source_location::&lt;/span&gt;&lt;span style=&quot;color: #B57EDC;&quot;&gt;current&lt;/span&gt;&lt;span&gt;()) -&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #E5C07B;&quot;&gt; Result&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;{&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #61AFEF;&quot;&gt;    const auto&lt;/span&gt;&lt;span style=&quot;color: #C6CCD7;&quot;&gt; res&lt;/span&gt;&lt;span style=&quot;color: #E06C75;&quot;&gt; =&lt;/span&gt;&lt;span&gt; (types::&lt;/span&gt;&lt;span style=&quot;color: #C6CCD7;&quot;&gt;Number&lt;/span&gt;&lt;span style=&quot;color: #E06C75;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #C6CCD7;&quot;&gt;T&lt;/span&gt;&lt;span style=&quot;color: #E06C75;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span style=&quot;color: #E06C75;&quot;&gt; ?&lt;/span&gt;&lt;span&gt; math::&lt;/span&gt;&lt;span style=&quot;color: #B57EDC;&quot;&gt;NumericEqual&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span style=&quot;color: #C6CCD7;&quot;&gt;actual&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span style=&quot;color: #C6CCD7;&quot;&gt; expected&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span style=&quot;color: #E06C75;&quot;&gt; :&lt;/span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span style=&quot;color: #C6CCD7;&quot;&gt;actual&lt;/span&gt;&lt;span style=&quot;color: #E06C75;&quot;&gt; ==&lt;/span&gt;&lt;span style=&quot;color: #C6CCD7;&quot;&gt; expected&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #E06C75;&quot;&gt;    return&lt;/span&gt;&lt;span style=&quot;color: #C6CCD7;&quot;&gt; res&lt;/span&gt;&lt;span style=&quot;color: #E06C75;&quot;&gt; ?&lt;/span&gt;&lt;span style=&quot;color: #B57EDC;&quot;&gt; Result&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span style=&quot;color: #56B6C2;&quot;&gt;true&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span style=&quot;color: #E06C75;&quot;&gt; :&lt;/span&gt;&lt;span style=&quot;color: #B57EDC;&quot;&gt; Result&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span style=&quot;color: #56B6C2;&quot;&gt;false&lt;/span&gt;&lt;span&gt;, std::&lt;/span&gt;&lt;span style=&quot;color: #B57EDC;&quot;&gt;format&lt;/span&gt;&lt;span&gt;(&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: #98C379;&quot;&gt;Equal [{}:{}]&lt;/span&gt;&lt;span&gt;&amp;quot;,&lt;/span&gt;&lt;span style=&quot;color: #C6CCD7;&quot;&gt; actual&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span style=&quot;color: #C6CCD7;&quot;&gt; expected&lt;/span&gt;&lt;span&gt;),&lt;/span&gt;&lt;span style=&quot;color: #C6CCD7;&quot;&gt; loc&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;You can notice that it returns some &lt;code&gt;Result&lt;/code&gt; type. This is a structure that contains a &lt;code&gt;bool&lt;/code&gt; result of the assert and a &lt;code&gt;string&lt;/code&gt; message used later for output. It contains the type of the assert (&quot;Equal&quot; in this case), actual and expected values (where applicable), and the source location of the assert. The message is formed only if the assert failed.&lt;/p&gt;
&lt;p&gt;The library offers several types of asserts - (Not)Equal, (Not)Null, True, False, Throws, DoesNotThrow - and the list can be easily expanded.&lt;/p&gt;
&lt;h3 id=&quot;test&quot;&gt;Test&lt;/h3&gt;
&lt;p&gt;A test is a function that contains a number of asserts. The simplest way to create a test is with a lambda, as shown in the example above. Tests can have optional &lt;code&gt;Setup&lt;/code&gt; and &lt;code&gt;Teardown&lt;/code&gt; functions that run before and after the test accordingly.&lt;/p&gt;
&lt;p&gt;Tests need to aggregate the results of the asserts and report them back to the Registry. Since assert results are not a single &lt;code&gt;bool&lt;/code&gt; but a structure with an optional message, the way of collecting all these messages is more complex. For this purpose, the library uses the &lt;code&gt;Report&lt;/code&gt; structure, containing:&lt;/p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #A9B2C3; background-color: #21252B;&quot; &gt;&lt;code data-lang=&quot;cpp&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #5F6672;font-style: italic;&quot;&gt;// the combined result of the whole test&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #61AFEF;&quot;&gt;bool&lt;/span&gt;&lt;span style=&quot;color: #C6CCD7;&quot;&gt; success&lt;/span&gt;&lt;span style=&quot;color: #E06C75;&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;color: #56B6C2;&quot;&gt; true&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #5F6672;font-style: italic;&quot;&gt;// a list of all messages&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;std::&lt;/span&gt;&lt;span style=&quot;color: #C6CCD7;&quot;&gt;vector&lt;/span&gt;&lt;span style=&quot;color: #E06C75;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;std::&lt;/span&gt;&lt;span style=&quot;color: #C6CCD7;&quot;&gt;string&lt;/span&gt;&lt;span style=&quot;color: #E06C75;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #C6CCD7;&quot;&gt; messages&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;It also provides a convenience function for formatting the report and an overload for the &lt;code&gt;&amp;amp;&lt;/code&gt; operator, which enables convenient assert chaining shown in the examples.&lt;/p&gt;
&lt;h3 id=&quot;suite&quot;&gt;Suite&lt;/h3&gt;
&lt;p&gt;A suite can be used for grouping related tests together. It also provides the ability to add &lt;code&gt;Setup&lt;/code&gt; and &lt;code&gt;Teardown&lt;/code&gt; functions. To enable convenient test registration, the &lt;code&gt;Suite&lt;/code&gt; class provides a variadic template function &lt;code&gt;Add&lt;/code&gt;, which allows adding any number of tests in a single call:&lt;/p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #A9B2C3; background-color: #21252B;&quot; &gt;&lt;code data-lang=&quot;cpp&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #61AFEF;&quot;&gt;template&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #61AFEF;&quot;&gt;typename&lt;/span&gt;&lt;span style=&quot;color: #E5C07B;&quot;&gt; T&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span style=&quot;color: #61AFEF;&quot;&gt; typename&lt;/span&gt;&lt;span&gt;...&lt;/span&gt;&lt;span style=&quot;color: #E5C07B;&quot;&gt; Ts&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #E06C75;&quot;&gt;requires&lt;/span&gt;&lt;span&gt; (std::&lt;/span&gt;&lt;span style=&quot;color: #C6CCD7;&quot;&gt;same_as&lt;/span&gt;&lt;span style=&quot;color: #E06C75;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;std::&lt;/span&gt;&lt;span style=&quot;color: #E5C07B;&quot;&gt;decay_t&lt;/span&gt;&lt;span style=&quot;color: #E06C75;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #C6CCD7;&quot;&gt;T&lt;/span&gt;&lt;span style=&quot;color: #E06C75;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span style=&quot;color: #C6CCD7;&quot;&gt; Test&lt;/span&gt;&lt;span style=&quot;color: #E06C75;&quot;&gt;&amp;gt; &amp;amp;&amp;amp;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;         (std::&lt;/span&gt;&lt;span style=&quot;color: #C6CCD7;&quot;&gt;same_as&lt;/span&gt;&lt;span style=&quot;color: #E06C75;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;std::&lt;/span&gt;&lt;span style=&quot;color: #E5C07B;&quot;&gt;decay_t&lt;/span&gt;&lt;span style=&quot;color: #E06C75;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #C6CCD7;&quot;&gt;Ts&lt;/span&gt;&lt;span style=&quot;color: #E06C75;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span&gt;, std::&lt;/span&gt;&lt;span style=&quot;color: #E5C07B;&quot;&gt;decay_t&lt;/span&gt;&lt;span style=&quot;color: #E06C75;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #C6CCD7;&quot;&gt;T&lt;/span&gt;&lt;span style=&quot;color: #E06C75;&quot;&gt;&amp;gt;&amp;gt; &amp;amp;&amp;amp;&lt;/span&gt;&lt;span&gt; ...))&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #61AFEF;&quot;&gt;auto&lt;/span&gt;&lt;span style=&quot;color: #B57EDC;&quot;&gt; Add&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span style=&quot;color: #E5C07B;&quot;&gt;T&lt;/span&gt;&lt;span style=&quot;color: #61AFEF;&quot;&gt;&amp;amp;&amp;amp;&lt;/span&gt;&lt;span style=&quot;color: #C6CCD7;&quot;&gt; first&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span style=&quot;color: #E5C07B;&quot;&gt; Ts&lt;/span&gt;&lt;span style=&quot;color: #61AFEF;&quot;&gt;&amp;amp;&amp;amp;&lt;/span&gt;&lt;span&gt;...&lt;/span&gt;&lt;span style=&quot;color: #C6CCD7;&quot;&gt; rest&lt;/span&gt;&lt;span&gt;) -&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #61AFEF;&quot;&gt; void&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;{&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #C6CCD7;&quot;&gt;    tests&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span style=&quot;color: #B57EDC;&quot;&gt;emplace_back&lt;/span&gt;&lt;span&gt;(std::&lt;/span&gt;&lt;span style=&quot;color: #B57EDC;&quot;&gt;forward&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #E5C07B;&quot;&gt;T&lt;/span&gt;&lt;span&gt;&amp;gt;(&lt;/span&gt;&lt;span style=&quot;color: #C6CCD7;&quot;&gt;first&lt;/span&gt;&lt;span&gt;));&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    (&lt;/span&gt;&lt;span style=&quot;color: #C6CCD7;&quot;&gt;tests&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span style=&quot;color: #B57EDC;&quot;&gt;emplace_back&lt;/span&gt;&lt;span&gt;(std::&lt;/span&gt;&lt;span style=&quot;color: #B57EDC;&quot;&gt;forward&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #E5C07B;&quot;&gt;Ts&lt;/span&gt;&lt;span&gt;&amp;gt;(&lt;/span&gt;&lt;span style=&quot;color: #C6CCD7;&quot;&gt;rest&lt;/span&gt;&lt;span&gt;)), ...);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h3 id=&quot;registry&quot;&gt;Registry&lt;/h3&gt;
&lt;p&gt;And finally, the structure that contains all the test suites. Its main purpose is storing the suites and running them in a controlled manner. The registry outputs all the &lt;code&gt;Report&lt;/code&gt;s from tests and keeps track of the number of total and failed tests. It also handles any unhandled exceptions that may occur inside the test functions and reports them, so this test:&lt;/p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #A9B2C3; background-color: #21252B;&quot; &gt;&lt;code data-lang=&quot;cpp&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #B57EDC;&quot;&gt;Test&lt;/span&gt;&lt;span&gt;(&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: #98C379;&quot;&gt;Exceptional test&lt;/span&gt;&lt;span&gt;&amp;quot;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;.&lt;/span&gt;&lt;span style=&quot;color: #B57EDC;&quot;&gt;Func&lt;/span&gt;&lt;span&gt;([]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;{&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #E06C75;&quot;&gt;    throw&lt;/span&gt;&lt;span&gt; std::&lt;/span&gt;&lt;span style=&quot;color: #B57EDC;&quot;&gt;runtime_error&lt;/span&gt;&lt;span&gt;(&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: #98C379;&quot;&gt;some exception&lt;/span&gt;&lt;span&gt;&amp;quot;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #E06C75;&quot;&gt;    return&lt;/span&gt;&lt;span style=&quot;color: #C6CCD7;&quot;&gt; Report&lt;/span&gt;&lt;span&gt;{};&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;})&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;produces this output:&lt;/p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #A9B2C3; background-color: #21252B;&quot; &gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;[  SUITE] First suite&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;[! ERROR] Test &amp;#39;Exceptional test&amp;#39;: Test function has thrown an unhandled exception &amp;#39;some exception&amp;#39;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;[SUMMARY] Total: 0; Succeeded: 0; Failed: 0; Errors: 1&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;The same goes for any unhandled exceptions in the setup or teardown functions.&lt;/p&gt;
&lt;h2 id=&quot;conclusion&quot;&gt;Conclusion&lt;/h2&gt;
&lt;p&gt;For now I&#39;m using the library in a personal project as a part of the built-in testing environment. It has worked quite well for me so far. I&#39;ve not yet released it as a standalone project, but you can find it &lt;a rel=&quot;external&quot; href=&quot;https://github.com/anupyldd/mukava/tree/dev/src/core&quot;&gt;here&lt;/a&gt; in the &lt;code&gt;test&lt;/code&gt; module (note that it also depends on the &lt;code&gt;math&lt;/code&gt; and &lt;code&gt;types&lt;/code&gt; modules).&lt;/p&gt;
&lt;p&gt;Some time ago I also released the &lt;a rel=&quot;external&quot; href=&quot;https://github.com/anupyldd/dough&quot;&gt;dough&lt;/a&gt; library, where I tried to achieve similar goals. I&#39;ve improved in some areas since then, but &lt;code&gt;dough&lt;/code&gt; offers more features like tagging and CLI, which I might later add to the current library.&lt;/p&gt;
</content>
        
    </entry>
</feed>
