Skip to content

Commit

Permalink
v3.9.1 dev. progress
Browse files Browse the repository at this point in the history
HUD stats for items and mobs will now change their size to fit the stat name text.
  • Loading branch information
TheCSDev committed Feb 28, 2024
1 parent fb96c20 commit 23d65cd
Show file tree
Hide file tree
Showing 9 changed files with 156 additions and 114 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
import static io.github.thecsdev.tcdcommons.api.util.TextUtils.translatable;

import java.util.Objects;
import java.util.Optional;

import org.jetbrains.annotations.Nullable;

Expand All @@ -27,7 +28,7 @@
public final class StatsHudItemEntry extends TWidgetHudScreen.WidgetEntry<TElement>
{
// ==================================================
static final int WIDTH = 150;
static final int WIDTH = 100;
// --------------------------------------------------
protected IStatsProvider statsProvider;
protected final Item item;
Expand Down Expand Up @@ -76,35 +77,44 @@ public StatsHudItemEntry(IStatsProvider statsProvider, Item item) throws NullPoi
});
return el;
}
// --------------------------------------------------
private final CustomStatElement createCustomStatElement(SUItemStat stat)
{
//mode info
if(this.mode == null) this.mode = Stats.USED;
final var isItem = (this.mode.getRegistry() == Registries.ITEM);
final var isBlock = (this.mode.getRegistry() == Registries.BLOCK);

//collect info
final Object valObj = (isBlock) ? this.block : (isItem ? this.item : null);
@SuppressWarnings("unchecked")
final var val = (valObj != null) ?
this.statsProvider.getStatValue((StatType<Object>)this.mode, valObj) :
-1; //-1 indicating an error, and this generally shouldn't happen

//create and return
@Nullable Text left = translatable(this.mode.getTranslationKey());
@Nullable Text right = literal(Integer.toString(val));
return new CustomStatElement(ItemStatWidget.SIZE, 0, WIDTH - ItemStatWidget.SIZE, left, right);
}
// ==================================================
private final class Element extends TElement
{
public Element()
{
//super
super(0, 0, WIDTH, CustomStatElement.HEIGHT);

//item stat widget
final var stat = new SUItemStat(StatsHudItemEntry.this.statsProvider, StatsHudItemEntry.this.item);
addChild(new ItemStatWidget(0, 0, stat), true);
addChild(createCustomStatElement(stat), true);

//custom stat element
{
//mode info
if(StatsHudItemEntry.this.mode == null) StatsHudItemEntry.this.mode = Stats.USED;
final var isItem = (StatsHudItemEntry.this.mode.getRegistry() == Registries.ITEM);
final var isBlock = (StatsHudItemEntry.this.mode.getRegistry() == Registries.BLOCK);

//collect info
final Object valObj = (isBlock) ? StatsHudItemEntry.this.block : (isItem ? StatsHudItemEntry.this.item : null);
@SuppressWarnings("unchecked")
final var val = (valObj != null) ?
stat.getStatsProvider().getStatValue((StatType<Object>)StatsHudItemEntry.this.mode, valObj) :
-1; //-1 indicating an error, and this generally shouldn't happen

//create texts
final Text left = Optional.ofNullable(StatsHudItemEntry.this.mode.getName())
.orElse(literal(Objects.toString(Registries.STAT_TYPE.getId(mode))));
final Text right = literal(Integer.toString(val));

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

//create custom stat element
final var cse = new CustomStatElement(ItemStatWidget.SIZE, 0, this.width - ItemStatWidget.SIZE, left, right);
addChild(cse, true);
}
}
public @Override void render(TDrawContext pencil) { pencil.drawTFill(TPanelElement.COLOR_BACKGROUND); }
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,10 +6,7 @@

import java.util.Objects;

import org.jetbrains.annotations.Nullable;

import io.github.thecsdev.betterstats.api.client.gui.stats.widget.CustomStatElement;
import io.github.thecsdev.betterstats.api.client.gui.stats.widget.ItemStatWidget;
import io.github.thecsdev.betterstats.api.client.gui.stats.widget.MobStatWidget;
import io.github.thecsdev.betterstats.api.client.util.io.LocalPlayerStatsProvider;
import io.github.thecsdev.betterstats.api.util.io.IStatsProvider;
Expand Down Expand Up @@ -71,30 +68,37 @@ public StatsHudMobEntry(IStatsProvider statsProvider, EntityType<?> entityType)
});
return el;
}
// --------------------------------------------------
private final CustomStatElement createCustomStatElement(SUMobStat stat)
{
//prepare variables
if(this.mode == null) this.mode = Stats.KILLED;
@Nullable Text left = getEntityStatTypePhrase(this.mode);
@Nullable Text right = literal(Integer.toString(this.statsProvider.getStatValue(this.mode, this.entityType)));

//create and return
return new CustomStatElement(ItemStatWidget.SIZE, 0, WIDTH - ItemStatWidget.SIZE, left, right);
}
// ==================================================
private final class Element extends TElement
{
public Element()
{
//super
super(0, 0, WIDTH, CustomStatElement.HEIGHT);

//mob stat widget
final var stat = new SUMobStat(StatsHudMobEntry.this.statsProvider, StatsHudMobEntry.this.entityType);
final var ms = new MobStatWidget(0, 0, stat);
ms.setSize(this.height, this.height);

addChild(ms, true);
addChild(createCustomStatElement(stat), true);

//custom stat element
{
//prepare variables
if(StatsHudMobEntry.this.mode == null) StatsHudMobEntry.this.mode = Stats.KILLED;
final Text left = getEntityStatTypePhrase(StatsHudMobEntry.this.mode);
final Text right = literal(Integer.toString(stat.getStatsProvider().getStatValue(
StatsHudMobEntry.this.mode,
StatsHudMobEntry.this.entityType
)));

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

//create and return
final var cse = new CustomStatElement(ms.getWidth(), 0, this.width - ms.getWidth(), left, right);
addChild(cse, true);
}
}
public @Override void render(TDrawContext pencil) { pencil.drawTFill(TPanelElement.COLOR_BACKGROUND); }
}
Expand Down
Binary file not shown.
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
import static io.github.thecsdev.tcdcommons.api.util.TextUtils.translatable;

