Badge images report the certificate status at the moment they are fetched
BackProbeIntegrity Authority
dev/mishka/gamblerplus/client/SessionDetailScreen.class 16.6 KB
Class
public final synchronized dev.mishka.gamblerplus.client.SessionDetailScreen
Extends
net.minecraft.class_437
Implements
nothing
Compiled for
Java 21

Reconstructed source

// Reconstructed from bytecode by BackProbe (dev/mishka/gamblerplus/client/SessionDetailScreen.class, Java 21); this is not the original source.

package dev.mishka.gamblerplus.client;

import java.time.Instant;
import java.time.ZoneId;
import java.time.format.DateTimeFormatter;
import java.util.ArrayList;
import java.util.Comparator;
import java.util.HashSet;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Objects;
import java.util.Set;
import java.util.function.Supplier;
import net.minecraft.class_11908;
import net.minecraft.class_11909;
import net.minecraft.class_2561;
import net.minecraft.class_310;
import net.minecraft.class_332;
import net.minecraft.class_437;

public final class SessionDetailScreen extends class_437 {

    private static final int PANEL_W;
    private static final int PANEL_H;
    private static final int PLAYER_ROW_H;
    private static final int PAYMENT_ROW_H;
    private static final long ANIM_MS;
    private static final DateTimeFormatter TIME_FMT;
    private static final DateTimeFormatter STAMP_FMT;
    private final Supplier sessionSupplier;
    private final boolean live;
    private final Set expanded;
    private long openedAtMs;
    private int px;
    private int py;
    private int scroll;
    private int closeX;
    private int closeY;
    private int closeW;
    private int closeH;
    private int listTop;
    private int listBot;
    private int listX;
    private int listW;
    private final List playerHitRects;
    private final List playerHitNames;
    private float uiScale;

    public SessionDetailScreen(Supplier arg0, boolean arg1) {
        super(class_310.method_1551(), class_310.method_1551().field_1772, class_2561.method_43470("Session details"));
        this.expanded = new HashSet();
        this.playerHitRects = new ArrayList();
        this.playerHitNames = new ArrayList();
        this.uiScale = 1.0F;
        this.sessionSupplier = arg0;
        this.live = arg1;
        return;
    }

    protected void method_25426() {
        this.openedAtMs = System.currentTimeMillis();
        int var1 = 16;
        float var2 = (((float) (this.field_22789 - var1)) / 500.0);
        float var3 = (((float) (this.field_22790 - var1)) / 340.0);
        this.uiScale = Math.min(1.0F, Math.min(var2, var3));
        int var4 = Math.round((((float) this.field_22789) / this.uiScale));
        int var5 = Math.round((((float) this.field_22790) / this.uiScale));
        this.px = ((var4 - 500) / 2);
        this.py = ((var5 - 340) / 2);
        return;
    }

    public boolean method_25421() {
        return false;
    }

