Skip to content

Commit

Permalink
v3.9 dev. progress
Browse files Browse the repository at this point in the history
Pinning general stats to the HUD.
Due to technical limitations however, those cannot update in real-time for now.
  • Loading branch information
TheCSDev committed Feb 17, 2024
1 parent cb628a5 commit f0fd587
Show file tree
Hide file tree
Showing 6 changed files with 282 additions and 0 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,80 @@
package io.github.thecsdev.betterstats.client.gui.screen.hud.entry;

import static io.github.thecsdev.tcdcommons.api.util.TextUtils.literal;
import static io.github.thecsdev.tcdcommons.api.util.TextUtils.translatable;

import java.util.Objects;

import io.github.thecsdev.betterstats.api.client.gui.stats.widget.CustomStatElement;
import io.github.thecsdev.betterstats.api.client.util.io.LocalPlayerStatsProvider;
import io.github.thecsdev.betterstats.api.util.io.IStatsProvider;
import io.github.thecsdev.betterstats.api.util.stats.SUGeneralStat;
import io.github.thecsdev.tcdcommons.api.client.gui.TElement;
import io.github.thecsdev.tcdcommons.api.client.gui.panel.TPanelElement;
import io.github.thecsdev.tcdcommons.api.client.gui.screen.TWidgetHudScreen;
import io.github.thecsdev.tcdcommons.api.client.gui.util.TDrawContext;
import net.minecraft.stat.StatType;
import net.minecraft.stat.Stats;
import net.minecraft.util.Identifier;

public class StatsHudGeneralEntry extends TWidgetHudScreen.WidgetEntry<TElement>
{
// ==================================================
static final int WIDTH = 100;
// --------------------------------------------------
protected IStatsProvider statsProvider;
protected final Identifier generalStat;
protected StatType<Identifier> mode = Stats.CUSTOM;
// ==================================================
public StatsHudGeneralEntry(SUGeneralStat stat) throws NullPointerException {
this(stat.getStatsProvider(), stat.getGeneralStat().getValue());
}
public StatsHudGeneralEntry(IStatsProvider statsProvider, Identifier generalStat) throws NullPointerException
{
super(0.5, 0.25);
this.statsProvider = Objects.requireNonNull(statsProvider);
this.generalStat = Objects.requireNonNull(generalStat);
}
// ==================================================
public final @Override TElement createWidget()
{
//ensure local stat providers are up-to-date
if(this.statsProvider instanceof LocalPlayerStatsProvider)
this.statsProvider = Objects.requireNonNull(LocalPlayerStatsProvider.getInstance());

//create the element, and add the context menu to it
if(this.mode == null) this.mode = Stats.CUSTOM;
final var el = new Element();
el.eContextMenu.register((__, cMenu) ->
{
cMenu.addButton(translatable("selectWorld.delete"), ___ -> removeEntry());
});

//return the new element
return el;
}
// ==================================================
private final class Element extends TElement
{
public Element()
{
//init super
super(0, 0, WIDTH, CustomStatElement.HEIGHT);

//obtain values and texts
int rightVar = statsProvider.getStatValue(mode, generalStat);
var left = (mode == Stats.CUSTOM) ?
SUGeneralStat.getGeneralStatText(mode.getOrCreateStat(generalStat)) :
literal("<Unsupported stat>");
var right = literal(mode.getOrCreateStat(generalStat).format(rightVar));

//update width
this.setSize(this.width + getTextRenderer().getWidth(left), this.height);

//add custom stat element child
addChild(new CustomStatElement(0, 0, this.width, left, right));
}
public @Override void render(TDrawContext pencil) { pencil.drawTFill(TPanelElement.COLOR_BACKGROUND); }
}
// ==================================================
}
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,8 @@
import io.github.thecsdev.betterstats.api.client.gui.util.StatsTabUtils;
import io.github.thecsdev.betterstats.api.util.enumerations.FilterSortCustomsBy;
import io.github.thecsdev.betterstats.api.util.stats.SUGeneralStat;
import io.github.thecsdev.betterstats.client.gui.screen.hud.BetterStatsHudScreen;
import io.github.thecsdev.betterstats.client.gui.screen.hud.entry.StatsHudGeneralEntry;
import io.github.thecsdev.tcdcommons.api.client.gui.other.TFillColorElement;
import io.github.thecsdev.tcdcommons.api.client.gui.other.TLabelElement;
import io.github.thecsdev.tcdcommons.api.client.gui.panel.TPanelElement;
Expand Down Expand Up @@ -92,6 +94,18 @@
final var statWidget = new GeneralStatWidget(nextX, nextY, nextW, stat);
panel.addChild(statWidget, true);
nextY += statWidget.getHeight() + GAP;

statWidget.eContextMenu.register((__, cMenu) ->
{
cMenu.addButton(translatable("betterstats.client.gui.screen.hud.betterstatshudscreen.pin_stat"), ___ ->
{
final var hud = BetterStatsHudScreen.getInstance();
hud.setParentScreen(MC_CLIENT.currentScreen);
hud.addEntry(new StatsHudGeneralEntry(statWidget.getStat()));
MC_CLIENT.setScreen(hud.getAsScreen());
});
cMenu.addButton(translatable("mco.selectServer.close"), ___ -> {});
});
}
}
else
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,80 @@
package io.github.thecsdev.betterstats.client.gui.screen.hud.entry;

