aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_research.java59
-rw-r--r--src/main/resources/assets/tectech/lang/en_US.lang2
2 files changed, 58 insertions, 3 deletions
diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_research.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_research.java
index baed9c8607..e890f86ebf 100644
--- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_research.java
+++ b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_research.java
@@ -34,6 +34,7 @@ import net.minecraft.nbt.NBTTagString;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.ChatComponentTranslation;
import net.minecraft.util.EnumChatFormatting;
+import net.minecraft.util.StatCollector;
import net.minecraft.world.World;
import net.minecraftforge.common.util.ForgeDirection;
@@ -49,6 +50,11 @@ import com.github.technus.tectech.util.CommonValues;
import com.gtnewhorizon.structurelib.alignment.constructable.ISurvivalConstructable;
import com.gtnewhorizon.structurelib.structure.IItemSource;
import com.gtnewhorizon.structurelib.structure.IStructureDefinition;
+import com.gtnewhorizons.modularui.api.math.Alignment;
+import com.gtnewhorizons.modularui.common.widget.DynamicPositionedColumn;
+import com.gtnewhorizons.modularui.common.widget.FakeSyncWidget;
+import com.gtnewhorizons.modularui.common.widget.SlotWidget;
+import com.gtnewhorizons.modularui.common.widget.TextWidget;
import gregtech.api.enums.ItemList;
import gregtech.api.enums.Textures;
@@ -90,6 +96,9 @@ public class GT_MetaTileEntity_EM_research extends GT_MetaTileEntity_MultiblockB
private ItemStack holdItem;
private long computationRemaining, computationRequired;
+ // Used to sync currently researching item to GUI
+ private String clientOutputName;
+
private static LinkedHashMap<String, String> lServerNames;
private static final String[] description = new String[] {
@@ -587,7 +596,7 @@ public class GT_MetaTileEntity_EM_research extends GT_MetaTileEntity_MultiblockB
+ EnumChatFormatting.RESET
+ " / "
+ EnumChatFormatting.YELLOW
- + GT_Utility.formatNumbers(computationRequired / 20L) };
+ + GT_Utility.formatNumbers(getComputationRequired()) };
}
@Override
@@ -744,14 +753,58 @@ public class GT_MetaTileEntity_EM_research extends GT_MetaTileEntity_MultiblockB
}
@Override
+ protected void drawTexts(DynamicPositionedColumn screenElements, SlotWidget inventorySlot) {
+ super.drawTexts(screenElements, inventorySlot);
+ screenElements
+ .widget(
+ new TextWidget().setStringSupplier(
+ () -> StatCollector.translateToLocalFormatted("GT5U.gui.text.researching_item", clientOutputName))
+ .setTextAlignment(Alignment.CenterLeft)
+ .setEnabled(
+ widget -> computationRequired > 0 && clientOutputName != null && !clientOutputName.isEmpty()))
+ .widget(
+ new TextWidget()
+ .setStringSupplier(
+ () -> StatCollector.translateToLocalFormatted(
+ "GT5U.gui.text.research_progress",
+ getComputationConsumed(),
+ getComputationRequired(),
+ GT_Utility.formatNumbers(getComputationProgress())))
+ .setTextAlignment(Alignment.CenterLeft)
+ .setEnabled(
+ widget -> computationRequired > 0 && clientOutputName != null && !clientOutputName.isEmpty()))
+ .widget(new FakeSyncWidget.LongSyncer(() -> computationRequired, aLong -> computationRequired = aLong))
+ .widget(new FakeSyncWidget.LongSyncer(() -> computationRemaining, aLong -> computationRemaining = aLong))
+ .widget(new FakeSyncWidget.StringSyncer(() -> {
+ if (tRecipe != null && tRecipe.mOutput != null) {
+ return tRecipe.mOutput.getDisplayName();
+ }
+ return "";
+ }, aString -> clientOutputName = aString));
+ }
+
+ @Override
public void getWailaNBTData(EntityPlayerMP player, TileEntity tile, NBTTagCompound tag, World world, int x, int y,
int z) {
tag.setBoolean("hasProblems", (getIdealStatus() - getRepairStatus()) > 0);
tag.setFloat("efficiency", mEfficiency / 100.0F);
tag.setBoolean("incompleteStructure", (getBaseMetaTileEntity().getErrorDisplayID() & 64) != 0);
tag.setString("machineType", machineType);
- tag.setLong("computation", (computationRequired - computationRemaining) / 20L);
- tag.setLong("computationRequired", computationRequired / 20L);
+ tag.setLong("computation", getComputationConsumed());
+ tag.setLong("computationRequired", getComputationRequired());
+ }
+
+ private long getComputationConsumed() {
+ return (computationRequired - computationRemaining) / 20L;
+ }
+
+ private long getComputationRequired() {
+ return computationRequired / 20L;
+ }
+
+ private double getComputationProgress() {
+ return 100d
+ * (getComputationRequired() > 0d ? (double) getComputationConsumed() / getComputationRequired() : 0d);
}
@Override
diff --git a/src/main/resources/assets/tectech/lang/en_US.lang b/src/main/resources/assets/tectech/lang/en_US.lang
index ece0cbab3c..55e93a3a23 100644
--- a/src/main/resources/assets/tectech/lang/en_US.lang
+++ b/src/main/resources/assets/tectech/lang/en_US.lang
@@ -1174,6 +1174,8 @@ GT5U.gui.text.insufficient_power_no_val=§7Insufficient power
GT5U.gui.text.missing_upgrades=§7Missing upgrades
GT5U.gui.text.waiting_for_inputs=§7Waiting for inputs
GT5U.gui.text.computation_loss=§4Shut down due to computation loss.
+GT5U.gui.text.researching_item=§fResearching: §b%s
+GT5U.gui.text.research_progress=§fComputation: %d/%d (%s%%)
# RecipeMaps
gt.recipe.eyeofharmony=Eye of Harmony