    public void method_25394(class_332 arg0, int arg1, int arg2, float arg3) {
        long var5 = (System.currentTimeMillis() - this.openedAtMs);
        float var7 = Math.min(1.0F, (((float) var5) / 220.0));
        float var8 = Theme.easeOutCubic(var7);
        int var9 = ((int) (176.0 * var8));
        arg0.method_25294(0, 0, this.field_22789, this.field_22790, (var9 << 24));
        int var10 = Math.round((((float) arg1) / this.uiScale));
        int var11 = Math.round((((float) arg2) / this.uiScale));
        var var12 = arg0.method_51448();
        var12.pushMatrix();
        var12.translate(0.0F, ((1.0F - var8) * -14.0));
        var12.scale(this.uiScale, this.uiScale);
        arg0.method_25294(this.px, this.py, (this.px + 500), (this.py + 340), -15855596);
        this.outline(arg0, this.px, this.py, (this.px + 500), (this.py + 340), -14276046);
        arg0.method_25294(this.px, this.py, (this.px + 500), (this.py + 24), -15329251);
        arg0.method_25294(this.px, (this.py + 24), (this.px + 500), (this.py + 25), -14276046);
        var var13 = ((Session) this.sessionSupplier.get());
        if (var13 != null) goto L304;
        arg0.method_51433(this.field_22793, "no session", (this.px + 14), (this.py + 9), -11709599, false);
        this.drawCloseButton(arg0, var10, var11);
        var12.popMatrix();
        return;
    L304:
        var var14 = var13.label();
        if (!this.live) goto L426;
        arg0.method_25294((this.px + 14), (this.py + 12), (this.px + 18), (this.py + 16), -11870592);
        arg0.method_51433(this.field_22793, var14, (this.px + 22), (this.py + 9), -1644565, false);
        int var15 = this.field_22793.method_1727(var14);
        arg0.method_51433(this.field_22793, "live", (((this.px + 22) + var15) + 6), (this.py + 9), -11870592, false);
        goto L453;
    L426:
        arg0.method_51433(this.field_22793, var14, (this.px + 14), (this.py + 9), -1644565, false);
    L453:
        this.drawCloseButton(arg0, var10, var11);
        var15 = (this.py + 32);
        var var16 = SessionDetailScreen.STAMP_FMT.format(Instant.ofEpochMilli(var13.startedAt()));
        if (this.live) goto L525;
        var16 = indy.makeConcatWithConstants(var16, DateTimeFormatter.ofPattern("HH:mm").withZone(ZoneId.systemDefault()).format(Instant.ofEpochMilli(var13.endedAt())));
    L525:
        var stack0 = var16;
        var stack1 = this;
        if (!this.live) goto L547;
        var stack2 = (System.currentTimeMillis() - var13.startedAt());
        goto L552;
    L547:
        stack2 = var13.durationMs();
    L552:
        var16 = indy.makeConcatWithConstants(stack0, stack1.formatDuration(stack2));
        arg0.method_51433(this.field_22793, var16, (this.px + 14), var15, -8748911, false);
        int var17 = (var15 + 12);
        long var18 = var13.net();
        var var20 = AmountFormat.signed(var18);
        arg0.method_51433(this.field_22793, "net", (this.px + 14), var17, -11709599, false);
        arg0.method_51433(this.field_22793, var20, (this.px + 32), var17, Theme.color(var18), false);
        int var21 = (((this.px + 32) + this.field_22793.method_1727(var20)) + 12);
        arg0.method_51433(this.field_22793, "in", var21, var17, -11709599, false);
        arg0.method_51433(this.field_22793, AmountFormat.pretty(var13.in()), (var21 + 14), var17, -11870592, false);
        var21 = (var21 + ((14 + this.field_22793.method_1727(AmountFormat.pretty(var13.in()))) + 12));
        arg0.method_51433(this.field_22793, "out", var21, var17, -11709599, false);
        arg0.method_51433(this.field_22793, AmountFormat.pretty(var13.out()), (var21 + 18), var17, -1096636, false);
        var21 = (var21 + ((18 + this.field_22793.method_1727(AmountFormat.pretty(var13.out()))) + 12));
        var var22 = indy.makeConcatWithConstants(var13.inCount(), var13.outCount());
        arg0.method_51433(this.field_22793, var22, var21, var17, -1644565, false);
        arg0.method_25294((this.px + 14), (var17 + 12), ((this.px + 500) - 14), (var17 + 13), -14736855);
        int var23 = (var17 + 20);
        arg0.method_51433(this.field_22793, "PLAYER", (this.px + 20), var23, -11709599, false);
        arg0.method_51433(this.field_22793, "RECORD", (this.px + 180), var23, -11709599, false);
        arg0.method_51433(this.field_22793, "NET", (this.px + 260), var23, -11709599, false);
        this.listX = (this.px + 8);
        this.listW = 484;
        this.listTop = (var23 + 12);
        this.listBot = ((this.py + 340) - 34);
        arg0.method_25294(this.listX, this.listTop, (this.listX + this.listW), this.listBot, -15000028);
        this.outline(arg0, this.listX, this.listTop, (this.listX + this.listW), this.listBot, -14276046);
        this.playerHitRects.clear();
        this.playerHitNames.clear();
        var var24 = this.groupByPlayer(var13.payments());
        if (!var24.isEmpty()) goto L1185;
        var var25 = "no payments recorded in this session";
        int var26 = this.field_22793.method_1727(var25);
        arg0.method_51433(this.field_22793, var25, (this.listX + ((this.listW - var26) / 2)), ((this.listTop + ((this.listBot - this.listTop) / 2)) - 4), -11709599, false);
        this.drawCloseInfo(arg0, ((this.py + 340) - 22));
        var12.popMatrix();
        return;
    L1185:
        var25 = new ArrayList(var24.entrySet());
        var25.sort(Comparator.comparingLong(indy.applyAsLong(this)).reversed());
        arg0.method_44379((this.listX + 1), (this.listTop + 1), ((this.listX + this.listW) - 1), (this.listBot - 1));
        var26 = ((this.listTop + 4) - this.scroll);
        int var27 = 0;
        var var28 = var25.iterator();
    L1280:
        if (!var28.hasNext()) goto L1707;
        var var29 = ((Map.Entry) var28.next());
        var var30 = ((String) var29.getKey());
        var var31 = ((List) var29.getValue());
        long var32 = 0L;
        long var34 = 0L;
        int var36 = 0;
        int var37 = 0;
        var var38 = var31.iterator();
    L1347:
        if (!var38.hasNext()) goto L1409;
        var var39 = ((PaymentEvent) var38.next());
        if (!var39.incoming()) goto L1393;
        var32 = (var32 + var39.amount());
        var36 += 1;
        goto L1406;
    L1393:
        var34 = (var34 + var39.amount());
        var37 += 1;
    L1406:
        goto L1347;
    L1409:
        var38 = (var32 - var34);
        int var40 = this.expanded.contains(var30);
        if ((var26 + 18) <= this.listTop) goto L1471;
        if (var26 >= this.listBot) goto L1471;
        this.drawPlayerRow(arg0, var26, var30, var36, var37, var38, var40, var10, var11);
    L1471:
        stack1 = new int[4];
        stack1[0] = (this.listX + 4);
        stack1[1] = var26;
        stack1[2] = ((this.listX + this.listW) - 4);
        stack1[3] = (var26 + 18);
        this.playerHitRects.add(stack1);
        this.playerHitNames.add(var30);
        var26 += 18;
        var27 += 18;
        if (var40 == 0) goto L1704;
        var var41 = new ArrayList(var31);
        var41.sort(Comparator.comparingLong(indy.applyAsLong()).reversed());
        var var42 = var41.iterator();
    L1583:
        if (!var42.hasNext()) goto L1644;
        var var43 = ((PaymentEvent) var42.next());
        if ((var26 + 12) <= this.listTop) goto L1635;
        if (var26 >= this.listBot) goto L1635;
        this.drawPaymentRow(arg0, var26, var43);
    L1635:
        var26 += 12;
        var27 += 12;
        goto L1583;
    L1644:
        if ((var26 + 4) <= this.listTop) goto L1698;
        if (var26 >= this.listBot) goto L1698;
        arg0.method_25294((this.listX + 20), (var26 + 1), ((this.listX + this.listW) - 20), (var26 + 2), -14736855);
    L1698:
        var26 += 6;
        var27 += 6;
    L1704:
        goto L1280;
    L1707:
        arg0.method_44380();
        var28 = (this.listBot - this.listTop);
        if (var27 <= var28) goto L1847;
        var29 = ((this.listX + this.listW) - 4);
        var30 = (this.listTop + 2);
        var31 = (var28 - 4);
        var32 = Math.max(16, ((var31 * var28) / var27));
        int var33 = (var27 - var28);
        if (var33 > 0) goto L1787;
        stack0 = 0;
        goto L1800;
    L1787:
        stack0 = (((var31 - var32) * this.scroll) / var33);
    L1800:
        var34 = stack0;
        arg0.method_25294(var29, var30, (var29 + 2), (var30 + var31), -14276046);
        arg0.method_25294(var29, (var30 + var34), (var29 + 2), ((var30 + var34) + var32), -8748911);
    L1847:
        this.drawCloseInfo(arg0, ((this.py + 340) - 22));
        var12.popMatrix();
        return;
    }