import static io.github.thecsdev.tcdcommons.api.util.TextUtils.literal;
import static io.github.thecsdev.tcdcommons.api.util.TextUtils.translatable;

import java.util.Objects;

import io.github.thecsdev.betterstats.api.client.gui.stats.widget.CustomStatElement;
import io.github.thecsdev.betterstats.api.client.util.io.LocalPlayerStatsProvider;
import io.github.thecsdev.betterstats.api.util.io.IStatsProvider;
import io.github.thecsdev.betterstats.api.util.stats.SUGeneralStat;
import io.github.thecsdev.tcdcommons.api.client.gui.TElement;
import io.github.thecsdev.tcdcommons.api.client.gui.panel.TPanelElement;
import io.github.thecsdev.tcdcommons.api.client.gui.screen.TWidgetHudScreen;
import io.github.thecsdev.tcdcommons.api.client.gui.util.TDrawContext;
import net.minecraft.stat.StatType;
import net.minecraft.stat.Stats;
import net.minecraft.util.Identifier;

public class StatsHudGeneralEntry extends TWidgetHudScreen.WidgetEntry<TElement>
{
// ==================================================
static final int WIDTH = 100;
// --------------------------------------------------
protected IStatsProvider statsProvider;
protected final Identifier generalStat;
protected StatType<Identifier> mode = Stats.CUSTOM;
// ==================================================
public StatsHudGeneralEntry(SUGeneralStat stat) throws NullPointerException {
this(stat.getStatsProvider(), stat.getGeneralStat().getValue());
}
public StatsHudGeneralEntry(IStatsProvider statsProvider, Identifier generalStat) throws NullPointerException
{
super(0.5, 0.25);
this.statsProvider = Objects.requireNonNull(statsProvider);
this.generalStat = Objects.requireNonNull(generalStat);
}
// ==================================================
public final @Override TElement createWidget()
{
//ensure local stat providers are up-to-date
if(this.statsProvider instanceof LocalPlayerStatsProvider)
this.statsProvider = Objects.requireNonNull(LocalPlayerStatsProvider.getInstance());

//create the element, and add the context menu to it
if(this.mode == null) this.mode = Stats.CUSTOM;
final var el = new Element();
el.eContextMenu.register((__, cMenu) ->
{
cMenu.addButton(translatable("selectWorld.delete"), ___ -> removeEntry());
});

//return the new element
return el;
}
// ==================================================
private final class Element extends TElement
{
public Element()
{
//init super
super(0, 0, WIDTH, CustomStatElement.HEIGHT);

//obtain values and texts
int rightVar = statsProvider.getStatValue(mode, generalStat);
var left = (mode == Stats.CUSTOM) ?
SUGeneralStat.getGeneralStatText(mode.getOrCreateStat(generalStat)) :
literal("<Unsupported stat>");
var right = literal(mode.getOrCreateStat(generalStat).format(rightVar));

//update width
this.setSize(this.width + getTextRenderer().getWidth(left), this.height);

//add custom stat element child
addChild(new CustomStatElement(0, 0, this.width, left, right));
}
public @Override void render(TDrawContext pencil) { pencil.drawTFill(TPanelElement.COLOR_BACKGROUND); }
}
// ==================================================
}
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,8 @@
import io.github.thecsdev.betterstats.api.client.gui.util.StatsTabUtils;
import io.github.thecsdev.betterstats.api.util.enumerations.FilterSortCustomsBy;
import io.github.thecsdev.betterstats.api.util.stats.SUGeneralStat;
import io.github.thecsdev.betterstats.client.gui.screen.hud.BetterStatsHudScreen;
import io.github.thecsdev.betterstats.client.gui.screen.hud.entry.StatsHudGeneralEntry;
import io.github.thecsdev.tcdcommons.api.client.gui.other.TFillColorElement;
import io.github.thecsdev.tcdcommons.api.client.gui.other.TLabelElement;
import io.github.thecsdev.tcdcommons.api.client.gui.panel.TPanelElement;
Expand Down Expand Up @@ -92,6 +94,18 @@
final var statWidget = new GeneralStatWidget(nextX, nextY, nextW, stat);
panel.addChild(statWidget, true);
nextY += statWidget.getHeight() + GAP;

statWidget.eContextMenu.register((__, cMenu) ->
{
cMenu.addButton(translatable("betterstats.client.gui.screen.hud.betterstatshudscreen.pin_stat"), ___ ->
{
final var hud = BetterStatsHudScreen.getInstance();
hud.setParentScreen(MC_CLIENT.currentScreen);
hud.addEntry(new StatsHudGeneralEntry(statWidget.getStat()));
MC_CLIENT.setScreen(hud.getAsScreen());
});
cMenu.addButton(translatable("mco.selectServer.close"), ___ -> {});
});
}
}
else
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,80 @@
package io.github.thecsdev.betterstats.client.gui.screen.hud.entry;

