Added heart unicode symbol for Unit.HEART, tried and abandoned darker time-units, added screenshot for release v1.5

This commit is contained in:
Artemis-the-gr8 2022-07-05 17:05:17 +02:00
parent 52ad16f40b
commit e4a5aa69fc
5 changed files with 84 additions and 28 deletions

View File

@ -187,6 +187,13 @@ public class ConfigHandler {
return config.getString("your-server-name", "this server");
}
/** Returns an integer between 0 and 100 that represents how much lighter a hoverColor should be.
So 20 would mean 20% lighter.
<p>Default: 20</p>*/
public int getHoverTextAmountLighter() {
return config.getInt("hover-text-amount-lighter", 20);
}
/** Returns a String that represents either a Chat Color, hex color code, or a Style. Default values are:
<p>Style: "none"</p>
<p>Color Top: "green"</p>

View File

@ -3,6 +3,7 @@ package com.gmail.artemis.the.gr8.playerstats.msg;
import com.gmail.artemis.the.gr8.playerstats.config.ConfigHandler;
import com.gmail.artemis.the.gr8.playerstats.enums.PluginColor;
import com.gmail.artemis.the.gr8.playerstats.enums.Target;
import com.gmail.artemis.the.gr8.playerstats.enums.Unit;
import net.kyori.adventure.text.Component;
import net.kyori.adventure.text.TextComponent;
import net.kyori.adventure.text.TranslatableComponent;
@ -158,18 +159,30 @@ public class ComponentFactory {
.args(subStat));
}
public TextComponent.Builder statNumberBuilder(String prettyNumber, Target selection) {
return getComponentBuilder(prettyNumber,
public TextComponent statNumberComponent(String prettyNumber, Target selection) {
return getComponent(prettyNumber,
getColorFromString(config.getStatNumberDecoration(selection, false)),
getStyleFromString(config.getStatNumberDecoration(selection, true)));
}
public TextComponent damageNumberHoverComponent(String mainNumber, String hoverNumber, TextComponent heart, Target selection) {
return statNumberHoverComponent(mainNumber, hoverNumber, null, null, heart, selection);
}
public TextComponent statNumberHoverComponent(String mainNumber, String hoverNumber, @Nullable String hoverUnitName, @Nullable String hoverUnitKey, Target selection) {
return statNumberHoverComponent(mainNumber, hoverNumber, hoverUnitName, hoverUnitKey, null, selection);
}
private TextComponent statNumberHoverComponent(String mainNumber, String hoverNumber, @Nullable String hoverUnitName, @Nullable String hoverUnitKey, @Nullable TextComponent heart, Target selection) {
TextColor baseColor = getColorFromString(config.getStatNumberDecoration(selection, false));
TextDecoration style = getStyleFromString(config.getStatNumberDecoration(selection, true));
TextComponent.Builder hoverText = getComponentBuilder(hoverNumber, getLighterColor(baseColor), style);
if (hoverUnitKey != null) {
if (heart != null) {
hoverText.append(space())
.append(heart);
}
else if (hoverUnitKey != null) {
hoverText.append(space())
.append(translatable().key(hoverUnitKey));
}
@ -180,7 +193,6 @@ public class ComponentFactory {
return getComponent(mainNumber, baseColor, style).hoverEvent(HoverEvent.showText(hoverText));
}
//TODO Make this dark gray (or at least darker than statNumber, and at least for time statistics)
public TextComponent statUnitComponent(String unitName, String unitKey, Target selection) {
if (!(unitName == null && unitKey == null)) {
TextComponent.Builder statUnitBuilder = getComponentBuilder(null,
@ -200,6 +212,28 @@ public class ComponentFactory {
}
}
public TextComponent heartComponent(boolean isConsoleSender, boolean isHoverUnit) {
TextColor heartColor = TextColor.fromHexString("#FF1313");
char heart = isConsoleSender ? '\u2665' : '\u2764';
if (isHoverUnit) {
return Component.text(heart).color(heartColor);
}
TextComponent.Builder heartComponent = Component.text()
.content(String.valueOf(heart))
.color(heartColor);
if (config.useHoverText()) {
heartComponent.hoverEvent(HoverEvent.showText(
text(Unit.HEART.getLabel())
.color(PluginColor.LIGHT_GOLD.getColor())
.decorate(TextDecoration.ITALIC)));
}
return Component.text().color(PluginColor.GRAY.getColor())
.append(text("["))
.append(heartComponent)
.append(text("]"))
.build();
}
public TextComponent titleComponent(String content, Target selection) {
return getComponent(content,
getColorFromString(config.getTitleDecoration(selection, false)),
@ -272,8 +306,9 @@ public class ComponentFactory {
}
private TextColor getLighterColor(TextColor color) {
float multiplier = (float) ((100 - config.getHoverTextAmountLighter()) / 100.0);
HSVLike oldColor = HSVLike.fromRGB(color.red(), color.green(), color.blue());
HSVLike newColor = HSVLike.hsvLike(oldColor.h(), 0.45F, oldColor.v());
HSVLike newColor = HSVLike.hsvLike(oldColor.h(), oldColor.s() * multiplier, oldColor.v());
return TextColor.color(newColor);
}

View File

@ -112,10 +112,10 @@ public class MessageWriter {
.append(componentFactory.playerNameBuilder(request.getPlayerName(), Target.PLAYER)
.append(text(":"))
.append(space()))
.append(getStatNumberComponent(request.getStatistic(), stat, Target.PLAYER))
.append(getStatNumberComponent(request.getStatistic(), stat, Target.PLAYER, request.isConsoleSender()))
.append(space())
.append(getStatNameComponent(request))
.append(getStatUnitComponent(request.getStatistic(), request.getSelection()))
.append(getStatUnitComponent(request.getStatistic(), request.getSelection(), request.isConsoleSender()))
.build(); //space is provided by statUnitComponent
}
@ -126,7 +126,7 @@ public class MessageWriter {
.append(componentFactory.titleComponent(config.getTopStatsTitle(), Target.TOP)).append(space())
.append(componentFactory.titleNumberComponent(topStats.size())).append(space())
.append(getStatNameComponent(request)) //space is provided by statUnitComponent
.append(getStatUnitComponent(request.getStatistic(), request.getSelection()));
.append(getStatUnitComponent(request.getStatistic(), request.getSelection(), request.isConsoleSender()));
ArrayList<Unit> timeUnits = null;
if (Unit.getTypeFromStatistic(request.getStatistic()) == Unit.Type.TIME) {
@ -143,10 +143,11 @@ public class MessageWriter {
TextComponent.Builder playerNameBuilder = componentFactory.playerNameBuilder(playerName, Target.TOP);
count++;
topList.append(newline())
.append(componentFactory.rankingNumberComponent(count + ". "))
.append(playerNameBuilder);
.append(componentFactory.rankingNumberComponent(count + "."))
.append(space());
if (useDots) {
topList.append(space());
topList.append(playerNameBuilder)
.append(space());
TextComponent.Builder dotsBuilder = componentFactory.dotsBuilder();
int dots;
if (request.isConsoleSender()) {
@ -165,7 +166,7 @@ public class MessageWriter {
if (timeUnits != null) {
topList.append(space()).append(getTimeNumberComponent(topStats.get(playerName), request.getSelection(), timeUnits));
} else {
topList.append(space()).append(getStatNumberComponent(request.getStatistic(), topStats.get(playerName), Target.TOP));
topList.append(space()).append(getStatNumberComponent(request.getStatistic(), topStats.get(playerName), Target.TOP, request.isConsoleSender()));
}
}
return topList.build();
@ -177,10 +178,10 @@ public class MessageWriter {
.append(space())
.append(componentFactory.serverNameComponent(config.getServerName()))
.append(space())
.append(getStatNumberComponent(request.getStatistic(), stat, Target.SERVER))
.append(getStatNumberComponent(request.getStatistic(), stat, Target.SERVER, request.isConsoleSender()))
.append(space())
.append(getStatNameComponent(request))
.append(getStatUnitComponent(request.getStatistic(), request.getSelection())) //space is provided by statUnit
.append(getStatUnitComponent(request.getStatistic(), request.getSelection(), request.isConsoleSender())) //space is provided by statUnit
.build();
}
@ -209,7 +210,7 @@ public class MessageWriter {
}
}
private TextComponent getStatNumberComponent(Statistic statistic, long statNumber, Target selection) {
private TextComponent getStatNumberComponent(Statistic statistic, long statNumber, Target selection, boolean isConsoleSender) {
Unit.Type type = Unit.getTypeFromStatistic(statistic);
Unit statUnit;
switch (type) {
@ -222,22 +223,25 @@ public class MessageWriter {
}
String prettyNumber = formatter.format(statNumber, statUnit);
if (!config.useHoverText() || statUnit == Unit.NUMBER) {
return componentFactory.statNumberBuilder(prettyNumber, selection).build();
return componentFactory.statNumberComponent(prettyNumber, selection);
}
Unit hoverUnit = type == Unit.Type.DISTANCE ? Unit.fromString(config.getDistanceUnit(true)) :
Unit.fromString(config.getDamageUnit(true));
String prettyHoverNumber = formatter.format(statNumber, hoverUnit);
MyLogger.logMsg("mainNumber: " + prettyNumber + ", hoverNumber: " + prettyHoverNumber, DebugLevel.HIGH);
if (hoverUnit == Unit.HEART) {
return componentFactory.damageNumberHoverComponent(
prettyNumber, prettyHoverNumber,
componentFactory.heartComponent(isConsoleSender, true), selection);
}
if (config.useTranslatableComponents()) {
String unitKey = languageKeyHandler.getUnitKey(hoverUnit);
if (unitKey == null) {
unitKey = hoverUnit.getLabel();
if (unitKey != null) {
return componentFactory.statNumberHoverComponent(prettyNumber, prettyHoverNumber, null, unitKey, selection);
}
return componentFactory.statNumberHoverComponent(prettyNumber, prettyHoverNumber, null, unitKey, selection);
}
else {
return componentFactory.statNumberHoverComponent(prettyNumber, prettyHoverNumber, hoverUnit.getLabel(), null, selection);
}
return componentFactory.statNumberHoverComponent(prettyNumber, prettyHoverNumber, hoverUnit.getLabel(), null, selection);
}
private TextComponent getTimeNumberComponent(long statNumber, Target selection, ArrayList<Unit> unitRange) {
@ -245,18 +249,18 @@ public class MessageWriter {
MyLogger.logMsg(
"There is something wrong with the time-units you specified, please check your config!",
true);
return componentFactory.statNumberBuilder("-", selection).build();
return componentFactory.statNumberComponent("-", selection);
}
else {
String mainNumber = formatter.format(statNumber, unitRange.get(0), unitRange.get(1));
if (!config.useHoverText()) {
return componentFactory.statNumberBuilder(mainNumber, selection).build();
return componentFactory.statNumberComponent(mainNumber, selection);
} else {
String hoverNumber = formatter.format(statNumber, unitRange.get(2), unitRange.get(3));
MyLogger.logMsg("mainNumber: " + mainNumber + ", hoverNumber: " + hoverNumber, DebugLevel.HIGH);
return componentFactory.statNumberHoverComponent(mainNumber, hoverNumber,
null, null, selection); //Time does not support translatable text,
} //because the unit and number are so tightly interwoven.
null, null, selection);
}
}
}
@ -291,7 +295,7 @@ public class MessageWriter {
return unitRange;
}
private TextComponent getStatUnitComponent(Statistic statistic, Target selection) {
private TextComponent getStatUnitComponent(Statistic statistic, Target selection, boolean isConsoleSender) {
Unit statUnit;
switch (Unit.getTypeFromStatistic(statistic)) {
case DAMAGE -> statUnit = Unit.fromString(config.getDamageUnit(false));
@ -307,8 +311,13 @@ public class MessageWriter {
.append(componentFactory.statUnitComponent(null, unitKey, selection));
}
}
String statName = statUnit.getLabel();
if (statUnit == Unit.HEART) { //console can do u2665, u2764 looks better in-game
return Component.space()
.append(componentFactory.heartComponent(isConsoleSender, false));
}
return Component.space()
.append(componentFactory.statUnitComponent(statUnit.getLabel(), null, selection));
.append(componentFactory.statUnitComponent(statName, null, selection));
}
/** Returns "block", "entity", "item", or "sub-statistic" if the provided Type is null. */

View File

@ -84,6 +84,11 @@ your-server-name: 'this server'
# # Color & Style # #
# # ------------------------------- # #
# How much lighter the color of a hovering number should be compared to the plain number
# Below number represents a percentage between 0 and 100
hover-text-amount-lighter: 40
# The colors below can be Chat Colors or hex codes (format: '#xxxxxx' <-- including quotation marks!)
# # -------- Styles --------- # # -------- Chat Colors --------- # #

Binary file not shown.

Before

Width:  |  Height:  |  Size: 11 KiB

After

Width:  |  Height:  |  Size: 13 KiB