aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/main/java/gregtech/api/enums/ItemList.java3
-rw-r--r--src/main/java/gregtech/api/enums/Textures.java4
-rw-r--r--src/main/java/gregtech/common/GT_Client.java3
-rw-r--r--src/main/java/gregtech/common/gui/GT_Container_AdvDebugStructureWriter.java213
-rw-r--r--src/main/java/gregtech/common/gui/GT_GUIContainer_AdvDebugStructureWriter.java76
-rw-r--r--src/main/java/gregtech/common/tileentities/debug/GT_MetaTileEntity_AdvDebugStructureWriter.java329
-rw-r--r--src/main/java/gregtech/loaders/preload/GT_Loader_MetaTileEntities.java6
-rw-r--r--src/main/resources/assets/gregtech/lang/en_US.lang9
-rw-r--r--src/main/resources/assets/gregtech/textures/blocks/iconsets/STRUCTURE_MARK.pngbin0 -> 4254 bytes
-rw-r--r--src/main/resources/assets/gregtech/textures/gui/AdvDebugStructureWriter.pngbin0 -> 13506 bytes
10 files changed, 640 insertions, 3 deletions
diff --git a/src/main/java/gregtech/api/enums/ItemList.java b/src/main/java/gregtech/api/enums/ItemList.java
index d517a6d50c..279233d101 100644
--- a/src/main/java/gregtech/api/enums/ItemList.java
+++ b/src/main/java/gregtech/api/enums/ItemList.java
@@ -1902,7 +1902,8 @@ public enum ItemList implements IItemContainer {
VOLUMETRIC_FLASK,
Hatch_Input_Bus_ME,
- Hatch_CraftingInput_Bus_ME;
+ Hatch_CraftingInput_Bus_ME,
+ AdvDebugStructureWriter;
public static final ItemList[]
DYE_ONLY_ITEMS =
{
diff --git a/src/main/java/gregtech/api/enums/Textures.java b/src/main/java/gregtech/api/enums/Textures.java
index 238ab4bf58..ee335c749e 100644
--- a/src/main/java/gregtech/api/enums/Textures.java
+++ b/src/main/java/gregtech/api/enums/Textures.java
@@ -1266,7 +1266,9 @@ public class Textures {
OVERLAY_ME_INPUT_HATCH,
OVERLAY_ME_INPUT_HATCH_ACTIVE,
OVERLAY_ME_CRAFTING_HATCH,
- OVERLAY_ME_CRAFTING_HATCH_ACTIVE;
+ OVERLAY_ME_CRAFTING_HATCH_ACTIVE,
+
+ STRUCTURE_MARK;
/**
* Icon for Fresh CFoam
diff --git a/src/main/java/gregtech/common/GT_Client.java b/src/main/java/gregtech/common/GT_Client.java
index ad44176985..5571826a09 100644
--- a/src/main/java/gregtech/common/GT_Client.java
+++ b/src/main/java/gregtech/common/GT_Client.java
@@ -43,6 +43,7 @@ import gregtech.common.entities.GT_Entity_Arrow_Potion;
import gregtech.common.net.MessageUpdateFluidDisplayItem;
import gregtech.common.render.*;
import gregtech.common.render.items.GT_MetaGenerated_Item_Renderer;
+import gregtech.common.tileentities.debug.GT_MetaTileEntity_AdvDebugStructureWriter;
import gregtech.loaders.ExtraIcons;
import gregtech.loaders.preload.GT_PreLoad;
import ic2.api.tile.IWrenchable;
@@ -523,6 +524,8 @@ public class GT_Client extends GT_Proxy implements Runnable {
.rprMetadataSerializer
.registerMetadataSectionType(new ColorsMetadataSectionSerializer(), ColorsMetadataSection.class);
+ new GT_MetaTileEntity_AdvDebugStructureWriter.ForgeEventHandler();
+
final String[] arr = {
"renadi", "hanakocz", "MysteryDump", "Flaver4", "x_Fame", "Peluche321", "Goshen_Ithilien", "manf", "Bimgo",
"leagris",
diff --git a/src/main/java/gregtech/common/gui/GT_Container_AdvDebugStructureWriter.java b/src/main/java/gregtech/common/gui/GT_Container_AdvDebugStructureWriter.java
new file mode 100644
index 0000000000..15837364f5
--- /dev/null
+++ b/src/main/java/gregtech/common/gui/GT_Container_AdvDebugStructureWriter.java
@@ -0,0 +1,213 @@
+package gregtech.common.gui;
+
+import cpw.mods.fml.relauncher.Side;
+import cpw.mods.fml.relauncher.SideOnly;
+import gregtech.api.gui.GT_ContainerMetaTile_Machine;
+import gregtech.api.gui.GT_Slot_Holo;
+import gregtech.api.interfaces.tileentity.IGregTechTileEntity;
+import gregtech.common.tileentities.debug.GT_MetaTileEntity_AdvDebugStructureWriter;
+import net.minecraft.entity.player.EntityPlayer;
+import net.minecraft.entity.player.InventoryPlayer;
+import net.minecraft.inventory.ICrafting;
+import net.minecraft.inventory.Slot;
+import net.minecraft.item.ItemStack;
+
+public class GT_Container_AdvDebugStructureWriter extends GT_ContainerMetaTile_Machine {
+ public short[] numbers = new short[6];
+ public boolean transpose;
+ public boolean showHighlightBox;
+
+ public Slot printSlot;
+ public Slot transposeSlot;
+ public Slot highlightSlot;
+
+ public GT_Container_AdvDebugStructureWriter(InventoryPlayer aInventoryPlayer, IGregTechTileEntity aTileEntity) {
+ super(aInventoryPlayer, aTileEntity);
+ }
+
+ @Override
+ public void addSlots(InventoryPlayer aInventoryPlayer) {
+ addSlotToContainer(new GT_Slot_Holo(mTileEntity, 2, 8, 5, false, false, 1));
+ addSlotToContainer(new GT_Slot_Holo(mTileEntity, 2, 8, 23, false, false, 1));
+ addSlotToContainer(new GT_Slot_Holo(mTileEntity, 2, 8, 41, false, false, 1));
+ addSlotToContainer(new GT_Slot_Holo(mTileEntity, 2, 8, 63, false, false, 1));
+ addSlotToContainer(new GT_Slot_Holo(mTileEntity, 2, 8, 81, false, false, 1));
+ addSlotToContainer(new GT_Slot_Holo(mTileEntity, 2, 8, 99, false, false, 1));
+
+ addSlotToContainer(new GT_Slot_Holo(mTileEntity, 2, 26, 5, false, false, 1));
+ addSlotToContainer(new GT_Slot_Holo(mTileEntity, 2, 26, 23, false, false, 1));
+ addSlotToContainer(new GT_Slot_Holo(mTileEntity, 2, 26, 41, false, false, 1));
+ addSlotToContainer(new GT_Slot_Holo(mTileEntity, 2, 26, 63, false, false, 1));
+ addSlotToContainer(new GT_Slot_Holo(mTileEntity, 2, 26, 81, false, false, 1));
+ addSlotToContainer(new GT_Slot_Holo(mTileEntity, 2, 26, 99, false, false, 1));
+
+ addSlotToContainer(new GT_Slot_Holo(mTileEntity, 2, 152, 5, false, false, 1));
+ addSlotToContainer(new GT_Slot_Holo(mTileEntity, 2, 152, 23, false, false, 1));
+ addSlotToContainer(new GT_Slot_Holo(mTileEntity, 2, 152, 41, false, false, 1));
+ addSlotToContainer(new GT_Slot_Holo(mTileEntity, 2, 152, 63, false, false, 1));
+ addSlotToContainer(new GT_Slot_Holo(mTileEntity, 2, 152, 81, false, false, 1));
+ addSlotToContainer(new GT_Slot_Holo(mTileEntity, 2, 152, 99, false, false, 1));
+
+ addSlotToContainer(new GT_Slot_Holo(mTileEntity, 2, 134, 5, false, false, 1));
+ addSlotToContainer(new GT_Slot_Holo(mTileEntity, 2, 134, 23, false, false, 1));
+ addSlotToContainer(new GT_Slot_Holo(mTileEntity, 2, 134, 41, false, false, 1));
+ addSlotToContainer(new GT_Slot_Holo(mTileEntity, 2, 134, 63, false, false, 1));
+ addSlotToContainer(new GT_Slot_Holo(mTileEntity, 2, 134, 81, false, false, 1));
+ addSlotToContainer(new GT_Slot_Holo(mTileEntity, 2, 134, 99, false, false, 1));
+
+ printSlot = addSlotToContainer(new GT_Slot_Holo(mTileEntity, 2, 12, 129, false, false, 1));
+ transposeSlot = addSlotToContainer(new GT_Slot_Holo(mTileEntity, 2, 33, 129, false, false, 1));
+ highlightSlot = addSlotToContainer(new GT_Slot_Holo(mTileEntity, 2, 54, 129, false, false, 1));
+ }
+
+ public boolean doesBindPlayerInventory() {
+ return false;
+ }
+
+ @Override
+ public ItemStack slotClick(int aSlotIndex, int aMouseclick, int aShifthold, EntityPlayer aPlayer) {
+ if (aSlotIndex < 0) {
+ return super.slotClick(aSlotIndex, aMouseclick, aShifthold, aPlayer);
+ }
+ Slot tSlot = (Slot) inventorySlots.get(aSlotIndex);
+ if (tSlot != null && mTileEntity.getMetaTileEntity() != null) {
+ GT_MetaTileEntity_AdvDebugStructureWriter dsw =
+ (GT_MetaTileEntity_AdvDebugStructureWriter) mTileEntity.getMetaTileEntity();
+ if (dsw.numbers == null) {
+ return null;
+ }
+ switch (aSlotIndex) {
+ case 0:
+ dsw.numbers[0] -= aShifthold == 1 ? 512 : 64;
+ return null;
+ case 1:
+ dsw.numbers[1] -= aShifthold == 1 ? 512 : 64;
+ return null;
+ case 2:
+ dsw.numbers[2] -= aShifthold == 1 ? 512 : 64;
+ return null;
+ case 3:
+ dsw.numbers[3] -= aShifthold == 1 ? 512 : 64;
+ return null;
+ case 4:
+ dsw.numbers[4] -= aShifthold == 1 ? 512 : 64;
+ return null;
+ case 5:
+ dsw.numbers[5] -= aShifthold == 1 ? 512 : 64;
+ return null;
+ case 6:
+ dsw.numbers[0] -= aShifthold == 1 ? 16 : 1;
+ return null;
+ case 7:
+ dsw.numbers[1] -= aShifthold == 1 ? 16 : 1;
+ return null;
+ case 8:
+ dsw.numbers[2] -= aShifthold == 1 ? 16 : 1;
+ return null;
+ case 9:
+ dsw.numbers[3] -= aShifthold == 1 ? 16 : 1;
+ return null;
+ case 10:
+ dsw.numbers[4] -= aShifthold == 1 ? 16 : 1;
+ return null;
+ case 11:
+ dsw.numbers[5] -= aShifthold == 1 ? 16 : 1;
+ return null;
+ case 12:
+ dsw.numbers[0] += aShifthold == 1 ? 512 : 64;
+ return null;
+ case 13:
+ dsw.numbers[1] += aShifthold == 1 ? 512 : 64;
+ return null;
+ case 14:
+ dsw.numbers[2] += aShifthold == 1 ? 512 : 64;
+ return null;
+ case 15:
+ dsw.numbers[3] += aShifthold == 1 ? 512 : 64;
+ return null;
+ case 16:
+ dsw.numbers[4] += aShifthold == 1 ? 512 : 64;
+ return null;
+ case 17:
+ dsw.numbers[5] += aShifthold == 1 ? 512 : 64;
+ return null;
+ case 18:
+ dsw.numbers[0] += aShifthold == 1 ? 16 : 1;
+ return null;
+ case 19:
+ dsw.numbers[1] += aShifthold == 1 ? 16 : 1;
+ return null;
+ case 20:
+ dsw.numbers[2] += aShifthold == 1 ? 16 : 1;
+ return null;
+ case 21:
+ dsw.numbers[3] += aShifthold == 1 ? 16 : 1;
+ return null;
+ case 22:
+ dsw.numbers[4] += aShifthold == 1 ? 16 : 1;
+ return null;
+ case 23:
+ dsw.numbers[5] += aShifthold == 1 ? 16 : 1;
+ return null;
+
+ case 24:
+ if (dsw.getBaseMetaTileEntity().isServerSide()) {
+ dsw.printStructure(aPlayer);
+ }
+ return null;
+ case 25:
+ dsw.transpose = !dsw.transpose;
+ return null;
+ case 26:
+ dsw.showHighlightBox = !dsw.showHighlightBox;
+ return null;
+ }
+ }
+ return super.slotClick(aSlotIndex, aMouseclick, aShifthold, aPlayer);
+ }
+
+ @Override
+ public void detectAndSendChanges() {
+ super.detectAndSendChanges();
+ if (mTileEntity.isClientSide() || mTileEntity.getMetaTileEntity() == null) {
+ return;
+ }
+ GT_MetaTileEntity_AdvDebugStructureWriter dsw =
+ (GT_MetaTileEntity_AdvDebugStructureWriter) mTileEntity.getMetaTileEntity();
+ if (numbers != null) {
+ System.arraycopy(dsw.numbers, 0, numbers, 0, dsw.numbers.length);
+ }
+
+ transpose = dsw.transpose;
+ showHighlightBox = dsw.showHighlightBox;
+
+ for (Object crafter : crafters) {
+ ICrafting var1 = (ICrafting) crafter;
+ if (numbers != null) {
+ var1.sendProgressBarUpdate(this, 100, numbers[0]);
+ var1.sendProgressBarUpdate(this, 101, numbers[1]);
+ var1.sendProgressBarUpdate(this, 102, numbers[2]);
+ var1.sendProgressBarUpdate(this, 103, numbers[3]);
+ var1.sendProgressBarUpdate(this, 104, numbers[4]);
+ var1.sendProgressBarUpdate(this, 105, numbers[5]);
+ var1.sendProgressBarUpdate(this, 106, transpose ? 1 : 0);
+ var1.sendProgressBarUpdate(this, 107, showHighlightBox ? 1 : 0);
+ }
+ }
+ }
+
+ @Override
+ @SideOnly(Side.CLIENT)
+ public void updateProgressBar(int par1, int par2) {
+ super.updateProgressBar(par1, par2);
+ if (par1 == 106) {
+ transpose = par2 > 0;
+ } else if (par1 == 107) {
+ showHighlightBox = par2 > 0;
+ } else {
+ if (numbers != null && par1 >= 100 && par1 <= 105) {
+ numbers[par1 - 100] = (short) par2;
+ }
+ }
+ }
+}
diff --git a/src/main/java/gregtech/common/gui/GT_GUIContainer_AdvDebugStructureWriter.java b/src/main/java/gregtech/common/gui/GT_GUIContainer_AdvDebugStructureWriter.java
new file mode 100644
index 0000000000..3ae07cef8e
--- /dev/null
+++ b/src/main/java/gregtech/common/gui/GT_GUIContainer_AdvDebugStructureWriter.java
@@ -0,0 +1,76 @@
+package gregtech.common.gui;
+
+import static gregtech.api.enums.GT_Values.RES_PATH_GUI;
+import static net.minecraft.util.StatCollector.translateToLocal;
+
+import gregtech.api.gui.GT_GUIContainerMetaTile_Machine;
+import gregtech.api.gui.widgets.GT_GuiSlotTooltip;
+import gregtech.api.interfaces.tileentity.IGregTechTileEntity;
+import net.minecraft.entity.player.InventoryPlayer;
+
+public class GT_GUIContainer_AdvDebugStructureWriter extends GT_GUIContainerMetaTile_Machine {
+
+ private static final String ADVDEBUGSTRUCTUREWRITER_PRINT_TOOLTIP =
+ "GT5U.machines.advdebugstructurewriter.gui.print.tooltip";
+ private static final String ADVDEBUGSTRUCTUREWRITER_TRANSPOSE_TOOLTIP =
+ "GT5U.machines.advdebugstructurewriter.gui.transpose.tooltip";
+ private static final String ADVDEBUGSTRUCTUREWRITER_HIGHLIGHT_TOOLTIP =
+ "GT5U.machines.advdebugstructurewriter.gui.highlight.tooltip";
+
+ public GT_GUIContainer_AdvDebugStructureWriter(InventoryPlayer aInventoryPlayer, IGregTechTileEntity aTileEntity) {
+ super(
+ new GT_Container_AdvDebugStructureWriter(aInventoryPlayer, aTileEntity),
+ RES_PATH_GUI + "AdvDebugStructureWriter.png");
+ }
+
+ @Override
+ protected void drawGuiContainerForegroundLayer(int par1, int par2) {
+ if (mContainer != null) {
+ GT_Container_AdvDebugStructureWriter dsw = (GT_Container_AdvDebugStructureWriter) mContainer;
+ if (dsw.numbers == null) {
+ return;
+ }
+ fontRendererObj.drawString(
+ translateToLocal("GT5U.machines.advdebugstructurewriter.gui.origin"), 46, 8, 16448255);
+ fontRendererObj.drawString("A: " + dsw.numbers[0], 46, 18, 16448255);
+ fontRendererObj.drawString("B: " + dsw.numbers[1], 46, 26, 16448255);
+ fontRendererObj.drawString("C: " + dsw.numbers[2], 46, 34, 16448255);
+
+ fontRendererObj.drawString(
+ translateToLocal("GT5U.machines.advdebugstructurewriter.gui.size"), 46, 60, 16448255);
+ fontRendererObj.drawString("A: " + dsw.numbers[3], 46, 70, 16448255);
+ fontRendererObj.drawString("B: " + dsw.numbers[4], 46, 78, 16448255);
+ fontRendererObj.drawString("C: " + dsw.numbers[5], 46, 86, 16448255);
+ }
+ }
+
+ @Override
+ protected void setupTooltips() {
+ addToolTip(new GT_GuiSlotTooltip(
+ getContainer().printSlot, mTooltipCache.getData(ADVDEBUGSTRUCTUREWRITER_PRINT_TOOLTIP)));
+ addToolTip(new GT_GuiSlotTooltip(
+ getContainer().transposeSlot, mTooltipCache.getData(ADVDEBUGSTRUCTUREWRITER_TRANSPOSE_TOOLTIP)));
+ addToolTip(new GT_GuiSlotTooltip(
+ getContainer().highlightSlot, mTooltipCache.getData(ADVDEBUGSTRUCTUREWRITER_HIGHLIGHT_TOOLTIP)));
+ }
+
+ private GT_Container_AdvDebugStructureWriter getContainer() {
+ return ((GT_Container_AdvDebugStructureWriter) this.mContainer);
+ }
+
+ @Override
+ protected void drawGuiContainerBackgroundLayer(float par1, int par2, int par3) {
+ super.drawGuiContainerBackgroundLayer(par1, par2, par3);
+ int x = (width - xSize) / 2;
+ int y = (height - ySize) / 2;
+ drawTexturedModalRect(x, y, 0, 0, xSize, ySize);
+ if (mContainer != null) {
+ if (((GT_Container_AdvDebugStructureWriter) mContainer).transpose) {
+ drawTexturedModalRect(x + 32, y + 128, 176, 0, 18, 18);
+ }
+ if (((GT_Container_AdvDebugStructureWriter) mContainer).showHighlightBox) {
+ drawTexturedModalRect(x + 53, y + 128, 176, 18, 18, 18);
+ }
+ }
+ }
+}
diff --git a/src/main/java/gregtech/common/tileentities/debug/GT_MetaTileEntity_AdvDebugStructureWriter.java b/src/main/java/gregtech/common/tileentities/debug/GT_MetaTileEntity_AdvDebugStructureWriter.java
new file mode 100644
index 0000000000..ae03df5789
--- /dev/null
+++ b/src/main/java/gregtech/common/tileentities/debug/GT_MetaTileEntity_AdvDebugStructureWriter.java
@@ -0,0 +1,329 @@
+package gregtech.common.tileentities.debug;
+
+import static gregtech.GT_Mod.GT_FML_LOGGER;
+import static net.minecraft.util.StatCollector.translateToLocal;
+
+import com.gtnewhorizon.structurelib.alignment.enumerable.ExtendedFacing;
+import com.gtnewhorizon.structurelib.structure.StructureUtility;
+import com.gtnewhorizon.structurelib.util.Vec3Impl;
+import cpw.mods.fml.common.eventhandler.SubscribeEvent;
+import cpw.mods.fml.relauncher.Side;
+import cpw.mods.fml.relauncher.SideOnly;
+import gregtech.api.enums.Textures;
+import gregtech.api.interfaces.ITexture;
+import gregtech.api.interfaces.tileentity.IGregTechTileEntity;
+import gregtech.api.metatileentity.MetaTileEntity;
+import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_TieredMachineBlock;
+import gregtech.api.render.TextureFactory;
+import gregtech.common.gui.GT_Container_AdvDebugStructureWriter;
+import gregtech.common.gui.GT_GUIContainer_AdvDebugStructureWriter;
+import java.util.HashMap;
+import net.minecraft.client.Minecraft;
+import net.minecraft.client.entity.EntityPlayerSP;
+import net.minecraft.entity.player.EntityPlayer;
+import net.minecraft.entity.player.InventoryPlayer;
+import net.minecraft.item.ItemStack;
+import net.minecraft.nbt.NBTTagCompound;
+import net.minecraft.util.ChatComponentTranslation;
+import net.minecraftforge.client.event.RenderWorldLastEvent;
+import net.minecraftforge.common.MinecraftForge;
+import net.minecraftforge.common.util.ForgeDirection;
+import org.lwjgl.opengl.GL11;
+
+public class GT_MetaTileEntity_AdvDebugStructureWriter extends GT_MetaTileEntity_TieredMachineBlock {
+ private static final HashMap<GT_MetaTileEntity_AdvDebugStructureWriter, BoundHighlighter> bondingBoxes =
+ new HashMap<>(1);
+ private final BoundHighlighter boundingBox = new BoundHighlighter();
+ public short[] numbers = new short[6];
+ public boolean transpose = false;
+ public boolean showHighlightBox = true;
+ public String[] result = new String[] {"Undefined"};
+
+ public GT_MetaTileEntity_AdvDebugStructureWriter(int aID, String aName, String aNameRegional, int aTier) {
+ super(aID, aName, aNameRegional, aTier, 0, "");
+ }
+
+ public GT_MetaTileEntity_AdvDebugStructureWriter(
+ String aName, int aTier, String aDescription, ITexture[][][] aTextures) {
+ super(aName, aTier, 0, aDescription, aTextures);
+ }
+
+ @Override
+ public MetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) {
+ return new GT_MetaTileEntity_AdvDebugStructureWriter(mName, mTier, "", mTextures);
+ }
+
+ @Override
+ public ITexture[] getTexture(
+ IGregTechTileEntity aBaseMetaTileEntity,
+ byte aSide,
+ byte aFacing,
+ byte aColorIndex,
+ boolean aActive,
+ boolean aRedstone) {
+ return new ITexture[] {
+ Textures.BlockIcons.MACHINE_CASINGS[mTier][aColorIndex + 1],
+ aSide != aFacing
+ ? TextureFactory.of(TextureFactory.builder()
+ .addIcon(Textures.BlockIcons.OVERLAY_TELEPORTER_ACTIVE)
+ .glow()
+ .build())
+ : TextureFactory.of(TextureFactory.builder()
+ .addIcon(Textures.BlockIcons.STRUCTURE_MARK)
+ .glow()
+ .build())
+ };
+ }
+
+ @Override
+ public ITexture[][][] getTextureSet(ITexture[] aTextures) {
+ return null;
+ }
+
+ @Override
+ public Object getServerGUI(int aID, InventoryPlayer aPlayerInventory, IGregTechTileEntity aBaseMetaTileEntity) {
+ return new GT_Container_AdvDebugStructureWriter(aPlayerInventory, aBaseMetaTileEntity);
+ }
+
+ @Override
+ public Object getClientGUI(int aID, InventoryPlayer aPlayerInventory, IGregTechTileEntity aBaseMetaTileEntity) {
+ return new GT_GUIContainer_AdvDebugStructureWriter(aPlayerInventory, aBaseMetaTileEntity);
+ }
+
+ @Override
+ public boolean allowPutStack(IGregTechTileEntity iGregTechTileEntity, int i, byte b, ItemStack itemStack) {
+ return false;
+ }
+
+ @Override
+ public boolean allowPullStack(IGregTechTileEntity iGregTechTileEntity, int i, byte b, ItemStack itemStack) {
+ return false;
+ }
+
+ @Override
+ public void saveNBTData(NBTTagCompound aNBT) {
+ for (int i = 0; i < numbers.length; i++) {
+ aNBT.setShort("eData" + i, numbers[i]);
+ }
+ aNBT.setBoolean("Transpose", transpose);
+ aNBT.setBoolean("HighlightBox", showHighlightBox);
+ }
+
+ @Override
+ public void loadNBTData(NBTTagCompound aNBT) {
+ for (int i = 0; i < numbers.length; i++) {
+ numbers[i] = aNBT.getShort("eData" + i);
+ }
+ transpose = aNBT.getBoolean("Transpose");
+ showHighlightBox = aNBT.getBoolean("HighlightBox");
+ }
+
+ @Override
+ public boolean isSimpleMachine() {
+ return false;
+ }
+
+ @Override
+ public void onFirstTick(IGregTechTileEntity aBaseMetaTileEntity) {
+ super.onFirstTick(aBaseMetaTileEntity);
+ bondingBoxes.put(this, boundingBox);
+ }
+
+ @Override
+ public void onPostTick(IGregTechTileEntity aBaseMetaTileEntity, long aTick) {
+ if (aBaseMetaTileEntity.isServerSide()) {
+ ExtendedFacing writerFacing =
+ ExtendedFacing.of(ForgeDirection.getOrientation(aBaseMetaTileEntity.getFrontFacing()));
+ double[] abc = new double[3];
+ double[] xyz = new double[3];
+ boundingBox.dim = aBaseMetaTileEntity.getWorld().provider.dimensionId;
+ boundingBox.showHighlightBox = showHighlightBox;
+ abc[0] = -numbers[0] - 0.5;
+ abc[1] = -numbers[1] - 0.5;
+ abc[2] = -numbers[2] - 0.5;
+ writerFacing.getWorldOffset(abc, xyz);
+ boundingBox.pos1 = new Vec3Impl(
+ aBaseMetaTileEntity.getXCoord() + (int) (xyz[0] + 0.5),
+ aBaseMetaTileEntity.getYCoord() + (int) (xyz[1] + 0.5),
+ aBaseMetaTileEntity.getZCoord() + (int) (xyz[2] + 0.5));
+ abc[0] = -numbers[0] + numbers[3] - 0.5;
+ abc[1] = -numbers[1] + numbers[4] - 0.5;
+ abc[2] = -numbers[2] + numbers[5] - 0.5;
+ writerFacing.getWorldOffset(abc, xyz);
+ boundingBox.pos2 = new Vec3Impl(
+ aBaseMetaTileEntity.getXCoord() + (int) (xyz[0] + 0.5),
+ aBaseMetaTileEntity.getYCoord() + (int) (xyz[1] + 0.5),
+ aBaseMetaTileEntity.getZCoord() + (int) (xyz[2] + 0.5));
+ }
+ }
+
+ @Override
+ public void onRemoval() {
+ bondingBoxes.remove(this);
+ }
+
+ @Override
+ public void onScrewdriverRightClick(byte aSide, EntityPlayer aPlayer, float aX, float aY, float aZ) {
+ IGregTechTileEntity aBaseMetaTileEntity = getBaseMetaTileEntity();
+ printStructure(aPlayer);
+ aBaseMetaTileEntity.disableWorking();
+ }
+
+ public void printStructure(EntityPlayer aPlayer) {
+ IGregTechTileEntity aBaseMetaTileEntity = getBaseMetaTileEntity();
+ String pseudoJavaCode = StructureUtility.getPseudoJavaCode(
+ aBaseMetaTileEntity.getWorld(),
+ ExtendedFacing.of(ForgeDirection.getOrientation(aBaseMetaTileEntity.getFrontFacing())),
+ aBaseMetaTileEntity.getXCoord(),
+ aBaseMetaTileEntity.getYCoord(),
+ aBaseMetaTileEntity.getZCoord(),
+ numbers[0],
+ numbers[1],
+ numbers[2],
+ te -> te.getClass().getCanonicalName(),
+ numbers[3],
+ numbers[4],
+ numbers[5],
+ transpose);
+ GT_FML_LOGGER.info(pseudoJavaCode);
+ result = pseudoJavaCode.split("\\n");
+ aPlayer.addChatMessage(
+ new ChatComponentTranslation(translateToLocal("GT5U.machines.advdebugstructurewriter.printed")));
+ }
+
+ @Override
+ public boolean onRightclick(IGregTechTileEntity aBaseMetaTileEntity, EntityPlayer aPlayer) {
+ if (aBaseMetaTileEntity.isClientSide()) {
+ return true;
+ }
+ aBaseMetaTileEntity.openGUI(aPlayer);
+ return true;
+ }
+
+ @Override
+ public boolean isFacingValid(byte aFacing) {
+ return true;
+ }
+
+ @Override
+ public boolean isElectric() {
+ return false;
+ }
+
+ @Override
+ public boolean isAccessAllowed(EntityPlayer aPlayer) {
+ return true;
+ }
+
+ @Override
+ public String[] getDescription() {
+ return new String[] {
+ translateToLocal("GT5U.machines.advdebugstructurewriter.tooltip"), // Scans Blocks Around
+ translateToLocal(
+ "GT5U.machines.advdebugstructurewriter.tooltip.1"), // Prints Multiblock NonTE structure check code
+ translateToLocal("GT5U.machines.advdebugstructurewriter.tooltip.2") // ABC axes aligned to machine front
+ };
+ }
+
+ @Override
+ public boolean isGivingInformation() {
+ return true;
+ }
+
+ @Override
+ public String[] getInfoData() {
+ return result;
+ }
+
+ public static class ForgeEventHandler {
+ public ForgeEventHandler() {
+ MinecraftForge.EVENT_BUS.register(this);
+ }
+
+ @SuppressWarnings("unused")
+ @SideOnly(Side.CLIENT)
+ @SubscribeEvent
+ public void onRenderWorldLast(RenderWorldLastEvent e) {
+ for (BoundHighlighter boundingBox : bondingBoxes.values()) {
+ boundingBox.renderHighlightedBlock(e);
+ }
+ }
+ }
+
+ private static class BoundHighlighter {
+ public Vec3Impl pos1;
+ public Vec3Impl pos2;
+ public boolean showHighlightBox;
+ public int dim;
+
+ @SideOnly(Side.CLIENT)
+ private void renderHighlightedBlock(RenderWorldLastEvent event) {
+ if (pos1 == null || pos2 == null || !showHighlightBox) {
+ return;
+ }
+ Minecraft mc = Minecraft.getMinecraft();
+ int dimension = mc.theWorld.provider.dimensionId;
+
+ if (dimension != dim) {
+ pos1 = null;
+ pos2 = null;
+ return;
+ }
+
+ EntityPlayerSP p = mc.thePlayer;
+ double doubleX = p.lastTickPosX + (p.posX - p.lastTickPosX) * event.partialTicks;
+ double doubleY = p.lastTickPosY + (p.posY - p.lastTickPosY) * event.partialTicks;
+ double doubleZ = p.lastTickPosZ + (p.posZ - p.lastTickPosZ) * event.partialTicks;
+
+ GL11.glPushMatrix();
+ GL11.glPushAttrib(GL11.GL_ALL_ATTRIB_BITS);
+ GL11.glLineWidth(3);
+ GL11.glTranslated(-doubleX, -doubleY, -doubleZ);
+
+ GL11.glDisable(GL11.GL_DEPTH_TEST);
+ GL11.glDisable(GL11.GL_TEXTURE_2D);
+
+ GL11.glColor4f(1.0f, 0.0f, 0.0f, 1.0f);
+ renderHighLightedArenaOutline(pos1.get0(), pos1.get1(), pos1.get2(), pos2.get0(), pos2.get1(), pos2.get2());
+
+ GL11.glPopAttrib();
+ GL11.glPopMatrix();
+ }
+
+ @SideOnly(Side.CLIENT)
+ static void renderHighLightedArenaOutline(double x1, double y1, double z1, double x2, double y2, double z2) {
+ GL11.glBegin(GL11.GL_LINE_STRIP);
+
+ GL11.glVertex3d(x1, y1, z1);
+ GL11.glVertex3d(x1, y2, z1);
+ GL11.glVertex3d(x1, y2, z2);
+ GL11.glVertex3d(x1, y1, z2);
+ GL11.glVertex3d(x1, y1, z1);
+
+ GL11.glVertex3d(x2, y1, z1);
+ GL11.glVertex3d(x2, y2, z1);
+ GL11.glVertex3d(x2, y2, z2);
+ GL11.glVertex3d(x2, y1, z2);
+ GL11.glVertex3d(x2, y1, z1);
+
+ GL11.glVertex3d(x1, y1, z1);
+ GL11.glVertex3d(x2, y1, z1);
+ GL11.glVertex3d(x2, y1, z2);
+ GL11.glVertex3d(x1, y1, z2);
+ GL11.glVertex3d(x1, y2, z2);
+ GL11.glVertex3d(x2, y2, z2);
+ GL11.glVertex3d(x2, y2, z1);
+ GL11.glVertex3d(x2, y1, z1);
+ GL11.glVertex3d(x1, y1, z1);
+ GL11.glVertex3d(x2, y1, z1);
+ GL11.glVertex3d(x2, y2, z1);
+ GL11.glVertex3d(x1, y2, z1);
+ GL11.glVertex3d(x1, y2, z2);
+ GL11.glVertex3d(x2, y2, z2);
+ GL11.glVertex3d(x2, y1, z2);
+ GL11.glVertex3d(x1, y1, z2);
+
+ GL11.glEnd();
+ }
+ }
+}
diff --git a/src/main/java/gregtech/loaders/preload/GT_Loader_MetaTileEntities.java b/src/main/java/gregtech/loaders/preload/GT_Loader_MetaTileEntities.java
index f0b9814db8..f04afa7324 100644
--- a/src/main/java/gregtech/loaders/preload/GT_Loader_MetaTileEntities.java
+++ b/src/main/java/gregtech/loaders/preload/GT_Loader_MetaTileEntities.java
@@ -10,6 +10,7 @@ import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_BasicMachin
import gregtech.api.util.*;
import gregtech.common.tileentities.automation.*;
import gregtech.common.tileentities.boilers.*;
+import gregtech.common.tileentities.debug.*;
import gregtech.common.tileentities.generators.*;
import gregtech.common.tileentities.machines.*;
import gregtech.common.tileentities.machines.basic.*;
@@ -26,7 +27,6 @@ import net.minecraft.item.ItemStack;
import net.minecraft.util.EnumChatFormatting;
// Free IDs left for machines in GT as of 29th of July 2022 - Colen. Please try use them up in order.
-// 349
// 356
// 357
// 358
@@ -1454,6 +1454,10 @@ public class GT_Loader_MetaTileEntities implements Runnable { // TODO CHECK CIRC
2701, "long.distance.pipeline.item", "Long Distance Item Pipeline", 1)
.getStackForm(1L));
+ ItemList.AdvDebugStructureWriter.set(new GT_MetaTileEntity_AdvDebugStructureWriter(
+ 349, "advdebugstructurewriter", "Advanced Debug Structure Writer", 5)
+ .getStackForm(1L));
+
if (GregTech_API.mAE2) {
ItemList.Hatch_Output_Bus_ME.set(
new GT_MetaTileEntity_Hatch_OutputBus_ME(2710, "hatch.output_bus.me", "Output Bus (ME)")
diff --git a/src/main/resources/assets/gregtech/lang/en_US.lang b/src/main/resources/assets/gregtech/lang/en_US.lang
index 99010cc2bc..fed00b8148 100644
--- a/src/main/resources/assets/gregtech/lang/en_US.lang
+++ b/src/main/resources/assets/gregtech/lang/en_US.lang
@@ -188,6 +188,15 @@ GT5U.machines.industrialapiary.infoextended.tooltip.5=Lifespan Modifier: %6$d %%
GT5U.machines.industrialapiary.infoextended.tooltip.6=Terrority: %7$d x %8$d x %9$d
GT5U.machines.industrialapiary.upgradeslot.tooltip=Upgrade slot
GT5U.machines.industrialapiary.upgradeslot.tooltip.1=ยง7Also accepts gendustry upgrades
+GT5U.machines.advdebugstructurewriter.tooltip=Scans Blocks Around
+GT5U.machines.advdebugstructurewriter.tooltip.1=Prints Multiblock NonTE structure check code
+GT5U.machines.advdebugstructurewriter.tooltip.2=ABC axes aligned to machine front
+GT5U.machines.advdebugstructurewriter.printed=Printed structure to console
+GT5U.machines.advdebugstructurewriter.gui.origin=Origin
+GT5U.machines.advdebugstructurewriter.gui.size=Structure Size
+GT5U.machines.advdebugstructurewriter.gui.print.tooltip=Print Structure
+GT5U.machines.advdebugstructurewriter.gui.highlight.tooltip=Show Bounding Box
+GT5U.machines.advdebugstructurewriter.gui.transpose.tooltip=Transpose
GT5U.recipe_filter.representation_slot.tooltip=Click with a machine to set filter
diff --git a/src/main/resources/assets/gregtech/textures/blocks/iconsets/STRUCTURE_MARK.png b/src/main/resources/assets/gregtech/textures/blocks/iconsets/STRUCTURE_MARK.png
new file mode 100644
index 0000000000..5b9a8d85c6
--- /dev/null
+++ b/src/main/resources/assets/gregtech/textures/blocks/iconsets/STRUCTURE_MARK.png
Binary files differ
diff --git a/src/main/resources/assets/gregtech/textures/gui/AdvDebugStructureWriter.png b/src/main/resources/assets/gregtech/textures/gui/AdvDebugStructureWriter.png
new file mode 100644
index 0000000000..71aacc1ad9
--- /dev/null
+++ b/src/main/resources/assets/gregtech/textures/gui/AdvDebugStructureWriter.png
Binary files differ