import static io.github.thecsdev.tcdcommons.api.util.TextUtils.literal;
import static io.github.thecsdev.tcdcommons.api.util.TextUtils.translatable;

import java.util.Objects;

import io.github.thecsdev.betterstats.api.client.gui.stats.widget.CustomStatElement;
import io.github.thecsdev.betterstats.api.client.util.io.LocalPlayerStatsProvider;
import io.github.thecsdev.betterstats.api.util.io.IStatsProvider;
import io.github.thecsdev.betterstats.api.util.stats.SUGeneralStat;
import io.github.thecsdev.tcdcommons.api.client.gui.TElement;
import io.github.thecsdev.tcdcommons.api.client.gui.panel.TPanelElement;
import io.github.thecsdev.tcdcommons.api.client.gui.screen.TWidgetHudScreen;
import io.github.thecsdev.tcdcommons.api.client.gui.util.TDrawContext;
import net.minecraft.stat.StatType;
import net.minecraft.stat.Stats;
import net.minecraft.util.Identifier;

public class StatsHudGeneralEntry extends TWidgetHudScreen.WidgetEntry<TElement>
{
// ==================================================
static final int WIDTH = 100;
// --------------------------------------------------
protected IStatsProvider statsProvider;
protected final Identifier generalStat;
protected StatType<Identifier> mode = Stats.CUSTOM;
// ==================================================
public StatsHudGeneralEntry(SUGeneralStat stat) throws NullPointerException {
this(stat.getStatsProvider(), stat.getGeneralStat().getValue());
}
public StatsHudGeneralEntry(IStatsProvider statsProvider, Identifier generalStat) throws NullPointerException
{
super(0.5, 0.25);
this.statsProvider = Objects.requireNonNull(statsProvider);
this.generalStat = Objects.requireNonNull(generalStat);
}
// ==================================================
public final @Override TElement createWidget()
{
//ensure local stat providers are up-to-date
if(this.statsProvider instanceof LocalPlayerStatsProvider)
this.statsProvider = Objects.requireNonNull(LocalPlayerStatsProvider.getInstance());

//create the element, and add the context menu to it
if(this.mode == null) this.mode = Stats.CUSTOM;
final var el = new Element();
el.eContextMenu.register((__, cMenu) ->
{
cMenu.addButton(translatable("selectWorld.delete"), ___ -> removeEntry());
});

//return the new element
return el;
}
// ==================================================
private final class Element extends TElement
{
public Element()
{
//init super
super(0, 0, WIDTH, CustomStatElement.HEIGHT);

//obtain values and texts
int rightVar = statsProvider.getStatValue(mode, generalStat);
var left = (mode == Stats.CUSTOM) ?
SUGeneralStat.getGeneralStatText(mode.getOrCreateStat(generalStat)) :
literal("<Unsupported stat>");
var right = literal(mode.getOrCreateStat(generalStat).format(rightVar));

//update width
this.setSize(this.width + getTextRenderer().getWidth(left), this.height);

//add custom stat element child
addChild(new CustomStatElement(0, 0, this.width, left, right));
}
public @Override void render(TDrawContext pencil) { pencil.drawTFill(TPanelElement.COLOR_BACKGROUND); }
}
// ==================================================
}
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,8 @@
import io.github.thecsdev.betterstats.api.client.gui.util.StatsTabUtils;
import io.github.thecsdev.betterstats.api.util.enumerations.FilterSortCustomsBy;
import io.github.thecsdev.betterstats.api.util.stats.SUGeneralStat;
import io.github.thecsdev.betterstats.client.gui.screen.hud.BetterStatsHudScreen;
import io.github.thecsdev.betterstats.client.gui.screen.hud.entry.StatsHudGeneralEntry;
import io.github.thecsdev.tcdcommons.api.client.gui.other.TFillColorElement;
import io.github.thecsdev.tcdcommons.api.client.gui.other.TLabelElement;
import io.github.thecsdev.tcdcommons.api.client.gui.panel.TPanelElement;
Expand Down Expand Up @@ -92,6 +94,18 @@
final var statWidget = new GeneralStatWidget(nextX, nextY, nextW, stat);
panel.addChild(statWidget, true);
nextY += statWidget.getHeight() + GAP;

statWidget.eContextMenu.register((__, cMenu) ->
{
cMenu.addButton(translatable("betterstats.client.gui.screen.hud.betterstatshudscreen.pin_stat"), ___ ->
{
final var hud = BetterStatsHudScreen.getInstance();
hud.setParentScreen(MC_CLIENT.currentScreen);
hud.addEntry(new StatsHudGeneralEntry(statWidget.getStat()));
MC_CLIENT.setScreen(hud.getAsScreen());
});
cMenu.addButton(translatable("mco.selectServer.close"), ___ -> {});
});
}
}
else
Expand Down

0 comments on commit f0fd587

Please sign in to comment.