import java.util.Objects;
import java.util.Optional;

import org.jetbrains.annotations.Nullable;

Expand All @@ -27,7 +28,7 @@
public final class StatsHudItemEntry extends TWidgetHudScreen.WidgetEntry<TElement>
{
// ==================================================
static final int WIDTH = 150;
static final int WIDTH = 100;
// --------------------------------------------------
protected IStatsProvider statsProvider;
protected final Item item;
Expand Down Expand Up @@ -76,35 +77,44 @@ public StatsHudItemEntry(IStatsProvider statsProvider, Item item) throws NullPoi
});
return el;
}
// --------------------------------------------------
private final CustomStatElement createCustomStatElement(SUItemStat stat)
{
//mode info
if(this.mode == null) this.mode = Stats.USED;
final var isItem = (this.mode.getRegistry() == Registries.ITEM);
final var isBlock = (this.mode.getRegistry() == Registries.BLOCK);

//collect info
final Object valObj = (isBlock) ? this.block : (isItem ? this.item : null);
@SuppressWarnings("unchecked")
final var val = (valObj != null) ?
this.statsProvider.getStatValue((StatType<Object>)this.mode, valObj) :
-1; //-1 indicating an error, and this generally shouldn't happen

//create and return
@Nullable Text left = this.mode.getName();
@Nullable Text right = literal(Integer.toString(val));
return new CustomStatElement(ItemStatWidget.SIZE, 0, WIDTH - ItemStatWidget.SIZE, left, right);
}
// ==================================================
private final class Element extends TElement
{
public Element()
{
//super
super(0, 0, WIDTH, CustomStatElement.HEIGHT);

//item stat widget
final var stat = new SUItemStat(StatsHudItemEntry.this.statsProvider, StatsHudItemEntry.this.item);
addChild(new ItemStatWidget(0, 0, stat), true);
addChild(createCustomStatElement(stat), true);

//custom stat element
{
//mode info
if(StatsHudItemEntry.this.mode == null) StatsHudItemEntry.this.mode = Stats.USED;
final var isItem = (StatsHudItemEntry.this.mode.getRegistry() == Registries.ITEM);
final var isBlock = (StatsHudItemEntry.this.mode.getRegistry() == Registries.BLOCK);

//collect info
final Object valObj = (isBlock) ? StatsHudItemEntry.this.block : (isItem ? StatsHudItemEntry.this.item : null);
@SuppressWarnings("unchecked")
final var val = (valObj != null) ?
stat.getStatsProvider().getStatValue((StatType<Object>)StatsHudItemEntry.this.mode, valObj) :
-1; //-1 indicating an error, and this generally shouldn't happen

//create texts
final Text left = Optional.ofNullable(StatsHudItemEntry.this.mode.getName())
.orElse(literal(Objects.toString(Registries.STAT_TYPE.getId(mode))));
final Text right = literal(Integer.toString(val));

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

//create custom stat element
final var cse = new CustomStatElement(ItemStatWidget.SIZE, 0, this.width - ItemStatWidget.SIZE, left, right);
addChild(cse, true);
}
}
public @Override void render(TDrawContext pencil) { pencil.drawTFill(TPanelElement.COLOR_BACKGROUND); }
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,10 +6,7 @@

import java.util.Objects;

import org.jetbrains.annotations.Nullable;

import io.github.thecsdev.betterstats.api.client.gui.stats.widget.CustomStatElement;
import io.github.thecsdev.betterstats.api.client.gui.stats.widget.ItemStatWidget;
import io.github.thecsdev.betterstats.api.client.gui.stats.widget.MobStatWidget;
import io.github.thecsdev.betterstats.api.client.util.io.LocalPlayerStatsProvider;
import io.github.thecsdev.betterstats.api.util.io.IStatsProvider;
Expand Down Expand Up @@ -71,30 +68,37 @@ public StatsHudMobEntry(IStatsProvider statsProvider, EntityType<?> entityType)
});
return el;
}
// --------------------------------------------------
private final CustomStatElement createCustomStatElement(SUMobStat stat)
{
//prepare variables
if(this.mode == null) this.mode = Stats.KILLED;
@Nullable Text left = getEntityStatTypePhrase(this.mode);
@Nullable Text right = literal(Integer.toString(this.statsProvider.getStatValue(this.mode, this.entityType)));

//create and return
return new CustomStatElement(ItemStatWidget.SIZE, 0, WIDTH - ItemStatWidget.SIZE, left, right);
}
// ==================================================
private final class Element extends TElement
{
public Element()
{
//super
super(0, 0, WIDTH, CustomStatElement.HEIGHT);

//mob stat widget
final var stat = new SUMobStat(StatsHudMobEntry.this.statsProvider, StatsHudMobEntry.this.entityType);
final var ms = new MobStatWidget(0, 0, stat);
ms.setSize(this.height, this.height);

addChild(ms, true);
addChild(createCustomStatElement(stat), true);

//custom stat element
{
//prepare variables
if(StatsHudMobEntry.this.mode == null) StatsHudMobEntry.this.mode = Stats.KILLED;
final Text left = getEntityStatTypePhrase(StatsHudMobEntry.this.mode);
final Text right = literal(Integer.toString(stat.getStatsProvider().getStatValue(
StatsHudMobEntry.this.mode,
StatsHudMobEntry.this.entityType
)));

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

//create and return
final var cse = new CustomStatElement(ms.getWidth(), 0, this.width - ms.getWidth(), left, right);
addChild(cse, true);
}
}
public @Override void render(TDrawContext pencil) { pencil.drawTFill(TPanelElement.COLOR_BACKGROUND); }
}
Expand Down
Binary file not shown.
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
import static io.github.thecsdev.tcdcommons.api.util.TextUtils.translatable;

