From 67b5824e53df2b5d989af5c85b07e9ff339c7fca Mon Sep 17 00:00:00 2001 From: Julia <78276563+Vlamonster@users.noreply.github.com> Date: Fri, 7 Feb 2025 19:55:29 +0100 Subject: [PATCH] Add `getInfoMap` method to `IGregTechDeviceInformation` (#3897) Co-authored-by: Julia Dijkstra Co-authored-by: Martin Robertz Co-authored-by: Maya <10861407+serenibyss@users.noreply.github.com> --- .../metatileentity/IMetaTileEntity.java | 7 ++-- .../IGregTechDeviceInformation.java | 24 +++++++++++--- .../metatileentity/BaseMetaPipeEntity.java | 20 ++++++----- .../metatileentity/BaseMetaTileEntity.java | 22 +++++++------ .../metatileentity/CommonMetaTileEntity.java | 10 ------ .../implementations/MTEMultiBlockBase.java | 33 +++++++++++++++++-- .../tileentities/base/TileEntityBase.java | 5 --- 7 files changed, 77 insertions(+), 44 deletions(-) diff --git a/src/main/java/gregtech/api/interfaces/metatileentity/IMetaTileEntity.java b/src/main/java/gregtech/api/interfaces/metatileentity/IMetaTileEntity.java index f63192cea1e..fc13da3c054 100644 --- a/src/main/java/gregtech/api/interfaces/metatileentity/IMetaTileEntity.java +++ b/src/main/java/gregtech/api/interfaces/metatileentity/IMetaTileEntity.java @@ -30,6 +30,7 @@ import gregtech.api.enums.Dyes; import gregtech.api.interfaces.ITexture; import gregtech.api.interfaces.modularui.IGetGUITextureSet; +import gregtech.api.interfaces.tileentity.IGregTechDeviceInformation; import gregtech.api.interfaces.tileentity.IGregTechTileEntity; import gregtech.api.interfaces.tileentity.IGregtechWailaProvider; import gregtech.api.interfaces.tileentity.IMachineBlockUpdateable; @@ -43,7 +44,7 @@ * Don't implement this yourself and expect it to work. Extend @MetaTileEntity itself. */ public interface IMetaTileEntity extends ISidedInventory, IFluidTank, IFluidHandler, IMachineBlockUpdateable, - IGregtechWailaProvider, IGetGUITextureSet, ICraftingIconProvider { + IGregtechWailaProvider, IGetGUITextureSet, ICraftingIconProvider, IGregTechDeviceInformation { /** * This determines the BaseMetaTileEntity belonging to this MetaTileEntity by using the Meta ID of the Block itself. @@ -380,10 +381,6 @@ ITexture[] getTexture(IGregTechTileEntity baseMetaTileEntity, ForgeDirection sid float getExplosionResistance(ForgeDirection side); - String[] getInfoData(); - - boolean isGivingInformation(); - ItemStack[] getRealInventory(); boolean connectsToItemPipe(ForgeDirection side); diff --git a/src/main/java/gregtech/api/interfaces/tileentity/IGregTechDeviceInformation.java b/src/main/java/gregtech/api/interfaces/tileentity/IGregTechDeviceInformation.java index 001ed44825b..ae45617d159 100644 --- a/src/main/java/gregtech/api/interfaces/tileentity/IGregTechDeviceInformation.java +++ b/src/main/java/gregtech/api/interfaces/tileentity/IGregTechDeviceInformation.java @@ -1,5 +1,8 @@ package gregtech.api.interfaces.tileentity; +import java.util.Collections; +import java.util.Map; + /** * You are allowed to include this File in your Download, as i will not change it. */ @@ -10,13 +13,26 @@ public interface IGregTechDeviceInformation { * MetaTileEntities, you MUST check this!!! Do not assume that it's a Information returning Device, when it just * implements this Interface. */ - boolean isGivingInformation(); + default boolean isGivingInformation() { + return false; + } /** - * Up to 8 Strings can be returned. Note: If you insert "\\\\" in the String it tries to translate seperate Parts of + * Up to 8 Strings can be returned. Note: If you insert "\\\\" in the String it tries to translate separate Parts of * the String instead of the String as a whole. * - * @return an Array of Information Strings. Don't return null! + * @return an Array of Information Strings. + */ + default String[] getInfoData() { + return new String[] {}; + } + + /** + * Returns a map of key-value pairs containing device information. + * + * @return a Map where keys are information categories and values are corresponding details. */ - String[] getInfoData(); + default Map getInfoMap() { + return Collections.emptyMap(); + } } diff --git a/src/main/java/gregtech/api/metatileentity/BaseMetaPipeEntity.java b/src/main/java/gregtech/api/metatileentity/BaseMetaPipeEntity.java index e1bb1dcab47..539dff60617 100644 --- a/src/main/java/gregtech/api/metatileentity/BaseMetaPipeEntity.java +++ b/src/main/java/gregtech/api/metatileentity/BaseMetaPipeEntity.java @@ -7,6 +7,7 @@ import java.util.Arrays; import java.util.Collections; import java.util.List; +import java.util.Map; import java.util.UUID; import net.minecraft.block.Block; @@ -482,8 +483,17 @@ public ArrayList getDebugInfo(EntityPlayer aPlayer, int aLogLevel) { @Override public boolean isGivingInformation() { - if (canAccessData()) return mMetaTileEntity.isGivingInformation(); - return false; + return canAccessData() && mMetaTileEntity.isGivingInformation(); + } + + @Override + public String[] getInfoData() { + return canAccessData() ? getMetaTileEntity().getInfoData() : new String[] {}; + } + + @Override + public Map getInfoMap() { + return canAccessData() ? getMetaTileEntity().getInfoMap() : Collections.emptyMap(); } @Override @@ -1324,12 +1334,6 @@ public boolean isUniversalEnergyStored(long aEnergyAmount) { return getUniversalEnergyStored() >= aEnergyAmount; } - @Override - public String[] getInfoData() { - if (canAccessData()) return getMetaTileEntity().getInfoData(); - return new String[] {}; - } - @Override public byte getConnections() { return mConnections; diff --git a/src/main/java/gregtech/api/metatileentity/BaseMetaTileEntity.java b/src/main/java/gregtech/api/metatileentity/BaseMetaTileEntity.java index c57808cb4fd..74042e53e9e 100644 --- a/src/main/java/gregtech/api/metatileentity/BaseMetaTileEntity.java +++ b/src/main/java/gregtech/api/metatileentity/BaseMetaTileEntity.java @@ -10,6 +10,7 @@ import java.util.Arrays; import java.util.Collections; import java.util.List; +import java.util.Map; import java.util.UUID; import javax.annotation.Nonnull; @@ -874,8 +875,17 @@ public ArrayList getDebugInfo(EntityPlayer aPlayer, int aLogLevel) { @Override public boolean isGivingInformation() { - if (canAccessData()) return mMetaTileEntity.isGivingInformation(); - return false; + return canAccessData() && mMetaTileEntity.isGivingInformation(); + } + + @Override + public String[] getInfoData() { + return canAccessData() ? getMetaTileEntity().getInfoData() : new String[] {}; + } + + @Override + public Map getInfoMap() { + return canAccessData() ? getMetaTileEntity().getInfoMap() : Collections.emptyMap(); } @Override @@ -2225,14 +2235,6 @@ public boolean isUniversalEnergyStored(long aEnergyAmount) { return false; } - @Override - public String[] getInfoData() { - { - if (canAccessData()) return getMetaTileEntity().getInfoData(); - return new String[] {}; - } - } - @Override public int getLightOpacity() { return mMetaTileEntity == null ? getLightValue() > 0 ? 0 : 255 : mMetaTileEntity.getLightOpacity(); diff --git a/src/main/java/gregtech/api/metatileentity/CommonMetaTileEntity.java b/src/main/java/gregtech/api/metatileentity/CommonMetaTileEntity.java index 2fceabc508d..423247f5a4d 100644 --- a/src/main/java/gregtech/api/metatileentity/CommonMetaTileEntity.java +++ b/src/main/java/gregtech/api/metatileentity/CommonMetaTileEntity.java @@ -306,16 +306,6 @@ public String getSpecialVoltageToolTip() { return null; } - @Override - public boolean isGivingInformation() { - return false; - } - - @Override - public String[] getInfoData() { - return new String[] {}; - } - public boolean isDigitalChest() { return false; } diff --git a/src/main/java/gregtech/api/metatileentity/implementations/MTEMultiBlockBase.java b/src/main/java/gregtech/api/metatileentity/implementations/MTEMultiBlockBase.java index 13c576cacb8..320ebf9a52e 100644 --- a/src/main/java/gregtech/api/metatileentity/implementations/MTEMultiBlockBase.java +++ b/src/main/java/gregtech/api/metatileentity/implementations/MTEMultiBlockBase.java @@ -1913,6 +1913,11 @@ protected boolean filtersFluid() { return true; } + @Override + public boolean isGivingInformation() { + return true; + } + @Override public String[] getInfoData() { long storedEnergy = 0; @@ -1976,8 +1981,32 @@ public String[] getInfoData() { } @Override - public boolean isGivingInformation() { - return true; + public Map getInfoMap() { + long energy = 0, maxEnergy = 0, maxEnergyUsage = 0, minEnergyTier = Long.MAX_VALUE; + + for (MTEHatchEnergy tHatch : validMTEList(mEnergyHatches)) { + IGregTechTileEntity energyHatch = tHatch.getBaseMetaTileEntity(); + energy += energyHatch.getStoredEU(); + maxEnergy += energyHatch.getEUCapacity(); + maxEnergyUsage += energyHatch.getInputAmperage() * energyHatch.getInputVoltage(); + minEnergyTier = Math.min(minEnergyTier, energyHatch.getInputVoltage()); + } + + minEnergyTier = minEnergyTier == Long.MAX_VALUE ? 0 : minEnergyTier; + + Map infoMap = new HashMap<>(); + infoMap.put("progressTime", Integer.toString(mProgresstime)); + infoMap.put("maxProgressTime", Integer.toString(mMaxProgresstime)); + infoMap.put("energy", Long.toString(energy)); + infoMap.put("maxEnergy", Long.toString(maxEnergy)); + infoMap.put("energyUsage", Long.toString(getActualEnergyUsage())); + infoMap.put("maxEnergyUsage", Long.toString(maxEnergyUsage)); + infoMap.put("minEnergyTier", Long.toString(minEnergyTier)); + infoMap.put("maintenanceIssues", Integer.toString(getIdealStatus() - getRepairStatus())); + infoMap.put("energyEfficiency", Double.toString(mEfficiency / 10_000F)); + infoMap.put("pollution", Double.toString(getAveragePollutionPercentage() / 100F)); + + return infoMap; } @Override diff --git a/src/main/java/gtPlusPlus/core/tileentities/base/TileEntityBase.java b/src/main/java/gtPlusPlus/core/tileentities/base/TileEntityBase.java index b4e25ea278b..aff67612f1d 100644 --- a/src/main/java/gtPlusPlus/core/tileentities/base/TileEntityBase.java +++ b/src/main/java/gtPlusPlus/core/tileentities/base/TileEntityBase.java @@ -1191,11 +1191,6 @@ public boolean isGivingInformation() { return true; } - @Override - public String[] getInfoData() { - return null; - } - public long getEUVar() { return this.mStoredEnergy; }