mirror of
https://github.com/itHotL/PlayerStats.git
synced 2024-11-26 12:36:16 +01:00
started working with Unit.Type as a sub-enum
This commit is contained in:
parent
a05a97617b
commit
f723a657e7
@ -1,16 +1,89 @@
|
||||
package com.gmail.artemis.the.gr8.playerstats.enums;
|
||||
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
public enum Unit {
|
||||
CM,
|
||||
BLOCK,
|
||||
MILE,
|
||||
KM,
|
||||
HP,
|
||||
HEART,
|
||||
TICK,
|
||||
SECOND,
|
||||
MINUTE,
|
||||
HOUR,
|
||||
DAY,
|
||||
WEEK
|
||||
NUMBER (Type.UNTYPED),
|
||||
CM (Type.DISTANCE),
|
||||
BLOCK (Type.DISTANCE),
|
||||
MILE (Type.DISTANCE),
|
||||
KM (Type.DISTANCE),
|
||||
HP (Type.DAMAGE),
|
||||
HEART (Type.DAMAGE),
|
||||
TICK (Type.TIME),
|
||||
SECOND (Type.TIME),
|
||||
MINUTE (Type.TIME),
|
||||
HOUR (Type.TIME),
|
||||
DAY (Type.TIME),
|
||||
WEEK (Type.TIME);
|
||||
|
||||
|
||||
Unit(Type type) {
|
||||
}
|
||||
|
||||
public static @NotNull Type getType(String statName) {
|
||||
String name = statName.toLowerCase();
|
||||
if (name.contains("one_cm")) {
|
||||
return Type.DISTANCE;
|
||||
} else if (name.contains("damage")) {
|
||||
return Type.DAMAGE;
|
||||
} else if (name.contains("time") || name.contains("one_minute")) {
|
||||
return Type.TIME;
|
||||
} else {
|
||||
return Type.UNTYPED;
|
||||
}
|
||||
}
|
||||
|
||||
public @NotNull String getName() {
|
||||
switch (this) {
|
||||
case CM -> {
|
||||
return "cm";
|
||||
}
|
||||
case BLOCK -> {
|
||||
return "Blocks";
|
||||
}
|
||||
case MILE -> {
|
||||
return "Miles";
|
||||
}
|
||||
case KM -> {
|
||||
return "km";
|
||||
}
|
||||
case HP -> {
|
||||
return "HP";
|
||||
}
|
||||
case HEART -> {
|
||||
return "Hearts";
|
||||
}
|
||||
case TICK -> {
|
||||
return "ticks";
|
||||
}
|
||||
case SECOND -> {
|
||||
return "seconds";
|
||||
}
|
||||
case MINUTE -> {
|
||||
return "minutes";
|
||||
}
|
||||
case DAY -> {
|
||||
return "days";
|
||||
}
|
||||
case HOUR -> {
|
||||
return "hours";
|
||||
}
|
||||
case WEEK -> {
|
||||
return "weeks";
|
||||
}
|
||||
default ->
|
||||
throw new NullPointerException("Trying to get the name of an enum constant that does not exist!");
|
||||
}
|
||||
}
|
||||
|
||||
public static enum Type{
|
||||
DAMAGE, //7 statistics
|
||||
DISTANCE, //15 statistics
|
||||
TIME, //5 statistics
|
||||
UNTYPED;
|
||||
|
||||
private Type() {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -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 com.gmail.artemis.the.gr8.playerstats.statistic.StatRequest;
|
||||
import com.gmail.artemis.the.gr8.playerstats.msg.msgutils.LanguageKeyHandler;
|
||||
import net.kyori.adventure.text.Component;
|
||||
@ -28,13 +29,11 @@ public class ComponentFactory {
|
||||
|
||||
private static ConfigHandler config;
|
||||
private final LanguageKeyHandler languageKeyHandler;
|
||||
private final NumberFormatter format;
|
||||
|
||||
public ComponentFactory(ConfigHandler c) {
|
||||
config = c;
|
||||
|
||||
languageKeyHandler = new LanguageKeyHandler();
|
||||
format = new NumberFormatter(config);
|
||||
}
|
||||
|
||||
/** Returns [PlayerStats]. */
|
||||
@ -176,40 +175,48 @@ public class ComponentFactory {
|
||||
.args(subStat));
|
||||
}
|
||||
|
||||
//TODO Make this dark gray (or at least darker than statNumber, and at least for time statistics)
|
||||
public TextComponent statUnitComponent(String statName, Target selection) {
|
||||
if (!statName.toLowerCase().contains("one_cm") && !statName.toLowerCase().contains("damage")) {
|
||||
return Component.empty();
|
||||
}
|
||||
String key;
|
||||
switch (config.getDistanceUnit()) {
|
||||
case CM -> key = "cm";
|
||||
case KM -> key = "km";
|
||||
case MILE -> key = "Miles";
|
||||
default -> key = config.useTranslatableComponents() ? languageKeyHandler.getDistanceKey() : "Blocks";
|
||||
}
|
||||
return getComponentBuilder(null,
|
||||
getColorFromString(config.getSubStatNameFormatting(selection, false)),
|
||||
getStyleFromString(config.getSubStatNameFormatting(selection, true)))
|
||||
.append(text("["))
|
||||
.append(translatable(key))
|
||||
.append(text("]"))
|
||||
.build();
|
||||
//TODO Add hoverComponent with full number
|
||||
public TextComponent.Builder statNumberComponent(String number, Target selection) {
|
||||
return getComponentBuilder(number,
|
||||
getColorFromString(config.getStatNumberFormatting(selection, false)),
|
||||
getStyleFromString(config.getStatNumberFormatting(selection, true)));
|
||||
}
|
||||
|
||||
//TODO Add hoverComponent with full number
|
||||
public TextComponent statNumberComponent(long number, String statName, Target selection) {
|
||||
public TextComponent statNumberHoverComponent(String mainNumber, String hoverNumber, Unit hoverUnit, Target selection, boolean isTranslatable) {
|
||||
TextColor baseColor = getColorFromString(config.getStatNumberFormatting(selection, false));
|
||||
TextDecoration style = getStyleFromString(config.getStatNumberFormatting(selection, true));
|
||||
TextComponent.Builder statNumber = getComponentBuilder(format.formatMainNumber(statName, number), baseColor, style);
|
||||
|
||||
if (config.useHoverText()) {
|
||||
statNumber.hoverEvent(HoverEvent.showText(getComponent(format.formatHoverNumber(statName, number),
|
||||
getLighterColor(baseColor), style)
|
||||
.append(space())
|
||||
.append(statUnitComponent(statName, selection))));
|
||||
TextComponent.Builder hoverText = getComponentBuilder(hoverNumber, getLighterColor(baseColor), style);
|
||||
if (isTranslatable) {
|
||||
String unitKey = languageKeyHandler.getUnitKey(hoverUnit);
|
||||
if (unitKey == null) {
|
||||
unitKey = hoverUnit.getName();
|
||||
}
|
||||
return statNumber.build();
|
||||
hoverText.append(space())
|
||||
.append(translatable().key(unitKey));
|
||||
}
|
||||
else {
|
||||
hoverText.append(space())
|
||||
.append(text(hoverUnit.getName()));
|
||||
}
|
||||
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(Unit statUnit, Target selection, boolean isTranslatable) {
|
||||
TextComponent.Builder statUnitBuilder = getComponentBuilder(null,
|
||||
getColorFromString(config.getSubStatNameFormatting(selection, false)),
|
||||
getStyleFromString(config.getSubStatNameFormatting(selection, true)))
|
||||
.append(text("["));
|
||||
if (isTranslatable) {
|
||||
String unitKey = languageKeyHandler.getUnitKey(statUnit);
|
||||
if (unitKey == null) {
|
||||
unitKey = statUnit.getName();
|
||||
}
|
||||
statUnitBuilder.append(translatable().key(unitKey));
|
||||
} else {
|
||||
statUnitBuilder.append(text(statUnit.getName()));
|
||||
}
|
||||
return statUnitBuilder.append(text("]")).build();
|
||||
}
|
||||
|
||||
public TextComponent titleComponent(String content, Target selection) {
|
||||
|
@ -2,6 +2,7 @@ package com.gmail.artemis.the.gr8.playerstats.msg;
|
||||
|
||||
import com.gmail.artemis.the.gr8.playerstats.enums.Target;
|
||||
import com.gmail.artemis.the.gr8.playerstats.config.ConfigHandler;
|
||||
import com.gmail.artemis.the.gr8.playerstats.enums.Unit;
|
||||
import com.gmail.artemis.the.gr8.playerstats.msg.msgutils.ExampleMessage;
|
||||
import com.gmail.artemis.the.gr8.playerstats.msg.msgutils.HelpMessage;
|
||||
import com.gmail.artemis.the.gr8.playerstats.statistic.StatRequest;
|
||||
@ -24,9 +25,11 @@ public class MessageWriter {
|
||||
|
||||
private static ConfigHandler config;
|
||||
private static ComponentFactory componentFactory;
|
||||
private final NumberFormatter formatter;
|
||||
|
||||
public MessageWriter(ConfigHandler c) {
|
||||
config = c;
|
||||
formatter = new NumberFormatter(config);
|
||||
getComponentFactory();
|
||||
}
|
||||
|
||||
@ -125,6 +128,7 @@ public class MessageWriter {
|
||||
|
||||
boolean useDots = config.useDots();
|
||||
boolean boldNames = config.playerNameIsBold();
|
||||
boolean useHover = config.useHoverText();
|
||||
|
||||
Set<String> playerNames = topStats.keySet();
|
||||
MinecraftFont font = new MinecraftFont();
|
||||
@ -159,8 +163,12 @@ public class MessageWriter {
|
||||
.append(text(":"))
|
||||
.build());
|
||||
}
|
||||
topList.append(space())
|
||||
.append(componentFactory.statNumberComponent(topStats.get(playerName), request.getStatistic().toString(), Target.TOP));
|
||||
topList.append(space());
|
||||
if (useHover) {
|
||||
topList.append(
|
||||
//componentFactory.statNumberHoverComponent(
|
||||
// formatter.formatMainNumber(request.getStatistic().toString(), topStats.get(playerName)), Target.TOP));
|
||||
}
|
||||
}
|
||||
return topList.build();
|
||||
}
|
||||
@ -192,6 +200,27 @@ public class MessageWriter {
|
||||
}
|
||||
}
|
||||
|
||||
private Component getStatNumberComponent(String statName, long statNumber) {
|
||||
Unit.getType(statName);
|
||||
if (config.useHoverText()) {
|
||||
return componentFactory.statNumberHoverComponent(formatter.formatMainNumber(statName, statNumber),
|
||||
formatter.formatHoverNumber(statName, statNumber),
|
||||
//something like config.getUnit that calls a bunch of smaller specific getUnit methods)
|
||||
}
|
||||
}
|
||||
|
||||
/** Returns "block", "entity", "item", or "sub-statistic" if the provided Type is null. */
|
||||
private String getSubStatTypeName(Statistic.Type statType) {
|
||||
String subStat = "sub-statistic";
|
||||
if (statType == null) return subStat;
|
||||
switch (statType) {
|
||||
case BLOCK -> subStat = "block";
|
||||
case ENTITY -> subStat = "entity";
|
||||
case ITEM -> subStat = "item";
|
||||
}
|
||||
return subStat;
|
||||
}
|
||||
|
||||
/** Replace "_" with " " and capitalize each first letter of the input.
|
||||
@param input String to prettify, case-insensitive*/
|
||||
private String getPrettyName(String input) {
|
||||
@ -208,18 +237,6 @@ public class MessageWriter {
|
||||
return capitals.toString();
|
||||
}
|
||||
|
||||
/** Returns "block", "entity", "item", or "sub-statistic" if the provided Type is null. */
|
||||
private String getSubStatTypeName(Statistic.Type statType) {
|
||||
String subStat = "sub-statistic";
|
||||
if (statType == null) return subStat;
|
||||
switch (statType) {
|
||||
case BLOCK -> subStat = "block";
|
||||
case ENTITY -> subStat = "entity";
|
||||
case ITEM -> subStat = "item";
|
||||
}
|
||||
return subStat;
|
||||
}
|
||||
|
||||
public TextComponent usageExamples(boolean isBukkitConsole) {
|
||||
return new ExampleMessage(componentFactory, isBukkitConsole);
|
||||
}
|
||||
|
@ -1,5 +1,6 @@
|
||||
package com.gmail.artemis.the.gr8.playerstats.msg.msgutils;
|
||||
|
||||
import com.gmail.artemis.the.gr8.playerstats.enums.Unit;
|
||||
import com.gmail.artemis.the.gr8.playerstats.utils.EnumHandler;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.Statistic;
|
||||
@ -63,8 +64,12 @@ public class LanguageKeyHandler {
|
||||
}
|
||||
}
|
||||
|
||||
public String getDistanceKey() {
|
||||
public @Nullable String getUnitKey(Unit unit) {
|
||||
if (unit == Unit.BLOCK) {
|
||||
return "soundCategory.block";
|
||||
} else {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
private void generateDefaultKeys() {
|
||||
|
Loading…
Reference in New Issue
Block a user