commit 40af9121bddbabb15a740f336f3ec4c6ffb928db Author: azurelmao Date: Tue Oct 25 21:31:38 2022 +0200 Initial commit diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..0e259d4 --- /dev/null +++ b/LICENSE @@ -0,0 +1,121 @@ +Creative Commons Legal Code + +CC0 1.0 Universal + + CREATIVE COMMONS CORPORATION IS NOT A LAW FIRM AND DOES NOT PROVIDE + LEGAL SERVICES. DISTRIBUTION OF THIS DOCUMENT DOES NOT CREATE AN + ATTORNEY-CLIENT RELATIONSHIP. CREATIVE COMMONS PROVIDES THIS + INFORMATION ON AN "AS-IS" BASIS. CREATIVE COMMONS MAKES NO WARRANTIES + REGARDING THE USE OF THIS DOCUMENT OR THE INFORMATION OR WORKS + PROVIDED HEREUNDER, AND DISCLAIMS LIABILITY FOR DAMAGES RESULTING FROM + THE USE OF THIS DOCUMENT OR THE INFORMATION OR WORKS PROVIDED + HEREUNDER. + +Statement of Purpose + +The laws of most jurisdictions throughout the world automatically confer +exclusive Copyright and Related Rights (defined below) upon the creator +and subsequent owner(s) (each and all, an "owner") of an original work of +authorship and/or a database (each, a "Work"). + +Certain owners wish to permanently relinquish those rights to a Work for +the purpose of contributing to a commons of creative, cultural and +scientific works ("Commons") that the public can reliably and without fear +of later claims of infringement build upon, modify, incorporate in other +works, reuse and redistribute as freely as possible in any form whatsoever +and for any purposes, including without limitation commercial purposes. +These owners may contribute to the Commons to promote the ideal of a free +culture and the further production of creative, cultural and scientific +works, or to gain reputation or greater distribution for their Work in +part through the use and efforts of others. + +For these and/or other purposes and motivations, and without any +expectation of additional consideration or compensation, the person +associating CC0 with a Work (the "Affirmer"), to the extent that he or she +is an owner of Copyright and Related Rights in the Work, voluntarily +elects to apply CC0 to the Work and publicly distribute the Work under its +terms, with knowledge of his or her Copyright and Related Rights in the +Work and the meaning and intended legal effect of CC0 on those rights. + +1. Copyright and Related Rights. A Work made available under CC0 may be +protected by copyright and related or neighboring rights ("Copyright and +Related Rights"). Copyright and Related Rights include, but are not +limited to, the following: + + i. the right to reproduce, adapt, distribute, perform, display, + communicate, and translate a Work; + ii. moral rights retained by the original author(s) and/or performer(s); +iii. publicity and privacy rights pertaining to a person's image or + likeness depicted in a Work; + iv. rights protecting against unfair competition in regards to a Work, + subject to the limitations in paragraph 4(a), below; + v. rights protecting the extraction, dissemination, use and reuse of data + in a Work; + vi. database rights (such as those arising under Directive 96/9/EC of the + European Parliament and of the Council of 11 March 1996 on the legal + protection of databases, and under any national implementation + thereof, including any amended or successor version of such + directive); and +vii. other similar, equivalent or corresponding rights throughout the + world based on applicable law or treaty, and any national + implementations thereof. + +2. Waiver. To the greatest extent permitted by, but not in contravention +of, applicable law, Affirmer hereby overtly, fully, permanently, +irrevocably and unconditionally waives, abandons, and surrenders all of +Affirmer's Copyright and Related Rights and associated claims and causes +of action, whether now known or unknown (including existing as well as +future claims and causes of action), in the Work (i) in all territories +worldwide, (ii) for the maximum duration provided by applicable law or +treaty (including future time extensions), (iii) in any current or future +medium and for any number of copies, and (iv) for any purpose whatsoever, +including without limitation commercial, advertising or promotional +purposes (the "Waiver"). Affirmer makes the Waiver for the benefit of each +member of the public at large and to the detriment of Affirmer's heirs and +successors, fully intending that such Waiver shall not be subject to +revocation, rescission, cancellation, termination, or any other legal or +equitable action to disrupt the quiet enjoyment of the Work by the public +as contemplated by Affirmer's express Statement of Purpose. + +3. Public License Fallback. Should any part of the Waiver for any reason +be judged legally invalid or ineffective under applicable law, then the +Waiver shall be preserved to the maximum extent permitted taking into +account Affirmer's express Statement of Purpose. In addition, to the +extent the Waiver is so judged Affirmer hereby grants to each affected +person a royalty-free, non transferable, non sublicensable, non exclusive, +irrevocable and unconditional license to exercise Affirmer's Copyright and +Related Rights in the Work (i) in all territories worldwide, (ii) for the +maximum duration provided by applicable law or treaty (including future +time extensions), (iii) in any current or future medium and for any number +of copies, and (iv) for any purpose whatsoever, including without +limitation commercial, advertising or promotional purposes (the +"License"). The License shall be deemed effective as of the date CC0 was +applied by Affirmer to the Work. Should any part of the License for any +reason be judged legally invalid or ineffective under applicable law, such +partial invalidity or ineffectiveness shall not invalidate the remainder +of the License, and in such case Affirmer hereby affirms that he or she +will not (i) exercise any of his or her remaining Copyright and Related +Rights in the Work or (ii) assert any associated claims and causes of +action with respect to the Work, in either case contrary to Affirmer's +express Statement of Purpose. + +4. Limitations and Disclaimers. + + a. No trademark or patent rights held by Affirmer are waived, abandoned, + surrendered, licensed or otherwise affected by this document. + b. Affirmer offers the Work as-is and makes no representations or + warranties of any kind concerning the Work, express, implied, + statutory or otherwise, including without limitation warranties of + title, merchantability, fitness for a particular purpose, non + infringement, or the absence of latent or other defects, accuracy, or + the present or absence of errors, whether or not discoverable, all to + the greatest extent permissible under applicable law. + c. Affirmer disclaims responsibility for clearing rights of other persons + that may apply to the Work or any use thereof, including without + limitation any person's Copyright and Related Rights in the Work. + Further, Affirmer disclaims responsibility for obtaining any necessary + consents, permissions or other rights required for any use of the + Work. + d. Affirmer understands and acknowledges that Creative Commons is not a + party to this document and has no duty or obligation with respect to + this CC0 or use of the Work. diff --git a/README.md b/README.md new file mode 100644 index 0000000..b1cb386 --- /dev/null +++ b/README.md @@ -0,0 +1,32 @@ +# BTA Babric Minimal Example Mod + +A babric mod template for quickly making new mods. + +## Prerequisites +- JDK for Java 17 ([Eclipse Temurin](https://adoptium.net/temurin/releases/) recommended) +- IntelliJ IDEA +- Minecraft Development plugin (Optional, but highly recommended) + +## Setup steps + +1. Download or clone this repository and put it somewhere. +``` +git clone https://github.com/azurelmao/bta-babric-minimal-example-mod.git +``` + +2. Import the project in IntelliJ IDEA, close it and open it again. + + +3. Create a new run configuration by going in `Run > Edit Configurations` + Then click on the plus icon and select Gradle. In the `Tasks and Arguments` field enter `build` + Running it will build your finished jar files and put them in `build/libs/` + + +4. Open `File > Settings` and head to `Build, Execution, Development > Build Tools > Gradle` + Change `Build and run using` and `Run tests using` to `IntelliJ IDEA` + + +5. Open `File > Project Structure`, select `Project` and set `Compiler output` to your project's path. + + +6. Done! Now all that's left is to change every mention of `examplemod` to your own mod id. Happy modding! \ No newline at end of file diff --git a/build.gradle b/build.gradle new file mode 100644 index 0000000..37aba52 --- /dev/null +++ b/build.gradle @@ -0,0 +1,72 @@ +plugins { + id 'babric-loom' version '0.12-SNAPSHOT' + id 'java' +} + +group = project.mod_group +archivesBaseName = project.mod_name +version = project.mod_version + +loom { + gluedMinecraftJar() + noIntermediateMappings() + customMinecraftManifest.set("https://github.com/azurelmao/bta-manifest-repo/releases/download/v1.7.6.2_02/1.7.6.2_02.json") +} + +repositories { + mavenCentral() + maven { + name = 'Babric' + url = 'https://maven.glass-launcher.net/babric' + } + maven { + name = 'Fabric' + url = 'https://maven.fabricmc.net/' + } + ivy { + url = "https://github.com/Better-than-Adventure" + patternLayout { + artifact("[organisation]/releases/download/v[revision]/[module].jar") + m2compatible = true + } + metadataSources { artifact() } + } +} + +dependencies { + minecraft "bta-download-repo:bta:${project.bta_version}" + mappings loom.layered() {} + + modRuntimeOnly files("libs/minecraft-client-base.jar") // only used to fix the Client run configuration + modImplementation "babric:fabric-loader:${project.loader_version}" + + modImplementation "org.slf4j:slf4j-api:1.8.0-beta4" + modImplementation "org.apache.logging.log4j:log4j-slf4j18-impl:2.16.0" + + modImplementation("org.apache.commons:commons-lang3:3.12.0") + include("org.apache.commons:commons-lang3:3.12.0") +} + +java { + sourceCompatibility = JavaVersion.VERSION_1_8 + targetCompatibility = JavaVersion.VERSION_1_8 + withSourcesJar() +} + +tasks.withType(JavaCompile) { + options.release.set 8 +} + +jar { + from("LICENSE") { + rename { "${it}_${archivesBaseName}" } + } +} + +processResources { + inputs.property "version", version + + filesMatching("fabric.mod.json") { + expand "version": version + } +} diff --git a/gradle.properties b/gradle.properties new file mode 100644 index 0000000..4e3d3c7 --- /dev/null +++ b/gradle.properties @@ -0,0 +1,16 @@ +org.gradle.jvmargs=-Xmx2G + +# BTA +bta_version=1.7.6.2_02 + +# Loader Dependencies +asm_version=9.3 +mixin_version=0.11.4+mixin.0.8.5 + +# Loader +loader_version=0.14.6-babric.1 + +# Mod +mod_version=1.0.0 +mod_group=azurelmao +mod_name=examplemod diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar new file mode 100644 index 0000000..7454180 Binary files /dev/null and b/gradle/wrapper/gradle-wrapper.jar differ diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties new file mode 100644 index 0000000..8049c68 --- /dev/null +++ b/gradle/wrapper/gradle-wrapper.properties @@ -0,0 +1,5 @@ +distributionBase=GRADLE_USER_HOME +distributionPath=wrapper/dists +distributionUrl=https\://services.gradle.org/distributions/gradle-7.5-bin.zip +zipStoreBase=GRADLE_USER_HOME +zipStorePath=wrapper/dists diff --git a/gradlew b/gradlew new file mode 100644 index 0000000..744e882 --- /dev/null +++ b/gradlew @@ -0,0 +1,185 @@ +#!/usr/bin/env sh + +# +# Copyright 2015 the original author or authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +############################################################################## +## +## Gradle start up script for UN*X +## +############################################################################## + +# Attempt to set APP_HOME +# Resolve links: $0 may be a link +PRG="$0" +# Need this for relative symlinks. +while [ -h "$PRG" ] ; do + ls=`ls -ld "$PRG"` + link=`expr "$ls" : '.*-> \(.*\)$'` + if expr "$link" : '/.*' > /dev/null; then + PRG="$link" + else + PRG=`dirname "$PRG"`"/$link" + fi +done +SAVED="`pwd`" +cd "`dirname \"$PRG\"`/" >/dev/null +APP_HOME="`pwd -P`" +cd "$SAVED" >/dev/null + +APP_NAME="Gradle" +APP_BASE_NAME=`basename "$0"` + +# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' + +# Use the maximum available, or set MAX_FD != -1 to use that value. +MAX_FD="maximum" + +warn () { + echo "$*" +} + +die () { + echo + echo "$*" + echo + exit 1 +} + +# OS specific support (must be 'true' or 'false'). +cygwin=false +msys=false +darwin=false +nonstop=false +case "`uname`" in + CYGWIN* ) + cygwin=true + ;; + Darwin* ) + darwin=true + ;; + MSYS* | MINGW* ) + msys=true + ;; + NONSTOP* ) + nonstop=true + ;; +esac + +CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar + + +# Determine the Java command to use to start the JVM. +if [ -n "$JAVA_HOME" ] ; then + if [ -x "$JAVA_HOME/jre/sh/java" ] ; then + # IBM's JDK on AIX uses strange locations for the executables + JAVACMD="$JAVA_HOME/jre/sh/java" + else + JAVACMD="$JAVA_HOME/bin/java" + fi + if [ ! -x "$JAVACMD" ] ; then + die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." + fi +else + JAVACMD="java" + which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." +fi + +# Increase the maximum file descriptors if we can. +if [ "$cygwin" = "false" -a "$darwin" = "false" -a "$nonstop" = "false" ] ; then + MAX_FD_LIMIT=`ulimit -H -n` + if [ $? -eq 0 ] ; then + if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then + MAX_FD="$MAX_FD_LIMIT" + fi + ulimit -n $MAX_FD + if [ $? -ne 0 ] ; then + warn "Could not set maximum file descriptor limit: $MAX_FD" + fi + else + warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT" + fi +fi + +# For Darwin, add options to specify how the application appears in the dock +if $darwin; then + GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\"" +fi + +# For Cygwin or MSYS, switch paths to Windows format before running java +if [ "$cygwin" = "true" -o "$msys" = "true" ] ; then + APP_HOME=`cygpath --path --mixed "$APP_HOME"` + CLASSPATH=`cygpath --path --mixed "$CLASSPATH"` + + JAVACMD=`cygpath --unix "$JAVACMD"` + + # We build the pattern for arguments to be converted via cygpath + ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null` + SEP="" + for dir in $ROOTDIRSRAW ; do + ROOTDIRS="$ROOTDIRS$SEP$dir" + SEP="|" + done + OURCYGPATTERN="(^($ROOTDIRS))" + # Add a user-defined pattern to the cygpath arguments + if [ "$GRADLE_CYGPATTERN" != "" ] ; then + OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)" + fi + # Now convert the arguments - kludge to limit ourselves to /bin/sh + i=0 + for arg in "$@" ; do + CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -` + CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option + + if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition + eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"` + else + eval `echo args$i`="\"$arg\"" + fi + i=`expr $i + 1` + done + case $i in + 0) set -- ;; + 1) set -- "$args0" ;; + 2) set -- "$args0" "$args1" ;; + 3) set -- "$args0" "$args1" "$args2" ;; + 4) set -- "$args0" "$args1" "$args2" "$args3" ;; + 5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;; + 6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;; + 7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;; + 8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;; + 9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;; + esac +fi + +# Escape application args +save () { + for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done + echo " " +} +APP_ARGS=`save "$@"` + +# Collect all arguments for the java command, following the shell quoting and substitution rules +eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS" + +exec "$JAVACMD" "$@" diff --git a/gradlew.bat b/gradlew.bat new file mode 100644 index 0000000..107acd3 --- /dev/null +++ b/gradlew.bat @@ -0,0 +1,89 @@ +@rem +@rem Copyright 2015 the original author or authors. +@rem +@rem Licensed under the Apache License, Version 2.0 (the "License"); +@rem you may not use this file except in compliance with the License. +@rem You may obtain a copy of the License at +@rem +@rem https://www.apache.org/licenses/LICENSE-2.0 +@rem +@rem Unless required by applicable law or agreed to in writing, software +@rem distributed under the License is distributed on an "AS IS" BASIS, +@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +@rem See the License for the specific language governing permissions and +@rem limitations under the License. +@rem + +@if "%DEBUG%" == "" @echo off +@rem ########################################################################## +@rem +@rem Gradle startup script for Windows +@rem +@rem ########################################################################## + +@rem Set local scope for the variables with windows NT shell +if "%OS%"=="Windows_NT" setlocal + +set DIRNAME=%~dp0 +if "%DIRNAME%" == "" set DIRNAME=. +set APP_BASE_NAME=%~n0 +set APP_HOME=%DIRNAME% + +@rem Resolve any "." and ".." in APP_HOME to make it shorter. +for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi + +@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m" + +@rem Find java.exe +if defined JAVA_HOME goto findJavaFromJavaHome + +set JAVA_EXE=java.exe +%JAVA_EXE% -version >NUL 2>&1 +if "%ERRORLEVEL%" == "0" goto execute + +echo. +echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:findJavaFromJavaHome +set JAVA_HOME=%JAVA_HOME:"=% +set JAVA_EXE=%JAVA_HOME%/bin/java.exe + +if exist "%JAVA_EXE%" goto execute + +echo. +echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:execute +@rem Setup the command line + +set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar + + +@rem Execute Gradle +"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %* + +:end +@rem End local scope for the variables with windows NT shell +if "%ERRORLEVEL%"=="0" goto mainEnd + +:fail +rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of +rem the _cmd.exe /c_ return code! +if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1 +exit /b 1 + +:mainEnd +if "%OS%"=="Windows_NT" endlocal + +:omega diff --git a/libs/minecraft-client-base.jar b/libs/minecraft-client-base.jar new file mode 100644 index 0000000..1822a2a Binary files /dev/null and b/libs/minecraft-client-base.jar differ diff --git a/settings.gradle b/settings.gradle new file mode 100644 index 0000000..46d2434 --- /dev/null +++ b/settings.gradle @@ -0,0 +1,17 @@ +pluginManagement { + repositories { + maven { + name = 'Fabric' + url = 'https://maven.fabricmc.net/' + } + gradlePluginPortal() + maven { + name = 'Jitpack' + url = 'https://jitpack.io' + } + maven { + name = 'Babric' + url = 'https://maven.glass-launcher.net/babric' + } + } +} \ No newline at end of file diff --git a/src/main/java/azurelmao/examplemod/ArmorHelper.java b/src/main/java/azurelmao/examplemod/ArmorHelper.java new file mode 100644 index 0000000..98afd74 --- /dev/null +++ b/src/main/java/azurelmao/examplemod/ArmorHelper.java @@ -0,0 +1,32 @@ +package azurelmao.examplemod; + +import azurelmao.examplemod.mixin.helper.RenderPlayerInterface; +import net.minecraft.src.helper.DamageType; +import net.minecraft.src.material.ArmorMaterial; +import org.apache.commons.lang3.ArrayUtils; + +public class ArmorHelper { + + /** + * @param textureName name of the armor texture file. + * @param durability durability of your armor. Will be different than in-game due to how it gets allocated between armor pieces. + * @param combat combat damage reduction in percent. Can be more than 100. + * @param blast blast damage reduction in percent. + * @param fire fire damage reduction in percent. + * @param fall fall damage reduction in percent. + * @return the new ArmorMaterial. + */ + public static ArmorMaterial createArmorMaterial(String textureName, int durability, float combat, float blast, float fire, float fall) { + String[] armorFilenamePrefix = RenderPlayerInterface.getArmorFilenamePrefix(); + armorFilenamePrefix = ArrayUtils.add(armorFilenamePrefix, textureName); + RenderPlayerInterface.setArmorFilenamePrefix(armorFilenamePrefix); + + ArmorMaterial armorMaterial = new ArmorMaterial(textureName, armorFilenamePrefix.length - 1, durability); + ArmorMaterial.setProtectionValuePercent(armorMaterial, DamageType.COMBAT, combat); + ArmorMaterial.setProtectionValuePercent(armorMaterial, DamageType.BLAST, blast); + ArmorMaterial.setProtectionValuePercent(armorMaterial, DamageType.FIRE, fire); + ArmorMaterial.setProtectionValuePercent(armorMaterial, DamageType.FALL, fall); + + return armorMaterial; + } +} diff --git a/src/main/java/azurelmao/examplemod/BlockHelper.java b/src/main/java/azurelmao/examplemod/BlockHelper.java new file mode 100644 index 0000000..7891913 --- /dev/null +++ b/src/main/java/azurelmao/examplemod/BlockHelper.java @@ -0,0 +1,56 @@ +package azurelmao.examplemod; + +import azurelmao.examplemod.mixin.helper.BlockInterface; +import net.minecraft.src.Block; +import net.minecraft.src.Item; +import net.minecraft.src.ItemBlock; +import net.minecraft.src.Material; +import net.minecraft.src.StepSound; + +public class BlockHelper { + + public static Block createBlock(int id, String name, int x, int y, Material material, StepSound stepSound, float hardness, float resistance, float lightValue) { + Block block = new Block(id, material); + block.setTexCoords(x, y); + block.setBlockName(name); + + ((BlockInterface) block).callSetHardness(hardness); + ((BlockInterface) block).callSetResistance(resistance); + ((BlockInterface) block).callSetStepSound(stepSound); + ((BlockInterface) block).callSetLightValue(lightValue); + + Item.itemsList[block.blockID] = new ItemBlock(block.blockID - Block.blocksList.length); + + return block; + } + + public static Block createBlock(int id, String name, int topX, int topY, int bottomX, int bottomY, int sidesX, int sidesY, Material material, StepSound stepSound, float hardness, float resistance, float lightValue) { + Block block = new Block(id, material); + block.setTexCoords(topX, topY, bottomX, bottomY, sidesX, sidesY); + block.setBlockName(name); + + ((BlockInterface) block).callSetHardness(hardness); + ((BlockInterface) block).callSetResistance(resistance); + ((BlockInterface) block).callSetStepSound(stepSound); + ((BlockInterface) block).callSetLightValue(lightValue); + + Item.itemsList[block.blockID] = new ItemBlock(block.blockID - Block.blocksList.length); + + return block; + } + + public static Block createBlock(int id, String name, int topX, int topY, int bottomX, int bottomY, int northX, int northY, int eastX, int eastY, int southX, int southY, int westX, int westY, Material material, StepSound stepSound, float hardness, float resistance, float lightValue) { + Block block = new Block(id, material); + block.setTexCoords(topX, topY, bottomX, bottomY, northX, northY, eastX, eastY, southX, southY, westX, westY); + block.setBlockName(name); + + ((BlockInterface) block).callSetHardness(hardness); + ((BlockInterface) block).callSetResistance(resistance); + ((BlockInterface) block).callSetStepSound(stepSound); + ((BlockInterface) block).callSetLightValue(lightValue); + + Item.itemsList[block.blockID] = new ItemBlock(block.blockID - Block.blocksList.length); + + return block; + } +} diff --git a/src/main/java/azurelmao/examplemod/DimensionHelper.java b/src/main/java/azurelmao/examplemod/DimensionHelper.java new file mode 100644 index 0000000..6add626 --- /dev/null +++ b/src/main/java/azurelmao/examplemod/DimensionHelper.java @@ -0,0 +1,18 @@ +package azurelmao.examplemod; + +import azurelmao.examplemod.mixin.helper.DimensionInterface; +import net.minecraft.src.Block; +import net.minecraft.src.Dimension; +import net.minecraft.src.WorldType; + +import java.util.Arrays; + +public class DimensionHelper { + + public static Dimension createDimension(int id, String name, Dimension homeDimension, float worldScale, Block portalBlock, WorldType worldType, int minY, int maxY) { + Dimension[] extendedList = Arrays.copyOf(Dimension.dimensionList, Dimension.dimensionList.length + 1); + DimensionInterface.setDimensionList(extendedList); + + return new Dimension(id, name, homeDimension, worldScale, portalBlock.blockID).setWorldType(worldType).setBounds(minY, maxY); + } +} diff --git a/src/main/java/azurelmao/examplemod/EntityHelper.java b/src/main/java/azurelmao/examplemod/EntityHelper.java new file mode 100644 index 0000000..821183c --- /dev/null +++ b/src/main/java/azurelmao/examplemod/EntityHelper.java @@ -0,0 +1,19 @@ +package azurelmao.examplemod; + +import azurelmao.examplemod.mixin.helper.EntityListInterface; +import azurelmao.examplemod.mixin.helper.RenderManagerInterface; +import net.minecraft.src.Render; +import net.minecraft.src.RenderManager; + +import java.util.Map; + +public class EntityHelper { + + public static void createEntity(Class clazz, Render render, int id, String name) { + Map entityRenderMap = ((RenderManagerInterface) RenderManager.instance).getEntityRenderMap(); + entityRenderMap.put(clazz, render); + render.setRenderManager(RenderManager.instance); + + EntityListInterface.callAddMapping(clazz, name, id); + } +} diff --git a/src/main/java/azurelmao/examplemod/ExampleMod.java b/src/main/java/azurelmao/examplemod/ExampleMod.java new file mode 100644 index 0000000..d32bf7f --- /dev/null +++ b/src/main/java/azurelmao/examplemod/ExampleMod.java @@ -0,0 +1,20 @@ +package azurelmao.examplemod; + +import net.fabricmc.api.ModInitializer; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + + +public class ExampleMod implements ModInitializer { + public static final String MOD_ID = "examplemod"; + public static final Logger LOGGER = LoggerFactory.getLogger(MOD_ID); + + public static String name(String name) { + return ExampleMod.MOD_ID + "." + name; + } + + @Override + public void onInitialize() { + LOGGER.info("ExampleMod initialized."); + } +} diff --git a/src/main/java/azurelmao/examplemod/RecipeHelper.java b/src/main/java/azurelmao/examplemod/RecipeHelper.java new file mode 100644 index 0000000..18560b9 --- /dev/null +++ b/src/main/java/azurelmao/examplemod/RecipeHelper.java @@ -0,0 +1,167 @@ +package azurelmao.examplemod; + +import azurelmao.examplemod.mixin.helper.CraftingManagerInterface; +import azurelmao.examplemod.mixin.helper.RecipesBlastFurnaceInterface; +import azurelmao.examplemod.mixin.helper.RecipesFurnaceInterface; +import net.minecraft.src.*; + +import java.util.List; +import java.util.Map; + +public class RecipeHelper { + public static final CraftingManager craftingManager = CraftingManager.getInstance(); + public static final RecipesFurnace smeltingManager = RecipesFurnace.smelting(); + public static final RecipesBlastFurnace blastingManager = RecipesBlastFurnace.smelting(); + + public static class Crafting { + + public static void createRecipe(Item outputItem, int amount, Object[] aobj) { + ((CraftingManagerInterface) craftingManager).callAddRecipe(new ItemStack(outputItem, amount), aobj); + } + + public static void createRecipe(Block outputBlock, int amount, Object[] aobj) { + ((CraftingManagerInterface) craftingManager).callAddRecipe(new ItemStack(outputBlock, amount), aobj); + } + + public static void createShapelessRecipe(Item outputItem, int amount, Object[] aobj) { + ((CraftingManagerInterface) craftingManager).callAddShapelessRecipe(new ItemStack(outputItem, amount), aobj); + } + + public static void createShapelessRecipe(Block outputBlock, int amount, Object[] aobj) { + ((CraftingManagerInterface) craftingManager).callAddShapelessRecipe(new ItemStack(outputBlock, amount), aobj); + } + + public static void removeRecipe(Item outputItem) { + List recipes = craftingManager.getRecipeList(); + IRecipe theRecipe = null; + + for (Object recipe : recipes) { + if (recipe instanceof RecipeShaped && ((RecipeShaped) recipe).recipeOutput.itemID == outputItem.itemID) { + theRecipe = (IRecipe) recipe; + break; + } + else if (recipe instanceof RecipeShapeless && ((RecipeShapeless) recipe).recipeOutput.itemID == outputItem.itemID) { + theRecipe = (IRecipe) recipe; + break; + } + } + + if (theRecipe == null) { + ExampleMod.LOGGER.info("Couldn't find recipe with output: " + outputItem.getItemName()); + return; + } + + recipes.remove(theRecipe); + ((CraftingManagerInterface) craftingManager).setRecipes(recipes); + } + public static void removeRecipe(Block outputBlock) { + List recipes = craftingManager.getRecipeList(); + IRecipe theRecipe = null; + + for (Object recipe : recipes) { + if (recipe instanceof RecipeShaped && ((RecipeShaped) recipe).recipeOutput.itemID == outputBlock.blockID) { + theRecipe = (IRecipe) recipe; + break; + } + else if (recipe instanceof RecipeShapeless && ((RecipeShapeless) recipe).recipeOutput.itemID == outputBlock.blockID) { + theRecipe = (IRecipe) recipe; + break; + } + } + + if (theRecipe == null) { + ExampleMod.LOGGER.info("Couldn't find crafting recipe with output: " + outputBlock.getBlockName(0)); + return; + } + + recipes.remove(theRecipe); + ((CraftingManagerInterface) craftingManager).setRecipes(recipes); + } + } + + public static class Smelting { + + public static void createRecipe(Item outputItem, Item inputItem) { + smeltingManager.addSmelting(inputItem.itemID, new ItemStack(outputItem)); + } + + public static void createRecipe(Item outputItem, Block inputItem) { + smeltingManager.addSmelting(inputItem.blockID, new ItemStack(outputItem)); + } + + public static void createRecipe(Block outputItem, Item inputItem) { + smeltingManager.addSmelting(inputItem.itemID, new ItemStack(outputItem)); + } + + public static void createRecipe(Block outputItem, Block inputItem) { + smeltingManager.addSmelting(inputItem.blockID, new ItemStack(outputItem)); + } + + public static void removeRecipe(Item inputItem) { + Map recipes = smeltingManager.getSmeltingList(); + + if (recipes.containsKey(inputItem)) { + ExampleMod.LOGGER.info("Couldn't find smelting recipe with input: " + inputItem.getItemName()); + return; + } + + recipes.remove(inputItem); + ((RecipesFurnaceInterface) smeltingManager).setSmeltingList(recipes); + } + + public static void removeRecipe(Block inputItem) { + Map recipes = smeltingManager.getSmeltingList(); + + if (recipes.containsKey(inputItem)) { + ExampleMod.LOGGER.info("Couldn't find smelting recipe with input: " + inputItem.getBlockName(0)); + return; + } + + recipes.remove(inputItem); + ((RecipesFurnaceInterface) smeltingManager).setSmeltingList(recipes); + } + } + + public static class Blasting { + public static void createRecipe(Item outputItem, Item inputItem) { + blastingManager.addSmelting(inputItem.itemID, new ItemStack(outputItem)); + } + + public static void createRecipe(Item outputItem, Block inputItem) { + blastingManager.addSmelting(inputItem.blockID, new ItemStack(outputItem)); + } + + public static void createRecipe(Block outputItem, Item inputItem) { + blastingManager.addSmelting(inputItem.itemID, new ItemStack(outputItem)); + } + + public static void createRecipe(Block outputItem, Block inputItem) { + blastingManager.addSmelting(inputItem.blockID, new ItemStack(outputItem)); + } + + public static void removeRecipe(Item inputItem) { + Map recipes = blastingManager.getSmeltingList(); + + if (recipes.containsKey(inputItem)) { + ExampleMod.LOGGER.info("Couldn't find blasting recipe with input: " + inputItem.getItemName()); + return; + } + + recipes.remove(inputItem); + ((RecipesBlastFurnaceInterface) blastingManager).setSmeltingList(recipes); + } + + public static void removeRecipe(Block inputItem) { + Map recipes = blastingManager.getSmeltingList(); + + if (recipes.containsKey(inputItem)) { + ExampleMod.LOGGER.info("Couldn't find blasting recipe with input: " + inputItem.getBlockName(0)); + return; + } + + recipes.remove(inputItem); + ((RecipesBlastFurnaceInterface) blastingManager).setSmeltingList(recipes); + } + } + +} diff --git a/src/main/java/azurelmao/examplemod/mixin/fix/MinecraftServerMixin.java b/src/main/java/azurelmao/examplemod/mixin/fix/MinecraftServerMixin.java new file mode 100644 index 0000000..2b5a017 --- /dev/null +++ b/src/main/java/azurelmao/examplemod/mixin/fix/MinecraftServerMixin.java @@ -0,0 +1,24 @@ +package azurelmao.examplemod.mixin.fix; + +import net.minecraft.server.MinecraftServer; +import net.minecraft.src.Dimension; +import net.minecraft.src.EntityTracker; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Shadow; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; + +@Mixin(value = MinecraftServer.class, remap = false) +public class MinecraftServerMixin { + + // Mixin to fix custom dimensions on multiplayer + + @Shadow + public EntityTracker[] entityTracker; + + @Inject(method = "startServer", at = @At(value = "HEAD")) + private void examplemod_startServer(CallbackInfoReturnable cir) { + entityTracker = new EntityTracker[Dimension.dimensionList.length]; + } +} diff --git a/src/main/java/azurelmao/examplemod/mixin/helper/BlockInterface.java b/src/main/java/azurelmao/examplemod/mixin/helper/BlockInterface.java new file mode 100644 index 0000000..223ff2d --- /dev/null +++ b/src/main/java/azurelmao/examplemod/mixin/helper/BlockInterface.java @@ -0,0 +1,22 @@ +package azurelmao.examplemod.mixin.helper; + +import net.minecraft.src.Block; +import net.minecraft.src.StepSound; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.gen.Invoker; + +@Mixin(value = Block.class, remap = false) +public interface BlockInterface { + + @Invoker("setHardness") + Block callSetHardness(float f); + + @Invoker("setResistance") + Block callSetResistance(float f); + + @Invoker("setStepSound") + Block callSetStepSound(StepSound stepSound); + + @Invoker("setLightValue") + Block callSetLightValue(float f); +} diff --git a/src/main/java/azurelmao/examplemod/mixin/helper/CraftingManagerInterface.java b/src/main/java/azurelmao/examplemod/mixin/helper/CraftingManagerInterface.java new file mode 100644 index 0000000..c5cb757 --- /dev/null +++ b/src/main/java/azurelmao/examplemod/mixin/helper/CraftingManagerInterface.java @@ -0,0 +1,22 @@ +package azurelmao.examplemod.mixin.helper; + +import net.minecraft.src.CraftingManager; +import net.minecraft.src.ItemStack; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.gen.Accessor; +import org.spongepowered.asm.mixin.gen.Invoker; + +import java.util.List; + +@Mixin(value = CraftingManager.class, remap = false) +public interface CraftingManagerInterface { + + @Invoker("addRecipe") + void callAddRecipe(ItemStack itemstack, Object[] aobj); + + @Invoker("addShapelessRecipe") + void callAddShapelessRecipe(ItemStack itemstack, Object[] aobj); + + @Accessor("recipes") + void setRecipes(List list); +} diff --git a/src/main/java/azurelmao/examplemod/mixin/helper/DimensionInterface.java b/src/main/java/azurelmao/examplemod/mixin/helper/DimensionInterface.java new file mode 100644 index 0000000..9418293 --- /dev/null +++ b/src/main/java/azurelmao/examplemod/mixin/helper/DimensionInterface.java @@ -0,0 +1,14 @@ +package azurelmao.examplemod.mixin.helper; + +import net.minecraft.src.Dimension; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.gen.Accessor; + +@Mixin(value = Dimension.class, remap = false) +public interface DimensionInterface { + + @Accessor("dimensionList") + static void setDimensionList(Dimension[] list) { + throw new AssertionError(); + } +} \ No newline at end of file diff --git a/src/main/java/azurelmao/examplemod/mixin/helper/EntityListInterface.java b/src/main/java/azurelmao/examplemod/mixin/helper/EntityListInterface.java new file mode 100644 index 0000000..6efca3a --- /dev/null +++ b/src/main/java/azurelmao/examplemod/mixin/helper/EntityListInterface.java @@ -0,0 +1,14 @@ +package azurelmao.examplemod.mixin.helper; + +import net.minecraft.src.EntityList; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.gen.Invoker; + +@Mixin(value = EntityList.class, remap = false) +public interface EntityListInterface { + + @Invoker("addMapping") + static void callAddMapping(Class clazz, String name, int id) { + throw new AssertionError(); + } +} diff --git a/src/main/java/azurelmao/examplemod/mixin/helper/RecipesBlastFurnaceInterface.java b/src/main/java/azurelmao/examplemod/mixin/helper/RecipesBlastFurnaceInterface.java new file mode 100644 index 0000000..8ec4d56 --- /dev/null +++ b/src/main/java/azurelmao/examplemod/mixin/helper/RecipesBlastFurnaceInterface.java @@ -0,0 +1,14 @@ +package azurelmao.examplemod.mixin.helper; + +import net.minecraft.src.RecipesBlastFurnace; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.gen.Accessor; + +import java.util.Map; + +@Mixin(value = RecipesBlastFurnace.class, remap = false) +public interface RecipesBlastFurnaceInterface { + + @Accessor("smeltingList") + void setSmeltingList(Map map); +} diff --git a/src/main/java/azurelmao/examplemod/mixin/helper/RecipesFurnaceInterface.java b/src/main/java/azurelmao/examplemod/mixin/helper/RecipesFurnaceInterface.java new file mode 100644 index 0000000..4dac820 --- /dev/null +++ b/src/main/java/azurelmao/examplemod/mixin/helper/RecipesFurnaceInterface.java @@ -0,0 +1,14 @@ +package azurelmao.examplemod.mixin.helper; + +import net.minecraft.src.RecipesFurnace; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.gen.Accessor; + +import java.util.Map; + +@Mixin(value = RecipesFurnace.class, remap = false) +public interface RecipesFurnaceInterface { + + @Accessor("smeltingList") + void setSmeltingList(Map map); +} diff --git a/src/main/java/azurelmao/examplemod/mixin/helper/RenderManagerInterface.java b/src/main/java/azurelmao/examplemod/mixin/helper/RenderManagerInterface.java new file mode 100644 index 0000000..bbea915 --- /dev/null +++ b/src/main/java/azurelmao/examplemod/mixin/helper/RenderManagerInterface.java @@ -0,0 +1,14 @@ +package azurelmao.examplemod.mixin.helper; + +import net.minecraft.src.RenderManager; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.gen.Accessor; + +import java.util.Map; + +@Mixin(value = RenderManager.class, remap = false) +public interface RenderManagerInterface { + + @Accessor("entityRenderMap") + Map getEntityRenderMap(); +} diff --git a/src/main/java/azurelmao/examplemod/mixin/helper/RenderPlayerInterface.java b/src/main/java/azurelmao/examplemod/mixin/helper/RenderPlayerInterface.java new file mode 100644 index 0000000..2ab37ef --- /dev/null +++ b/src/main/java/azurelmao/examplemod/mixin/helper/RenderPlayerInterface.java @@ -0,0 +1,19 @@ +package azurelmao.examplemod.mixin.helper; + +import net.minecraft.src.RenderPlayer; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.gen.Accessor; + +@Mixin(value = RenderPlayer.class, remap = false) +public interface RenderPlayerInterface { + + @Accessor("armorFilenamePrefix") + static String[] getArmorFilenamePrefix() { + throw new AssertionError(); + } + + @Accessor("armorFilenamePrefix") + static void setArmorFilenamePrefix(String[] strings) { + throw new AssertionError(); + } +} diff --git a/src/main/resources/examplemod.mixins.json b/src/main/resources/examplemod.mixins.json new file mode 100644 index 0000000..937665a --- /dev/null +++ b/src/main/resources/examplemod.mixins.json @@ -0,0 +1,22 @@ +{ + "required": true, + "minVersion": "0.8", + "package": "azurelmao.examplemod.mixin", + "compatibilityLevel": "JAVA_8", + "mixins": [ + "helper.DimensionInterface", + "helper.RenderPlayerInterface", + "helper.BlockInterface", + "fix.MinecraftServerMixin", + "helper.EntityListInterface", + "helper.RenderManagerInterface", + "helper.CraftingManagerInterface", + "helper.RecipesBlastFurnaceInterface", + "helper.RecipesFurnaceInterface" + ], + "client": [ + ], + "injectors": { + "defaultRequire": 1 + } +} diff --git a/src/main/resources/fabric.mod.json b/src/main/resources/fabric.mod.json new file mode 100644 index 0000000..99e7af7 --- /dev/null +++ b/src/main/resources/fabric.mod.json @@ -0,0 +1,33 @@ +{ + "schemaVersion": 1, + "id": "examplemod", + "version": "${version}", + + "name": "Example Mod", + "description": "This mod aims to help new BTA modders.", + "authors": [ + "azurelmao" + ], + "contact": { + "homepage": "", + "sources": "" + }, + + "license": "CC0-1.0", + + "environment": "*", + "entrypoints": { + "main": [ + "azurelmao.examplemod.ExampleMod" + ] + }, + "mixins": [ + "examplemod.mixins.json" + ], + + "depends": { + "fabricloader": ">=0.13.3" + }, + "suggests": { + } +} diff --git a/src/main/resources/gui/items.png b/src/main/resources/gui/items.png new file mode 100644 index 0000000..303bf24 Binary files /dev/null and b/src/main/resources/gui/items.png differ diff --git a/src/main/resources/lang/en_US.lang b/src/main/resources/lang/en_US.lang new file mode 100644 index 0000000..800f7d2 --- /dev/null +++ b/src/main/resources/lang/en_US.lang @@ -0,0 +1,1445 @@ +gui.done=Done +gui.cancel=Cancel +gui.toMenu=Back to title screen +gui.up=Up +gui.down=Down +gui.yes=Yes +gui.no=No + +menu.singleplayer=Singleplayer +menu.multiplayer=Multiplayer +menu.multiplayer.disabled=Multiplayer (not ready yet!) +menu.mods=Texture Packs +menu.options=Options... +menu.quit=Quit Game + +selectWorld.title=Select World +selectWorld.empty=empty +selectWorld.world=World +selectWorld.moreWorldOptions=More World Options +selectWorld.select=Play Selected World +selectWorld.create=Create New World +selectWorld.createDemo=Play New Demo World +selectWorld.delete=Delete +selectWorld.rename=Rename +selectWorld.deleteQuestion=Are you sure you want to delete this world? +selectWorld.deleteWarning=will be lost forever! (A long time!) +selectWorld.deleteButton=Delete +selectWorld.renameButton=Rename +selectWorld.renameTitle=Rename World +selectWorld.conversion=Must be converted! +selectWorld.newWorld=New World +selectWorld.enterName=World Name +selectWorld.gamemode=Mode: +selectWorld.cheats=Cheats: +selectWorld.worldType=World Type: +selectWorld.enterSeed=Seed + +selectServer.title=Select Server +selectServer.connect=Connect to Server +selectServer.ip=Connect to IP +selectServer.add=Add +selectServer.delete=Delete + +addServer.title=Add Server +addServer.serverName=Server Name +addServer.ipAddress=IP Address +addServer.save=Save + +dimension.overworld.name=the Overworld +dimension.hell.name=the Nether +dimension.paradise.name=Paradise + +season.surfacespring.name=Spring +season.surfacesummer.name=Summer +season.surfacefall.name=Autumn +season.surfacewinter.name=Winter + +weather.clear.name=Clear +weather.clear.hell.name=Clear +weather.clear.woods.name=Clear +weather.rain.name=Raining +weather.snow.name=Snowing +weather.storm.name=Thundering +weather.fog.name=Foggy + +gamemode.survival.name=Survival +gamemode.creative.name=Creative + +worldType.overworld.name=Default +worldType.hell.name=Hell +worldType.woods.name=Woods +worldType.paradise.name=Paradise +worldType.flat.name=Flat +worldType.winter.name=Winter +worldType.retro.name=Retro +worldType.islands.name=Flooded +worldType.ruins.name=Ruins +worldType.dungeons.name=Dungeon Crawler +worldType.deeper.name=Extended Default +worldType.void.name=Void + +multiplayer.title=Connect to IP +multiplayer.connect=Connect +multiplayer.info1= +multiplayer.info2= +multiplayer.ipinfo=Enter the IP of a server to connect to it: + +multiplayer.downloadingTerrain=Downloading terrain + +multiplayer.stopSleeping=Leave Bed + +demo.day.1=This demo will last five game days, do your best! +demo.day.2=Day Two +demo.day.3=Day Three +demo.day.4=Day Four +demo.day.5=This is your last day! +demo.day.warning=Your time is almost up! +demo.day.6=You have passed your fifth day, use F2 to save a screenshot of your creation +demo.reminder=The demo time has expired, buy the game to continue or start a new world! +demo.help.movement=Use %1$s, %2$s, %3$s, %4$s and the mouse to move around +demo.help.jump=Jump by pressing %1$s +demo.help.inventory=Use %1$s to open your inventory + +connect.connecting=Connecting to the server... +connect.authorizing=Logging in... +connect.failed=Failed to connect to the server + +disconnect.genericReason=%s +disconnect.disconnected=Disconnected by Server +disconnect.lost=Connection Lost +disconnect.kicked=Was kicked from the game +disconnect.timeout=Timed out +disconnect.closed=Connection closed +disconnect.loginFailed=Failed to login +disconnect.loginFailedInfo=Failed to login: %s +disconnect.quitting=Quitting +disconnect.endOfStream=End of stream +disconnect.overflow=Buffer overflow + +options.off=OFF +options.on=ON +options.title=Options +options.controls=Controls... +options.keybinds=Keybinds... +options.video=Video Settings... +options.videoTitle=Video Settings +options.music=Music +options.sound=Sound +options.invertYMouse=Invert Mouse +options.mouseSensitivity=Sensitivity +options.mouseSensitivity.min=*yawn* +options.mouseSensitivity.max=PLAID +options.fov=Field of View +options.fov.min=Binocular +options.fov.max=Quake Pro +options.renderDistance=Render Distance +options.renderDistance.tiny=Tiny +options.renderDistance.short=Short +options.renderDistance.normal=Normal +options.renderDistance.far=Far +options.renderDistance.extreme=Extreme +options.bobView=View Bobbing +options.ambientOcclusion=Smooth Lighting +options.anaglyph3d=3D Anaglyph +options.limitFramerate=Performance +options.difficulty=Difficulty +options.difficulty.peaceful=Peaceful +options.difficulty.easy=Easy +options.difficulty.normal=Normal +options.difficulty.hard=Hard +options.fancyGraphics=Graphics +options.graphics.fancy=Fancy +options.graphics.fast=Fast +options.guiScale=GUI Scale +options.guiScale.auto=Auto +options.guiScale.small=Small +options.guiScale.normal=Normal +options.guiScale.large=Large +options.advancedOpengl=Advanced OpenGL +options.treeShadows=Leaf Shadowing +options.chunkLoading=Chunk Loading +options.chunkloading.dynamic=Dynamic +options.chunkloading.static=Static +options.mods=Texture Packs... +options.visuals=Visuals... +options.visualsTitle=Visuals +options.biomeWater=Biome Water +options.vignette=Vignette +options.slimeParticles=Slime Chunk Particles +options.3Ditems=3D Items +options.screenPadding=Screen Padding +options.gamma=Gamma +options.placementMode=Placement Mode +options.placementMode.side=Side +options.placementMode.direction=Direction +options.animations=Animations +options.animations.custom=Custom +options.animations.procedural=Procedural +options.animations.off=Off +options.autoHit=Auto Hit +options.controller=Controller... +options.controllerSensitivity=Sensitivity +options.controllerMenuSensitivity=Menu Sensitivity +options.controllerDeadzoneL=Deadzone (Left) +options.controllerDeadzoneR=Deadzone (Right) +options.selectController=Select Controller... +options.interface=Interface... +options.fpsInOverlay=FPS in Overlay +options.foodHealthRegenOverlay=Show Food Regen +options.controllerSwapShoulderButtons=Swap LR R ZR R +options.controllerSwapAB=Swap A & B +options.controllerSwapXY=Swap X & Y +options.shiftCraftsAll=Shift Crafts All +options.worldHoleFix=World Hole Fix +options.mipmapLevels=Mipmap Levels +options.mipmapSmooth=Smooth Mipmaps +options.clouds=Clouds +options.armorDurabilityOverlay=Armor Durability Overlay +options.overlayShowCoords=Coordinates +options.overlayShowDirection=Direction +options.overlayShowTime=Time +options.overlayShowSeason=Season +options.overlayShowWeather=Weather +options.overlayShowBiome=Biome +options.rawMouseInput=Raw Mouse Input +options.heldItemCountOverlay=Held Item Count Overlay +options.swapCraftingButtons=Swap Crafting Buttons + +damagetype.combat=Combat +damagetype.projectile=Projectile +damagetype.blast=Blast +damagetype.fall=Fall +damagetype.fire=Fire + +performance.max=Max FPS +performance.balanced=Balanced +performance.powersaver=Power Saver +performance.vsync=VSync + +controls.title=Controls +keybinds.title=Keybinds +keybinds.info=Press Escape to disable keys + +key.forward=Forward +key.left=Left +key.back=Back +key.right=Right +key.jump=Jump +key.inventory=Inventory +key.drop=Drop +key.chat=Chat +key.fog=Toggle Fog +key.sneak=Sneak +key.playerList=Player List +key.fly=Toggle Noclip +key.guidebook=Open Guidebook +key.hotbar.left=Hotbar Left +key.hotbar.right=Hotbar Right +key.hotbar.switch=Switch Hotbar +key.zoom=Zoom +key.look.left=Look Left +key.look.right=Look Right +key.look.up=Look Up +key.look.down=Look Down +key.look.center=Center View +key.photoMode=Photo Mode +key.lockRotation=Lock Rotation +key.immersiveMode=Immersive Mode +key.switchPerspective=Switch Perspective +key.screenshot=Take Screenshot +key.cinematicCamera=Cinematic Camera + +texturePack.openFolder=Open texture pack folder +texturePack.title=Select Texture Pack +texturePack.folderInfo=(Place texture pack files here) + +bed.occupied=This bed is occupied +bed.noSleep=You can only sleep at night or during thunderstorms +bed.setSpawn=Respawn point set +bed.notValid=Your home bed was missing or obstructed + +tile.stone.name=Stone +tile.stone.desc=A block of solid stone. +tile.basalt.name=Basalt +tile.basalt.desc=A block of solid basalt. +tile.limestone.name=Limestone +tile.limestone.desc=A block of solid limestone. +tile.granite.name=Granite +tile.granite.desc=A block of solid granite. +tile.marble.name=Marble +tile.marble.desc=A block of solid marble. +tile.slate.name=Slate +tile.slate.desc=A block of solid slate. + +tile.cobble.stone.name=Cobblestone +tile.cobble.stone.desc=Stone, smashed apart and reconstituted. +tile.cobble.stone.mossy.name=Mossy Cobblestone +tile.cobble.stone.mossy.desc=Cobblestone with added greenery. +tile.cobble.basalt.name=Cobbled Basalt +tile.cobble.basalt.desc=Basalt, smashed apart and reconstituted. +tile.cobble.limestone.name=Cobbled Limestone +tile.cobble.limestone.desc=Limestone, smashed apart and reconstituted. +tile.cobble.granite.name=Cobbled Granite +tile.cobble.granite.desc=Granite, smashed apart and reconstituted. + +tile.pillar.marble.name=Marble Pillar +tile.pillar.marble.desc=A block of marble engraved into a pillar. +tile.capstone.marble.name=Marble Capstone +tile.capstone.marble.desc=A pillar capstone made of solid marble. + +tile.sandstone.name=Sandstone +tile.sandstone.desc=Compacted sand. + +tile.stone.carved.name=Carved Stone +tile.stone.carved.desc=Polished Stone with lines hewn through the middle. +tile.granite.carved.name=Carved Granite +tile.granite.carved.desc=Polished Granite with lines hewn through the middle. +tile.limestone.carved.name=Carved Limestone +tile.limestone.carved.desc=Polished Limestone with lines hewn through the middle. +tile.basalt.carved.name=Carved Basalt +tile.basalt.carved.desc=Polished Basalt with lines hewn through the middle. + +tile.planks.oak.name=Wooden Planks +tile.planks.oak.desc=Processed tree insides. +tile.planks.oak.painted.name=Mystery Planks +tile.planks.oak.painted.desc=How did you get this?! +tile.planks.oak.painted.black.name=Black Wooden Planks +tile.planks.oak.painted.black.desc=Wooden planks, stained black. +tile.planks.oak.painted.red.name=Red Wooden Planks +tile.planks.oak.painted.red.desc=Wooden planks, stained red. +tile.planks.oak.painted.green.name=Green Wooden Planks +tile.planks.oak.painted.green.desc=Wooden planks, stained green. +tile.planks.oak.painted.brown.name=Brown Wooden Planks +tile.planks.oak.painted.brown.desc=Wooden planks, stained brown. +tile.planks.oak.painted.blue.name=Blue Wooden Planks +tile.planks.oak.painted.blue.desc=Wooden planks, stained blue. +tile.planks.oak.painted.purple.name=Purple Wooden Planks +tile.planks.oak.painted.purple.desc=Wooden planks, stained purple. +tile.planks.oak.painted.cyan.name=Cyan Wooden Planks +tile.planks.oak.painted.cyan.desc=Wooden planks, stained cyan. +tile.planks.oak.painted.silver.name=Light Gray Wooden Planks +tile.planks.oak.painted.silver.desc=Wooden planks, stained light gray. +tile.planks.oak.painted.gray.name=Gray Wooden Planks +tile.planks.oak.painted.gray.desc=Wooden planks, stained gray. +tile.planks.oak.painted.pink.name=Pink Wooden Planks +tile.planks.oak.painted.pink.desc=Wooden planks, stained pink. +tile.planks.oak.painted.lime.name=Lime Wooden Planks +tile.planks.oak.painted.lime.desc=Wooden planks, stained lime. +tile.planks.oak.painted.yellow.name=Yellow Wooden Planks +tile.planks.oak.painted.yellow.desc=Wooden planks, stained yellow. +tile.planks.oak.painted.lightblue.name=Light Blue Wooden Planks +tile.planks.oak.painted.lightblue.desc=Wooden planks, stained light blue. +tile.planks.oak.painted.magenta.name=Magenta Wooden Planks +tile.planks.oak.painted.magenta.desc=Wooden planks, stained magenta. +tile.planks.oak.painted.orange.name=Orange Wooden Planks +tile.planks.oak.painted.orange.desc=Wooden planks, stained orange. +tile.planks.oak.painted.white.name=White Wooden Planks +tile.planks.oak.painted.white.desc=Wooden planks, stained white. + +tile.torch.coal.name=Torch +tile.torch.coal.desc=Helps light the way. + +tile.ladder.oak.name=Oak Ladder +tile.ladder.oak.desc=For very rapid vertical movement. + +tile.fence.planks.oak.name=Oak Fence +tile.fence.planks.oak.desc=Too tall to jump over. + +tile.fence.planks.oak.painted.name=Mystery Wooden Fence +tile.fence.planks.oak.painted.desc=How did you get this?! +tile.fence.planks.oak.painted.black.name=Black Wooden Fence +tile.fence.planks.oak.painted.black.desc=A wooden fence, stained black. +tile.fence.planks.oak.painted.red.name=Red Wooden Fence +tile.fence.planks.oak.painted.red.desc=A wooden fence, stained red. +tile.fence.planks.oak.painted.green.name=Green Wooden Fence +tile.fence.planks.oak.painted.green.desc=A wooden fence, stained green. +tile.fence.planks.oak.painted.brown.name=Brown Wooden Fence +tile.fence.planks.oak.painted.brown.desc=A wooden fence, stained brown. +tile.fence.planks.oak.painted.blue.name=Blue Wooden Fence +tile.fence.planks.oak.painted.blue.desc=A wooden fence, stained blue. +tile.fence.planks.oak.painted.purple.name=Purple Wooden Fence +tile.fence.planks.oak.painted.purple.desc=A wooden fence, stained purple. +tile.fence.planks.oak.painted.cyan.name=Cyan Wooden Fence +tile.fence.planks.oak.painted.cyan.desc=A wooden fence, stained cyan. +tile.fence.planks.oak.painted.silver.name=Light Gray Wooden Fence +tile.fence.planks.oak.painted.silver.desc=A wooden fence, stained light gray. +tile.fence.planks.oak.painted.gray.name=Gray Wooden Fence +tile.fence.planks.oak.painted.gray.desc=A wooden fence, stained gray. +tile.fence.planks.oak.painted.pink.name=Pink Wooden Fence +tile.fence.planks.oak.painted.pink.desc=A wooden fence, stained pink. +tile.fence.planks.oak.painted.lime.name=Lime Wooden Fence +tile.fence.planks.oak.painted.lime.desc=A wooden fence, stained lime. +tile.fence.planks.oak.painted.yellow.name=Yellow Wooden Fence +tile.fence.planks.oak.painted.yellow.desc=A wooden fence, stained yellow. +tile.fence.planks.oak.painted.lightblue.name=Light Blue Wooden Fence +tile.fence.planks.oak.painted.lightblue.desc=A wooden fence, stained light blue. +tile.fence.planks.oak.painted.magenta.name=Magenta Wooden Fence +tile.fence.planks.oak.painted.magenta.desc=A wooden fence, stained magenta. +tile.fence.planks.oak.painted.orange.name=Orange Wooden Fence +tile.fence.planks.oak.painted.orange.desc=A wooden fence, stained orange. +tile.fence.planks.oak.painted.white.name=White Wooden Fence +tile.fence.planks.oak.painted.white.desc=A wooden fence, stained white. + +tile.fencegate.planks.oak.name=Wooden Fence Gate +tile.fencegate.planks.oak.desc=Like a door but for fences. + +tile.fencegate.planks.oak.painted.name=Mystery Wooden Fence Gate +tile.fencegate.planks.oak.painted.desc=How did you get this?! +tile.fencegate.planks.oak.painted.black.name=Black Wooden Fence Gate +tile.fencegate.planks.oak.painted.black.desc=A wooden fence gate, stained black. +tile.fencegate.planks.oak.painted.red.name=Red Wooden Fence Gate +tile.fencegate.planks.oak.painted.red.desc=A wooden fence gate, stained red. +tile.fencegate.planks.oak.painted.green.name=Green Wooden Fence Gate +tile.fencegate.planks.oak.painted.green.desc=A wooden fence gate, stained green. +tile.fencegate.planks.oak.painted.brown.name=Brown Wooden Fence Gate +tile.fencegate.planks.oak.painted.brown.desc=A wooden fence gate, stained brown. +tile.fencegate.planks.oak.painted.blue.name=Blue Wooden Fence Gate +tile.fencegate.planks.oak.painted.blue.desc=A wooden fence gate, stained blue. +tile.fencegate.planks.oak.painted.purple.name=Purple Wooden Fence Gate +tile.fencegate.planks.oak.painted.purple.desc=A wooden fence gate, stained purple. +tile.fencegate.planks.oak.painted.cyan.name=Cyan Wooden Fence Gate +tile.fencegate.planks.oak.painted.cyan.desc=A wooden fence gate, stained cyan. +tile.fencegate.planks.oak.painted.silver.name=Light Gray Wooden Fence Gate +tile.fencegate.planks.oak.painted.silver.desc=A wooden fence gate, stained light gray. +tile.fencegate.planks.oak.painted.gray.name=Gray Wooden Fence Gate +tile.fencegate.planks.oak.painted.gray.desc=A wooden fence gate, stained gray. +tile.fencegate.planks.oak.painted.pink.name=Pink Wooden Fence Gate +tile.fencegate.planks.oak.painted.pink.desc=A wooden fence gate, stained pink. +tile.fencegate.planks.oak.painted.lime.name=Lime Wooden Fence Gate +tile.fencegate.planks.oak.painted.lime.desc=A wooden fence gate, stained lime. +tile.fencegate.planks.oak.painted.yellow.name=Yellow Wooden Fence Gate +tile.fencegate.planks.oak.painted.yellow.desc=A wooden fence gate, stained yellow. +tile.fencegate.planks.oak.painted.lightblue.name=Light Blue Wooden Fence Gate +tile.fencegate.planks.oak.painted.lightblue.desc=A wooden fence gate, stained light blue. +tile.fencegate.planks.oak.painted.magenta.name=Magenta Wooden Fence Gate +tile.fencegate.planks.oak.painted.magenta.desc=A wooden fence gate, stained magenta. +tile.fencegate.planks.oak.painted.orange.name=Orange Wooden Fence Gate +tile.fencegate.planks.oak.painted.orange.desc=A wooden fence gate, stained orange. +tile.fencegate.planks.oak.painted.white.name=White Wooden Fence Gate +tile.fencegate.planks.oak.painted.white.desc=A wooden fence gate, stained white. + +tile.bookshelf.planks.oak.name=Bookshelf +tile.bookshelf.planks.oak.desc=A repository of knowledge. + +tile.wool.name=Wool +tile.wool.desc=How did you get this?! +tile.wool.black.name=Black Wool +tile.wool.black.desc=Sheep's wool, dyed black. +tile.wool.red.name=Red Wool +tile.wool.red.desc=Sheep's wool, dyed red. +tile.wool.green.name=Green Wool +tile.wool.green.desc=Sheep's wool, dyed green. +tile.wool.brown.name=Brown Wool +tile.wool.brown.desc=Sheep's wool, dyed brown. +tile.wool.blue.name=Blue Wool +tile.wool.blue.desc=Sheep's wool, dyed blue. +tile.wool.purple.name=Purple Wool +tile.wool.purple.desc=Sheep's wool, dyed purple. +tile.wool.cyan.name=Cyan Wool +tile.wool.cyan.desc=Sheep's wool, dyed cyan. +tile.wool.silver.name=Light Gray Wool +tile.wool.silver.desc=Sheep's wool, dyed light gray. +tile.wool.gray.name=Gray Wool +tile.wool.gray.desc=Sheep's wool, dyed gray. +tile.wool.pink.name=Pink Wool +tile.wool.pink.desc=Sheep's wool, dyed pink. +tile.wool.lime.name=Lime Wool +tile.wool.lime.desc=Sheep's wool, dyed lime. +tile.wool.yellow.name=Yellow Wool +tile.wool.yellow.desc=Sheep's wool, dyed yellow. +tile.wool.lightblue.name=Light Blue Wool +tile.wool.lightblue.desc=Sheep's wool, dyed light blue. +tile.wool.magenta.name=Magenta Wool +tile.wool.magenta.desc=Sheep's wool, dyed magenta. +tile.wool.orange.name=Orange Wool +tile.wool.orange.desc=Sheep's wool, dyed orange. +tile.wool.white.name=White Wool +tile.wool.white.desc=Sheep's wool, dyed white. + +tile.brick.clay.name=Clay Bricks +tile.brick.clay.desc=Stacked bricks of baked clay. +tile.brick.stone.polished.name=Polished Stone Bricks +tile.brick.stone.polished.desc=Stacked bricks of polished stone. +tile.brick.stone.polished.mossy.name=Mossy Polished Stone Bricks +tile.brick.stone.polished.mossy.desc=Stacked bricks of polished stone with added greenery. +tile.brick.sandstone.name=Sandstone Bricks +tile.brick.sandstone.desc=Stacked bricks of sandstone. +tile.brick.gold.name=Gold Bricks +tile.brick.gold.desc=Stacked bricks of gold. +tile.brick.lapis.name=Lapis Lazuli Bricks +tile.brick.lapis.desc=Stacked bricks of lapis lazuli. +tile.brick.basalt.name=Basalt Bricks +tile.brick.basalt.desc=Stacked bricks of basalt. +tile.brick.limestone.name=Limestone Bricks +tile.brick.limestone.desc=Stacked bricks of limestone. +tile.brick.granite.name=Granite Bricks +tile.brick.granite.desc=Stacked bricks of granite. +tile.brick.marble.name=Marble Bricks +tile.brick.marble.desc=Stacked bricks of marble. +tile.brick.slate.name=Slate Bricks +tile.brick.slate.desc=Stacked bricks of slate. +tile.brick.stone.name=Stone Bricks +tile.brick.stone.desc=Stacked bricks of stone. + +tile.slab.planks.oak.name=Wooden Slab +tile.slab.planks.oak.desc=A slab of wooden planks. +tile.slab.cobble.stone.name=Cobblestone Slab +tile.slab.cobble.stone.desc=A slab of cobblestone. +tile.slab.sandstone.name=Sandstone Slab +tile.slab.sandstone.desc=A slab of sandstone. +tile.slab.brick.stone.polished.name=Polished Stone Brick Slab +tile.slab.brick.stone.polished.desc=A slab of polished stone bricks. +tile.slab.stone.polished.name=Polished Stone Slab +tile.slab.stone.polished.desc=A slab of polished stone. +tile.slab.brick.marble.name=Marble Brick Slab +tile.slab.brick.marble.desc=A slab of marble bricks. +tile.slab.brick.clay.name=Clay Brick Slab +tile.slab.brick.clay.desc=A slab of clay bricks. +tile.slab.capstone.marble.name=Marble Capstone Slab +tile.slab.capstone.marble.desc=Marble sculpted into a capstone. +tile.slab.cobble.basalt.name=Cobbled Basalt Slab +tile.slab.cobble.basalt.desc=A slab of cobbled basalt. +tile.slab.cobble.limestone.name=Cobbled Limestone Slab +tile.slab.cobble.limestone.desc=A slab of cobbled limestone. +tile.slab.cobble.granite.name=Cobbled Granite Slab +tile.slab.cobble.granite.desc=A slab of cobbled granite. +tile.slab.brick.basalt.name=Basalt Brick Slab +tile.slab.brick.basalt.desc=A slab of basalt bricks. +tile.slab.brick.limestone.name=Limestone Brick Slab +tile.slab.brick.limestone.desc=A slab of limestone bricks. +tile.slab.brick.granite.name=Granite Brick Slab +tile.slab.brick.granite.desc=A slab of granite bricks. +tile.slab.brick.slate.name=Slate Brick Slab +tile.slab.brick.slate.desc=A slab of slate bricks. +tile.slab.brick.stone.name=Stone Brick Slab +tile.slab.brick.stone.desc=A slab of stone bricks. +tile.slab.granite.polished.name=Polished Granite Slab +tile.slab.granite.polished.desc=A slab of polished granite. +tile.slab.limestone.polished.name=Polished Limestone Slab +tile.slab.limestone.polished.desc=A slab of polished limestone. +tile.slab.basalt.polished.name=Polished Basalt Slab +tile.slab.basalt.polished.desc=A slab of polished basalt. + +tile.slab.planks.oak.painted.name=Mystery Wooden Slab +tile.slab.planks.oak.painted.desc=How did you get this?! +tile.slab.planks.oak.painted.black.name=Black Wooden Slab +tile.slab.planks.oak.painted.black.desc=A slab of wooden planks, stained black. +tile.slab.planks.oak.painted.red.name=Red Wooden Slab +tile.slab.planks.oak.painted.red.desc=A slab of wooden planks, stained red. +tile.slab.planks.oak.painted.green.name=Green Wooden Slab +tile.slab.planks.oak.painted.green.desc=A slab of wooden planks, stained green. +tile.slab.planks.oak.painted.brown.name=Brown Wooden Slab +tile.slab.planks.oak.painted.brown.desc=A slab of wooden planks, stained brown. +tile.slab.planks.oak.painted.blue.name=Blue Wooden Slab +tile.slab.planks.oak.painted.blue.desc=A slab of wooden planks, stained blue. +tile.slab.planks.oak.painted.purple.name=Purple Wooden Slab +tile.slab.planks.oak.painted.purple.desc=A slab of wooden planks, stained purple. +tile.slab.planks.oak.painted.cyan.name=Cyan Wooden Slab +tile.slab.planks.oak.painted.cyan.desc=A slab of wooden planks, stained cyan. +tile.slab.planks.oak.painted.silver.name=Light Gray Wooden Slab +tile.slab.planks.oak.painted.silver.desc=A slab of wooden planks, stained light gray. +tile.slab.planks.oak.painted.gray.name=Gray Wooden Slab +tile.slab.planks.oak.painted.gray.desc=A slab of wooden planks, stained gray. +tile.slab.planks.oak.painted.pink.name=Pink Wooden Slab +tile.slab.planks.oak.painted.pink.desc=A slab of wooden planks, stained pink. +tile.slab.planks.oak.painted.lime.name=Lime Wooden Slab +tile.slab.planks.oak.painted.lime.desc=A slab of wooden planks, stained lime. +tile.slab.planks.oak.painted.yellow.name=Yellow Wooden Slab +tile.slab.planks.oak.painted.yellow.desc=A slab of wooden planks, stained yellow. +tile.slab.planks.oak.painted.lightblue.name=Light Blue Wooden Slab +tile.slab.planks.oak.painted.lightblue.desc=A slab of wooden planks, stained light blue. +tile.slab.planks.oak.painted.magenta.name=Magenta Wooden Slab +tile.slab.planks.oak.painted.magenta.desc=A slab of wooden planks, stained magenta. +tile.slab.planks.oak.painted.orange.name=Orange Wooden Slab +tile.slab.planks.oak.painted.orange.desc=A slab of wooden planks, stained orange. +tile.slab.planks.oak.painted.white.name=White Wooden Slab +tile.slab.planks.oak.painted.white.desc=A slab of wooden planks, stained white. + +tile.stairs.planks.oak.name=Wooden Stairs +tile.stairs.planks.oak.desc=Wooden block used for rapid vertical movement. +tile.stairs.cobble.stone.name=Cobblestone Stairs +tile.stairs.cobble.stone.desc=Cobblestone block used for rapid vertical movement. +tile.stairs.brick.stone.polished.name=Polished Stone Brick Stairs +tile.stairs.brick.stone.polished.desc=Polished stone brick block used for rapid vertical movement. +tile.stairs.brick.marble.name=Marble Brick Stairs +tile.stairs.brick.marble.desc=Marble brick block used for rapid vertical movement. +tile.stairs.cobble.basalt.name=Cobbled Basalt Stairs +tile.stairs.cobble.basalt.desc=Cobbled basalt block used for rapid vertical movement. +tile.stairs.cobble.limestone.name=Cobbled Limestone Stairs +tile.stairs.cobble.limestone.desc=Cobbled limestone block used for rapid vertical movement. +tile.stairs.cobble.granite.name=Cobbled Granite Stairs +tile.stairs.cobble.granite.desc=Cobbled granite block used for rapid vertical movement. +tile.stairs.brick.basalt.name=Basalt Brick Stairs +tile.stairs.brick.basalt.desc=Basalt brick block used for rapid vertical movement. +tile.stairs.brick.limestone.name=Limestone Brick Stairs +tile.stairs.brick.limestone.desc=Limestone brick block used for rapid vertical movement. +tile.stairs.brick.granite.name=Granite Brick Stairs +tile.stairs.brick.granite.desc=Granite brick block used for rapid vertical movement. +tile.stairs.brick.clay.name=Clay Brick Stairs +tile.stairs.brick.clay.desc=Clay brick block used for rapid vertical movement. +tile.stairs.brick.slate.name=Slate Brick Stairs +tile.stairs.brick.slate.desc=Slate brick block used for rapid vertical movement. +tile.stairs.brick.stone.name=Stone Brick Stairs +tile.stairs.brick.stone.desc=Stone brick block used for rapid vertical movement. + +tile.stairs.planks.oak.painted.name=Mystery Wooden Stairs +tile.stairs.planks.oak.painted.desc=How did you get this?! +tile.stairs.planks.oak.painted.black.name=Black Wooden Stairs +tile.stairs.planks.oak.painted.black.desc=Wooden steps, stained black. +tile.stairs.planks.oak.painted.red.name=Red Wooden Stairs +tile.stairs.planks.oak.painted.red.desc=Wooden steps, stained red. +tile.stairs.planks.oak.painted.green.name=Green Wooden Stairs +tile.stairs.planks.oak.painted.green.desc=Wooden steps, stained green. +tile.stairs.planks.oak.painted.brown.name=Brown Wooden Stairs +tile.stairs.planks.oak.painted.brown.desc=Wooden steps, stained brown. +tile.stairs.planks.oak.painted.blue.name=Blue Wooden Stairs +tile.stairs.planks.oak.painted.blue.desc=Wooden steps, stained blue. +tile.stairs.planks.oak.painted.purple.name=Purple Wooden Stairs +tile.stairs.planks.oak.painted.purple.desc=Wooden steps, stained purple. +tile.stairs.planks.oak.painted.cyan.name=Cyan Wooden Stairs +tile.stairs.planks.oak.painted.cyan.desc=Wooden steps, stained cyan. +tile.stairs.planks.oak.painted.silver.name=Light Gray Wooden Stairs +tile.stairs.planks.oak.painted.silver.desc=Wooden steps, stained light gray. +tile.stairs.planks.oak.painted.gray.name=Gray Wooden Stairs +tile.stairs.planks.oak.painted.gray.desc=Wooden steps, stained gray. +tile.stairs.planks.oak.painted.pink.name=Pink Wooden Stairs +tile.stairs.planks.oak.painted.pink.desc=Wooden steps, stained pink. +tile.stairs.planks.oak.painted.lime.name=Lime Wooden Stairs +tile.stairs.planks.oak.painted.lime.desc=Wooden steps, stained lime. +tile.stairs.planks.oak.painted.yellow.name=Yellow Wooden Stairs +tile.stairs.planks.oak.painted.yellow.desc=Wooden steps, stained yellow. +tile.stairs.planks.oak.painted.lightblue.name=Light Blue Wooden Stairs +tile.stairs.planks.oak.painted.lightblue.desc=Wooden steps, stained light blue. +tile.stairs.planks.oak.painted.magenta.name=Magenta Wooden Stairs +tile.stairs.planks.oak.painted.magenta.desc=Wooden steps, stained magenta. +tile.stairs.planks.oak.painted.orange.name=Orange Wooden Stairs +tile.stairs.planks.oak.painted.orange.desc=Wooden steps, stained orange. +tile.stairs.planks.oak.painted.white.name=White Wooden Stairs +tile.stairs.planks.oak.painted.white.desc=Wooden steps, stained white. + +tile.obsidian.name=Obsidian +tile.obsidian.desc=Rapidly cooled volcanic rock. + +tile.glass.name=Glass +tile.glass.desc=Sand heated until it becomes translucent. +tile.glass.tinted.name=Tinted Glass +tile.glass.tinted.desc=Darkened glass that blocks light. + +tile.grass.name=Grass +tile.grass.desc=Crisp, crunchy grass. +tile.grass.retro.name=Retro Grass +tile.grass.retro.desc=Crisp, crunchy grass. Smells old. + +tile.path.dirt.name=Dirt Path +tile.path.dirt.desc=Dirt worn down by frequent travelling. + +tile.dirt.name=Dirt +tile.dirt.desc=Crumbly brown dirt. +tile.dirt.scorched.name=Scorched Dirt +tile.dirt.scorched.desc=Dirt that has baked in the sun. +tile.dirt.scorched.rich.name=Rich Scorched Dirt +tile.dirt.scorched.rich.desc=Dirt that has baked in the sun, searing in minerals. + +tile.sponge.dry.name=Sponge +tile.sponge.dry.desc=A dry sponge, good for soaking up water. +tile.sponge.wet.name=Wet Sponge +tile.sponge.wet.desc=A sponge full of water. + +tile.moss.stone.name=Mossy Stone +tile.moss.stone.desc=Moss covering a block of stone. +tile.moss.basalt.name=Mossy Basalt +tile.moss.basalt.desc=Moss covering a block of basalt. +tile.moss.limestone.name=Mossy Limestone +tile.moss.limestone.desc=Moss covering a block of limestone. +tile.moss.granite.name=Mossy Granite +tile.moss.granite.desc=Moss covering a block of granite. + +tile.sand.name=Sand +tile.sand.desc=Gets everywhere. +tile.gravel.name=Gravel +tile.gravel.desc=A loose collection of pebbles. + +tile.bedrock.name=Bedrock +tile.bedrock.desc=The toughest substance known to man. + +tile.fluid.water.flowing.name=Flowing Water +tile.fluid.water.flowing.desc=Water that flows when placed. +tile.fluid.water.still.name=Still Water +tile.fluid.water.still.desc=Water that does not flow when placed. +tile.fluid.lava.flowing.name=Flowing Lava +tile.fluid.lava.flowing.desc=Lava that flows when placed. +tile.fluid.lava.still.name=Still Lava +tile.fluid.lava.still.desc=Lava that does not flow when placed. + +tile.log.oak.name=Oak Log +tile.log.oak.desc=A log from an oak tree. +tile.log.pine.name=Pine Log +tile.log.pine.desc=A log from a pine tree. +tile.log.birch.name=Birch Log +tile.log.birch.desc=A log from a birch tree. +tile.log.cherry.name=Cherry Log +tile.log.cherry.desc=A log from a cherry tree. +tile.log.eucalyptus.name=Eucalyptus Log +tile.log.eucalyptus.desc=A log from a eucalyptus tree. +tile.log.oak.mossy.name=Mossy Oak Log +tile.log.oak.mossy.desc=A log from a mossy oak tree. + +tile.leaves.oak.name=Oak Leaves +tile.leaves.oak.desc=Leaves from an oak tree. +tile.leaves.pine.name=Pine Leaves +tile.leaves.pine.desc=Leaves from a pine tree. +tile.leaves.birch.name=Birch Leaves +tile.leaves.birch.desc=Leaves from a birch tree. +tile.leaves.cherry.name=Cherry Leaves +tile.leaves.cherry.desc=Leaves from a cherry tree. +tile.leaves.eucalyptus.name=Eucalyptus Leaves +tile.leaves.eucalyptus.desc=Leaves from a eucalyptus tree. +tile.leaves.oak.retro.name=Retro Leaves +tile.leaves.oak.retro.desc=Leaves from long ago. +tile.leaves.shrub.name=Shrub Leaves +tile.leaves.shrub.desc=Leaves from a shrub. +tile.leaves.cherry.flowering.name=Flowering Cherry Leaves +tile.leaves.cherry.flowering.desc=Leaves from a cherry tree that are budding with fruit. + +tile.sapling.oak.name=Oak Sapling +tile.sapling.oak.desc=Plant to grow an oak tree. +tile.sapling.pine.name=Pine Sapling +tile.sapling.pine.desc=Plant to grow a pine tree. +tile.sapling.birch.name=Birch Sapling +tile.sapling.birch.desc=Plant to grow a birch tree. +tile.sapling.cherry.name=Cherry Sapling +tile.sapling.cherry.desc=Plant to grow a cherry tree. +tile.sapling.eucalyptus.name=Eucalyptus Sapling +tile.sapling.eucalyptus.desc=Plant to grow a eucalyptus tree. +tile.sapling.oak.retro.name=Retro Oak Sapling +tile.sapling.oak.retro.desc=Plant to grow a tree from long ago. +tile.sapling.shrub.name=Shrub Sapling +tile.sapling.shrub.desc=Plant to grow a shrub. + +tile.tallgrass.name=Tall Grass +tile.tallgrass.desc=Lush, growing grass. +tile.tallgrass.fern.name=Fern +tile.tallgrass.fern.desc=A fern plant. +tile.deadbush.name=Dead Bush +tile.deadbush.desc=A dried and withered plant. +tile.spinifex.name=Spinifex +tile.spinifex.desc=A spindly, thin grass from dry regions. +tile.algae.name=Algae +tile.algae.desc=Gooey vegetation that floats on the water's surface. + +tile.flower.yellow.name=Dandelion +tile.flower.yellow.desc=A beautiful yellow flower. +tile.flower.red.name=Rose +tile.flower.red.desc=A beautiful red flower. + +tile.mushroom.red.name=Red Mushroom +tile.mushroom.red.desc=A tasty red mushroom. Good for stew. +tile.mushroom.brown.name=Brown Mushroom +tile.mushroom.brown.desc=A tasty brown mushroom. Good for stew. + +tile.ore.coal.stone.name=Stone Coal Ore +tile.ore.coal.stone.desc=A chunk of coal embedded in stone. +tile.ore.coal.basalt.name=Basalt Coal Ore +tile.ore.coal.basalt.desc=A chunk of coal embedded in basalt. +tile.ore.coal.limestone.name=Limestone Coal Ore +tile.ore.coal.limestone.desc=A chunk of coal embedded in limestone. +tile.ore.coal.granite.name=Granite Coal Ore +tile.ore.coal.granite.desc=A chunk of coal embedded in granite. + +tile.ore.iron.stone.name=Stone Iron Ore +tile.ore.iron.stone.desc=Iron nuggets embedded in stone. +tile.ore.iron.basalt.name=Basalt Iron Ore +tile.ore.iron.basalt.desc=Iron nuggets embedded in basalt. +tile.ore.iron.limestone.name=Limestone Iron Ore +tile.ore.iron.limestone.desc=Iron nuggets embedded in limestone. +tile.ore.iron.granite.name=Granite Iron Ore +tile.ore.iron.granite.desc=Iron nuggets embedded in granite. + +tile.ore.gold.stone.name=Stone Gold Ore +tile.ore.gold.stone.desc=Gold nuggets embedded in stone. +tile.ore.gold.basalt.name=Basalt Gold Ore +tile.ore.gold.basalt.desc=Gold nuggets embedded in basalt. +tile.ore.gold.limestone.name=Limestone Gold Ore +tile.ore.gold.limestone.desc=Gold nuggets embedded in limestone. +tile.ore.gold.granite.name=Granite Gold Ore +tile.ore.gold.granite.desc=Gold nuggets embedded in granite. + +tile.ore.lapis.stone.name=Stone Lapis Lazuli Ore +tile.ore.lapis.stone.desc=Chunks of lapis lazuli embedded in stone. +tile.ore.lapis.basalt.name=Basalt Lapis Lazuli Ore +tile.ore.lapis.basalt.desc=Chunks of lapis lazuli embedded in basalt. +tile.ore.lapis.limestone.name=Limestone Lapis Lazuli Ore +tile.ore.lapis.limestone.desc=Chunks of lapis lazuli embedded in limestone. +tile.ore.lapis.granite.name=Granite Lapis Lazuli Ore +tile.ore.lapis.granite.desc=Chunks of lapis lazuli embedded in granite. + +tile.ore.redstone.stone.name=Stone Redstone Ore +tile.ore.redstone.stone.desc=Red dust embedded in stone. +tile.ore.redstone.basalt.name=Basalt Redstone Ore +tile.ore.redstone.basalt.desc=Red dust embedded in basalt. +tile.ore.redstone.limestone.name=Limestone Redstone Ore +tile.ore.redstone.limestone.desc=Red dust embedded in limestone. +tile.ore.redstone.granite.name=Granite Redstone Ore +tile.ore.redstone.granite.desc=Red dust embedded in granite. +tile.ore.redstone.glowing.stone.name=Glowing Stone Redstone Ore +tile.ore.redstone.glowing.stone.desc=Red dust embedded in stone. Emits a faint light. +tile.ore.redstone.glowing.basalt.name=Glowing Basalt Redstone Ore +tile.ore.redstone.glowing.basalt.desc=Red dust embedded in basalt. Emits a faint light. +tile.ore.redstone.glowing.limestone.name=Glowing Limestone Redstone Ore +tile.ore.redstone.glowing.limestone.desc=Red dust embedded in limestone. Emits a faint light. +tile.ore.redstone.glowing.granite.name=Glowing Granite Redstone Ore +tile.ore.redstone.glowing.granite.desc=Red dust embedded in granite. Emits a faint light. + +tile.ore.diamond.stone.name=Stone Diamond Ore +tile.ore.diamond.stone.desc=A chunk of diamond embedded in stone. +tile.ore.diamond.basalt.name=Basalt Diamond Ore +tile.ore.diamond.basalt.desc=A chunk of diamond embedded in basalt. +tile.ore.diamond.limestone.name=Limestone Diamond Ore +tile.ore.diamond.limestone.desc=A chunk of diamond embedded in limestone. +tile.ore.diamond.granite.name=Granite Diamond Ore +tile.ore.diamond.granite.desc=A chunk of diamond embedded in granite. + +tile.ore.nethercoal.netherrack.name=Nether Coal Ore +tile.ore.nethercoal.netherrack.desc=A lump of Nether Coal embedded in netherrack. + +tile.block.coal.name=Block of Coal +tile.block.coal.desc=A solid block of coal. +tile.block.iron.name=Block of Iron +tile.block.iron.desc=A solid block of iron. Heavy! +tile.block.gold.name=Block of Gold +tile.block.gold.desc=A solid block of gold, for flaunting your bling. +tile.block.lapis.name=Block of Lapis Lazuli +tile.block.lapis.desc=A solid block of lapis lazuli. +tile.block.redstone.name=Block of Redstone +tile.block.redstone.desc=A solid block of redstone. +tile.block.diamond.name=Block of Diamond +tile.block.diamond.desc=A solid block of diamond. Well done you. +tile.block.nethercoal.name=Block of Nether Coal +tile.block.nethercoal.desc=A solid block of Nether Coal. +tile.block.steel.name=Block of Steel +tile.block.steel.desc=A solid block of steel. +tile.block.quartz.name=Block of Quartz +tile.block.quartz.desc=A solid block of quartz. +tile.block.olivine.name=Block of Olivine +tile.block.olivine.desc=A solid block of olivine. +tile.block.charcoal.name=Block of Charcoal +tile.block.charcoal.desc=A solid block of charcoal. + +tile.wire.redstone.name=Redstone Wire +tile.wire.redstone.desc=A strand of redstone dust laid on the ground. + +tile.torch.redstone.idle.name=Redstone Torch +tile.torch.redstone.idle.desc=Emits a constant redstone signal. +tile.torch.redstone.active.name=Redstone Torch +tile.torch.redstone.active.desc=Emits a constant redstone signal. + +tile.button.stone.name=Stone Button +tile.button.stone.desc=Emits a brief redstone signal when pressed. + +tile.lever.cobble.stone.name=Cobblestone Lever +tile.lever.cobble.stone.desc=Allows turning a redstone signal on or off. + +tile.pressureplate.stone.name=Stone Pressure Plate +tile.pressureplate.stone.desc=Emits a redstone signal when living creatures step on it. +tile.pressureplate.planks.oak.name=Wooden Pressure Plate +tile.pressureplate.planks.oak.desc=Emits a redstone signal when anything steps on it. +tile.pressureplate.cobble.stone.name=Cobblestone Pressure Plate +tile.pressureplate.cobble.stone.desc=Emits a redstone signal when players step on it. + +tile.motionsensor.idle.name=Motion Sensor +tile.motionsensor.idle.desc=Emits a redstone signal when something moves past it. +tile.motionsensor.active.name=Active Motion Sensor +tile.motionsensor.active.desc=Emits a redstone signal when something moves past it. + +tile.repeater.idle.name=Redstone Repeater +tile.repeater.idle.desc=Repeats redstone signals over a distance. +tile.repeater.active.name=Redstone Repeater +tile.repeater.active.desc=Repeats redstone signals over a distance. + +tile.piston.base.name=Piston +tile.piston.base.desc=Pushes blocks but does not pull them. +tile.piston.base.sticky.name=Sticky Piston +tile.piston.base.sticky.desc=Pushes and pulls blocks. +tile.piston.head.name=Piston Head +tile.piston.head.desc=The pushy part of the piston. +tile.piston.moving.name=Piston Mover +tile.piston.moving.desc=The invisible moving part of the piston. + +tile.noteblock.name=Note Block +tile.noteblock.desc=Plays a musical note when powered. + +tile.rail.name=Rail +tile.rail.desc=For rapid horizontal movement via minecart. +tile.rail.powered.name=Powered Rail +tile.rail.powered.desc=Makes minecarts go faster when powered. +tile.rail.detector.name=Detector Rail +tile.rail.detector.desc=Emits a redstone signal when a minecart crosses it. + +tile.spikes.name=Spike Trap +tile.spikes.desc=Deactivates when powered. Technically a war crime. + +tile.dispenser.cobble.stone.name=Dispenser +tile.dispenser.cobble.stone.desc=Fires items out of the hole in the front. + +tile.trapdoor.planks.oak.name=Oak Trapdoor +tile.trapdoor.planks.oak.desc=Like a door, but flat. +tile.trapdoor.iron.name=Iron Trapdoor +tile.trapdoor.iron.desc=Like a door, but flat and made of iron. + +tile.tnt.name=TNT +tile.tnt.desc=Goes off with a bang. + +tile.door.planks.oak.bottom.name=Bottom Wooden Door +tile.door.planks.oak.bottom.desc=/give Honeydew 64 46 +tile.door.planks.oak.top.name=Top Wooden Door +tile.door.planks.oak.top.desc=Oh, wait, that's not TNT, that's half a door. +tile.door.iron.bottom.name=Bottom Iron Door +tile.door.iron.bottom.desc=Not much good on its own. +tile.door.iron.top.name=Top Iron Door +tile.door.iron.top.desc=Could use a friend. + +tile.mesh.name=Mesh Block +tile.mesh.desc=Allows items to pass through but nothing else. + +tile.bed.name=Bed +tile.bed.desc=Bed! + +tile.cobweb.name=Cobweb +tile.cobweb.desc=Sticky silky strands woven by spiders. + +tile.fire.name=Fire +tile.fire.desc=Ouch, fire hot! + +tile.mobspawner.name=Mob Spawner +tile.mobspawner.desc=Cage filled with horror. + +tile.workbench.name=Workbench +tile.workbench.desc=For bigger projects. + +tile.furnace.stone.idle.name=Furnace +tile.furnace.stone.idle.desc=For melting, heating, and cooking blocks and items. +tile.furnace.stone.active.name=Lit Furnace +tile.furnace.stone.active.desc=For melting, heating, and cooking blocks and items. +tile.furnace.blast.idle.name=Blast Furnace +tile.furnace.blast.idle.desc=Burns hotter than a normal furnace. +tile.furnace.blast.active.name=Lit Blast Furnace +tile.furnace.blast.active.desc=Burns hotter than a normal furnace. + +tile.trommel.idle.name=Trommel +tile.trommel.idle.desc=A machine that separates dirt from other useful items. +tile.trommel.active.name=Lit Trommel +tile.trommel.active.desc=A machine that separates dirt from other useful items. + +tile.chest.planks.oak.name=Wooden Chest +tile.chest.planks.oak.desc=A place to store your items. +tile.chest.planks.oak.painted.name=Mystery Wooden Chest +tile.chest.planks.oak.painted.desc=How did you get this?! +tile.chest.planks.oak.painted.black.name=Black Wooden Chest +tile.chest.planks.oak.painted.black.desc=A place to store your items. +tile.chest.planks.oak.painted.red.name=Red Wooden Chest +tile.chest.planks.oak.painted.red.desc=A place to store your items. +tile.chest.planks.oak.painted.green.name=Green Wooden Chest +tile.chest.planks.oak.painted.green.desc=A place to store your items. +tile.chest.planks.oak.painted.brown.name=Brown Wooden Chest +tile.chest.planks.oak.painted.brown.desc=A place to store your items. +tile.chest.planks.oak.painted.blue.name=Blue Wooden Chest +tile.chest.planks.oak.painted.blue.desc=A place to store your items. +tile.chest.planks.oak.painted.purple.name=Purple Wooden Chest +tile.chest.planks.oak.painted.purple.desc=A place to store your items. +tile.chest.planks.oak.painted.cyan.name=Cyan Wooden Chest +tile.chest.planks.oak.painted.cyan.desc=A place to store your items. +tile.chest.planks.oak.painted.silver.name=Light Gray Wooden Chest +tile.chest.planks.oak.painted.silver.desc=A place to store your items. +tile.chest.planks.oak.painted.gray.name=Gray Wooden Chest +tile.chest.planks.oak.painted.gray.desc=A place to store your items. +tile.chest.planks.oak.painted.pink.name=Pink Wooden Chest +tile.chest.planks.oak.painted.pink.desc=A place to store your items. +tile.chest.planks.oak.painted.lime.name=Lime Wooden Chest +tile.chest.planks.oak.painted.lime.desc=A place to store your items. +tile.chest.planks.oak.painted.yellow.name=Yellow Wooden Chest +tile.chest.planks.oak.painted.yellow.desc=A place to store your items. +tile.chest.planks.oak.painted.lightblue.name=Light Wooden Blue Chest +tile.chest.planks.oak.painted.lightblue.desc=A place to store your items. +tile.chest.planks.oak.painted.magenta.name=Magenta Wooden Chest +tile.chest.planks.oak.painted.magenta.desc=A place to store your items. +tile.chest.planks.oak.painted.orange.name=Orange Wooden Chest +tile.chest.planks.oak.painted.orange.desc=A place to store your items. +tile.chest.planks.oak.painted.white.name=White Wooden Chest +tile.chest.planks.oak.painted.white.desc=A place to store your items. + +tile.crops.wheat.name=Wheat Crops +tile.crops.wheat.desc=Wheat, plucked from the ground. + +tile.farmland.dirt.name=Farmland +tile.farmland.dirt.desc=Tilled soil for growing crops. + +tile.sign.post.planks.oak.name=Oak Signpost +tile.sign.post.planks.oak.desc=A free-standing oak sign. +tile.sign.wall.planks.oak.name=Oak Wall Sign +tile.sign.wall.planks.oak.desc=An oak sign placed on a wall. + +tile.layer.snow.name=Snow Layer +tile.layer.snow.desc=A flat layer of snow. +tile.layer.leaves.oak.name=Leaf Pile +tile.layer.leaves.oak.desc=A pile of leaves. +tile.layer.slate.name=Slate Layer +tile.layer.slate.desc=A flat sheet of slate. + +tile.ice.name=Ice +tile.ice.desc=Slippery frozen water. + +tile.block.snow.name=Block of Snow +tile.block.snow.desc=Lots of snow compacted into a block. + +tile.cactus.name=Cactus +tile.cactus.desc=A spiky plant that grows in the desert. + +tile.block.clay.name=Block of Clay +tile.block.clay.desc=A block of compacted clay. + +tile.sugarcane.name=Sugarcane +tile.sugarcane.desc=Not as sweet as you. + +tile.jukebox.name=Jukebox +tile.jukebox.desc=Plays your favourite tunes, assuming you have the right record. + +tile.pumpkin.name=Pumpkin +tile.pumpkin.desc=An orange squash that grows in the wild. +tile.pumpkin.carved.idle.name=Carved Pumpkin +tile.pumpkin.carved.idle.desc=An orange squash with a spooky face. +tile.pumpkin.carved.active.name=Jack 'o' Lantern +tile.pumpkin.carved.active.desc=An orange squash with a spooky face, lit by a torch. + +tile.netherrack.name=Netherrack +tile.netherrack.desc=Dark red rock that burns forever. +tile.netherrack.igneous.name=Igneous Netherrack +tile.netherrack.igneous.desc=Extreme heat has made this rock glow from inside. + +tile.soulsand.name=Soul Sand +tile.soulsand.desc=Squishy brown sand that's tough to walk through. + +tile.glowstone.name=Block of Glowstone +tile.glowstone.desc=Constantly emits a strong yellowish light. + +tile.portal.nether.name=Nether Portal +tile.portal.nether.desc=A portal to the Nether. +tile.portal.paradise.name=Paradise Portal +tile.portal.paradise.desc=A portal to Paradise. + +tile.cake.name=Cake +tile.cake.desc=I just can't cake it any more. + +tile.lamp.idle.name=Lamp +tile.lamp.idle.desc=How did you get this?! +tile.lamp.idle.black.name=Black Lamp +tile.lamp.idle.black.desc=A redstone lamp that can emit light. Tinted black. +tile.lamp.idle.red.name=Red Lamp +tile.lamp.idle.red.desc=A redstone lamp that can emit light. Tinted red. +tile.lamp.idle.green.name=Green Lamp +tile.lamp.idle.green.desc=A redstone lamp that can emit light. Tinted green. +tile.lamp.idle.brown.name=Brown Lamp +tile.lamp.idle.brown.desc=A redstone lamp that can emit light. Tinted brown. +tile.lamp.idle.blue.name=Blue Lamp +tile.lamp.idle.blue.desc=A redstone lamp that can emit light. Tinted blue. +tile.lamp.idle.purple.name=Purple Lamp +tile.lamp.idle.purple.desc=A redstone lamp that can emit light. Tinted purple. +tile.lamp.idle.cyan.name=Cyan Lamp +tile.lamp.idle.cyan.desc=A redstone lamp that can emit light. Tinted cyan. +tile.lamp.idle.silver.name=Light Gray Lamp +tile.lamp.idle.silver.desc=A redstone lamp that can emit light. Tinted light gray. +tile.lamp.idle.gray.name=Gray Lamp +tile.lamp.idle.gray.desc=A redstone lamp that can emit light. Tinted gray. +tile.lamp.idle.pink.name=Pink Lamp +tile.lamp.idle.pink.desc=A redstone lamp that can emit light. Tinted pink. +tile.lamp.idle.lime.name=Lime Lamp +tile.lamp.idle.lime.desc=A redstone lamp that can emit light. Tinted lime. +tile.lamp.idle.yellow.name=Yellow Lamp +tile.lamp.idle.yellow.desc=A redstone lamp that can emit light. Tinted yellow. +tile.lamp.idle.lightblue.name=Light Blue Lamp +tile.lamp.idle.lightblue.desc=A redstone lamp that can emit light. Tinted light blue. +tile.lamp.idle.magenta.name=Magenta Lamp +tile.lamp.idle.magenta.desc=A redstone lamp that can emit light. Tinted magenta. +tile.lamp.idle.orange.name=Orange Lamp +tile.lamp.idle.orange.desc=A redstone lamp that can emit light. Tinted orange. +tile.lamp.idle.white.name=White Lamp +tile.lamp.idle.white.desc=A redstone lamp that can emit light. + +tile.lamp.active.name=Lit Lamp +tile.lamp.active.desc=How did you get this?! +tile.lamp.active.black.name=Lit Black Lamp +tile.lamp.active.black.desc=A redstone lamp that emits light. Tinted black. +tile.lamp.active.red.name=Lit Red Lamp +tile.lamp.active.red.desc=A redstone lamp that emits light. Tinted red. +tile.lamp.active.green.name=Lit Green Lamp +tile.lamp.active.green.desc=A redstone lamp that emits light. Tinted green. +tile.lamp.active.brown.name=Lit Brown Lamp +tile.lamp.active.brown.desc=A redstone lamp that emits light. Tinted brown. +tile.lamp.active.blue.name=Lit Blue Lamp +tile.lamp.active.blue.desc=A redstone lamp that emits light. Tinted blue. +tile.lamp.active.purple.name=Lit Purple Lamp +tile.lamp.active.purple.desc=A redstone lamp that emits light. Tinted purple. +tile.lamp.active.cyan.name=Lit Cyan Lamp +tile.lamp.active.cyan.desc=A redstone lamp that emits light. Tinted cyan. +tile.lamp.active.silver.name=Lit Light Gray Lamp +tile.lamp.active.silver.desc=A redstone lamp that emits light. Tinted light gray. +tile.lamp.active.gray.name=Lit Gray Lamp +tile.lamp.active.gray.desc=A redstone lamp that emits light. Tinted gray. +tile.lamp.active.pink.name=Lit Pink Lamp +tile.lamp.active.pink.desc=A redstone lamp that emits light. Tinted pink. +tile.lamp.active.lime.name=Lit Lime Lamp +tile.lamp.active.lime.desc=A redstone lamp that emits light. Tinted lime. +tile.lamp.active.yellow.name=Yellow Lamp +tile.lamp.active.yellow.desc=A redstone lamp that emits light. Tinted yellow. +tile.lamp.active.lightblue.name=Light Blue Lamp +tile.lamp.active.lightblue.desc=A redstone lamp that emits light. Tinted light blue. +tile.lamp.active.magenta.name=Magenta Lamp +tile.lamp.active.magenta.desc=A redstone lamp that emits light. Tinted magenta. +tile.lamp.active.orange.name=Orange Lamp +tile.lamp.active.orange.desc=A redstone lamp that emits light. Tinted orange. +tile.lamp.active.white.name=White Lamp +tile.lamp.active.white.desc=A redstone lamp that emits light. + +tile.stone.polished.name=Polished Stone +tile.stone.polished.desc=A polished block of stone. +tile.granite.polished.name=Polished Granite +tile.granite.polished.desc=A polished block of granite. +tile.limestone.polished.name=Polished Limestone +tile.limestone.polished.desc=A polished block of limestone. +tile.basalt.polished.name=Polished Basalt +tile.basalt.polished.desc=A polished block of basalt. +tile.slate.polished.name=Polished Slate +tile.slate.polished.desc=A polished block of slate. + +item.unknown.desc=You have not encountered this item yet. + +item.tool.shovel.iron.name=Iron Shovel +item.tool.shovel.iron.desc=Dig up the dirt with this iron tool. +item.tool.pickaxe.iron.name=Iron Pickaxe +item.tool.pickaxe.iron.desc=Pick some stone with this iron tool. +item.tool.axe.iron.name=Iron Axe +item.tool.axe.iron.desc=Chop some trees with this iron tool. +item.tool.firestriker.name=Fire Striker +item.tool.firestriker.desc=Don't even think about it. +item.food.apple.name=Apple +item.food.apple.desc=One a day keeps the zombies away. +item.food.cookie.name=Cookie +item.food.cookie.desc=Tasty! +item.tool.bow.name=Bow +item.tool.bow.desc=A weapon for shooting rapid-fire arrows. +item.ammo.arrow.name=Arrow +item.ammo.arrow.desc=A flint-headed projectile for firing from a bow. +item.coal.name=Coal +item.coal.desc=A hunk of coal used for fuel. +item.charcoal.name=Charcoal +item.charcoal.desc=A hunk of charred wood used for fuel. +item.diamond.name=Diamond +item.diamond.desc=A strong gemstone used to make tools. Fancy! +item.ingot.iron.name=Iron Ingot +item.ingot.iron.desc=A metal bar of iron used to make tools. +item.ingot.steel.name=Steel Ingot +item.ingot.steel.desc=Iron and Nether Coal fused into a strong alloy. +item.ingot.steel.crude.name=Crude Steel +item.ingot.steel.crude.desc=A scrap of freshly baked steel. +item.ingot.gold.name=Gold Ingot +item.ingot.gold.desc=A metal bar of gold used to make tools. Delicate and light. +item.tool.sword.iron.name=Iron Sword +item.tool.sword.iron.desc=Slay pesky monsters with this sharp iron blade. +item.tool.sword.wood.name=Wooden Sword +item.tool.sword.wood.desc=Slay pesky monsters with this dull wooden blade. +item.tool.shovel.wood.name=Wooden Shovel +item.tool.shovel.wood.desc=Dig up the dirt with this wooden tool. +item.tool.pickaxe.wood.name=Wooden Pickaxe +item.tool.pickaxe.wood.desc=Pick some stone with this wooden tool. +item.tool.axe.wood.name=Wooden Axe +item.tool.axe.wood.desc=Chop some trees with this wooden tool. +item.tool.sword.stone.name=Stone Sword +item.tool.sword.stone.desc=Slay pesky monsters with this sharp stone blade. +item.tool.shovel.stone.name=Stone Shovel +item.tool.shovel.stone.desc=Dig up the dirt with this stone tool. +item.tool.pickaxe.stone.name=Stone Pickaxe +item.tool.pickaxe.stone.desc=Pick some stone with this stone tool. +item.tool.axe.stone.name=Stone Axe +item.tool.axe.stone.desc=Chop some trees with this stone tool. +item.tool.sword.diamond.name=Diamond Sword +item.tool.sword.diamond.desc=Slay pesky monsters with this sharp diamond blade. +item.tool.shovel.diamond.name=Diamond Shovel +item.tool.shovel.diamond.desc=Dig up the dirt with this diamond tool. +item.tool.pickaxe.diamond.name=Diamond Pickaxe +item.tool.pickaxe.diamond.desc=Pick some stone with this diamond tool. +item.tool.axe.diamond.name=Diamond Axe +item.tool.axe.diamond.desc=Chop some trees with this diamond tool. +item.stick.name=Stick +item.stick.desc=Found at the end of a branch. Can craft various items. +item.bowl.name=Bowl +item.bowl.desc=Used to hold edible liquids. +item.food.stew.mushroom.name=Mushroom Stew +item.food.stew.mushroom.desc=Mmm... mushroomy. +item.tool.sword.gold.name=Golden Sword +item.tool.sword.gold.desc=Slay pesky monsters with this sharp golden blade. +item.tool.shovel.gold.name=Golden Shovel +item.tool.shovel.gold.desc=Dig up the dirt with this golden tool. +item.tool.pickaxe.gold.name=Golden Pickaxe +item.tool.pickaxe.gold.desc=Pick some stone with this golden tool. +item.tool.axe.gold.name=Golden Axe +item.tool.axe.gold.desc=Chop some trees with this golden tool. +item.tool.sword.steel.name=Steel Sword +item.tool.sword.steel.desc=Slay pesky monsters with this durable steel blade. +item.tool.shovel.steel.name=Steel Shovel +item.tool.shovel.steel.desc=Dig up the dirt with this durable steel tool. +item.tool.pickaxe.steel.name=Steel Pickaxe +item.tool.pickaxe.steel.desc=Pick some stone with this durable steel tool. +item.tool.axe.steel.name=Steel Axe +item.tool.axe.steel.desc=Chop some trees with this durable steel tool. +item.string.name=String +item.string.desc=Silky smooth string from a spider. +item.feather.chicken.name=Feather +item.feather.chicken.desc=Plucked from a chicken. +item.sulphur.name=Sulphur +item.sulphur.desc=Explosive powder harvested from the deadly creeper. +item.tool.hoe.wood.name=Wooden Hoe +item.tool.hoe.wood.desc=Till the land with this wooden tool. +item.tool.hoe.stone.name=Stone Hoe +item.tool.hoe.stone.desc=Till the land with this stone tool. +item.tool.hoe.iron.name=Iron Hoe +item.tool.hoe.iron.desc=Till the land with this iron tool. +item.tool.hoe.diamond.name=Diamond Hoe +item.tool.hoe.diamond.desc=Till the land with this diamond tool. +item.tool.hoe.gold.name=Golden Hoe +item.tool.hoe.gold.desc=Till the land with this golden tool. +item.tool.hoe.steel.name=Steel Hoe +item.tool.hoe.steel.desc=Till the land with this durable steel tool. +item.seeds.wheat.name=Wheat Seeds +item.seeds.wheat.desc=Wheat seeds that can be planted in soil. +item.wheat.name=Wheat +item.wheat.desc=Freshly harvested! Can be used to make bread. +item.food.bread.name=Bread +item.food.bread.desc=Freshly baked bread. Smells good! +item.armor.helmet.leather.name=Leather Cap +item.armor.helmet.leather.desc=A hat made from a cow's hide. +item.armor.chestplate.leather.name=Leather Tunic +item.armor.chestplate.leather.desc=A tunic made from a cow's hide. +item.armor.leggings.leather.name=Leather Pants +item.armor.leggings.leather.desc=A pair of trousers made from a cow's hide. +item.armor.boots.leather.name=Leather Boots +item.armor.boots.leather.desc=A pair of boots made from a cow's hide. +item.armor.helmet.chainmail.name=Chainmail Helmet +item.armor.helmet.chainmail.desc=Made up of tiny chains. Can be repaired. +item.armor.chestplate.chainmail.name=Chainmail Chestplate +item.armor.chestplate.chainmail.desc=Made up of tiny chains. Can be repaired. +item.armor.leggings.chainmail.name=Chainmail Leggings +item.armor.leggings.chainmail.desc=Made up of tiny chains. Can be repaired. +item.armor.boots.chainmail.name=Chainmail Boots +item.armor.boots.chainmail.desc=Made up of tiny chains. Can be repaired. +item.armor.helmet.iron.name=Iron Helmet +item.armor.helmet.iron.desc=A strong iron helmet. +item.armor.chestplate.iron.name=Iron Chestplate +item.armor.chestplate.iron.desc=A strong iron chestplate. +item.armor.leggings.iron.name=Iron Leggings +item.armor.leggings.iron.desc=A pair of strong iron leggings. +item.armor.boots.iron.name=Iron Boots +item.armor.boots.iron.desc=A pair of strong iron boots. +item.armor.helmet.diamond.name=Diamond Helmet +item.armor.helmet.diamond.desc=A fancy diamond helmet. +item.armor.chestplate.diamond.name=Diamond Chestplate +item.armor.chestplate.diamond.desc=A fancy diamond chestplate. +item.armor.leggings.diamond.name=Diamond Leggings +item.armor.leggings.diamond.desc=A pair of fancy diamond leggings. +item.armor.boots.diamond.name=Diamond Boots +item.armor.boots.diamond.desc=A pair of fancy diamond boots. +item.armor.helmet.gold.name=Golden Helmet +item.armor.helmet.gold.desc=A delicate golden helmet. +item.armor.chestplate.gold.name=Golden Chestplate +item.armor.chestplate.gold.desc=A delicate golden chestplate. +item.armor.leggings.gold.name=Golden Leggings +item.armor.leggings.gold.desc=A pair of delicate golden leggings. +item.armor.boots.gold.name=Golden Boots +item.armor.boots.gold.desc=A pair of delicate golden boots. +item.armor.boots.steel.name=Steel Boots +item.armor.boots.steel.desc=A pair of durable steel boots. +item.armor.helmet.steel.name=Steel Helmet +item.armor.helmet.steel.desc=A durable steel helmet. +item.armor.chestplate.steel.name=Steel Chestplate +item.armor.chestplate.steel.desc=A durable steel chestplate. +item.armor.leggings.steel.name=Steel Leggings +item.armor.leggings.steel.desc=A pair of durable steel leggings. +item.flint.name=Flint +item.flint.desc=Light chips of stone. Can be used to strike a fire. +item.food.porkchop.raw.name=Raw Porkchop +item.food.porkchop.raw.desc=Uncooked meat from a pig. +item.food.porkchop.cooked.name=Cooked Porkchop +item.food.porkchop.cooked.desc=Braised meat from a pig. Smoking! +item.painting.name=Painting +item.painting.desc=A lovely picture to hang on your wall. +item.food.apple.gold.name=Golden Apple +item.food.apple.gold.desc=Invincible! No fear! +item.sign.name=Sign +item.sign.desc=Mark your land, or write a message. +item.door.oak.name=Wooden Door +item.door.oak.desc=Every house needs one. +item.bucket.name=Bucket +item.bucket.desc=Used to hold various liquids. +item.bucket.water.name=Water Bucket +item.bucket.water.desc=A bucket full of the deep blue. +item.bucket.lava.name=Lava Bucket +item.bucket.lava.desc=A bucket full of molten rock. Hot! +item.minecart.name=Minecart +item.minecart.desc=An iron vehicle for exploring the deep underground. +item.saddle.name=Saddle +item.saddle.desc=Perfect for a... pig? +item.door.iron.name=Iron Door +item.door.iron.desc=A reinforced door that unlocks when powered. +item.dust.redstone.name=Redstone Dust +item.dust.redstone.desc=Mysterious dust that seems to carry a current. +item.ammo.snowball.name=Snowball +item.ammo.snowball.desc=Throwable balls of snow. +item.boat.name=Boat +item.boat.desc=Sail the seven seas! +item.leather.name=Leather +item.leather.desc=A flat cow. Can be used to make armor. +item.bucket.milk.name=Bucket of Milk +item.bucket.milk.desc=Good for your bones. +item.brick.clay.name=Clay Brick +item.brick.clay.desc=Put 4 of these together to create a solid foundation. +item.clay.name=Clay +item.clay.desc=Wet clay that can be molded into a brick shape. +item.sugarcane.name=Sugarcane +item.sugarcane.desc=Thick reeds of sugar. +item.paper.name=Paper +item.paper.desc=Thin sugar-paper that can be written on. +item.book.name=Book +item.book.desc=So it is written... +item.slimeball.name=Slimeball +item.slimeball.desc=Slimy and gross. Sticks to your hands. +item.minecart.chest.name=Minecart with Chest +item.minecart.chest.desc=Great for transporting goods across a rail network. +item.minecart.furnace.name=Minecart with Furnace +item.minecart.furnace.desc=Pushes itself forward when fuelled. +item.egg.chicken.name=Chicken Egg +item.egg.chicken.desc=Egg. +item.tool.compass.name=Compass +item.tool.compass.desc=Always points to home. +item.tool.fishingrod.name=Fishing Rod +item.tool.fishingrod.desc=Cast a line and catch the big one! +item.tool.clock.name=Clock +item.tool.clock.desc=Do you have the time? +item.dust.glowstone.name=Glowstone Dust +item.dust.glowstone.desc=A yellow dust that seems to emit light. +item.food.fish.raw.name=Raw Fish +item.food.fish.raw.desc=Can be cooked to produce a tasty meal. +item.food.fish.cooked.name=Cooked Fish +item.food.fish.cooked.desc=Delicious fish! +item.record.13.name=Music Disc +item.record.13.desc=§413 +item.record.cat.name=Music Disc +item.record.cat.desc=§5cat +item.record.blocks.name=Music Disc +item.record.blocks.desc=§eblocks +item.record.chirp.name=Music Disc +item.record.chirp.desc=§echirp +item.record.far.name=Music Disc +item.record.far.desc=§5far +item.record.mall.name=Music Disc +item.record.mall.desc=§amall +item.record.mellohi.name=Music Disc +item.record.mellohi.desc=§2mellohi +item.record.stal.name=Music Disc +item.record.stal.desc=§fstal +item.record.strad.name=Music Disc +item.record.strad.desc=§0strad +item.record.ward.name=Music Disc +item.record.ward.desc=§dward +item.record.wait.name=Music Disc +item.record.wait.desc=§3wait +item.record.calm4.name=Music Disc +item.record.calm4.desc=§fcalm4 +item.bone.name=Bone +item.bone.desc=Spooky... +item.dye.name=Dye +item.dye.desc=How did you get this?! +item.dye.black.name=Ink Sac +item.dye.black.desc=Can be used to colour certain blocks black. +item.dye.red.name=Rose Red +item.dye.red.desc=Can be used to colour certain blocks red. +item.dye.green.name=Cactus Green +item.dye.green.desc=Can be used to colour certain blocks green. +item.dye.brown.name=Cocoa Beans +item.dye.brown.desc=Smells like chocolate... Can also be used to colour certain blocks brown. +item.dye.blue.name=Lapis Lazuli +item.dye.blue.desc=Can be used to colour certain blocks blue. +item.dye.purple.name=Purple Dye +item.dye.purple.desc=Can be used to colour certain blocks purple. +item.dye.cyan.name=Cyan Dye +item.dye.cyan.desc=Can be used to colour certain blocks cyan. +item.dye.silver.name=Light Gray Dye +item.dye.silver.desc=Can be used to colour certain blocks light gray. +item.dye.gray.name=Gray Dye +item.dye.gray.desc=Can be used to colour certain blocks gray. +item.dye.pink.name=Pink Dye +item.dye.pink.desc=Can be used to colour certain blocks pink. +item.dye.lime.name=Lime Dye +item.dye.lime.desc=Can be used to colour certain blocks lime. +item.dye.yellow.name=Dandelion Yellow +item.dye.yellow.desc=Can be used to colour certain blocks yellow. +item.dye.lightblue.name=Light Blue Dye +item.dye.lightblue.desc=Can be used to colour certain blocks light blue. +item.dye.magenta.name=Magenta Dye +item.dye.magenta.desc=Can be used to colour certain blocks magenta. +item.dye.orange.name=Orange Dye +item.dye.orange.desc=Can be used to colour certain blocks orange. +item.dye.white.name=Bone Meal +item.dye.white.desc=A nourishing meal for plants. Can also be used to colour certain blocks white. +item.dust.sugar.name=Sugar +item.dust.sugar.desc=Can craft sweet treats. +item.food.cake.name=Cake +item.food.cake.desc=Not a lie! +item.bed.name=Bed +item.bed.desc=Take a nap overnight. +item.repeater.name=Redstone Repeater +item.repeater.desc=Delays a redstone signal. +item.map.name=Map +item.map.desc=Chart your land! +item.leaves.name=Leaves +item.leaves.desc=Crunchy and green. +item.tool.shears.name=Shears +item.tool.shears.desc=A handy tool for cutting down vegetation. +item.nethercoal.name=Nether Coal +item.nethercoal.desc=A mysterious coal-like substance that emits immense heat. +item.cloth.name=Cloth +item.cloth.desc=Ragged zombie threads. Soft and comfy. +item.chainlink.name=Chainlinks +item.chainlink.desc=Seems like they could be used to make some kind of outfit. +item.armor.quiver.name=Quiver +item.armor.quiver.desc=Hold your arrows in style. +item.armor.quiver.gold.name=Golden Quiver +item.armor.quiver.gold.desc=Supplies an endless amount of magical arrows. +item.handcannon.unloaded.name=Hand Cannon +item.handcannon.unloaded.desc=Send enemies and yourself flying! +item.ammo.arrow.gold.name=Golden Arrow +item.ammo.arrow.gold.desc=A gold-tipped arrow that pierces through foes. +item.ammo.charge.explosive.name=Explosive Charge +item.ammo.charge.explosive.desc=Ammo for a hand cannon. Packed with gunpowder. +item.handcannon.loaded.name=Loaded Hand Cannon +item.handcannon.loaded.desc=Armed and ready! +item.tool.calendar.name=Rotary Calendar +item.tool.calendar.desc=A handy tool for keeping track of the seasons. +item.nugget.gold.name=Gold Nugget +item.nugget.gold.desc=A chunk of gold found buried in the soil. +item.nugget.iron.name=Iron Nugget +item.nugget.iron.desc=A chunk of iron found buried in the soil. +item.quartz.name=Quartz +item.quartz.desc=A bright clear crystal that seems to reflect light. +item.olivine.name=Olivine +item.olivine.desc=A dark green gem that seems to block light. +item.ammo.pebble.name=Pebble +item.ammo.pebble.desc=A chunk of rock found buried in the soil. +item.food.cherry.name=Cherries +item.food.cherry.desc=Red berries that come in pairs. +item.bucket.icecream.name=Bucket of Ice Cream +item.bucket.icecream.desc=A frosty treat sprinkled with chocolate chips and a cherry! +item.ammo.fireball.name=Fire Charge +item.ammo.fireball.desc=Ammo for a hand cannon. Scatters fire over a wide area. +item.ammo.arrow.purple.name=Purple Arrow +item.ammo.arrow.purple.desc=How did you get this?! +item.label.name=Label +item.label.desc=Allows you to name items and creatures. Can be dyed. \ No newline at end of file diff --git a/src/main/resources/terrain.png b/src/main/resources/terrain.png new file mode 100644 index 0000000..a8a4c11 Binary files /dev/null and b/src/main/resources/terrain.png differ