diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index a0d7cddda..d0bf5213d 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -171,7 +171,7 @@ jobs: set -euo pipefail bundle="$RUNNER_TEMP/release-input" mkdir -p "$bundle" - cp build/libs/BaseMetals-2.5.1.110021{,-sources,-javadoc}.jar "$bundle/" + cp build/libs/BaseMetals-2.6.0.110021{,-sources,-javadoc}.jar "$bundle/" cp build/release/SHA256SUMS CHANGELOG.txt "$bundle/" ./gradlew verifyPreparedReleaseArtifacts verifyMavenCoordinates \ -PpreparedReleaseDir="$bundle" \ @@ -204,9 +204,9 @@ jobs: if-no-files-found: error retention-days: 30 path: | - build/libs/BaseMetals-2.5.1.110021.jar - build/libs/BaseMetals-2.5.1.110021-sources.jar - build/libs/BaseMetals-2.5.1.110021-javadoc.jar + build/libs/BaseMetals-2.6.0.110021.jar + build/libs/BaseMetals-2.6.0.110021-sources.jar + build/libs/BaseMetals-2.6.0.110021-javadoc.jar build/release/SHA256SUMS CHANGELOG.txt diff --git a/CHANGELOG.txt b/CHANGELOG.txt index 9ca7d0b6e..9716a33e8 100644 --- a/CHANGELOG.txt +++ b/CHANGELOG.txt @@ -1,3 +1,15 @@ +2.6.0.110021 for 1.10.2 + +- Open Base Metals settings from the Mods list or the OreSpawn cog. +- High Fantasy is still the default. Choose Low Fantasy to limit which + materials can be made into equipment. Existing items and ore placement + stay the same. Restart to change modes; clients and servers must match. +- Molten metal burns on contact, even in shallow flows. Liquid mercury + still causes nausea. +- Require OreSpawn 4.1.6.110021 or a compatible newer 4.x release, with Forge + 12.18.3.2511 or later. This picks up OreSpawn's fix for duplicate veins when + moving an OreSpawn 1 world without its converted configuration. + 2.5.1.110021 for 1.10.2 - Require OreSpawn 4.1.2.110021 or a compatible newer 4.x release, with Forge diff --git a/README.md b/README.md index 8a2c9aecc..3a21e410a 100644 --- a/README.md +++ b/README.md @@ -25,6 +25,9 @@ Fantasy metals have been added to the Nether and the End: Cold Iron, Mithril, Ad **Mercury**: This toxic liquid metal has many alchemical uses. The Mithril metal alloys requires mercury. +Molten metals burn like lava, even when you only touch the surface. Liquid +mercury causes nausea. + **Nickel**: This metal is as soft as copper, but it has alchemical properties and forms the invar metal alloy when mixed with iron. **Platinum**: @@ -76,7 +79,7 @@ Also known as a sledgehammer, this tool is designed for pulverizing rocks. Using ## Requirements Install Forge `12.18.3.2511` or later and -[MMD OreSpawn `4.1.2.110021`](https://www.curseforge.com/minecraft/mc-mods/mmd-orespawn/files/9276430) +[MMD OreSpawn `4.1.6.110021`](https://www.curseforge.com/minecraft/mc-mods/mmd-orespawn/files/9518063) or a newer compatible 4.x release for Minecraft 1.10.2. Base Metals no longer includes its own fallback ore generator. @@ -84,6 +87,19 @@ OreSpawn handles ore placement and imports old OreSpawn configuration files. The eleven ore defaults are unchanged. See [ore generation and upgrades](docs/ORE_GENERATION.md) for configuration locations and advice for existing worlds. +## Configuration + +Open **Mods → Base Metals → Config** from the main menu, or use the Base Metals +cog in **Create World → OreSpawn → Mods**. Both open the same settings in +`config/BaseMetals.cfg`. Restart Minecraft or the server to apply changes. + +**High Fantasy** is the default and keeps the usual recipes, including when +upgrading an old config. **Low Fantasy** restricts what you can make from each +material: for example, Adamantine still makes pickaxes, but not bows. Existing +items still load and work, and both modes use the same OreSpawn rules. Servers +and clients need to use the same setting. This does not change the separate +Fantasy Level settings in Base Gems or Modern Metals. + ## Building and running from source This branch uses ForgeGradle 7 and the Gradle wrapper, like the newer branches. @@ -103,7 +119,7 @@ pass. Normal builds and tags do not publish anything. ## Installing -Install Forge and OreSpawn, then put `BaseMetals-2.5.1.110021.jar` in your +Install Forge and OreSpawn, then put `BaseMetals-2.6.0.110021.jar` in your `mods` folder. Downloads are available on CurseForge and the repository's Releases page once the version is published. @@ -123,7 +139,7 @@ items cannot, by itself, repair those Java references. Base Metal Golems its eighteen golems use the existing Base Metals blocks and ingots. Neither add-on needs changing, and neither is required when playing without golems. -This release uses version `2.5.1.110021`. The final six digits identify Minecraft +This release uses version `2.6.0.110021`. The final six digits identify Minecraft 1.10.2 on Forge, following the same version format as the newer branches. The mod ID, saved block and item names, resources and configuration names remain `basemetals`; moving the Java packages does not rename anything in your world. @@ -133,7 +149,7 @@ The mod ID, saved block and item names, resources and configuration names remain New integrations should use `zone.moddev.mc.basemetals.init` for materials, blocks and items. Maven builds use -`zone.moddev.mc.basemetals:BaseMetals:2.5.1.110021`. Crack Hammer recipes still +`zone.moddev.mc.basemetals:BaseMetals:2.6.0.110021`. Crack Hammer recipes still use `com.mcmoddev.lib.registry.CrusherRecipeRegistry`; the bundled library API has not moved. diff --git a/docs/BUILDING.md b/docs/BUILDING.md index 088576b42..5d775cba5 100644 --- a/docs/BUILDING.md +++ b/docs/BUILDING.md @@ -14,8 +14,8 @@ Temurin 8u502-b07 and Gradle on Temurin 17.0.1+12. Do not change Eclipse's own runtime to Java 8: its Gradle and Minecraft runtimes are separate settings. The compile and runtime target is Forge 12.18.3.2511 with stable-29 mappings. -OreSpawn 4.1.2.110021 is pinned through Curse Maven and verified against its -published SHA-256. Saved registry IDs and recipes have not changed. +OreSpawn 4.1.6.110021 is pinned through Curse Maven and verified against its +published SHA-256. Updating the dependency does not change saved registry IDs. ## Eclipse @@ -29,7 +29,7 @@ cannot replace the mod version with a `${version}` placeholder. After changing textures or other resources, refresh Gradle or run `prepareEclipse` again. The launch tasks merge production classes and processed resources, so Minecraft -sees one mod root. Ordinary launches include the published OreSpawn 4.1.2.110021 +sees one mod root. Ordinary launches include the published OreSpawn 4.1.6.110021 release. Other integration APIs, JUnit and the migration probes are excluded. Keep personal worlds outside the development `run` directory. @@ -43,7 +43,7 @@ transformed copies cannot retain a valid signature for the original bytes. gradlew clean check build javadoc verifyReleaseArtifacts writeReleaseChecksums prepareEclipse ``` -The installable jar is `build/libs/BaseMetals-2.5.1.110021.jar`. Sources, +The installable jar is `build/libs/BaseMetals-2.6.0.110021.jar`. Sources, Javadocs are written alongside it; checksums are in `build/release/SHA256SUMS`. The mapped development jar is kept separately under `build/libs-dev`; it is not the jar to install in a normal Minecraft instance. Building never uploads anything. @@ -80,7 +80,7 @@ with `-PpackagedForgeRuntimeRoot=`. Python 3 needs `nbtlib` keep a failed run before cleaning the build directory. The shared **Release Base Metals** workflow lives on the repository's default -branch. Version `2.5.1.110021` selects `master-1.10.2`; it requires successful +branch. Version `2.6.0.110021` selects `master-1.10.2`; it requires successful CI for the exact source commit and explicit publication confirmation. It builds one candidate, then publishes those same files to MMD Maven, CurseForge and GitHub, in that order. A tag alone only validates the candidate. diff --git a/docs/ORE_GENERATION.md b/docs/ORE_GENERATION.md index 7ed3645d5..ce1d655c0 100644 --- a/docs/ORE_GENERATION.md +++ b/docs/ORE_GENERATION.md @@ -1,6 +1,6 @@ # Ore generation in Minecraft 1.10.2 -Base Metals now requires MMD OreSpawn 4.1.2.110021 or a newer compatible 4.x +Base Metals now requires MMD OreSpawn 4.1.6.110021 or a newer compatible 4.x release. OreSpawn is the only ore-generation engine; Base Metals no longer ships its old OS3 plugin or fallback generator. This also raises the minimum Forge version to 12.18.3.2511. diff --git a/gradle.properties b/gradle.properties index 2246dc119..dd7332018 100644 --- a/gradle.properties +++ b/gradle.properties @@ -12,7 +12,7 @@ mappings_version=29-1.10.2 mod_id=basemetals mod_group=zone.moddev.mc.basemetals -mod_version=2.5.1.110021 +mod_version=2.6.0.110021 mod_artifact=BaseMetals loader_name=forge loader_code=1 @@ -26,5 +26,5 @@ curseforge_project_id=240967 cf_requirements=mmd-orespawn orespawn_curse_project_id=245586 coreplugin=zone.moddev.mc.basemetals.compat.BaseMetalsLoadingPlugin -orespawn_version=4.1.2.110021 -orespawn_version_range=[4.1.2.110021,5.0.0) +orespawn_version=4.1.6.110021 +orespawn_version_range=[4.1.6.110021,5.0.0) diff --git a/gradle/dependencies.gradle b/gradle/dependencies.gradle index 13942054f..f54d584b8 100644 --- a/gradle/dependencies.gradle +++ b/gradle/dependencies.gradle @@ -40,9 +40,9 @@ tasks.register('verifyReleaseDependencies') { doLast { def artifacts = configurations.legacyModArtifacts.resolvedConfiguration.resolvedArtifacts def orespawn = specs.find { it.id == 'orespawn' } - if (orespawn.coordinate != 'curse.maven:mmd-orespawn-245586:9276430' - || orespawn.sha256 != '4D4975421FEEBF17505056306D06B0344D7A4553B6275885D7C5C5065B0348A6') { - throw new GradleException('Use the verified OreSpawn 4.1.2.110021 release.') + if (orespawn.coordinate != 'curse.maven:mmd-orespawn-245586:9518063' + || orespawn.sha256 != '05DB7CBFAADC815D6A713DACDFB9F0647BCED49CCFC357FB2FF010E95BD1379F') { + throw new GradleException('Use the verified OreSpawn 4.1.6.110021 release.') } specs.each { spec -> def parts = spec.coordinate.split(':') diff --git a/gradle/dependencies.json b/gradle/dependencies.json index 39fca48f9..2fd041858 100644 --- a/gradle/dependencies.json +++ b/gradle/dependencies.json @@ -1,5 +1,5 @@ [ - {"id":"orespawn","coordinate":"curse.maven:mmd-orespawn-245586:9276430","sha256":"4D4975421FEEBF17505056306D06B0344D7A4553B6275885D7C5C5065B0348A6","repository":"https://www.cursemaven.com","runtime":true}, + {"id":"orespawn","coordinate":"curse.maven:mmd-orespawn-245586:9518063","sha256":"05DB7CBFAADC815D6A713DACDFB9F0647BCED49CCFC357FB2FF010E95BD1379F","repository":"https://www.cursemaven.com","runtime":true}, {"id":"alt","coordinate":"curse.maven:additional-loot-tables-243157:2604973","sha256":"DFDEE18663A0CBC3A811E442C7B20F34F1765B1D36C6284CB3B8B8EAA3FC5620","repository":"https://www.cursemaven.com"}, {"id":"mantle","coordinate":"slimeknights.mantle:Mantle:1.10.2-1.1.5.207","sha256":"520499E1329EA57DB3D7ABA671B30A0CC7DA60C02C97828CFAF57778B0923832","repository":"https://dvs1.progwml6.com/files/maven"}, {"id":"tconstruct","coordinate":"slimeknights:TConstruct:1.10.2-2.6.5.11","sha256":"E33061BEFB4DA60B2EF79016A022C434149DDF1E573A01EFD2F202F03904E52D","repository":"https://dvs1.progwml6.com/files/maven"}, diff --git a/gradle/release/artifacts.gradle b/gradle/release/artifacts.gradle index 85c7ed54c..0d0e64848 100644 --- a/gradle/release/artifacts.gradle +++ b/gradle/release/artifacts.gradle @@ -38,7 +38,7 @@ tasks.register('verifyReleaseConfiguration') { group = 'verification' dependsOn tasks.named('verifyJava8Toolchain') doLast { - if (project.group != 'zone.moddev.mc.basemetals' || project.version != '2.5.1.110021' + if (project.group != 'zone.moddev.mc.basemetals' || project.version != '2.6.0.110021' || project.minecraft_version != '1.10.2' || project.forge_version != '12.18.3.2511' || project.mappings_channel != 'stable' || project.mappings_version != '29-1.10.2') { throw new GradleException('Base Metals target, mappings or Maven identity changed.') @@ -47,8 +47,8 @@ tasks.register('verifyReleaseConfiguration') { if (!source.contains('VERSION = "' + project.version + '"') || !source.contains('MODID = "basemetals"')) { throw new GradleException('The mod identity differs from the build metadata.') } - if (project.orespawn_version != '4.1.2.110021' - || project.orespawn_version_range != '[4.1.2.110021,5.0.0)' + if (project.orespawn_version != '4.1.6.110021' + || project.orespawn_version_range != '[4.1.6.110021,5.0.0)' || !source.contains('required-after:orespawn@' + project.orespawn_version_range) || !source.contains('required-after:Forge@[12.18.3.2511,)')) { throw new GradleException('The OreSpawn or Forge runtime requirement changed.') @@ -117,7 +117,14 @@ def auditJars = { File directory -> throw new GradleException('Incorrect processed mcmod.info.') } int classes = zip.entries().count { it.name.endsWith('.class') } - if (classes != 218 || zip.getEntry('cyano/basemetals/init/Blocks.class') == null + def configClasses = [ + 'client/BaseMetalsGuiFactory', 'client/BaseMetalsConfigScreen', + 'content/ContentAcquisition', 'content/ContentMode', 'content/ContentModeNetwork', + 'content/ContentPolicy', 'content/MaterialForm' + ] + if (classes != 218 + configClasses.size() + || configClasses.any { zip.getEntry("zone/moddev/mc/basemetals/${it}.class") == null } + || zip.getEntry('cyano/basemetals/init/Blocks.class') == null || zip.getEntry('META-INF/basemetals-legacy-api.list') == null) { throw new GradleException('The compatibility-layer class inventory changed.') } diff --git a/gradle/verification/legacy-runtime.gradle b/gradle/verification/legacy-runtime.gradle index 112f08b75..203dbe984 100644 --- a/gradle/verification/legacy-runtime.gradle +++ b/gradle/verification/legacy-runtime.gradle @@ -18,6 +18,10 @@ sourceSets { java.srcDirs = ['tools/validation/legacy110/capture-probe'] compileClasspath = sourceSets.main.compileClasspath } + fantasyProbe { + java.srcDirs = ['tools/validation/legacy110/fantasy-probe'] + compileClasspath = sourceSets.main.output + sourceSets.main.compileClasspath + } } def captureJar = tasks.register('captureProbeJar', Jar) { @@ -79,6 +83,21 @@ tasks.register('migrationProbeJar', Jar) { } } +def fantasyProbe = tasks.register('fantasyProbeJar', Jar) { + group = 'verification' + archiveFileName = 'fantasy-probe.jar' + destinationDirectory = layout.buildDirectory.dir('test-mods') + from sourceSets.fantasyProbe.output +} +def packagedFantasyProbe = renamer.classes(fantasyProbe) { + map.from minecraft.dependency.toSrgFile + output = layout.buildDirectory.file('test-mods/fantasy-probe-packaged.jar') +} +tasks.register('packagedFantasyProbeJar') { + group = 'verification' + dependsOn packagedFantasyProbe +} + tasks.register('packagedForgeRuntimeTest', Exec) { group = 'verification' description = 'Tests OS1/OS3 imports, overrides, reloads and the vanilla takeover switch.' diff --git a/src/main/java/com/mcmoddev/lib/block/BlockMoltenFluid.java b/src/main/java/com/mcmoddev/lib/block/BlockMoltenFluid.java index 05a4bd093..61f4fcaa8 100644 --- a/src/main/java/com/mcmoddev/lib/block/BlockMoltenFluid.java +++ b/src/main/java/com/mcmoddev/lib/block/BlockMoltenFluid.java @@ -3,6 +3,12 @@ import javax.annotation.Nonnull; import net.minecraft.block.material.Material; +import net.minecraft.block.state.IBlockState; +import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.util.DamageSource; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; import net.minecraftforge.fluids.Fluid; /** @@ -20,4 +26,18 @@ public class BlockMoltenFluid extends net.minecraftforge.fluids.BlockFluidClassi public BlockMoltenFluid(@Nonnull final Fluid fluid) { super(fluid, Material.LAVA); } + + @Override + public void onEntityCollidedWithBlock(final World world, final BlockPos pos, + final IBlockState state, final Entity entity) { + super.onEntityCollidedWithBlock(world, pos, state, entity); + if (world.isRemote || !(entity instanceof EntityLivingBase) || entity.isImmuneToFire()) return; + if (entity.getEntityBoundingBox().minY >= pos.getY() + getFluidHeightForRender(world, pos)) return; + + // Vanilla shrinks the lava contact bounds and handles damage once the entity is deeper. + if (!entity.isInLava()) { + entity.attackEntityFrom(DamageSource.lava, 4.0F); + entity.setFire(15); + } + } } diff --git a/src/main/java/com/mcmoddev/lib/init/Fluids.java b/src/main/java/com/mcmoddev/lib/init/Fluids.java index 50e6c57fd..18996f661 100644 --- a/src/main/java/com/mcmoddev/lib/init/Fluids.java +++ b/src/main/java/com/mcmoddev/lib/init/Fluids.java @@ -9,12 +9,12 @@ import com.google.common.collect.BiMap; import com.google.common.collect.HashBiMap; import zone.moddev.mc.basemetals.data.MaterialNames; +import com.mcmoddev.lib.block.BlockMoltenFluid; import com.mcmoddev.lib.block.InteractiveFluidBlock; import com.mcmoddev.lib.data.SharedStrings; import com.mcmoddev.lib.fluids.CustomFluid; import com.mcmoddev.lib.material.MMDMaterial; -import net.minecraft.block.material.Material; import net.minecraft.creativetab.CreativeTabs; import net.minecraft.entity.EntityLivingBase; import net.minecraft.init.MobEffects; @@ -109,7 +109,7 @@ protected static BlockFluidClassic addFluidBlock(@Nonnull final MMDMaterial mate } if (!name.equals(MaterialNames.MERCURY)) { - block = new BlockFluidClassic(material.getFluid(), Material.LAVA); + block = new BlockMoltenFluid(material.getFluid()); } else { block = new InteractiveFluidBlock(getFluidByName(name), false, (final World w, final EntityLivingBase e) -> { diff --git a/src/main/java/com/mcmoddev/lib/init/VillagerTrades.java b/src/main/java/com/mcmoddev/lib/init/VillagerTrades.java index f0e45b86c..64a5c4d4e 100644 --- a/src/main/java/com/mcmoddev/lib/init/VillagerTrades.java +++ b/src/main/java/com/mcmoddev/lib/init/VillagerTrades.java @@ -89,7 +89,7 @@ protected static void registerCommonTrades() { for (final Names name : Arrays.asList(Names.HELMET, Names.CHESTPLATE, Names.LEGGINGS, Names.BOOTS)) { - if (material.hasItem(name)) { + if (canTrade(material, name)) { final ItemStack itemStack = material.getItemStack(name); final ITradeList[] armorTrades = makeTradePalette(makePurchasePalette( emeraldPurch + (int) (material.getStat(MaterialStats.HARDNESS) / 2), @@ -112,7 +112,7 @@ protected static void registerCommonTrades() { } } } - if (material.hasItem(Names.CRACKHAMMER)) { + if (canTrade(material, Names.CRACKHAMMER)) { final ItemStack itemStack = material.getItemStack(Names.CRACKHAMMER); final ITradeList[] hammerTrades = makeTradePalette( makePurchasePalette(emeraldPurch, itemStack)); @@ -128,7 +128,7 @@ protected static void registerCommonTrades() { // enchantedHammerTrades); } } - if (material.hasItem(Names.SWORD)) { + if (canTrade(material, Names.SWORD)) { final ItemStack itemStack = material.getItemStack(Names.SWORD); final ITradeList[] swordTrades = makeTradePalette(makePurchasePalette( (emeraldPurch + (int) (material.getBaseAttackDamage() / 2)) - 1, @@ -153,7 +153,7 @@ protected static void registerCommonTrades() { } } for (final Names name : Arrays.asList(Names.AXE, Names.HOE, Names.SHOVEL)) { - if (material.hasItem(name)) { + if (canTrade(material, name)) { final ItemStack itemStack = material.getItemStack(name); final ITradeList[] toolTrades = makeTradePalette( makePurchasePalette(emeraldPurch, itemStack)); @@ -161,7 +161,7 @@ protected static void registerCommonTrades() { toolTrades); } } - if (material.hasItem(Names.PICKAXE)) { + if (canTrade(material, Names.PICKAXE)) { final ItemStack itemStack = material.getItemStack(Names.PICKAXE); final ITradeList[] pickaxeTrades = makeTradePalette( makePurchasePalette(emeraldPurch, itemStack)); @@ -178,7 +178,7 @@ protected static void registerCommonTrades() { // enchantedPickaxeTrades); } } - if (material.hasItem(Names.INGOT)) { + if (canTrade(material, Names.INGOT)) { final ItemStack itemStack = material.getItemStack(Names.INGOT, 12); if ((!itemStack.getItem().equals(net.minecraft.init.Items.EMERALD)) && (!itemStack.getItem().equals(net.minecraft.init.Items.DIAMOND))) { @@ -198,6 +198,11 @@ protected static void registerCommonTrades() { commitTrades(tradesTable); } + private static boolean canTrade(final MMDMaterial material, final Names form) { + return material.hasItem(form) && zone.moddev.mc.basemetals.content.ContentAcquisition + .allowsIntegrationOutput(material.getItemStack(form)); + } + protected static void registerModSpecificTrades() { } diff --git a/src/main/java/com/mcmoddev/lib/integration/plugins/IC2Base.java b/src/main/java/com/mcmoddev/lib/integration/plugins/IC2Base.java index de482345a..b78997170 100644 --- a/src/main/java/com/mcmoddev/lib/integration/plugins/IC2Base.java +++ b/src/main/java/com/mcmoddev/lib/integration/plugins/IC2Base.java @@ -15,6 +15,7 @@ import ic2.api.recipe.IRecipeInput; import ic2.api.recipe.Recipes; import net.minecraft.item.ItemStack; +import zone.moddev.mc.basemetals.content.ContentAcquisition; import net.minecraft.nbt.NBTTagCompound; import net.minecraftforge.fml.common.registry.GameRegistry; @@ -51,8 +52,12 @@ private void addForgeHammerRecipe(@Nonnull final MMDMaterial material) { Recipes.inputFactory.forOreDict("craftingToolForgeHammer"), Recipes.inputFactory.forOreDict(Oredicts.PLATE + material.getCapitalizedName())); - Recipes.advRecipes.addShapelessRecipe(casing, inputsCasing.toArray()); - Recipes.advRecipes.addShapelessRecipe(plate, inputsPlate.toArray()); + if (ContentAcquisition.allowsIntegrationOutput(casing)) { + Recipes.advRecipes.addShapelessRecipe(casing, inputsCasing.toArray()); + } + if (ContentAcquisition.allowsIntegrationOutput(plate)) { + Recipes.advRecipes.addShapelessRecipe(plate, inputsPlate.toArray()); + } } protected void registerVanillaRecipes(@Nonnull final String materialName) { @@ -74,7 +79,8 @@ protected void addMaceratorRecipes(@Nonnull final MMDMaterial material) { final IRecipeInput inputOre = Recipes.inputFactory.forOreDict(Oredicts.ORE + oreDictName); final IRecipeInput inputDensePlate = Recipes.inputFactory .forOreDict(Oredicts.PLATE_DENSE + oreDictName); - if (material.hasItem(Names.CRUSHED)) { + if (material.hasItem(Names.CRUSHED) + && ContentAcquisition.allowsIntegrationOutput(material.getItemStack(Names.CRUSHED))) { Recipes.macerator.addRecipe(inputOre, null, false, material.getItemStack(Names.CRUSHED, 2)); } @@ -87,7 +93,9 @@ protected void addMaceratorRecipes(@Nonnull final MMDMaterial material) { protected void addMaceratorRecipe(@Nonnull final String oreDict, @Nonnull final ItemStack output) { final IRecipeInput input = Recipes.inputFactory.forOreDict(oreDict); - Recipes.macerator.addRecipe(input, null, false, output); + if (ContentAcquisition.allowsIntegrationOutput(output)) { + Recipes.macerator.addRecipe(input, null, false, output); + } } protected void addOreWashingPlantRecipes(@Nonnull final String materialName) { @@ -100,7 +108,8 @@ protected void addOreWashingPlantRecipes(@Nonnull final MMDMaterial material) { .forOreDict(Oredicts.CRUSHED + oreDictName); final NBTTagCompound metadata = new NBTTagCompound(); metadata.setInteger("amount", 1000); - if ((material.hasItem(Names.CRUSHED_PURIFIED))) { + if (material.hasItem(Names.CRUSHED_PURIFIED) + && ContentAcquisition.allowsIntegrationOutput(material.getItemStack(Names.CRUSHED_PURIFIED))) { if (material.hasItem(Names.SMALLPOWDER)) { Recipes.oreWashing.addRecipe(inputOre, metadata, false, material.getItemStack(Names.CRUSHED_PURIFIED), @@ -158,15 +167,15 @@ protected void addMetalFormerRecipes(@Nonnull final MMDMaterial material) { final ItemStack outputCasing = material.getItemStack(Names.CASING, 2); final ItemStack outputFence = material.getBlockItemStack(Names.FENCE, 1); - if (material.hasBlock(Names.PLATE)) { + if (material.hasBlock(Names.PLATE) && ContentAcquisition.allowsIntegrationOutput(outputPlate)) { Recipes.metalformerRolling.addRecipe(inputIngot, null, false, outputPlate); } - if (material.hasItem(Names.CASING)) { + if (material.hasItem(Names.CASING) && ContentAcquisition.allowsIntegrationOutput(outputCasing)) { Recipes.metalformerRolling.addRecipe(inputPlate, null, false, outputCasing); } - if (material.hasBlock(Names.FENCE)) { + if (material.hasBlock(Names.FENCE) && ContentAcquisition.allowsIntegrationOutput(outputFence)) { Recipes.metalformerExtruding.addRecipe(inputCasing, null, false, outputFence); } } @@ -180,7 +189,8 @@ protected void addCompressorRecipes(@Nonnull final MMDMaterial material) { final IRecipeInput inputIngot = Recipes.inputFactory .forOreDict(Oredicts.PLATE + oreDictName, 9); final ItemStack outputDensePlate = material.getItemStack(Names.DENSE_PLATE); - if ((material.hasItem(Names.DENSE_PLATE)) && (material.hasItem(Names.PLATE))) { + if (material.hasItem(Names.DENSE_PLATE) && material.hasItem(Names.PLATE) + && ContentAcquisition.allowsIntegrationOutput(outputDensePlate)) { Recipes.compressor.addRecipe(inputIngot, null, false, outputDensePlate); } } diff --git a/src/main/java/com/mcmoddev/lib/integration/plugins/MekanismBase.java b/src/main/java/com/mcmoddev/lib/integration/plugins/MekanismBase.java index ea2a5f743..0e61020c8 100644 --- a/src/main/java/com/mcmoddev/lib/integration/plugins/MekanismBase.java +++ b/src/main/java/com/mcmoddev/lib/integration/plugins/MekanismBase.java @@ -12,6 +12,7 @@ import mekanism.api.gas.GasRegistry; import mekanism.api.gas.GasStack; import net.minecraft.item.ItemStack; +import zone.moddev.mc.basemetals.content.ContentAcquisition; import net.minecraft.nbt.NBTTagCompound; import net.minecraftforge.fluids.FluidRegistry; import net.minecraftforge.fluids.FluidStack; @@ -154,6 +155,10 @@ protected static void addOreMultiplicationRecipes(@Nonnull final MMDMaterial mat protected static void addMetallurgicInfuserRecipe(@Nonnull final String infuse, @Nonnull final int amount, @Nonnull final ItemStack inputItem, @Nonnull final ItemStack outputItem) { + if (!ContentAcquisition.allowsIntegrationOutput(outputItem)) { + return; + } + final NBTTagCompound recipeTag = new NBTTagCompound(); // TODO: Check @@ -167,6 +172,10 @@ protected static void addMetallurgicInfuserRecipe(@Nonnull final String infuse, protected static void addCrusherRecipe(@Nonnull final ItemStack inputItem, @Nonnull final ItemStack outputItem) { + if (!ContentAcquisition.allowsIntegrationOutput(outputItem)) { + return; + } + final NBTTagCompound recipeTag = new NBTTagCompound(); recipeTag.setTag(INPUT, inputItem.writeToNBT(new NBTTagCompound())); @@ -177,6 +186,10 @@ protected static void addCrusherRecipe(@Nonnull final ItemStack inputItem, protected static void addEnrichmentChamberRecipe(@Nonnull final ItemStack inputItem, @Nonnull final ItemStack outputItem) { + if (!ContentAcquisition.allowsIntegrationOutput(outputItem)) { + return; + } + final NBTTagCompound recipeTag = new NBTTagCompound(); recipeTag.setTag(INPUT, inputItem.writeToNBT(new NBTTagCompound())); @@ -187,6 +200,10 @@ protected static void addEnrichmentChamberRecipe(@Nonnull final ItemStack inputI protected static void addPurificationChamberRecipe(@Nonnull final ItemStack inputItem, @Nonnull final ItemStack outputItem) { + if (!ContentAcquisition.allowsIntegrationOutput(outputItem)) { + return; + } + final GasStack inputGasStack = new GasStack(GasRegistry.getGas("oxygen"), 1000); final NBTTagCompound recipeTag = new NBTTagCompound(); @@ -199,6 +216,10 @@ protected static void addPurificationChamberRecipe(@Nonnull final ItemStack inpu protected static void addChemicalInjectionChamberRecipe(@Nonnull final ItemStack inputItem, @Nonnull final ItemStack outputItem) { + if (!ContentAcquisition.allowsIntegrationOutput(outputItem)) { + return; + } + final GasStack inputGasStack = new GasStack(GasRegistry.getGas("hydrogenChloride"), 1000); final NBTTagCompound recipeTag = new NBTTagCompound(); @@ -212,6 +233,10 @@ protected static void addChemicalInjectionChamberRecipe(@Nonnull final ItemStack // 5x, Slurry to Crystal protected static void addChemicalCrystallizerRecipe(@Nonnull final String inputGas, @Nonnull final int inputGasQty, @Nonnull final ItemStack outputItem) { + if (!ContentAcquisition.allowsIntegrationOutput(outputItem)) { + return; + } + final GasStack inputGasStack = new GasStack(GasRegistry.getGas(inputGas), inputGasQty); final NBTTagCompound recipeTag = new NBTTagCompound(); @@ -260,6 +285,10 @@ protected static void addPRCRecipe(@Nonnull final ItemStack inputItem, @Nonnull final int inputGasQty, @Nonnull final ItemStack outputItem, @Nonnull final String outputGas, @Nonnull final int outputGasQty, final int extraEnergy, final int ticks) { + if (!ContentAcquisition.allowsIntegrationOutput(outputItem)) { + return; + } + final GasStack inputGasStack = new GasStack(GasRegistry.getGas(inputGas), inputGasQty); final GasStack outputGasStack = new GasStack(GasRegistry.getGas(outputGas), outputGasQty); final NBTTagCompound recipeTag = new NBTTagCompound(); @@ -283,6 +312,10 @@ protected static void addPRCRecipe(@Nonnull final ItemStack inputItem, protected static void addOsmiumCompressorRecipe(@Nonnull final ItemStack inputItem, @Nonnull final ItemStack outputItem) { + if (!ContentAcquisition.allowsIntegrationOutput(outputItem)) { + return; + } + final NBTTagCompound recipeTag = new NBTTagCompound(); // TODO: Check @@ -294,6 +327,10 @@ protected static void addOsmiumCompressorRecipe(@Nonnull final ItemStack inputIt protected static void addCombinerRecipe(@Nonnull final ItemStack inputItem, @Nonnull final ItemStack outputItem) { + if (!ContentAcquisition.allowsIntegrationOutput(outputItem)) { + return; + } + final NBTTagCompound recipeTag = new NBTTagCompound(); // TODO: Check @@ -336,6 +373,10 @@ protected static void addChemicalInfuserRecipe(@Nonnull final String leftInputGa protected static void addPrecisionSawmillRecipe(@Nonnull final ItemStack inputItem, @Nonnull final ItemStack outputItem) { + if (!ContentAcquisition.allowsIntegrationOutput(outputItem)) { + return; + } + final NBTTagCompound recipeTag = new NBTTagCompound(); // TODO: Check @@ -348,6 +389,11 @@ protected static void addPrecisionSawmillRecipe(@Nonnull final ItemStack inputIt protected static void addPrecisionSawmillRecipe(@Nonnull final ItemStack inputItem, @Nonnull final ItemStack primaryOutput, @Nonnull final ItemStack secondaryOutput, @Nonnull final double chance) { + if (!ContentAcquisition.allowsIntegrationOutput(primaryOutput) + || !ContentAcquisition.allowsIntegrationOutput(secondaryOutput)) { + return; + } + final NBTTagCompound recipeTag = new NBTTagCompound(); // TODO: Check diff --git a/src/main/java/com/mcmoddev/lib/integration/plugins/ThermalExpansionBase.java b/src/main/java/com/mcmoddev/lib/integration/plugins/ThermalExpansionBase.java index 7b49c7788..ad041325b 100755 --- a/src/main/java/com/mcmoddev/lib/integration/plugins/ThermalExpansionBase.java +++ b/src/main/java/com/mcmoddev/lib/integration/plugins/ThermalExpansionBase.java @@ -1,249 +1,256 @@ -package com.mcmoddev.lib.integration.plugins; - -import javax.annotation.Nonnull; - -import com.mcmoddev.lib.data.Names; -import com.mcmoddev.lib.init.Materials; -import com.mcmoddev.lib.integration.IIntegration; -import com.mcmoddev.lib.material.MMDMaterial; -import com.mcmoddev.lib.util.ConfigBase.Options; - -import cofh.api.util.ThermalExpansionHelper; -import net.minecraft.item.ItemStack; -//import net.minecraft.nbt.NBTTagCompound; -import net.minecraftforge.fluids.FluidRegistry; -import net.minecraftforge.fluids.FluidStack; -//import net.minecraftforge.fml.common.event.FMLInterModComms; - -// Parts of this are based on code from older versions of CoFHLib -// Other parts are lifted from the "ThermalExpansionHelper" of the 1.7 versions -// of CoFHLib - they were efficient and did the integration in the simplest -// manner. Why they've been removed, I don't know. - -public class ThermalExpansionBase implements IIntegration { - - public static final String PLUGIN_MODID = "thermalexpansion"; - // private static final String INPUT = "input"; - // private static final String OUTPUT = "output"; - // private static final String ENERGY = "energy"; - - @Override - public void init() { - if (!Options.isModEnabled(PLUGIN_MODID)) { - return; - } - } - - protected static void addPulverizerRecipe(@Nonnull final int energy, - @Nonnull final ItemStack input, @Nonnull final ItemStack output) { - if ((input == null) || (output == null)) { - return; - } - if ((input.getItem() == null) || (output.getItem() == null)) { - return; - } - - ThermalExpansionHelper.addPulverizerRecipe(energy, input, output); - } - - protected static void addCompactorPressRecipe(@Nonnull final int energy, - @Nonnull final ItemStack input, @Nonnull final ItemStack output) { - if ((input == null) || (output == null)) { - return; - } - if ((input.getItem() == null) || (output.getItem() == null)) { - return; - } - - ThermalExpansionHelper.addCompactorPressRecipe(energy, input, output); - /* - final NBTTagCompound toSend = new NBTTagCompound(); - - toSend.setInteger(ENERGY, energy); - toSend.setTag(INPUT, new NBTTagCompound()); - toSend.setTag(OUTPUT, new NBTTagCompound()); - input.writeToNBT(toSend.getCompoundTag(INPUT)); - output.writeToNBT(toSend.getCompoundTag(OUTPUT)); - FMLInterModComms.sendMessage(PLUGIN_MODID, "addcompactorpressrecipe", toSend); - */ - } - - protected static void addCompactorStorageRecipe(@Nonnull final int energy, - @Nonnull final ItemStack input, @Nonnull final ItemStack output) { - if ((input == null) || (output == null)) { - return; - } - if ((input.getItem() == null) || (output.getItem() == null)) { - return; - } - - ThermalExpansionHelper.addCompactorStorageRecipe(energy, input, output); - /* - final NBTTagCompound toSend = new NBTTagCompound(); - - toSend.setInteger(ENERGY, energy); - toSend.setTag(INPUT, new NBTTagCompound()); - toSend.setTag(OUTPUT, new NBTTagCompound()); - input.writeToNBT(toSend.getCompoundTag(INPUT)); - output.writeToNBT(toSend.getCompoundTag(OUTPUT)); - FMLInterModComms.sendMessage(PLUGIN_MODID, "addcompactorstoragerecipe", toSend); - */ - } - - protected static void addPulverizer(@Nonnull final String materialName) { - addPulverizer(Materials.getMaterialByName(materialName)); - } - - protected static void addPulverizer(@Nonnull final MMDMaterial material) { - if (material.isEmpty() || !material.hasItem(Names.POWDER)) { - return; - } - - /* - * default energy in TE for Ore -> Dust is 4000RF default energy in TE for Ingot -> Dust is - * 2000RF - */ - final int ENERGY_ORE = 4000; - final int ENERGY_INGOT = 2000; - final ItemStack inputOre = material.getBlockItemStack(Names.ORE); - final ItemStack inputIngot = material.getItemStack(Names.INGOT); - final ItemStack outputDust = material.getItemStack(Names.POWDER); - - if (material.hasItem(Names.POWDER)) { - if (material.hasBlock(Names.ORE)) { - addPulverizerRecipe(ENERGY_ORE, inputOre, outputDust); - } - if (material.hasItem(Names.INGOT)) { - addPulverizerRecipe(ENERGY_INGOT, inputIngot, outputDust); - } - } - } - - protected static void addFurnace(@Nonnull final String materialName) { - addFurnace(Materials.getMaterialByName(materialName)); - } - - protected static void addFurnace(@Nonnull final MMDMaterial material) { - if (material.isEmpty()) { - return; - } - - /* - * Ore -> Ingot default, according to TE source, is 2000 dust -> Ingot default, according to - * same, is DEFAULT * 14 / 20 - at the 2000RF default, this is 1400 - */ - final int ENERGY_ORE = 2000; - final int ENERGY_DUST = 1400; - ItemStack ore; - if (material.hasBlock(Names.ORE)) { - ore = material.getBlockItemStack(Names.ORE, 1); - } else if (material.hasItem(Names.BLEND)) { - ore = material.getItemStack(Names.BLEND, 1); - } else { - return; - } - - if (material.hasItem(Names.INGOT)) { - final ItemStack ingot = material.getItemStack(Names.INGOT, 1); - ThermalExpansionHelper.addFurnaceRecipe(ENERGY_ORE, ore, ingot); - if (material.hasItem(Names.POWDER)) { - final ItemStack dust = material.getItemStack(Names.POWDER, 1); - ThermalExpansionHelper.addFurnaceRecipe(ENERGY_DUST, dust, ingot); - } - } - } - - protected static void addCrucible(@Nonnull final String materialName) { - addCrucible(Materials.getMaterialByName(materialName)); - } - - protected static void addCrucible(@Nonnull final MMDMaterial material) { - if (material.isEmpty()) { - return; - } - - /* - * Default power, according to TE source, is 8000 This is used for Pyrotheum, Cryotheum, - * Aerotheum, Petrotheum and Redstone. Redstone Block is 72000 Glowstone and Ender Pearl are - * 20000 Glowstone block is 80000 Cobblestone/Stone/Obsidian is 320000 - */ - final int ENERGY_QTY = 8000; - - final String materialName = material.getName(); - final ItemStack ingot = material.getItemStack(Names.INGOT); - final ItemStack dust = material.getItemStack(Names.POWDER); - final FluidStack oreFluid = FluidRegistry.getFluidStack(materialName, 288); - final FluidStack baseFluid = FluidRegistry.getFluidStack(materialName, 144); - final FluidStack nuggetFluid = FluidRegistry.getFluidStack(materialName, 16); - - if (material.hasBlock(Names.ORE)) { - final ItemStack ore = material.getBlockItemStack(Names.ORE); - ThermalExpansionHelper.addCrucibleRecipe(ENERGY_QTY, ore, oreFluid); - } - - if (material.hasItem(Names.INGOT)) { - ThermalExpansionHelper.addCrucibleRecipe(ENERGY_QTY, ingot, baseFluid); - } - - if (material.hasItem(Names.POWDER)) { - ThermalExpansionHelper.addCrucibleRecipe(ENERGY_QTY, dust, baseFluid); - } - - if (material.hasBlock(Names.PLATE)) { - ThermalExpansionHelper.addCrucibleRecipe(ENERGY_QTY, - material.getBlockItemStack(Names.PLATE), - baseFluid); - } - - if (material.hasItem(Names.NUGGET)) { - ThermalExpansionHelper.addCrucibleRecipe(ENERGY_QTY, - material.getItemStack(Names.NUGGET), nuggetFluid); - } - } - - protected static void addPlatePress(@Nonnull final String materialName) { - addPlatePress(Materials.getMaterialByName(materialName)); - } - - protected static void addPlatePress(@Nonnull final MMDMaterial material) { - if (material.isEmpty()) { - return; - } - if (material.hasItem(Names.PLATE) && material.hasItem(Names.INGOT)) { - - /* - * Compactors default is 4000RF per operation - */ - final int ENERGY_QTY = 4000; - addCompactorPressRecipe(ENERGY_QTY, material.getItemStack(Names.INGOT), - material.getBlockItemStack(Names.PLATE)); - } - } - - protected static void addPressStorage(@Nonnull final String materialName) { - addPressStorage(Materials.getMaterialByName(materialName)); - } - - protected static void addPressStorage(@Nonnull final MMDMaterial material) { - if (material.isEmpty()) { - return; - } - /* - * Compactors default is 4000RF per operation - */ - final int ENERGY_QTY = 4000; - final ItemStack ingotStack = material.getItemStack(Names.INGOT); - final ItemStack ingotsStack = material.getItemStack(Names.INGOT, 9); - final ItemStack nuggetsStack = material.getItemStack(Names.NUGGET, 9); - final ItemStack blockStack = material.getBlockItemStack(Names.BLOCK, 1); - - if (material.hasItem(Names.INGOT)) { - if (material.hasBlock(Names.BLOCK)) { - addCompactorStorageRecipe(ENERGY_QTY, ingotsStack, blockStack); - } - if (material.hasItem(Names.NUGGET)) { - addCompactorStorageRecipe(ENERGY_QTY, nuggetsStack, ingotStack); - } - } - } -} +package com.mcmoddev.lib.integration.plugins; + +import javax.annotation.Nonnull; + +import com.mcmoddev.lib.data.Names; +import com.mcmoddev.lib.init.Materials; +import com.mcmoddev.lib.integration.IIntegration; +import com.mcmoddev.lib.material.MMDMaterial; +import com.mcmoddev.lib.util.ConfigBase.Options; + +import cofh.api.util.ThermalExpansionHelper; +import net.minecraft.item.ItemStack; +import zone.moddev.mc.basemetals.content.ContentAcquisition; +//import net.minecraft.nbt.NBTTagCompound; +import net.minecraftforge.fluids.FluidRegistry; +import net.minecraftforge.fluids.FluidStack; +//import net.minecraftforge.fml.common.event.FMLInterModComms; + +// Parts of this are based on code from older versions of CoFHLib +// Other parts are lifted from the "ThermalExpansionHelper" of the 1.7 versions +// of CoFHLib - they were efficient and did the integration in the simplest +// manner. Why they've been removed, I don't know. + +public class ThermalExpansionBase implements IIntegration { + + public static final String PLUGIN_MODID = "thermalexpansion"; + // private static final String INPUT = "input"; + // private static final String OUTPUT = "output"; + // private static final String ENERGY = "energy"; + + @Override + public void init() { + if (!Options.isModEnabled(PLUGIN_MODID)) { + return; + } + } + + protected static void addPulverizerRecipe(@Nonnull final int energy, + @Nonnull final ItemStack input, @Nonnull final ItemStack output) { + if ((input == null) || (output == null)) { + return; + } + if ((input.getItem() == null) || (output.getItem() == null)) { + return; + } + + if (ContentAcquisition.allowsIntegrationOutput(output)) { + ThermalExpansionHelper.addPulverizerRecipe(energy, input, output); + } + } + + protected static void addCompactorPressRecipe(@Nonnull final int energy, + @Nonnull final ItemStack input, @Nonnull final ItemStack output) { + if ((input == null) || (output == null)) { + return; + } + if ((input.getItem() == null) || (output.getItem() == null)) { + return; + } + + if (ContentAcquisition.allowsIntegrationOutput(output)) { + ThermalExpansionHelper.addCompactorPressRecipe(energy, input, output); + } + /* + final NBTTagCompound toSend = new NBTTagCompound(); + + toSend.setInteger(ENERGY, energy); + toSend.setTag(INPUT, new NBTTagCompound()); + toSend.setTag(OUTPUT, new NBTTagCompound()); + input.writeToNBT(toSend.getCompoundTag(INPUT)); + output.writeToNBT(toSend.getCompoundTag(OUTPUT)); + FMLInterModComms.sendMessage(PLUGIN_MODID, "addcompactorpressrecipe", toSend); + */ + } + + protected static void addCompactorStorageRecipe(@Nonnull final int energy, + @Nonnull final ItemStack input, @Nonnull final ItemStack output) { + if ((input == null) || (output == null)) { + return; + } + if ((input.getItem() == null) || (output.getItem() == null)) { + return; + } + + if (ContentAcquisition.allowsIntegrationOutput(output)) { + ThermalExpansionHelper.addCompactorStorageRecipe(energy, input, output); + } + /* + final NBTTagCompound toSend = new NBTTagCompound(); + + toSend.setInteger(ENERGY, energy); + toSend.setTag(INPUT, new NBTTagCompound()); + toSend.setTag(OUTPUT, new NBTTagCompound()); + input.writeToNBT(toSend.getCompoundTag(INPUT)); + output.writeToNBT(toSend.getCompoundTag(OUTPUT)); + FMLInterModComms.sendMessage(PLUGIN_MODID, "addcompactorstoragerecipe", toSend); + */ + } + + protected static void addPulverizer(@Nonnull final String materialName) { + addPulverizer(Materials.getMaterialByName(materialName)); + } + + protected static void addPulverizer(@Nonnull final MMDMaterial material) { + if (material.isEmpty() || !material.hasItem(Names.POWDER)) { + return; + } + + /* + * default energy in TE for Ore -> Dust is 4000RF default energy in TE for Ingot -> Dust is + * 2000RF + */ + final int ENERGY_ORE = 4000; + final int ENERGY_INGOT = 2000; + final ItemStack inputOre = material.getBlockItemStack(Names.ORE); + final ItemStack inputIngot = material.getItemStack(Names.INGOT); + final ItemStack outputDust = material.getItemStack(Names.POWDER); + + if (material.hasItem(Names.POWDER)) { + if (material.hasBlock(Names.ORE)) { + addPulverizerRecipe(ENERGY_ORE, inputOre, outputDust); + } + if (material.hasItem(Names.INGOT)) { + addPulverizerRecipe(ENERGY_INGOT, inputIngot, outputDust); + } + } + } + + protected static void addFurnace(@Nonnull final String materialName) { + addFurnace(Materials.getMaterialByName(materialName)); + } + + protected static void addFurnace(@Nonnull final MMDMaterial material) { + if (material.isEmpty()) { + return; + } + + /* + * Ore -> Ingot default, according to TE source, is 2000 dust -> Ingot default, according to + * same, is DEFAULT * 14 / 20 - at the 2000RF default, this is 1400 + */ + final int ENERGY_ORE = 2000; + final int ENERGY_DUST = 1400; + ItemStack ore; + if (material.hasBlock(Names.ORE)) { + ore = material.getBlockItemStack(Names.ORE, 1); + } else if (material.hasItem(Names.BLEND)) { + ore = material.getItemStack(Names.BLEND, 1); + } else { + return; + } + + if (material.hasItem(Names.INGOT)) { + final ItemStack ingot = material.getItemStack(Names.INGOT, 1); + ThermalExpansionHelper.addFurnaceRecipe(ENERGY_ORE, ore, ingot); + if (material.hasItem(Names.POWDER)) { + final ItemStack dust = material.getItemStack(Names.POWDER, 1); + ThermalExpansionHelper.addFurnaceRecipe(ENERGY_DUST, dust, ingot); + } + } + } + + protected static void addCrucible(@Nonnull final String materialName) { + addCrucible(Materials.getMaterialByName(materialName)); + } + + protected static void addCrucible(@Nonnull final MMDMaterial material) { + if (material.isEmpty()) { + return; + } + + /* + * Default power, according to TE source, is 8000 This is used for Pyrotheum, Cryotheum, + * Aerotheum, Petrotheum and Redstone. Redstone Block is 72000 Glowstone and Ender Pearl are + * 20000 Glowstone block is 80000 Cobblestone/Stone/Obsidian is 320000 + */ + final int ENERGY_QTY = 8000; + + final String materialName = material.getName(); + final ItemStack ingot = material.getItemStack(Names.INGOT); + final ItemStack dust = material.getItemStack(Names.POWDER); + final FluidStack oreFluid = FluidRegistry.getFluidStack(materialName, 288); + final FluidStack baseFluid = FluidRegistry.getFluidStack(materialName, 144); + final FluidStack nuggetFluid = FluidRegistry.getFluidStack(materialName, 16); + + if (material.hasBlock(Names.ORE)) { + final ItemStack ore = material.getBlockItemStack(Names.ORE); + ThermalExpansionHelper.addCrucibleRecipe(ENERGY_QTY, ore, oreFluid); + } + + if (material.hasItem(Names.INGOT)) { + ThermalExpansionHelper.addCrucibleRecipe(ENERGY_QTY, ingot, baseFluid); + } + + if (material.hasItem(Names.POWDER)) { + ThermalExpansionHelper.addCrucibleRecipe(ENERGY_QTY, dust, baseFluid); + } + + if (material.hasBlock(Names.PLATE)) { + ThermalExpansionHelper.addCrucibleRecipe(ENERGY_QTY, + material.getBlockItemStack(Names.PLATE), + baseFluid); + } + + if (material.hasItem(Names.NUGGET)) { + ThermalExpansionHelper.addCrucibleRecipe(ENERGY_QTY, + material.getItemStack(Names.NUGGET), nuggetFluid); + } + } + + protected static void addPlatePress(@Nonnull final String materialName) { + addPlatePress(Materials.getMaterialByName(materialName)); + } + + protected static void addPlatePress(@Nonnull final MMDMaterial material) { + if (material.isEmpty()) { + return; + } + if (material.hasItem(Names.PLATE) && material.hasItem(Names.INGOT)) { + + /* + * Compactors default is 4000RF per operation + */ + final int ENERGY_QTY = 4000; + addCompactorPressRecipe(ENERGY_QTY, material.getItemStack(Names.INGOT), + material.getBlockItemStack(Names.PLATE)); + } + } + + protected static void addPressStorage(@Nonnull final String materialName) { + addPressStorage(Materials.getMaterialByName(materialName)); + } + + protected static void addPressStorage(@Nonnull final MMDMaterial material) { + if (material.isEmpty()) { + return; + } + /* + * Compactors default is 4000RF per operation + */ + final int ENERGY_QTY = 4000; + final ItemStack ingotStack = material.getItemStack(Names.INGOT); + final ItemStack ingotsStack = material.getItemStack(Names.INGOT, 9); + final ItemStack nuggetsStack = material.getItemStack(Names.NUGGET, 9); + final ItemStack blockStack = material.getBlockItemStack(Names.BLOCK, 1); + + if (material.hasItem(Names.INGOT)) { + if (material.hasBlock(Names.BLOCK)) { + addCompactorStorageRecipe(ENERGY_QTY, ingotsStack, blockStack); + } + if (material.hasItem(Names.NUGGET)) { + addCompactorStorageRecipe(ENERGY_QTY, nuggetsStack, ingotStack); + } + } + } +} diff --git a/src/main/java/com/mcmoddev/lib/integration/plugins/tinkers/TinkersConstructRegistry.java b/src/main/java/com/mcmoddev/lib/integration/plugins/tinkers/TinkersConstructRegistry.java index f7725bb9c..95fe69e11 100755 --- a/src/main/java/com/mcmoddev/lib/integration/plugins/tinkers/TinkersConstructRegistry.java +++ b/src/main/java/com/mcmoddev/lib/integration/plugins/tinkers/TinkersConstructRegistry.java @@ -17,6 +17,8 @@ import net.minecraft.block.Block; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; +import zone.moddev.mc.basemetals.content.ContentAcquisition; +import zone.moddev.mc.basemetals.content.ContentPolicy; import net.minecraftforge.fluids.Fluid; import net.minecraftforge.fluids.FluidRegistry; import net.minecraftforge.fluids.FluidStack; @@ -200,13 +202,19 @@ private TCCode register(@Nonnull final TCMaterial mat) { this.registerFluid(mmdMaterial, mat.getAmountPer()); - TinkerRegistry.addMaterialStats(tcmat, mat.getHeadStats()); - TinkerRegistry.addMaterialStats(tcmat, mat.getHandleStats()); - TinkerRegistry.addMaterialStats(tcmat, mat.getExtraStats()); - TinkerRegistry.addMaterialStats(tcmat, mat.getBowStats()); - TinkerRegistry.addMaterialStats(tcmat, mat.getBowStringStats()); - TinkerRegistry.addMaterialStats(tcmat, mat.getArrowShaftStats()); - TinkerRegistry.addMaterialStats(tcmat, mat.getFletchingStats()); + final boolean restricted = ContentAcquisition.restrictsIntegration(); + if (!restricted || ContentPolicy.active().allowsToolParts(mmdMaterial.getName())) { + TinkerRegistry.addMaterialStats(tcmat, mat.getHeadStats()); + TinkerRegistry.addMaterialStats(tcmat, mat.getHandleStats()); + TinkerRegistry.addMaterialStats(tcmat, mat.getExtraStats()); + } + + if (!restricted) { + TinkerRegistry.addMaterialStats(tcmat, mat.getBowStats()); + TinkerRegistry.addMaterialStats(tcmat, mat.getBowStringStats()); + TinkerRegistry.addMaterialStats(tcmat, mat.getArrowShaftStats()); + TinkerRegistry.addMaterialStats(tcmat, mat.getFletchingStats()); + } tcmat.setFluid(fluid).setCraftable(mat.getCraftable()).setCastable(mat.getCastable()) .addItem(matRepItem, 1, Material.VALUE_Ingot); @@ -388,8 +396,10 @@ public TCCode registerBasin(@Nonnull final Block block, @Nonnull final Fluid sou if (sourceQty == 0) { return TCCode.FAILURE_PARAMETER_ERROR; } - TinkerRegistry.registerBasinCasting(new ItemStack(block), null, source, - sourceQty); + final ItemStack output = new ItemStack(block); + if (ContentAcquisition.allowsIntegrationOutput(output)) { + TinkerRegistry.registerBasinCasting(output, null, source, sourceQty); + } return TCCode.SUCCESS; } @@ -409,8 +419,10 @@ public TCCode registerCasting(@Nonnull final Item output, @Nonnull final Fluid s if (sourceQty == 0) { return TCCode.FAILURE_PARAMETER_ERROR; } - TinkerRegistry.registerTableCasting(new ItemStack(output), null, source, - sourceQty); + final ItemStack stack = new ItemStack(output); + if (ContentAcquisition.allowsIntegrationOutput(stack)) { + TinkerRegistry.registerTableCasting(stack, null, source, sourceQty); + } return TCCode.SUCCESS; } diff --git a/src/main/java/com/mcmoddev/lib/recipe/ShieldUpgradeRecipe.java b/src/main/java/com/mcmoddev/lib/recipe/ShieldUpgradeRecipe.java index 49051a646..66aa03059 100755 --- a/src/main/java/com/mcmoddev/lib/recipe/ShieldUpgradeRecipe.java +++ b/src/main/java/com/mcmoddev/lib/recipe/ShieldUpgradeRecipe.java @@ -9,6 +9,8 @@ import java.util.Map.Entry; import zone.moddev.mc.basemetals.BaseMetals; +import zone.moddev.mc.basemetals.content.ContentMode; +import zone.moddev.mc.basemetals.content.ContentPolicy; import com.mcmoddev.lib.data.MaterialStats; import com.mcmoddev.lib.data.Names; import com.mcmoddev.lib.init.Materials; @@ -62,7 +64,13 @@ public boolean matches(final InventoryCrafting inv, final World worldIn) { } } } - return matches[0] ? matches[1] : false; + if (!matches[0] || !matches[1]) { + return false; + } + + // The plate determines the output, so the crafting list cannot filter this recipe. + return ContentPolicy.active().mode() == ContentMode.HIGH_FANTASY + || getCraftingResult(inv) != null; } @Override @@ -106,6 +114,10 @@ public ItemStack getCraftingResult(final InventoryCrafting inv) { } } + if (plateMatched == null || !ContentPolicy.active().allows(plateMatched)) { + return null; + } + BaseMetals.logger.debug("Adding %d enchantments to output item", enchants.size()); EnchantmentHelper.setEnchantments(enchants, plateMatched); return plateMatched; diff --git a/src/main/java/com/mcmoddev/lib/registry/CrusherRecipeRegistry.java b/src/main/java/com/mcmoddev/lib/registry/CrusherRecipeRegistry.java index c1ac58537..6d9e9b745 100644 --- a/src/main/java/com/mcmoddev/lib/registry/CrusherRecipeRegistry.java +++ b/src/main/java/com/mcmoddev/lib/registry/CrusherRecipeRegistry.java @@ -9,6 +9,7 @@ import java.util.Map; import java.util.concurrent.locks.Lock; import java.util.concurrent.locks.ReentrantLock; +import java.util.function.Predicate; import zone.moddev.mc.basemetals.BaseMetals; import com.mcmoddev.lib.registry.recipe.ArbitraryCrusherRecipe; @@ -41,6 +42,7 @@ public class CrusherRecipeRegistry { private final List recipes = new ArrayList<>(); + private Predicate outputFilter; private final Map recipeByInputCache = new HashMap<>(); private final Map> recipeByOutputCache = new HashMap<>(); @@ -154,7 +156,22 @@ public void clearCache() { * An implementation of the ICrusherRecipe interface. */ public void addRecipe(final ICrusherRecipe crusherRecipe) { - this.recipes.add(crusherRecipe); + if (this.outputFilter == null || this.outputFilter.test(crusherRecipe.getOutput())) { + this.recipes.add(crusherRecipe); + } + } + + /** Applies an output rule only during the caller's startup registration. */ + public void registerWithOutputFilter(final Runnable register, + final Predicate filter) { + final Predicate previous = this.outputFilter; + this.outputFilter = previous == null ? filter : previous.and(filter); + try { + register.run(); + } finally { + this.outputFilter = previous; + clearCache(); + } } /** diff --git a/src/main/java/zone/moddev/mc/basemetals/BaseMetals.java b/src/main/java/zone/moddev/mc/basemetals/BaseMetals.java index c97891541..ebf056be9 100644 --- a/src/main/java/zone/moddev/mc/basemetals/BaseMetals.java +++ b/src/main/java/zone/moddev/mc/basemetals/BaseMetals.java @@ -34,8 +34,9 @@ modid = BaseMetals.MODID, name = BaseMetals.NAME, version = BaseMetals.VERSION, - dependencies = "required-after:Forge@[12.18.3.2511,);required-after:orespawn@[4.1.2.110021,5.0.0);after:tconstruct;after:ic2;after:taiga;before:buildingbricks", + dependencies = "required-after:Forge@[12.18.3.2511,);required-after:orespawn@[4.1.6.110021,5.0.0);after:tconstruct;after:ic2;after:taiga;before:buildingbricks", acceptedMinecraftVersions = "[1.10.2]", + guiFactory = "zone.moddev.mc.basemetals.client.BaseMetalsGuiFactory", certificateFingerprint = "", updateJSON = BaseMetals.UPDATEJSON) public class BaseMetals { @@ -52,7 +53,7 @@ public class BaseMetals { /** * Major.Minor.Patch.Target, where 110021 means Minecraft 1.10.2 on Forge. */ - public static final String VERSION = "2.5.1.110021"; + public static final String VERSION = "2.6.0.110021"; protected static final String UPDATEJSON = SharedStrings.UPDATE_JSON_URL + "BaseMetals/master/update.json"; diff --git a/src/main/java/zone/moddev/mc/basemetals/client/BaseMetalsConfigScreen.java b/src/main/java/zone/moddev/mc/basemetals/client/BaseMetalsConfigScreen.java new file mode 100644 index 000000000..0ca081dfd --- /dev/null +++ b/src/main/java/zone/moddev/mc/basemetals/client/BaseMetalsConfigScreen.java @@ -0,0 +1,35 @@ +package zone.moddev.mc.basemetals.client; + +import java.util.ArrayList; +import java.util.List; + +import net.minecraft.client.gui.GuiScreen; +import net.minecraft.client.resources.I18n; +import net.minecraftforge.common.config.ConfigElement; +import net.minecraftforge.common.config.Configuration; +import net.minecraftforge.fml.client.config.GuiConfig; +import net.minecraftforge.fml.client.config.IConfigElement; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; +import zone.moddev.mc.basemetals.BaseMetals; +import zone.moddev.mc.basemetals.util.Config; + +@SideOnly(Side.CLIENT) +public final class BaseMetalsConfigScreen extends GuiConfig { + public BaseMetalsConfigScreen(final GuiScreen parent) { + super(parent, categories(), BaseMetals.MODID, false, true, + I18n.format("config.basemetals.title"), I18n.format("config.basemetals.restart_guidance")); + } + + private static List categories() { + final Configuration config = Config.getConfiguration(); + final List elements = new ArrayList<>(); + + for (final String category : new String[] { "General", "Metals", "Vanilla", + "Tools and Items", "Fluids", "Mod Integration", "Crack Hammer Recipes" }) { + elements.add(new ConfigElement(config.getCategory(category))); + } + + return elements; + } +} diff --git a/src/main/java/zone/moddev/mc/basemetals/client/BaseMetalsGuiFactory.java b/src/main/java/zone/moddev/mc/basemetals/client/BaseMetalsGuiFactory.java new file mode 100644 index 000000000..eaa74b1bf --- /dev/null +++ b/src/main/java/zone/moddev/mc/basemetals/client/BaseMetalsGuiFactory.java @@ -0,0 +1,32 @@ +package zone.moddev.mc.basemetals.client; + +import java.util.Collections; +import java.util.Set; + +import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.GuiScreen; +import net.minecraftforge.fml.client.IModGuiFactory; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public final class BaseMetalsGuiFactory implements IModGuiFactory { + @Override + public void initialize(final Minecraft minecraft) { + } + + @Override + public Class mainConfigGuiClass() { + return BaseMetalsConfigScreen.class; + } + + @Override + public Set runtimeGuiCategories() { + return Collections.emptySet(); + } + + @Override + public RuntimeOptionGuiHandler getHandlerFor(final RuntimeOptionCategoryElement category) { + return null; + } +} diff --git a/src/main/java/zone/moddev/mc/basemetals/content/ContentAcquisition.java b/src/main/java/zone/moddev/mc/basemetals/content/ContentAcquisition.java new file mode 100644 index 000000000..803590365 --- /dev/null +++ b/src/main/java/zone/moddev/mc/basemetals/content/ContentAcquisition.java @@ -0,0 +1,57 @@ +package zone.moddev.mc.basemetals.content; + +import java.util.Collections; +import java.util.IdentityHashMap; +import java.util.List; +import java.util.Map; +import java.util.Set; + +import com.mcmoddev.lib.registry.CrusherRecipeRegistry; +import net.minecraft.item.ItemStack; +import net.minecraft.item.crafting.CraftingManager; +import net.minecraft.item.crafting.FurnaceRecipes; +import net.minecraft.item.crafting.IRecipe; +import net.minecraftforge.fml.common.Loader; +import net.minecraftforge.fml.common.ModContainer; +import zone.moddev.mc.basemetals.BaseMetals; + +/** Filters only the recipes added by Base Metals, leaving earlier mod and pack recipes alone. */ +public final class ContentAcquisition { + private ContentAcquisition() { + } + + /** Shared integration helpers must not apply Base Metals' mode to another mod's recipes. */ + public static boolean restrictsIntegration() { + if (ContentPolicy.active().mode() == ContentMode.HIGH_FANTASY) { + return false; + } + + final ModContainer owner = Loader.instance().activeModContainer(); + return owner != null && BaseMetals.MODID.equals(owner.getModId()); + } + + public static boolean allowsIntegrationOutput(final ItemStack output) { + return !restrictsIntegration() || ContentPolicy.active().allows(output); + } + + public static void registerRecipes(final Runnable register) { + final ContentPolicy policy = ContentPolicy.active(); + if (policy.mode() == ContentMode.HIGH_FANTASY) { + register.run(); + return; + } + + final List crafting = CraftingManager.getInstance().getRecipeList(); + final Map smelting = FurnaceRecipes.instance().getSmeltingList(); + final Set previousCrafting = Collections.newSetFromMap(new IdentityHashMap<>()); + final Set previousSmelting = Collections.newSetFromMap(new IdentityHashMap<>()); + previousCrafting.addAll(crafting); + previousSmelting.addAll(smelting.keySet()); + + CrusherRecipeRegistry.getInstance().registerWithOutputFilter(register, policy::allows); + crafting.removeIf(recipe -> !previousCrafting.contains(recipe) + && !policy.allows(recipe.getRecipeOutput())); + smelting.entrySet().removeIf(recipe -> !previousSmelting.contains(recipe.getKey()) + && !policy.allows(recipe.getValue())); + } +} diff --git a/src/main/java/zone/moddev/mc/basemetals/content/ContentMode.java b/src/main/java/zone/moddev/mc/basemetals/content/ContentMode.java new file mode 100644 index 000000000..e2f99d18b --- /dev/null +++ b/src/main/java/zone/moddev/mc/basemetals/content/ContentMode.java @@ -0,0 +1,63 @@ +package zone.moddev.mc.basemetals.content; + +import java.util.Locale; + +/** Content modes, with names shared by the config file and network messages. */ +public enum ContentMode { + HIGH_FANTASY("high_fantasy"), + LOW_FANTASY("low_fantasy"); + + private final String serializedName; + + ContentMode(final String serializedName) { + this.serializedName = serializedName; + } + + public String serializedName() { + return serializedName; + } + + public String translationKey() { + return "config.basemetals.content_mode." + serializedName; + } + + public static ContentMode fromSerializedName(final String value) { + if (value != null) { + final String normalized = value.trim().toLowerCase(Locale.ROOT); + + for (final ContentMode mode : values()) { + if (mode.serializedName.equals(normalized)) { + return mode; + } + } + } + + return HIGH_FANTASY; + } + + public static boolean isValidSerializedName(final String value) { + if (value == null) { + return false; + } + + for (final ContentMode mode : values()) { + if (mode.serializedName.equals(value.trim().toLowerCase(Locale.ROOT))) { + return true; + } + } + + return false; + } + + public static String[] serializedNames() { + final ContentMode[] modes = values(); + final String[] names = new String[modes.length]; + + for (int i = 0; i < modes.length; i++) { + names[i] = modes[i].serializedName; + } + + return names; + } + +} diff --git a/src/main/java/zone/moddev/mc/basemetals/content/ContentModeNetwork.java b/src/main/java/zone/moddev/mc/basemetals/content/ContentModeNetwork.java new file mode 100644 index 000000000..ded647970 --- /dev/null +++ b/src/main/java/zone/moddev/mc/basemetals/content/ContentModeNetwork.java @@ -0,0 +1,64 @@ +package zone.moddev.mc.basemetals.content; + +import java.util.Set; + +import net.minecraft.network.NetworkManager; +import net.minecraft.network.play.server.SPacketDisconnect; +import net.minecraft.util.text.ITextComponent; +import net.minecraft.util.text.TextComponentString; +import net.minecraft.util.text.TextComponentTranslation; +import net.minecraftforge.common.MinecraftForge; +import net.minecraftforge.fml.common.eventhandler.SubscribeEvent; +import net.minecraftforge.fml.common.network.FMLNetworkEvent.CustomPacketRegistrationEvent; +import net.minecraftforge.fml.common.network.NetworkRegistry; + +/** Advertise the active recipe mode in Forge's login channel registration. */ +public final class ContentModeNetwork { + private static final String HIGH = "BaseMetals|High"; + private static final String LOW = "BaseMetals|Low"; + + private ContentModeNetwork() {} + + public static void register() { + NetworkRegistry.INSTANCE.newEventDrivenChannel(ContentPolicy.active().mode() == ContentMode.LOW_FANTASY ? LOW : HIGH); + MinecraftForge.EVENT_BUS.register(new ContentModeNetwork()); + } + + @SubscribeEvent + public void checkMode(final CustomPacketRegistrationEvent event) { + final Set channels = event.getRegistrations(); + // Forge includes FML|HS in its login registration, not ordinary channel updates. + if (!"REGISTER".equals(event.getOperation()) || !channels.contains("FML|HS")) return; + + final boolean localLow = ContentPolicy.active().mode() == ContentMode.LOW_FANTASY; + final boolean remoteLow = channels.contains(LOW); + final boolean remoteHigh = channels.contains(HIGH); + final boolean server = event.getSide().isServer(); + final ITextComponent reason; + if (remoteLow == remoteHigh) { + // A client with no mode channel may also lack the translation key. + reason = server + ? new TextComponentString("Base Metals could not check the Fantasy Level. " + + "Use the same Base Metals build on the server and client.") + : new TextComponentTranslation("config.basemetals.connection.protocol"); + } else if (remoteLow == localLow) { + return; + } else { + final boolean serverLow = server ? localLow : remoteLow; + reason = new TextComponentTranslation("config.basemetals.connection.mismatch", + modeLabel(serverLow), modeLabel(!serverLow)); + } + + final NetworkManager manager = event.getManager(); + manager.channel().config().setAutoRead(false); + if (server) { + manager.sendPacket(new SPacketDisconnect(reason), future -> manager.closeChannel(reason)); + } else { + manager.closeChannel(reason); + } + } + + private static ITextComponent modeLabel(final boolean low) { + return new TextComponentTranslation(low ? ContentMode.LOW_FANTASY.translationKey() : ContentMode.HIGH_FANTASY.translationKey()); + } +} diff --git a/src/main/java/zone/moddev/mc/basemetals/content/ContentPolicy.java b/src/main/java/zone/moddev/mc/basemetals/content/ContentPolicy.java new file mode 100644 index 000000000..2fa257171 --- /dev/null +++ b/src/main/java/zone/moddev/mc/basemetals/content/ContentPolicy.java @@ -0,0 +1,233 @@ +package zone.moddev.mc.basemetals.content; + +import zone.moddev.mc.basemetals.BaseMetals; +import zone.moddev.mc.basemetals.data.MaterialNames; +import net.minecraft.item.ItemStack; +import net.minecraft.util.ResourceLocation; + +import java.util.Arrays; +import java.util.Collections; +import java.util.LinkedHashSet; +import java.util.Locale; +import java.util.Set; + +/** Defines which material forms can be made in each content mode. */ +public final class ContentPolicy { + private static final ContentPolicy HIGH = new ContentPolicy(ContentMode.HIGH_FANTASY); + private static final ContentPolicy LOW = new ContentPolicy(ContentMode.LOW_FANTASY); + private static final Set MATERIALS = set( + MaterialNames.ADAMANTINE, MaterialNames.ANTIMONY, MaterialNames.AQUARIUM, + MaterialNames.BISMUTH, MaterialNames.BRASS, MaterialNames.BRONZE, + MaterialNames.CHARCOAL, MaterialNames.COAL, MaterialNames.COLDIRON, + MaterialNames.COPPER, MaterialNames.CUPRONICKEL, MaterialNames.DIAMOND, + MaterialNames.ELECTRUM, MaterialNames.EMERALD, MaterialNames.ENDER, + MaterialNames.GOLD, MaterialNames.INVAR, MaterialNames.IRON, + MaterialNames.LAPIS, MaterialNames.LEAD, MaterialNames.MERCURY, + MaterialNames.MITHRIL, MaterialNames.NICKEL, MaterialNames.OBSIDIAN, + MaterialNames.PEWTER, MaterialNames.PLATINUM, MaterialNames.PRISMARINE, + MaterialNames.QUARTZ, MaterialNames.REDSTONE, MaterialNames.SILVER, + MaterialNames.STARSTEEL, MaterialNames.STEEL, MaterialNames.STONE, + MaterialNames.TIN, MaterialNames.WOOD, MaterialNames.ZINC); + + private static final Set FULL_TOOLS = set(MaterialNames.ADAMANTINE, + MaterialNames.AQUARIUM, MaterialNames.BRONZE, MaterialNames.COLDIRON, + MaterialNames.COPPER, MaterialNames.CUPRONICKEL, MaterialNames.INVAR, + MaterialNames.MITHRIL, MaterialNames.NICKEL, MaterialNames.STARSTEEL, + MaterialNames.STEEL, MaterialNames.IRON); + + private static final Set ARMOR = set(MaterialNames.ADAMANTINE, + MaterialNames.AQUARIUM, MaterialNames.BRASS, MaterialNames.BRONZE, + MaterialNames.COLDIRON, MaterialNames.COPPER, MaterialNames.CUPRONICKEL, + MaterialNames.ELECTRUM, MaterialNames.INVAR, MaterialNames.MITHRIL, + MaterialNames.NICKEL, MaterialNames.PLATINUM, MaterialNames.SILVER, + MaterialNames.STARSTEEL, MaterialNames.STEEL); + private static final Set PROTECTIVE = union(ARMOR, + set(MaterialNames.IRON, MaterialNames.GOLD, MaterialNames.DIAMOND)); + + private static final Set AMMUNITION = union(FULL_TOOLS, + set(MaterialNames.SILVER, MaterialNames.OBSIDIAN, MaterialNames.DIAMOND)); + + private static final Set GEARS = set(MaterialNames.ADAMANTINE, + MaterialNames.AQUARIUM, MaterialNames.BRASS, MaterialNames.BRONZE, + MaterialNames.COLDIRON, MaterialNames.COPPER, MaterialNames.CUPRONICKEL, + MaterialNames.INVAR, MaterialNames.MITHRIL, MaterialNames.NICKEL, + MaterialNames.STARSTEEL, MaterialNames.STEEL, MaterialNames.IRON, + MaterialNames.GOLD, MaterialNames.WOOD); + + private static final Set TOOLS = Collections.unmodifiableSet( + new LinkedHashSet<>(Arrays.asList(MaterialForm.AXE, MaterialForm.CRACKHAMMER, + MaterialForm.HOE, MaterialForm.PICKAXE, MaterialForm.SCYTHE, + MaterialForm.SHEARS, MaterialForm.SHOVEL, MaterialForm.SWORD))); + private static final Set ARMOR_FORMS = Collections.unmodifiableSet( + new LinkedHashSet<>(Arrays.asList(MaterialForm.BOOTS, MaterialForm.CHESTPLATE, + MaterialForm.HELMET, MaterialForm.LEGGINGS, MaterialForm.HORSE_ARMOR, + MaterialForm.SHIELD))); + private static final Set BUILDING_FORMS = Collections.unmodifiableSet( + new LinkedHashSet<>(Arrays.asList(MaterialForm.ANVIL, MaterialForm.BARS, + MaterialForm.BLOCK, MaterialForm.BOOKSHELF, MaterialForm.BUTTON, + MaterialForm.DOOR, MaterialForm.DOUBLE_SLAB, MaterialForm.FENCE, + MaterialForm.FENCE_GATE, MaterialForm.FLOWER_POT, MaterialForm.LADDER, + MaterialForm.LEVER, MaterialForm.PLATE, MaterialForm.PRESSURE_PLATE, + MaterialForm.SLAB, MaterialForm.STAIRS, MaterialForm.TRAPDOOR, + MaterialForm.TRIPWIRE_HOOK, MaterialForm.WALL))); + + private final ContentMode mode; + + private ContentPolicy(final ContentMode mode) { + this.mode = mode; + } + + public static ContentPolicy forMode(final ContentMode mode) { + return mode == ContentMode.LOW_FANTASY ? LOW : HIGH; + } + + public static ContentPolicy active() { + return forMode(zone.moddev.mc.basemetals.util.Config.getActiveContentMode()); + } + + public ContentMode mode() { + return mode; + } + + public boolean allowsToolParts(final String material) { + return TOOLS.stream().anyMatch(form -> allows(material, form)); + } + + public boolean allows(final String material, final MaterialForm form) { + final String name = normalize(material); + + if (mode == ContentMode.HIGH_FANTASY || material == null || form == null) { + return true; + } + + if (form == MaterialForm.OTHER) { + return !MaterialNames.MERCURY.equals(name); + } + + if (form == MaterialForm.BOW || form == MaterialForm.CROSSBOW + || form == MaterialForm.FISHING_ROD) { + return false; + } + + if (TOOLS.contains(form)) { + return allowsTool(name, form); + } + + if (ARMOR_FORMS.contains(form)) { + return PROTECTIVE.contains(name); + } + + if (form == MaterialForm.ARROW || form == MaterialForm.BOLT) { + return AMMUNITION.contains(name); + } + + if (form == MaterialForm.GEAR) { + return GEARS.contains(name); + } + + if (form == MaterialForm.ANVIL) { + return MaterialNames.STONE.equals(name) || MaterialNames.STEEL.equals(name) + || MaterialNames.ADAMANTINE.equals(name); + } + + if (MaterialNames.MERCURY.equals(name)) { + return form == MaterialForm.ORE || form == MaterialForm.POWDER + || form == MaterialForm.SMALLPOWDER || form == MaterialForm.FLUID + || form == MaterialForm.INGOT; + } + + if (BUILDING_FORMS.contains(form)) { + return true; + } + + return true; + } + + public boolean allows(final ItemStack stack) { + if (stack == null || stack.getItem() == null) { + return true; + } + + return allows(stack.getItem().getRegistryName()); + } + + public boolean allows(final ResourceLocation id) { + if (id == null || !BaseMetals.MODID.equals(id.getResourceDomain())) { + return true; + } + + final String material = materialFromPath(id.getResourcePath()); + + if (material == null) { + return true; + } + + MaterialForm form = MaterialForm.fromRegistryPath(id.getResourcePath()); + + if (form == MaterialForm.OTHER && id.getResourcePath().equals(material)) { + form = MaterialForm.FLUID; + } + + return allows(material, form); + } + + + public static String materialFromPath(final String registryPath) { + if (registryPath == null) { + return null; + } + + final String path = registryPath.toLowerCase(Locale.ROOT); + + for (final String material : MATERIALS) { + if (path.equals(material) || path.startsWith(material + "_") + || path.startsWith("double_" + material + "_")) { + return material; + } + } + + return null; + } + + private boolean allowsTool(final String material, final MaterialForm form) { + if (FULL_TOOLS.contains(material)) { + return true; + } + + if (MaterialNames.SILVER.equals(material)) { + return form == MaterialForm.SWORD; + } + + if (MaterialNames.OBSIDIAN.equals(material)) { + return form == MaterialForm.AXE || form == MaterialForm.SWORD + || form == MaterialForm.SCYTHE; + } + + if (MaterialNames.DIAMOND.equals(material)) { + return form == MaterialForm.CRACKHAMMER || form == MaterialForm.SCYTHE + || form == MaterialForm.SHEARS; + } + + if (MaterialNames.STONE.equals(material)) { + return form == MaterialForm.CRACKHAMMER || form == MaterialForm.SCYTHE; + } + + return MaterialNames.WOOD.equals(material) && form == MaterialForm.CRACKHAMMER; + } + + private static String normalize(final String material) { + return material == null ? "" : material.trim().toLowerCase(Locale.ROOT); + } + + private static Set set(final String... values) { + return Collections.unmodifiableSet(new LinkedHashSet<>(Arrays.asList(values))); + } + + private static Set union(final Set first, final Set second) { + final Set values = new LinkedHashSet<>(first); + + values.addAll(second); + + return Collections.unmodifiableSet(values); + } +} diff --git a/src/main/java/zone/moddev/mc/basemetals/content/MaterialForm.java b/src/main/java/zone/moddev/mc/basemetals/content/MaterialForm.java new file mode 100644 index 000000000..c2209cbfb --- /dev/null +++ b/src/main/java/zone/moddev/mc/basemetals/content/MaterialForm.java @@ -0,0 +1,98 @@ +package zone.moddev.mc.basemetals.content; + +import java.util.Locale; + +/** Item and block forms used to decide which recipes a content mode permits. */ +public enum MaterialForm { + ARROW, + AXE, + BLEND, + BOOTS, + BOLT, + BOW, + CHESTPLATE, + CRACKHAMMER, + CROSSBOW, + FISHING_ROD, + GEAR, + HELMET, + HOE, + HORSE_ARMOR, + INGOT, + LEGGINGS, + NUGGET, + PICKAXE, + POWDER, + ROD, + SCYTHE, + SHEARS, + SHIELD, + SHOVEL, + SMALLBLEND, + SMALLPOWDER, + SWORD, + CASING, + CLUMP, + CRUSHED, + CRUSHED_PURIFIED, + CRYSTAL, + DENSE_PLATE, + DIRTY_POWDER, + SHARD, + ANVIL, + BARS, + BLOCK, + BOOKSHELF, + BUTTON, + DOOR, + DOUBLE_SLAB, + FENCE, + FENCE_GATE, + FLOWER_POT, + LADDER, + LEVER, + PLATE, + PRESSURE_PLATE, + SLAB, + STAIRS, + TRAPDOOR, + TRIPWIRE_HOOK, + WALL, + ORE, + FLUID, + OTHER; + + /** Finds the form from the suffix of a Base Metals or MMDLib registry name. */ + public static MaterialForm fromRegistryPath(final String registryPath) { + if (registryPath == null) { + return OTHER; + } + + final String path = registryPath.toLowerCase(Locale.ROOT); + MaterialForm match = OTHER; + int longestMatch = -1; + + for (final MaterialForm form : values()) { + if (form == OTHER || form == FLUID) { + continue; + } + + final String suffix = registrySuffix(form); + + if (path.endsWith("_" + suffix) && suffix.length() > longestMatch) { + match = form; + longestMatch = suffix.length(); + } + } + + return match; + } + + private static String registrySuffix(final MaterialForm form) { + if (form == DIRTY_POWDER) { + return "powder_dirty"; + } + + return form.name().toLowerCase(Locale.ROOT); + } +} diff --git a/src/main/java/zone/moddev/mc/basemetals/proxy/ClientProxy.java b/src/main/java/zone/moddev/mc/basemetals/proxy/ClientProxy.java index 7a9de9d3f..3814103e0 100644 --- a/src/main/java/zone/moddev/mc/basemetals/proxy/ClientProxy.java +++ b/src/main/java/zone/moddev/mc/basemetals/proxy/ClientProxy.java @@ -1,6 +1,8 @@ package zone.moddev.mc.basemetals.proxy; import zone.moddev.mc.basemetals.BaseMetals; +import zone.moddev.mc.basemetals.client.BaseMetalsConfigScreen; +import zone.moddev.mc.orespawn.api.client.WorldSettingsExtensionRegistry; import com.mcmoddev.lib.client.registrations.RegistrationHelper; import com.mcmoddev.lib.client.renderer.RenderCustomArrow; import com.mcmoddev.lib.client.renderer.RenderCustomBolt; @@ -65,6 +67,8 @@ public void preInit(final FMLPreInitializationEvent event) { @Override public void init(final FMLInitializationEvent event) { super.init(event); + WorldSettingsExtensionRegistry.registerConfigScreen(BaseMetals.MODID, BaseMetalsConfigScreen::new); + if (Loader.isModLoaded("waila")) { com.mcmoddev.lib.waila.Waila.init(); } diff --git a/src/main/java/zone/moddev/mc/basemetals/proxy/CommonProxy.java b/src/main/java/zone/moddev/mc/basemetals/proxy/CommonProxy.java index 1ebff500c..0996f7402 100644 --- a/src/main/java/zone/moddev/mc/basemetals/proxy/CommonProxy.java +++ b/src/main/java/zone/moddev/mc/basemetals/proxy/CommonProxy.java @@ -4,6 +4,8 @@ import java.util.Map; import zone.moddev.mc.basemetals.BaseMetals; +import zone.moddev.mc.basemetals.content.ContentAcquisition; +import zone.moddev.mc.basemetals.content.ContentModeNetwork; import zone.moddev.mc.basemetals.data.MaterialNames; import zone.moddev.mc.basemetals.init.Achievements; import zone.moddev.mc.basemetals.init.Blocks; @@ -49,6 +51,7 @@ public boolean allsGood() { public void preInit(final FMLPreInitializationEvent event) { Config.init(); + ContentModeNetwork.register(); com.mcmoddev.lib.init.Materials.init(); Materials.init(); @@ -118,8 +121,10 @@ public void onIdMapping() { public void init(final FMLInitializationEvent event) { this.allsGood = false; BaseMetalsWorldgenProvider.enqueue(); - com.mcmoddev.lib.init.Recipes.init(); - Recipes.init(); + ContentAcquisition.registerRecipes(() -> { + com.mcmoddev.lib.init.Recipes.init(); + Recipes.init(); + }); Achievements.init(); FuelRegistry.register(); diff --git a/src/main/java/zone/moddev/mc/basemetals/util/Config.java b/src/main/java/zone/moddev/mc/basemetals/util/Config.java index 808b8b8b9..8725d5997 100644 --- a/src/main/java/zone/moddev/mc/basemetals/util/Config.java +++ b/src/main/java/zone/moddev/mc/basemetals/util/Config.java @@ -3,6 +3,7 @@ import java.io.File; import zone.moddev.mc.basemetals.BaseMetals; +import zone.moddev.mc.basemetals.content.ContentMode; import zone.moddev.mc.basemetals.data.MaterialNames; import com.mcmoddev.lib.data.ConfigKeys; import com.mcmoddev.lib.integration.plugins.DenseOresBase; @@ -30,6 +31,7 @@ public class Config extends ConfigBase { private static Configuration configuration; + private static ContentMode activeContentMode = ContentMode.HIGH_FANTASY; private static final String CONFIG_FILE = "config/BaseMetals.cfg"; private static final String GENERAL_CAT = "General"; private static final String INTEGRATION_CAT = "Mod Integration"; @@ -39,14 +41,22 @@ public class Config extends ConfigBase { private static final String TOOLS_CAT = "Tools and Items"; private static final String FLUIDS_CAT = "Fluids"; + public static Configuration getConfiguration() { + return configuration; + } + + public static ContentMode getActiveContentMode() { + return activeContentMode; + } + /** * * @param event */ @SubscribeEvent public void onConfigChange(final ConfigChangedEvent.OnConfigChangedEvent event) { - if (event.getModID().equals(BaseMetals.MODID)) { - init(); + if (BaseMetals.MODID.equals(event.getModID()) && configuration.hasChanged()) { + configuration.save(); } } @@ -57,6 +67,22 @@ public static void init() { if (configuration == null) { configuration = new Configuration(new File(CONFIG_FILE)); MinecraftForge.EVENT_BUS.register(new Config()); + + final Property mode = configuration.get(GENERAL_CAT, "contentMode", "high_fantasy", + "High Fantasy keeps the full recipe set. Low Fantasy limits what each material can make. " + + "Existing items and ore generation are unchanged. Restart to apply."); + mode.setLanguageKey("config.basemetals.option.content_mode"); + mode.setValidValues(ContentMode.serializedNames()); + mode.setRequiresMcRestart(true); + + final String configured = mode.getString(); + activeContentMode = ContentMode.fromSerializedName(configured); + if (!ContentMode.isValidSerializedName(configured)) { + BaseMetals.logger.warn("Unknown Fantasy Level '%s'; using High Fantasy.", configured); + } + if (!activeContentMode.serializedName().equals(configured)) { + mode.set(activeContentMode.serializedName()); + } } // GENERAL @@ -364,6 +390,14 @@ public static void init() { manageUserHammerRecipes(userRecipeCat.values()); + configuration.getCategory(GENERAL_CAT).setLanguageKey("config.basemetals.category.general"); + configuration.getCategory(MATERIALS_CAT).setLanguageKey("config.basemetals.category.metals"); + configuration.getCategory(VANILLA_CAT).setLanguageKey("config.basemetals.category.vanilla"); + configuration.getCategory(FLUIDS_CAT).setLanguageKey("config.basemetals.category.fluids"); + configuration.getCategory(TOOLS_CAT).setLanguageKey(TOOLS_CAT); + configuration.getCategory(INTEGRATION_CAT).setLanguageKey(INTEGRATION_CAT); + configuration.getCategory(HAMMER_RECIPES_CAT).setLanguageKey(HAMMER_RECIPES_CAT); + if (configuration.hasChanged()) { configuration.save(); } diff --git a/src/main/resources/assets/basemetals/lang/de_DE.lang b/src/main/resources/assets/basemetals/lang/de_DE.lang index c75f9a312..b3e62d058 100644 --- a/src/main/resources/assets/basemetals/lang/de_DE.lang +++ b/src/main/resources/assets/basemetals/lang/de_DE.lang @@ -1,1818 +1,1832 @@ -basemetals.crackhammer=Zerkleinerte Blöcke / Gegenstände - -#Creative Tabs -itemGroup.basemetals.blocks=Base Metals Blöcke -itemGroup.basemetals.combat=Base Metals Combat -itemGroup.basemetals.items=Base Metals Gegenstände -itemGroup.basemetals.tools=Base Metals Werkzeuge - -#ToolTips -tooltip.adamantine.tool=+%d Schaden gegen zähe Feinde -tooltip.adamantine.armor=Volle Rüstung: Schadensreduktion - -tooltip.aquarium.tool=+%d Schaden gegen aquatische Feinde -tooltip.aquarium.armor=Volle Rüstung: Unterwasseratmung - -tooltip.coldiron.tool=+%d Schaden gegen feurige Feinde -tooltip.coldiron.armor=Volle Rüstung: Feuerimmunität - -tooltip.mithril.tool=Blendet Wither und Untote -tooltip.mithril.armor=Volle Rüstung: Immunität gegen Gift & Wither - -tooltip.starsteel.tool=Repariert 1 Schaden alle %d Sekunden -tooltip.starsteel.armor=Volle Rüstung: Gewichtsreduktion - -#Achievements - #Achievement Name -achievement.aquarium_maker=Aquarium -achievement.angel_of_death=Todesengel -achievement.brass_maker=Messing -achievement.bronze_maker=Bronze -achievement.blocktastic=Blocktastisch! -achievement.cupronickel_maker=Kupfernickel -achievement.demon_slayer=Dämonenschlächter -achievement.electrum_maker=Elektron -achievement.geologist=Geologe -achievement.invar_maker=Invar -achievement.juggernaut=Juggernaut -achievement.metallurgy=Metallurgy -achievement.mithril_maker=Mithril -achievement.moon_boots=Moon Walker -achievement.scuba_diver=SCUBA Diver -achievement.steel_maker=Stahl -achievement.this_is_new=Das ist neu ... - #Acheviement Desc -achievement.aquarium_maker.desc=Kombiniere Kupferpulver, Zinkpulver und Prismarinkristalle, um Aquarium herzustellen -achievement.angel_of_death.desc=Trage eine vollständige Mithrilrüstung und führe ein Mithrilschwert -achievement.brass_maker.desc=Kombiniere Kupferpulver und Zinkpulver, um Messing herzustellen -achievement.bronze_maker.desc=Kombiniere Kupferpulver und Zinnpulver, um Bronze herzustellen -achievement.blocktastic.desc=Platziere einen Metallblock, der weder Eisen noch Gold ist -achievement.cupronickel_maker.desc=Kombiniere Kupferpulver und Nickelpulver, um Kupfernickel herzustellen -achievement.demon_slayer.desc=Trage eine vollständige Kalteisenrüstung und führe ein Kalteisenschwert -achievement.electrum_maker.desc=Kombiniere Silberpulver und Goldpulver, um Elektron herzustellen -achievement.geologist.desc=Stelle einen Hammer aus einem Metallblock her -achievement.invar_maker.desc=Kombiniere Eisenpulver und Nickelpulver, um Invar herzustellen -achievement.juggernaut.desc=Trage eine vollständige Adamantrüstung -achievement.metallurgy.desc=Stelle ein beliebiges Gemisch her -achievement.mithril_maker.desc=Kombiniere Silverpulver, Kalteisenpulver und Quecksilberpulver, um Mithril herzustellen -achievement.moon_boots.desc=Trage ein Paar Sternenstahlstiefel -achievement.scuba_diver.desc=Trage eine vollständige Aquariumrüstung und tauche im Wasser -achievement.steel_maker.desc=Kombiniere Eisenpulver mit Holzkohlepulver, um Stahl herzustellen -achievement.this_is_new.desc=Schmelze ein neues Metall des Base Metals Mod - -#axts -item.basemetals.adamantine_axe.name=Adamantaxt -item.basemetals.aquarium_axe.name=Aquariumaxt -item.basemetals.antimony_axe.name=Antimonaxt -item.basemetals.bismuth_axe.name=Bismuthaxt -item.basemetals.brass_axe.name=Messingaxt -item.basemetals.bronze_axe.name=Bronzeaxt -item.basemetals.coldiron_axe.name=Kalteisenaxt -item.basemetals.copper_axe.name=Kupferaxt -item.basemetals.cupronickel_axe.name=Kupfernickelaxt -item.basemetals.electrum_axe.name=Elektronaxt -item.basemetals.emerald_axe.name=Smaragdaxt -item.basemetals.invar_axe.name=Invaraxt -item.basemetals.lead_axe.name=Bleiaxt -item.basemetals.mithril_axe.name=Mithrilaxt -item.basemetals.nickel_axe.name=Nickelaxt -item.basemetals.obsidian_axe.name=Obsdidianaxt -item.basemetals.pewter_axe.name=Hartzinnaxt -item.basemetals.platinum_axe.name=Platinaxt -item.basemetals.quartz_axe.name=Quartzaxt -item.basemetals.silver_axe.name=Silberaxt -item.basemetals.starsteel_axe.name=Sternenstahlaxt -item.basemetals.steel_axe.name=Stahlaxt -item.basemetals.tin_axe.name=Zinnaxt -item.basemetals.zinc_axe.name=Zinkaxt - -#swords -item.basemetals.adamantine_sword.name=Adamantschwert -item.basemetals.aquarium_sword.name=Aquariumschwert -item.basemetals.antimony_sword.name=Antimonschwert -item.basemetals.bismuth_sword.name=Bismuthschwert -item.basemetals.brass_sword.name=Messingschwert -item.basemetals.bronze_sword.name=Bronzeschwert -item.basemetals.coldiron_sword.name=Kalteisenschwert -item.basemetals.copper_sword.name=Kupferschwert -item.basemetals.cupronickel_sword.name=Kupfernickelschwert -item.basemetals.electrum_sword.name=Elektronschwert -item.basemetals.emerald_sword.name=Smaragdschwert -item.basemetals.invar_sword.name=Invarschwert -item.basemetals.lead_sword.name=Bleischwert -item.basemetals.mithril_sword.name=Mithrilschwert -item.basemetals.obsidian_sword.name=Obsidianschwert -item.basemetals.nickel_sword.name=Nickelschwert -item.basemetals.quartz_sword.name=Quartzschwert -item.basemetals.pewter_sword.name=Hartzinnschwert -item.basemetals.platinum_sword.name=Platinschwert -item.basemetals.silver_sword.name=Silberschwert -item.basemetals.starsteel_sword.name=Sternenstahlschwert -item.basemetals.steel_sword.name=Stahlschwert -item.basemetals.tin_sword.name=Zinnschwert -item.basemetals.zinc_sword.name=Zinkschwert - -#spitzhackes -item.basemetals.adamantine_pickaxe.name=Adamantspitzhacke -item.basemetals.aquarium_pickaxe.name=Aquariumspitzhacke -item.basemetals.antimony_pickaxe.name=Antimonspitzhacke -item.basemetals.bismuth_pickaxe.name=Bismuthspitzhacke -item.basemetals.brass_pickaxe.name=Messingspitzhacke -item.basemetals.bronze_pickaxe.name=Bronzespitzhacke -item.basemetals.coldiron_pickaxe.name=Kalteisenspitzhacke -item.basemetals.copper_pickaxe.name=Kupferspitzhacke -item.basemetals.cupronickel_pickaxe.name=Kupfernickelspitzhacke -item.basemetals.electrum_pickaxe.name=Elektronspitzhacke -item.basemetals.emerald_pickaxe.name=Smaragdspitzhacke -item.basemetals.invar_pickaxe.name=Invarspitzhacke -item.basemetals.lead_pickaxe.name=Bleispitzhacke -item.basemetals.mithril_pickaxe.name=Mithrilspitzhacke -item.basemetals.nickel_pickaxe.name=Nickelspitzhacke -item.basemetals.obsidian_pickaxe.name=Obsidianspitzhacke -item.basemetals.pewter_pickaxe.name=Hartzinnspitzhacke -item.basemetals.platinum_pickaxe.name=Platinspitzhacke -item.basemetals.quartz_pickaxe.name=Quartzspitzhacke -item.basemetals.silver_pickaxe.name=Silberspitzhacke -item.basemetals.starsteel_pickaxe.name=Sternenstahlspitzhacke -item.basemetals.steel_pickaxe.name=Stahlspitzhacke -item.basemetals.tin_pickaxe.name=Zinnspitzhacke -item.basemetals.zinc_pickaxe.name=Zinkspitzhacke - -#schaufels -item.basemetals.adamantine_shovel.name=Adamantschaufel -item.basemetals.aquarium_shovel.name=Aquariumschaufel -item.basemetals.antimony_shovel.name=Antimonschaufel -item.basemetals.bismuth_shovel.name=Bismuthschaufel -item.basemetals.brass_shovel.name=Messingschaufel -item.basemetals.bronze_shovel.name=Bronzeschaufel -item.basemetals.coldiron_shovel.name=Kalteisenschaufel -item.basemetals.copper_shovel.name=Kupferschaufel -item.basemetals.cupronickel_shovel.name=Kupfernickelschaufel -item.basemetals.electrum_shovel.name=Elektronschaufel -item.basemetals.emerald_shovel.name=Smaragdschaufel -item.basemetals.invar_shovel.name=Invarschaufel -item.basemetals.lead_shovel.name=Bleischaufel -item.basemetals.mithril_shovel.name=Mithrilschaufel -item.basemetals.nickel_shovel.name=Nickelschaufel -item.basemetals.obsidian_shovel.name=Obsidianschaufel -item.basemetals.pewter_shovel.name=Hartzinnschaufel -item.basemetals.platinum_shovel.name=Platinschaufel -item.basemetals.quartz_shovel.name=Quartzschaufel -item.basemetals.silver_shovel.name=Silberschaufel -item.basemetals.starsteel_shovel.name=Sternenstahlschaufel -item.basemetals.steel_shovel.name=Stahlschaufel -item.basemetals.tin_shovel.name=Zinnschaufel -item.basemetals.zinc_shovel.name=Zinkschaufel - -#hackes -item.basemetals.adamantine_hoe.name=Adamanthacke -item.basemetals.aquarium_hoe.name=Aquariumhacke -item.basemetals.antimony_hoe.name=Antimonhacke -item.basemetals.bismuth_hoe.name=Bismuthhacke -item.basemetals.brass_hoe.name=Messinghacke -item.basemetals.bronze_hoe.name=Bronzehacke -item.basemetals.coldiron_hoe.name=Kalteisenhacke -item.basemetals.copper_hoe.name=Kupferhacke -item.basemetals.cupronickel_hoe.name=Kupfernickelhacke -item.basemetals.electrum_hoe.name=Elektronhacke -item.basemetals.emerald_hoe.name=Smaragdhacke -item.basemetals.invar_hoe.name=Invarhacke -item.basemetals.lead_hoe.name=Bleihacke -item.basemetals.mithril_hoe.name=Mithrilhacke -item.basemetals.nickel_hoe.name=Nickelhacke -item.basemetals.obsidian_hoe.name=Obsidianhacke -item.basemetals.pewter_hoe.name=Hartzinnhacke -item.basemetals.platinum_hoe.name=Platinhacke -item.basemetals.quartz_hoe.name=Quartzhacke -item.basemetals.silver_hoe.name=Silberhacke -item.basemetals.starsteel_hoe.name=Sternenstahlhacke -item.basemetals.steel_hoe.name=Stahlhacke -item.basemetals.tin_hoe.name=Zinnhacke -item.basemetals.zinc_hoe.name=Zinkhacke - -#Crackhammers -item.basemetals.adamantine_crackhammer.name=Adamantbruchhammer -item.basemetals.aquarium_crackhammer.name=Aquariumbruchhammer -item.basemetals.antimony_crackhammer.name=Antimonbruchhammer -item.basemetals.bismuth_crackhammer.name=Bismuthbruchhammer -item.basemetals.brass_crackhammer.name=Messingbruchhammer -item.basemetals.bronze_crackhammer.name=Bronzebruchhammer -item.basemetals.coldiron_crackhammer.name=Kalteisenbruchhammer -item.basemetals.copper_crackhammer.name=Kupferbruchhammer -item.basemetals.cupronickel_crackhammer.name=Kupfernickelbruchhammer -item.basemetals.diamond_crackhammer.name=Diamantbruchhammer -item.basemetals.electrum_crackhammer.name=Elektronbruchhammer -item.basemetals.emerald_crackhammer.name=Smaragdbruchhammer -item.basemetals.gold_crackhammer.name=Goldenbruchhammer -item.basemetals.invar_crackhammer.name=Invarbruchhammer -item.basemetals.iron_crackhammer.name=Eisenbruchhammer -item.basemetals.lead_crackhammer.name=Bleibruchhammer -item.basemetals.mithril_crackhammer.name=Mithrilbruchhammer -item.basemetals.obsidian_crackhammer.name=Obsidianbruchhammer -item.basemetals.platinum_crackhammer.name=Platinbruchhammer -item.basemetals.pewter_crackhammer.name=Hartzinnbruchhammer -item.basemetals.quartz_crackhammer.name=Quartzbruchhammer -item.basemetals.nickel_crackhammer.name=Nickelbruchhammer -item.basemetals.silver_crackhammer.name=Silberbruchhammer -item.basemetals.starsteel_crackhammer.name=Sternenstahlbruchhammer -item.basemetals.steel_crackhammer.name=Stahlbruchhammer -item.basemetals.stone_crackhammer.name=Stonebruchhammer -item.basemetals.tin_crackhammer.name=Zinnbruchhammer -item.basemetals.wood_crackhammer.name=Holzbruchhammer -item.basemetals.zinc_crackhammer.name=Zinkbruchhammer - -#schere -item.basemetals.adamantine_shears.name=Adamantschere -item.basemetals.aquarium_shears.name=Aquariumschere -item.basemetals.antimony_shears.name=Antimonschere -item.basemetals.bismuth_shears.name=Bismuthschere -item.basemetals.brass_shears.name=Messingschere -item.basemetals.bronze_shears.name=Bronzeschere -item.basemetals.coldiron_shears.name=Kalteisenschere -item.basemetals.copper_shears.name=Kupferschere -item.basemetals.cupronickel_shears.name=Kupfernickelschere -item.basemetals.diamond_shears.name=Diamantschere -item.basemetals.electrum_shears.name=Elektronschere -item.basemetals.emerald_shears.name=Smaragdschere -item.basemetals.gold_shears.name=Goldschere -item.basemetals.invar_shears.name=Invarschere -item.basemetals.lead_shears.name=Bleischere -item.basemetals.mithril_shears.name=Mithrilschere -item.basemetals.nickel_shears.name=Nickelschere -item.basemetals.obsidian_shears.name=Obsidianschere -item.basemetals.pewter_shears.name=Hartzinnschere -item.basemetals.platinum_shears.name=Platinschere -item.basemetals.quartz_shears.name=Quartzschere -item.basemetals.silver_shears.name=Silberschere -item.basemetals.starsteel_shears.name=Sternenstahlschere -item.basemetals.steel_shears.name=Stahlschere -item.basemetals.tin_shears.name=Zinnschere -item.basemetals.zinc_shears.name=Zinkschere - -#bogen -item.basemetals.adamantine_bow.name=Adamantbogen -item.basemetals.aquarium_bow.name=Aquariumbogen -item.basemetals.antimony_bow.name=Antimonbogen -item.basemetals.bismuth_bow.name=Bismuthbogen -item.basemetals.brass_bow.name=Messingbogen -item.basemetals.bronze_bow.name=Bronzebogen -item.basemetals.coldiron_bow.name=Kalteisenbogen -item.basemetals.copper_bow.name=Kupferbogen -item.basemetals.cupronickel_bow.name=Kupfernickelbogen -item.basemetals.diamond_bow.name=Diamantbogen -item.basemetals.electrum_bow.name=Elektronbogen -item.basemetals.emerald_bow.name=Smaragdbogen -item.basemetals.gold_bow.name=Goldbogen -item.basemetals.invar_bow.name=Invarbogen -item.basemetals.iron_bow.name=Eisenbogen -item.basemetals.lead_bow.name=Bleibogen -item.basemetals.mithril_bow.name=Mithrilbogen -item.basemetals.nickel_bow.name=Nickelbogen -item.basemetals.obsidian_bow.name=Obsidianbogen -item.basemetals.pewter_bow.name=Hartzinnbogen -item.basemetals.platinum_bow.name=Platinbogen -item.basemetals.quartz_bow.name=Quartzbogen -item.basemetals.silver_bow.name=Silberbogen -item.basemetals.starsteel_bow.name=Sternenstahlbogen -item.basemetals.steel_bow.name=Stahlbogen -item.basemetals.tin_bow.name=Zinnbogen -item.basemetals.zinc_bow.name=Zinkbogen - -#armbrust -item.basemetals.adamantine_crossbow.name=Adamantarmbrust -item.basemetals.aquarium_crossbow.name=Aquariumarmbrust -item.basemetals.antimony_crossbow.name=Antimonarmbrust -item.basemetals.bismuth_crossbow.name=Bismutharmbrust -item.basemetals.brass_crossbow.name=Messingarmbrust -item.basemetals.bronze_crossbow.name=Bronzearmbrust -item.basemetals.coldiron_crossbow.name=Kalteisenarmbrust -item.basemetals.copper_crossbow.name=Kupferarmbrust -item.basemetals.cupronickel_crossbow.name=Kupfernickelarmbrust -item.basemetals.diamond_crossbow.name=Diamantarmbrust -item.basemetals.electrum_crossbow.name=Elektronarmbrust -item.basemetals.emerald_crossbow.name=Smaragdarmbrust -item.basemetals.gold_crossbow.name=Goldarmbrust -item.basemetals.invar_crossbow.name=Invararmbrust -item.basemetals.iron_crossbow.name=Eisenarmbrust -item.basemetals.lead_crossbow.name=Bleiarmbrust -item.basemetals.mithril_crossbow.name=Mithrilarmbrust -item.basemetals.nickel_crossbow.name=Nickelarmbrust -item.basemetals.obsidian_crossbow.name=Obsidianarmbrust -item.basemetals.pewter_crossbow.name=Hartzinnarmbrust -item.basemetals.platinum_crossbow.name=Platinarmbrust -item.basemetals.quartz_crossbow.name=Quartzarmbrust -item.basemetals.silver_crossbow.name=Silberarmbrust -item.basemetals.starsteel_crossbow.name=Sternenstahlarmbrust -item.basemetals.steel_crossbow.name=Stahlarmbrust -item.basemetals.tin_crossbow.name=Zinnarmbrust -item.basemetals.zinc_crossbow.name=Zinkarmbrust - -#angels -item.basemetals.adamantine_fishing_rod.name=Adamantangel -item.basemetals.aquarium_fishing_rod.name=Aquariumangel -item.basemetals.antimony_fishing_rod.name=Antimonangel -item.basemetals.bismuth_fishing_rod.name=Bismuthangel -item.basemetals.brass_fishing_rod.name=Messingangel -item.basemetals.bronze_fishing_rod.name=Bronzeangel -item.basemetals.coldiron_fishing_rod.name=Kalteisenangel -item.basemetals.copper_fishing_rod.name=Kupferangel -item.basemetals.cupronickel_fishing_rod.name=Kupfernickelangel -item.basemetals.diamond_fishing_rod.name=Diamantangel -item.basemetals.electrum_fishing_rod.name=Elektronangel -item.basemetals.emerald_fishing_rod.name=Smaragdangel -item.basemetals.gold_fishing_rod.name=Goldangel -item.basemetals.invar_fishing_rod.name=Invarangel -item.basemetals.iron_fishing_rod.name=Eisenangel -item.basemetals.lead_fishing_rod.name=Bleiangel -item.basemetals.mithril_fishing_rod.name=Mithrilangel -item.basemetals.nickel_fishing_rod.name=Nickelangel -item.basemetals.obsidian_fishing_rod.name=Obsidianangel -item.basemetals.pewter_fishing_rod.name=Hartzinnangel -item.basemetals.platinum_fishing_rod.name=Platinangel -item.basemetals.quartz_fishing_rod.name=Quartzangel -item.basemetals.silver_fishing_rod.name=Silberangel -item.basemetals.starsteel_fishing_rod.name=Sternenstahlangel -item.basemetals.steel_fishing_rod.name=Stahlangel -item.basemetals.tin_fishing_rod.name=Zinnangel -item.basemetals.zinc_fishing_rod.name=Zinkangel - -#schilds -item.basemetals.adamantine_shield.name=Adamantschild -item.basemetals.aquarium_shield.name=Aquariumschild -item.basemetals.antimony_shield.name=Antimonschild -item.basemetals.bismuth_shield.name=Bismuthschild -item.basemetals.brass_shield.name=Messingschild -item.basemetals.bronze_shield.name=Bronzeschild -item.basemetals.coldiron_shield.name=Kalteisenschild -item.basemetals.copper_shield.name=Kupferschild -item.basemetals.cupronickel_shield.name=Kupfernickelschild -item.basemetals.diamond_shield.name=Diamantschild -item.basemetals.electrum_shield.name=Elektronschild -item.basemetals.emerald_shield.name=Smaragdschild -item.basemetals.gold_shield.name=Goldschild -item.basemetals.invar_shield.name=Invarschild -item.basemetals.iron_shield.name=Eisenschild -item.basemetals.lead_shield.name=Bleischild -item.basemetals.mithril_shield.name=Mithrilschild -item.basemetals.obsidian_shield.name=Obsidianschild -item.basemetals.nickel_shield.name=Nickelschild -item.basemetals.pewter_shield.name=Hartzinnschild -item.basemetals.platinum_shield.name=Platinschild -item.basemetals.quartz_shield.name=Quartzschild -item.basemetals.silver_shield.name=Silberschild -item.basemetals.starsteel_shield.name=Sternenstahlschild -item.basemetals.steel_shield.name=Stahlschild -item.basemetals.tin_shield.name=Zinnschild -item.basemetals.zinc_shield.name=Zinkschild - -#pfeil -item.basemetals.adamantine_arrow.name=Adamantpfeil -item.basemetals.aquarium_arrow.name=Aquariumpfeil -item.basemetals.antimony_arrow.name=Antimonpfeil -item.basemetals.bismuth_arrow.name=Bismuthpfeil -item.basemetals.brass_arrow.name=Messingpfeil -item.basemetals.bronze_arrow.name=Bronzepfeil -item.basemetals.coldiron_arrow.name=Kalteisenpfeil -item.basemetals.copper_arrow.name=Kupferpfeil -item.basemetals.cupronickel_arrow.name=Kupfernickelpfeil -item.basemetals.diamond_arrow.name=Diamantpfeil -item.basemetals.electrum_arrow.name=Elektronpfeil -item.basemetals.emerald_arrow.name=Smaragdpfeil -item.basemetals.gold_arrow.name=Goldpfeil -item.basemetals.invar_arrow.name=Invarpfeil -item.basemetals.iron_arrow.name=Eisenpfeil -item.basemetals.lead_arrow.name=Bleipfeil -item.basemetals.mithril_arrow.name=Mithrilpfeil -item.basemetals.nickel_arrow.name=Nickelpfeil -item.basemetals.obsidian_arrow.name=Obsidianpfeil -item.basemetals.pewter_arrow.name=Hartzinnpfeil -item.basemetals.platinum_arrow.name=Platinpfeil -item.basemetals.quartz_arrow.name=Quartzpfeil -item.basemetals.silver_arrow.name=Silberpfeil -item.basemetals.starsteel_arrow.name=Sternenstahlpfeil -item.basemetals.steel_arrow.name=Stahlpfeil -item.basemetals.tin_arrow.name=Zinnpfeil -item.basemetals.zinc_arrow.name=Zinkpfeil - -#bolzen -item.basemetals.adamantine_bolt.name=Adamantbolzen -item.basemetals.aquarium_bolt.name=Aquariumbolzen -item.basemetals.antimony_bolt.name=Antimonbolzen -item.basemetals.bismuth_bolt.name=Bismuthbolzen -item.basemetals.brass_bolt.name=Messingbolzen -item.basemetals.bronze_bolt.name=Bronzebolzen -item.basemetals.coldiron_bolt.name=Kalteisenbolzen -item.basemetals.copper_bolt.name=Kupferbolzen -item.basemetals.cupronickel_bolt.name=Kupfernickelbolzen -item.basemetals.diamond_bolt.name=Diamantbolzen -item.basemetals.electrum_bolt.name=Elektronbolzen -item.basemetals.emerald_bolt.name=Smaragdbolzen -item.basemetals.gold_bolt.name=Goldbolzen -item.basemetals.invar_bolt.name=Invarbolzen -item.basemetals.iron_bolt.name=Eisenbolzen -item.basemetals.lead_bolt.name=Bleibolzen -item.basemetals.mithril_bolt.name=Mithrilbolzen -item.basemetals.nickel_bolt.name=Nickelbolzen -item.basemetals.obsidian_bolt.name=Obsidianbolzen -item.basemetals.pewter_bolt.name=Hartzinnbolzen -item.basemetals.platinum_bolt.name=Platinbolzen -item.basemetals.quartz_bolt.name=Quartzbolzen -item.basemetals.silver_bolt.name=Silberbolzen -item.basemetals.starsteel_bolt.name=Sternenstahlbolzen -item.basemetals.steel_bolt.name=Stahlbolzen -item.basemetals.tin_bolt.name=Zinnbolzen -item.basemetals.zinc_bolt.name=Zinkbolzen - -#Armor Sets - #Adamant -item.basemetals.adamantine_boots.name=Adamantstiefel -item.basemetals.adamantine_chestplate.name=Adamantbrustpanzer -item.basemetals.adamantine_helmet.name=Adamanthelm -item.basemetals.adamantine_leggings.name=Adamantbeinpanzer - #Aquarium -item.basemetals.aquarium_boots.name=Aquariumstiefel -item.basemetals.aquarium_chestplate.name=Aquariumbrustpanzer -item.basemetals.aquarium_helmet.name=Aquariumhelm -item.basemetals.aquarium_leggings.name=Aquariumbeinpanzer - #Antimon -item.basemetals.antimony_boots.name=Antimonstiefel -item.basemetals.antimony_chestplate.name=Antimonbrustpanzer -item.basemetals.antimony_helmet.name=Antimonhelm -item.basemetals.antimony_leggings.name=Antimonbeinpanzer - #Bismuth -item.basemetals.bismuth_boots.name=Bismuthstiefel -item.basemetals.bismuth_chestplate.name=Bismuthbrustpanzer -item.basemetals.bismuth_helmet.name=Bismuthhelm -item.basemetals.bismuth_leggings.name=Bismuthbeinpanzer - #Messing -item.basemetals.brass_boots.name=Messingstiefel -item.basemetals.brass_chestplate.name=Messingbrustpanzer -item.basemetals.brass_helmet.name=Messinghelm -item.basemetals.brass_leggings.name=Messingbeinpanzer - #Bronze -item.basemetals.bronze_boots.name=Bronzestiefel -item.basemetals.bronze_chestplate.name=Bronzebrustpanzer -item.basemetals.bronze_helmet.name=Bronzehelm -item.basemetals.bronze_leggings.name=Bronzebeinpanzer - #Kalteisen -item.basemetals.coldiron_boots.name=Kalteisenstiefel -item.basemetals.coldiron_chestplate.name=Kalteisenbrustpanzer -item.basemetals.coldiron_helmet.name=Kalteisenhelm -item.basemetals.coldiron_leggings.name=Kalteisenbeinpanzer - #Kupfer -item.basemetals.copper_boots.name=Kupferstiefel -item.basemetals.copper_chestplate.name=Kupferbrustpanzer -item.basemetals.copper_helmet.name=Kupferhelm -item.basemetals.copper_leggings.name=Kupferbeinpanzer - #Kupfernickel -item.basemetals.cupronickel_boots.name=Kupfernickelstiefel -item.basemetals.cupronickel_chestplate.name=Kupfernickelbrustpanzer -item.basemetals.cupronickel_helmet.name=Kupfernickelhelm -item.basemetals.cupronickel_leggings.name=Kupfernickelbeinpanzer - #Elektron -item.basemetals.electrum_boots.name=Elektronstiefel -item.basemetals.electrum_chestplate.name=Elektronbrustpanzer -item.basemetals.electrum_helmet.name=Elektronhelm -item.basemetals.electrum_leggings.name=Elektronbeinpanzer - #Smaragd -item.basemetals.emerald_boots.name=Smaragdstiefel -item.basemetals.emerald_chestplate.name=Smaragdbrustpanzer -item.basemetals.emerald_helmet.name=Smaragdhelm -item.basemetals.emerald_leggings.name=Smaragdbeinpanzer - #Invar -item.basemetals.invar_boots.name=Invarstiefel -item.basemetals.invar_chestplate.name=Invarbrustpanzer -item.basemetals.invar_helmet.name=Invarhelm -item.basemetals.invar_leggings.name=Invarbeinpanzer - #Blei -item.basemetals.lead_boots.name=Bleistiefel -item.basemetals.lead_chestplate.name=Bleibrustpanzer -item.basemetals.lead_helmet.name=Bleihelm -item.basemetals.lead_leggings.name=Bleibeinpanzer - #Mithril -item.basemetals.mithril_boots.name=Mithrilstiefel -item.basemetals.mithril_chestplate.name=Mithrilbrustpanzer -item.basemetals.mithril_helmet.name=Mithrilhelm -item.basemetals.mithril_leggings.name=Mithrilbeinpanzer - #Nickel -item.basemetals.nickel_boots.name=Nickelstiefel -item.basemetals.nickel_chestplate.name=Nickelbrustpanzer -item.basemetals.nickel_helmet.name=Nickelhelm -item.basemetals.nickel_leggings.name=Nickelbeinpanzer - #Obsidian -item.basemetals.obsidian_boots.name=Obsidianstiefel -item.basemetals.obsidian_chestplate.name=Obsidianbrustpanzer -item.basemetals.obsidian_helmet.name=Obsidianhelm -item.basemetals.obsidian_leggings.name=Obsidianbeinpanzer - #Hartzinn -item.basemetals.pewter_boots.name=Hartzinnstiefel -item.basemetals.pewter_chestplate.name=Hartzinnbrustpanzer -item.basemetals.pewter_helmet.name=Hartzinnhelm -item.basemetals.pewter_leggings.name=Hartzinnbeinpanzer - #Platin -item.basemetals.platinum_boots.name=Platinstiefel -item.basemetals.platinum_chestplate.name=Platinbrustpanzer -item.basemetals.platinum_helmet.name=Platinhelm -item.basemetals.platinum_leggings.name=Platinbeinpanzer - #Quartz -item.basemetals.quartz_boots.name=Quartzstiefel -item.basemetals.quartz_chestplate.name=Quartzbrustpanzer -item.basemetals.quartz_helmet.name=Quartzhelm -item.basemetals.quartz_leggings.name=Quartzbeinpanzer - #Silber -item.basemetals.silver_boots.name=Silberstiefel -item.basemetals.silver_chestplate.name=Silberbrustpanzer -item.basemetals.silver_helmet.name=Silberhelm -item.basemetals.silver_leggings.name=Silberbeinpanzer - #Sternenstahl -item.basemetals.starsteel_boots.name=Sternenstahlstiefel -item.basemetals.starsteel_chestplate.name=Sternenstahlbrustpanzer -item.basemetals.starsteel_helmet.name=Sternenstahlhelm -item.basemetals.starsteel_leggings.name=Sternenstahlbeinpanzer - #Stahl -item.basemetals.steel_boots.name=Stahlstiefel -item.basemetals.steel_chestplate.name=Stahlbrustpanzer -item.basemetals.steel_helmet.name=Stahlhelm -item.basemetals.steel_leggings.name=Stahlbeinpanzer - #Zinn -item.basemetals.tin_boots.name=Zinnstiefel -item.basemetals.tin_chestplate.name=Zinnbrustpanzer -item.basemetals.tin_helmet.name=Zinnhelm -item.basemetals.tin_leggings.name=Zinnbeinpanzer - #Zink -item.basemetals.zinc_boots.name=Zinkstiefel -item.basemetals.zinc_chestplate.name=Zinkbrustpanzer -item.basemetals.zinc_helmet.name=Zinkhelm -item.basemetals.zinc_leggings.name=Zinkbeinpanzer - -#pferderüstung -item.basemetals.adamantine_horsearmor.name=Adamantpferderüstung -item.basemetals.aquarium_horsearmor.name=Aquariumpferderüstung -item.basemetals.antimony_horsearmor.name=Antimonpferderüstung -item.basemetals.bismuth_horsearmor.name=Bismuthpferderüstung -item.basemetals.brass_horsearmor.name=Messingpferderüstung -item.basemetals.bronze_horsearmor.name=Bronzepferderüstung -item.basemetals.coldiron_horsearmor.name=Kalteisenpferderüstung -item.basemetals.copper_horsearmor.name=Kupferpferderüstung -item.basemetals.cupronickel_horsearmor.name=Kupfernickelpferderüstung -item.basemetals.electrum_horsearmor.name=Elektronpferderüstung -item.basemetals.emerald_horsearmor.name=Smaragdpferderüstung -item.basemetals.invar_horsearmor.name=Invarpferderüstung -item.basemetals.lead_horsearmor.name=Bleipferderüstung -item.basemetals.mercury_horsearmor.name=Quecksilberpferderüstung -item.basemetals.mithril_horsearmor.name=Mithrilpferderüstung -item.basemetals.nickel_horsearmor.name=Nickelpferderüstung -item.basemetals.obsidian_horsearmor.name=Obsidianpferderüstung -item.basemetals.pewter_horsearmor.name=Hartzinnpferderüstung -item.basemetals.platinum_horsearmor.name=Platinpferderüstung -item.basemetals.quartz_horsearmor.name=Quartzpferderüstung -item.basemetals.silver_horsearmor.name=Silberpferderüstung -item.basemetals.starsteel_horsearmor.name=Sternenstahlpferderüstung -item.basemetals.steel_horsearmor.name=Stahlpferderüstung -item.basemetals.tin_horsearmor.name=Zinnpferderüstung -item.basemetals.zinc_horsearmor.name=Zinkpferderüstung - -#barren -item.basemetals.adamantine_ingot.name=Adamantbarren -item.basemetals.aquarium_ingot.name=Aquariumbarren -item.basemetals.antimony_ingot.name=Antimonbarren -item.basemetals.bismuth_ingot.name=Bismuthbarren -item.basemetals.brass_ingot.name=Messingbarren -item.basemetals.bronze_ingot.name=Bronzebarren -item.basemetals.coldiron_ingot.name=Kalteisenbarren -item.basemetals.copper_ingot.name=Kupferbarren -item.basemetals.cupronickel_ingot.name=Kupfernickelbarren -item.basemetals.electrum_ingot.name=Elektronbarren -item.basemetals.invar_ingot.name=Invarbarren -item.basemetals.lead_ingot.name=Bleibarren -item.basemetals.mercury_ingot.name=Flüssiges Quecksilber -item.basemetals.mithril_ingot.name=Mithrilbarren -item.basemetals.nickel_ingot.name=Nickelbarren -item.basemetals.obsidian_ingot.name=Obsidianbarren -item.basemetals.pewter_ingot.name=Hartzinnbarren -item.basemetals.platinum_ingot.name=Platinbarren -item.basemetals.redstone_ingot.name=Redstonebarren -item.basemetals.silver_ingot.name=Silberbarren -item.basemetals.starsteel_ingot.name=Sternenstahlbarren -item.basemetals.steel_ingot.name=Stahlbarren -item.basemetals.tin_ingot.name=Zinnbarren -item.basemetals.zinc_ingot.name=Zinkbarren - -#gitter - #Item -item.basemetals.adamantine_bars.name=Adamantgitter -item.basemetals.aquarium_bars.name=Aquariumgitter -item.basemetals.antimony_bars.name=Antimongitter -item.basemetals.bismuth_bars.name=Bismuthgitter -item.basemetals.brass_bars.name=Messinggitter -item.basemetals.bronze_bars.name=Bronzegitter -item.basemetals.coldiron_bars.name=Kalteisengitter -item.basemetals.copper_bars.name=Kupfergitter -item.basemetals.cupronickel_bars.name=Kupfernickelgitter -item.basemetals.diamond_bars.name=Diamantgitter -item.basemetals.electrum_bars.name=Elektrongitter -item.basemetals.emerald_bars.name=Smaragdgitter -item.basemetals.gold_bars.name=Goldgitter -item.basemetals.invar_bars.name=Invargitter -item.basemetals.lead_bars.name=Bleigitter -item.basemetals.mithril_bars.name=Mithrilgitter -item.basemetals.nickel_bars.name=Nickelgitter -item.basemetals.obsidian_bars.name=Obsidiangitter -item.basemetals.pewter_bars.name=Hartzinngitter -item.basemetals.platinum_bars.name=Platingitter -item.basemetals.quartz_bars.name=Quartzgitter -item.basemetals.silver_bars.name=Silbergitter -item.basemetals.starsteel_bars.name=Sternenstahlgitter -item.basemetals.steel_bars.name=Stahlgitter -item.basemetals.tin_bars.name=Zinngitter -item.basemetals.zinc_bars.name=Zinkgitter - #Tile -tile.basemetals.adamantine_bars.name=Adamantgitter -tile.basemetals.aquarium_bars.name=Aquariumgitter -tile.basemetals.antimony_bars.name=Antimongitter -tile.basemetals.bismuth_bars.name=Bismuthgitter -tile.basemetals.brass_bars.name=Messinggitter -tile.basemetals.bronze_bars.name=Bronzegitter -tile.basemetals.coldiron_bars.name=Kalteisengitter -tile.basemetals.copper_bars.name=Kupfergitter -tile.basemetals.cupronickel_bars.name=Kupfernickelgitter -tile.basemetals.diamond_bars.name=Diamantgitter -tile.basemetals.electrum_bars.name=Elektrongitter -tile.basemetals.emerald_bars.name=Smaragdgitter -tile.basemetals.gold_bars.name=Goldgitter -tile.basemetals.invar_bars.name=Invargitter -tile.basemetals.lead_bars.name=Bleigitter -tile.basemetals.mithril_bars.name=Mithrilgitter -tile.basemetals.nickel_bars.name=Nickelgitter -tile.basemetals.obsidian_bars.name=Obsidiangitter -tile.basemetals.pewter_bars.name=Hartzinngitter -tile.basemetals.platinum_bars.name=Platingitter -tile.basemetals.quartz_bars.name=Quartzgitter -tile.basemetals.silver_bars.name=Silbergitter -tile.basemetals.starsteel_bars.name=Sternenstahlgitter -tile.basemetals.steel_bars.name=Stahlgitter -tile.basemetals.tin_bars.name=Zinngitter -tile.basemetals.zinc_bars.name=Zinkgitter - -#nugget -item.basemetals.adamantine_nugget.name=Adamantnugget -item.basemetals.aquarium_nugget.name=Aquariumnugget -item.basemetals.antimony_nugget.name=Antimonnugget -item.basemetals.bismuth_nugget.name=Bismuthnugget -item.basemetals.brass_nugget.name=Messingnugget -item.basemetals.bronze_nugget.name=Bronzenugget -item.basemetals.charcoal_nugget.name=Charcoalnugget -item.basemetals.coal_nugget.name=Coalnugget -item.basemetals.coldiron_nugget.name=Kalteisennugget -item.basemetals.copper_nugget.name=Kupfernugget -item.basemetals.cupronickel_nugget.name=Kupfernickelnugget -item.basemetals.diamond_nugget.name=Diamant Fragment -item.basemetals.electrum_nugget.name=Elektronnugget -item.basemetals.emerald_nugget.name=Smaragd Fragment -item.basemetals.invar_nugget.name=Invarnugget -item.basemetals.iron_nugget.name=Eisennugget -item.basemetals.lead_nugget.name=Bleinugget -item.basemetals.mercury_nugget.name=Kleiner Tropfen flüssiges Quecksilber -item.basemetals.mithril_nugget.name=Mithrilnugget -item.basemetals.nickel_nugget.name=Nickelnugget -item.basemetals.obsidian_nugget.name=Obsidian Fragment -item.basemetals.pewter_nugget.name=Hartzinnnugget -item.basemetals.platinum_nugget.name=Platinnugget -item.basemetals.quartz_nugget.name=Quartz Fragment -item.basemetals.silver_nugget.name=Silbernugget -item.basemetals.starsteel_nugget.name=Sternenstahlnugget -item.basemetals.steel_nugget.name=Stahlnugget -item.basemetals.tin_nugget.name=Zinnnugget -item.basemetals.zinc_nugget.name=Zinknugget - -#Powdered -item.basemetals.adamantine_powder.name=Adamantpulver -item.basemetals.aquarium_powder.name=Aquariumpulver -item.basemetals.antimony_powder.name=Antimonpulver -item.basemetals.bismuth_powder.name=Bismuthpulver -item.basemetals.brass_powder.name=Messingpulver -item.basemetals.bronze_powder.name=Bronzepulver -item.basemetals.carbon_powder.name=Kohlenstoffpulver -item.basemetals.coal_powder.name=Kohlepulver -item.basemetals.charcoal_powder.name=Holzkohlepulver -item.basemetals.coldiron_powder.name=Kalteisenpulver -item.basemetals.copper_powder.name=Kupferpulver -item.basemetals.cupronickel_powder.name=Kupfernickelpulver -item.basemetals.diamond_powder.name=Diamantpulver -item.basemetals.electrum_powder.name=Elektronpulver -item.basemetals.emerald_powder.name=Smaragdpulver -item.basemetals.gold_powder.name=Goldpulver -item.basemetals.invar_powder.name=Invarpulver -item.basemetals.iron_powder.name=Eisenpulver -item.basemetals.lead_powder.name=Bleipulver -item.basemetals.mercury_powder.name=Quecksilberpulver -item.basemetals.mithril_powder.name=Mithrilpulver -item.basemetals.nickel_powder.name=Nickelpulver -item.basemetals.obsidian_powder.name=Obsidianpulver -item.basemetals.pewter_powder.name=Hartzinnpulver -item.basemetals.platinum_powder.name=Platinpulver -item.basemetals.quartz_powder.name=Quartzpulver -item.basemetals.silver_powder.name=Silberpulver -item.basemetals.starsteel_powder.name=Sternenstahlpulver -item.basemetals.steel_powder.name=Stahlpulver -item.basemetals.tin_powder.name=Zinnpulver -item.basemetals.wood_powder.name=Sägemehl -item.basemetals.zinc_powder.name=Zinkpulver - -#Small Powders -item.basemetals.adamantine_smallpowder.name=Kleiner Adamantpulverhaufen -item.basemetals.aquarium_smallpowder.name=Kleiner Aquariumpulverhaufen -item.basemetals.antimony_smallpowder.name=Kleiner Antimonpulverhaufen -item.basemetals.bismuth_smallpowder.name=Kleiner Bismuthpulverhaufen -item.basemetals.brass_smallpowder.name=Kleiner Messingpulverhaufen -item.basemetals.bronze_smallpowder.name=Kleiner Bronzepulverhaufen -item.basemetals.carbon_smallpowder.name=Kleiner Kohlenstoffpulverhaufen -item.basemetals.coal_smallpowder.name=Kleiner Kohlepulverhaufen -item.basemetals.charcoal_smallpowder.name=Kleiner Holzkohlepulverhaufen -item.basemetals.coldiron_smallpowder.name=Kleiner Kalteisenpulverhaufen -item.basemetals.copper_smallpowder.name=Kleiner Kupferpulverhaufen -item.basemetals.cupronickel_smallpowder.name=Kleiner Kupfernickelpulverhaufen -item.basemetals.diamond_smallpowder.name=Kleiner Diamantpulverhaufen -item.basemetals.electrum_smallpowder.name=Kleiner Elektronpulverhaufen -item.basemetals.emerald_smallpowder.name=Kleiner Smaragdpulverhaufen -item.basemetals.gold_smallpowder.name=Kleiner Goldpulverhaufen -item.basemetals.invar_smallpowder.name=Kleiner Invarpulverhaufen -item.basemetals.iron_smallpowder.name=Kleiner Eisenpulverhaufen -item.basemetals.lapis_smallpowder.name=Kleiner Lapispulverhaufen -item.basemetals.lead_smallpowder.name=Kleiner Bleipulverhaufen -item.basemetals.mercury_smallpowder.name=Kleiner Quecksilberpulverhaufen -item.basemetals.mithril_smallpowder.name=Kleiner Mithrilpulverhaufen -item.basemetals.nickel_smallpowder.name=Kleiner Nickelpulverhaufen -item.basemetals.obsidian_smallpowder.name=Kleiner Obsidianpulverhaufen -item.basemetals.pewter_smallpowder.name=Kleiner Hartzinnpulverhaufen -item.basemetals.platinum_smallpowder.name=Kleiner Platinpulverhaufen -item.basemetals.quartz_smallpowder.name=Kleiner Quartzpulverhaufen -item.basemetals.redstone_smallpowder.name=Kleiner Redstonepulverhaufen -item.basemetals.silver_smallpowder.name=Kleiner Silberpulverhaufen -item.basemetals.starsteel_smallpowder.name=Kleiner Sternenstahlpulverhaufen -item.basemetals.steel_smallpowder.name=Kleiner Stahlpulverhaufen -item.basemetals.tin_smallpowder.name=Kleiner Zinnpulverhaufen -item.basemetals.wood_powder.name=Kleiner Sägemehlhaufen -item.basemetals.zinc_smallpowder.name=Kleiner Zinkpulverhaufen - -#Zerkleinertes -item.basemetals.adamantine_crushed.name=Zerkleinertes Adamant -item.basemetals.aquarium_crushed.name=Zerkleinertes Aquarium -item.basemetals.antimony_crushed.name=Zerkleinertes Antimon -item.basemetals.bismuth_crushed.name=Zerkleinertes Bismuth -item.basemetals.brass_crushed.name=Zerkleinertes Messing -item.basemetals.bronze_crushed.name=Zerkleinerte Bronze -item.basemetals.coldiron_crushed.name=Zerkleinertes Kalteisen -item.basemetals.copper_crushed.name=Zerkleinertes Kupfer -item.basemetals.cupronickel_crushed.name=Zerkleinertes Kupfernickel -item.basemetals.electrum_crushed.name=Zerkleinertes Elektron -item.basemetals.gold_crushed.name=Zerkleinertes Gold -item.basemetals.invar_crushed.name=Zerkleinertes Invar -item.basemetals.iron_crushed.name=Zerkleinertes Eisen -item.basemetals.lead_crushed.name=Zerkleinertes Blei -item.basemetals.mithril_crushed.name=Zerkleinertes Mithril -item.basemetals.nickel_crushed.name=Zerkleinertes Nickel -item.basemetals.pewter_crushed.name=Zerkleinertes Hartzinn -item.basemetals.platinum_crushed.name=Zerkleinertes Platin -item.basemetals.silver_crushed.name=Zerkleinertes Silber -item.basemetals.starsteel_crushed.name=Zerkleinerter Sternenstahl -item.basemetals.steel_crushed.name=Zerkleinerter Stahl -item.basemetals.tin_crushed.name=Zerkleinertes Zinn -item.basemetals.zinc_crushed.name=Zerkleinertes Zink - -#Zerkleinertes Purified -item.basemetals.adamantine_crushed_purified.name=Gereinigtes, zerkleinertes Adamant -item.basemetals.aquarium_crushed_purified.name=Gereinigtes, zerkleinertes Aquarium -item.basemetals.antimony_crushed_purified.name=Gereinigtes, zerkleinertes Antimon -item.basemetals.bismuth_crushed_purified.name=Gereinigtes, zerkleinertes Bismuth -item.basemetals.brass_crushed_purified.name=Gereinigtes, zerkleinertes Messing -item.basemetals.bronze_crushed_purified.name=Gereinigte, zerkleinerte Bronze -item.basemetals.coldiron_crushed_purified.name=Gereinigtes, zerkleinertes Kalteisen -item.basemetals.copper_crushed_purified.name=Gereinigtes, zerkleinertes Kupfer -item.basemetals.cupronickel_crushed_purified.name=Gereinigtes, zerkleinertes Kupfernickel -item.basemetals.electrum_crushed_purified.name=Gereinigtes, zerkleinertes Elektron -item.basemetals.gold_crushed_purified.name=Gereinigtes, zerkleinertes Gold -item.basemetals.invar_crushed_purified.name=Gereinigtes, zerkleinertes Invar -item.basemetals.iron_crushed_purified.name=Gereinigtes, zerkleinertes Eisen -item.basemetals.lead_crushed_purified.name=Gereinigtes, zerkleinertes Blei -item.basemetals.mithril_crushed_purified.name=Gereinigtes, zerkleinertes Mithril -item.basemetals.nickel_crushed_purified.name=Gereinigtes, zerkleinertes Nickel -item.basemetals.pewter_crushed_purified.name=Gereinigtes, zerkleinertes Hartzinn -item.basemetals.platinum_crushed_purified.name=Gereinigtes, zerkleinertes Platin -item.basemetals.silver_crushed_purified.name=Gereinigtes, zerkleinertes Silber -item.basemetals.starsteel_crushed_purified.name=Gereinigter, zerkleinerter Sternenstahl -item.basemetals.steel_crushed_purified.name=Gereinigter, zerkleinerter Stahl -item.basemetals.tin_crushed_purified.name=Gereinigtes, zerkleinertes Zinn -item.basemetals.zinc_crushed_purified.name=Gereinigtes, zerkleinertes Zink - -#erzs - #Item -item.basemetals.adamantine_ore.name=Adamanterz -item.basemetals.aquarium_ore.name=Aquariumerz -item.basemetals.antimony_ore.name=Antimonerz -item.basemetals.bismuth_ore.name=Bismutherz -item.basemetals.coldiron_ore.name=Kalteisenerz -item.basemetals.copper_ore.name=Kupfererz -item.basemetals.lead_ore.name=Bleierz -item.basemetals.mercury_ore.name=Quecksilbererz -item.basemetals.nickel_ore.name=Nickelerz -item.basemetals.pewter_ore.name=Hartzinnerz -item.basemetals.platinum_ore.name=Platinerz -item.basemetals.silver_ore.name=Silbererz -item.basemetals.starsteel_ore.name=Sternenstahlerz -item.basemetals.tin_ore.name=Zinnerz -item.basemetals.zinc_ore.name=Zinkerz - #Tile -tile.basemetals.adamantine_ore.name=Adamanterz -tile.basemetals.aquarium_ore.name=Aquariumerz -tile.basemetals.antimony_ore.name=Antimonerz -tile.basemetals.bismuth_ore.name=Bismutherz -tile.basemetals.coldiron_ore.name=Kalteisenerz -tile.basemetals.copper_ore.name=Kupfererz -tile.basemetals.lead_ore.name=Bleierz -tile.basemetals.mercury_ore.name=Quecksilbererz -tile.basemetals.nickel_ore.name=Nickelerz -tile.basemetals.pewter_ore.name=Hartzinnerz -tile.basemetals.platinum_ore.name=Platinerz -tile.basemetals.silver_ore.name=Silbererz -tile.basemetals.starsteel_ore.name=Sternenstahlerz -tile.basemetals.tin_ore.name=Zinnerz -tile.basemetals.zinc_ore.name=Zinkerz - -#gemischs -item.basemetals.aquarium_blend.name=Aquariumgemisch -item.basemetals.brass_blend.name=Messinggemisch -item.basemetals.bronze_blend.name=Bronzegemisch -item.basemetals.cupronickel_blend.name=Kupfernickelgemisch -item.basemetals.electrum_blend.name=Elektrongemisch -item.basemetals.invar_blend.name=Invargemisch -item.basemetals.mithril_blend.name=Mithrilgemisch -item.basemetals.pewter_blend.name=Hartzinngemisch -item.basemetals.steel_blend.name=Stahlgemisch - -#Smallgemischs -item.basemetals.aquarium_smallblend.name=Kleiner Aquariumgemischhaufen -item.basemetals.brass_smallblend.name=Kleiner Messinggemischhaufen -item.basemetals.bronze_smallblend.name=Kleiner Bronzegemischhaufen -item.basemetals.cupronickel_smallblend.name=Kleiner Kupfernickelgemischhaufen -item.basemetals.electrum_smallblend.name=Kleiner Elektrongemischhaufen -item.basemetals.invar_smallblend.name=Kleiner Invargemischhaufen -item.basemetals.mithril_smallblend.name=Kleiner Mithrilgemischhaufen -item.basemetals.pewter_smallblend.name=Kleiner Hartzinngemischhaufen -item.basemetals.steel_smallblend.name=Kleiner Stahlgemischhaufen - -#Block Of... - #Item -item.basemetals.adamantine_block.name=Adamantblock -item.basemetals.aquarium_block.name=Aquariumblock -item.basemetals.antimony_block.name=Antimonblock -item.basemetals.bismuth_block.name=Bismuthblock -item.basemetals.brass_block.name=Messingblock -item.basemetals.bronze_block.name=Bronzeblock -item.basemetals.charcoal_block.name=Charcoalblock -item.basemetals.coldiron_block.name=Kalteisenblock -item.basemetals.copper_block.name=Kupferblock -item.basemetals.platinum_block.name=Platinblock -item.basemetals.nickel_block.name=Nickelblock -item.basemetals.electrum_block.name=Elektronblock -item.basemetals.invar_block.name=Invarblock -item.basemetals.lead_block.name=Bleiblock -item.basemetals.mithril_block.name=Mithrilblock -item.basemetals.nickel_block.name=Nickelblock -item.basemetals.pewter_block.name=Hartzinnblock -item.basemetals.cupronickel_block.name=Kupfernickelblock -item.basemetals.silver_block.name=Silberblock -item.basemetals.starsteel_block.name=Sternenstahlblock -item.basemetals.steel_block.name=Stahlblock -item.basemetals.tin_block.name=Zinnblock -item.basemetals.zinc_block.name=Zinkblock - #Tile -tile.basemetals.adamantine_block.name=Adamantblock -tile.basemetals.aquarium_block.name=Aquariumblock -tile.basemetals.antimony_block.name=Antimonblock -tile.basemetals.bismuth_block.name=Bismuthblock -tile.basemetals.brass_block.name=Messingblock -tile.basemetals.bronze_block.name=Bronzeblock -tile.basemetals.charcoal_block.name=Charcoalblock -tile.basemetals.coldiron_block.name=Kalteisenblock -tile.basemetals.copper_block.name=Kupferblock -tile.basemetals.cupronickel_block.name=Kupfernickelblock -tile.basemetals.electrum_block.name=Elektronblock -tile.basemetals.invar_block.name=Invarblock -tile.basemetals.lead_block.name=Bleiblock -tile.basemetals.mithril_block.name=Mithrilblock -tile.basemetals.nickel_block.name=Nickelblock -tile.basemetals.pewter_block.name=Hartzinnblock -tile.basemetals.platinum_block.name=Platinblock -tile.basemetals.silver_block.name=Silberblock -tile.basemetals.starsteel_block.name=Sternenstahlblock -tile.basemetals.steel_block.name=Stahlblock -tile.basemetals.tin_block.name=Zinnblock -tile.basemetals.zinc_block.name=Zinkblock - -#Fluids - #Fluid -fluid.basemetals.mercury=Flüssiges Quecksilber -fluid.basemetals.adamantine=Geschmolzenes Adamant -fluid.basemetals.antimony=Geschmolzenes Antimon -fluid.basemetals.aquarium=Geschmolzenes Aquarium -fluid.basemetals.bismuth=Geschmolzenes Bismuth -fluid.basemetals.brass=Geschmolzenes Messing -fluid.basemetals.bronze=Geschmolzenes Bronze -fluid.basemetals.coldiron=Geschmolzenes Kalteisen -fluid.basemetals.copper=Geschmolzenes Kupfer -fluid.basemetals.cupronickel=Geschmolzenes Kupfernickel -fluid.basemetals.electrum=Geschmolzenes Elektron -fluid.basemetals.ender=Geschmolzenes Ender -fluid.basemetals.invar=Geschmolzenes Invar -fluid.basemetals.lead=Geschmolzenes Blei -fluid.basemetals.mithril=Geschmolzenes Mithril -fluid.basemetals.nickel=Geschmolzenes Nickel -fluid.basemetals.pewter=Geschmolzenes Hartzinn -fluid.basemetals.platinum=Geschmolzenes Platin -fluid.basemetals.silver=Geschmolzenes Silber -fluid.basemetals.starsteel=Geschmolzenes Sternenstahl -fluid.basemetals.steel=Geschmolzenes Stahl -fluid.basemetals.tin=Geschmolzenes Zinn -fluid.basemetals.zinc=Geschmolzenes Zink - #Fluid.name -fluid.basemetals.mercury.name=Flüssiges Quecksilber -fluid.basemetals.adamantine.name=Geschmolzenes Adamant -fluid.basemetals.antimony.name=Geschmolzenes Antimon -fluid.basemetals.aquarium.name=Geschmolzenes Aquarium -fluid.basemetals.bismuth.name=Geschmolzenes Bismuth -fluid.basemetals.brass.name=Geschmolzenes Messing -fluid.basemetals.bronze.name=Geschmolzenes Bronze -fluid.basemetals.charcoal.name=Liquifacted Charcoal -fluid.basemetals.coal.name=Liquifacted Coal -fluid.basemetals.coldiron.name=Geschmolzenes Kalteisen -fluid.basemetals.copper.name=Geschmolzenes Kupfer -fluid.basemetals.cupronickel.name=Geschmolzenes Kupfernickel -fluid.basemetals.diamond.name=Geschmolzenes Diamant -fluid.basemetals.electrum.name=Geschmolzenes Elektron -fluid.basemetals.electrum.name=Geschmolzenes Smaragd -fluid.basemetals.invar.name=Geschmolzenes Invar -fluid.basemetals.lead.name=Geschmolzenes Blei -fluid.basemetals.mithril.name=Geschmolzenes Mithril -fluid.basemetals.nickel.name=Geschmolzenes Nickel -fluid.basemetals.pewter.name=Geschmolzenes Hartzinn -fluid.basemetals.platinum.name=Geschmolzenes Platin -fluid.basemetals.prismarine.name=Geschmolzenes Prismarin -fluid.basemetals.redstone.name=Geschmolzenes Redstone -fluid.basemetals.silver.name=Geschmolzenes Silber -fluid.basemetals.starsteel.name=Geschmolzenes Sternenstahl -fluid.basemetals.steel.name=Geschmolzenes Stahl -fluid.basemetals.tin.name=Geschmolzenes Zinn -fluid.basemetals.zinc.name=Geschmolzenes Zink - #Tile -tile.basemetals.mercury.name=Flüssiges Quecksilber -tile.basemetals.adamantine.name=Geschmolzenes Adamant -tile.basemetals.antimony.name=Geschmolzenes Antimon -tile.basemetals.aquarium.name=Geschmolzenes Aquarium -tile.basemetals.bismuth.name=Geschmolzenes Bismuth -tile.basemetals.brass.name=Geschmolzenes Messing -tile.basemetals.bronze.name=Geschmolzenes Bronze -tile.basemetals.charcoal.name=Liquifacted Charcoal -tile.basemetals.coal.name=Liquifacted Coal -tile.basemetals.coldiron.name=Geschmolzenes Kalteisen -tile.basemetals.copper.name=Geschmolzenes Kupfer -tile.basemetals.cupronickel.name=Geschmolzenes Kupfernickel -tile.basemetals.diamond.name=Geschmolzenes Diamant -tile.basemetals.electrum.name=Geschmolzenes Elektron -tile.basemetals.emerald.name=Geschmolzenes Smaragd -tile.basemetals.ender.name=Geschmolzenes Ender -tile.basemetals.gold.name=Geschmolzenes Gold -tile.basemetals.invar.name=Geschmolzenes Invar -tile.basemetals.iron.name=Geschmolzenes Eisen -tile.basemetals.lead.name=Geschmolzenes Blei -tile.basemetals.mithril.name=Geschmolzenes Mithril -tile.basemetals.nickel.name=Geschmolzenes Nickel -tile.basemetals.obsidian.name=Geschmolzenes Obsidian -tile.basemetals.pewter.name=Geschmolzenes Hartzinn -tile.basemetals.platinum.name=Geschmolzenes Platin -tile.basemetals.prismarine.name=Geschmolzenes Prismarin -tile.basemetals.redstone.name=Geschmolzenes Redstone -tile.basemetals.silver.name=Geschmolzenes Silber -tile.basemetals.starsteel.name=Geschmolzenes Sternenstahl -tile.basemetals.steel.name=Geschmolzenes Stahl -tile.basemetals.tin.name=Geschmolzenes Zinn -tile.basemetals.zinc.name=Geschmolzenes Zink - #Bucket -item.bucket.mercury=Eimer mit Quecksilber -item.bucket.adamantine=Eimer mit geschmolzenem Adamant -item.bucket.antimony=Eimer mit geschmolzenem Antimon -item.bucket.aquarium=Eimer mit geschmolzenem Aquarium -item.bucket.bismuth=Eimer mit geschmolzenem Bismuth -item.bucket.brass=Eimer mit geschmolzenem Messing -item.bucket.bronze=Eimer mit geschmolzenem Bronze -item.bucket.charcoal=Eimer mit verflüssigter Holzkohle -item.bucket.coal=Eimer mit verflüssigter Kohle -item.bucket.coldiron=Eimer mit geschmolzenem Kalteisen -item.bucket.copper=Eimer mit geschmolzenem Kupfer -item.bucket.cupronickel=Eimer mit geschmolzenem Kupfernickel -item.bucket.diamond=Eimer mit geschmolzenem Diamant -item.bucket.electrum=Eimer mit geschmolzenem Elektron -item.bucket.emerald=Eimer mit geschmolzenem Smaragd -item.bucket.ender=Eimer mit geschmolzenem Ender -item.bucket.invar=Eimer mit geschmolzenem Invar -item.bucket.lead=Eimer mit geschmolzenem Blei -item.bucket.mithril=Eimer mit geschmolzenem Mithril -item.bucket.nickel=Eimer mit geschmolzenem Nickel -item.bucket.pewter=Eimer mit geschmolzenem Hartzinn -item.bucket.platinum=Eimer mit geschmolzenem Platin -item.bucket.prismarine=Eimer mit geschmolzenem Prismarin -item.bucket.redstone=Eimer mit geschmolzenem Redstone -item.bucket.silver=Eimer mit geschmolzenem Silber -item.bucket.starsteel=Eimer mit geschmolzenem Sternenstahl -item.bucket.steel=Eimer mit geschmolzenem Stahl -item.bucket.tin=Eimer mit geschmolzenem Zinn -item.bucket.zinc=Eimer mit geschmolzenem Zink - Material -material.mercury.name=Quecksilber -material.adamantine.name=Adamant -material.antimony.name=Antimon -material.aquarium.name=Aquarium -material.bismuth.name=Bismuth -material.brass.name=Messing -material.bronze.name=Bronze -material.coldiron.name=Kalteisen -material.copper.name=Kupfer -material.cupronickel.name=Kupfernickel -material.electrum.name=Elektron -material.invar.name=Invar -material.lead.name=Blei -material.mithril.name=Mithril -material.nickel.name=Nickel -material.pewter.name=Hartzinn -material.platinum.name=Platin -material.silver.name=Silber -material.starsteel.name=Sternenstahl -material.steel.name=Stahl -material.tin.name=Zinn -material.zinc.name=Zink - -#türs - #Item -item.basemetals.adamantine_door.name=Adamanttür -item.basemetals.aquarium_door.name=Aquariumtür -item.basemetals.antimony_door.name=Antimontür -item.basemetals.bismuth_door.name=Bismuthtür -item.basemetals.brass_door.name=Messingtür -item.basemetals.bronze_door.name=Bronzetür -item.basemetals.coldiron_door.name=Kalteisentür -item.basemetals.copper_door.name=Kupfertür -item.basemetals.cupronickel_door.name=Kupfernickeltür -item.basemetals.diamond_door.name=Diamanttür -item.basemetals.electrum_door.name=Elektrontür -item.basemetals.emerald_door.name=Smaragdtür -item.basemetals.gold_door.name=Goldtür -item.basemetals.invar_door.name=Invartür -item.basemetals.lead_door.name=Bleitür -item.basemetals.mithril_door.name=Mithriltür -item.basemetals.nickel_door.name=Nickeltür -item.basemetals.obsidian_door.name=Obsidiantür -item.basemetals.pewter_door.name=Hartzinntür -item.basemetals.platinum_door.name=Platintür -item.basemetals.quartz_door.name=Quartztür -item.basemetals.silver_door.name=Silbertür -item.basemetals.starsteel_door.name=Sternenstahltür -item.basemetals.steel_door.name=Stahltür -item.basemetals.tin_door.name=Zinntür -item.basemetals.zinc_door.name=Zinktür - #Tile -tile.basemetals.adamantine_door.name=Adamanttür -tile.basemetals.aquarium_door.name=Aquariumtür -tile.basemetals.antimony_door.name=Antimontür -tile.basemetals.bismuth_door.name=Bismuthtür -tile.basemetals.brass_door.name=Messingtür -tile.basemetals.bronze_door.name=Bronzetür -tile.basemetals.coldiron_door.name=Kalteisentür -tile.basemetals.copper_door.name=Kupfertür -tile.basemetals.cupronickel_door.name=Kupfernickeltür -tile.basemetals.diamond_door.name=Diamanttür -tile.basemetals.electrum_door.name=Elektrontür -tile.basemetals.emerald_door.name=Smaragdtür -tile.basemetals.gold_door.name=Goldtür -tile.basemetals.invar_door.name=Invartür -tile.basemetals.lead_door.name=Bleitür -tile.basemetals.mithril_door.name=Mithriltür -tile.basemetals.nickel_door.name=Nickeltür -tile.basemetals.obsidian_door.name=Obsidiantür -tile.basemetals.pewter_door.name=Hartzinntür -tile.basemetals.platinum_door.name=Platintür -tile.basemetals.quartz_door.name=Quartztür -tile.basemetals.silver_door.name=Silbertür -tile.basemetals.starsteel_door.name=Sternenstahltür -tile.basemetals.steel_door.name=Stahltür -tile.basemetals.tin_door.name=Zinntür -tile.basemetals.zinc_door.name=Zinktür - -#falltürs - #Tiles -tile.basemetals.adamantine_trapdoor.name=Adamantfalltür -tile.basemetals.aquarium_trapdoor.name=Aquariumfalltür -tile.basemetals.antimony_trapdoor.name=Antimonfalltür -tile.basemetals.bismuth_trapdoor.name=Bismuthfalltür -tile.basemetals.brass_trapdoor.name=Messingfalltür -tile.basemetals.bronze_trapdoor.name=Bronzefalltür -tile.basemetals.coldiron_trapdoor.name=Kalteisenfalltür -tile.basemetals.copper_trapdoor.name=Kupferfalltür -tile.basemetals.cupronickel_trapdoor.name=Kupfernickelfalltür -tile.basemetals.diamond_trapdoor.name=Diamantfalltür -tile.basemetals.electrum_trapdoor.name=Elektronfalltür -tile.basemetals.emerald_trapdoor.name=Smaragdfalltür -tile.basemetals.gold_trapdoor.name=Goldfalltür -tile.basemetals.invar_trapdoor.name=Invarfalltür -tile.basemetals.lead_trapdoor.name=Bleifalltür -tile.basemetals.mithril_trapdoor.name=Mithrilfalltür -tile.basemetals.nickel_trapdoor.name=Nickelfalltür -tile.basemetals.obsidian_trapdoor.name=Obsidianfalltür -tile.basemetals.pewter_trapdoor.name=Hartzinnfalltür -tile.basemetals.platinum_trapdoor.name=Platinfalltür -tile.basemetals.quartz_trapdoor.name=Quartzfalltür -tile.basemetals.silver_trapdoor.name=Silberfalltür -tile.basemetals.starsteel_trapdoor.name=Sternenstahlfalltür -tile.basemetals.steel_trapdoor.name=Stahlfalltür -tile.basemetals.tin_trapdoor.name=Zinnfalltür -tile.basemetals.zinc_trapdoor.name=Zinkfalltür - #Items -item.basemetals.adamantine_trapdoor.name=Adamantfalltür -item.basemetals.aquarium_trapdoor.name=Aquariumfalltür -item.basemetals.antimony_trapdoor.name=Antimonfalltür -item.basemetals.bismuth_trapdoor.name=Bismuthfalltür -item.basemetals.brass_trapdoor.name=Messingfalltür -item.basemetals.bronze_trapdoor.name=Bronzefalltür -item.basemetals.coldiron_trapdoor.name=Kalteisenfalltür -item.basemetals.copper_trapdoor.name=Kupferfalltür -item.basemetals.cupronickel_trapdoor.name=Kupfernickelfalltür -item.basemetals.diamond_trapdoor.name=Diamantfalltür -item.basemetals.electrum_trapdoor.name=Elektronfalltür -item.basemetals.emerald_trapdoor.name=Smaragdfalltür -item.basemetals.gold_trapdoor.name=Goldfalltür -item.basemetals.invar_trapdoor.name=Invarfalltür -item.basemetals.lead_trapdoor.name=Bleifalltür -item.basemetals.mithril_trapdoor.name=Mithrilfalltür -item.basemetals.nickel_trapdoor.name=Nickelfalltür -item.basemetals.obsidian_trapdoor.name=Obsidianfalltür -item.basemetals.pewter_trapdoor.name=Hartzinnfalltür -item.basemetals.platinum_trapdoor.name=Platinfalltür -item.basemetals.quartz_trapdoor.name=Quartzfalltür -item.basemetals.silver_trapdoor.name=Silberfalltür -item.basemetals.starsteel_trapdoor.name=Sternenstahlfalltür -item.basemetals.steel_trapdoor.name=Stahlfalltür -item.basemetals.tin_trapdoor.name=Zinnfalltür - -#zahnrads -item.basemetals.adamantine_gear.name=Adamantzahnrad -item.basemetals.aquarium_gear.name=Aquariumzahnrad -item.basemetals.antimony_gear.name=Antimonzahnrad -item.basemetals.bismuth_gear.name=Bismuthzahnrad -item.basemetals.brass_gear.name=Messingzahnrad -item.basemetals.bronze_gear.name=Bronzezahnrad -item.basemetals.coldiron_gear.name=Kalteisenzahnrad -item.basemetals.copper_gear.name=Kupferzahnrad -item.basemetals.cupronickel_gear.name=Kupfernickelzahnrad -item.basemetals.diamond_gear.name=Diamantzahnrad -item.basemetals.electrum_gear.name=Elektronzahnrad -item.basemetals.emerald_gear.name=Smaragdzahnrad -item.basemetals.gold_gear.name=Goldzahnrad -item.basemetals.invar_gear.name=Invarzahnrad -item.basemetals.iron_gear.name=Eisenzahnrad -item.basemetals.lead_gear.name=Bleizahnrad -item.basemetals.mithril_gear.name=Mithrilzahnrad -item.basemetals.nickel_gear.name=Nickelzahnrad -item.basemetals.obsidian_gear.name=Obsidianzahnrad -item.basemetals.pewter_gear.name=Hartzinnzahnrad -item.basemetals.platinum_gear.name=Platinzahnrad -item.basemetals.quartz_gear.name=Quartzzahnrad -item.basemetals.silver_gear.name=Silberzahnrad -item.basemetals.starsteel_gear.name=Sternenstahlzahnrad -item.basemetals.steel_gear.name=Stahlzahnrad -item.basemetals.stone_gear.name=Stonezahnrad -item.basemetals.tin_gear.name=Zinnzahnrad -item.basemetals.wood_gear.name=Holzzahnrad -item.basemetals.zinc_gear.name=Zinkzahnrad - -#stanges -item.basemetals.adamantine_rod.name=Adamantstange -item.basemetals.aquarium_rod.name=Aquariumstange -item.basemetals.antimony_rod.name=Antimonstange -item.basemetals.bismuth_rod.name=Bismuthstange -item.basemetals.brass_rod.name=Messingstange -item.basemetals.bronze_rod.name=Bronzestange -item.basemetals.coldiron_rod.name=Kalteisenstange -item.basemetals.copper_rod.name=Kupferstange -item.basemetals.cupronickel_rod.name=Kupfernickelstange -item.basemetals.diamond_rod.name=Diamantstange -item.basemetals.electrum_rod.name=Elektronstange -item.basemetals.emerald_rod.name=Smaragdstange -item.basemetals.gold_rod.name=Goldstange -item.basemetals.invar_rod.name=Invarstange -item.basemetals.iron_rod.name=Eisenstange -item.basemetals.lead_rod.name=Bleistange -item.basemetals.mithril_rod.name=Mithrilstange -item.basemetals.nickel_rod.name=Nickelstange -item.basemetals.obsidian_rod.name=Obsidianstange -item.basemetals.pewter_rod.name=Hartzinnstange -item.basemetals.platinum_rod.name=Platinstange -item.basemetals.quartz_rod.name=Quartzstange -item.basemetals.silver_rod.name=Silberstange -item.basemetals.starsteel_rod.name=Sternenstahlstange -item.basemetals.steel_rod.name=Stahlstange -item.basemetals.stone_rod.name=Stonestange -item.basemetals.tin_rod.name=Zinnstange -item.basemetals.zinc_rod.name=Zinkstange - -#blechs - #Item -item.basemetals.adamantine_plate.name=Verdichtetes Adamantblech -item.basemetals.aquarium_plate.name=Verdichtetes Aquariumblech -item.basemetals.antimony_plate.name=Verdichtetes Antimonblech -item.basemetals.bismuth_plate.name=Verdichtetes Bismuthblech -item.basemetals.brass_plate.name=Verdichtetes Messingblech -item.basemetals.bronze_plate.name=Verdichtetes Bronzeblech -item.basemetals.coldiron_plate.name=Verdichtetes Kalteisenblech -item.basemetals.copper_plate.name=Verdichtetes Kupferblech -item.basemetals.cupronickel_plate.name=Verdichtetes Kupfernickelblech -item.basemetals.electrum_plate.name=Verdichtetes Elektronblech -item.basemetals.gold_plate.name=Verdichtetes Goldblech -item.basemetals.invar_plate.name=Verdichtetes Invarblech -item.basemetals.lead_plate.name=Verdichtetes Bleiblech -item.basemetals.mithril_plate.name=Verdichtetes Mithrilblech -item.basemetals.nickel_plate.name=Verdichtetes Nickelblech -item.basemetals.pewter_plate.name=Verdichtetes Hartzinnblech -item.basemetals.platinum_plate.name=Verdichtetes Platinblech -item.basemetals.silver_plate.name=Verdichtetes Silberblech -item.basemetals.starsteel_plate.name=Verdichtetes Sternenstahlblech -item.basemetals.steel_plate.name=Verdichtetes Stahlblech -item.basemetals.tin_plate.name=Verdichtetes Zinnblech -item.basemetals.zinc_plate.name=Verdichtetes Zinkblech -item.basemetals.iron_plate.name=Verdichtetes Eisenblech -item.basemetals.gold_plate.name=Verdichtetes Goldblech - #Tile -tile.basemetals.adamantine_plate.name=Verdichtetes Adamantblech -tile.basemetals.aquarium_plate.name=Verdichtetes Aquariumblech -tile.basemetals.antimony_plate.name=Verdichtetes Antimonblech -tile.basemetals.bismuth_plate.name=Verdichtetes Bismuthblech -tile.basemetals.brass_plate.name=Verdichtetes Messingblech -tile.basemetals.bronze_plate.name=Verdichtetes Bronzeblech -tile.basemetals.coldiron_plate.name=Verdichtetes Kalteisenblech -tile.basemetals.copper_plate.name=Verdichtetes Kupferblech -tile.basemetals.cupronickel_plate.name=Verdichtetes Kupfernickelblech -tile.basemetals.electrum_plate.name=Verdichtetes Elektronblech -tile.basemetals.gold_plate.name=Verdichtetes Goldblech -tile.basemetals.invar_plate.name=Verdichtetes Invarblech -tile.basemetals.lead_plate.name=Verdichtetes Bleiblech -tile.basemetals.mithril_plate.name=Verdichtetes Mithrilblech -tile.basemetals.nickel_plate.name=Verdichtetes Nickelblech -tile.basemetals.pewter_plate.name=Verdichtetes Hartzinnblech -tile.basemetals.platinum_plate.name=Verdichtetes Platinblech -tile.basemetals.silver_plate.name=Verdichtetes Silberblech -tile.basemetals.starsteel_plate.name=Verdichtetes Sternenstahlblech -tile.basemetals.steel_plate.name=Verdichtetes Stahlblech -tile.basemetals.tin_plate.name=Verdichtetes Zinnblech -tile.basemetals.zinc_plate.name=Verdichtetes Zinkblech -tile.basemetals.iron_plate.name=Verdichtetes Eisenblech -tile.basemetals.gold_plate.name=Verdichtetes Goldblech - -#Player Detectors (Pressureblechs) - #Items -item.basemetals.human_detector.name=Sicherheits-Druckplatte - #Tiles -tile.basemetals.human_detector.name=Sicherheits-Druckplatte - -#schalter - #Item -item.basemetals.adamantine_button.name=Adamantschalter -item.basemetals.aquarium_button.name=Aquariumschalter -item.basemetals.antimony_button.name=Antimonschalter -item.basemetals.bismuth_button.name=Bismuthschalter -item.basemetals.brass_button.name=Messingschalter -item.basemetals.bronze_button.name=Bronzeschalter -item.basemetals.coldiron_button.name=Kalteisenschalter -item.basemetals.copper_button.name=Kupferschalter -item.basemetals.cupronickel_button.name=Kupfernickelschalter -item.basemetals.diamond_button.name=Diamantschalter -item.basemetals.electrum_button.name=Elektronschalter -item.basemetals.emerald_button.name=Smaragdschalter -item.basemetals.gold_button.name=Goldschalter -item.basemetals.invar_button.name=Invarschalter -item.basemetals.lead_button.name=Bleischalter -item.basemetals.mithril_button.name=Mithrilschalter -item.basemetals.nickel_button.name=Nickelschalter -item.basemetals.obsidian_button.name=Obsidianschalter -item.basemetals.pewter_button.name=Hartzinnschalter -item.basemetals.platinum_button.name=Platinschalter -item.basemetals.quartz_button.name=Quartzschalter -item.basemetals.silver_button.name=Silberschalter -item.basemetals.starsteel_button.name=Sternenstahlschalter -item.basemetals.steel_button.name=Stahlschalter -item.basemetals.tin_button.name=Zinnschalter -item.basemetals.zinc_button.name=Zinkschalter -item.basemetals.iron_button.name=Eisenschalter -item.basemetals.gold_button.name=Goldschalter - #Tile -tile.basemetals.adamantine_button.name=Adamantschalter -tile.basemetals.aquarium_button.name=Aquariumschalter -tile.basemetals.antimony_button.name=Antimonschalter -tile.basemetals.bismuth_button.name=Bismuthschalter -tile.basemetals.brass_button.name=Messingschalter -tile.basemetals.bronze_button.name=Bronzeschalter -tile.basemetals.coldiron_button.name=Kalteisenschalter -tile.basemetals.copper_button.name=Kupferschalter -tile.basemetals.cupronickel_button.name=Kupfernickelschalter -tile.basemetals.diamond_button.name=Diamantschalter -tile.basemetals.electrum_button.name=Elektronschalter -tile.basemetals.emerald_button.name=Smaragdschalter -tile.basemetals.gold_button.name=Goldschalter -tile.basemetals.invar_button.name=Invarschalter -tile.basemetals.lead_button.name=Bleischalter -tile.basemetals.mithril_button.name=Mithrilschalter -tile.basemetals.nickel_button.name=Nickelschalter -tile.basemetals.obsidian_button.name=Obsidianschalter -tile.basemetals.pewter_button.name=Hartzinnschalter -tile.basemetals.platinum_button.name=Platinschalter -tile.basemetals.quartz_button.name=Quartzschalter -tile.basemetals.silver_button.name=Silberschalter -tile.basemetals.starsteel_button.name=Sternenstahlschalter -tile.basemetals.steel_button.name=Stahlschalter -tile.basemetals.tin_button.name=Zinnschalter -tile.basemetals.zinc_button.name=Zinkschalter -tile.basemetals.iron_button.name=Eisenschalter -tile.basemetals.gold_button.name=Goldschalter - -Pressureblech - #Item -item.basemetals.adamantine_pressure_plate.name=Adamantdruckplatte -item.basemetals.aquarium_pressure_plate.name=Aquariumdruckplatte -item.basemetals.antimony_pressure_plate.name=Antimondruckplatte -item.basemetals.bismuth_pressure_plate.name=Bismuthdruckplatte -item.basemetals.brass_pressure_plate.name=Messingdruckplatte -item.basemetals.bronze_pressure_plate.name=Bronzedruckplatte -item.basemetals.coldiron_pressure_plate.name=Kalteisendruckplatte -item.basemetals.copper_pressure_plate.name=Kupferdruckplatte -item.basemetals.cupronickel_pressure_plate.name=Kupfernickeldruckplatte -item.basemetals.diamond_pressure_plate.name=Diamantdruckplatte -item.basemetals.electrum_pressure_plate.name=Elektrondruckplatte -item.basemetals.emerald_pressure_plate.name=Smaragddruckplatte -item.basemetals.invar_pressure_plate.name=Invardruckplatte -item.basemetals.lead_pressure_plate.name=Bleidruckplatte -item.basemetals.mithril_pressure_plate.name=Mithrildruckplatte -item.basemetals.nickel_pressure_plate.name=Nickeldruckplatte -item.basemetals.obsidian_pressure_plate.name=Obsidiandruckplatte -item.basemetals.pewter_pressure_plate.name=Hartzinndruckplatte -item.basemetals.platinum_pressure_plate.name=Platindruckplatte -item.basemetals.quartz_pressure_plate.name=Quartzdruckplatte -item.basemetals.silver_pressure_plate.name=Silberdruckplatte -item.basemetals.starsteel_pressure_plate.name=Sternenstahldruckplatte -item.basemetals.steel_pressure_plate.name=Stahldruckplatte -item.basemetals.tin_pressure_plate.name=Zinndruckplatte -item.basemetals.zinc_pressure_plate.name=Zinkdruckplatte -item.basemetals.iron_pressure_plate.name=Eisendruckplatte -item.basemetals.gold_pressure_plate.name=Golddruckplatte - #Tile -tile.basemetals.adamantine_pressure_plate.name=Adamantdruckplatte -tile.basemetals.aquarium_pressure_plate.name=Aquariumdruckplatte -tile.basemetals.antimony_pressure_plate.name=Antimondruckplatte -tile.basemetals.bismuth_pressure_plate.name=Bismuthdruckplatte -tile.basemetals.brass_pressure_plate.name=Messingdruckplatte -tile.basemetals.bronze_pressure_plate.name=Bronzedruckplatte -tile.basemetals.coldiron_pressure_plate.name=Kalteisendruckplatte -tile.basemetals.copper_pressure_plate.name=Kupferdruckplatte -tile.basemetals.cupronickel_pressure_plate.name=Kupfernickeldruckplatte -tile.basemetals.diamond_pressure_plate.name=Diamantdruckplatte -tile.basemetals.electrum_pressure_plate.name=Elektrondruckplatte -tile.basemetals.emerald_pressure_plate.name=Smaragddruckplatte -tile.basemetals.invar_pressure_plate.name=Invardruckplatte -tile.basemetals.lead_pressure_plate.name=Bleidruckplatte -tile.basemetals.mithril_pressure_plate.name=Mithrildruckplatte -tile.basemetals.nickel_pressure_plate.name=Nickeldruckplatte -tile.basemetals.obsidian_pressure_plate.name=Obsidiandruckplatte -tile.basemetals.pewter_pressure_plate.name=Hartzinndruckplatte -tile.basemetals.platinum_pressure_plate.name=Platindruckplatte -tile.basemetals.quartz_pressure_plate.name=Quartzdruckplatte -tile.basemetals.silver_pressure_plate.name=Silberdruckplatte -tile.basemetals.starsteel_pressure_plate.name=Sternenstahldruckplatte -tile.basemetals.steel_pressure_plate.name=Stahldruckplatte -tile.basemetals.tin_pressure_plate.name=Zinndruckplatte -tile.basemetals.zinc_pressure_plate.name=Zinkdruckplatte -tile.basemetals.iron_pressure_plate.name=Eisendruckplatte -tile.basemetals.gold_pressure_plate.name=Golddruckplatte - -#Crystal -item.basemetals.adamantine_crystal.name=Adamantkristall -item.basemetals.aquarium_crystal.name=Aquariumkristall -item.basemetals.antimony_crystal.name= Antimonkristall -item.basemetals.bismuth_crystal.name= Bismuthkristall -item.basemetals.brass_crystal.name= Messingkristall -item.basemetals.bronze_crystal.name= Bronzekristall -item.basemetals.coldiron_crystal.name= Kalteisenkristall -item.basemetals.copper_crystal.name= Kupferkristall -item.basemetals.cupronickel_crystal.name= Kupfernickelkristall -item.basemetals.electrum_crystal.name= Elektronkristall -item.basemetals.invar_crystal.name= Invarkristall -item.basemetals.lead_crystal.name= Bleikristall -item.basemetals.mithril_crystal.name= Mithrilkristall -item.basemetals.nickel_crystal.name= Nickelkristall -item.basemetals.pewter_crystal.name= Hartzinnkristall -item.basemetals.platinum_crystal.name= Platinkristall -item.basemetals.silver_crystal.name= Silberkristall -item.basemetals.starsteel_crystal.name= Sternenstahlkristall -item.basemetals.steel_crystal.name= Stahlkristall -item.basemetals.tin_crystal.name= Zinnkristall -item.basemetals.zinc_crystal.name=Zinkkristall - -#Clump -item.basemetals.adamantine_clump.name= Adamantklumpen -item.basemetals.aquarium_clump.name= Aquariumklumpen -item.basemetals.antimony_clump.name= Antimonklumpen -item.basemetals.bismuth_clump.name= Bismuthklumpen -item.basemetals.brass_clump.name= Messingklumpen -item.basemetals.bronze_clump.name= Bronzeklumpen -item.basemetals.coldiron_clump.name= Kalteisenklumpen -item.basemetals.copper_clump.name= Kupferklumpen -item.basemetals.cupronickel_clump.name= Kupfernickelklumpen -item.basemetals.electrum_clump.name= Elektronklumpen -item.basemetals.invar_clump.name= Invarklumpen -item.basemetals.lead_clump.name= Bleiklumpen -item.basemetals.mithril_clump.name= Mithrilklumpen -item.basemetals.nickel_clump.name= Nickelklumpen -item.basemetals.pewter_clump.name= Hartzinnklumpen -item.basemetals.platinum_clump.name= Platinklumpen -item.basemetals.silver_clump.name= Silberklumpen -item.basemetals.starsteel_clump.name= Sternenstahlklumpen -item.basemetals.steel_clump.name= Stahlklumpen -item.basemetals.tin_clump.name= Zinnklumpen -item.basemetals.zinc_clump.name= Zinkklumpen - -#Shard -item.basemetals.adamantine_shard.name= Adamantsplitter -item.basemetals.aquarium_shard.name= Aquariumsplitter -item.basemetals.antimony_shard.name= Antimonsplitter -item.basemetals.bismuth_shard.name= Bismuthsplitter -item.basemetals.brass_shard.name= Messingsplitter -item.basemetals.bronze_shard.name= Bronzesplitter -item.basemetals.coldiron_shard.name= Kalteisensplitter -item.basemetals.copper_shard.name= Kupfersplitter -item.basemetals.cupronickel_shard.name= Kupfernickelsplitter -item.basemetals.electrum_shard.name= Elektronsplitter -item.basemetals.invar_shard.name= Invarsplitter -item.basemetals.lead_shard.name= Bleisplitter -item.basemetals.mithril_shard.name= Mithrilsplitter -item.basemetals.nickel_shard.name= Nickelsplitter -item.basemetals.pewter_shard.name= Hartzinnsplitter -item.basemetals.platinum_shard.name= Platinsplitter -item.basemetals.silver_shard.name= Silbersplitter -item.basemetals.starsteel_shard.name= Sternenstahlsplitter -item.basemetals.steel_shard.name= Stahlsplitter -item.basemetals.tin_shard.name= Zinnsplitter -item.basemetals.zinc_shard.name= Zinksplitter - -#Verunreinigtes -item.basemetals.adamantine_powder_dirty.name=Verunreinigtes Adamantpulver -item.basemetals.aquarium_powder_dirty.name=Verunreinigtes Aquariumpulver -item.basemetals.antimony_powder_dirty.name=Verunreinigtes Antimonpulver -item.basemetals.bismuth_powder_dirty.name=Verunreinigtes Bismuthpulver -item.basemetals.brass_powder_dirty.name=Verunreinigtes Messingpulver -item.basemetals.bronze_powder_dirty.name=Verunreinigtes Bronzepulver -item.basemetals.coldiron_powder_dirty.name=Verunreinigtes Kalteisenpulver -item.basemetals.copper_powder_dirty.name=Verunreinigtes Kupferpulver -item.basemetals.cupronickel_powder_dirty.name=Verunreinigtes Kupfernickelpulver -item.basemetals.electrum_powder_dirty.name=Verunreinigtes Elektronpulver -item.basemetals.gold_powder_dirty.name=Verunreinigtes Goldpulver -item.basemetals.invar_powder_dirty.name=Verunreinigtes Invarpulver -item.basemetals.iron_powder_dirty.name=Verunreinigtes Eisenpulver -item.basemetals.lead_powder_dirty.name=Verunreinigtes Bleipulver -item.basemetals.mithril_powder_dirty.name=Verunreinigtes Mithrilpulver -item.basemetals.nickel_powder_dirty.name=Verunreinigtes Nickelpulver -item.basemetals.pewter_powder_dirty.name=Verunreinigtes Hartzinnpulver -item.basemetals.platinum_powder_dirty.name=Verunreinigtes Platinpulver -item.basemetals.silver_powder_dirty.name=Verunreinigtes Silberpulver -item.basemetals.starsteel_powder_dirty.name=Verunreinigtes Sternenstahlpulver -item.basemetals.steel_powder_dirty.name=Verunreinigtes Stahlpulver -item.basemetals.tin_powder_dirty.name=Verunreinigtes Zinnpulver -item.basemetals.zinc_powder_dirty.name=Verunreinigtes Zinkpulver - -#Casing - #Item -item.basemetals.adamantine_casing.name=Adamantgehäuse -item.basemetals.aquarium_casing.name=Aquariumgehäuse -item.basemetals.antimony_casing.name=Antimongehäuse -item.basemetals.bismuth_casing.name=Bismuthgehäuse -item.basemetals.brass_casing.name=Messinggehäuse -item.basemetals.bronze_casing.name=Bronzegehäuse -item.basemetals.coldiron_casing.name=Kalteisengehäuse -item.basemetals.copper_casing.name=Kupfergehäuse -item.basemetals.cupronickel_casing.name=Kupfernickelgehäuse -item.basemetals.electrum_casing.name=Elektrongehäuse -item.basemetals.invar_casing.name=Invargehäuse -item.basemetals.lead_casing.name=Bleigehäuse -item.basemetals.mithril_casing.name=Mithrilgehäuse -item.basemetals.nickel_casing.name=Nickelgehäuse -item.basemetals.pewter_casing.name=Hartzinngehäuse -item.basemetals.platinum_casing.name=Platingehäuse -item.basemetals.silver_casing.name=Silbergehäuse -item.basemetals.starsteel_casing.name=Sternenstahlgehäuse -item.basemetals.steel_casing.name=Stahlgehäuse -item.basemetals.tin_casing.name=Zinngehäuse -item.basemetals.zinc_casing.name=Zinkgehäuse -item.basemetals.iron_casing.name=Eisengehäuse -item.basemetals.gold_casing.name=Goldgehäuse - -#Denseblech - #Item -item.basemetals.adamantine_dense_plate.name=Verdichtetes Adamantblech -item.basemetals.aquarium_dense_plate.name=Verdichtetes Aquariumblech -item.basemetals.antimony_dense_plate.name=Verdichtetes Antimonblech -item.basemetals.bismuth_dense_plate.name=Verdichtetes Bismuthblech -item.basemetals.brass_dense_plate.name=Verdichtetes Messingblech -item.basemetals.bronze_dense_plate.name=Verdichtetes Bronzeblech -item.basemetals.coldiron_dense_plate.name=Verdichtetes Kalteisenblech -item.basemetals.copper_dense_plate.name=Verdichtetes Kupferblech -item.basemetals.cupronickel_dense_plate.name=Verdichtetes Kupfernickelblech -item.basemetals.electrum_dense_plate.name=Verdichtetes Elektronblech -item.basemetals.invar_dense_plate.name=Verdichtetes Invarblech -item.basemetals.lead_dense_plate.name=Verdichtetes Bleiblech -item.basemetals.mithril_dense_plate.name=Verdichtetes Mithrilblech -item.basemetals.nickel_dense_plate.name=Verdichtetes Nickelblech -item.basemetals.pewter_dense_plate.name=Verdichtetes Hartzinnblech -item.basemetals.platinum_dense_plate.name=Verdichtetes Platinblech -item.basemetals.silver_dense_plate.name=Verdichtetes Silberblech -item.basemetals.starsteel_dense_plate.name=Verdichtetes Sternenstahlblech -item.basemetals.steel_dense_plate.name=Verdichtetes Stahlblech -item.basemetals.tin_dense_plate.name=Verdichtetes Zinnblech -item.basemetals.zinc_dense_plate.name=Verdichtetes Zinkblech -item.basemetals.iron_dense_plate.name=Verdichtetes Eisenblech -item.basemetals.gold_dense_plate.name=Verdichtetes Goldblech - #Tile -tile.basemetals.adamantine_dense_plate.name=Verdichtetes Adamantblech -tile.basemetals.aquarium_dense_plate.name=Verdichtetes Aquariumblech -tile.basemetals.antimony_dense_plate.name=Verdichtetes Antimonblech -tile.basemetals.bismuth_dense_plate.name=Verdichtetes Bismuthblech -tile.basemetals.brass_dense_plate.name=Verdichtetes Messingblech -tile.basemetals.bronze_dense_plate.name=Verdichtetes Bronzeblech -tile.basemetals.coldiron_dense_plate.name=Verdichtetes Kalteisenblech -tile.basemetals.copper_dense_plate.name=Verdichtetes Kupferblech -tile.basemetals.cupronickel_dense_plate.name=Verdichtetes Kupfernickelblech -tile.basemetals.electrum_dense_plate.name=Verdichtetes Elektronblech -tile.basemetals.invar_dense_dense_plate.name=Verdichtetes Invarblech -tile.basemetals.lead_dense_plate.name=Verdichtetes Verdichtetes Bleiblech -tile.basemetals.mithril_dense_plate.name=Verdichtetes Verdichtetes Mithrilblech -tile.basemetals.nickel_dense_plate.name=Verdichtetes Verdichtetes Nickelblech -tile.basemetals.pewter_dense_plate.name=Verdichtetes Verdichtetes Hartzinnblech -tile.basemetals.platinum_dense_plate.name=Verdichtetes Verdichtetes Platinblech -tile.basemetals.silver_dense_plate.name=Verdichtetes Verdichtetes Silberblech -tile.basemetals.starsteel_dense_plate.name=Verdichtetes Verdichtetes Sternenstahlblech -tile.basemetals.steel_dense_plate.name=Verdichtetes Verdichtetes Stahlblech -tile.basemetals.tin_dense_plate.name=Verdichtetes Verdichtetes Zinnblech -tile.basemetals.zinc_dense_plate.name=Verdichtetes Verdichtetes Zinkblech -tile.basemetals.iron_dense_plate.name=Verdichtetes Verdichtetes Eisenblech -tile.basemetals.gold_dense_plate.name=Verdichtetes Verdichtetes Goldblech - -#fliese - #Item -item.basemetals.adamantine_slab.name=Adamantfliese -item.basemetals.aquarium_slab.name=Aquariumfliese -item.basemetals.antimony_slab.name=Antimonfliese -item.basemetals.bismuth_slab.name=Bismuthfliese -item.basemetals.brass_slab.name=Messingfliese -item.basemetals.bronze_slab.name=Bronzefliese -item.basemetals.coldiron_slab.name=Kalteisenfliese -item.basemetals.copper_slab.name=Kupferfliese -item.basemetals.cupronickel_slab.name=Kupfernickelfliese -item.basemetals.diamond_slab.name=Diamantfliese -item.basemetals.electrum_slab.name=Elektronfliese -item.basemetals.emerald_slab.name=Smaragdfliese -item.basemetals.gold_slab.name=Goldfliese -item.basemetals.invar_slab.name=Invarfliese -item.basemetals.iron_slab.name=Eisenfliese -item.basemetals.lead_slab.name=Bleifliese -item.basemetals.mithril_slab.name=Mithrilfliese -item.basemetals.nickel_slab.name=Nickelfliese -item.basemetals.obsidian_slab.name=Obsidianfliese -item.basemetals.pewter_slab.name=Hartzinnfliese -item.basemetals.platinum_slab.name=Platinfliese -item.basemetals.silver_slab.name=Silberfliese -item.basemetals.starsteel_slab.name=Sternenstahlfliese -item.basemetals.steel_slab.name=Stahlfliese -item.basemetals.tin_slab.name=Zinnfliese -item.basemetals.zinc_slab.name=Zinkfliese - #Tile -tile.basemetals.adamantine_slab.name=Adamantfliese -tile.basemetals.aquarium_slab.name=Aquariumfliese -tile.basemetals.antimony_slab.name=Antimonfliese -tile.basemetals.bismuth_slab.name=Bismuthfliese -tile.basemetals.brass_slab.name=Messingfliese -tile.basemetals.bronze_slab.name=Bronzefliese -tile.basemetals.coldiron_slab.name=Kalteisenfliese -tile.basemetals.copper_slab.name=Kupferfliese -tile.basemetals.cupronickel_slab.name=Kupfernickelfliese -tile.basemetals.diamond_slab.name=Diamantfliese -tile.basemetals.electrum_slab.name=Elektronfliese -tile.basemetals.emerald_slab.name=Smaragdfliese -tile.basemetals.gold_slab.name=Goldfliese -tile.basemetals.invar_slab.name=Invarfliese -tile.basemetals.iron_slab.name=Eisenfliese -tile.basemetals.lead_slab.name=Bleifliese -tile.basemetals.mithril_slab.name=Mithrilfliese -tile.basemetals.nickel_slab.name=Nickelfliese -tile.basemetals.obsidian_slab.name=Obsidianfliese -tile.basemetals.pewter_slab.name=Hartzinnfliese -tile.basemetals.platinum_slab.name=Platinfliese -tile.basemetals.silver_slab.name=Silberfliese -tile.basemetals.starsteel_slab.name=Sternenstahlfliese -tile.basemetals.steel_slab.name=Stahlfliese -tile.basemetals.tin_slab.name=Zinnfliese -tile.basemetals.zinc_slab.name=Zinkfliese - -#hebel - #Item -item.basemetals.adamantine_lever.name=Adamanthebel -item.basemetals.aquarium_lever.name=Aquariumhebel -item.basemetals.antimony_lever.name=Antimonhebel -item.basemetals.bismuth_lever.name=Bismuthhebel -item.basemetals.brass_lever.name=Messinghebel -item.basemetals.bronze_lever.name=Bronzehebel -item.basemetals.coldiron_lever.name=Kalteisenhebel -item.basemetals.copper_lever.name=Kupferhebel -item.basemetals.cupronickel_lever.name=Kupfernickelhebel -item.basemetals.diamond_lever.name=Diamanthebel -item.basemetals.electrum_lever.name=Elektronhebel -item.basemetals.emerald_lever.name=Smaragdhebel -item.basemetals.gold_lever.name=Goldhebel -item.basemetals.invar_lever.name=Invarhebel -item.basemetals.iron_lever.name=Eisenhebel -item.basemetals.lead_lever.name=Bleihebel -item.basemetals.mithril_lever.name=Mithrilhebel -item.basemetals.nickel_lever.name=Nickelhebel -item.basemetals.obsidian_lever.name=Obsidianhebel -item.basemetals.pewter_lever.name=Hartzinnhebel -item.basemetals.platinum_lever.name=Platinhebel -item.basemetals.quartz_lever.name=Quartzhebel -item.basemetals.silver_lever.name=Silberhebel -item.basemetals.starsteel_lever.name=Sternenstahlhebel -item.basemetals.steel_lever.name=Stahlhebel -item.basemetals.tin_lever.name=Zinnhebel -item.basemetals.zinc_lever.name=Zinkhebel - #Tile -tile.basemetals.adamantine_lever.name=Adamanthebel -tile.basemetals.aquarium_lever.name=Aquariumhebel -tile.basemetals.antimony_lever.name=Antimonhebel -tile.basemetals.bismuth_lever.name=Bismuthhebel -tile.basemetals.brass_lever.name=Messinghebel -tile.basemetals.bronze_lever.name=Bronzehebel -tile.basemetals.coldiron_lever.name=Kalteisenhebel -tile.basemetals.copper_lever.name=Kupferhebel -tile.basemetals.cupronickel_lever.name=Kupfernickelhebel -tile.basemetals.diamond_lever.name=Diamanthebel -tile.basemetals.electrum_lever.name=Elektronhebel -tile.basemetals.emerald_lever.name=Smaragdhebel -tile.basemetals.gold_lever.name=Goldhebel -tile.basemetals.invar_lever.name=Invarhebel -tile.basemetals.iron_lever.name=Eisenhebel -tile.basemetals.lead_lever.name=Bleihebel -tile.basemetals.mithril_lever.name=Mithrilhebel -tile.basemetals.nickel_lever.name=Nickelhebel -tile.basemetals.obsidian_lever.name=Obsidianhebel -tile.basemetals.pewter_lever.name=Hartzinnhebel -tile.basemetals.platinum_lever.name=Platinhebel -tile.basemetals.quartz_lever.name=Quartzhebel -tile.basemetals.silver_lever.name=Silberhebel -tile.basemetals.starsteel_lever.name=Sternenstahlhebel -tile.basemetals.steel_lever.name=Stahlhebel -tile.basemetals.tin_lever.name=Zinnhebel -tile.basemetals.zinc_lever.name=Zinkhebel - -#Stair - #Item -item.basemetals.adamantine_stairs.name=Adamanttreppe -item.basemetals.aquarium_stairs.name=Aquariumtreppe -item.basemetals.antimony_stairs.name=Antimontreppe -item.basemetals.bismuth_stairs.name=Bismuthtreppe -item.basemetals.brass_stairs.name=Messingtreppe -item.basemetals.bronze_stairs.name=Bronzetreppe -item.basemetals.coldiron_stairs.name=Kalteisentreppe -item.basemetals.copper_stairs.name=Kupfertreppe -item.basemetals.cupronickel_stairs.name=Kupfernickeltreppe -item.basemetals.diamond_stairs.name=Diamanttreppe -item.basemetals.electrum_stairs.name=Elektrontreppe -item.basemetals.emerald_stairs.name=Smaragdtreppe -item.basemetals.gold_stairs.name=Goldtreppe -item.basemetals.invar_stairs.name=Invartreppe -item.basemetals.iron_stairs.name=Eisentreppe -item.basemetals.lead_stairs.name=Bleitreppe -item.basemetals.mithril_stairs.name=Mithriltreppe -item.basemetals.nickel_stairs.name=Nickeltreppe -item.basemetals.obsidian_stairs.name=Obsidiantreppe -item.basemetals.pewter_stairs.name=Hartzinntreppe -item.basemetals.platinum_stairs.name=Platintreppe -item.basemetals.silver_stairs.name=Silbertreppe -item.basemetals.starsteel_stairs.name=Sternenstahltreppe -item.basemetals.steel_stairs.name=Stahltreppe -item.basemetals.tin_stairs.name=Zinntreppe -item.basemetals.zinc_stairs.name=Zinktreppe - #Tile -tile.basemetals.adamantine_stairs.name=Adamanttreppe -tile.basemetals.aquarium_stairs.name=Aquariumtreppe -tile.basemetals.antimony_stairs.name=Antimontreppe -tile.basemetals.bismuth_stairs.name=Bismuthtreppe -tile.basemetals.brass_stairs.name=Messingtreppe -tile.basemetals.bronze_stairs.name=Bronzetreppe -tile.basemetals.coldiron_stairs.name=Kalteisentreppe -tile.basemetals.copper_stairs.name=Kupfertreppe -tile.basemetals.cupronickel_stairs.name=Kupfernickeltreppe -tile.basemetals.diamond_stairs.name=Diamanttreppe -tile.basemetals.electrum_stairs.name=Elektrontreppe -tile.basemetals.emerald_stairs.name=Smaragdtreppe -tile.basemetals.gold_stairs.name=Goldtreppe -tile.basemetals.invar_stairs.name=Invartreppe -tile.basemetals.iron_stairs.name=Eisentreppe -tile.basemetals.lead_stairs.name=Bleitreppe -tile.basemetals.mithril_stairs.name=Mithriltreppe -tile.basemetals.nickel_stairs.name=Nickeltreppe -tile.basemetals.obsidian_stairs.name=Obsidiantreppe -tile.basemetals.pewter_stairs.name=Hartzinntreppe -tile.basemetals.platinum_stairs.name=Platintreppe -tile.basemetals.silver_stairs.name=Silbertreppe -tile.basemetals.starsteel_stairs.name=Sternenstahltreppe -tile.basemetals.steel_stairs.name=Stahltreppe -tile.basemetals.tin_stairs.name=Zinntreppe -tile.basemetals.zinc_stairs.name=Zinktreppe - -#mauer - #Item -item.basemetals.adamantine_wall.name=Adamantmauer -item.basemetals.aquarium_wall.name=Aquariummauer -item.basemetals.antimony_wall.name=Antimonmauer -item.basemetals.bismuth_wall.name=Bismuthmauer -item.basemetals.brass_wall.name=Messingmauer -item.basemetals.bronze_wall.name=Bronzemauer -item.basemetals.coldiron_wall.name=Kalteisenmauer -item.basemetals.copper_wall.name=Kupfermauer -item.basemetals.cupronickel_wall.name=Kupfernickelmauer -item.basemetals.diamond_wall.name=Diamantmauer -item.basemetals.electrum_wall.name=Elektronmauer -item.basemetals.emerald_wall.name=Smaragdmauer -item.basemetals.gold_wall.name=Goldmauer -item.basemetals.invar_wall.name=Invarmauer -item.basemetals.iron_wall.name=Eisenmauer -item.basemetals.lead_wall.name=Bleimauer -item.basemetals.mithril_wall.name=Mithrilmauer -item.basemetals.nickel_wall.name=Nickelmauer -item.basemetals.obsidian_wall.name=Obsidianmauer -item.basemetals.pewter_wall.name=Hartzinnmauer -item.basemetals.platinum_wall.name=Platinmauer -item.basemetals.quartz_wall.name=Quartzmauer -item.basemetals.silver_wall.name=Silbermauer -item.basemetals.starsteel_wall.name=Sternenstahlmauer -item.basemetals.steel_wall.name=Stahlmauer -item.basemetals.tin_wall.name=Zinnmauer -item.basemetals.zinc_wall.name=Zinkmauer - #Tile -tile.basemetals.adamantine_wall.name=Adamantmauer -tile.basemetals.aquarium_wall.name=Aquariummauer -tile.basemetals.antimony_wall.name=Antimonmauer -tile.basemetals.bismuth_wall.name=Bismuthmauer -tile.basemetals.brass_wall.name=Messingmauer -tile.basemetals.bronze_wall.name=Bronzemauer -tile.basemetals.coldiron_wall.name=Kalteisenmauer -tile.basemetals.copper_wall.name=Kupfermauer -tile.basemetals.cupronickel_wall.name=Kupfernickelmauer -tile.basemetals.diamond_wall.name=Diamantmauer -tile.basemetals.electrum_wall.name=Elektronmauer -tile.basemetals.emerald_wall.name=Smaragdmauer -tile.basemetals.gold_wall.name=Goldmauer -tile.basemetals.invar_wall.name=Invarmauer -tile.basemetals.iron_wall.name=Eisenmauer -tile.basemetals.lead_wall.name=Bleimauer -tile.basemetals.mithril_wall.name=Mithrilmauer -tile.basemetals.nickel_wall.name=Nickelmauer -tile.basemetals.obsidian_wall.name=Obsidianmauer -tile.basemetals.pewter_wall.name=Hartzinnmauer -tile.basemetals.platinum_wall.name=Platinmauer -tile.basemetals.quartz_wall.name=Quartzmauer -tile.basemetals.silver_wall.name=Silbermauer -tile.basemetals.starsteel_wall.name=Sternenstahlmauer -tile.basemetals.steel_wall.name=Stahlmauer -tile.basemetals.tin_wall.name=Zinnmauer -tile.basemetals.zinc_wall.name=Zinkmauer - -modifier.mmd-toxic.name=Giftig -modifier.mmd-toxic.desc=Ziemlich gefährlich - blendet und vergiftet Dinge, die mit Werkzeugen oder Waffen getroffen werden. -modifier.mmd-sparkly.name=Funkelnd -modifier.mmd-sparkly.desc=Selbstreparierendes, glänzendes und funkelndes Zeug -modifier.mmd-soft.name=Weich -modifier.mmd-soft.desc=Nicht wirklich für Werkzeuge, die viel genutzt werden sollen, geeignet, da sich diese schneller abnutzen werden -modifier.mmd-brittle.name=Spröde -modifier.mmd-brittle.desc=Mit zunehmender Abnutzung wird mehr Schaden verursacht - aber Vorsicht, es verletzt auch dich! -modifier.mmd-heavy.name=Schwer -modifier.mmd-heavy.desc=Dieses Zeug ist wirklich, wirklich dicht - die Nutzung von Werkzeugen aus diesem Material wird dich schneller ermüden -modifier.mmd-reactive.name=Reaktiv -modifier.mmd-reactive.desc=Reagiert mit Wasser und nutzt sich dabei schneller ab -modifier.mmd-radioactive.name=Radioaktiv -modifier.mmd-radioactive.desc=Gefährlich zu halten, wenn du dich nicht irgendwie vor den negativen Effekten schützen kannst. - -modifier.toxic-modifier.name=Giftig -modifier.toxic-modifier.desc=§oGIFTIGER RÄCHER!§r\nQuecksilber und seine Ethyl- und Methyl-Salze sind extrem giftig und haben neurodegenerative Effekte.\nSie zu einer Waffe oder einem Werkzeug hinzuzufügen, erlaubt diesen deine Feinde zu blenden und zu vergiften. -modifier.lead-plated.name=Bleibeschichtung -modifier.lead-plated.desc=§oSafety First§r\nWenn du etwas Plutonium oder Uran herumliegen hast und denkst, dass es gut für eine Waffe geeignet wäre, vergiss nicht etwas Abschirmendes hinzuzufügen.\nEine Beschichtung mit Blei wird die tödliche Verstrahlung davon abhalten, dich zu betreffen, während sie deinen Feinden weiterhin schadet. +basemetals.crackhammer=Zerkleinerte Blöcke / Gegenstände + +#Creative Tabs +itemGroup.basemetals.blocks=Base Metals Blöcke +itemGroup.basemetals.combat=Base Metals Combat +itemGroup.basemetals.items=Base Metals Gegenstände +itemGroup.basemetals.tools=Base Metals Werkzeuge + +#ToolTips +tooltip.adamantine.tool=+%d Schaden gegen zähe Feinde +tooltip.adamantine.armor=Volle Rüstung: Schadensreduktion + +tooltip.aquarium.tool=+%d Schaden gegen aquatische Feinde +tooltip.aquarium.armor=Volle Rüstung: Unterwasseratmung + +tooltip.coldiron.tool=+%d Schaden gegen feurige Feinde +tooltip.coldiron.armor=Volle Rüstung: Feuerimmunität + +tooltip.mithril.tool=Blendet Wither und Untote +tooltip.mithril.armor=Volle Rüstung: Immunität gegen Gift & Wither + +tooltip.starsteel.tool=Repariert 1 Schaden alle %d Sekunden +tooltip.starsteel.armor=Volle Rüstung: Gewichtsreduktion + +#Achievements + #Achievement Name +achievement.aquarium_maker=Aquarium +achievement.angel_of_death=Todesengel +achievement.brass_maker=Messing +achievement.bronze_maker=Bronze +achievement.blocktastic=Blocktastisch! +achievement.cupronickel_maker=Kupfernickel +achievement.demon_slayer=Dämonenschlächter +achievement.electrum_maker=Elektron +achievement.geologist=Geologe +achievement.invar_maker=Invar +achievement.juggernaut=Juggernaut +achievement.metallurgy=Metallurgy +achievement.mithril_maker=Mithril +achievement.moon_boots=Moon Walker +achievement.scuba_diver=SCUBA Diver +achievement.steel_maker=Stahl +achievement.this_is_new=Das ist neu ... + #Acheviement Desc +achievement.aquarium_maker.desc=Kombiniere Kupferpulver, Zinkpulver und Prismarinkristalle, um Aquarium herzustellen +achievement.angel_of_death.desc=Trage eine vollständige Mithrilrüstung und führe ein Mithrilschwert +achievement.brass_maker.desc=Kombiniere Kupferpulver und Zinkpulver, um Messing herzustellen +achievement.bronze_maker.desc=Kombiniere Kupferpulver und Zinnpulver, um Bronze herzustellen +achievement.blocktastic.desc=Platziere einen Metallblock, der weder Eisen noch Gold ist +achievement.cupronickel_maker.desc=Kombiniere Kupferpulver und Nickelpulver, um Kupfernickel herzustellen +achievement.demon_slayer.desc=Trage eine vollständige Kalteisenrüstung und führe ein Kalteisenschwert +achievement.electrum_maker.desc=Kombiniere Silberpulver und Goldpulver, um Elektron herzustellen +achievement.geologist.desc=Stelle einen Hammer aus einem Metallblock her +achievement.invar_maker.desc=Kombiniere Eisenpulver und Nickelpulver, um Invar herzustellen +achievement.juggernaut.desc=Trage eine vollständige Adamantrüstung +achievement.metallurgy.desc=Stelle ein beliebiges Gemisch her +achievement.mithril_maker.desc=Kombiniere Silverpulver, Kalteisenpulver und Quecksilberpulver, um Mithril herzustellen +achievement.moon_boots.desc=Trage ein Paar Sternenstahlstiefel +achievement.scuba_diver.desc=Trage eine vollständige Aquariumrüstung und tauche im Wasser +achievement.steel_maker.desc=Kombiniere Eisenpulver mit Holzkohlepulver, um Stahl herzustellen +achievement.this_is_new.desc=Schmelze ein neues Metall des Base Metals Mod + +#axts +item.basemetals.adamantine_axe.name=Adamantaxt +item.basemetals.aquarium_axe.name=Aquariumaxt +item.basemetals.antimony_axe.name=Antimonaxt +item.basemetals.bismuth_axe.name=Bismuthaxt +item.basemetals.brass_axe.name=Messingaxt +item.basemetals.bronze_axe.name=Bronzeaxt +item.basemetals.coldiron_axe.name=Kalteisenaxt +item.basemetals.copper_axe.name=Kupferaxt +item.basemetals.cupronickel_axe.name=Kupfernickelaxt +item.basemetals.electrum_axe.name=Elektronaxt +item.basemetals.emerald_axe.name=Smaragdaxt +item.basemetals.invar_axe.name=Invaraxt +item.basemetals.lead_axe.name=Bleiaxt +item.basemetals.mithril_axe.name=Mithrilaxt +item.basemetals.nickel_axe.name=Nickelaxt +item.basemetals.obsidian_axe.name=Obsdidianaxt +item.basemetals.pewter_axe.name=Hartzinnaxt +item.basemetals.platinum_axe.name=Platinaxt +item.basemetals.quartz_axe.name=Quartzaxt +item.basemetals.silver_axe.name=Silberaxt +item.basemetals.starsteel_axe.name=Sternenstahlaxt +item.basemetals.steel_axe.name=Stahlaxt +item.basemetals.tin_axe.name=Zinnaxt +item.basemetals.zinc_axe.name=Zinkaxt + +#swords +item.basemetals.adamantine_sword.name=Adamantschwert +item.basemetals.aquarium_sword.name=Aquariumschwert +item.basemetals.antimony_sword.name=Antimonschwert +item.basemetals.bismuth_sword.name=Bismuthschwert +item.basemetals.brass_sword.name=Messingschwert +item.basemetals.bronze_sword.name=Bronzeschwert +item.basemetals.coldiron_sword.name=Kalteisenschwert +item.basemetals.copper_sword.name=Kupferschwert +item.basemetals.cupronickel_sword.name=Kupfernickelschwert +item.basemetals.electrum_sword.name=Elektronschwert +item.basemetals.emerald_sword.name=Smaragdschwert +item.basemetals.invar_sword.name=Invarschwert +item.basemetals.lead_sword.name=Bleischwert +item.basemetals.mithril_sword.name=Mithrilschwert +item.basemetals.obsidian_sword.name=Obsidianschwert +item.basemetals.nickel_sword.name=Nickelschwert +item.basemetals.quartz_sword.name=Quartzschwert +item.basemetals.pewter_sword.name=Hartzinnschwert +item.basemetals.platinum_sword.name=Platinschwert +item.basemetals.silver_sword.name=Silberschwert +item.basemetals.starsteel_sword.name=Sternenstahlschwert +item.basemetals.steel_sword.name=Stahlschwert +item.basemetals.tin_sword.name=Zinnschwert +item.basemetals.zinc_sword.name=Zinkschwert + +#spitzhackes +item.basemetals.adamantine_pickaxe.name=Adamantspitzhacke +item.basemetals.aquarium_pickaxe.name=Aquariumspitzhacke +item.basemetals.antimony_pickaxe.name=Antimonspitzhacke +item.basemetals.bismuth_pickaxe.name=Bismuthspitzhacke +item.basemetals.brass_pickaxe.name=Messingspitzhacke +item.basemetals.bronze_pickaxe.name=Bronzespitzhacke +item.basemetals.coldiron_pickaxe.name=Kalteisenspitzhacke +item.basemetals.copper_pickaxe.name=Kupferspitzhacke +item.basemetals.cupronickel_pickaxe.name=Kupfernickelspitzhacke +item.basemetals.electrum_pickaxe.name=Elektronspitzhacke +item.basemetals.emerald_pickaxe.name=Smaragdspitzhacke +item.basemetals.invar_pickaxe.name=Invarspitzhacke +item.basemetals.lead_pickaxe.name=Bleispitzhacke +item.basemetals.mithril_pickaxe.name=Mithrilspitzhacke +item.basemetals.nickel_pickaxe.name=Nickelspitzhacke +item.basemetals.obsidian_pickaxe.name=Obsidianspitzhacke +item.basemetals.pewter_pickaxe.name=Hartzinnspitzhacke +item.basemetals.platinum_pickaxe.name=Platinspitzhacke +item.basemetals.quartz_pickaxe.name=Quartzspitzhacke +item.basemetals.silver_pickaxe.name=Silberspitzhacke +item.basemetals.starsteel_pickaxe.name=Sternenstahlspitzhacke +item.basemetals.steel_pickaxe.name=Stahlspitzhacke +item.basemetals.tin_pickaxe.name=Zinnspitzhacke +item.basemetals.zinc_pickaxe.name=Zinkspitzhacke + +#schaufels +item.basemetals.adamantine_shovel.name=Adamantschaufel +item.basemetals.aquarium_shovel.name=Aquariumschaufel +item.basemetals.antimony_shovel.name=Antimonschaufel +item.basemetals.bismuth_shovel.name=Bismuthschaufel +item.basemetals.brass_shovel.name=Messingschaufel +item.basemetals.bronze_shovel.name=Bronzeschaufel +item.basemetals.coldiron_shovel.name=Kalteisenschaufel +item.basemetals.copper_shovel.name=Kupferschaufel +item.basemetals.cupronickel_shovel.name=Kupfernickelschaufel +item.basemetals.electrum_shovel.name=Elektronschaufel +item.basemetals.emerald_shovel.name=Smaragdschaufel +item.basemetals.invar_shovel.name=Invarschaufel +item.basemetals.lead_shovel.name=Bleischaufel +item.basemetals.mithril_shovel.name=Mithrilschaufel +item.basemetals.nickel_shovel.name=Nickelschaufel +item.basemetals.obsidian_shovel.name=Obsidianschaufel +item.basemetals.pewter_shovel.name=Hartzinnschaufel +item.basemetals.platinum_shovel.name=Platinschaufel +item.basemetals.quartz_shovel.name=Quartzschaufel +item.basemetals.silver_shovel.name=Silberschaufel +item.basemetals.starsteel_shovel.name=Sternenstahlschaufel +item.basemetals.steel_shovel.name=Stahlschaufel +item.basemetals.tin_shovel.name=Zinnschaufel +item.basemetals.zinc_shovel.name=Zinkschaufel + +#hackes +item.basemetals.adamantine_hoe.name=Adamanthacke +item.basemetals.aquarium_hoe.name=Aquariumhacke +item.basemetals.antimony_hoe.name=Antimonhacke +item.basemetals.bismuth_hoe.name=Bismuthhacke +item.basemetals.brass_hoe.name=Messinghacke +item.basemetals.bronze_hoe.name=Bronzehacke +item.basemetals.coldiron_hoe.name=Kalteisenhacke +item.basemetals.copper_hoe.name=Kupferhacke +item.basemetals.cupronickel_hoe.name=Kupfernickelhacke +item.basemetals.electrum_hoe.name=Elektronhacke +item.basemetals.emerald_hoe.name=Smaragdhacke +item.basemetals.invar_hoe.name=Invarhacke +item.basemetals.lead_hoe.name=Bleihacke +item.basemetals.mithril_hoe.name=Mithrilhacke +item.basemetals.nickel_hoe.name=Nickelhacke +item.basemetals.obsidian_hoe.name=Obsidianhacke +item.basemetals.pewter_hoe.name=Hartzinnhacke +item.basemetals.platinum_hoe.name=Platinhacke +item.basemetals.quartz_hoe.name=Quartzhacke +item.basemetals.silver_hoe.name=Silberhacke +item.basemetals.starsteel_hoe.name=Sternenstahlhacke +item.basemetals.steel_hoe.name=Stahlhacke +item.basemetals.tin_hoe.name=Zinnhacke +item.basemetals.zinc_hoe.name=Zinkhacke + +#Crackhammers +item.basemetals.adamantine_crackhammer.name=Adamantbruchhammer +item.basemetals.aquarium_crackhammer.name=Aquariumbruchhammer +item.basemetals.antimony_crackhammer.name=Antimonbruchhammer +item.basemetals.bismuth_crackhammer.name=Bismuthbruchhammer +item.basemetals.brass_crackhammer.name=Messingbruchhammer +item.basemetals.bronze_crackhammer.name=Bronzebruchhammer +item.basemetals.coldiron_crackhammer.name=Kalteisenbruchhammer +item.basemetals.copper_crackhammer.name=Kupferbruchhammer +item.basemetals.cupronickel_crackhammer.name=Kupfernickelbruchhammer +item.basemetals.diamond_crackhammer.name=Diamantbruchhammer +item.basemetals.electrum_crackhammer.name=Elektronbruchhammer +item.basemetals.emerald_crackhammer.name=Smaragdbruchhammer +item.basemetals.gold_crackhammer.name=Goldenbruchhammer +item.basemetals.invar_crackhammer.name=Invarbruchhammer +item.basemetals.iron_crackhammer.name=Eisenbruchhammer +item.basemetals.lead_crackhammer.name=Bleibruchhammer +item.basemetals.mithril_crackhammer.name=Mithrilbruchhammer +item.basemetals.obsidian_crackhammer.name=Obsidianbruchhammer +item.basemetals.platinum_crackhammer.name=Platinbruchhammer +item.basemetals.pewter_crackhammer.name=Hartzinnbruchhammer +item.basemetals.quartz_crackhammer.name=Quartzbruchhammer +item.basemetals.nickel_crackhammer.name=Nickelbruchhammer +item.basemetals.silver_crackhammer.name=Silberbruchhammer +item.basemetals.starsteel_crackhammer.name=Sternenstahlbruchhammer +item.basemetals.steel_crackhammer.name=Stahlbruchhammer +item.basemetals.stone_crackhammer.name=Stonebruchhammer +item.basemetals.tin_crackhammer.name=Zinnbruchhammer +item.basemetals.wood_crackhammer.name=Holzbruchhammer +item.basemetals.zinc_crackhammer.name=Zinkbruchhammer + +#schere +item.basemetals.adamantine_shears.name=Adamantschere +item.basemetals.aquarium_shears.name=Aquariumschere +item.basemetals.antimony_shears.name=Antimonschere +item.basemetals.bismuth_shears.name=Bismuthschere +item.basemetals.brass_shears.name=Messingschere +item.basemetals.bronze_shears.name=Bronzeschere +item.basemetals.coldiron_shears.name=Kalteisenschere +item.basemetals.copper_shears.name=Kupferschere +item.basemetals.cupronickel_shears.name=Kupfernickelschere +item.basemetals.diamond_shears.name=Diamantschere +item.basemetals.electrum_shears.name=Elektronschere +item.basemetals.emerald_shears.name=Smaragdschere +item.basemetals.gold_shears.name=Goldschere +item.basemetals.invar_shears.name=Invarschere +item.basemetals.lead_shears.name=Bleischere +item.basemetals.mithril_shears.name=Mithrilschere +item.basemetals.nickel_shears.name=Nickelschere +item.basemetals.obsidian_shears.name=Obsidianschere +item.basemetals.pewter_shears.name=Hartzinnschere +item.basemetals.platinum_shears.name=Platinschere +item.basemetals.quartz_shears.name=Quartzschere +item.basemetals.silver_shears.name=Silberschere +item.basemetals.starsteel_shears.name=Sternenstahlschere +item.basemetals.steel_shears.name=Stahlschere +item.basemetals.tin_shears.name=Zinnschere +item.basemetals.zinc_shears.name=Zinkschere + +#bogen +item.basemetals.adamantine_bow.name=Adamantbogen +item.basemetals.aquarium_bow.name=Aquariumbogen +item.basemetals.antimony_bow.name=Antimonbogen +item.basemetals.bismuth_bow.name=Bismuthbogen +item.basemetals.brass_bow.name=Messingbogen +item.basemetals.bronze_bow.name=Bronzebogen +item.basemetals.coldiron_bow.name=Kalteisenbogen +item.basemetals.copper_bow.name=Kupferbogen +item.basemetals.cupronickel_bow.name=Kupfernickelbogen +item.basemetals.diamond_bow.name=Diamantbogen +item.basemetals.electrum_bow.name=Elektronbogen +item.basemetals.emerald_bow.name=Smaragdbogen +item.basemetals.gold_bow.name=Goldbogen +item.basemetals.invar_bow.name=Invarbogen +item.basemetals.iron_bow.name=Eisenbogen +item.basemetals.lead_bow.name=Bleibogen +item.basemetals.mithril_bow.name=Mithrilbogen +item.basemetals.nickel_bow.name=Nickelbogen +item.basemetals.obsidian_bow.name=Obsidianbogen +item.basemetals.pewter_bow.name=Hartzinnbogen +item.basemetals.platinum_bow.name=Platinbogen +item.basemetals.quartz_bow.name=Quartzbogen +item.basemetals.silver_bow.name=Silberbogen +item.basemetals.starsteel_bow.name=Sternenstahlbogen +item.basemetals.steel_bow.name=Stahlbogen +item.basemetals.tin_bow.name=Zinnbogen +item.basemetals.zinc_bow.name=Zinkbogen + +#armbrust +item.basemetals.adamantine_crossbow.name=Adamantarmbrust +item.basemetals.aquarium_crossbow.name=Aquariumarmbrust +item.basemetals.antimony_crossbow.name=Antimonarmbrust +item.basemetals.bismuth_crossbow.name=Bismutharmbrust +item.basemetals.brass_crossbow.name=Messingarmbrust +item.basemetals.bronze_crossbow.name=Bronzearmbrust +item.basemetals.coldiron_crossbow.name=Kalteisenarmbrust +item.basemetals.copper_crossbow.name=Kupferarmbrust +item.basemetals.cupronickel_crossbow.name=Kupfernickelarmbrust +item.basemetals.diamond_crossbow.name=Diamantarmbrust +item.basemetals.electrum_crossbow.name=Elektronarmbrust +item.basemetals.emerald_crossbow.name=Smaragdarmbrust +item.basemetals.gold_crossbow.name=Goldarmbrust +item.basemetals.invar_crossbow.name=Invararmbrust +item.basemetals.iron_crossbow.name=Eisenarmbrust +item.basemetals.lead_crossbow.name=Bleiarmbrust +item.basemetals.mithril_crossbow.name=Mithrilarmbrust +item.basemetals.nickel_crossbow.name=Nickelarmbrust +item.basemetals.obsidian_crossbow.name=Obsidianarmbrust +item.basemetals.pewter_crossbow.name=Hartzinnarmbrust +item.basemetals.platinum_crossbow.name=Platinarmbrust +item.basemetals.quartz_crossbow.name=Quartzarmbrust +item.basemetals.silver_crossbow.name=Silberarmbrust +item.basemetals.starsteel_crossbow.name=Sternenstahlarmbrust +item.basemetals.steel_crossbow.name=Stahlarmbrust +item.basemetals.tin_crossbow.name=Zinnarmbrust +item.basemetals.zinc_crossbow.name=Zinkarmbrust + +#angels +item.basemetals.adamantine_fishing_rod.name=Adamantangel +item.basemetals.aquarium_fishing_rod.name=Aquariumangel +item.basemetals.antimony_fishing_rod.name=Antimonangel +item.basemetals.bismuth_fishing_rod.name=Bismuthangel +item.basemetals.brass_fishing_rod.name=Messingangel +item.basemetals.bronze_fishing_rod.name=Bronzeangel +item.basemetals.coldiron_fishing_rod.name=Kalteisenangel +item.basemetals.copper_fishing_rod.name=Kupferangel +item.basemetals.cupronickel_fishing_rod.name=Kupfernickelangel +item.basemetals.diamond_fishing_rod.name=Diamantangel +item.basemetals.electrum_fishing_rod.name=Elektronangel +item.basemetals.emerald_fishing_rod.name=Smaragdangel +item.basemetals.gold_fishing_rod.name=Goldangel +item.basemetals.invar_fishing_rod.name=Invarangel +item.basemetals.iron_fishing_rod.name=Eisenangel +item.basemetals.lead_fishing_rod.name=Bleiangel +item.basemetals.mithril_fishing_rod.name=Mithrilangel +item.basemetals.nickel_fishing_rod.name=Nickelangel +item.basemetals.obsidian_fishing_rod.name=Obsidianangel +item.basemetals.pewter_fishing_rod.name=Hartzinnangel +item.basemetals.platinum_fishing_rod.name=Platinangel +item.basemetals.quartz_fishing_rod.name=Quartzangel +item.basemetals.silver_fishing_rod.name=Silberangel +item.basemetals.starsteel_fishing_rod.name=Sternenstahlangel +item.basemetals.steel_fishing_rod.name=Stahlangel +item.basemetals.tin_fishing_rod.name=Zinnangel +item.basemetals.zinc_fishing_rod.name=Zinkangel + +#schilds +item.basemetals.adamantine_shield.name=Adamantschild +item.basemetals.aquarium_shield.name=Aquariumschild +item.basemetals.antimony_shield.name=Antimonschild +item.basemetals.bismuth_shield.name=Bismuthschild +item.basemetals.brass_shield.name=Messingschild +item.basemetals.bronze_shield.name=Bronzeschild +item.basemetals.coldiron_shield.name=Kalteisenschild +item.basemetals.copper_shield.name=Kupferschild +item.basemetals.cupronickel_shield.name=Kupfernickelschild +item.basemetals.diamond_shield.name=Diamantschild +item.basemetals.electrum_shield.name=Elektronschild +item.basemetals.emerald_shield.name=Smaragdschild +item.basemetals.gold_shield.name=Goldschild +item.basemetals.invar_shield.name=Invarschild +item.basemetals.iron_shield.name=Eisenschild +item.basemetals.lead_shield.name=Bleischild +item.basemetals.mithril_shield.name=Mithrilschild +item.basemetals.obsidian_shield.name=Obsidianschild +item.basemetals.nickel_shield.name=Nickelschild +item.basemetals.pewter_shield.name=Hartzinnschild +item.basemetals.platinum_shield.name=Platinschild +item.basemetals.quartz_shield.name=Quartzschild +item.basemetals.silver_shield.name=Silberschild +item.basemetals.starsteel_shield.name=Sternenstahlschild +item.basemetals.steel_shield.name=Stahlschild +item.basemetals.tin_shield.name=Zinnschild +item.basemetals.zinc_shield.name=Zinkschild + +#pfeil +item.basemetals.adamantine_arrow.name=Adamantpfeil +item.basemetals.aquarium_arrow.name=Aquariumpfeil +item.basemetals.antimony_arrow.name=Antimonpfeil +item.basemetals.bismuth_arrow.name=Bismuthpfeil +item.basemetals.brass_arrow.name=Messingpfeil +item.basemetals.bronze_arrow.name=Bronzepfeil +item.basemetals.coldiron_arrow.name=Kalteisenpfeil +item.basemetals.copper_arrow.name=Kupferpfeil +item.basemetals.cupronickel_arrow.name=Kupfernickelpfeil +item.basemetals.diamond_arrow.name=Diamantpfeil +item.basemetals.electrum_arrow.name=Elektronpfeil +item.basemetals.emerald_arrow.name=Smaragdpfeil +item.basemetals.gold_arrow.name=Goldpfeil +item.basemetals.invar_arrow.name=Invarpfeil +item.basemetals.iron_arrow.name=Eisenpfeil +item.basemetals.lead_arrow.name=Bleipfeil +item.basemetals.mithril_arrow.name=Mithrilpfeil +item.basemetals.nickel_arrow.name=Nickelpfeil +item.basemetals.obsidian_arrow.name=Obsidianpfeil +item.basemetals.pewter_arrow.name=Hartzinnpfeil +item.basemetals.platinum_arrow.name=Platinpfeil +item.basemetals.quartz_arrow.name=Quartzpfeil +item.basemetals.silver_arrow.name=Silberpfeil +item.basemetals.starsteel_arrow.name=Sternenstahlpfeil +item.basemetals.steel_arrow.name=Stahlpfeil +item.basemetals.tin_arrow.name=Zinnpfeil +item.basemetals.zinc_arrow.name=Zinkpfeil + +#bolzen +item.basemetals.adamantine_bolt.name=Adamantbolzen +item.basemetals.aquarium_bolt.name=Aquariumbolzen +item.basemetals.antimony_bolt.name=Antimonbolzen +item.basemetals.bismuth_bolt.name=Bismuthbolzen +item.basemetals.brass_bolt.name=Messingbolzen +item.basemetals.bronze_bolt.name=Bronzebolzen +item.basemetals.coldiron_bolt.name=Kalteisenbolzen +item.basemetals.copper_bolt.name=Kupferbolzen +item.basemetals.cupronickel_bolt.name=Kupfernickelbolzen +item.basemetals.diamond_bolt.name=Diamantbolzen +item.basemetals.electrum_bolt.name=Elektronbolzen +item.basemetals.emerald_bolt.name=Smaragdbolzen +item.basemetals.gold_bolt.name=Goldbolzen +item.basemetals.invar_bolt.name=Invarbolzen +item.basemetals.iron_bolt.name=Eisenbolzen +item.basemetals.lead_bolt.name=Bleibolzen +item.basemetals.mithril_bolt.name=Mithrilbolzen +item.basemetals.nickel_bolt.name=Nickelbolzen +item.basemetals.obsidian_bolt.name=Obsidianbolzen +item.basemetals.pewter_bolt.name=Hartzinnbolzen +item.basemetals.platinum_bolt.name=Platinbolzen +item.basemetals.quartz_bolt.name=Quartzbolzen +item.basemetals.silver_bolt.name=Silberbolzen +item.basemetals.starsteel_bolt.name=Sternenstahlbolzen +item.basemetals.steel_bolt.name=Stahlbolzen +item.basemetals.tin_bolt.name=Zinnbolzen +item.basemetals.zinc_bolt.name=Zinkbolzen + +#Armor Sets + #Adamant +item.basemetals.adamantine_boots.name=Adamantstiefel +item.basemetals.adamantine_chestplate.name=Adamantbrustpanzer +item.basemetals.adamantine_helmet.name=Adamanthelm +item.basemetals.adamantine_leggings.name=Adamantbeinpanzer + #Aquarium +item.basemetals.aquarium_boots.name=Aquariumstiefel +item.basemetals.aquarium_chestplate.name=Aquariumbrustpanzer +item.basemetals.aquarium_helmet.name=Aquariumhelm +item.basemetals.aquarium_leggings.name=Aquariumbeinpanzer + #Antimon +item.basemetals.antimony_boots.name=Antimonstiefel +item.basemetals.antimony_chestplate.name=Antimonbrustpanzer +item.basemetals.antimony_helmet.name=Antimonhelm +item.basemetals.antimony_leggings.name=Antimonbeinpanzer + #Bismuth +item.basemetals.bismuth_boots.name=Bismuthstiefel +item.basemetals.bismuth_chestplate.name=Bismuthbrustpanzer +item.basemetals.bismuth_helmet.name=Bismuthhelm +item.basemetals.bismuth_leggings.name=Bismuthbeinpanzer + #Messing +item.basemetals.brass_boots.name=Messingstiefel +item.basemetals.brass_chestplate.name=Messingbrustpanzer +item.basemetals.brass_helmet.name=Messinghelm +item.basemetals.brass_leggings.name=Messingbeinpanzer + #Bronze +item.basemetals.bronze_boots.name=Bronzestiefel +item.basemetals.bronze_chestplate.name=Bronzebrustpanzer +item.basemetals.bronze_helmet.name=Bronzehelm +item.basemetals.bronze_leggings.name=Bronzebeinpanzer + #Kalteisen +item.basemetals.coldiron_boots.name=Kalteisenstiefel +item.basemetals.coldiron_chestplate.name=Kalteisenbrustpanzer +item.basemetals.coldiron_helmet.name=Kalteisenhelm +item.basemetals.coldiron_leggings.name=Kalteisenbeinpanzer + #Kupfer +item.basemetals.copper_boots.name=Kupferstiefel +item.basemetals.copper_chestplate.name=Kupferbrustpanzer +item.basemetals.copper_helmet.name=Kupferhelm +item.basemetals.copper_leggings.name=Kupferbeinpanzer + #Kupfernickel +item.basemetals.cupronickel_boots.name=Kupfernickelstiefel +item.basemetals.cupronickel_chestplate.name=Kupfernickelbrustpanzer +item.basemetals.cupronickel_helmet.name=Kupfernickelhelm +item.basemetals.cupronickel_leggings.name=Kupfernickelbeinpanzer + #Elektron +item.basemetals.electrum_boots.name=Elektronstiefel +item.basemetals.electrum_chestplate.name=Elektronbrustpanzer +item.basemetals.electrum_helmet.name=Elektronhelm +item.basemetals.electrum_leggings.name=Elektronbeinpanzer + #Smaragd +item.basemetals.emerald_boots.name=Smaragdstiefel +item.basemetals.emerald_chestplate.name=Smaragdbrustpanzer +item.basemetals.emerald_helmet.name=Smaragdhelm +item.basemetals.emerald_leggings.name=Smaragdbeinpanzer + #Invar +item.basemetals.invar_boots.name=Invarstiefel +item.basemetals.invar_chestplate.name=Invarbrustpanzer +item.basemetals.invar_helmet.name=Invarhelm +item.basemetals.invar_leggings.name=Invarbeinpanzer + #Blei +item.basemetals.lead_boots.name=Bleistiefel +item.basemetals.lead_chestplate.name=Bleibrustpanzer +item.basemetals.lead_helmet.name=Bleihelm +item.basemetals.lead_leggings.name=Bleibeinpanzer + #Mithril +item.basemetals.mithril_boots.name=Mithrilstiefel +item.basemetals.mithril_chestplate.name=Mithrilbrustpanzer +item.basemetals.mithril_helmet.name=Mithrilhelm +item.basemetals.mithril_leggings.name=Mithrilbeinpanzer + #Nickel +item.basemetals.nickel_boots.name=Nickelstiefel +item.basemetals.nickel_chestplate.name=Nickelbrustpanzer +item.basemetals.nickel_helmet.name=Nickelhelm +item.basemetals.nickel_leggings.name=Nickelbeinpanzer + #Obsidian +item.basemetals.obsidian_boots.name=Obsidianstiefel +item.basemetals.obsidian_chestplate.name=Obsidianbrustpanzer +item.basemetals.obsidian_helmet.name=Obsidianhelm +item.basemetals.obsidian_leggings.name=Obsidianbeinpanzer + #Hartzinn +item.basemetals.pewter_boots.name=Hartzinnstiefel +item.basemetals.pewter_chestplate.name=Hartzinnbrustpanzer +item.basemetals.pewter_helmet.name=Hartzinnhelm +item.basemetals.pewter_leggings.name=Hartzinnbeinpanzer + #Platin +item.basemetals.platinum_boots.name=Platinstiefel +item.basemetals.platinum_chestplate.name=Platinbrustpanzer +item.basemetals.platinum_helmet.name=Platinhelm +item.basemetals.platinum_leggings.name=Platinbeinpanzer + #Quartz +item.basemetals.quartz_boots.name=Quartzstiefel +item.basemetals.quartz_chestplate.name=Quartzbrustpanzer +item.basemetals.quartz_helmet.name=Quartzhelm +item.basemetals.quartz_leggings.name=Quartzbeinpanzer + #Silber +item.basemetals.silver_boots.name=Silberstiefel +item.basemetals.silver_chestplate.name=Silberbrustpanzer +item.basemetals.silver_helmet.name=Silberhelm +item.basemetals.silver_leggings.name=Silberbeinpanzer + #Sternenstahl +item.basemetals.starsteel_boots.name=Sternenstahlstiefel +item.basemetals.starsteel_chestplate.name=Sternenstahlbrustpanzer +item.basemetals.starsteel_helmet.name=Sternenstahlhelm +item.basemetals.starsteel_leggings.name=Sternenstahlbeinpanzer + #Stahl +item.basemetals.steel_boots.name=Stahlstiefel +item.basemetals.steel_chestplate.name=Stahlbrustpanzer +item.basemetals.steel_helmet.name=Stahlhelm +item.basemetals.steel_leggings.name=Stahlbeinpanzer + #Zinn +item.basemetals.tin_boots.name=Zinnstiefel +item.basemetals.tin_chestplate.name=Zinnbrustpanzer +item.basemetals.tin_helmet.name=Zinnhelm +item.basemetals.tin_leggings.name=Zinnbeinpanzer + #Zink +item.basemetals.zinc_boots.name=Zinkstiefel +item.basemetals.zinc_chestplate.name=Zinkbrustpanzer +item.basemetals.zinc_helmet.name=Zinkhelm +item.basemetals.zinc_leggings.name=Zinkbeinpanzer + +#pferderüstung +item.basemetals.adamantine_horsearmor.name=Adamantpferderüstung +item.basemetals.aquarium_horsearmor.name=Aquariumpferderüstung +item.basemetals.antimony_horsearmor.name=Antimonpferderüstung +item.basemetals.bismuth_horsearmor.name=Bismuthpferderüstung +item.basemetals.brass_horsearmor.name=Messingpferderüstung +item.basemetals.bronze_horsearmor.name=Bronzepferderüstung +item.basemetals.coldiron_horsearmor.name=Kalteisenpferderüstung +item.basemetals.copper_horsearmor.name=Kupferpferderüstung +item.basemetals.cupronickel_horsearmor.name=Kupfernickelpferderüstung +item.basemetals.electrum_horsearmor.name=Elektronpferderüstung +item.basemetals.emerald_horsearmor.name=Smaragdpferderüstung +item.basemetals.invar_horsearmor.name=Invarpferderüstung +item.basemetals.lead_horsearmor.name=Bleipferderüstung +item.basemetals.mercury_horsearmor.name=Quecksilberpferderüstung +item.basemetals.mithril_horsearmor.name=Mithrilpferderüstung +item.basemetals.nickel_horsearmor.name=Nickelpferderüstung +item.basemetals.obsidian_horsearmor.name=Obsidianpferderüstung +item.basemetals.pewter_horsearmor.name=Hartzinnpferderüstung +item.basemetals.platinum_horsearmor.name=Platinpferderüstung +item.basemetals.quartz_horsearmor.name=Quartzpferderüstung +item.basemetals.silver_horsearmor.name=Silberpferderüstung +item.basemetals.starsteel_horsearmor.name=Sternenstahlpferderüstung +item.basemetals.steel_horsearmor.name=Stahlpferderüstung +item.basemetals.tin_horsearmor.name=Zinnpferderüstung +item.basemetals.zinc_horsearmor.name=Zinkpferderüstung + +#barren +item.basemetals.adamantine_ingot.name=Adamantbarren +item.basemetals.aquarium_ingot.name=Aquariumbarren +item.basemetals.antimony_ingot.name=Antimonbarren +item.basemetals.bismuth_ingot.name=Bismuthbarren +item.basemetals.brass_ingot.name=Messingbarren +item.basemetals.bronze_ingot.name=Bronzebarren +item.basemetals.coldiron_ingot.name=Kalteisenbarren +item.basemetals.copper_ingot.name=Kupferbarren +item.basemetals.cupronickel_ingot.name=Kupfernickelbarren +item.basemetals.electrum_ingot.name=Elektronbarren +item.basemetals.invar_ingot.name=Invarbarren +item.basemetals.lead_ingot.name=Bleibarren +item.basemetals.mercury_ingot.name=Flüssiges Quecksilber +item.basemetals.mithril_ingot.name=Mithrilbarren +item.basemetals.nickel_ingot.name=Nickelbarren +item.basemetals.obsidian_ingot.name=Obsidianbarren +item.basemetals.pewter_ingot.name=Hartzinnbarren +item.basemetals.platinum_ingot.name=Platinbarren +item.basemetals.redstone_ingot.name=Redstonebarren +item.basemetals.silver_ingot.name=Silberbarren +item.basemetals.starsteel_ingot.name=Sternenstahlbarren +item.basemetals.steel_ingot.name=Stahlbarren +item.basemetals.tin_ingot.name=Zinnbarren +item.basemetals.zinc_ingot.name=Zinkbarren + +#gitter + #Item +item.basemetals.adamantine_bars.name=Adamantgitter +item.basemetals.aquarium_bars.name=Aquariumgitter +item.basemetals.antimony_bars.name=Antimongitter +item.basemetals.bismuth_bars.name=Bismuthgitter +item.basemetals.brass_bars.name=Messinggitter +item.basemetals.bronze_bars.name=Bronzegitter +item.basemetals.coldiron_bars.name=Kalteisengitter +item.basemetals.copper_bars.name=Kupfergitter +item.basemetals.cupronickel_bars.name=Kupfernickelgitter +item.basemetals.diamond_bars.name=Diamantgitter +item.basemetals.electrum_bars.name=Elektrongitter +item.basemetals.emerald_bars.name=Smaragdgitter +item.basemetals.gold_bars.name=Goldgitter +item.basemetals.invar_bars.name=Invargitter +item.basemetals.lead_bars.name=Bleigitter +item.basemetals.mithril_bars.name=Mithrilgitter +item.basemetals.nickel_bars.name=Nickelgitter +item.basemetals.obsidian_bars.name=Obsidiangitter +item.basemetals.pewter_bars.name=Hartzinngitter +item.basemetals.platinum_bars.name=Platingitter +item.basemetals.quartz_bars.name=Quartzgitter +item.basemetals.silver_bars.name=Silbergitter +item.basemetals.starsteel_bars.name=Sternenstahlgitter +item.basemetals.steel_bars.name=Stahlgitter +item.basemetals.tin_bars.name=Zinngitter +item.basemetals.zinc_bars.name=Zinkgitter + #Tile +tile.basemetals.adamantine_bars.name=Adamantgitter +tile.basemetals.aquarium_bars.name=Aquariumgitter +tile.basemetals.antimony_bars.name=Antimongitter +tile.basemetals.bismuth_bars.name=Bismuthgitter +tile.basemetals.brass_bars.name=Messinggitter +tile.basemetals.bronze_bars.name=Bronzegitter +tile.basemetals.coldiron_bars.name=Kalteisengitter +tile.basemetals.copper_bars.name=Kupfergitter +tile.basemetals.cupronickel_bars.name=Kupfernickelgitter +tile.basemetals.diamond_bars.name=Diamantgitter +tile.basemetals.electrum_bars.name=Elektrongitter +tile.basemetals.emerald_bars.name=Smaragdgitter +tile.basemetals.gold_bars.name=Goldgitter +tile.basemetals.invar_bars.name=Invargitter +tile.basemetals.lead_bars.name=Bleigitter +tile.basemetals.mithril_bars.name=Mithrilgitter +tile.basemetals.nickel_bars.name=Nickelgitter +tile.basemetals.obsidian_bars.name=Obsidiangitter +tile.basemetals.pewter_bars.name=Hartzinngitter +tile.basemetals.platinum_bars.name=Platingitter +tile.basemetals.quartz_bars.name=Quartzgitter +tile.basemetals.silver_bars.name=Silbergitter +tile.basemetals.starsteel_bars.name=Sternenstahlgitter +tile.basemetals.steel_bars.name=Stahlgitter +tile.basemetals.tin_bars.name=Zinngitter +tile.basemetals.zinc_bars.name=Zinkgitter + +#nugget +item.basemetals.adamantine_nugget.name=Adamantnugget +item.basemetals.aquarium_nugget.name=Aquariumnugget +item.basemetals.antimony_nugget.name=Antimonnugget +item.basemetals.bismuth_nugget.name=Bismuthnugget +item.basemetals.brass_nugget.name=Messingnugget +item.basemetals.bronze_nugget.name=Bronzenugget +item.basemetals.charcoal_nugget.name=Charcoalnugget +item.basemetals.coal_nugget.name=Coalnugget +item.basemetals.coldiron_nugget.name=Kalteisennugget +item.basemetals.copper_nugget.name=Kupfernugget +item.basemetals.cupronickel_nugget.name=Kupfernickelnugget +item.basemetals.diamond_nugget.name=Diamant Fragment +item.basemetals.electrum_nugget.name=Elektronnugget +item.basemetals.emerald_nugget.name=Smaragd Fragment +item.basemetals.invar_nugget.name=Invarnugget +item.basemetals.iron_nugget.name=Eisennugget +item.basemetals.lead_nugget.name=Bleinugget +item.basemetals.mercury_nugget.name=Kleiner Tropfen flüssiges Quecksilber +item.basemetals.mithril_nugget.name=Mithrilnugget +item.basemetals.nickel_nugget.name=Nickelnugget +item.basemetals.obsidian_nugget.name=Obsidian Fragment +item.basemetals.pewter_nugget.name=Hartzinnnugget +item.basemetals.platinum_nugget.name=Platinnugget +item.basemetals.quartz_nugget.name=Quartz Fragment +item.basemetals.silver_nugget.name=Silbernugget +item.basemetals.starsteel_nugget.name=Sternenstahlnugget +item.basemetals.steel_nugget.name=Stahlnugget +item.basemetals.tin_nugget.name=Zinnnugget +item.basemetals.zinc_nugget.name=Zinknugget + +#Powdered +item.basemetals.adamantine_powder.name=Adamantpulver +item.basemetals.aquarium_powder.name=Aquariumpulver +item.basemetals.antimony_powder.name=Antimonpulver +item.basemetals.bismuth_powder.name=Bismuthpulver +item.basemetals.brass_powder.name=Messingpulver +item.basemetals.bronze_powder.name=Bronzepulver +item.basemetals.carbon_powder.name=Kohlenstoffpulver +item.basemetals.coal_powder.name=Kohlepulver +item.basemetals.charcoal_powder.name=Holzkohlepulver +item.basemetals.coldiron_powder.name=Kalteisenpulver +item.basemetals.copper_powder.name=Kupferpulver +item.basemetals.cupronickel_powder.name=Kupfernickelpulver +item.basemetals.diamond_powder.name=Diamantpulver +item.basemetals.electrum_powder.name=Elektronpulver +item.basemetals.emerald_powder.name=Smaragdpulver +item.basemetals.gold_powder.name=Goldpulver +item.basemetals.invar_powder.name=Invarpulver +item.basemetals.iron_powder.name=Eisenpulver +item.basemetals.lead_powder.name=Bleipulver +item.basemetals.mercury_powder.name=Quecksilberpulver +item.basemetals.mithril_powder.name=Mithrilpulver +item.basemetals.nickel_powder.name=Nickelpulver +item.basemetals.obsidian_powder.name=Obsidianpulver +item.basemetals.pewter_powder.name=Hartzinnpulver +item.basemetals.platinum_powder.name=Platinpulver +item.basemetals.quartz_powder.name=Quartzpulver +item.basemetals.silver_powder.name=Silberpulver +item.basemetals.starsteel_powder.name=Sternenstahlpulver +item.basemetals.steel_powder.name=Stahlpulver +item.basemetals.tin_powder.name=Zinnpulver +item.basemetals.wood_powder.name=Sägemehl +item.basemetals.zinc_powder.name=Zinkpulver + +#Small Powders +item.basemetals.adamantine_smallpowder.name=Kleiner Adamantpulverhaufen +item.basemetals.aquarium_smallpowder.name=Kleiner Aquariumpulverhaufen +item.basemetals.antimony_smallpowder.name=Kleiner Antimonpulverhaufen +item.basemetals.bismuth_smallpowder.name=Kleiner Bismuthpulverhaufen +item.basemetals.brass_smallpowder.name=Kleiner Messingpulverhaufen +item.basemetals.bronze_smallpowder.name=Kleiner Bronzepulverhaufen +item.basemetals.carbon_smallpowder.name=Kleiner Kohlenstoffpulverhaufen +item.basemetals.coal_smallpowder.name=Kleiner Kohlepulverhaufen +item.basemetals.charcoal_smallpowder.name=Kleiner Holzkohlepulverhaufen +item.basemetals.coldiron_smallpowder.name=Kleiner Kalteisenpulverhaufen +item.basemetals.copper_smallpowder.name=Kleiner Kupferpulverhaufen +item.basemetals.cupronickel_smallpowder.name=Kleiner Kupfernickelpulverhaufen +item.basemetals.diamond_smallpowder.name=Kleiner Diamantpulverhaufen +item.basemetals.electrum_smallpowder.name=Kleiner Elektronpulverhaufen +item.basemetals.emerald_smallpowder.name=Kleiner Smaragdpulverhaufen +item.basemetals.gold_smallpowder.name=Kleiner Goldpulverhaufen +item.basemetals.invar_smallpowder.name=Kleiner Invarpulverhaufen +item.basemetals.iron_smallpowder.name=Kleiner Eisenpulverhaufen +item.basemetals.lapis_smallpowder.name=Kleiner Lapispulverhaufen +item.basemetals.lead_smallpowder.name=Kleiner Bleipulverhaufen +item.basemetals.mercury_smallpowder.name=Kleiner Quecksilberpulverhaufen +item.basemetals.mithril_smallpowder.name=Kleiner Mithrilpulverhaufen +item.basemetals.nickel_smallpowder.name=Kleiner Nickelpulverhaufen +item.basemetals.obsidian_smallpowder.name=Kleiner Obsidianpulverhaufen +item.basemetals.pewter_smallpowder.name=Kleiner Hartzinnpulverhaufen +item.basemetals.platinum_smallpowder.name=Kleiner Platinpulverhaufen +item.basemetals.quartz_smallpowder.name=Kleiner Quartzpulverhaufen +item.basemetals.redstone_smallpowder.name=Kleiner Redstonepulverhaufen +item.basemetals.silver_smallpowder.name=Kleiner Silberpulverhaufen +item.basemetals.starsteel_smallpowder.name=Kleiner Sternenstahlpulverhaufen +item.basemetals.steel_smallpowder.name=Kleiner Stahlpulverhaufen +item.basemetals.tin_smallpowder.name=Kleiner Zinnpulverhaufen +item.basemetals.wood_powder.name=Kleiner Sägemehlhaufen +item.basemetals.zinc_smallpowder.name=Kleiner Zinkpulverhaufen + +#Zerkleinertes +item.basemetals.adamantine_crushed.name=Zerkleinertes Adamant +item.basemetals.aquarium_crushed.name=Zerkleinertes Aquarium +item.basemetals.antimony_crushed.name=Zerkleinertes Antimon +item.basemetals.bismuth_crushed.name=Zerkleinertes Bismuth +item.basemetals.brass_crushed.name=Zerkleinertes Messing +item.basemetals.bronze_crushed.name=Zerkleinerte Bronze +item.basemetals.coldiron_crushed.name=Zerkleinertes Kalteisen +item.basemetals.copper_crushed.name=Zerkleinertes Kupfer +item.basemetals.cupronickel_crushed.name=Zerkleinertes Kupfernickel +item.basemetals.electrum_crushed.name=Zerkleinertes Elektron +item.basemetals.gold_crushed.name=Zerkleinertes Gold +item.basemetals.invar_crushed.name=Zerkleinertes Invar +item.basemetals.iron_crushed.name=Zerkleinertes Eisen +item.basemetals.lead_crushed.name=Zerkleinertes Blei +item.basemetals.mithril_crushed.name=Zerkleinertes Mithril +item.basemetals.nickel_crushed.name=Zerkleinertes Nickel +item.basemetals.pewter_crushed.name=Zerkleinertes Hartzinn +item.basemetals.platinum_crushed.name=Zerkleinertes Platin +item.basemetals.silver_crushed.name=Zerkleinertes Silber +item.basemetals.starsteel_crushed.name=Zerkleinerter Sternenstahl +item.basemetals.steel_crushed.name=Zerkleinerter Stahl +item.basemetals.tin_crushed.name=Zerkleinertes Zinn +item.basemetals.zinc_crushed.name=Zerkleinertes Zink + +#Zerkleinertes Purified +item.basemetals.adamantine_crushed_purified.name=Gereinigtes, zerkleinertes Adamant +item.basemetals.aquarium_crushed_purified.name=Gereinigtes, zerkleinertes Aquarium +item.basemetals.antimony_crushed_purified.name=Gereinigtes, zerkleinertes Antimon +item.basemetals.bismuth_crushed_purified.name=Gereinigtes, zerkleinertes Bismuth +item.basemetals.brass_crushed_purified.name=Gereinigtes, zerkleinertes Messing +item.basemetals.bronze_crushed_purified.name=Gereinigte, zerkleinerte Bronze +item.basemetals.coldiron_crushed_purified.name=Gereinigtes, zerkleinertes Kalteisen +item.basemetals.copper_crushed_purified.name=Gereinigtes, zerkleinertes Kupfer +item.basemetals.cupronickel_crushed_purified.name=Gereinigtes, zerkleinertes Kupfernickel +item.basemetals.electrum_crushed_purified.name=Gereinigtes, zerkleinertes Elektron +item.basemetals.gold_crushed_purified.name=Gereinigtes, zerkleinertes Gold +item.basemetals.invar_crushed_purified.name=Gereinigtes, zerkleinertes Invar +item.basemetals.iron_crushed_purified.name=Gereinigtes, zerkleinertes Eisen +item.basemetals.lead_crushed_purified.name=Gereinigtes, zerkleinertes Blei +item.basemetals.mithril_crushed_purified.name=Gereinigtes, zerkleinertes Mithril +item.basemetals.nickel_crushed_purified.name=Gereinigtes, zerkleinertes Nickel +item.basemetals.pewter_crushed_purified.name=Gereinigtes, zerkleinertes Hartzinn +item.basemetals.platinum_crushed_purified.name=Gereinigtes, zerkleinertes Platin +item.basemetals.silver_crushed_purified.name=Gereinigtes, zerkleinertes Silber +item.basemetals.starsteel_crushed_purified.name=Gereinigter, zerkleinerter Sternenstahl +item.basemetals.steel_crushed_purified.name=Gereinigter, zerkleinerter Stahl +item.basemetals.tin_crushed_purified.name=Gereinigtes, zerkleinertes Zinn +item.basemetals.zinc_crushed_purified.name=Gereinigtes, zerkleinertes Zink + +#erzs + #Item +item.basemetals.adamantine_ore.name=Adamanterz +item.basemetals.aquarium_ore.name=Aquariumerz +item.basemetals.antimony_ore.name=Antimonerz +item.basemetals.bismuth_ore.name=Bismutherz +item.basemetals.coldiron_ore.name=Kalteisenerz +item.basemetals.copper_ore.name=Kupfererz +item.basemetals.lead_ore.name=Bleierz +item.basemetals.mercury_ore.name=Quecksilbererz +item.basemetals.nickel_ore.name=Nickelerz +item.basemetals.pewter_ore.name=Hartzinnerz +item.basemetals.platinum_ore.name=Platinerz +item.basemetals.silver_ore.name=Silbererz +item.basemetals.starsteel_ore.name=Sternenstahlerz +item.basemetals.tin_ore.name=Zinnerz +item.basemetals.zinc_ore.name=Zinkerz + #Tile +tile.basemetals.adamantine_ore.name=Adamanterz +tile.basemetals.aquarium_ore.name=Aquariumerz +tile.basemetals.antimony_ore.name=Antimonerz +tile.basemetals.bismuth_ore.name=Bismutherz +tile.basemetals.coldiron_ore.name=Kalteisenerz +tile.basemetals.copper_ore.name=Kupfererz +tile.basemetals.lead_ore.name=Bleierz +tile.basemetals.mercury_ore.name=Quecksilbererz +tile.basemetals.nickel_ore.name=Nickelerz +tile.basemetals.pewter_ore.name=Hartzinnerz +tile.basemetals.platinum_ore.name=Platinerz +tile.basemetals.silver_ore.name=Silbererz +tile.basemetals.starsteel_ore.name=Sternenstahlerz +tile.basemetals.tin_ore.name=Zinnerz +tile.basemetals.zinc_ore.name=Zinkerz + +#gemischs +item.basemetals.aquarium_blend.name=Aquariumgemisch +item.basemetals.brass_blend.name=Messinggemisch +item.basemetals.bronze_blend.name=Bronzegemisch +item.basemetals.cupronickel_blend.name=Kupfernickelgemisch +item.basemetals.electrum_blend.name=Elektrongemisch +item.basemetals.invar_blend.name=Invargemisch +item.basemetals.mithril_blend.name=Mithrilgemisch +item.basemetals.pewter_blend.name=Hartzinngemisch +item.basemetals.steel_blend.name=Stahlgemisch + +#Smallgemischs +item.basemetals.aquarium_smallblend.name=Kleiner Aquariumgemischhaufen +item.basemetals.brass_smallblend.name=Kleiner Messinggemischhaufen +item.basemetals.bronze_smallblend.name=Kleiner Bronzegemischhaufen +item.basemetals.cupronickel_smallblend.name=Kleiner Kupfernickelgemischhaufen +item.basemetals.electrum_smallblend.name=Kleiner Elektrongemischhaufen +item.basemetals.invar_smallblend.name=Kleiner Invargemischhaufen +item.basemetals.mithril_smallblend.name=Kleiner Mithrilgemischhaufen +item.basemetals.pewter_smallblend.name=Kleiner Hartzinngemischhaufen +item.basemetals.steel_smallblend.name=Kleiner Stahlgemischhaufen + +#Block Of... + #Item +item.basemetals.adamantine_block.name=Adamantblock +item.basemetals.aquarium_block.name=Aquariumblock +item.basemetals.antimony_block.name=Antimonblock +item.basemetals.bismuth_block.name=Bismuthblock +item.basemetals.brass_block.name=Messingblock +item.basemetals.bronze_block.name=Bronzeblock +item.basemetals.charcoal_block.name=Charcoalblock +item.basemetals.coldiron_block.name=Kalteisenblock +item.basemetals.copper_block.name=Kupferblock +item.basemetals.platinum_block.name=Platinblock +item.basemetals.nickel_block.name=Nickelblock +item.basemetals.electrum_block.name=Elektronblock +item.basemetals.invar_block.name=Invarblock +item.basemetals.lead_block.name=Bleiblock +item.basemetals.mithril_block.name=Mithrilblock +item.basemetals.nickel_block.name=Nickelblock +item.basemetals.pewter_block.name=Hartzinnblock +item.basemetals.cupronickel_block.name=Kupfernickelblock +item.basemetals.silver_block.name=Silberblock +item.basemetals.starsteel_block.name=Sternenstahlblock +item.basemetals.steel_block.name=Stahlblock +item.basemetals.tin_block.name=Zinnblock +item.basemetals.zinc_block.name=Zinkblock + #Tile +tile.basemetals.adamantine_block.name=Adamantblock +tile.basemetals.aquarium_block.name=Aquariumblock +tile.basemetals.antimony_block.name=Antimonblock +tile.basemetals.bismuth_block.name=Bismuthblock +tile.basemetals.brass_block.name=Messingblock +tile.basemetals.bronze_block.name=Bronzeblock +tile.basemetals.charcoal_block.name=Charcoalblock +tile.basemetals.coldiron_block.name=Kalteisenblock +tile.basemetals.copper_block.name=Kupferblock +tile.basemetals.cupronickel_block.name=Kupfernickelblock +tile.basemetals.electrum_block.name=Elektronblock +tile.basemetals.invar_block.name=Invarblock +tile.basemetals.lead_block.name=Bleiblock +tile.basemetals.mithril_block.name=Mithrilblock +tile.basemetals.nickel_block.name=Nickelblock +tile.basemetals.pewter_block.name=Hartzinnblock +tile.basemetals.platinum_block.name=Platinblock +tile.basemetals.silver_block.name=Silberblock +tile.basemetals.starsteel_block.name=Sternenstahlblock +tile.basemetals.steel_block.name=Stahlblock +tile.basemetals.tin_block.name=Zinnblock +tile.basemetals.zinc_block.name=Zinkblock + +#Fluids + #Fluid +fluid.basemetals.mercury=Flüssiges Quecksilber +fluid.basemetals.adamantine=Geschmolzenes Adamant +fluid.basemetals.antimony=Geschmolzenes Antimon +fluid.basemetals.aquarium=Geschmolzenes Aquarium +fluid.basemetals.bismuth=Geschmolzenes Bismuth +fluid.basemetals.brass=Geschmolzenes Messing +fluid.basemetals.bronze=Geschmolzenes Bronze +fluid.basemetals.coldiron=Geschmolzenes Kalteisen +fluid.basemetals.copper=Geschmolzenes Kupfer +fluid.basemetals.cupronickel=Geschmolzenes Kupfernickel +fluid.basemetals.electrum=Geschmolzenes Elektron +fluid.basemetals.ender=Geschmolzenes Ender +fluid.basemetals.invar=Geschmolzenes Invar +fluid.basemetals.lead=Geschmolzenes Blei +fluid.basemetals.mithril=Geschmolzenes Mithril +fluid.basemetals.nickel=Geschmolzenes Nickel +fluid.basemetals.pewter=Geschmolzenes Hartzinn +fluid.basemetals.platinum=Geschmolzenes Platin +fluid.basemetals.silver=Geschmolzenes Silber +fluid.basemetals.starsteel=Geschmolzenes Sternenstahl +fluid.basemetals.steel=Geschmolzenes Stahl +fluid.basemetals.tin=Geschmolzenes Zinn +fluid.basemetals.zinc=Geschmolzenes Zink + #Fluid.name +fluid.basemetals.mercury.name=Flüssiges Quecksilber +fluid.basemetals.adamantine.name=Geschmolzenes Adamant +fluid.basemetals.antimony.name=Geschmolzenes Antimon +fluid.basemetals.aquarium.name=Geschmolzenes Aquarium +fluid.basemetals.bismuth.name=Geschmolzenes Bismuth +fluid.basemetals.brass.name=Geschmolzenes Messing +fluid.basemetals.bronze.name=Geschmolzenes Bronze +fluid.basemetals.charcoal.name=Liquifacted Charcoal +fluid.basemetals.coal.name=Liquifacted Coal +fluid.basemetals.coldiron.name=Geschmolzenes Kalteisen +fluid.basemetals.copper.name=Geschmolzenes Kupfer +fluid.basemetals.cupronickel.name=Geschmolzenes Kupfernickel +fluid.basemetals.diamond.name=Geschmolzenes Diamant +fluid.basemetals.electrum.name=Geschmolzenes Elektron +fluid.basemetals.electrum.name=Geschmolzenes Smaragd +fluid.basemetals.invar.name=Geschmolzenes Invar +fluid.basemetals.lead.name=Geschmolzenes Blei +fluid.basemetals.mithril.name=Geschmolzenes Mithril +fluid.basemetals.nickel.name=Geschmolzenes Nickel +fluid.basemetals.pewter.name=Geschmolzenes Hartzinn +fluid.basemetals.platinum.name=Geschmolzenes Platin +fluid.basemetals.prismarine.name=Geschmolzenes Prismarin +fluid.basemetals.redstone.name=Geschmolzenes Redstone +fluid.basemetals.silver.name=Geschmolzenes Silber +fluid.basemetals.starsteel.name=Geschmolzenes Sternenstahl +fluid.basemetals.steel.name=Geschmolzenes Stahl +fluid.basemetals.tin.name=Geschmolzenes Zinn +fluid.basemetals.zinc.name=Geschmolzenes Zink + #Tile +tile.basemetals.mercury.name=Flüssiges Quecksilber +tile.basemetals.adamantine.name=Geschmolzenes Adamant +tile.basemetals.antimony.name=Geschmolzenes Antimon +tile.basemetals.aquarium.name=Geschmolzenes Aquarium +tile.basemetals.bismuth.name=Geschmolzenes Bismuth +tile.basemetals.brass.name=Geschmolzenes Messing +tile.basemetals.bronze.name=Geschmolzenes Bronze +tile.basemetals.charcoal.name=Liquifacted Charcoal +tile.basemetals.coal.name=Liquifacted Coal +tile.basemetals.coldiron.name=Geschmolzenes Kalteisen +tile.basemetals.copper.name=Geschmolzenes Kupfer +tile.basemetals.cupronickel.name=Geschmolzenes Kupfernickel +tile.basemetals.diamond.name=Geschmolzenes Diamant +tile.basemetals.electrum.name=Geschmolzenes Elektron +tile.basemetals.emerald.name=Geschmolzenes Smaragd +tile.basemetals.ender.name=Geschmolzenes Ender +tile.basemetals.gold.name=Geschmolzenes Gold +tile.basemetals.invar.name=Geschmolzenes Invar +tile.basemetals.iron.name=Geschmolzenes Eisen +tile.basemetals.lead.name=Geschmolzenes Blei +tile.basemetals.mithril.name=Geschmolzenes Mithril +tile.basemetals.nickel.name=Geschmolzenes Nickel +tile.basemetals.obsidian.name=Geschmolzenes Obsidian +tile.basemetals.pewter.name=Geschmolzenes Hartzinn +tile.basemetals.platinum.name=Geschmolzenes Platin +tile.basemetals.prismarine.name=Geschmolzenes Prismarin +tile.basemetals.redstone.name=Geschmolzenes Redstone +tile.basemetals.silver.name=Geschmolzenes Silber +tile.basemetals.starsteel.name=Geschmolzenes Sternenstahl +tile.basemetals.steel.name=Geschmolzenes Stahl +tile.basemetals.tin.name=Geschmolzenes Zinn +tile.basemetals.zinc.name=Geschmolzenes Zink + #Bucket +item.bucket.mercury=Eimer mit Quecksilber +item.bucket.adamantine=Eimer mit geschmolzenem Adamant +item.bucket.antimony=Eimer mit geschmolzenem Antimon +item.bucket.aquarium=Eimer mit geschmolzenem Aquarium +item.bucket.bismuth=Eimer mit geschmolzenem Bismuth +item.bucket.brass=Eimer mit geschmolzenem Messing +item.bucket.bronze=Eimer mit geschmolzenem Bronze +item.bucket.charcoal=Eimer mit verflüssigter Holzkohle +item.bucket.coal=Eimer mit verflüssigter Kohle +item.bucket.coldiron=Eimer mit geschmolzenem Kalteisen +item.bucket.copper=Eimer mit geschmolzenem Kupfer +item.bucket.cupronickel=Eimer mit geschmolzenem Kupfernickel +item.bucket.diamond=Eimer mit geschmolzenem Diamant +item.bucket.electrum=Eimer mit geschmolzenem Elektron +item.bucket.emerald=Eimer mit geschmolzenem Smaragd +item.bucket.ender=Eimer mit geschmolzenem Ender +item.bucket.invar=Eimer mit geschmolzenem Invar +item.bucket.lead=Eimer mit geschmolzenem Blei +item.bucket.mithril=Eimer mit geschmolzenem Mithril +item.bucket.nickel=Eimer mit geschmolzenem Nickel +item.bucket.pewter=Eimer mit geschmolzenem Hartzinn +item.bucket.platinum=Eimer mit geschmolzenem Platin +item.bucket.prismarine=Eimer mit geschmolzenem Prismarin +item.bucket.redstone=Eimer mit geschmolzenem Redstone +item.bucket.silver=Eimer mit geschmolzenem Silber +item.bucket.starsteel=Eimer mit geschmolzenem Sternenstahl +item.bucket.steel=Eimer mit geschmolzenem Stahl +item.bucket.tin=Eimer mit geschmolzenem Zinn +item.bucket.zinc=Eimer mit geschmolzenem Zink + Material +material.mercury.name=Quecksilber +material.adamantine.name=Adamant +material.antimony.name=Antimon +material.aquarium.name=Aquarium +material.bismuth.name=Bismuth +material.brass.name=Messing +material.bronze.name=Bronze +material.coldiron.name=Kalteisen +material.copper.name=Kupfer +material.cupronickel.name=Kupfernickel +material.electrum.name=Elektron +material.invar.name=Invar +material.lead.name=Blei +material.mithril.name=Mithril +material.nickel.name=Nickel +material.pewter.name=Hartzinn +material.platinum.name=Platin +material.silver.name=Silber +material.starsteel.name=Sternenstahl +material.steel.name=Stahl +material.tin.name=Zinn +material.zinc.name=Zink + +#türs + #Item +item.basemetals.adamantine_door.name=Adamanttür +item.basemetals.aquarium_door.name=Aquariumtür +item.basemetals.antimony_door.name=Antimontür +item.basemetals.bismuth_door.name=Bismuthtür +item.basemetals.brass_door.name=Messingtür +item.basemetals.bronze_door.name=Bronzetür +item.basemetals.coldiron_door.name=Kalteisentür +item.basemetals.copper_door.name=Kupfertür +item.basemetals.cupronickel_door.name=Kupfernickeltür +item.basemetals.diamond_door.name=Diamanttür +item.basemetals.electrum_door.name=Elektrontür +item.basemetals.emerald_door.name=Smaragdtür +item.basemetals.gold_door.name=Goldtür +item.basemetals.invar_door.name=Invartür +item.basemetals.lead_door.name=Bleitür +item.basemetals.mithril_door.name=Mithriltür +item.basemetals.nickel_door.name=Nickeltür +item.basemetals.obsidian_door.name=Obsidiantür +item.basemetals.pewter_door.name=Hartzinntür +item.basemetals.platinum_door.name=Platintür +item.basemetals.quartz_door.name=Quartztür +item.basemetals.silver_door.name=Silbertür +item.basemetals.starsteel_door.name=Sternenstahltür +item.basemetals.steel_door.name=Stahltür +item.basemetals.tin_door.name=Zinntür +item.basemetals.zinc_door.name=Zinktür + #Tile +tile.basemetals.adamantine_door.name=Adamanttür +tile.basemetals.aquarium_door.name=Aquariumtür +tile.basemetals.antimony_door.name=Antimontür +tile.basemetals.bismuth_door.name=Bismuthtür +tile.basemetals.brass_door.name=Messingtür +tile.basemetals.bronze_door.name=Bronzetür +tile.basemetals.coldiron_door.name=Kalteisentür +tile.basemetals.copper_door.name=Kupfertür +tile.basemetals.cupronickel_door.name=Kupfernickeltür +tile.basemetals.diamond_door.name=Diamanttür +tile.basemetals.electrum_door.name=Elektrontür +tile.basemetals.emerald_door.name=Smaragdtür +tile.basemetals.gold_door.name=Goldtür +tile.basemetals.invar_door.name=Invartür +tile.basemetals.lead_door.name=Bleitür +tile.basemetals.mithril_door.name=Mithriltür +tile.basemetals.nickel_door.name=Nickeltür +tile.basemetals.obsidian_door.name=Obsidiantür +tile.basemetals.pewter_door.name=Hartzinntür +tile.basemetals.platinum_door.name=Platintür +tile.basemetals.quartz_door.name=Quartztür +tile.basemetals.silver_door.name=Silbertür +tile.basemetals.starsteel_door.name=Sternenstahltür +tile.basemetals.steel_door.name=Stahltür +tile.basemetals.tin_door.name=Zinntür +tile.basemetals.zinc_door.name=Zinktür + +#falltürs + #Tiles +tile.basemetals.adamantine_trapdoor.name=Adamantfalltür +tile.basemetals.aquarium_trapdoor.name=Aquariumfalltür +tile.basemetals.antimony_trapdoor.name=Antimonfalltür +tile.basemetals.bismuth_trapdoor.name=Bismuthfalltür +tile.basemetals.brass_trapdoor.name=Messingfalltür +tile.basemetals.bronze_trapdoor.name=Bronzefalltür +tile.basemetals.coldiron_trapdoor.name=Kalteisenfalltür +tile.basemetals.copper_trapdoor.name=Kupferfalltür +tile.basemetals.cupronickel_trapdoor.name=Kupfernickelfalltür +tile.basemetals.diamond_trapdoor.name=Diamantfalltür +tile.basemetals.electrum_trapdoor.name=Elektronfalltür +tile.basemetals.emerald_trapdoor.name=Smaragdfalltür +tile.basemetals.gold_trapdoor.name=Goldfalltür +tile.basemetals.invar_trapdoor.name=Invarfalltür +tile.basemetals.lead_trapdoor.name=Bleifalltür +tile.basemetals.mithril_trapdoor.name=Mithrilfalltür +tile.basemetals.nickel_trapdoor.name=Nickelfalltür +tile.basemetals.obsidian_trapdoor.name=Obsidianfalltür +tile.basemetals.pewter_trapdoor.name=Hartzinnfalltür +tile.basemetals.platinum_trapdoor.name=Platinfalltür +tile.basemetals.quartz_trapdoor.name=Quartzfalltür +tile.basemetals.silver_trapdoor.name=Silberfalltür +tile.basemetals.starsteel_trapdoor.name=Sternenstahlfalltür +tile.basemetals.steel_trapdoor.name=Stahlfalltür +tile.basemetals.tin_trapdoor.name=Zinnfalltür +tile.basemetals.zinc_trapdoor.name=Zinkfalltür + #Items +item.basemetals.adamantine_trapdoor.name=Adamantfalltür +item.basemetals.aquarium_trapdoor.name=Aquariumfalltür +item.basemetals.antimony_trapdoor.name=Antimonfalltür +item.basemetals.bismuth_trapdoor.name=Bismuthfalltür +item.basemetals.brass_trapdoor.name=Messingfalltür +item.basemetals.bronze_trapdoor.name=Bronzefalltür +item.basemetals.coldiron_trapdoor.name=Kalteisenfalltür +item.basemetals.copper_trapdoor.name=Kupferfalltür +item.basemetals.cupronickel_trapdoor.name=Kupfernickelfalltür +item.basemetals.diamond_trapdoor.name=Diamantfalltür +item.basemetals.electrum_trapdoor.name=Elektronfalltür +item.basemetals.emerald_trapdoor.name=Smaragdfalltür +item.basemetals.gold_trapdoor.name=Goldfalltür +item.basemetals.invar_trapdoor.name=Invarfalltür +item.basemetals.lead_trapdoor.name=Bleifalltür +item.basemetals.mithril_trapdoor.name=Mithrilfalltür +item.basemetals.nickel_trapdoor.name=Nickelfalltür +item.basemetals.obsidian_trapdoor.name=Obsidianfalltür +item.basemetals.pewter_trapdoor.name=Hartzinnfalltür +item.basemetals.platinum_trapdoor.name=Platinfalltür +item.basemetals.quartz_trapdoor.name=Quartzfalltür +item.basemetals.silver_trapdoor.name=Silberfalltür +item.basemetals.starsteel_trapdoor.name=Sternenstahlfalltür +item.basemetals.steel_trapdoor.name=Stahlfalltür +item.basemetals.tin_trapdoor.name=Zinnfalltür + +#zahnrads +item.basemetals.adamantine_gear.name=Adamantzahnrad +item.basemetals.aquarium_gear.name=Aquariumzahnrad +item.basemetals.antimony_gear.name=Antimonzahnrad +item.basemetals.bismuth_gear.name=Bismuthzahnrad +item.basemetals.brass_gear.name=Messingzahnrad +item.basemetals.bronze_gear.name=Bronzezahnrad +item.basemetals.coldiron_gear.name=Kalteisenzahnrad +item.basemetals.copper_gear.name=Kupferzahnrad +item.basemetals.cupronickel_gear.name=Kupfernickelzahnrad +item.basemetals.diamond_gear.name=Diamantzahnrad +item.basemetals.electrum_gear.name=Elektronzahnrad +item.basemetals.emerald_gear.name=Smaragdzahnrad +item.basemetals.gold_gear.name=Goldzahnrad +item.basemetals.invar_gear.name=Invarzahnrad +item.basemetals.iron_gear.name=Eisenzahnrad +item.basemetals.lead_gear.name=Bleizahnrad +item.basemetals.mithril_gear.name=Mithrilzahnrad +item.basemetals.nickel_gear.name=Nickelzahnrad +item.basemetals.obsidian_gear.name=Obsidianzahnrad +item.basemetals.pewter_gear.name=Hartzinnzahnrad +item.basemetals.platinum_gear.name=Platinzahnrad +item.basemetals.quartz_gear.name=Quartzzahnrad +item.basemetals.silver_gear.name=Silberzahnrad +item.basemetals.starsteel_gear.name=Sternenstahlzahnrad +item.basemetals.steel_gear.name=Stahlzahnrad +item.basemetals.stone_gear.name=Stonezahnrad +item.basemetals.tin_gear.name=Zinnzahnrad +item.basemetals.wood_gear.name=Holzzahnrad +item.basemetals.zinc_gear.name=Zinkzahnrad + +#stanges +item.basemetals.adamantine_rod.name=Adamantstange +item.basemetals.aquarium_rod.name=Aquariumstange +item.basemetals.antimony_rod.name=Antimonstange +item.basemetals.bismuth_rod.name=Bismuthstange +item.basemetals.brass_rod.name=Messingstange +item.basemetals.bronze_rod.name=Bronzestange +item.basemetals.coldiron_rod.name=Kalteisenstange +item.basemetals.copper_rod.name=Kupferstange +item.basemetals.cupronickel_rod.name=Kupfernickelstange +item.basemetals.diamond_rod.name=Diamantstange +item.basemetals.electrum_rod.name=Elektronstange +item.basemetals.emerald_rod.name=Smaragdstange +item.basemetals.gold_rod.name=Goldstange +item.basemetals.invar_rod.name=Invarstange +item.basemetals.iron_rod.name=Eisenstange +item.basemetals.lead_rod.name=Bleistange +item.basemetals.mithril_rod.name=Mithrilstange +item.basemetals.nickel_rod.name=Nickelstange +item.basemetals.obsidian_rod.name=Obsidianstange +item.basemetals.pewter_rod.name=Hartzinnstange +item.basemetals.platinum_rod.name=Platinstange +item.basemetals.quartz_rod.name=Quartzstange +item.basemetals.silver_rod.name=Silberstange +item.basemetals.starsteel_rod.name=Sternenstahlstange +item.basemetals.steel_rod.name=Stahlstange +item.basemetals.stone_rod.name=Stonestange +item.basemetals.tin_rod.name=Zinnstange +item.basemetals.zinc_rod.name=Zinkstange + +#blechs + #Item +item.basemetals.adamantine_plate.name=Verdichtetes Adamantblech +item.basemetals.aquarium_plate.name=Verdichtetes Aquariumblech +item.basemetals.antimony_plate.name=Verdichtetes Antimonblech +item.basemetals.bismuth_plate.name=Verdichtetes Bismuthblech +item.basemetals.brass_plate.name=Verdichtetes Messingblech +item.basemetals.bronze_plate.name=Verdichtetes Bronzeblech +item.basemetals.coldiron_plate.name=Verdichtetes Kalteisenblech +item.basemetals.copper_plate.name=Verdichtetes Kupferblech +item.basemetals.cupronickel_plate.name=Verdichtetes Kupfernickelblech +item.basemetals.electrum_plate.name=Verdichtetes Elektronblech +item.basemetals.gold_plate.name=Verdichtetes Goldblech +item.basemetals.invar_plate.name=Verdichtetes Invarblech +item.basemetals.lead_plate.name=Verdichtetes Bleiblech +item.basemetals.mithril_plate.name=Verdichtetes Mithrilblech +item.basemetals.nickel_plate.name=Verdichtetes Nickelblech +item.basemetals.pewter_plate.name=Verdichtetes Hartzinnblech +item.basemetals.platinum_plate.name=Verdichtetes Platinblech +item.basemetals.silver_plate.name=Verdichtetes Silberblech +item.basemetals.starsteel_plate.name=Verdichtetes Sternenstahlblech +item.basemetals.steel_plate.name=Verdichtetes Stahlblech +item.basemetals.tin_plate.name=Verdichtetes Zinnblech +item.basemetals.zinc_plate.name=Verdichtetes Zinkblech +item.basemetals.iron_plate.name=Verdichtetes Eisenblech +item.basemetals.gold_plate.name=Verdichtetes Goldblech + #Tile +tile.basemetals.adamantine_plate.name=Verdichtetes Adamantblech +tile.basemetals.aquarium_plate.name=Verdichtetes Aquariumblech +tile.basemetals.antimony_plate.name=Verdichtetes Antimonblech +tile.basemetals.bismuth_plate.name=Verdichtetes Bismuthblech +tile.basemetals.brass_plate.name=Verdichtetes Messingblech +tile.basemetals.bronze_plate.name=Verdichtetes Bronzeblech +tile.basemetals.coldiron_plate.name=Verdichtetes Kalteisenblech +tile.basemetals.copper_plate.name=Verdichtetes Kupferblech +tile.basemetals.cupronickel_plate.name=Verdichtetes Kupfernickelblech +tile.basemetals.electrum_plate.name=Verdichtetes Elektronblech +tile.basemetals.gold_plate.name=Verdichtetes Goldblech +tile.basemetals.invar_plate.name=Verdichtetes Invarblech +tile.basemetals.lead_plate.name=Verdichtetes Bleiblech +tile.basemetals.mithril_plate.name=Verdichtetes Mithrilblech +tile.basemetals.nickel_plate.name=Verdichtetes Nickelblech +tile.basemetals.pewter_plate.name=Verdichtetes Hartzinnblech +tile.basemetals.platinum_plate.name=Verdichtetes Platinblech +tile.basemetals.silver_plate.name=Verdichtetes Silberblech +tile.basemetals.starsteel_plate.name=Verdichtetes Sternenstahlblech +tile.basemetals.steel_plate.name=Verdichtetes Stahlblech +tile.basemetals.tin_plate.name=Verdichtetes Zinnblech +tile.basemetals.zinc_plate.name=Verdichtetes Zinkblech +tile.basemetals.iron_plate.name=Verdichtetes Eisenblech +tile.basemetals.gold_plate.name=Verdichtetes Goldblech + +#Player Detectors (Pressureblechs) + #Items +item.basemetals.human_detector.name=Sicherheits-Druckplatte + #Tiles +tile.basemetals.human_detector.name=Sicherheits-Druckplatte + +#schalter + #Item +item.basemetals.adamantine_button.name=Adamantschalter +item.basemetals.aquarium_button.name=Aquariumschalter +item.basemetals.antimony_button.name=Antimonschalter +item.basemetals.bismuth_button.name=Bismuthschalter +item.basemetals.brass_button.name=Messingschalter +item.basemetals.bronze_button.name=Bronzeschalter +item.basemetals.coldiron_button.name=Kalteisenschalter +item.basemetals.copper_button.name=Kupferschalter +item.basemetals.cupronickel_button.name=Kupfernickelschalter +item.basemetals.diamond_button.name=Diamantschalter +item.basemetals.electrum_button.name=Elektronschalter +item.basemetals.emerald_button.name=Smaragdschalter +item.basemetals.gold_button.name=Goldschalter +item.basemetals.invar_button.name=Invarschalter +item.basemetals.lead_button.name=Bleischalter +item.basemetals.mithril_button.name=Mithrilschalter +item.basemetals.nickel_button.name=Nickelschalter +item.basemetals.obsidian_button.name=Obsidianschalter +item.basemetals.pewter_button.name=Hartzinnschalter +item.basemetals.platinum_button.name=Platinschalter +item.basemetals.quartz_button.name=Quartzschalter +item.basemetals.silver_button.name=Silberschalter +item.basemetals.starsteel_button.name=Sternenstahlschalter +item.basemetals.steel_button.name=Stahlschalter +item.basemetals.tin_button.name=Zinnschalter +item.basemetals.zinc_button.name=Zinkschalter +item.basemetals.iron_button.name=Eisenschalter +item.basemetals.gold_button.name=Goldschalter + #Tile +tile.basemetals.adamantine_button.name=Adamantschalter +tile.basemetals.aquarium_button.name=Aquariumschalter +tile.basemetals.antimony_button.name=Antimonschalter +tile.basemetals.bismuth_button.name=Bismuthschalter +tile.basemetals.brass_button.name=Messingschalter +tile.basemetals.bronze_button.name=Bronzeschalter +tile.basemetals.coldiron_button.name=Kalteisenschalter +tile.basemetals.copper_button.name=Kupferschalter +tile.basemetals.cupronickel_button.name=Kupfernickelschalter +tile.basemetals.diamond_button.name=Diamantschalter +tile.basemetals.electrum_button.name=Elektronschalter +tile.basemetals.emerald_button.name=Smaragdschalter +tile.basemetals.gold_button.name=Goldschalter +tile.basemetals.invar_button.name=Invarschalter +tile.basemetals.lead_button.name=Bleischalter +tile.basemetals.mithril_button.name=Mithrilschalter +tile.basemetals.nickel_button.name=Nickelschalter +tile.basemetals.obsidian_button.name=Obsidianschalter +tile.basemetals.pewter_button.name=Hartzinnschalter +tile.basemetals.platinum_button.name=Platinschalter +tile.basemetals.quartz_button.name=Quartzschalter +tile.basemetals.silver_button.name=Silberschalter +tile.basemetals.starsteel_button.name=Sternenstahlschalter +tile.basemetals.steel_button.name=Stahlschalter +tile.basemetals.tin_button.name=Zinnschalter +tile.basemetals.zinc_button.name=Zinkschalter +tile.basemetals.iron_button.name=Eisenschalter +tile.basemetals.gold_button.name=Goldschalter + +Pressureblech + #Item +item.basemetals.adamantine_pressure_plate.name=Adamantdruckplatte +item.basemetals.aquarium_pressure_plate.name=Aquariumdruckplatte +item.basemetals.antimony_pressure_plate.name=Antimondruckplatte +item.basemetals.bismuth_pressure_plate.name=Bismuthdruckplatte +item.basemetals.brass_pressure_plate.name=Messingdruckplatte +item.basemetals.bronze_pressure_plate.name=Bronzedruckplatte +item.basemetals.coldiron_pressure_plate.name=Kalteisendruckplatte +item.basemetals.copper_pressure_plate.name=Kupferdruckplatte +item.basemetals.cupronickel_pressure_plate.name=Kupfernickeldruckplatte +item.basemetals.diamond_pressure_plate.name=Diamantdruckplatte +item.basemetals.electrum_pressure_plate.name=Elektrondruckplatte +item.basemetals.emerald_pressure_plate.name=Smaragddruckplatte +item.basemetals.invar_pressure_plate.name=Invardruckplatte +item.basemetals.lead_pressure_plate.name=Bleidruckplatte +item.basemetals.mithril_pressure_plate.name=Mithrildruckplatte +item.basemetals.nickel_pressure_plate.name=Nickeldruckplatte +item.basemetals.obsidian_pressure_plate.name=Obsidiandruckplatte +item.basemetals.pewter_pressure_plate.name=Hartzinndruckplatte +item.basemetals.platinum_pressure_plate.name=Platindruckplatte +item.basemetals.quartz_pressure_plate.name=Quartzdruckplatte +item.basemetals.silver_pressure_plate.name=Silberdruckplatte +item.basemetals.starsteel_pressure_plate.name=Sternenstahldruckplatte +item.basemetals.steel_pressure_plate.name=Stahldruckplatte +item.basemetals.tin_pressure_plate.name=Zinndruckplatte +item.basemetals.zinc_pressure_plate.name=Zinkdruckplatte +item.basemetals.iron_pressure_plate.name=Eisendruckplatte +item.basemetals.gold_pressure_plate.name=Golddruckplatte + #Tile +tile.basemetals.adamantine_pressure_plate.name=Adamantdruckplatte +tile.basemetals.aquarium_pressure_plate.name=Aquariumdruckplatte +tile.basemetals.antimony_pressure_plate.name=Antimondruckplatte +tile.basemetals.bismuth_pressure_plate.name=Bismuthdruckplatte +tile.basemetals.brass_pressure_plate.name=Messingdruckplatte +tile.basemetals.bronze_pressure_plate.name=Bronzedruckplatte +tile.basemetals.coldiron_pressure_plate.name=Kalteisendruckplatte +tile.basemetals.copper_pressure_plate.name=Kupferdruckplatte +tile.basemetals.cupronickel_pressure_plate.name=Kupfernickeldruckplatte +tile.basemetals.diamond_pressure_plate.name=Diamantdruckplatte +tile.basemetals.electrum_pressure_plate.name=Elektrondruckplatte +tile.basemetals.emerald_pressure_plate.name=Smaragddruckplatte +tile.basemetals.invar_pressure_plate.name=Invardruckplatte +tile.basemetals.lead_pressure_plate.name=Bleidruckplatte +tile.basemetals.mithril_pressure_plate.name=Mithrildruckplatte +tile.basemetals.nickel_pressure_plate.name=Nickeldruckplatte +tile.basemetals.obsidian_pressure_plate.name=Obsidiandruckplatte +tile.basemetals.pewter_pressure_plate.name=Hartzinndruckplatte +tile.basemetals.platinum_pressure_plate.name=Platindruckplatte +tile.basemetals.quartz_pressure_plate.name=Quartzdruckplatte +tile.basemetals.silver_pressure_plate.name=Silberdruckplatte +tile.basemetals.starsteel_pressure_plate.name=Sternenstahldruckplatte +tile.basemetals.steel_pressure_plate.name=Stahldruckplatte +tile.basemetals.tin_pressure_plate.name=Zinndruckplatte +tile.basemetals.zinc_pressure_plate.name=Zinkdruckplatte +tile.basemetals.iron_pressure_plate.name=Eisendruckplatte +tile.basemetals.gold_pressure_plate.name=Golddruckplatte + +#Crystal +item.basemetals.adamantine_crystal.name=Adamantkristall +item.basemetals.aquarium_crystal.name=Aquariumkristall +item.basemetals.antimony_crystal.name= Antimonkristall +item.basemetals.bismuth_crystal.name= Bismuthkristall +item.basemetals.brass_crystal.name= Messingkristall +item.basemetals.bronze_crystal.name= Bronzekristall +item.basemetals.coldiron_crystal.name= Kalteisenkristall +item.basemetals.copper_crystal.name= Kupferkristall +item.basemetals.cupronickel_crystal.name= Kupfernickelkristall +item.basemetals.electrum_crystal.name= Elektronkristall +item.basemetals.invar_crystal.name= Invarkristall +item.basemetals.lead_crystal.name= Bleikristall +item.basemetals.mithril_crystal.name= Mithrilkristall +item.basemetals.nickel_crystal.name= Nickelkristall +item.basemetals.pewter_crystal.name= Hartzinnkristall +item.basemetals.platinum_crystal.name= Platinkristall +item.basemetals.silver_crystal.name= Silberkristall +item.basemetals.starsteel_crystal.name= Sternenstahlkristall +item.basemetals.steel_crystal.name= Stahlkristall +item.basemetals.tin_crystal.name= Zinnkristall +item.basemetals.zinc_crystal.name=Zinkkristall + +#Clump +item.basemetals.adamantine_clump.name= Adamantklumpen +item.basemetals.aquarium_clump.name= Aquariumklumpen +item.basemetals.antimony_clump.name= Antimonklumpen +item.basemetals.bismuth_clump.name= Bismuthklumpen +item.basemetals.brass_clump.name= Messingklumpen +item.basemetals.bronze_clump.name= Bronzeklumpen +item.basemetals.coldiron_clump.name= Kalteisenklumpen +item.basemetals.copper_clump.name= Kupferklumpen +item.basemetals.cupronickel_clump.name= Kupfernickelklumpen +item.basemetals.electrum_clump.name= Elektronklumpen +item.basemetals.invar_clump.name= Invarklumpen +item.basemetals.lead_clump.name= Bleiklumpen +item.basemetals.mithril_clump.name= Mithrilklumpen +item.basemetals.nickel_clump.name= Nickelklumpen +item.basemetals.pewter_clump.name= Hartzinnklumpen +item.basemetals.platinum_clump.name= Platinklumpen +item.basemetals.silver_clump.name= Silberklumpen +item.basemetals.starsteel_clump.name= Sternenstahlklumpen +item.basemetals.steel_clump.name= Stahlklumpen +item.basemetals.tin_clump.name= Zinnklumpen +item.basemetals.zinc_clump.name= Zinkklumpen + +#Shard +item.basemetals.adamantine_shard.name= Adamantsplitter +item.basemetals.aquarium_shard.name= Aquariumsplitter +item.basemetals.antimony_shard.name= Antimonsplitter +item.basemetals.bismuth_shard.name= Bismuthsplitter +item.basemetals.brass_shard.name= Messingsplitter +item.basemetals.bronze_shard.name= Bronzesplitter +item.basemetals.coldiron_shard.name= Kalteisensplitter +item.basemetals.copper_shard.name= Kupfersplitter +item.basemetals.cupronickel_shard.name= Kupfernickelsplitter +item.basemetals.electrum_shard.name= Elektronsplitter +item.basemetals.invar_shard.name= Invarsplitter +item.basemetals.lead_shard.name= Bleisplitter +item.basemetals.mithril_shard.name= Mithrilsplitter +item.basemetals.nickel_shard.name= Nickelsplitter +item.basemetals.pewter_shard.name= Hartzinnsplitter +item.basemetals.platinum_shard.name= Platinsplitter +item.basemetals.silver_shard.name= Silbersplitter +item.basemetals.starsteel_shard.name= Sternenstahlsplitter +item.basemetals.steel_shard.name= Stahlsplitter +item.basemetals.tin_shard.name= Zinnsplitter +item.basemetals.zinc_shard.name= Zinksplitter + +#Verunreinigtes +item.basemetals.adamantine_powder_dirty.name=Verunreinigtes Adamantpulver +item.basemetals.aquarium_powder_dirty.name=Verunreinigtes Aquariumpulver +item.basemetals.antimony_powder_dirty.name=Verunreinigtes Antimonpulver +item.basemetals.bismuth_powder_dirty.name=Verunreinigtes Bismuthpulver +item.basemetals.brass_powder_dirty.name=Verunreinigtes Messingpulver +item.basemetals.bronze_powder_dirty.name=Verunreinigtes Bronzepulver +item.basemetals.coldiron_powder_dirty.name=Verunreinigtes Kalteisenpulver +item.basemetals.copper_powder_dirty.name=Verunreinigtes Kupferpulver +item.basemetals.cupronickel_powder_dirty.name=Verunreinigtes Kupfernickelpulver +item.basemetals.electrum_powder_dirty.name=Verunreinigtes Elektronpulver +item.basemetals.gold_powder_dirty.name=Verunreinigtes Goldpulver +item.basemetals.invar_powder_dirty.name=Verunreinigtes Invarpulver +item.basemetals.iron_powder_dirty.name=Verunreinigtes Eisenpulver +item.basemetals.lead_powder_dirty.name=Verunreinigtes Bleipulver +item.basemetals.mithril_powder_dirty.name=Verunreinigtes Mithrilpulver +item.basemetals.nickel_powder_dirty.name=Verunreinigtes Nickelpulver +item.basemetals.pewter_powder_dirty.name=Verunreinigtes Hartzinnpulver +item.basemetals.platinum_powder_dirty.name=Verunreinigtes Platinpulver +item.basemetals.silver_powder_dirty.name=Verunreinigtes Silberpulver +item.basemetals.starsteel_powder_dirty.name=Verunreinigtes Sternenstahlpulver +item.basemetals.steel_powder_dirty.name=Verunreinigtes Stahlpulver +item.basemetals.tin_powder_dirty.name=Verunreinigtes Zinnpulver +item.basemetals.zinc_powder_dirty.name=Verunreinigtes Zinkpulver + +#Casing + #Item +item.basemetals.adamantine_casing.name=Adamantgehäuse +item.basemetals.aquarium_casing.name=Aquariumgehäuse +item.basemetals.antimony_casing.name=Antimongehäuse +item.basemetals.bismuth_casing.name=Bismuthgehäuse +item.basemetals.brass_casing.name=Messinggehäuse +item.basemetals.bronze_casing.name=Bronzegehäuse +item.basemetals.coldiron_casing.name=Kalteisengehäuse +item.basemetals.copper_casing.name=Kupfergehäuse +item.basemetals.cupronickel_casing.name=Kupfernickelgehäuse +item.basemetals.electrum_casing.name=Elektrongehäuse +item.basemetals.invar_casing.name=Invargehäuse +item.basemetals.lead_casing.name=Bleigehäuse +item.basemetals.mithril_casing.name=Mithrilgehäuse +item.basemetals.nickel_casing.name=Nickelgehäuse +item.basemetals.pewter_casing.name=Hartzinngehäuse +item.basemetals.platinum_casing.name=Platingehäuse +item.basemetals.silver_casing.name=Silbergehäuse +item.basemetals.starsteel_casing.name=Sternenstahlgehäuse +item.basemetals.steel_casing.name=Stahlgehäuse +item.basemetals.tin_casing.name=Zinngehäuse +item.basemetals.zinc_casing.name=Zinkgehäuse +item.basemetals.iron_casing.name=Eisengehäuse +item.basemetals.gold_casing.name=Goldgehäuse + +#Denseblech + #Item +item.basemetals.adamantine_dense_plate.name=Verdichtetes Adamantblech +item.basemetals.aquarium_dense_plate.name=Verdichtetes Aquariumblech +item.basemetals.antimony_dense_plate.name=Verdichtetes Antimonblech +item.basemetals.bismuth_dense_plate.name=Verdichtetes Bismuthblech +item.basemetals.brass_dense_plate.name=Verdichtetes Messingblech +item.basemetals.bronze_dense_plate.name=Verdichtetes Bronzeblech +item.basemetals.coldiron_dense_plate.name=Verdichtetes Kalteisenblech +item.basemetals.copper_dense_plate.name=Verdichtetes Kupferblech +item.basemetals.cupronickel_dense_plate.name=Verdichtetes Kupfernickelblech +item.basemetals.electrum_dense_plate.name=Verdichtetes Elektronblech +item.basemetals.invar_dense_plate.name=Verdichtetes Invarblech +item.basemetals.lead_dense_plate.name=Verdichtetes Bleiblech +item.basemetals.mithril_dense_plate.name=Verdichtetes Mithrilblech +item.basemetals.nickel_dense_plate.name=Verdichtetes Nickelblech +item.basemetals.pewter_dense_plate.name=Verdichtetes Hartzinnblech +item.basemetals.platinum_dense_plate.name=Verdichtetes Platinblech +item.basemetals.silver_dense_plate.name=Verdichtetes Silberblech +item.basemetals.starsteel_dense_plate.name=Verdichtetes Sternenstahlblech +item.basemetals.steel_dense_plate.name=Verdichtetes Stahlblech +item.basemetals.tin_dense_plate.name=Verdichtetes Zinnblech +item.basemetals.zinc_dense_plate.name=Verdichtetes Zinkblech +item.basemetals.iron_dense_plate.name=Verdichtetes Eisenblech +item.basemetals.gold_dense_plate.name=Verdichtetes Goldblech + #Tile +tile.basemetals.adamantine_dense_plate.name=Verdichtetes Adamantblech +tile.basemetals.aquarium_dense_plate.name=Verdichtetes Aquariumblech +tile.basemetals.antimony_dense_plate.name=Verdichtetes Antimonblech +tile.basemetals.bismuth_dense_plate.name=Verdichtetes Bismuthblech +tile.basemetals.brass_dense_plate.name=Verdichtetes Messingblech +tile.basemetals.bronze_dense_plate.name=Verdichtetes Bronzeblech +tile.basemetals.coldiron_dense_plate.name=Verdichtetes Kalteisenblech +tile.basemetals.copper_dense_plate.name=Verdichtetes Kupferblech +tile.basemetals.cupronickel_dense_plate.name=Verdichtetes Kupfernickelblech +tile.basemetals.electrum_dense_plate.name=Verdichtetes Elektronblech +tile.basemetals.invar_dense_dense_plate.name=Verdichtetes Invarblech +tile.basemetals.lead_dense_plate.name=Verdichtetes Verdichtetes Bleiblech +tile.basemetals.mithril_dense_plate.name=Verdichtetes Verdichtetes Mithrilblech +tile.basemetals.nickel_dense_plate.name=Verdichtetes Verdichtetes Nickelblech +tile.basemetals.pewter_dense_plate.name=Verdichtetes Verdichtetes Hartzinnblech +tile.basemetals.platinum_dense_plate.name=Verdichtetes Verdichtetes Platinblech +tile.basemetals.silver_dense_plate.name=Verdichtetes Verdichtetes Silberblech +tile.basemetals.starsteel_dense_plate.name=Verdichtetes Verdichtetes Sternenstahlblech +tile.basemetals.steel_dense_plate.name=Verdichtetes Verdichtetes Stahlblech +tile.basemetals.tin_dense_plate.name=Verdichtetes Verdichtetes Zinnblech +tile.basemetals.zinc_dense_plate.name=Verdichtetes Verdichtetes Zinkblech +tile.basemetals.iron_dense_plate.name=Verdichtetes Verdichtetes Eisenblech +tile.basemetals.gold_dense_plate.name=Verdichtetes Verdichtetes Goldblech + +#fliese + #Item +item.basemetals.adamantine_slab.name=Adamantfliese +item.basemetals.aquarium_slab.name=Aquariumfliese +item.basemetals.antimony_slab.name=Antimonfliese +item.basemetals.bismuth_slab.name=Bismuthfliese +item.basemetals.brass_slab.name=Messingfliese +item.basemetals.bronze_slab.name=Bronzefliese +item.basemetals.coldiron_slab.name=Kalteisenfliese +item.basemetals.copper_slab.name=Kupferfliese +item.basemetals.cupronickel_slab.name=Kupfernickelfliese +item.basemetals.diamond_slab.name=Diamantfliese +item.basemetals.electrum_slab.name=Elektronfliese +item.basemetals.emerald_slab.name=Smaragdfliese +item.basemetals.gold_slab.name=Goldfliese +item.basemetals.invar_slab.name=Invarfliese +item.basemetals.iron_slab.name=Eisenfliese +item.basemetals.lead_slab.name=Bleifliese +item.basemetals.mithril_slab.name=Mithrilfliese +item.basemetals.nickel_slab.name=Nickelfliese +item.basemetals.obsidian_slab.name=Obsidianfliese +item.basemetals.pewter_slab.name=Hartzinnfliese +item.basemetals.platinum_slab.name=Platinfliese +item.basemetals.silver_slab.name=Silberfliese +item.basemetals.starsteel_slab.name=Sternenstahlfliese +item.basemetals.steel_slab.name=Stahlfliese +item.basemetals.tin_slab.name=Zinnfliese +item.basemetals.zinc_slab.name=Zinkfliese + #Tile +tile.basemetals.adamantine_slab.name=Adamantfliese +tile.basemetals.aquarium_slab.name=Aquariumfliese +tile.basemetals.antimony_slab.name=Antimonfliese +tile.basemetals.bismuth_slab.name=Bismuthfliese +tile.basemetals.brass_slab.name=Messingfliese +tile.basemetals.bronze_slab.name=Bronzefliese +tile.basemetals.coldiron_slab.name=Kalteisenfliese +tile.basemetals.copper_slab.name=Kupferfliese +tile.basemetals.cupronickel_slab.name=Kupfernickelfliese +tile.basemetals.diamond_slab.name=Diamantfliese +tile.basemetals.electrum_slab.name=Elektronfliese +tile.basemetals.emerald_slab.name=Smaragdfliese +tile.basemetals.gold_slab.name=Goldfliese +tile.basemetals.invar_slab.name=Invarfliese +tile.basemetals.iron_slab.name=Eisenfliese +tile.basemetals.lead_slab.name=Bleifliese +tile.basemetals.mithril_slab.name=Mithrilfliese +tile.basemetals.nickel_slab.name=Nickelfliese +tile.basemetals.obsidian_slab.name=Obsidianfliese +tile.basemetals.pewter_slab.name=Hartzinnfliese +tile.basemetals.platinum_slab.name=Platinfliese +tile.basemetals.silver_slab.name=Silberfliese +tile.basemetals.starsteel_slab.name=Sternenstahlfliese +tile.basemetals.steel_slab.name=Stahlfliese +tile.basemetals.tin_slab.name=Zinnfliese +tile.basemetals.zinc_slab.name=Zinkfliese + +#hebel + #Item +item.basemetals.adamantine_lever.name=Adamanthebel +item.basemetals.aquarium_lever.name=Aquariumhebel +item.basemetals.antimony_lever.name=Antimonhebel +item.basemetals.bismuth_lever.name=Bismuthhebel +item.basemetals.brass_lever.name=Messinghebel +item.basemetals.bronze_lever.name=Bronzehebel +item.basemetals.coldiron_lever.name=Kalteisenhebel +item.basemetals.copper_lever.name=Kupferhebel +item.basemetals.cupronickel_lever.name=Kupfernickelhebel +item.basemetals.diamond_lever.name=Diamanthebel +item.basemetals.electrum_lever.name=Elektronhebel +item.basemetals.emerald_lever.name=Smaragdhebel +item.basemetals.gold_lever.name=Goldhebel +item.basemetals.invar_lever.name=Invarhebel +item.basemetals.iron_lever.name=Eisenhebel +item.basemetals.lead_lever.name=Bleihebel +item.basemetals.mithril_lever.name=Mithrilhebel +item.basemetals.nickel_lever.name=Nickelhebel +item.basemetals.obsidian_lever.name=Obsidianhebel +item.basemetals.pewter_lever.name=Hartzinnhebel +item.basemetals.platinum_lever.name=Platinhebel +item.basemetals.quartz_lever.name=Quartzhebel +item.basemetals.silver_lever.name=Silberhebel +item.basemetals.starsteel_lever.name=Sternenstahlhebel +item.basemetals.steel_lever.name=Stahlhebel +item.basemetals.tin_lever.name=Zinnhebel +item.basemetals.zinc_lever.name=Zinkhebel + #Tile +tile.basemetals.adamantine_lever.name=Adamanthebel +tile.basemetals.aquarium_lever.name=Aquariumhebel +tile.basemetals.antimony_lever.name=Antimonhebel +tile.basemetals.bismuth_lever.name=Bismuthhebel +tile.basemetals.brass_lever.name=Messinghebel +tile.basemetals.bronze_lever.name=Bronzehebel +tile.basemetals.coldiron_lever.name=Kalteisenhebel +tile.basemetals.copper_lever.name=Kupferhebel +tile.basemetals.cupronickel_lever.name=Kupfernickelhebel +tile.basemetals.diamond_lever.name=Diamanthebel +tile.basemetals.electrum_lever.name=Elektronhebel +tile.basemetals.emerald_lever.name=Smaragdhebel +tile.basemetals.gold_lever.name=Goldhebel +tile.basemetals.invar_lever.name=Invarhebel +tile.basemetals.iron_lever.name=Eisenhebel +tile.basemetals.lead_lever.name=Bleihebel +tile.basemetals.mithril_lever.name=Mithrilhebel +tile.basemetals.nickel_lever.name=Nickelhebel +tile.basemetals.obsidian_lever.name=Obsidianhebel +tile.basemetals.pewter_lever.name=Hartzinnhebel +tile.basemetals.platinum_lever.name=Platinhebel +tile.basemetals.quartz_lever.name=Quartzhebel +tile.basemetals.silver_lever.name=Silberhebel +tile.basemetals.starsteel_lever.name=Sternenstahlhebel +tile.basemetals.steel_lever.name=Stahlhebel +tile.basemetals.tin_lever.name=Zinnhebel +tile.basemetals.zinc_lever.name=Zinkhebel + +#Stair + #Item +item.basemetals.adamantine_stairs.name=Adamanttreppe +item.basemetals.aquarium_stairs.name=Aquariumtreppe +item.basemetals.antimony_stairs.name=Antimontreppe +item.basemetals.bismuth_stairs.name=Bismuthtreppe +item.basemetals.brass_stairs.name=Messingtreppe +item.basemetals.bronze_stairs.name=Bronzetreppe +item.basemetals.coldiron_stairs.name=Kalteisentreppe +item.basemetals.copper_stairs.name=Kupfertreppe +item.basemetals.cupronickel_stairs.name=Kupfernickeltreppe +item.basemetals.diamond_stairs.name=Diamanttreppe +item.basemetals.electrum_stairs.name=Elektrontreppe +item.basemetals.emerald_stairs.name=Smaragdtreppe +item.basemetals.gold_stairs.name=Goldtreppe +item.basemetals.invar_stairs.name=Invartreppe +item.basemetals.iron_stairs.name=Eisentreppe +item.basemetals.lead_stairs.name=Bleitreppe +item.basemetals.mithril_stairs.name=Mithriltreppe +item.basemetals.nickel_stairs.name=Nickeltreppe +item.basemetals.obsidian_stairs.name=Obsidiantreppe +item.basemetals.pewter_stairs.name=Hartzinntreppe +item.basemetals.platinum_stairs.name=Platintreppe +item.basemetals.silver_stairs.name=Silbertreppe +item.basemetals.starsteel_stairs.name=Sternenstahltreppe +item.basemetals.steel_stairs.name=Stahltreppe +item.basemetals.tin_stairs.name=Zinntreppe +item.basemetals.zinc_stairs.name=Zinktreppe + #Tile +tile.basemetals.adamantine_stairs.name=Adamanttreppe +tile.basemetals.aquarium_stairs.name=Aquariumtreppe +tile.basemetals.antimony_stairs.name=Antimontreppe +tile.basemetals.bismuth_stairs.name=Bismuthtreppe +tile.basemetals.brass_stairs.name=Messingtreppe +tile.basemetals.bronze_stairs.name=Bronzetreppe +tile.basemetals.coldiron_stairs.name=Kalteisentreppe +tile.basemetals.copper_stairs.name=Kupfertreppe +tile.basemetals.cupronickel_stairs.name=Kupfernickeltreppe +tile.basemetals.diamond_stairs.name=Diamanttreppe +tile.basemetals.electrum_stairs.name=Elektrontreppe +tile.basemetals.emerald_stairs.name=Smaragdtreppe +tile.basemetals.gold_stairs.name=Goldtreppe +tile.basemetals.invar_stairs.name=Invartreppe +tile.basemetals.iron_stairs.name=Eisentreppe +tile.basemetals.lead_stairs.name=Bleitreppe +tile.basemetals.mithril_stairs.name=Mithriltreppe +tile.basemetals.nickel_stairs.name=Nickeltreppe +tile.basemetals.obsidian_stairs.name=Obsidiantreppe +tile.basemetals.pewter_stairs.name=Hartzinntreppe +tile.basemetals.platinum_stairs.name=Platintreppe +tile.basemetals.silver_stairs.name=Silbertreppe +tile.basemetals.starsteel_stairs.name=Sternenstahltreppe +tile.basemetals.steel_stairs.name=Stahltreppe +tile.basemetals.tin_stairs.name=Zinntreppe +tile.basemetals.zinc_stairs.name=Zinktreppe + +#mauer + #Item +item.basemetals.adamantine_wall.name=Adamantmauer +item.basemetals.aquarium_wall.name=Aquariummauer +item.basemetals.antimony_wall.name=Antimonmauer +item.basemetals.bismuth_wall.name=Bismuthmauer +item.basemetals.brass_wall.name=Messingmauer +item.basemetals.bronze_wall.name=Bronzemauer +item.basemetals.coldiron_wall.name=Kalteisenmauer +item.basemetals.copper_wall.name=Kupfermauer +item.basemetals.cupronickel_wall.name=Kupfernickelmauer +item.basemetals.diamond_wall.name=Diamantmauer +item.basemetals.electrum_wall.name=Elektronmauer +item.basemetals.emerald_wall.name=Smaragdmauer +item.basemetals.gold_wall.name=Goldmauer +item.basemetals.invar_wall.name=Invarmauer +item.basemetals.iron_wall.name=Eisenmauer +item.basemetals.lead_wall.name=Bleimauer +item.basemetals.mithril_wall.name=Mithrilmauer +item.basemetals.nickel_wall.name=Nickelmauer +item.basemetals.obsidian_wall.name=Obsidianmauer +item.basemetals.pewter_wall.name=Hartzinnmauer +item.basemetals.platinum_wall.name=Platinmauer +item.basemetals.quartz_wall.name=Quartzmauer +item.basemetals.silver_wall.name=Silbermauer +item.basemetals.starsteel_wall.name=Sternenstahlmauer +item.basemetals.steel_wall.name=Stahlmauer +item.basemetals.tin_wall.name=Zinnmauer +item.basemetals.zinc_wall.name=Zinkmauer + #Tile +tile.basemetals.adamantine_wall.name=Adamantmauer +tile.basemetals.aquarium_wall.name=Aquariummauer +tile.basemetals.antimony_wall.name=Antimonmauer +tile.basemetals.bismuth_wall.name=Bismuthmauer +tile.basemetals.brass_wall.name=Messingmauer +tile.basemetals.bronze_wall.name=Bronzemauer +tile.basemetals.coldiron_wall.name=Kalteisenmauer +tile.basemetals.copper_wall.name=Kupfermauer +tile.basemetals.cupronickel_wall.name=Kupfernickelmauer +tile.basemetals.diamond_wall.name=Diamantmauer +tile.basemetals.electrum_wall.name=Elektronmauer +tile.basemetals.emerald_wall.name=Smaragdmauer +tile.basemetals.gold_wall.name=Goldmauer +tile.basemetals.invar_wall.name=Invarmauer +tile.basemetals.iron_wall.name=Eisenmauer +tile.basemetals.lead_wall.name=Bleimauer +tile.basemetals.mithril_wall.name=Mithrilmauer +tile.basemetals.nickel_wall.name=Nickelmauer +tile.basemetals.obsidian_wall.name=Obsidianmauer +tile.basemetals.pewter_wall.name=Hartzinnmauer +tile.basemetals.platinum_wall.name=Platinmauer +tile.basemetals.quartz_wall.name=Quartzmauer +tile.basemetals.silver_wall.name=Silbermauer +tile.basemetals.starsteel_wall.name=Sternenstahlmauer +tile.basemetals.steel_wall.name=Stahlmauer +tile.basemetals.tin_wall.name=Zinnmauer +tile.basemetals.zinc_wall.name=Zinkmauer + +modifier.mmd-toxic.name=Giftig +modifier.mmd-toxic.desc=Ziemlich gefährlich - blendet und vergiftet Dinge, die mit Werkzeugen oder Waffen getroffen werden. +modifier.mmd-sparkly.name=Funkelnd +modifier.mmd-sparkly.desc=Selbstreparierendes, glänzendes und funkelndes Zeug +modifier.mmd-soft.name=Weich +modifier.mmd-soft.desc=Nicht wirklich für Werkzeuge, die viel genutzt werden sollen, geeignet, da sich diese schneller abnutzen werden +modifier.mmd-brittle.name=Spröde +modifier.mmd-brittle.desc=Mit zunehmender Abnutzung wird mehr Schaden verursacht - aber Vorsicht, es verletzt auch dich! +modifier.mmd-heavy.name=Schwer +modifier.mmd-heavy.desc=Dieses Zeug ist wirklich, wirklich dicht - die Nutzung von Werkzeugen aus diesem Material wird dich schneller ermüden +modifier.mmd-reactive.name=Reaktiv +modifier.mmd-reactive.desc=Reagiert mit Wasser und nutzt sich dabei schneller ab +modifier.mmd-radioactive.name=Radioaktiv +modifier.mmd-radioactive.desc=Gefährlich zu halten, wenn du dich nicht irgendwie vor den negativen Effekten schützen kannst. + +modifier.toxic-modifier.name=Giftig +modifier.toxic-modifier.desc=§oGIFTIGER RÄCHER!§r\nQuecksilber und seine Ethyl- und Methyl-Salze sind extrem giftig und haben neurodegenerative Effekte.\nSie zu einer Waffe oder einem Werkzeug hinzuzufügen, erlaubt diesen deine Feinde zu blenden und zu vergiften. +modifier.lead-plated.name=Bleibeschichtung +modifier.lead-plated.desc=§oSafety First§r\nWenn du etwas Plutonium oder Uran herumliegen hast und denkst, dass es gut für eine Waffe geeignet wäre, vergiss nicht etwas Abschirmendes hinzuzufügen.\nEine Beschichtung mit Blei wird die tödliche Verstrahlung davon abhalten, dich zu betreffen, während sie deinen Feinden weiterhin schadet. + +config.basemetals.title=Base-Metals-Konfiguration +config.basemetals.restart_guidance=Neustart erforderlich. Die Erzverteilung wird in OreSpawn konfiguriert. +config.basemetals.category.general=Allgemein +config.basemetals.category.metals=Basismetalle +config.basemetals.category.vanilla=Vanilla-Erweiterungen +config.basemetals.category.fluids=Geschmolzene Flüssigkeiten +config.basemetals.option.content_mode=Fantasy-Stufe +config.basemetals.content_mode.high_fantasy=High Fantasy +config.basemetals.content_mode.low_fantasy=Low Fantasy +high_fantasy=Viel Fantasy +low_fantasy=Wenig Fantasy +config.basemetals.connection.mismatch=Der Server verwendet %s, dein Spiel verwendet %s. Gleiche die Fantasy-Stufe unter Mods > Base Metals > Konfiguration an und starte das Spiel neu. +config.basemetals.connection.protocol=Base Metals konnte die Fantasy-Stufe nicht prüfen. Verwende auf dem Server und im Spiel denselben Build von Base Metals. diff --git a/src/main/resources/assets/basemetals/lang/en_AU.lang b/src/main/resources/assets/basemetals/lang/en_AU.lang index 3bd261e35..b4034c156 100644 --- a/src/main/resources/assets/basemetals/lang/en_AU.lang +++ b/src/main/resources/assets/basemetals/lang/en_AU.lang @@ -572,3 +572,17 @@ item.basemetals.stone_scythe.name=Stone Sickle item.basemetals.tin_scythe.name=Tin Sickle item.basemetals.wood_scythe.name=Wood Sickle item.basemetals.zinc_scythe.name=Zinc Sickle + +config.basemetals.title=Base Metals Configuration +config.basemetals.restart_guidance=Restart required. Ore distribution is configured in OreSpawn. +config.basemetals.category.general=General +config.basemetals.category.metals=Base Metals +config.basemetals.category.vanilla=Vanilla Bits +config.basemetals.category.fluids=Molten Fluids +config.basemetals.option.content_mode=Content Mode +config.basemetals.content_mode.high_fantasy=High Fantasy +config.basemetals.content_mode.low_fantasy=Low Fantasy +high_fantasy=High Fantasy +low_fantasy=Low Fantasy +config.basemetals.connection.mismatch=The server uses %s, but your game uses %s. Match the Fantasy Level in Mods > Base Metals > Config and restart. +config.basemetals.connection.protocol=Base Metals could not check the Fantasy Level. Use the same Base Metals build on the server and client. diff --git a/src/main/resources/assets/basemetals/lang/en_CA.lang b/src/main/resources/assets/basemetals/lang/en_CA.lang index ba52bd74d..ecea5326e 100644 --- a/src/main/resources/assets/basemetals/lang/en_CA.lang +++ b/src/main/resources/assets/basemetals/lang/en_CA.lang @@ -574,3 +574,17 @@ item.basemetals.stone_scythe.name=Stone Sickle item.basemetals.tin_scythe.name=Tin Sickle item.basemetals.wood_scythe.name=Wood Sickle item.basemetals.zinc_scythe.name=Zinc Sickle + +config.basemetals.title=Base Metals Configuration +config.basemetals.restart_guidance=Restart required. Ore distribution is configured in OreSpawn. +config.basemetals.category.general=General +config.basemetals.category.metals=Base Metals +config.basemetals.category.vanilla=Vanilla Bits +config.basemetals.category.fluids=Molten Fluids +config.basemetals.option.content_mode=Content Mode +config.basemetals.content_mode.high_fantasy=High Fantasy +config.basemetals.content_mode.low_fantasy=Low Fantasy +high_fantasy=High Fantasy +low_fantasy=Low Fantasy +config.basemetals.connection.mismatch=The server uses %s, but your game uses %s. Match the Fantasy Level in Mods > Base Metals > Config and restart. +config.basemetals.connection.protocol=Base Metals could not check the Fantasy Level. Use the same Base Metals build on the server and client. diff --git a/src/main/resources/assets/basemetals/lang/en_EN.lang b/src/main/resources/assets/basemetals/lang/en_EN.lang index 29d67a055..81872e5bd 100644 --- a/src/main/resources/assets/basemetals/lang/en_EN.lang +++ b/src/main/resources/assets/basemetals/lang/en_EN.lang @@ -573,3 +573,17 @@ item.basemetals.stone_scythe.name=Stone Sickle item.basemetals.tin_scythe.name=Tin Sickle item.basemetals.wood_scythe.name=Wood Sickle item.basemetals.zinc_scythe.name=Zinc Sickle + +config.basemetals.title=Base Metals Configuration +config.basemetals.restart_guidance=Restart required. Ore distribution is configured in OreSpawn. +config.basemetals.category.general=General +config.basemetals.category.metals=Base Metals +config.basemetals.category.vanilla=Vanilla Bits +config.basemetals.category.fluids=Molten Fluids +config.basemetals.option.content_mode=Content Mode +config.basemetals.content_mode.high_fantasy=High Fantasy +config.basemetals.content_mode.low_fantasy=Low Fantasy +high_fantasy=High Fantasy +low_fantasy=Low Fantasy +config.basemetals.connection.mismatch=The server uses %s, but your game uses %s. Match the Fantasy Level in Mods > Base Metals > Config and restart. +config.basemetals.connection.protocol=Base Metals could not check the Fantasy Level. Use the same Base Metals build on the server and client. diff --git a/src/main/resources/assets/basemetals/lang/en_GB.lang b/src/main/resources/assets/basemetals/lang/en_GB.lang index cbd43e95d..1e7d46243 100644 --- a/src/main/resources/assets/basemetals/lang/en_GB.lang +++ b/src/main/resources/assets/basemetals/lang/en_GB.lang @@ -574,3 +574,17 @@ tile.basemetals.stone_anvil.veryDamaged.name=Badly Damaged Stone Anvil tile.basemetals.adamantine_anvil.intact.name=Adamantine Anvil tile.basemetals.adamantine_anvil.slightlyDamaged.name=Slightly Damaged Adamantine Anvil tile.basemetals.adamantine_anvil.veryDamaged.name=Badly Damaged Adamantine Anvil + +config.basemetals.title=Base Metals Configuration +config.basemetals.restart_guidance=Restart required. Ore distribution is configured in OreSpawn. +config.basemetals.category.general=General +config.basemetals.category.metals=Base Metals +config.basemetals.category.vanilla=Vanilla Bits +config.basemetals.category.fluids=Molten Fluids +config.basemetals.option.content_mode=Content Mode +config.basemetals.content_mode.high_fantasy=High Fantasy +config.basemetals.content_mode.low_fantasy=Low Fantasy +high_fantasy=High Fantasy +low_fantasy=Low Fantasy +config.basemetals.connection.mismatch=The server uses %s, but your game uses %s. Match the Fantasy Level in Mods > Base Metals > Config and restart. +config.basemetals.connection.protocol=Base Metals could not check the Fantasy Level. Use the same Base Metals build on the server and client. diff --git a/src/main/resources/assets/basemetals/lang/en_PT.lang b/src/main/resources/assets/basemetals/lang/en_PT.lang index 243866fae..f0b66c586 100644 --- a/src/main/resources/assets/basemetals/lang/en_PT.lang +++ b/src/main/resources/assets/basemetals/lang/en_PT.lang @@ -530,3 +530,17 @@ item.basemetals.tin_gear.name=Tin Gear item.basemetals.zinc_gear.name=Zinc Gear item.basemetals.gold_crackhammer.name=Golden Crack Hammer + +config.basemetals.title=Base Metals Ship's Settings +config.basemetals.restart_guidance=Restart yer game, matey. Chart ore waters in OreSpawn. +config.basemetals.category.general=General Orders +config.basemetals.category.metals=Base Metals Cargo +config.basemetals.category.vanilla=Vanilla Booty +config.basemetals.category.fluids=Molten Cargo +config.basemetals.option.content_mode=Content Course +config.basemetals.content_mode.high_fantasy=High Fantasy +config.basemetals.content_mode.low_fantasy=Low Fantasy +high_fantasy=High Fantasy +low_fantasy=Low Fantasy +config.basemetals.connection.mismatch=The server uses %s, but your game uses %s. Match the Fantasy Level in Mods > Base Metals > Config and restart. +config.basemetals.connection.protocol=Base Metals could not check the Fantasy Level. Use the same Base Metals build on the server and client. diff --git a/src/main/resources/assets/basemetals/lang/en_US.lang b/src/main/resources/assets/basemetals/lang/en_US.lang index d3694440c..1f2db458a 100644 --- a/src/main/resources/assets/basemetals/lang/en_US.lang +++ b/src/main/resources/assets/basemetals/lang/en_US.lang @@ -1883,3 +1883,17 @@ gas.cleanGasPlatinum=Clean Platinum Slurry gas.cleanGasNickel=Clean Nickel Slurry gas.cleanGasStarsteel=Clean Star-Steel Slurry gas.cleanGasZinc=Clean Zinc Slurry + +config.basemetals.title=Base Metals Configuration +config.basemetals.restart_guidance=Restart required. Ore distribution is configured in OreSpawn. +config.basemetals.category.general=General +config.basemetals.category.metals=Base Metals +config.basemetals.category.vanilla=Vanilla Bits +config.basemetals.category.fluids=Molten Fluids +config.basemetals.option.content_mode=Fantasy Level +config.basemetals.content_mode.high_fantasy=High Fantasy +config.basemetals.content_mode.low_fantasy=Low Fantasy +high_fantasy=High Fantasy +low_fantasy=Low Fantasy +config.basemetals.connection.mismatch=The server uses %s, but your game uses %s. Match the Fantasy Level in Mods > Base Metals > Config and restart. +config.basemetals.connection.protocol=Base Metals could not check the Fantasy Level. Use the same Base Metals build on the server and client. diff --git a/src/main/resources/assets/basemetals/lang/es_ES.lang b/src/main/resources/assets/basemetals/lang/es_ES.lang index a6ad0a3ea..61760c812 100644 --- a/src/main/resources/assets/basemetals/lang/es_ES.lang +++ b/src/main/resources/assets/basemetals/lang/es_ES.lang @@ -529,3 +529,17 @@ item.basemetals.starsteel_gear.name=Engranaje de estrellacero item.basemetals.steel_gear.name=Engranaje de acero item.basemetals.tin_gear.name=Engranaje de estaño item.basemetals.zinc_gear.name=Engranaje de zinc + +config.basemetals.title=Configuración de Base Metals +config.basemetals.restart_guidance=Se requiere reiniciar. La distribución de minerales se configura en OreSpawn. +config.basemetals.category.general=General +config.basemetals.category.metals=Metales básicos +config.basemetals.category.vanilla=Complementos de Vanilla +config.basemetals.category.fluids=Fluidos fundidos +config.basemetals.option.content_mode=Modo de contenido +config.basemetals.content_mode.high_fantasy=Alta fantasía +config.basemetals.content_mode.low_fantasy=Baja fantasía +high_fantasy=Alta fantasía +low_fantasy=Baja fantasía +config.basemetals.connection.mismatch=The server uses %s, but your game uses %s. Match the Fantasy Level in Mods > Base Metals > Config and restart. +config.basemetals.connection.protocol=Base Metals could not check the Fantasy Level. Use the same Base Metals build on the server and client. diff --git a/src/main/resources/assets/basemetals/lang/es_MX.lang b/src/main/resources/assets/basemetals/lang/es_MX.lang index e01fe7712..4c8dd6900 100644 --- a/src/main/resources/assets/basemetals/lang/es_MX.lang +++ b/src/main/resources/assets/basemetals/lang/es_MX.lang @@ -530,3 +530,17 @@ item.basemetals.starsteel_gear.name=Engranaje de estrellacero item.basemetals.steel_gear.name=Engranaje de acero item.basemetals.tin_gear.name=Engranaje de estaño item.basemetals.zinc_gear.name=Engranaje de zinc + +config.basemetals.title=Configuración de Base Metals +config.basemetals.restart_guidance=Se requiere reiniciar. La distribución de minerales se configura en OreSpawn. +config.basemetals.category.general=General +config.basemetals.category.metals=Metales básicos +config.basemetals.category.vanilla=Complementos de Vanilla +config.basemetals.category.fluids=Fluidos fundidos +config.basemetals.option.content_mode=Modo de contenido +config.basemetals.content_mode.high_fantasy=Alta fantasía +config.basemetals.content_mode.low_fantasy=Baja fantasía +high_fantasy=Alta fantasía +low_fantasy=Baja fantasía +config.basemetals.connection.mismatch=The server uses %s, but your game uses %s. Match the Fantasy Level in Mods > Base Metals > Config and restart. +config.basemetals.connection.protocol=Base Metals could not check the Fantasy Level. Use the same Base Metals build on the server and client. diff --git a/src/main/resources/assets/basemetals/lang/fr_CA.lang b/src/main/resources/assets/basemetals/lang/fr_CA.lang index ba2af567c..4b3b76cc7 100644 --- a/src/main/resources/assets/basemetals/lang/fr_CA.lang +++ b/src/main/resources/assets/basemetals/lang/fr_CA.lang @@ -532,3 +532,17 @@ item.basemetals.starsteel_gear.name=Pignon en acier-étoile item.basemetals.steel_gear.name=Pignon en acier item.basemetals.tin_gear.name=Pignon en étain item.basemetals.zinc_gear.name=Pignon de zinc + +config.basemetals.title=Configuration de Base Metals +config.basemetals.restart_guidance=Redémarrage requis. La répartition des minerais se configure dans OreSpawn. +config.basemetals.category.general=Général +config.basemetals.category.metals=Métaux de base +config.basemetals.category.vanilla=Compléments Vanilla +config.basemetals.category.fluids=Fluides en fusion +config.basemetals.option.content_mode=Mode de contenu +config.basemetals.content_mode.high_fantasy=Fantaisie élevée +config.basemetals.content_mode.low_fantasy=Fantaisie modérée +high_fantasy=Fantaisie élevée +low_fantasy=Fantaisie modérée +config.basemetals.connection.mismatch=The server uses %s, but your game uses %s. Match the Fantasy Level in Mods > Base Metals > Config and restart. +config.basemetals.connection.protocol=Base Metals could not check the Fantasy Level. Use the same Base Metals build on the server and client. diff --git a/src/main/resources/assets/basemetals/lang/fr_FR.lang b/src/main/resources/assets/basemetals/lang/fr_FR.lang index c5e99b77d..22127718e 100644 --- a/src/main/resources/assets/basemetals/lang/fr_FR.lang +++ b/src/main/resources/assets/basemetals/lang/fr_FR.lang @@ -532,3 +532,17 @@ item.basemetals.tin_gear.name=Pignon en étain item.basemetals.zinc_gear.name=Pignon de zinc item.basemetals.gold_crackhammer.name=Massette en or + +config.basemetals.title=Configuration de Base Metals +config.basemetals.restart_guidance=Redémarrage requis. La répartition des minerais se configure dans OreSpawn. +config.basemetals.category.general=Général +config.basemetals.category.metals=Métaux de base +config.basemetals.category.vanilla=Compléments Vanilla +config.basemetals.category.fluids=Fluides en fusion +config.basemetals.option.content_mode=Mode de contenu +config.basemetals.content_mode.high_fantasy=Fantaisie élevée +config.basemetals.content_mode.low_fantasy=Fantaisie modérée +high_fantasy=Fantaisie élevée +low_fantasy=Fantaisie modérée +config.basemetals.connection.mismatch=The server uses %s, but your game uses %s. Match the Fantasy Level in Mods > Base Metals > Config and restart. +config.basemetals.connection.protocol=Base Metals could not check the Fantasy Level. Use the same Base Metals build on the server and client. diff --git a/src/main/resources/assets/basemetals/lang/it_IT.lang b/src/main/resources/assets/basemetals/lang/it_IT.lang index 32b4459c3..e5a9cb5fa 100644 --- a/src/main/resources/assets/basemetals/lang/it_IT.lang +++ b/src/main/resources/assets/basemetals/lang/it_IT.lang @@ -527,3 +527,17 @@ item.basemetals.starsteel_gear.name=Ferro-Stelle Ingranaggio item.basemetals.steel_gear.name=Acciaio Ingranaggio item.basemetals.tin_gear.name=Latta Ingranaggio item.basemetals.zinc_gear.name=Zinco Ingranaggio + +config.basemetals.title=Configurazione di Base Metals +config.basemetals.restart_guidance=Riavvio necessario. La distribuzione dei minerali si configura in OreSpawn. +config.basemetals.category.general=Generale +config.basemetals.category.metals=Metalli di base +config.basemetals.category.vanilla=Aggiunte Vanilla +config.basemetals.category.fluids=Fluidi fusi +config.basemetals.option.content_mode=Modalità contenuti +config.basemetals.content_mode.high_fantasy=Alta fantasia +config.basemetals.content_mode.low_fantasy=Bassa fantasia +high_fantasy=Alta fantasia +low_fantasy=Bassa fantasia +config.basemetals.connection.mismatch=The server uses %s, but your game uses %s. Match the Fantasy Level in Mods > Base Metals > Config and restart. +config.basemetals.connection.protocol=Base Metals could not check the Fantasy Level. Use the same Base Metals build on the server and client. diff --git a/src/main/resources/assets/basemetals/lang/ja_jp.lang b/src/main/resources/assets/basemetals/lang/ja_jp.lang index b00e9ddb3..7d99330c6 100644 --- a/src/main/resources/assets/basemetals/lang/ja_jp.lang +++ b/src/main/resources/assets/basemetals/lang/ja_jp.lang @@ -1867,3 +1867,17 @@ gas.cleanGasPlatinum=きれいなプラチナのスラリー gas.cleanGasNickel=きれいなニッケルのスラリー gas.cleanGasStarsteel=きれいなスタースチールのスラリー gas.cleanGasZinc=きれいな亜鉛のスラリー + +config.basemetals.title=Base Metals 設定 +config.basemetals.restart_guidance=再起動が必要です。鉱石の分布は OreSpawn で設定します。 +config.basemetals.category.general=一般 +config.basemetals.category.metals=Base Metals +config.basemetals.category.vanilla=バニラ追加要素 +config.basemetals.category.fluids=溶融流体 +config.basemetals.option.content_mode=コンテンツモード +config.basemetals.content_mode.high_fantasy=ハイファンタジー +config.basemetals.content_mode.low_fantasy=ローファンタジー +high_fantasy=ハイファンタジー +low_fantasy=ローファンタジー +config.basemetals.connection.mismatch=The server uses %s, but your game uses %s. Match the Fantasy Level in Mods > Base Metals > Config and restart. +config.basemetals.connection.protocol=Base Metals could not check the Fantasy Level. Use the same Base Metals build on the server and client. diff --git a/src/main/resources/assets/basemetals/lang/nl_NL.lang b/src/main/resources/assets/basemetals/lang/nl_NL.lang index ec306dbff..66f13b546 100644 --- a/src/main/resources/assets/basemetals/lang/nl_NL.lang +++ b/src/main/resources/assets/basemetals/lang/nl_NL.lang @@ -530,3 +530,17 @@ item.basemetals.starsteel_gear.name=Star-Steel Gear item.basemetals.steel_gear.name=Steel Gear item.basemetals.tin_gear.name=Tin Gear item.basemetals.zinc_gear.name=Zinc Gear + +config.basemetals.title=Base Metals-configuratie +config.basemetals.restart_guidance=Opnieuw opstarten vereist. De ertsverdeling wordt in OreSpawn ingesteld. +config.basemetals.category.general=Algemeen +config.basemetals.category.metals=Basismetalen +config.basemetals.category.vanilla=Vanilla-uitbreidingen +config.basemetals.category.fluids=Gesmolten vloeistoffen +config.basemetals.option.content_mode=Inhoudsmodus +config.basemetals.content_mode.high_fantasy=Hoge fantasie +config.basemetals.content_mode.low_fantasy=Lage fantasie +high_fantasy=Hoge fantasie +low_fantasy=Lage fantasie +config.basemetals.connection.mismatch=The server uses %s, but your game uses %s. Match the Fantasy Level in Mods > Base Metals > Config and restart. +config.basemetals.connection.protocol=Base Metals could not check the Fantasy Level. Use the same Base Metals build on the server and client. diff --git a/src/main/resources/assets/basemetals/lang/pt_BR.lang b/src/main/resources/assets/basemetals/lang/pt_BR.lang index 516abac72..a1dc6fe99 100644 --- a/src/main/resources/assets/basemetals/lang/pt_BR.lang +++ b/src/main/resources/assets/basemetals/lang/pt_BR.lang @@ -530,3 +530,17 @@ item.basemetals.starsteel_gear.name=Roda Dentada de Ferro-Estrela item.basemetals.steel_gear.name=Roda Dentada de Aço item.basemetals.tin_gear.name=Roda Dentada de Estanho item.basemetals.zinc_gear.name=Roda Dentada de Zinco + +config.basemetals.title=Configuração do Base Metals +config.basemetals.restart_guidance=É necessário reiniciar. A distribuição de minérios é configurada no OreSpawn. +config.basemetals.category.general=Geral +config.basemetals.category.metals=Metais básicos +config.basemetals.category.vanilla=Adições Vanilla +config.basemetals.category.fluids=Fluidos fundidos +config.basemetals.option.content_mode=Modo de conteúdo +config.basemetals.content_mode.high_fantasy=Alta fantasia +config.basemetals.content_mode.low_fantasy=Baixa fantasia +high_fantasy=Alta fantasia +low_fantasy=Baixa fantasia +config.basemetals.connection.mismatch=The server uses %s, but your game uses %s. Match the Fantasy Level in Mods > Base Metals > Config and restart. +config.basemetals.connection.protocol=Base Metals could not check the Fantasy Level. Use the same Base Metals build on the server and client. diff --git a/src/main/resources/assets/basemetals/lang/ru_ru.lang b/src/main/resources/assets/basemetals/lang/ru_ru.lang index 4764bc300..e1a0aa799 100644 --- a/src/main/resources/assets/basemetals/lang/ru_ru.lang +++ b/src/main/resources/assets/basemetals/lang/ru_ru.lang @@ -1844,3 +1844,17 @@ modifier.toxic-modifier.desc=§oТОКСИЧНЫЙ МСТИТЕЛЬ!§r\nРту modifier.lead-plated.name=Свинцовая пластина modifier.lead-plated.desc=§oБезопастность Прежде Всего!§r\nЕсли рядом с вами есть плутоний или уран, я думаю это можно использовать как оружие, не забудьте экранировать излучение.\nХорошая свинцовая пластина может спасти Вас от смертельного излучения, пока Ваших врагов будетубивать радиация. +config.basemetals.title=Настройки Base Metals +config.basemetals.restart_guidance=Требуется перезапуск. Распределение руд настраивается в OreSpawn. +config.basemetals.category.general=Общие +config.basemetals.category.metals=Базовые металлы +config.basemetals.category.vanilla=Дополнения Vanilla +config.basemetals.category.fluids=Расплавленные жидкости +config.basemetals.option.content_mode=Уровень фэнтези +config.basemetals.content_mode.high_fantasy=Высокое фэнтези +config.basemetals.content_mode.low_fantasy=Низкое фэнтези +high_fantasy=Высокий уровень фэнтези +low_fantasy=Низкий уровень фэнтези +config.basemetals.connection.mismatch=Уровень на сервере — %s, в вашей игре — %s. Выберите тот же уровень в меню «Моды > Base Metals > Настройки» и перезапустите игру. +config.basemetals.connection.protocol=Не удалось проверить уровень фэнтези Base Metals. Установите одну и ту же сборку Base Metals на клиенте и сервере. + diff --git a/src/main/resources/assets/basemetals/lang/zh_CN.lang b/src/main/resources/assets/basemetals/lang/zh_CN.lang index 5385483d1..81b9bfa1d 100644 --- a/src/main/resources/assets/basemetals/lang/zh_CN.lang +++ b/src/main/resources/assets/basemetals/lang/zh_CN.lang @@ -1810,3 +1810,17 @@ modifier.brittle.name=易碎 modifier.heavy.name=沉重 modifier.reactive.name=活泼 modifier.radioactive.name=放射 + +config.basemetals.title=Base Metals 配置 +config.basemetals.restart_guidance=需要重启。矿石分布请在 OreSpawn 中配置。 +config.basemetals.category.general=常规 +config.basemetals.category.metals=基础金属 +config.basemetals.category.vanilla=原版扩展 +config.basemetals.category.fluids=熔融流体 +config.basemetals.option.content_mode=奇幻等级 +config.basemetals.content_mode.high_fantasy=高幻想 +config.basemetals.content_mode.low_fantasy=低幻想 +high_fantasy=高奇幻 +low_fantasy=低奇幻 +config.basemetals.connection.mismatch=服务器使用%s,你的游戏使用%s。请在模组 > Base Metals > 配置中选择与服务器一致的奇幻等级,然后重启游戏。 +config.basemetals.connection.protocol=Base Metals 无法核对奇幻等级。请在服务器和客户端使用相同构建版本的 Base Metals。 diff --git a/src/main/resources/assets/basemetals/lang/zh_TW.lang b/src/main/resources/assets/basemetals/lang/zh_TW.lang index 75eda053a..47f058672 100644 --- a/src/main/resources/assets/basemetals/lang/zh_TW.lang +++ b/src/main/resources/assets/basemetals/lang/zh_TW.lang @@ -1884,3 +1884,17 @@ gas.cleanGasPlatinum=純淨的白金漿 gas.cleanGasNickel=純淨的鎳漿 gas.cleanGasStarsteel=純淨的星鋼漿 gas.cleanGasZinc=純淨的鋅漿 + +config.basemetals.title=Base Metals 設定 +config.basemetals.restart_guidance=需要重新啟動。礦石分布請在 OreSpawn 中設定。 +config.basemetals.category.general=一般 +config.basemetals.category.metals=基礎金屬 +config.basemetals.category.vanilla=原版擴充 +config.basemetals.category.fluids=熔融流體 +config.basemetals.option.content_mode=內容模式 +config.basemetals.content_mode.high_fantasy=高幻想 +config.basemetals.content_mode.low_fantasy=低幻想 +high_fantasy=高幻想 +low_fantasy=低幻想 +config.basemetals.connection.mismatch=The server uses %s, but your game uses %s. Match the Fantasy Level in Mods > Base Metals > Config and restart. +config.basemetals.connection.protocol=Base Metals could not check the Fantasy Level. Use the same Base Metals build on the server and client. diff --git a/src/main/resources/mcmod.info b/src/main/resources/mcmod.info index 4cd9edabe..70c487a52 100644 --- a/src/main/resources/mcmod.info +++ b/src/main/resources/mcmod.info @@ -11,7 +11,7 @@ "credits": "Cyanobacterium (aka DrCyano) For starting the project & geologists everywhere. SeqSEE for helping with shields.", "logoFile": "", "screenshots": [], - "requiredMods": ["orespawn@[4.1.2.110021,5.0.0)"], - "dependencies": ["orespawn@[4.1.2.110021,5.0.0)"] + "requiredMods": ["orespawn@[4.1.6.110021,5.0.0)"], + "dependencies": ["orespawn@[4.1.6.110021,5.0.0)"] } ] diff --git a/src/test/java/zone/moddev/mc/basemetals/content/BarsModelTest.java b/src/test/java/zone/moddev/mc/basemetals/content/BarsModelTest.java new file mode 100644 index 000000000..460b0d760 --- /dev/null +++ b/src/test/java/zone/moddev/mc/basemetals/content/BarsModelTest.java @@ -0,0 +1,126 @@ +package zone.moddev.mc.basemetals.content; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertFalse; +import static org.junit.jupiter.api.Assertions.assertTrue; + +import java.io.Reader; +import java.nio.charset.StandardCharsets; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.Paths; +import java.util.ArrayList; +import java.util.HashSet; +import java.util.List; +import java.util.Map; +import java.util.Set; +import java.util.stream.Stream; + +import com.google.gson.JsonArray; +import com.google.gson.JsonElement; +import com.google.gson.JsonObject; +import com.google.gson.JsonParser; +import org.junit.jupiter.api.Test; + +class BarsModelTest { + private static final Path ASSETS = Paths.get("src/main/resources/assets/basemetals"); + private static final String[] DIRECTIONS = { "east", "north", "south", "west" }; + + @Test + void everyBarsConnectionPatternUsesANonOverlappingModel() throws Exception { + int models = 0; + try (Stream files = Files.list(ASSETS.resolve("blockstates"))) { + for (final Path state : (Iterable) files.sorted()::iterator) { + if (!state.getFileName().toString().endsWith("_bars.json")) { + continue; + } + + final JsonObject variants = read(state).getAsJsonObject("variants"); + assertEquals(16, variants.entrySet().size(), state.toString()); + for (int pattern = 0; pattern < 16; pattern++) { + final List bits = new ArrayList<>(); + for (int bit = 0; bit < DIRECTIONS.length; bit++) { + bits.add(DIRECTIONS[bit] + "=" + ((pattern & (1 << bit)) != 0)); + } + final String key = String.join(",", bits); + assertTrue(variants.has(key), state + " lacks " + key); + final String model = variants.getAsJsonObject(key).get("model").getAsString(); + checkFaces(resolveModel(model, new HashSet<>()), model); + } + models++; + } + } + + assertEquals(27, models); + } + + private static JsonArray resolveModel(final String id, final Set parents) throws Exception { + assertTrue(parents.add(id), "Model parent cycle: " + id); + assertTrue(id.startsWith("basemetals:"), "Unexpected bars model " + id); + String name = id.substring("basemetals:".length()); + if (!name.startsWith("block/")) { + name = "block/" + name; + } + final JsonObject model = read(ASSETS.resolve("models/" + name + ".json")); + return model.has("elements") ? model.getAsJsonArray("elements") + : resolveModel(model.get("parent").getAsString(), parents); + } + + private static void checkFaces(final JsonArray elements, final String model) { + final List faces = new ArrayList<>(); + for (final JsonElement value : elements) { + final JsonObject element = value.getAsJsonObject(); + for (final Map.Entry side : element.getAsJsonObject("faces").entrySet()) { + faces.add(new Face(side.getKey(), coordinates(element, "from"), coordinates(element, "to"))); + } + } + + for (int first = 0; first < faces.size(); first++) { + for (int second = first + 1; second < faces.size(); second++) { + assertFalse(faces.get(first).overlaps(faces.get(second)), model + " has overlapping faces"); + } + } + } + + private static double[] coordinates(final JsonObject element, final String name) { + final JsonArray values = element.getAsJsonArray(name); + return new double[] { values.get(0).getAsDouble(), values.get(1).getAsDouble(), values.get(2).getAsDouble() }; + } + + private static JsonObject read(final Path path) throws Exception { + try (Reader reader = Files.newBufferedReader(path, StandardCharsets.UTF_8)) { + return new JsonParser().parse(reader).getAsJsonObject(); + } + } + + private static final class Face { + private final String side; + private final int axis; + private final double[] from; + private final double[] to; + private final double plane; + + private Face(final String side, final double[] from, final double[] to) { + this.side = side; + this.axis = "west".equals(side) || "east".equals(side) ? 0 + : "down".equals(side) || "up".equals(side) ? 1 : 2; + this.from = from; + this.to = to; + this.plane = "west".equals(side) || "down".equals(side) || "north".equals(side) + ? from[axis] : to[axis]; + } + + private boolean overlaps(final Face other) { + if (!side.equals(other.side) || Math.abs(plane - other.plane) > 0.01) { + return false; + } + for (int dimension = 0; dimension < 3; dimension++) { + if (dimension != axis && Math.min(to[dimension], other.to[dimension]) + - Math.max(from[dimension], other.from[dimension]) < 0.000001) { + return false; + } + } + return true; + } + } +} diff --git a/src/test/java/zone/moddev/mc/basemetals/content/ContentPolicyTest.java b/src/test/java/zone/moddev/mc/basemetals/content/ContentPolicyTest.java new file mode 100644 index 000000000..dcc0c6576 --- /dev/null +++ b/src/test/java/zone/moddev/mc/basemetals/content/ContentPolicyTest.java @@ -0,0 +1,60 @@ +package zone.moddev.mc.basemetals.content; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertFalse; +import static org.junit.jupiter.api.Assertions.assertTrue; + +import net.minecraft.util.ResourceLocation; +import org.junit.jupiter.api.Test; + +class ContentPolicyTest { + private final ContentPolicy low = ContentPolicy.forMode(ContentMode.LOW_FANTASY); + + @Test + void olderConfigsAndInvalidValuesKeepTheFullRecipeSet() { + assertEquals(ContentMode.HIGH_FANTASY, ContentMode.fromSerializedName(null)); + assertEquals(ContentMode.HIGH_FANTASY, ContentMode.fromSerializedName("invalid")); + assertEquals(ContentMode.LOW_FANTASY, ContentMode.fromSerializedName(" Low_Fantasy ")); + + final ContentPolicy high = ContentPolicy.forMode(null); + for (final MaterialForm form : MaterialForm.values()) { + assertTrue(high.allows("adamantine", form)); + assertTrue(high.allows("mercury", form)); + } + } + + @Test + void lowFantasyKeepsMaterialsButLimitsTheFormsTheyCanMake() { + assertTrue(low.allows(id("adamantine_ore"))); + assertTrue(low.allows(id("adamantine_pickaxe"))); + assertTrue(low.allows(id("adamantine_arrow"))); + assertFalse(low.allows(id("adamantine_bow"))); + assertFalse(low.allows(id("steel_crossbow"))); + assertFalse(low.allows(id("steel_fishing_rod"))); + assertFalse(low.allows(id("pewter_chestplate"))); + assertFalse(low.allows(id("pewter_horse_armor"))); + assertTrue(low.allows(id("double_pewter_slab"))); + assertTrue(low.allows(id("silver_sword"))); + assertFalse(low.allows(id("silver_pickaxe"))); + assertTrue(low.allows(id("diamond_crackhammer"))); + assertFalse(low.allows(id("copper_anvil"))); + assertTrue(low.allows(id("steel_anvil"))); + assertTrue(low.allows(id("mercury"))); + assertTrue(low.allows(id("mercury_ingot"))); + assertTrue(low.allows(id("mercury_powder"))); + assertFalse(low.allows(id("mercury_block"))); + assertFalse(low.allows(id("mercury_powder_dirty"))); + } + + @Test + void vanillaAndAddOnsKeepTheirOwnRules() { + assertTrue(low.allows(new ResourceLocation("minecraft:bow"))); + assertTrue(low.allows(new ResourceLocation("basegems:diamond_bow"))); + assertTrue(low.allows(new ResourceLocation("modernmetals:steel_crossbow"))); + assertTrue(low.allows(id("human_detector"))); + } + + private static ResourceLocation id(final String name) { + return new ResourceLocation("basemetals", name); + } +} diff --git a/tools/validation/legacy110/README.md b/tools/validation/legacy110/README.md index ba7461506..3b0977b6c 100644 --- a/tools/validation/legacy110/README.md +++ b/tools/validation/legacy110/README.md @@ -15,12 +15,17 @@ The main jar contains production code and resources only. The separate `build/test-mods/legacy110-probe.jar` is a server-side test mod; do not distribute it with releases or leave it installed for normal play. -`audit_artifacts.py` compares the candidate with the pre-namespace production jar. -It checks the complete class and resource inventory, Java 8 bytecode, saved -resource names, version metadata and exclusion of test material and local paths. +`audit_artifacts.py` records the 2.5.1 namespace-migration comparison against +the original jar. For the current release, use `verifyReleaseArtifacts` to +check the inventory, Java 8 bytecode and exclusion of test material. ## Runtime checks +The packaged launch probe checks molten metal contact with +`-Dlaunch.moltenContact=true`. The CI suite runs it on a fresh world and +reload, covering source and flowing metal, Creative, Fire Resistance, water +and mercury. + For the captured Cyano and MMD fixtures, launch the packaged server with `review.manifest` pointing to `legacy_registry_manifest_runtime.json` and `review.phase` set to `first`, `reload`, `delayed`, then `stable` on separate boots. diff --git a/tools/validation/legacy110/fantasy-probe/review/fantasy/FantasyGuiProbe.java b/tools/validation/legacy110/fantasy-probe/review/fantasy/FantasyGuiProbe.java new file mode 100644 index 000000000..4935fa7ee --- /dev/null +++ b/tools/validation/legacy110/fantasy-probe/review/fantasy/FantasyGuiProbe.java @@ -0,0 +1,160 @@ +package review.fantasy; + +import java.lang.reflect.Field; +import java.lang.reflect.Method; +import java.nio.charset.StandardCharsets; +import java.nio.file.Files; +import java.nio.file.Paths; +import java.util.Arrays; + +import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.GuiButton; +import net.minecraft.client.gui.GuiDisconnected; +import net.minecraft.client.gui.GuiMainMenu; +import net.minecraft.client.gui.GuiScreen; +import net.minecraft.client.resources.I18n; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.text.ITextComponent; +import net.minecraftforge.common.MinecraftForge; +import net.minecraftforge.fml.client.FMLClientHandler; +import net.minecraftforge.fml.client.config.GuiConfig; +import net.minecraftforge.fml.client.config.GuiConfigEntries; +import net.minecraftforge.fml.common.Loader; +import net.minecraftforge.fml.common.Mod; +import net.minecraftforge.fml.common.event.FMLInitializationEvent; +import net.minecraftforge.fml.common.eventhandler.SubscribeEvent; +import net.minecraftforge.fml.common.gameevent.TickEvent; +import zone.moddev.mc.basemetals.content.ContentMode; +import zone.moddev.mc.basemetals.util.Config; +import zone.moddev.mc.orespawn.api.client.WorldSettingsExtensionRegistry; + +@Mod(modid = "basemetalsfantasyguiprobe", name = "Base Metals configuration checks", version = "1", + clientSideOnly = true, dependencies = "required-after:basemetals") +public final class FantasyGuiProbe { + private boolean checked; + + @Mod.EventHandler + public void init(final FMLInitializationEvent event) { + if (Boolean.getBoolean("fantasy.guiProbe") || Boolean.getBoolean("fantasy.mismatchProbe")) { + MinecraftForge.EVENT_BUS.register(this); + } + } + + @SubscribeEvent + public void tick(final TickEvent.ClientTickEvent event) throws Exception { + final Minecraft client = Minecraft.getMinecraft(); + if (checked || event.phase != TickEvent.Phase.END) { + return; + } + if (Boolean.getBoolean("fantasy.mismatchProbe")) { + if (client.currentScreen instanceof GuiDisconnected) { + checkMismatch(client); + } + return; + } + if (!(client.currentScreen instanceof GuiMainMenu)) { + return; + } + checked = true; + final GuiScreen parent = client.currentScreen; + final GuiConfig forge = (GuiConfig) FMLClientHandler.instance() + .getGuiFactoryFor(Loader.instance().getIndexedModList().get("basemetals")) + .mainConfigGuiClass().getConstructor(GuiScreen.class).newInstance(parent); + final GuiConfig oreSpawn = (GuiConfig) WorldSettingsExtensionRegistry.extensions().stream() + .filter(extension -> extension.id().equals(new ResourceLocation("basemetals", "configuration"))) + .findFirst().get().createScreen(parent); + require(forge.configElements.size() == 7 && oreSpawn.configElements.size() == 7, "Expected seven categories"); + require(forge.allRequireMcRestart && oreSpawn.allRequireMcRestart, "Expected restart guidance"); + + final GuiConfig cancelled = openGeneral(client, oreSpawn); + selector(cancelled).valueButtonPressed(0); + escape(cancelled); + escape(oreSpawn); + require(client.currentScreen == parent, "Escape did not return to the parent"); + require("high_fantasy".equals(savedMode()), "Escape saved a pending change"); + + final GuiConfig general = openGeneral(client, forge); + final GuiConfigEntries.CycleValueEntry mode = selector(general); + require(Arrays.equals(new String[] { "high_fantasy", "low_fantasy" }, + mode.getConfigElement().getValidValues()), "Expected two choices"); + require(!I18n.format(mode.getConfigElement().getLanguageKey()) + .equals(mode.getConfigElement().getLanguageKey()), "Missing Fantasy Level label"); + mode.valueButtonPressed(0); + require("low_fantasy".equals(mode.getCurrentValue()), "Low Fantasy was not selected"); + mode.undoChanges(); + require("high_fantasy".equals(mode.getCurrentValue()), "Undo did not restore High Fantasy"); + mode.valueButtonPressed(0); + mode.setToDefault(); + require("high_fantasy".equals(mode.getCurrentValue()), "Defaults did not restore High Fantasy"); + mode.valueButtonPressed(0); + + done(general); + require("high_fantasy".equals(savedMode()), "A category saved before the root screen"); + require(client.currentScreen == forge, "Done did not return to the root screen"); + done(forge); + require("low_fantasy".equals(savedMode()), "Done did not save Low Fantasy"); + require(Config.getActiveContentMode() == ContentMode.HIGH_FANTASY, "Fantasy Level changed before restart"); + Files.write(Paths.get("fantasy-gui-pass.txt"), "Both config routes passed.\n".getBytes(StandardCharsets.UTF_8)); + client.shutdown(); + } + + private void checkMismatch(final Minecraft client) throws Exception { + checked = true; + for (final Field field : GuiDisconnected.class.getDeclaredFields()) { + if (field.getType() == ITextComponent.class) { + field.setAccessible(true); + final String message = ((ITextComponent) field.get(client.currentScreen)).getUnformattedText(); + require(message.contains("The server uses Low Fantasy, but your game uses High Fantasy."), message); + Files.write(Paths.get("fantasy-mismatch-pass.txt"), message.getBytes(StandardCharsets.UTF_8)); + client.shutdown(); + return; + } + } + throw new AssertionError("The disconnect screen had no reason"); + } + + private static GuiConfig openGeneral(final Minecraft client, final GuiConfig root) throws Exception { + client.displayGuiScreen(root); + final Field child = GuiConfigEntries.CategoryEntry.class.getDeclaredField("childScreen"); + child.setAccessible(true); + final GuiConfig general = (GuiConfig) child.get(root.entryList.listEntries.get(0)); + client.displayGuiScreen(general); + return general; + } + + private static GuiConfigEntries.CycleValueEntry selector(final GuiConfig general) { + return (GuiConfigEntries.CycleValueEntry) general.entryList.listEntries.stream() + .filter(entry -> "contentMode".equals(entry.getConfigElement().getName())).findFirst().get(); + } + + private static String savedMode() { + return Config.getConfiguration().getCategory("General").get("contentMode").getString(); + } + + private static void escape(final GuiConfig screen) throws Exception { + callback("keyTyped", "func_73869_a", char.class, int.class).invoke(screen, '\u001b', 1); + } + + private static void done(final GuiConfig screen) throws Exception { + callback("actionPerformed", "func_146284_a", GuiButton.class) + .invoke(screen, new GuiButton(2000, 0, 0, "Done")); + } + + private static Method callback(final String mapped, final String runtime, final Class... parameters) + throws Exception { + Method method; + try { + method = GuiConfig.class.getDeclaredMethod(mapped, parameters); + } catch (NoSuchMethodException missing) { + method = GuiConfig.class.getDeclaredMethod(runtime, parameters); + } + method.setAccessible(true); + return method; + } + + private static void require(final boolean condition, final String reason) { + if (!condition) { + throw new AssertionError(reason); + } + } +} diff --git a/tools/validation/legacy110/fantasy-probe/review/fantasy/FantasyProbe.java b/tools/validation/legacy110/fantasy-probe/review/fantasy/FantasyProbe.java new file mode 100644 index 000000000..94c76fcda --- /dev/null +++ b/tools/validation/legacy110/fantasy-probe/review/fantasy/FantasyProbe.java @@ -0,0 +1,93 @@ +package review.fantasy; + +import java.nio.charset.StandardCharsets; +import java.nio.file.Files; +import java.nio.file.Paths; +import java.util.List; +import java.util.Map; +import java.util.Random; +import java.util.Set; +import java.util.TreeMap; +import java.util.TreeSet; + +import com.google.gson.GsonBuilder; +import com.google.gson.JsonObject; +import com.mcmoddev.lib.registry.CrusherRecipeRegistry; +import net.minecraft.entity.passive.EntityVillager.ITradeList; +import net.minecraft.item.ItemStack; +import net.minecraft.item.crafting.CraftingManager; +import net.minecraft.item.crafting.FurnaceRecipes; +import net.minecraft.util.ResourceLocation; +import net.minecraft.village.MerchantRecipeList; +import net.minecraftforge.fml.common.FMLCommonHandler; +import net.minecraftforge.fml.common.Loader; +import net.minecraftforge.fml.common.Mod; +import net.minecraftforge.fml.common.event.FMLServerStartedEvent; +import net.minecraftforge.fml.common.registry.ForgeRegistries; +import net.minecraftforge.fml.common.registry.VillagerRegistry; +import net.minecraftforge.fml.common.registry.VillagerRegistry.VillagerProfession; + +@Mod(modid = "basemetalsfantasyprobe", name = "Base Metals Fantasy Level checks", version = "1", + serverSideOnly = true, dependencies = "required-after:basemetals") +public final class FantasyProbe { + @Mod.EventHandler + public void started(final FMLServerStartedEvent event) throws Exception { + if (!Boolean.getBoolean("fantasy.serverProbe")) { + return; + } + + final Set registered = new TreeSet<>(); + ForgeRegistries.ITEMS.forEach(item -> registered.add(item.getRegistryName().toString())); + ForgeRegistries.BLOCKS.forEach(block -> registered.add(block.getRegistryName().toString())); + final Map crafting = new TreeMap<>(); + CraftingManager.getInstance().getRecipeList().forEach(recipe -> count(crafting, recipe.getRecipeOutput())); + final Map smelting = new TreeMap<>(); + FurnaceRecipes.instance().getSmeltingList().values().forEach(stack -> count(smelting, stack)); + final Map crushing = new TreeMap<>(); + CrusherRecipeRegistry.getInstance().getAllRecipes().forEach(recipe -> count(crushing, recipe.getOutput())); + + final GsonBuilder gson = new GsonBuilder().setPrettyPrinting(); + final JsonObject result = new JsonObject(); + result.add("registry", gson.create().toJsonTree(registered)); + result.add("crafting", gson.create().toJsonTree(crafting)); + result.add("smelting", gson.create().toJsonTree(smelting)); + result.add("crushing", gson.create().toJsonTree(crushing)); + result.add("trades", gson.create().toJsonTree(smithTrades())); + if (Loader.isModLoaded("tconstruct")) { + final Class registry = Class.forName("slimeknights.tconstruct.library.TinkerRegistry"); + final Object material = registry.getMethod("getMaterial", String.class).invoke(null, "adamantine"); + result.addProperty("tinkersBow", (Boolean) material.getClass() + .getMethod("hasStats", String.class).invoke(material, "bow")); + result.addProperty("tinkersHead", (Boolean) material.getClass() + .getMethod("hasStats", String.class).invoke(material, "head")); + } + Files.write(Paths.get("fantasy-server.json"), gson.create().toJson(result).getBytes(StandardCharsets.UTF_8)); + FMLCommonHandler.instance().getMinecraftServerInstance().initiateShutdown(); + } + + private static Map smithTrades() { + final VillagerProfession smith = VillagerRegistry.instance().getRegistry() + .getValue(new ResourceLocation("minecraft:smith")); + final Map results = new TreeMap<>(); + for (int career = 0; career < 3; career++) { + for (int level = 1; level <= 10; level++) { + final List trades = smith.getCareer(career).getTrades(level); + if (trades == null) { + continue; + } + for (final ITradeList trade : trades) { + final MerchantRecipeList recipes = new MerchantRecipeList(); + trade.modifyMerchantRecipeList(recipes, new Random(8675309)); + recipes.forEach(recipe -> count(results, recipe.getItemToSell())); + } + } + } + return results; + } + + private static void count(final Map counts, final ItemStack stack) { + if (stack != null && stack.getItem() != null && stack.getItem().getRegistryName() != null) { + counts.merge(stack.getItem().getRegistryName().toString(), 1, Integer::sum); + } + } +} diff --git a/tools/validation/legacy110/launch-probe/review/launch/DevLaunchProbe.java b/tools/validation/legacy110/launch-probe/review/launch/DevLaunchProbe.java index 8b8d711a6..da934592d 100644 --- a/tools/validation/legacy110/launch-probe/review/launch/DevLaunchProbe.java +++ b/tools/validation/legacy110/launch-probe/review/launch/DevLaunchProbe.java @@ -1,17 +1,22 @@ package review.launch; +import com.mojang.authlib.GameProfile; import com.google.gson.GsonBuilder; import com.google.gson.JsonObject; import java.nio.charset.StandardCharsets; import java.nio.file.Files; import java.nio.file.Paths; +import java.util.UUID; import java.util.concurrent.Future; import net.minecraft.block.Block; import net.minecraft.client.Minecraft; import net.minecraft.client.gui.GuiMainMenu; +import net.minecraft.entity.player.EntityPlayer; import net.minecraft.init.Blocks; +import net.minecraft.init.MobEffects; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.potion.PotionEffect; import net.minecraft.server.MinecraftServer; import net.minecraft.tileentity.TileEntityChest; import net.minecraft.util.ResourceLocation; @@ -60,7 +65,7 @@ public void started(final FMLServerStartedEvent event) throws Exception { } private static void checkWorld(final MinecraftServer server) { - final String expectedVersion = System.getProperty("launch.expectedVersion", "2.5.1.110021"); + final String expectedVersion = System.getProperty("launch.expectedVersion", "2.6.0.110021"); require(expectedVersion.equals(Loader.instance().getIndexedModList().get("basemetals").getVersion()), "Wrong Base Metals version"); require(Loader.isModLoaded("orespawn"), "The ordinary launch did not load OreSpawn"); for (final String optional : new String[]{"tconstruct", "ic2", "cofhcore", "Mekanism", "taiga", "golems_metal"}) { @@ -68,6 +73,7 @@ private static void checkWorld(final MinecraftServer server) { } final WorldServer world = server.worldServerForDimension(0); + if (Boolean.getBoolean("launch.moltenContact")) checkMoltenContact(world); final BlockPos position = new BlockPos(8, 80, 8); final ResourceLocation copper = new ResourceLocation("basemetals", "copper_block"); final Block block = net.minecraftforge.fml.common.registry.ForgeRegistries.BLOCKS.getValue(copper); @@ -104,6 +110,49 @@ private static void checkWorld(final MinecraftServer server) { server.saveAllWorlds(false); } + private static void checkMoltenContact(final WorldServer world) { + final BlockPos pos = new BlockPos(8, 80, 12); + final ResourceLocation metalId = new ResourceLocation(System.getProperty("launch.moltenBlock", "basemetals:copper")); + final Block metal = net.minecraftforge.fml.common.registry.ForgeRegistries.BLOCKS.getValue(metalId); + final Block mercury = net.minecraftforge.fml.common.registry.ForgeRegistries.BLOCKS + .getValue(new ResourceLocation("basemetals", "mercury")); + require(metal != null && mercury != null, "Missing " + metalId + " or mercury block"); + try { + world.setBlockState(pos, metal.getDefaultState(), 2); + checkContact(world, pos, "deep " + metalId, 0.25, false, false, 4.0F); + checkContact(world, pos, "above " + metalId, 0.90, false, false, 0.0F); + checkContact(world, pos, "shallow " + metalId, 0.70, false, false, 4.0F); + checkContact(world, pos, "fire resistant player", 0.70, true, false, 0.0F); + checkContact(world, pos, "creative player", 0.70, false, true, 0.0F); + world.setBlockState(pos, metal.getStateFromMeta(1), 2); + checkContact(world, pos, "above flowing " + metalId, 0.80, false, false, 0.0F); + checkContact(world, pos, "shallow flowing " + metalId, 0.70, false, false, 4.0F); + world.setBlockState(pos, Blocks.WATER.getDefaultState(), 2); + checkContact(world, pos, "water", 0.25, false, false, 0.0F); + world.setBlockState(pos, mercury.getDefaultState(), 2); + checkContact(world, pos, "liquid mercury", 0.25, false, false, 0.0F); + } finally { + world.setBlockToAir(pos); + } + } + + private static void checkContact(final WorldServer world, final BlockPos pos, final String label, + final double height, final boolean resistant, final boolean creative, final float damage) { + final EntityPlayer player = new EntityPlayer(world, new GameProfile(UUID.randomUUID(), "FluidCheck")) { + @Override public boolean isSpectator() { return false; } + @Override public boolean isCreative() { return creative; } + }; + player.capabilities.disableDamage = creative; + if (resistant) player.addPotionEffect(new PotionEffect(MobEffects.FIRE_RESISTANCE, 200)); + player.setPosition(pos.getX() - 0.5, pos.getY() + height, pos.getZ() + 0.5); + player.move(1.0, 0.0, 0.0); + player.onEntityUpdate(); + final float actual = player.getMaxHealth() - player.getHealth(); + System.out.println("BASE_METALS_MOLTEN_CONTACT " + label + " damage=" + actual + " burning=" + player.isBurning()); + require(actual == damage && (damage == 0.0F || player.isBurning()), + label + " expected " + damage + " damage, got " + actual + ", burning=" + player.isBurning()); + } + private static void report(final boolean passed, final String detail) throws Exception { final JsonObject report = new JsonObject(); report.addProperty("phase", System.getProperty("launch.phase")); diff --git a/tools/validation/legacy110/orespawn-probe/review/worldgen/OreSpawn110Probe.java b/tools/validation/legacy110/orespawn-probe/review/worldgen/OreSpawn110Probe.java index d3a79aa4d..a57497fa1 100644 --- a/tools/validation/legacy110/orespawn-probe/review/worldgen/OreSpawn110Probe.java +++ b/tools/validation/legacy110/orespawn-probe/review/worldgen/OreSpawn110Probe.java @@ -44,7 +44,7 @@ public void started(final FMLServerStartedEvent event) throws Exception { report.addProperty("phase", phase); try { - require("4.1.2.110021".equals(Loader.instance().getIndexedModList().get("orespawn").getVersion()), + require("4.1.6.110021".equals(Loader.instance().getIndexedModList().get("orespawn").getVersion()), "Wrong OreSpawn release"); for (final String retired : new String[] { "com.mcmoddev.orespawn.BaseMetalsOreSpawn", diff --git a/tools/validation/legacy110/run_ci_checks.py b/tools/validation/legacy110/run_ci_checks.py index 2dbd21b39..426018b74 100644 --- a/tools/validation/legacy110/run_ci_checks.py +++ b/tools/validation/legacy110/run_ci_checks.py @@ -20,7 +20,7 @@ "mmdlib": ("mmdlib-261744", "2400405", "286149F4E8132535135C27285A750916D35AB3ECDDB28AE4475FC604D1FDF178"), "os3": ("mmd-orespawn-245586", "2533153", "D964148C20175E16CCEFAB02AE43A181A50DC08A1D636A77E59CFE8C8EA8D41A"), "os1": ("mmd-orespawn-245586", "2323091", "91345E4B825AA06E05F470066F467AABA0C7A2804A8DBCA4D3CD1905ED53607C"), - "orespawn": ("mmd-orespawn-245586", "9276430", "4D4975421FEEBF17505056306D06B0344D7A4553B6275885D7C5C5065B0348A6"), + "orespawn": ("mmd-orespawn-245586", "9518063", "05DB7CBFAADC815D6A713DACDFB9F0647BCED49CCFC357FB2FF010E95BD1379F"), } @@ -70,8 +70,12 @@ def main(): downloads = args.output / "downloads" downloads.mkdir() jars = {name: download(downloads, name) for name in RELEASES} - mod = ROOT / "build/libs/BaseMetals-2.5.1.110021.jar" + mod = ROOT / "build/libs/BaseMetals-2.6.0.110021.jar" probes = ROOT / "build/test-mods" + molten = args.output / "molten-contact" + prepare(molten, args.template, [mod, jars["orespawn"], probes / "launch-probe-packaged.jar"]) + for phase in ("fresh", "reload"): + run(args.java, molten, phase, {"launch.phase": phase, "launch.moltenContact": "true"}, report_kind="launch") def script(name, *arguments): subprocess.run([sys.executable, str(Path(__file__).with_name(name)), diff --git a/tools/validation/legacy110/run_orespawn_checks.py b/tools/validation/legacy110/run_orespawn_checks.py index e7c0564a2..3546c3c37 100644 --- a/tools/validation/legacy110/run_orespawn_checks.py +++ b/tools/validation/legacy110/run_orespawn_checks.py @@ -73,7 +73,7 @@ def reject_dependency(java, directory, template, mods): text = log.read_text(encoding="utf-8", errors="replace") if ("MissingModsException" not in text or "orespawn" not in text - or "4.1.2.110021" not in text or (directory / "world/level.dat").exists()): + or "4.1.6.110021" not in text or (directory / "world/level.dat").exists()): raise AssertionError(f"The unsupported dependency was not clearly rejected; read {log}") print(directory.name, "rejected before world load", flush=True) @@ -122,6 +122,22 @@ def expected_os1(source): return {"ores": ores} +def check_os1_reload_profile(before, after, expected): + # OreSpawn records which imported rules replace native defaults on reload. + # This index must not add a generation rule or change any saved settings. + replacements = { + "basemetals:legacy/" + ore["block"].split(":", 1)[1]: rule + for rule, ore in expected["ores"].items() + } + provider = after["providers"]["basemetals"] + if provider.get("legacy_ore_replacements") != replacements: + raise AssertionError("OreSpawn did not record the expected OS1 rule replacements") + if "legacy_ore_replacements" not in before["providers"]["basemetals"]: + del provider["legacy_ore_replacements"] + if before != after: + raise AssertionError("OS1 reload changed more than the rule replacement index") + + def main(): parser = argparse.ArgumentParser(description=__doc__) for name in ("java", "template", "mod", "orespawn", "probe", "output", "os3"): @@ -192,14 +208,19 @@ def main(): remote = directory / "world/region/r.2.-3.mca" remote_hash = digest(remote) run(args.java, directory, "first", properties) + profile = directory / "world/serverconfig/orespawn-worldgen.json" stable = [directory / "config/basemetals-orespawn.json", directory / "config/orespawn-upgrade-report.txt", - directory / "world/serverconfig/orespawn-worldgen.json"] + profile] hashes = {path: digest(path) for path in stable} + first_profile = json.loads(profile.read_text(encoding="utf-8")) if name == "os1" else None properties["worldgen.phase"] = "reload" run(args.java, directory, "reload", properties) if digest(remote) != remote_hash: raise AssertionError(f"An unopened region changed during upgrade: {directory}") + if first_profile is not None: + check_os1_reload_profile(first_profile, json.loads(profile.read_text(encoding="utf-8")), expected) + hashes[profile] = digest(profile) if digest(legacy) != source_hash or any(digest(path) != value for path, value in hashes.items()): raise AssertionError(f"Migration rewrote a source or was not stable on reload: {directory}") properties["worldgen.openRemote"] = "true"