    private void drawPlayerRow(class_332 arg0, int arg1, String arg2, int arg3, int arg4, long arg5, boolean arg6, int arg7, int arg8) {
        if (arg7 < (this.listX + 4)) goto L46;
        if (arg7 >= ((this.listX + this.listW) - 4)) goto L46;
        if (arg8 < arg1) goto L46;
        if (arg8 >= (arg1 + 18)) goto L46;
        var stack0 = 1;
        goto L47;
    L46:
        stack0 = 0;
    L47:
        int var11 = stack0;
        if (var11 == 0) goto L83;
        arg0.method_25294((this.listX + 2), arg1, ((this.listX + this.listW) - 2), (arg1 + 18), 352321535);
    L83:
        if (arg6 == 0) goto L94;
        stack0 = "v";
        goto L97;
    L94:
        stack0 = ">";
    L97:
        var var12 = stack0;
        Objects.requireNonNull(this.field_22793);
        arg0.method_51433(this.field_22793, var12, (this.listX + 8), ((arg1 + ((18 - 9) / 2)) + 1), -13927425, false);
        Objects.requireNonNull(this.field_22793);
        arg0.method_51433(this.field_22793, arg2, (this.listX + 20), ((arg1 + ((18 - 9) / 2)) + 1), -1644565, false);
        var var13 = indy.makeConcatWithConstants(arg3, arg4);
        Objects.requireNonNull(this.field_22793);
        arg0.method_51433(this.field_22793, var13, (this.listX + 172), ((arg1 + ((18 - 9) / 2)) + 1), -8748911, false);
        Objects.requireNonNull(this.field_22793);
        arg0.method_51433(this.field_22793, AmountFormat.signed(arg5), (this.listX + 252), ((arg1 + ((18 - 9) / 2)) + 1), Theme.color(arg5), false);
        return;
    }

