diff --git a/src/main/java/com/zorbatron/zbgt/api/recipes/ZBGTRecipeMaps.java b/src/main/java/com/zorbatron/zbgt/api/recipes/ZBGTRecipeMaps.java index d96c34e1..400e991c 100644 --- a/src/main/java/com/zorbatron/zbgt/api/recipes/ZBGTRecipeMaps.java +++ b/src/main/java/com/zorbatron/zbgt/api/recipes/ZBGTRecipeMaps.java @@ -13,6 +13,7 @@ import gregtech.api.gui.GuiTextures; import gregtech.api.gui.widgets.ProgressWidget; import gregtech.api.recipes.RecipeMap; +import gregtech.api.recipes.builders.SimpleRecipeBuilder; import gregtech.api.unification.material.Materials; import gregtech.core.sound.GTSoundEvents; @@ -38,6 +39,12 @@ public final class ZBGTRecipeMaps { } }); + public static final RecipeMap FISHING_PORT_RECIPES = new RecipeMap<>( + "fishing_port_recipes", + 1, 16, 0, 0, + new SimpleRecipeBuilder(), false) + .setSound(GTSoundEvents.BATH); + public static void modifyMaps() { POLARIZER_RECIPES.setMaxFluidInputs(1); POLARIZER_RECIPES.setMaxFluidOutputs(1); diff --git a/src/main/java/com/zorbatron/zbgt/api/render/ZBGTTextures.java b/src/main/java/com/zorbatron/zbgt/api/render/ZBGTTextures.java index 9b87fec2..bc44d5c2 100644 --- a/src/main/java/com/zorbatron/zbgt/api/render/ZBGTTextures.java +++ b/src/main/java/com/zorbatron/zbgt/api/render/ZBGTTextures.java @@ -33,6 +33,7 @@ public class ZBGTTextures { public static SimpleOverlayRenderer PRECISE_CASING_2; public static SimpleOverlayRenderer PRECISE_CASING_3; public static SimpleOverlayRenderer PRECISE_CASING_4; + public static SimpleOverlayRenderer AQUATIC_CASING; public static SimpleOverlayRenderer IRIDIUM_CASING; @@ -60,6 +61,7 @@ public static void preInit() { PRECISE_CASING_2 = new SimpleOverlayRenderer("casings/precise/precise_2"); PRECISE_CASING_3 = new SimpleOverlayRenderer("casings/precise/precise_3"); PRECISE_CASING_4 = new SimpleOverlayRenderer("casings/precise/precise_4"); + AQUATIC_CASING = new SimpleOverlayRenderer("casings/misc/aquatic"); IRIDIUM_CASING = new SimpleOverlayRenderer("casings/material/iridium"); diff --git a/src/main/java/com/zorbatron/zbgt/api/unification/material/materials/ZBGTSecondDegreeMaterials.java b/src/main/java/com/zorbatron/zbgt/api/unification/material/materials/ZBGTSecondDegreeMaterials.java index 194bdd07..d2332e0f 100644 --- a/src/main/java/com/zorbatron/zbgt/api/unification/material/materials/ZBGTSecondDegreeMaterials.java +++ b/src/main/java/com/zorbatron/zbgt/api/unification/material/materials/ZBGTSecondDegreeMaterials.java @@ -98,7 +98,7 @@ public static void register() { EglinSteel = new Material.Builder(id++, zbgtId("eglin_steel")) .ingot().liquid(new FluidBuilder().temperature(1320)) .color(0x8b4513).iconSet(METALLIC) - .flags(EXT_METAL, DECOMPOSITION_BY_CENTRIFUGING) + .flags(EXT_METAL, DECOMPOSITION_BY_CENTRIFUGING, GENERATE_FRAME) .components(EglinSteelBase, 10, Sulfur, 1, Silicon, 4, Carbon, 1) .build(); } diff --git a/src/main/java/com/zorbatron/zbgt/common/ZBGTConfig.java b/src/main/java/com/zorbatron/zbgt/common/ZBGTConfig.java index 69250c66..9eb565a2 100644 --- a/src/main/java/com/zorbatron/zbgt/common/ZBGTConfig.java +++ b/src/main/java/com/zorbatron/zbgt/common/ZBGTConfig.java @@ -74,6 +74,11 @@ public static class RecipeSettings { "Default: true" }) @Config.Name("CAL Circuit Recipes") public boolean calCircuitRecipes = true; + + @Config.Comment({ "Register Zhuhai recipes", + "Default: true" }) + @Config.Name("Zhuhai Recipes") + public boolean zhuhaiRecipes = true; } @Config.Name("World Generation Settings") diff --git a/src/main/java/com/zorbatron/zbgt/common/block/blocks/MiscCasing.java b/src/main/java/com/zorbatron/zbgt/common/block/blocks/MiscCasing.java index 05bb27ef..59666f28 100644 --- a/src/main/java/com/zorbatron/zbgt/common/block/blocks/MiscCasing.java +++ b/src/main/java/com/zorbatron/zbgt/common/block/blocks/MiscCasing.java @@ -27,7 +27,8 @@ public enum CasingType implements IStringSerializable { COMPACT_FUSION_COIL_1("compact_fusion_coil_1"), COMPACT_FUSION_COIL_2("compact_fusion_coil_2"), COMPACT_FUSION_COIL_3("compact_fusion_coil_3"), - COMPACT_FUSION_COIL_4("compact_fusion_coil_4"); + COMPACT_FUSION_COIL_4("compact_fusion_coil_4"), + AQUATIC_CASING("aquatic_casing"); private final String name; diff --git a/src/main/java/com/zorbatron/zbgt/common/metatileentities/ZBGTMetaTileEntities.java b/src/main/java/com/zorbatron/zbgt/common/metatileentities/ZBGTMetaTileEntities.java index 866cdaeb..6e120620 100644 --- a/src/main/java/com/zorbatron/zbgt/common/metatileentities/ZBGTMetaTileEntities.java +++ b/src/main/java/com/zorbatron/zbgt/common/metatileentities/ZBGTMetaTileEntities.java @@ -6,6 +6,7 @@ import com.zorbatron.zbgt.common.metatileentities.multi.MetaTileEntityYOTTank; import com.zorbatron.zbgt.common.metatileentities.multi.electric.MetaTileEntityCircuitAssemblyLine; import com.zorbatron.zbgt.common.metatileentities.multi.electric.MetaTileEntityCoAL; +import com.zorbatron.zbgt.common.metatileentities.multi.electric.MetaTileEntityFishingPort; import com.zorbatron.zbgt.common.metatileentities.multi.electric.large.*; import com.zorbatron.zbgt.common.metatileentities.multi.electric.mega.*; import com.zorbatron.zbgt.common.metatileentities.multi.electric.quad.*; @@ -39,6 +40,7 @@ public class ZBGTMetaTileEntities { public static MetaTileEntityCoAL CoAL; public static MetaTileEntityCircuitAssemblyLine CAL; + public static MetaTileEntityFishingPort FISHING_PORT; public static MetaTileEntityQueebf QUAD_EBF; public static MetaTileEntityQueezer QUEEZER; @@ -150,5 +152,8 @@ public static void init() { CAL = registerMetaTileEntity(18070, new MetaTileEntityCircuitAssemblyLine(zbgtId("cal"))); + + FISHING_PORT = registerMetaTileEntity(18074, + new MetaTileEntityFishingPort(zbgtId("fishing_port"))); } } diff --git a/src/main/java/com/zorbatron/zbgt/common/metatileentities/multi/electric/MetaTileEntityFishingPort.java b/src/main/java/com/zorbatron/zbgt/common/metatileentities/multi/electric/MetaTileEntityFishingPort.java new file mode 100644 index 00000000..76d9a125 --- /dev/null +++ b/src/main/java/com/zorbatron/zbgt/common/metatileentities/multi/electric/MetaTileEntityFishingPort.java @@ -0,0 +1,111 @@ +package com.zorbatron.zbgt.common.metatileentities.multi.electric; + +import net.minecraft.block.state.IBlockState; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.text.TextComponentTranslation; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +import org.jetbrains.annotations.NotNull; + +import com.zorbatron.zbgt.api.recipes.ZBGTRecipeMaps; +import com.zorbatron.zbgt.api.render.ZBGTTextures; +import com.zorbatron.zbgt.common.block.ZBGTMetaBlocks; +import com.zorbatron.zbgt.common.block.blocks.MiscCasing; + +import gregicality.multiblocks.api.metatileentity.GCYMRecipeMapMultiblockController; +import gregtech.api.capability.impl.GhostCircuitItemStackHandler; +import gregtech.api.gui.GuiTextures; +import gregtech.api.gui.Widget; +import gregtech.api.gui.widgets.GhostCircuitSlotWidget; +import gregtech.api.metatileentity.MetaTileEntity; +import gregtech.api.metatileentity.interfaces.IGregTechTileEntity; +import gregtech.api.metatileentity.multiblock.IMultiblockPart; +import gregtech.api.pattern.BlockPattern; +import gregtech.api.pattern.FactoryBlockPattern; +import gregtech.client.renderer.ICubeRenderer; + +public class MetaTileEntityFishingPort extends GCYMRecipeMapMultiblockController { + + private GhostCircuitItemStackHandler circuitSlot; + + public MetaTileEntityFishingPort(ResourceLocation metaTileEntityId) { + super(metaTileEntityId, ZBGTRecipeMaps.FISHING_PORT_RECIPES); + } + + @Override + public MetaTileEntity createMetaTileEntity(IGregTechTileEntity tileEntity) { + return new MetaTileEntityFishingPort(metaTileEntityId); + } + + @Override + protected void initializeInventory() { + super.initializeInventory(); + + circuitSlot = new GhostCircuitItemStackHandler(this); + circuitSlot.addNotifiableMetaTileEntity(this); + } + + @Override + protected void initializeAbilities() { + super.initializeAbilities(); + + this.inputInventory = circuitSlot; + } + + @Override + protected @NotNull BlockPattern createStructurePattern() { + return FactoryBlockPattern.start() + .aisle("XXXXXXXXX", "XXXXXXXXX", "XXXXXXXXX") + .aisle("XXXXXXXXX", "XWWWWWWWX", "XWWWWWWWX").setRepeatable(7, 7) + .aisle("XXXXXXXXX", "XXXXSXXXX", "XXXXXXXXX") + .where('S', selfPredicate()) + .where('X', states(getCasingState()).setMinGlobalLimited(64) + .or(autoAbilities(true, true, false, true, false, false, false))) + .where('W', any()) + .build(); + } + + protected IBlockState getCasingState() { + return ZBGTMetaBlocks.MISC_CASING.getState(MiscCasing.CasingType.AQUATIC_CASING); + } + + @Override + protected @NotNull Widget getFlexButton(int x, int y, int width, int height) { + return new GhostCircuitSlotWidget(circuitSlot, 0, x, y) + .setBackgroundTexture(GuiTextures.SLOT, GuiTextures.INT_CIRCUIT_OVERLAY) + .setConsumer(slotWidget -> slotWidget.setTooltipText("gregtech.gui.configurator_slot.tooltip", + circuitSlot.getCircuitValue() == GhostCircuitItemStackHandler.NO_CONFIG ? + new TextComponentTranslation("gregtech.gui.configurator_slot.no_value") + .getFormattedText() : + String.valueOf(circuitSlot.getCircuitValue()))); + } + + @SideOnly(Side.CLIENT) + @Override + public ICubeRenderer getBaseTexture(IMultiblockPart sourcePart) { + return ZBGTTextures.AQUATIC_CASING; + } + + @Override + public boolean allowsExtendedFacing() { + return false; + } + + @Override + public NBTTagCompound writeToNBT(NBTTagCompound data) { + super.writeToNBT(data); + + circuitSlot.write(data); + + return data; + } + + @Override + public void readFromNBT(NBTTagCompound data) { + super.readFromNBT(data); + + circuitSlot.read(data); + } +} diff --git a/src/main/java/com/zorbatron/zbgt/recipe/CasingRecipes.java b/src/main/java/com/zorbatron/zbgt/recipe/CasingRecipes.java index 23192654..5f87f7b4 100644 --- a/src/main/java/com/zorbatron/zbgt/recipe/CasingRecipes.java +++ b/src/main/java/com/zorbatron/zbgt/recipe/CasingRecipes.java @@ -25,12 +25,14 @@ import com.zorbatron.zbgt.common.block.blocks.PreciseCasing; import com.zorbatron.zbgt.common.items.ZBGTMetaItems; +import gregicality.multiblocks.api.unification.GCYMMaterials; import gregtech.api.block.VariantBlock; import gregtech.api.recipes.ModHandler; import gregtech.api.recipes.builders.AssemblyLineRecipeBuilder; import gregtech.api.unification.OreDictUnifier; import gregtech.api.unification.material.Material; import gregtech.api.unification.material.Materials; +import gregtech.api.unification.stack.UnificationEntry; import gregtech.api.util.GTUtility; import gregtech.common.ConfigHolder; import gregtech.common.blocks.BlockFusionCasing; @@ -276,10 +278,22 @@ private static void miscCasings() { ModHandler.addShapedRecipe("yottank_casing", ZBGTMetaBlocks.MISC_CASING.getItemVariant(MiscCasing.CasingType.YOTTANK_CASING, casingsPerCraft), - "BPB", "TFT", "BPB", + "BPB", + "TFT", + "BPB", 'B', OreDictUnifier.get(plate, BlackSteel), 'P', OreDictUnifier.get(pipeNormalFluid, StainlessSteel), 'F', OreDictUnifier.get(frameGt, BlackSteel), 'T', OreDictUnifier.get(plate, Polytetrafluoroethylene)); + + ModHandler.addShapedRecipe("aquatic_casing", + ZBGTMetaBlocks.MISC_CASING.getItemVariant(MiscCasing.CasingType.AQUATIC_CASING, + casingsPerCraft), + "WhW", + "EFE", + "WwW", + 'W', new UnificationEntry(plate, GCYMMaterials.WatertightSteel), + 'E', new UnificationEntry(plate, EglinSteel), + 'F', new UnificationEntry(frameGt, EglinSteel)); } } diff --git a/src/main/java/com/zorbatron/zbgt/recipe/FishingPort.java b/src/main/java/com/zorbatron/zbgt/recipe/FishingPort.java new file mode 100644 index 00000000..17762e00 --- /dev/null +++ b/src/main/java/com/zorbatron/zbgt/recipe/FishingPort.java @@ -0,0 +1,183 @@ +package com.zorbatron.zbgt.recipe; + +import static com.zorbatron.zbgt.api.recipes.ZBGTRecipeMaps.FISHING_PORT_RECIPES; +import static gregtech.api.GTValues.*; + +import net.minecraft.init.Blocks; +import net.minecraft.init.Items; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; + +public class FishingPort { + + private static int circuit = 1; + + protected static void init() { + // Fish + ItemStack fish = new ItemStack(Items.FISH, 1, 0); + ItemStack salmon = new ItemStack(Items.FISH, 1, 1); + ItemStack tropicalFish = new ItemStack(Items.FISH, 1, 2); + ItemStack pufferFish = new ItemStack(Items.FISH, 1, 3); + + FISHING_PORT_RECIPES.recipeBuilder() + .circuitMeta(circuit++) + .outputs(fish) + .EUt(VA[LV]).duration(5 * 20) + .buildAndRegister(); + + FISHING_PORT_RECIPES.recipeBuilder() + .circuitMeta(circuit++) + .outputs(salmon) + .EUt(VA[LV]).duration(5 * 20) + .buildAndRegister(); + + FISHING_PORT_RECIPES.recipeBuilder() + .circuitMeta(circuit++) + .outputs(tropicalFish) + .EUt(VA[LV]).duration(5 * 20) + .buildAndRegister(); + + FISHING_PORT_RECIPES.recipeBuilder() + .circuitMeta(circuit++) + .outputs(pufferFish) + .EUt(VA[LV]).duration(5 * 20) + .buildAndRegister(); + + FISHING_PORT_RECIPES.recipeBuilder() + .circuitMeta(circuit++) + .outputs(fish) + .outputs(salmon) + .outputs(tropicalFish) + .outputs(pufferFish) + .EUt(VA[LV]).duration(5 * 20 * 4) + .buildAndRegister(); + + // "Treasure" + FISHING_PORT_RECIPES.recipeBuilder() + .circuitMeta(circuit++) + .output(Items.BOW) + .EUt(VA[LV]).duration(5 * 20) + .buildAndRegister(); + + FISHING_PORT_RECIPES.recipeBuilder() + .circuitMeta(circuit++) + .output(Items.BOOK) + .EUt(VA[LV]).duration(5 * 20) + .buildAndRegister(); + + FISHING_PORT_RECIPES.recipeBuilder() + .circuitMeta(circuit++) + .output(Items.FISHING_ROD) + .EUt(VA[LV]).duration(5 * 20) + .buildAndRegister(); + + FISHING_PORT_RECIPES.recipeBuilder() + .circuitMeta(circuit++) + .output(Items.NAME_TAG) + .EUt(VA[LV]).duration(5 * 20) + .buildAndRegister(); + + FISHING_PORT_RECIPES.recipeBuilder() + .circuitMeta(circuit++) + .output(Items.SADDLE) + .EUt(VA[LV]).duration(5 * 20) + .buildAndRegister(); + + FISHING_PORT_RECIPES.recipeBuilder() + .circuitMeta(circuit++) + .output(Items.BOW) + .output(Items.BOOK) + .output(Items.FISHING_ROD) + .output(Items.NAME_TAG) + .output(Items.SADDLE) + .EUt(VA[LV]).duration(5 * 20 * 5) + .buildAndRegister(); + + // "Junk" + FISHING_PORT_RECIPES.recipeBuilder() + .circuitMeta(circuit++) + .output(Blocks.WATERLILY) + .EUt(VA[LV]).duration(5 * 20) + .buildAndRegister(); + + FISHING_PORT_RECIPES.recipeBuilder() + .circuitMeta(circuit++) + .output(Items.BOWL) + .EUt(VA[LV]).duration(5 * 20) + .buildAndRegister(); + + FISHING_PORT_RECIPES.recipeBuilder() + .circuitMeta(circuit++) + .output(Items.LEATHER) + .EUt(VA[LV]).duration(5 * 20) + .buildAndRegister(); + + FISHING_PORT_RECIPES.recipeBuilder() + .circuitMeta(circuit++) + .output(Items.LEATHER_BOOTS) + .EUt(VA[LV]).duration(5 * 20) + .buildAndRegister(); + + FISHING_PORT_RECIPES.recipeBuilder() + .circuitMeta(circuit++) + .output(Items.ROTTEN_FLESH) + .EUt(VA[LV]).duration(5 * 20) + .buildAndRegister(); + + FISHING_PORT_RECIPES.recipeBuilder() + .circuitMeta(circuit++) + .output(Items.STICK) + .EUt(VA[LV]).duration(5 * 20) + .buildAndRegister(); + + FISHING_PORT_RECIPES.recipeBuilder() + .circuitMeta(circuit++) + .output(Items.STRING) + .EUt(VA[LV]).duration(5 * 20) + .buildAndRegister(); + + ItemStack waterBottle = new ItemStack(Items.POTIONITEM); + NBTTagCompound tag = new NBTTagCompound(); + tag.setString("Potion", "minecraft:water"); + waterBottle.setTagCompound(tag); + FISHING_PORT_RECIPES.recipeBuilder() + .circuitMeta(circuit++) + .outputs(waterBottle) + .EUt(VA[LV]).duration(5 * 20) + .buildAndRegister(); + + FISHING_PORT_RECIPES.recipeBuilder() + .circuitMeta(circuit++) + .output(Items.BONE) + .EUt(VA[LV]).duration(5 * 20) + .buildAndRegister(); + + FISHING_PORT_RECIPES.recipeBuilder() + .circuitMeta(circuit++) + .output(Items.DYE) + .EUt(VA[LV]).duration(5 * 20) + .buildAndRegister(); + + FISHING_PORT_RECIPES.recipeBuilder() + .circuitMeta(circuit++) + .output(Blocks.TRIPWIRE_HOOK) + .EUt(VA[LV]).duration(5 * 20) + .buildAndRegister(); + + FISHING_PORT_RECIPES.recipeBuilder() + .circuitMeta(circuit++) + .output(Blocks.WATERLILY) + .output(Items.BOWL) + .output(Items.LEATHER) + .output(Items.LEATHER_BOOTS) + .output(Items.ROTTEN_FLESH) + .output(Items.STICK) + .output(Items.STRING) + .outputs(waterBottle) + .output(Items.BONE) + .output(Items.DYE) + .output(Blocks.TRIPWIRE_HOOK) + .EUt(VA[LV]).duration(5 * 20 * 11) + .buildAndRegister(); + } +} diff --git a/src/main/java/com/zorbatron/zbgt/recipe/MultiblockRecipes.java b/src/main/java/com/zorbatron/zbgt/recipe/MultiblockRecipes.java index f9a7a176..ce0ae2fb 100644 --- a/src/main/java/com/zorbatron/zbgt/recipe/MultiblockRecipes.java +++ b/src/main/java/com/zorbatron/zbgt/recipe/MultiblockRecipes.java @@ -290,5 +290,14 @@ private static void misc() { .output(ZBGTMetaTileEntities.CAL) .EUt(VA[LuV]).duration(20 * 45) .buildAndRegister(); + + ModHandler.addShapedRecipe("zhuhai", ZBGTMetaTileEntities.FISHING_PORT.getStackForm(), + "PCP", + "WAW", + "PCP", + 'P', new UnificationEntry(plate, GCYMMaterials.WatertightSteel), + 'C', new UnificationEntry(circuit, getMarkerMaterialByTier(IV)), + 'W', new UnificationEntry(wireFine, Electrum), + 'A', ZBGTMetaBlocks.MISC_CASING.getItemVariant(MiscCasing.CasingType.AQUATIC_CASING)); } } diff --git a/src/main/java/com/zorbatron/zbgt/recipe/ZBGTRecipes.java b/src/main/java/com/zorbatron/zbgt/recipe/ZBGTRecipes.java index 1abe0134..3a46266b 100644 --- a/src/main/java/com/zorbatron/zbgt/recipe/ZBGTRecipes.java +++ b/src/main/java/com/zorbatron/zbgt/recipe/ZBGTRecipes.java @@ -23,5 +23,9 @@ public static void init() { if (ZBGTConfig.recipeSettings.calCircuitRecipes) { CALCircuits.init(); } + + if (ZBGTConfig.recipeSettings.zhuhaiRecipes) { + FishingPort.init(); + } } } diff --git a/src/main/resources/assets/gregtech/textures/blocks/casings/misc/aquatic.png b/src/main/resources/assets/gregtech/textures/blocks/casings/misc/aquatic.png new file mode 100644 index 00000000..b40e77a3 Binary files /dev/null and b/src/main/resources/assets/gregtech/textures/blocks/casings/misc/aquatic.png differ diff --git a/src/main/resources/assets/zbgt/blockstates/misc_casing.json b/src/main/resources/assets/zbgt/blockstates/misc_casing.json index e6bbc6a9..0dbe20d3 100644 --- a/src/main/resources/assets/zbgt/blockstates/misc_casing.json +++ b/src/main/resources/assets/zbgt/blockstates/misc_casing.json @@ -37,6 +37,11 @@ "textures": { "all": "gregtech:blocks/casings/misc/5" } + }, + "aquatic_casing": { + "textures": { + "all": "gregtech:blocks/casings/misc/aquatic" + } } } } diff --git a/src/main/resources/assets/zbgt/lang/en_us.lang b/src/main/resources/assets/zbgt/lang/en_us.lang index 7ef5e64a..3f698a48 100644 --- a/src/main/resources/assets/zbgt/lang/en_us.lang +++ b/src/main/resources/assets/zbgt/lang/en_us.lang @@ -305,6 +305,10 @@ zbgt.machine.cal.tooltip=Does not lose efficiency when overclocked zbgt.machine.cal.tooltip_ordered_items=When in §eCircuit Assembly Line§7 mode, §fitems§7 must be in the correct order to run. recipemap.circuit_assembly_line_recipes.name=Circuit Assembly Line +zbgt.machine.fishing_port.name=Zhuhai - Fishing Port +zbgt.machine.fishing_port.tooltip=Use the circuit in the controller to choose the recipe. +recipemap.fishing_port_recipes.name=Zhuhai - Fishing Port + # Multiblock Casings tile.multiblock_casing.precise_0.name=Imprecise Electronic Unit Casing @@ -372,7 +376,7 @@ tile.misc_casing.compact_fusion_coil_1.name=Compact Fusion Coil tile.misc_casing.compact_fusion_coil_2.name=Advanced Compact Fusion Coil tile.misc_casing.compact_fusion_coil_3.name=Compact Fusion Coil MK-II Prototype tile.misc_casing.compact_fusion_coil_4.name=Compact Fusion Coil MK-II Finaltype - +tile.misc_casing.aquatic_casing.name=Aquatic Casing tile.misc_casing.inconel_reinforced_casing.name=Inconel Reinforced Casing tile.creative_heating_coil.creative_heating_coil.name=Creative Heating Coil