diff --git a/src/main/java/gregtech/api/enums/GT_Values.java b/src/main/java/gregtech/api/enums/GT_Values.java index 68baa535f07..385e151a9de 100644 --- a/src/main/java/gregtech/api/enums/GT_Values.java +++ b/src/main/java/gregtech/api/enums/GT_Values.java @@ -607,6 +607,7 @@ public static final class NBT { + "minecraft7771"; public static final String AuthorQuerns = "Author: " + EnumChatFormatting.RED + "Querns"; + public static final String AuthorTheEpicGamer274 = "Author: " + "TheEpicGamer274"; // 7.5F comes from GT_Tool_Turbine_Large#getBaseDamage() given huge turbines are the most efficient now. public static double getMaxPlasmaTurbineEfficiencyFromMaterial(Materials material) { diff --git a/src/main/java/gregtech/api/multitileentity/enums/GT_MultiTileCasing.java b/src/main/java/gregtech/api/multitileentity/enums/GT_MultiTileCasing.java index 8bd53ca1e17..73bd55738af 100644 --- a/src/main/java/gregtech/api/multitileentity/enums/GT_MultiTileCasing.java +++ b/src/main/java/gregtech/api/multitileentity/enums/GT_MultiTileCasing.java @@ -12,6 +12,13 @@ public enum GT_MultiTileCasing { Chemical(1), Distillation(2), Macerator(18000), + LaserEngraver(4), + Mirror(5), + BlackLaserEngraverCasing(6), + LaserEngraverUpgrade1(7), + LaserEngraverUpgrade2(8), + LaserEngraverUpgrade3(9), + LaserEngraverUpgrade4(10), NONE(GT_Values.W); private final int meta; diff --git a/src/main/java/gregtech/api/multitileentity/multiblock/base/Controller.java b/src/main/java/gregtech/api/multitileentity/multiblock/base/Controller.java index 092681c1b85..a31b45293f1 100644 --- a/src/main/java/gregtech/api/multitileentity/multiblock/base/Controller.java +++ b/src/main/java/gregtech/api/multitileentity/multiblock/base/Controller.java @@ -911,7 +911,7 @@ public PowerLogic getPowerLogic() { return null; } - return powerLogicHost.getPowerLogic(); + return powerLogicHost.getPowerLogic(ForgeDirection.UNKNOWN); } // #endregion Energy diff --git a/src/main/java/gregtech/common/tileentities/machines/multiblock/LaserEngraver.java b/src/main/java/gregtech/common/tileentities/machines/multiblock/LaserEngraver.java new file mode 100644 index 00000000000..d6a9233e403 --- /dev/null +++ b/src/main/java/gregtech/common/tileentities/machines/multiblock/LaserEngraver.java @@ -0,0 +1,295 @@ +package gregtech.common.tileentities.machines.multiblock; + +import static com.gtnewhorizon.structurelib.structure.StructureUtility.*; +import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofBlockUnlocalizedName; +import static gregtech.api.enums.Mods.*; +import static gregtech.api.multitileentity.multiblock.base.MultiBlockPart.*; +import static gregtech.api.multitileentity.multiblock.base.MultiBlockPart.ENERGY_IN; +import static gregtech.api.multitileentity.multiblock.base.MultiBlockPart.FLUID_OUT; +import static gregtech.api.util.GT_StructureUtilityMuTE.*; + +import java.util.UUID; + +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; + +import com.gtnewhorizon.structurelib.structure.IStructureDefinition; +import com.gtnewhorizon.structurelib.structure.StructureDefinition; +import com.gtnewhorizon.structurelib.util.Vec3Impl; +import com.gtnewhorizons.modularui.api.math.Alignment; +import com.gtnewhorizons.modularui.api.math.Color; +import com.gtnewhorizons.modularui.api.widget.IWidgetBuilder; +import com.gtnewhorizons.modularui.common.widget.ButtonWidget; +import com.gtnewhorizons.modularui.common.widget.MultiChildWidget; +import com.gtnewhorizons.modularui.common.widget.textfield.TextFieldWidget; + +import gregtech.api.GregTech_API; +import gregtech.api.enums.GT_Values; +import gregtech.api.enums.Materials; +import gregtech.api.gui.modularui.GT_UITextures; +import gregtech.api.multitileentity.enums.GT_MultiTileCasing; +import gregtech.api.multitileentity.multiblock.base.ComplexParallelController; +import gregtech.api.multitileentity.multiblock.base.Controller; +import gregtech.api.util.*; + +public class LaserEngraver extends ComplexParallelController { + + private static IStructureDefinition STRUCTURE_DEFINITION = null; + protected static final String STRUCTURE_MAIN = "Main"; + protected static final String STRUCTURE_PIECE_T1 = "T1"; + protected static final String STRUCTURE_PIECE_T2 = "T2"; + protected static final String STRUCTURE_PIECE_T3 = "T3"; + protected static final String STRUCTURE_PIECE_T4 = "T4"; + protected static final String STRUCTURE_PIECE_T5 = "T5"; + protected static final String STRUCTURE_PIECE_T6 = "T6"; + protected static final int PROCESS_WINDOW_BASE_ID = 100; + protected static final Vec3Impl STRUCTURE_OFFSET_T1 = new Vec3Impl(3, 1, 0); + protected static final Vec3Impl STRUCTURE_OFFSET_T2 = new Vec3Impl(1, 3, 0); + protected static final Vec3Impl STRUCTURE_OFFSET_T3 = new Vec3Impl(-6, 0, -5); + protected static final Vec3Impl STRUCTURE_OFFSET_T4 = new Vec3Impl(18, 0, 0); + protected static final Vec3Impl STRUCTURE_OFFSET_T5 = new Vec3Impl(-18, 0, 9); + protected static final Vec3Impl STRUCTURE_OFFSET_T6 = new Vec3Impl(18, 0, 0); + protected static final int MAX_PROCESSES = 6; + protected GT_Recipe.GT_Recipe_Map recipeMap; + protected Controller controller; + private UUID LaserEngraver; + + @Override + public String getTileEntityName() { + return "gt.multitileentity.multiblock.laserengraver"; + } + + @Override + public Vec3Impl getStartingStructureOffset() { + return STRUCTURE_OFFSET_T1; + } + + @Override + public boolean checkMachine() { + buildState.startBuilding(getStartingStructureOffset()); + if (!checkPiece(STRUCTURE_PIECE_T1, buildState.getCurrentOffset())) return buildState.failBuilding(); + if (maxComplexParallels > 1) { + buildState.addOffset(STRUCTURE_OFFSET_T2); + if (!checkPiece(STRUCTURE_PIECE_T2, buildState.getCurrentOffset())) return buildState.failBuilding(); + } + if (maxComplexParallels > 2) { + buildState.addOffset(STRUCTURE_OFFSET_T3); + if (!checkPiece(STRUCTURE_PIECE_T3, buildState.getCurrentOffset())) return buildState.failBuilding(); + } + if (maxComplexParallels > 3) { + buildState.addOffset(STRUCTURE_OFFSET_T4); + if (!checkPiece(STRUCTURE_PIECE_T4, buildState.getCurrentOffset())) return buildState.failBuilding(); + } + if (maxComplexParallels > 4) { + buildState.addOffset(STRUCTURE_OFFSET_T5); + if (!checkPiece(STRUCTURE_PIECE_T5, buildState.getCurrentOffset())) return buildState.failBuilding(); + } + if (maxComplexParallels > 5) { + buildState.addOffset(STRUCTURE_OFFSET_T6); + if (!checkPiece(STRUCTURE_PIECE_T6, buildState.getCurrentOffset())) return buildState.failBuilding(); + } + buildState.stopBuilding(); + return super.checkMachine(); + } + + @Override + public void construct(ItemStack trigger, boolean hintsOnly) { + buildState.startBuilding(getStartingStructureOffset()); + buildPiece(STRUCTURE_PIECE_T1, trigger, hintsOnly, buildState.getCurrentOffset()); + if (maxComplexParallels > 1) { + buildState.addOffset(STRUCTURE_OFFSET_T2); + buildPiece(STRUCTURE_PIECE_T2, trigger, hintsOnly, buildState.getCurrentOffset()); + } + if (maxComplexParallels > 2) { + buildState.addOffset(STRUCTURE_OFFSET_T3); + buildPiece(STRUCTURE_PIECE_T3, trigger, hintsOnly, buildState.getCurrentOffset()); + } + if (maxComplexParallels > 3) { + buildState.addOffset(STRUCTURE_OFFSET_T4); + buildPiece(STRUCTURE_PIECE_T4, trigger, hintsOnly, buildState.getCurrentOffset()); + } + if (maxComplexParallels > 4) { + buildState.addOffset(STRUCTURE_OFFSET_T5); + buildPiece(STRUCTURE_PIECE_T5, trigger, hintsOnly, buildState.getCurrentOffset()); + } + if (maxComplexParallels > 5) { + buildState.addOffset(STRUCTURE_OFFSET_T6); + buildPiece(STRUCTURE_PIECE_T6, trigger, hintsOnly, buildState.getCurrentOffset()); + } + buildState.stopBuilding(); + } + + @Override + public IStructureDefinition getStructureDefinition() { + if (STRUCTURE_DEFINITION == null) { + STRUCTURE_DEFINITION = StructureDefinition.builder() + .addShape( + STRUCTURE_PIECE_T1, + transpose( + // spotless:off + new String[][]{{"ACADA", "AAAAA", "AAAAA"}, {"GGA~A", "H I", "GGAAA"}, + {"AAAAA", "ABBBA", "AAAAA"}})) + .addShape( + STRUCTURE_PIECE_T2, + new String[][]{{" ", " ", " ", " ", " ", " "}, + {" K ", " K ", " K ", " ", " ", " "}, + {" K ", " ", " ", " ", " ", " "}, + {" K ", " ", " ", " ", " ", " "}, + {" K ", " ", " ", " ", " ", " "}, + {" K ", "FBF FBF", " G G ", " G G ", " G G ", "FBF FBF"}, + {" KKKKK ", "BIB BIB", "G G G G", "G G G G", "G G G G", "BHB BHB"}, + {" K K ", "FBF FBF", " G G ", " G G ", " G G ", "FBF FBF"}, + {" K K ", " ", " ", " ", " ", " "}, + {" K K ", "FBF FBF", " G G ", " G G ", " G G ", "FBF FBF"}, + {" KKKKK ", "BIB BIB", "G G G G", "G G G G", "G G G G", "BHB BHB"}, + {" ", "FBF FBF", " G G ", " G G ", " G G ", "FBF FBF",}}) + .addShape( + STRUCTURE_PIECE_T3, + new String[][]{ + {" ", " BBBBB FBF ", " BGGGB G ", " BGGGB G ", " BMLMB G ", " BBBBB FBF "}, + {" KKKKKKK ", " BBAAABB BIB ", " B B G G ", " B B G G ", " B B G G ", " BBBBBBB BHB "}, + {" K ", " BABBBAB FBF ", " G G G ", " G G G ", " M HHH M G ", " BBBBBBB FBF "}, + {"KKKKKK ", " BABIBAB ", " G G ", " G G ", " L HHH L ", " BBBBBBB "}, + {" K ", " BABBBAB FBF ", " G G G ", " G G G ", " M HHH M G ", " BBBBBBB FBF "}, + {" KKKKKKK ", " BBAAABB BIB ", " B B G G ", " B B G G ", " B B G G ", " BBBBBBB BHB "}, + {" ", " BBBBB FBF ", " BGGGB G ", " BGGGB G ", " BMLMB G ", " BBBBB FBF "}}) + .addShape( + STRUCTURE_PIECE_T4, + new String[][]{ + {" ", "FBF BBBBB ", " G BGGGB ", " G BGGGB ", " G BNLNB ", "FBF BBBBB "}, + {" KKKKKKK ", "BIB BBAAABB ", "G G B B ", "G G B B ", "G G B B ", "BHB BBBBBBB "}, + {" K ", "FBF BABBBAB ", " G G G ", " G G G ", " G N HHH N ", "FBF BBBBBBB "}, + {" KKKKKK", " BABIBAB ", " G G ", " G G ", " L HHH L ", " BBBBBBB "}, + {" K ", "FBF BABBBAB ", " G G G ", " G G G ", " G N HHH N ", "FBF BBBBBBB "}, + {" KKKKKKK ", "BIB BBAAABB ", "G G B B ", "G G B B ", "G G B B ", "BHB BBBBBBB "}, + {" ", "FBF BBBBB ", " G BGGGB ", " G BGGGB ", " G BNLNB ", "FBF BBBBB "}}) + .addShape( + STRUCTURE_PIECE_T5, + new String[][]{ + {" ", " BBBBB FBF ", " BGGGB G ", " BGGGB G ", " BOLOB G ", " BBBBB FBF "}, + {" KKKKKKK ", " BBAAABB BIB ", " B B G G ", " B B G G ", " B B G G ", " BBBBBBB BHB "}, + {" K ", " BABBBAB FBF ", " G G G ", " G G G ", " O HHH O G ", " BBBBBBB FBF "}, + {" K ", " BABIBAB ", " G G ", " G G ", " L HHH L ", " BBBBBBB "}, + {" K ", " BABBBAB FBF ", " G G G ", " G G G ", " O HHH O G ", " BBBBBBB FBF "}, + {" KKKKKKK ", " BBAAABB BIB ", " B B G G ", " B B G G ", " B B G G ", " BBBBBBB BHB "}, + {" K ", " BBBBB FBF ", " BGGGB G ", " BGGGB G ", " BOLOB G ", " BBBBB FBF "}, + {" K ", " ", " ", " ", " "}, + {" K ", " ", " ", " ", " "}, + {" K ", " ", " ", " ", " "}}) + .addShape( + STRUCTURE_PIECE_T6, + new String[][]{ + {" ", "FBF BBBBB ", " G BGGGB ", " G BGGGB ", " G BPLPB ", "FBF BBBBB "}, + {" KKKKKKK ", "BIB BBAAABB ", "G G B B ", "G G B B ", "G G B B ", "BHB BBBBBBB "}, + {" K ", "FBF BABBBAB ", " G G G ", " G G G ", " G P HHH P ", "FBF BBBBBBB "}, + {" K ", " BABIBAB ", " G G ", " G G ", " L HHH L ", " BBBBBBB "}, + {" K ", "FBF BABBBAB ", " G G G ", " G G G ", " G P HHH P ", "FBF BBBBBBB "}, + {" KKKKKKK ", "BIB BBAAABB ", "G G B B ", "G G B B ", "G G B B ", "BHB BBBBBBB "}, + {" K ", "FBF BBBBB ", " G BGGGB ", " G BGGGB ", " G BPLPB ", "FBF BBBBB "}, + {" K ", " ", " ", " ", " "}, + {" K ", " ", " ", " ", " "}, + {" K ", " ", " ", " ", " "}}) + // spotless:on + .addElement( + 'A', + ofMuTECasings( + FLUID_IN | ITEM_IN | FLUID_OUT | ITEM_OUT | ENERGY_IN, + GT_MultiTileCasing.LaserEngraver.getCasing())) + .addElement( + 'B', + ofMuTECasings( + FLUID_IN | ITEM_IN | FLUID_OUT | ITEM_OUT | ENERGY_IN, + GT_MultiTileCasing.BlackLaserEngraverCasing.getCasing())) + .addElement('C', ofMuTECasings(NOTHING, CLEANROOM_CASINGS, GT_MultiTileCasing.LaserEngraver.getCasing())) + .addElement('D', ofMuTECasings(NOTHING, WIRELESS_CASINGS, GT_MultiTileCasing.LaserEngraver.getCasing())) + .addElement('E', ofMuTECasings(NOTHING, MOTOR_CASINGS)) + .addElement('F', GT_StructureUtility.ofFrame(Materials.Naquadah) + + ) + .addElement('H', ofMuTECasings(NOTHING, GT_MultiTileCasing.Mirror.getCasing())) + + .addElement( + 'G', + ofChain( + ofBlockUnlocalizedName(IndustrialCraft2.ID, "blockAlloyGlass", 0, true), + ofBlockUnlocalizedName(BartWorks.ID, "BW_GlasBlocks", 0, true), + ofBlockUnlocalizedName(BartWorks.ID, "BW_GlasBlocks2", 0, true), + ofBlockUnlocalizedName(Thaumcraft.ID, "blockCosmeticOpaque", 2, false))) + .addElement('I', ofMuTECasings(NOTHING, EMITTER_CASINGS)) + .addElement('K', ofBlock(GregTech_API.sBlockCasings3, 11)) + .addElement('L', ofMuTECasings(NOTHING, ROBOT_ARM_CASINGS)) + .addElement('M', ofMuTECasings(NOTHING, GT_MultiTileCasing.LaserEngraverUpgrade1.getCasing())) + .addElement('N', ofMuTECasings(NOTHING, GT_MultiTileCasing.LaserEngraverUpgrade2.getCasing())) + .addElement('O', ofMuTECasings(NOTHING, GT_MultiTileCasing.LaserEngraverUpgrade3.getCasing())) + .addElement('P', ofMuTECasings(NOTHING, GT_MultiTileCasing.LaserEngraverUpgrade4.getCasing())) + .build(); + buildState.stopBuilding(); + } + return STRUCTURE_DEFINITION; + } + + @Override + protected MultiChildWidget createMainPage(IWidgetBuilder builder) { + MultiChildWidget child = super.createMainPage(builder); + for (int i = 0; i < MAX_PROCESSES; i++) { + final int processIndex = i; + child.addChild( + new ButtonWidget().setPlayClickSound(true) + .setOnClick( + (clickData, widget) -> { + if (!widget.isClient()) widget.getContext() + .openSyncedWindow(PROCESS_WINDOW_BASE_ID + processIndex); + }) + .setBackground(GT_UITextures.BUTTON_STANDARD, GT_UITextures.OVERLAY_BUTTON_WHITELIST) + .setSize(18, 18) + .setEnabled((widget -> processIndex < maxComplexParallels)) + .setPos(20 * (i % 4) + 18, 18 + (i / 4) * 20)); + } + child.addChild( + new TextFieldWidget().setGetterInt(() -> maxComplexParallels) + .setSetterInt(parallel -> setMaxComplexParallels(parallel, true)) + .setNumbers(1, MAX_PROCESSES) + .setTextColor(Color.WHITE.normal) + .setTextAlignment(Alignment.Center) + .addTooltip("Tier") + .setBackground(GT_UITextures.BACKGROUND_TEXT_FIELD) + .setSize(18, 18) + .setPos(130, 85)); + return child; + } + + @Override + public short getCasingRegistryID() { + return 0; + } + + @Override + public void readMultiTileNBT(NBTTagCompound nbt) { + super.readMultiTileNBT(nbt); + setMaxComplexParallels(nbt.getInteger("processors"), false); + } + + @Override + public void writeMultiTileNBT(NBTTagCompound nbt) { + super.writeMultiTileNBT(nbt); + nbt.setInteger("processors", maxComplexParallels); + } + + @Override + public int getCasingMeta() { + return GT_MultiTileCasing.LaserEngraver.getId(); + } + + @Override + protected GT_Multiblock_Tooltip_Builder createTooltip() { + final GT_Multiblock_Tooltip_Builder tt = new GT_Multiblock_Tooltip_Builder(); + tt.addMachineType("Laser Engraver") + .addInfo("Used for Engraving") + .addSeparator() + .beginStructureBlock(3, 3, 5, true) + .addController("Front right center") + .toolTipFinisher(GT_Values.AuthorTheEpicGamer274); + return tt; + } + +} diff --git a/src/main/java/gregtech/loaders/preload/GT_Loader_MultiTileEntities.java b/src/main/java/gregtech/loaders/preload/GT_Loader_MultiTileEntities.java index 7d182e8b682..4bb3ddaf4d4 100644 --- a/src/main/java/gregtech/loaders/preload/GT_Loader_MultiTileEntities.java +++ b/src/main/java/gregtech/loaders/preload/GT_Loader_MultiTileEntities.java @@ -34,6 +34,7 @@ import gregtech.common.tileentities.machines.multiblock.AdvChemicalProcessor; import gregtech.common.tileentities.machines.multiblock.CokeOven; import gregtech.common.tileentities.machines.multiblock.DistillationTower; +import gregtech.common.tileentities.machines.multiblock.LaserEngraver; import gregtech.common.tileentities.machines.multiblock.LayeredCokeBattery; import gregtech.common.tileentities.machines.multiblock.Macerator; @@ -127,6 +128,15 @@ private static void registerMachines() { .inputInventorySize(16) .outputInventorySize(16) .register(); + MACHINE_REGISTRY.create(4, LaserEngraver.class) + .name("Big Laser Engraver") + .category("Multiblock Controller") + .setBlock(MACHINE_BLOCK) + .textureFolder("BigLaserEngraver") + .inputInventorySize(16) + .outputInventorySize(16) + .tankCapacity(128000L) + .register(); } private static void registerCasings() { @@ -156,6 +166,48 @@ private static void registerCasings() { .material(Materials.Cobalt) .textureFolder("macerator") .register(); + CASING_REGISTRY.create(LaserEngraver.getId(), BasicCasing.class) + .name("Laser Engraver Casing") + .category("MultiBlock Casing") + .setBlock(CASING_BLOCK) + .textureFolder("BigLaserEngraver") + .register(); + CASING_REGISTRY.create(Mirror.getId(), BasicCasing.class) + .name("Mirror") + .category("MultiBlock Casing") + .setBlock(CASING_BLOCK) + .textureFolder("Laserblock") + .register(); + CASING_REGISTRY.create(BlackLaserEngraverCasing.getId(), BasicCasing.class) + .name("Black Laser Engraver Casing") + .category("MultiBlock Casing") + .setBlock(CASING_BLOCK) + .textureFolder("BlackLaserEngraver") + .register(); + CASING_REGISTRY.create(LaserEngraverUpgrade1.getId(), BasicCasing.class) + .name("Crude Laser Engraving Casing") + .category("MultiBlock Casing") + .setBlock(CASING_BLOCK) + .textureFolder("laserengraverupgrade1") + .register(); + CASING_REGISTRY.create(LaserEngraverUpgrade2.getId(), BasicCasing.class) + .name("Advanced Laser Engraving Casing") + .category("MultiBlock Casing") + .setBlock(CASING_BLOCK) + .textureFolder("laserengraverupgrade2") + .register(); + CASING_REGISTRY.create(LaserEngraverUpgrade3.getId(), BasicCasing.class) + .name("Ultimate Laser Engraving Casing") + .category("MultiBlock Casing") + .setBlock(CASING_BLOCK) + .textureFolder("laserengraverupgrade3") + .register(); + CASING_REGISTRY.create(LaserEngraverUpgrade4.getId(), BasicCasing.class) + .name("Superb Laser Engraving Casing") + .category("MultiBlock Casing") + .setBlock(CASING_BLOCK) + .textureFolder("laserengraverupgrade4") + .register(); } diff --git a/src/main/resources/assets/gregtech/textures/blocks/multitileentity/BigLaserEngraver/active.png b/src/main/resources/assets/gregtech/textures/blocks/multitileentity/BigLaserEngraver/active.png new file mode 100644 index 00000000000..ffd43d8dc23 Binary files /dev/null and b/src/main/resources/assets/gregtech/textures/blocks/multitileentity/BigLaserEngraver/active.png differ diff --git a/src/main/resources/assets/gregtech/textures/blocks/multitileentity/BigLaserEngraver/active_glow.png b/src/main/resources/assets/gregtech/textures/blocks/multitileentity/BigLaserEngraver/active_glow.png new file mode 100644 index 00000000000..3bb29bbda66 Binary files /dev/null and b/src/main/resources/assets/gregtech/textures/blocks/multitileentity/BigLaserEngraver/active_glow.png differ diff --git a/src/main/resources/assets/gregtech/textures/blocks/multitileentity/BigLaserEngraver/base.png b/src/main/resources/assets/gregtech/textures/blocks/multitileentity/BigLaserEngraver/base.png new file mode 100644 index 00000000000..b119dc1ba04 Binary files /dev/null and b/src/main/resources/assets/gregtech/textures/blocks/multitileentity/BigLaserEngraver/base.png differ diff --git a/src/main/resources/assets/gregtech/textures/blocks/multitileentity/BigLaserEngraver/inactive.png b/src/main/resources/assets/gregtech/textures/blocks/multitileentity/BigLaserEngraver/inactive.png new file mode 100644 index 00000000000..6092ec4c180 Binary files /dev/null and b/src/main/resources/assets/gregtech/textures/blocks/multitileentity/BigLaserEngraver/inactive.png differ diff --git a/src/main/resources/assets/gregtech/textures/blocks/multitileentity/BigLaserEngraver/inactive_glow.png b/src/main/resources/assets/gregtech/textures/blocks/multitileentity/BigLaserEngraver/inactive_glow.png new file mode 100644 index 00000000000..b7955d63ab8 Binary files /dev/null and b/src/main/resources/assets/gregtech/textures/blocks/multitileentity/BigLaserEngraver/inactive_glow.png differ diff --git a/src/main/resources/assets/gregtech/textures/blocks/multitileentity/BlackLaserEngraver/base.png b/src/main/resources/assets/gregtech/textures/blocks/multitileentity/BlackLaserEngraver/base.png new file mode 100644 index 00000000000..de4345cf435 Binary files /dev/null and b/src/main/resources/assets/gregtech/textures/blocks/multitileentity/BlackLaserEngraver/base.png differ diff --git a/src/main/resources/assets/gregtech/textures/blocks/multitileentity/Laserblock/base.png b/src/main/resources/assets/gregtech/textures/blocks/multitileentity/Laserblock/base.png new file mode 100644 index 00000000000..2ec2c2e004a Binary files /dev/null and b/src/main/resources/assets/gregtech/textures/blocks/multitileentity/Laserblock/base.png differ diff --git a/src/main/resources/assets/gregtech/textures/blocks/multitileentity/laserengraverupgrade1/base.png b/src/main/resources/assets/gregtech/textures/blocks/multitileentity/laserengraverupgrade1/base.png new file mode 100644 index 00000000000..7e644d11cbc Binary files /dev/null and b/src/main/resources/assets/gregtech/textures/blocks/multitileentity/laserengraverupgrade1/base.png differ diff --git a/src/main/resources/assets/gregtech/textures/blocks/multitileentity/laserengraverupgrade2/base.png b/src/main/resources/assets/gregtech/textures/blocks/multitileentity/laserengraverupgrade2/base.png new file mode 100644 index 00000000000..d4ee6ed4028 Binary files /dev/null and b/src/main/resources/assets/gregtech/textures/blocks/multitileentity/laserengraverupgrade2/base.png differ diff --git a/src/main/resources/assets/gregtech/textures/blocks/multitileentity/laserengraverupgrade3/base.png b/src/main/resources/assets/gregtech/textures/blocks/multitileentity/laserengraverupgrade3/base.png new file mode 100644 index 00000000000..dbc1a20f764 Binary files /dev/null and b/src/main/resources/assets/gregtech/textures/blocks/multitileentity/laserengraverupgrade3/base.png differ diff --git a/src/main/resources/assets/gregtech/textures/blocks/multitileentity/laserengraverupgrade4/base.png b/src/main/resources/assets/gregtech/textures/blocks/multitileentity/laserengraverupgrade4/base.png new file mode 100644 index 00000000000..1587cdeca69 Binary files /dev/null and b/src/main/resources/assets/gregtech/textures/blocks/multitileentity/laserengraverupgrade4/base.png differ