    private void drawPaymentRow(class_332 arg0, int arg1, PaymentEvent arg2) {
        var var4 = SessionDetailScreen.TIME_FMT.format(Instant.ofEpochMilli(arg2.timestampMs()));
        if (!arg2.incoming()) goto L28;
        var stack0 = "IN ";
        goto L31;
    L28:
        stack0 = "OUT";
    L31:
        var var5 = stack0;
        if (!arg2.incoming()) goto L46;
        stack0 = "+";
        goto L49;
    L46:
        stack0 = "-";
    L49:
        var var6 = indy.makeConcatWithConstants(stack0, AmountFormat.pretty(arg2.amount()));
        if (!arg2.incoming()) goto L75;
        stack0 = -11870592;
        goto L78;
    L75:
        stack0 = -1096636;
    L78:
        int var7 = stack0;
        arg0.method_51433(this.field_22793, var4, (this.listX + 30), arg1, -11709599, false);
        arg0.method_51433(this.field_22793, var5, (this.listX + 80), arg1, var7, false);
        arg0.method_51433(this.field_22793, var6, (this.listX + 110), arg1, var7, false);
        return;
    }

    private void drawCloseButton(class_332 arg0, int arg1, int arg2) {
        this.closeW = 62;
        this.closeH = 14;
        this.closeX = (((this.px + 500) - this.closeW) - 8);
        this.closeY = (this.py + 5);
        if (arg1 < this.closeX) goto L88;
        if (arg1 >= (this.closeX + this.closeW)) goto L88;
        if (arg2 < this.closeY) goto L88;
        if (arg2 >= (this.closeY + this.closeH)) goto L88;
        var stack0 = 1;
        goto L89;
    L88:
        stack0 = 0;
    L89:
        int var4 = stack0;
        stack0 = arg0;
        var stack1 = this.closeX;
        var stack2 = this.closeY;
        var stack3 = (this.closeX + this.closeW);
        var stack4 = (this.closeY + this.closeH);
        if (var4 == 0) goto L129;
        var stack5 = -15000028;
        goto L131;
    L129:
        stack5 = -15329251;
    L131:
        stack0.method_25294(stack1, stack2, stack3, stack4, stack5);
        stack0 = this;
        stack1 = arg0;
        stack2 = this.closeX;
        stack3 = this.closeY;
        stack4 = (this.closeX + this.closeW);
        stack5 = (this.closeY + this.closeH);
        if (var4 == 0) goto L173;
        var stack6 = -13927425;
        goto L175;
    L173:
        stack6 = -14276046;
    L175:
        stack0.outline(stack1, stack2, stack3, stack4, stack5, stack6);
        int var5 = this.field_22793.method_1727("close");
        Objects.requireNonNull(this.field_22793);
        stack0 = arg0;
        stack1 = this.field_22793;
        stack2 = "close";
        stack3 = (this.closeX + ((this.closeW - var5) / 2));
        stack4 = ((this.closeY + ((this.closeH - 9) / 2)) + 1);
        if (var4 == 0) goto L247;
        stack5 = -13927425;
        goto L249;
    L247:
        stack5 = -1644565;
    L249:
        stack0.method_51433(stack1, stack2, stack3, stack4, stack5, false);
        return;
    }