import java.util.Objects;
import java.util.Optional;

import org.jetbrains.annotations.Nullable;

Expand All @@ -27,7 +28,7 @@
public final class StatsHudItemEntry extends TWidgetHudScreen.WidgetEntry<TElement>
{
// ==================================================
static final int WIDTH = 150;
static final int WIDTH = 100;
// --------------------------------------------------
protected IStatsProvider statsProvider;
protected final Item item;
Expand Down Expand Up @@ -76,35 +77,44 @@ public StatsHudItemEntry(IStatsProvider statsProvider, Item item) throws NullPoi
});
return el;
}
// --------------------------------------------------
private final CustomStatElement createCustomStatElement(SUItemStat stat)
{
//mode info
if(this.mode == null) this.mode = Stats.USED;
final var isItem = (this.mode.getRegistry() == Registries.ITEM);
final var isBlock = (this.mode.getRegistry() == Registries.BLOCK);

//collect info
final Object valObj = (isBlock) ? this.block : (isItem ? this.item : null);
@SuppressWarnings("unchecked")
final var val = (valObj != null) ?
this.statsProvider.getStatValue((StatType<Object>)this.mode, valObj) :
-1; //-1 indicating an error, and this generally shouldn't happen

//create and return
@Nullable Text left = this.mode.getName();
@Nullable Text right = literal(Integer.toString(val));
return new CustomStatElement(ItemStatWidget.SIZE, 0, WIDTH - ItemStatWidget.SIZE, left, right);
}
// ==================================================
private final class Element extends TElement
{
public Element()
{
//super
super(0, 0, WIDTH, CustomStatElement.HEIGHT);

//item stat widget
final var stat = new SUItemStat(StatsHudItemEntry.this.statsProvider, StatsHudItemEntry.this.item);
addChild(new ItemStatWidget(0, 0, stat), true);
addChild(createCustomStatElement(stat), true);

//custom stat element
{
//mode info
if(StatsHudItemEntry.this.mode == null) StatsHudItemEntry.this.mode = Stats.USED;
final var isItem = (StatsHudItemEntry.this.mode.getRegistry() == Registries.ITEM);
final var isBlock = (StatsHudItemEntry.this.mode.getRegistry() == Registries.BLOCK);

//collect info
final Object valObj = (isBlock) ? StatsHudItemEntry.this.block : (isItem ? StatsHudItemEntry.this.item : null);
@SuppressWarnings("unchecked")
final var val = (valObj != null) ?
stat.getStatsProvider().getStatValue((StatType<Object>)StatsHudItemEntry.this.mode, valObj) :
-1; //-1 indicating an error, and this generally shouldn't happen

//create texts
final Text left = Optional.ofNullable(StatsHudItemEntry.this.mode.getName())
.orElse(literal(Objects.toString(Registries.STAT_TYPE.getId(mode))));
final Text right = literal(Integer.toString(val));

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

//create custom stat element
final var cse = new CustomStatElement(ItemStatWidget.SIZE, 0, this.width - ItemStatWidget.SIZE, left, right);
addChild(cse, true);
}
}
public @Override void render(TDrawContext pencil) { pencil.drawTFill(TPanelElement.COLOR_BACKGROUND); }
}
Expand Down
Loading

0 comments on commit 23d65cd

Please sign in to comment.