diff options
| author | BuildTools <james.jenour@protonmail.com> | 2021-02-05 03:52:39 +0800 |
|---|---|---|
| committer | BuildTools <james.jenour@protonmail.com> | 2021-02-05 03:52:39 +0800 |
| commit | c40f8e737c62c8dadef294f8621716529d354796 (patch) | |
| tree | 3f0fb8be376d09e4fa1a7d95da0624359d8f67b1 /src/main/java/io/github/moulberry/notenoughupdates/overlays/MiningOverlay.java | |
| parent | 5ea3130efceca3148334a613471cec7f22acdf8c (diff) | |
| download | notenoughupdates-c40f8e737c62c8dadef294f8621716529d354796.tar.gz notenoughupdates-c40f8e737c62c8dadef294f8621716529d354796.tar.bz2 notenoughupdates-c40f8e737c62c8dadef294f8621716529d354796.zip | |
PRE15
Diffstat (limited to 'src/main/java/io/github/moulberry/notenoughupdates/overlays/MiningOverlay.java')
| -rw-r--r-- | src/main/java/io/github/moulberry/notenoughupdates/overlays/MiningOverlay.java | 160 |
1 files changed, 160 insertions, 0 deletions
diff --git a/src/main/java/io/github/moulberry/notenoughupdates/overlays/MiningOverlay.java b/src/main/java/io/github/moulberry/notenoughupdates/overlays/MiningOverlay.java new file mode 100644 index 00000000..d4671986 --- /dev/null +++ b/src/main/java/io/github/moulberry/notenoughupdates/overlays/MiningOverlay.java @@ -0,0 +1,160 @@ +package io.github.moulberry.notenoughupdates.overlays; + +import com.google.common.collect.ComparisonChain; +import com.google.common.collect.Ordering; +import io.github.moulberry.notenoughupdates.NotEnoughUpdates; +import io.github.moulberry.notenoughupdates.core.config.Position; +import io.github.moulberry.notenoughupdates.core.util.StringUtils; +import io.github.moulberry.notenoughupdates.core.util.lerp.LerpUtils; +import io.github.moulberry.notenoughupdates.util.SBInfo; +import io.github.moulberry.notenoughupdates.util.Utils; +import net.minecraft.client.Minecraft; +import net.minecraft.client.network.NetworkPlayerInfo; +import net.minecraft.scoreboard.ScorePlayerTeam; +import net.minecraft.util.EnumChatFormatting; +import net.minecraft.world.WorldSettings; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +import java.util.*; +import java.util.function.Supplier; + +import static net.minecraft.util.EnumChatFormatting.*; + +public class MiningOverlay extends TextOverlay { + + public MiningOverlay(Position position, Supplier<List<String>> dummyStrings, Supplier<TextOverlayStyle> styleSupplier) { + super(position, dummyStrings, styleSupplier); + } + + public static Map<String, Float> commissionProgress = new LinkedHashMap<>(); + + @Override + public void update() { + overlayStrings = null; + + if(!NotEnoughUpdates.INSTANCE.config.mining.dwarvenOverlay) return; + if(SBInfo.getInstance().getLocation() == null) return; + if(!SBInfo.getInstance().getLocation().equals("mining_3")) return; + + overlayStrings = new ArrayList<>(); + commissionProgress.clear(); + List<String> forgeStrings = new ArrayList<>(); + List<String> forgeStringsEmpty = new ArrayList<>(); + String mithrilPowder = null; + + boolean commissions = false; + boolean forges = false; + List<NetworkPlayerInfo> players = playerOrdering.sortedCopy(Minecraft.getMinecraft().thePlayer.sendQueue.getPlayerInfoMap()); + for(NetworkPlayerInfo info : players) { + String name = Minecraft.getMinecraft().ingameGUI.getTabList().getPlayerName(info); + if(name.contains("Mithril Powder:")) { + mithrilPowder = DARK_AQUA+Utils.trimIgnoreColour(name).replaceAll("\u00a7[f|F|r]", ""); + } + if(name.equals(RESET.toString()+BLUE+BOLD+"Forges"+RESET)) { + commissions = false; + forges = true; + continue; + } else if(name.equals(RESET.toString()+BLUE+BOLD+"Commissions"+RESET)) { + commissions = true; + forges = false; + continue; + } + String clean = StringUtils.cleanColour(name); + if(forges && clean.startsWith(" ")) { + if(name.contains("LOCKED")) continue; + if(name.contains("EMPTY")) { + forgeStringsEmpty.add(DARK_AQUA+"Forge "+ Utils.trimIgnoreColour(name).replaceAll("\u00a7[f|F|r]", "")); + } else { + forgeStrings.add(DARK_AQUA+"Forge "+ Utils.trimIgnoreColour(name).replaceAll("\u00a7[f|F|r]", "")); + } + } else if(commissions && clean.startsWith(" ")) { + String[] split = clean.trim().split(": "); + if(split.length == 2) { + if(split[1].endsWith("%")) { + try { + float progress = Float.parseFloat(split[1].replace("%", ""))/100; + progress = LerpUtils.clampZeroOne(progress); + commissionProgress.put(split[0], progress); + } catch(Exception ignored) {} + } else { + commissionProgress.put(split[0], 1.0f); + } + } + } else { + commissions = false; + forges = false; + } + } + + List<String> commissionsStrings = new ArrayList<>(); + for(Map.Entry<String, Float> entry : commissionProgress.entrySet()) { + if(entry.getValue() >= 1) { + commissionsStrings.add(DARK_AQUA+entry.getKey() + ": " + GREEN + "DONE"); + } else { + EnumChatFormatting col = RED; + if(entry.getValue() >= 0.75) { + col = GREEN; + } else if(entry.getValue() >= 0.5) { + col = YELLOW; + } else if(entry.getValue() >= 0.25) { + col = GOLD; + } + + String valS = Utils.floatToString(entry.getValue()*100, 1); + + commissionsStrings.add(DARK_AQUA+entry.getKey() + ": " + col+valS+"%"); + } + } + /*boolean hasAny = false; + if(NotEnoughUpdates.INSTANCE.config.mining.dwarvenOverlay) { + overlayStrings.addAll(commissionsStrings); + hasAny = true; + } + if(NotEnoughUpdates.INSTANCE.config.mining.powderOverlay) { + if(mithrilPowder != null) { + if(hasAny) overlayStrings.add(null); + overlayStrings.add(DARK_AQUA+mithrilPowder); + hasAny = true; + } + } + if(NotEnoughUpdates.INSTANCE.config.mining.forgeOverlay) { + if(hasAny) overlayStrings.add(null); + overlayStrings.addAll(forgeStrings); + }*/ + + for(int index : NotEnoughUpdates.INSTANCE.config.mining.dwarvenText) { + switch(index) { + case 0: + overlayStrings.addAll(commissionsStrings); break; + case 1: + overlayStrings.add(mithrilPowder); break; + case 2: + overlayStrings.addAll(forgeStrings); break; + case 3: + overlayStrings.addAll(forgeStringsEmpty); break; + } + } + + if(overlayStrings.isEmpty()) overlayStrings = null; + } + + private static final Ordering<NetworkPlayerInfo> playerOrdering = Ordering.from(new PlayerComparator()); + + @SideOnly(Side.CLIENT) + static class PlayerComparator implements Comparator<NetworkPlayerInfo> { + private PlayerComparator() { } + + public int compare(NetworkPlayerInfo o1, NetworkPlayerInfo o2) { + ScorePlayerTeam team1 = o1.getPlayerTeam(); + ScorePlayerTeam team2 = o2.getPlayerTeam(); + return ComparisonChain.start().compareTrueFirst( + o1.getGameType() != WorldSettings.GameType.SPECTATOR, + o2.getGameType() != WorldSettings.GameType.SPECTATOR) + .compare(team1 != null ? team1.getRegisteredName() : "", team2 != null ? team2.getRegisteredName() : "") + .compare(o1.getGameProfile().getName(), o2.getGameProfile().getName()).result(); + } + } + + +} |