    private void drawCloseInfo(class_332 arg0, int arg1) {
        var var3 = "click a player to expand - scroll to navigate";
        arg0.method_51433(this.field_22793, var3, (this.px + 14), arg1, -11709599, false);
        return;
    }

    private long totalActivity(Map.Entry arg0) {
        long var2 = 0L;
        var var4 = ((List) arg0.getValue()).iterator();
    L18:
        if (!var4.hasNext()) goto L51;
        var var5 = ((PaymentEvent) var4.next());
        var2 = (var2 + var5.amount());
        goto L18;
    L51:
        return var2;
    }

    private Map groupByPlayer(List arg0) {
        var var2 = new LinkedHashMap();
        var var3 = arg0.iterator();
    L15:
        if (!var3.hasNext()) goto L63;
        var var4 = ((PaymentEvent) var3.next());
        ((List) var2.computeIfAbsent(var4.player(), indy.apply())).add(var4);
        goto L15;
    L63:
        return var2;
    }

    private String formatDuration(long arg0) {
        long var3 = (arg0 / 1000L);
        long var5 = (var3 / 60L);
        long var7 = (var5 / 60L);
        if (Long.compare(var7, 0L) <= 0) goto L42;
        return indy.makeConcatWithConstants(var7, (var5 % 60L));
    L42:
        if (Long.compare(var5, 0L) <= 0) goto L62;
        return indy.makeConcatWithConstants(var5, (var3 % 60L));
    L62:
        return indy.makeConcatWithConstants(var3);
    }

    public boolean method_25402(class_11909 arg0, boolean arg1) {
        int var3 = Math.round((((float) arg0.comp_4798()) / this.uiScale));
        int var4 = Math.round((((float) arg0.comp_4799()) / this.uiScale));
        if (var3 < this.closeX) goto L79;
        if (var3 >= (this.closeX + this.closeW)) goto L79;
        if (var4 < this.closeY) goto L79;
        if (var4 >= (this.closeY + this.closeH)) goto L79;
        this.method_25419();
        return true;
    L79:
        if (var3 < this.listX) goto L250;
        if (var3 >= (this.listX + this.listW)) goto L250;
        if (var4 < this.listTop) goto L250;
        if (var4 >= this.listBot) goto L250;
        int var5 = 0;
    L121:
        if (var5 >= this.playerHitRects.size()) goto L250;
        var var6 = ((int[]) this.playerHitRects.get(var5));
        if (var3 < var6[0]) goto L244;
        if (var3 >= var6[2]) goto L244;
        if (var4 < var6[1]) goto L244;
        if (var4 >= var6[3]) goto L244;
        var var7 = ((String) this.playerHitNames.get(var5));
        if (!this.expanded.contains(var7)) goto L230;
        this.expanded.remove(var7);
        goto L242;
    L230:
        this.expanded.add(var7);
    L242:
        return true;
    L244:
        var5 += 1;
        goto L121;
    L250:
        return super.method_25402(arg0, arg1);
    }

    public boolean method_25401(double arg0, double arg1, double arg2, double arg3) {
        int var9 = 14;
        if (Double.compare(arg3, 0.0) >= 0) goto L29;
        this.scroll = Math.max(0, (this.scroll + var9));
        goto L44;
    L29:
        this.scroll = Math.max(0, (this.scroll - var9));
    L44:
        return true;
    }

