Each block represents a slate.
Rain
Drop a water bucket in the center to activate.
[Water    ] [Water    ] [Water    ]
[Air      ] [Air      ] [Air      ]
[Distorted] [Distorted] [Distorted]
[Water    ] [Water    ] [Water    ]
| # library | |
| # sanitizes paths and interprets them as relative to / (adds / at the beginning, removes it at the end, deduplicates multiple /, removes .. and .) | |
| SED_DIRSANIT='s`(^|$)`/`g;s`/+`/`g;:b;s`/\./`/`;tb;:a;s`(^|/[^/]*?)/\.\./`/`g;ta;s`^(.+)/$`\1`g' | |
| # escapes strings for use in a sed command | |
| SED_ESCAPE='s/[]\/$*.^[]/\\&/g' | |
| die() { # vararg errmsg | |
| (tput bold | 
| - Craft a tuning fork. It is used to change the resonance strength and natures of a crystal. | |
| - Hold the tuning fork in your hand to make it pick up the resonance in the environment. Eventually it will start resonating too. | |
| - Find a crystal in the world and stand right next to it with the tuning fork. The crystal and tuning fork will now slowly balance out their resonance and natures. | |
| - After it has balanced out enough, you can right click the crystal to pick it up. Breaking it with a pickaxe will instead drop dusts of the natures the crystal had. These will also come in useful, so it's a good idea to break a few crystals. | |
| - Create a few slates and place them in a 3x3 pattern on the ground. | |
| - Place some dust on the slates so that it forms a correct recipe (see below) | |
| - Click the center slate with your tuning fork to create a seal. This can be placed anywhere on a flat surface, as long as there is enough space for it (most seals are 3x3 in size) | |
| - To make the seal do something, you must supply it with energy. Y | 
Each block represents a slate.
Rain
Drop a water bucket in the center to activate.
[Water    ] [Water    ] [Water    ]
[Air      ] [Air      ] [Air      ]
[Distorted] [Distorted] [Distorted]
[Water    ] [Water    ] [Water    ]
| #!/bin/bash | |
| query_abort() { | |
| printf "==> %s [Y/n] " "$1" | |
| read -n 1 response | |
| case "$response" in | |
| 'Y'|'y'|'') | |
| ;; | |
| *) | |
| printf "\n%s\n" "Aborting." | 
| @file:Suppress("PropertyName") | |
| import net.minecraftforge.gradle.user.UserBaseExtension | |
| import org.gradle.jvm.tasks.Jar | |
| val mod_name: String by extra | |
| val mod_version: String by extra | |
| val mc_version: String by extra | |
| val forge_version: String by extra | |
| val mappings_version: String by extra | 
| import net.minecraftforge.fml.common.FMLLog; | |
| import net.minecraftforge.fml.relauncher.ReflectionHelper; | |
| import org.apache.logging.log4j.Logger; | |
| import java.lang.reflect.Field; | |
| public class Nope { | |
| /** | |
| * Make forge not spew "dangerous alternative prefix" messages in this block. | |
| */ |