diff options
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 Binary files differnew file mode 100644 index 0000000000..5b9a8d85c6 --- /dev/null +++ b/src/main/resources/assets/gregtech/textures/blocks/iconsets/STRUCTURE_MARK.png diff --git a/src/main/resources/assets/gregtech/textures/gui/AdvDebugStructureWriter.png b/src/main/resources/assets/gregtech/textures/gui/AdvDebugStructureWriter.png Binary files differnew file mode 100644 index 0000000000..71aacc1ad9 --- /dev/null +++ b/src/main/resources/assets/gregtech/textures/gui/AdvDebugStructureWriter.png |