Added heart unicode symbol for Unit.HEART, tried and abandoned darker time-units, added screenshot for release v1.5
This commit is contained in:
parent
52ad16f40b
commit
e4a5aa69fc
|
@ -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>
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
||||
|
|
|
@ -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. */
|
||||
|
|
|
@ -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 |
Loading…
Reference in New Issue