diff options
-rw-r--r-- | src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_research.java | 59 | ||||
-rw-r--r-- | src/main/resources/assets/tectech/lang/en_US.lang | 2 |
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 |