    public boolean method_25404(class_11908 arg0) {
        if (arg0.comp_4795() != 256) goto L16;
        this.method_25419();
        return true;
    L16:
        return super.method_25404(arg0);
    }

    public void method_25419() {
        class_310.method_1551().method_29970(new TrackerScreen(GamblerPlusClient.CONFIG, GamblerPlusClient.STATS));
        return;
    }

    private void outline(class_332 arg0, int arg1, int arg2, int arg3, int arg4, int arg5) {
        arg0.method_25294(arg1, arg2, arg3, (arg2 + 1), arg5);
        arg0.method_25294(arg1, (arg4 - 1), arg3, arg4, arg5);
        arg0.method_25294(arg1, arg2, (arg1 + 1), arg4, arg5);
        arg0.method_25294((arg3 - 1), arg2, arg3, arg4, arg5);
        return;
    }

    private static List lambda$groupByPlayer$0(String arg0) {
        return new ArrayList();
    }

    static {
        SessionDetailScreen.TIME_FMT = DateTimeFormatter.ofPattern("HH:mm:ss").withZone(ZoneId.systemDefault());
        SessionDetailScreen.STAMP_FMT = DateTimeFormatter.ofPattern("MMM d HH:mm").withZone(ZoneId.systemDefault());
        return;
    }
}

Methods declared

public void <init>(java.util.function.Supplier, boolean)
protected void method_25426()
public boolean method_25421()
public void method_25394(net.minecraft.class_332, int, int, float)
private void drawPlayerRow(net.minecraft.class_332, int, java.lang.String, int, int, long, boolean, int, int)
private void drawPaymentRow(net.minecraft.class_332, int, dev.mishka.gamblerplus.client.PaymentEvent)
private void drawCloseButton(net.minecraft.class_332, int, int)
private void drawCloseInfo(net.minecraft.class_332, int)
private long totalActivity(java.util.Map$Entry)
private java.util.Map groupByPlayer(java.util.List)
private java.lang.String formatDuration(long)
public boolean method_25402(net.minecraft.class_11909, boolean)
public boolean method_25401(double, double, double, double)
public boolean method_25404(net.minecraft.class_11908)
public void method_25419()
private void outline(net.minecraft.class_332, int, int, int, int, int)
private static synthetic java.util.List lambda$groupByPlayer$0(java.lang.String)
static void <clinit>()

Fields

private static final int PANEL_W
private static final int PANEL_H
private static final int PLAYER_ROW_H
private static final int PAYMENT_ROW_H
private static final long ANIM_MS
private static final java.time.format.DateTimeFormatter TIME_FMT
private static final java.time.format.DateTimeFormatter STAMP_FMT
private final java.util.function.Supplier sessionSupplier
private final boolean live
private final java.util.Set expanded
private long openedAtMs
private int px
private int py
private int scroll
private int closeX
private int closeY
private int closeW
private int closeH
private int listTop
private int listBot
private int listX
private int listW
private final java.util.List playerHitRects
private final java.util.List playerHitNames
private float uiScale

Calls out to

dev.mishka.gamblerplus.client.AmountFormat.pretty(long) : java.lang.String
dev.mishka.gamblerplus.client.AmountFormat.signed(long) : java.lang.String
dev.mishka.gamblerplus.client.Config dev.mishka.gamblerplus.client.GamblerPlusClient.CONFIG
dev.mishka.gamblerplus.client.Stats dev.mishka.gamblerplus.client.GamblerPlusClient.STATS
dev.mishka.gamblerplus.client.PaymentEvent.amount() : long
dev.mishka.gamblerplus.client.PaymentEvent.incoming() : boolean
dev.mishka.gamblerplus.client.PaymentEvent.player() : java.lang.String
dev.mishka.gamblerplus.client.PaymentEvent.timestampMs() : long
dev.mishka.gamblerplus.client.Session.durationMs() : long
dev.mishka.gamblerplus.client.Session.endedAt() : long
dev.mishka.gamblerplus.client.Session.in() : long
dev.mishka.gamblerplus.client.Session.inCount() : int
dev.mishka.gamblerplus.client.Session.label() : java.lang.String
dev.mishka.gamblerplus.client.Session.net() : long
dev.mishka.gamblerplus.client.Session.out() : long
dev.mishka.gamblerplus.client.Session.outCount() : int
dev.mishka.gamblerplus.client.Session.payments() : java.util.List
dev.mishka.gamblerplus.client.Session.startedAt() : long
java.time.format.DateTimeFormatter dev.mishka.gamblerplus.client.SessionDetailScreen.STAMP_FMT
java.time.format.DateTimeFormatter dev.mishka.gamblerplus.client.SessionDetailScreen.TIME_FMT
int dev.mishka.gamblerplus.client.SessionDetailScreen.closeH
int dev.mishka.gamblerplus.client.SessionDetailScreen.closeW
int dev.mishka.gamblerplus.client.SessionDetailScreen.closeX
int dev.mishka.gamblerplus.client.SessionDetailScreen.closeY
dev.mishka.gamblerplus.client.SessionDetailScreen.drawCloseButton(net.minecraft.class_332, int, int)
dev.mishka.gamblerplus.client.SessionDetailScreen.drawCloseInfo(net.minecraft.class_332, int)
dev.mishka.gamblerplus.client.SessionDetailScreen.drawPaymentRow(net.minecraft.class_332, int, dev.mishka.gamblerplus.client.PaymentEvent)
dev.mishka.gamblerplus.client.SessionDetailScreen.drawPlayerRow(net.minecraft.class_332, int, java.lang.String, int, int, long, boolean, int, int)
java.util.Set dev.mishka.gamblerplus.client.SessionDetailScreen.expanded
int dev.mishka.gamblerplus.client.SessionDetailScreen.field_22789
int dev.mishka.gamblerplus.client.SessionDetailScreen.field_22790
net.minecraft.class_327 dev.mishka.gamblerplus.client.SessionDetailScreen.field_22793
dev.mishka.gamblerplus.client.SessionDetailScreen.formatDuration(long) : java.lang.String
dev.mishka.gamblerplus.client.SessionDetailScreen.groupByPlayer(java.util.List) : java.util.Map
dev.mishka.gamblerplus.client.SessionDetailScreen.lambda$groupByPlayer$0(java.lang.String) : java.util.List
int dev.mishka.gamblerplus.client.SessionDetailScreen.listBot
int dev.mishka.gamblerplus.client.SessionDetailScreen.listTop
int dev.mishka.gamblerplus.client.SessionDetailScreen.listW
int dev.mishka.gamblerplus.client.SessionDetailScreen.listX
boolean dev.mishka.gamblerplus.client.SessionDetailScreen.live
dev.mishka.gamblerplus.client.SessionDetailScreen.method_25419()
long dev.mishka.gamblerplus.client.SessionDetailScreen.openedAtMs
dev.mishka.gamblerplus.client.SessionDetailScreen.outline(net.minecraft.class_332, int, int, int, int, int)
java.util.List dev.mishka.gamblerplus.client.SessionDetailScreen.playerHitNames
java.util.List dev.mishka.gamblerplus.client.SessionDetailScreen.playerHitRects
int dev.mishka.gamblerplus.client.SessionDetailScreen.px
int dev.mishka.gamblerplus.client.SessionDetailScreen.py
int dev.mishka.gamblerplus.client.SessionDetailScreen.scroll
java.util.function.Supplier dev.mishka.gamblerplus.client.SessionDetailScreen.sessionSupplier
dev.mishka.gamblerplus.client.SessionDetailScreen.totalActivity(java.util.Map$Entry) : long
float dev.mishka.gamblerplus.client.SessionDetailScreen.uiScale
dev.mishka.gamblerplus.client.Theme.color(long) : int
dev.mishka.gamblerplus.client.Theme.easeOutCubic(float) : float
dev.mishka.gamblerplus.client.TrackerScreen.<init>(dev.mishka.gamblerplus.client.Config, dev.mishka.gamblerplus.client.Stats)
java.lang.Math.max(int, int) : int
java.lang.Math.min(float, float) : float
java.lang.Math.round(float) : int
java.lang.System.currentTimeMillis() : long
java.lang.invoke.LambdaMetafactory.metafactory(java.lang.invoke.MethodHandles$Lookup, java.lang.String, java.lang.invoke.MethodType, java.lang.invoke.MethodType, java.lang.invoke.MethodHandle, java.lang.invoke.MethodType) : java.lang.invoke.CallSite
java.lang.invoke.StringConcatFactory.makeConcatWithConstants(java.lang.invoke.MethodHandles$Lookup, java.lang.String, java.lang.invoke.MethodType, java.lang.String, java.lang.Object[]) : java.lang.invoke.CallSite
java.time.Instant.ofEpochMilli(long) : java.time.Instant
java.time.ZoneId.systemDefault() : java.time.ZoneId
java.time.format.DateTimeFormatter.format(java.time.temporal.TemporalAccessor) : java.lang.String
java.time.format.DateTimeFormatter.ofPattern(java.lang.String) : java.time.format.DateTimeFormatter
java.time.format.DateTimeFormatter.withZone(java.time.ZoneId) : java.time.format.DateTimeFormatter
java.util.ArrayList.<init>()
java.util.ArrayList.<init>(java.util.Collection)
java.util.Comparator.comparingLong(java.util.function.ToLongFunction) : java.util.Comparator
java.util.Comparator.reversed() : java.util.Comparator
java.util.HashSet.<init>()
java.util.Iterator.hasNext() : boolean
java.util.Iterator.next() : java.lang.Object
java.util.LinkedHashMap.<init>()
java.util.LinkedHashMap.computeIfAbsent(java.lang.Object, java.util.function.Function) : java.lang.Object
java.util.List.add(java.lang.Object) : boolean
java.util.List.clear()
java.util.List.get(int) : java.lang.Object
java.util.List.iterator() : java.util.Iterator
java.util.List.size() : int
java.util.List.sort(java.util.Comparator)
java.util.Map.entrySet() : java.util.Set
java.util.Map.isEmpty() : boolean
java.util.Map$Entry.getKey() : java.lang.Object
java.util.Map$Entry.getValue() : java.lang.Object
java.util.Objects.requireNonNull(java.lang.Object) : java.lang.Object
java.util.Set.add(java.lang.Object) : boolean
java.util.Set.contains(java.lang.Object) : boolean
java.util.Set.remove(java.lang.Object) : boolean
java.util.function.Supplier.get() : java.lang.Object
net.minecraft.class_11908.comp_4795() : int
net.minecraft.class_11909.comp_4798() : double
net.minecraft.class_11909.comp_4799() : double
net.minecraft.class_2561.method_43470(java.lang.String) : net.minecraft.class_5250
net.minecraft.class_327 net.minecraft.class_310.field_1772
net.minecraft.class_310.method_1551() : net.minecraft.class_310
net.minecraft.class_310.method_29970(net.minecraft.class_437)
net.minecraft.class_327.method_1727(java.lang.String) : int
net.minecraft.class_332.method_25294(int, int, int, int, int)
net.minecraft.class_332.method_44379(int, int, int, int)
net.minecraft.class_332.method_44380()
net.minecraft.class_332.method_51433(net.minecraft.class_327, java.lang.String, int, int, int, boolean)
net.minecraft.class_332.method_51448() : org.joml.Matrix3x2fStack
net.minecraft.class_437.<init>(net.minecraft.class_310, net.minecraft.class_327, net.minecraft.class_2561)
net.minecraft.class_437.method_25402(net.minecraft.class_11909, boolean) : boolean
net.minecraft.class_437.method_25404(net.minecraft.class_11908) : boolean
org.joml.Matrix3x2fStack.popMatrix() : org.joml.Matrix3x2fStack
org.joml.Matrix3x2fStack.pushMatrix() : org.joml.Matrix3x2fStack
org.joml.Matrix3x2fStack.scale(float, float) : org.joml.Matrix3x2f
org.joml.Matrix3x2fStack.translate(float, float) : org.joml.Matrix3x2f

Text compiled into the class

Session details
no session
live
HH:mm
 - 
  -  
net
in
out
W / L
PLAYER
RECORD
NET
no payments recorded in this session
v
>
IN 
OUT
+
-

close
click a player to expand - scroll to navigate
h m
m s
s
HH:mm:ss
MMM d HH:mm