made displayName independent of other appliances
This commit is contained in:
parent
d1b5d81fa7
commit
32cbbe6c51
@ -1,12 +1,7 @@
|
|||||||
package eu.mhsl.craftattack.spawn.craftattack.appliances.metaGameplay.displayName;
|
package eu.mhsl.craftattack.spawn.common.appliances.metaGameplay.displayName;
|
||||||
|
|
||||||
import eu.mhsl.craftattack.core.Main;
|
import eu.mhsl.craftattack.core.Main;
|
||||||
import eu.mhsl.craftattack.core.appliance.Appliance;
|
import eu.mhsl.craftattack.core.appliance.Appliance;
|
||||||
import eu.mhsl.craftattack.spawn.craftattack.appliances.gameplay.outlawed.Outlawed;
|
|
||||||
import eu.mhsl.craftattack.spawn.craftattack.appliances.metaGameplay.adminMarker.AdminMarker;
|
|
||||||
import eu.mhsl.craftattack.spawn.craftattack.appliances.metaGameplay.afkTag.AfkTag;
|
|
||||||
import eu.mhsl.craftattack.spawn.craftattack.appliances.metaGameplay.sleepTag.SleepTag;
|
|
||||||
import eu.mhsl.craftattack.spawn.craftattack.appliances.metaGameplay.yearRank.YearRank;
|
|
||||||
import eu.mhsl.craftattack.core.util.server.Floodgate;
|
import eu.mhsl.craftattack.core.util.server.Floodgate;
|
||||||
import eu.mhsl.craftattack.core.util.text.ComponentUtil;
|
import eu.mhsl.craftattack.core.util.text.ComponentUtil;
|
||||||
import net.kyori.adventure.text.Component;
|
import net.kyori.adventure.text.Component;
|
||||||
@ -20,7 +15,6 @@ import org.jetbrains.annotations.Nullable;
|
|||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Objects;
|
import java.util.Objects;
|
||||||
import java.util.function.Supplier;
|
|
||||||
import java.util.logging.Level;
|
import java.util.logging.Level;
|
||||||
|
|
||||||
public class DisplayName extends Appliance {
|
public class DisplayName extends Appliance {
|
||||||
@ -29,18 +23,33 @@ public class DisplayName extends Appliance {
|
|||||||
Component getNamePrefix(Player player);
|
Component getNamePrefix(Player player);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public interface Colored {
|
||||||
|
@Nullable
|
||||||
|
TextColor getNameColor(Player player);
|
||||||
|
}
|
||||||
|
|
||||||
public void update(Player player) {
|
public void update(Player player) {
|
||||||
TextColor playerColor = this.queryAppliance(AdminMarker.class).getPlayerColor(player);
|
List<Colored> coloring = Main.instance().getAppliances().stream()
|
||||||
List<Supplier<Prefixed>> prefixes = List.of(
|
.filter(appliance -> appliance instanceof Colored)
|
||||||
() -> this.queryAppliance(Outlawed.class),
|
.map(appliance -> (Colored) appliance)
|
||||||
() -> this.queryAppliance(YearRank.class),
|
.toList();
|
||||||
() -> this.queryAppliance(AfkTag.class),
|
|
||||||
() -> this.queryAppliance(SleepTag.class)
|
if(coloring.size() > 1) throw new IllegalStateException(
|
||||||
|
"There are two or more appliances which provide coloring for player names. This is currently not supported!"
|
||||||
);
|
);
|
||||||
|
|
||||||
|
TextColor playerColor = coloring.isEmpty()
|
||||||
|
? NamedTextColor.WHITE
|
||||||
|
: coloring.getFirst().getNameColor(player);
|
||||||
|
|
||||||
|
List<Prefixed> prefixes = Main.instance().getAppliances().stream()
|
||||||
|
.filter(appliance -> appliance instanceof Prefixed)
|
||||||
|
.map(appliance -> (Prefixed) appliance)
|
||||||
|
.toList();
|
||||||
|
|
||||||
ComponentBuilder<TextComponent, TextComponent.Builder> playerName = Component.text();
|
ComponentBuilder<TextComponent, TextComponent.Builder> playerName = Component.text();
|
||||||
prefixes.stream()
|
prefixes.stream()
|
||||||
.map(prefixed -> prefixed.get().getNamePrefix(player))
|
.map(prefixed -> prefixed.getNamePrefix(player))
|
||||||
.filter(Objects::nonNull)
|
.filter(Objects::nonNull)
|
||||||
.forEach(prefix -> playerName
|
.forEach(prefix -> playerName
|
||||||
.append(prefix)
|
.append(prefix)
|
@ -1,4 +1,4 @@
|
|||||||
package eu.mhsl.craftattack.spawn.craftattack.appliances.metaGameplay.displayName;
|
package eu.mhsl.craftattack.spawn.common.appliances.metaGameplay.displayName;
|
||||||
|
|
||||||
import eu.mhsl.craftattack.core.appliance.ApplianceListener;
|
import eu.mhsl.craftattack.core.appliance.ApplianceListener;
|
||||||
import org.bukkit.event.EventHandler;
|
import org.bukkit.event.EventHandler;
|
@ -21,6 +21,7 @@ public final class Main extends JavaPlugin {
|
|||||||
|
|
||||||
private List<Appliance> appliances;
|
private List<Appliance> appliances;
|
||||||
private RepositoryLoader repositoryLoader;
|
private RepositoryLoader repositoryLoader;
|
||||||
|
private Reflections reflections;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onEnable() {
|
public void onEnable() {
|
||||||
@ -39,15 +40,15 @@ public final class Main extends JavaPlugin {
|
|||||||
Configuration.readConfig();
|
Configuration.readConfig();
|
||||||
List<String> disabledAppliances = Configuration.pluginConfig.getStringList("disabledAppliances");
|
List<String> disabledAppliances = Configuration.pluginConfig.getStringList("disabledAppliances");
|
||||||
|
|
||||||
|
Main.logger().info("Initializing reflections...");
|
||||||
|
this.reflections = new Reflections("eu.mhsl.craftattack.spawn");
|
||||||
|
|
||||||
Main.logger().info("Loading Repositories...");
|
Main.logger().info("Loading Repositories...");
|
||||||
this.repositoryLoader = new RepositoryLoader();
|
this.repositoryLoader = new RepositoryLoader();
|
||||||
Main.logger().info(String.format("Loaded %d repositories!", this.repositoryLoader.getRepositories().size()));
|
Main.logger().info(String.format("Loaded %d repositories!", this.repositoryLoader.getRepositories().size()));
|
||||||
|
|
||||||
Main.logger().info("Loading appliances...");
|
Main.logger().info("Loading appliances...");
|
||||||
Reflections reflections = new Reflections("eu.mhsl.craftattack.spawn");
|
this.appliances = this.findSubtypesOf(Appliance.class).stream()
|
||||||
Set<Class<? extends Appliance>> applianceClasses = reflections.getSubTypesOf(Appliance.class);
|
|
||||||
|
|
||||||
this.appliances = applianceClasses.stream()
|
|
||||||
.filter(applianceClass -> !disabledAppliances.contains(applianceClass.getSimpleName()))
|
.filter(applianceClass -> !disabledAppliances.contains(applianceClass.getSimpleName()))
|
||||||
.map(applianceClass -> {
|
.map(applianceClass -> {
|
||||||
try {
|
try {
|
||||||
@ -97,6 +98,10 @@ public final class Main extends JavaPlugin {
|
|||||||
.orElseThrow(() -> new RuntimeException(String.format("Appliance %s not loaded or instantiated!", clazz)));
|
.orElseThrow(() -> new RuntimeException(String.format("Appliance %s not loaded or instantiated!", clazz)));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public <T> Set<Class<? extends T>> findSubtypesOf(Class<T> type) {
|
||||||
|
return this.reflections.getSubTypesOf(type);
|
||||||
|
}
|
||||||
|
|
||||||
@SuppressWarnings("unchecked")
|
@SuppressWarnings("unchecked")
|
||||||
public static <T> Class<T> getApplianceType(Class<?> clazz) {
|
public static <T> Class<T> getApplianceType(Class<?> clazz) {
|
||||||
return (Class<T>) ((ParameterizedType) clazz.getGenericSuperclass()).getActualTypeArguments()[0];
|
return (Class<T>) ((ParameterizedType) clazz.getGenericSuperclass()).getActualTypeArguments()[0];
|
||||||
|
@ -3,7 +3,7 @@ package eu.mhsl.craftattack.spawn.craftattack.appliances.gameplay.outlawed;
|
|||||||
import eu.mhsl.craftattack.core.Main;
|
import eu.mhsl.craftattack.core.Main;
|
||||||
import eu.mhsl.craftattack.core.appliance.Appliance;
|
import eu.mhsl.craftattack.core.appliance.Appliance;
|
||||||
import eu.mhsl.craftattack.core.appliance.ApplianceCommand;
|
import eu.mhsl.craftattack.core.appliance.ApplianceCommand;
|
||||||
import eu.mhsl.craftattack.spawn.craftattack.appliances.metaGameplay.displayName.DisplayName;
|
import eu.mhsl.craftattack.spawn.common.appliances.metaGameplay.displayName.DisplayName;
|
||||||
import eu.mhsl.craftattack.spawn.craftattack.appliances.tooling.whitelist.Whitelist;
|
import eu.mhsl.craftattack.spawn.craftattack.appliances.tooling.whitelist.Whitelist;
|
||||||
import eu.mhsl.craftattack.core.config.Configuration;
|
import eu.mhsl.craftattack.core.config.Configuration;
|
||||||
import eu.mhsl.craftattack.core.util.text.DisconnectInfo;
|
import eu.mhsl.craftattack.core.util.text.DisconnectInfo;
|
||||||
@ -48,7 +48,7 @@ public class Outlawed extends Appliance implements DisplayName.Prefixed {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void switchLawStatus(Player player) throws OutlawChangeNotPermitted {
|
void switchLawStatus(Player player) throws OutlawChangeNotPermitted {
|
||||||
if(this.getLawStatus(player).equals(Status.FORCED)) {
|
if(this.getLawStatus(player).equals(Status.FORCED)) {
|
||||||
throw new OutlawChangeNotPermitted("Dein Vogelfreistatus wurde als Strafe auferlegt und kann daher nicht verändert werden.");
|
throw new OutlawChangeNotPermitted("Dein Vogelfreistatus wurde als Strafe auferlegt und kann daher nicht verändert werden.");
|
||||||
}
|
}
|
||||||
|
@ -1,12 +1,15 @@
|
|||||||
package eu.mhsl.craftattack.spawn.craftattack.appliances.metaGameplay.adminMarker;
|
package eu.mhsl.craftattack.spawn.craftattack.appliances.metaGameplay.adminMarker;
|
||||||
|
|
||||||
import eu.mhsl.craftattack.core.appliance.Appliance;
|
import eu.mhsl.craftattack.core.appliance.Appliance;
|
||||||
|
import eu.mhsl.craftattack.spawn.common.appliances.metaGameplay.displayName.DisplayName;
|
||||||
import net.kyori.adventure.text.format.TextColor;
|
import net.kyori.adventure.text.format.TextColor;
|
||||||
import org.bukkit.Color;
|
import org.bukkit.Color;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
|
import org.jetbrains.annotations.Nullable;
|
||||||
|
|
||||||
public class AdminMarker extends Appliance {
|
public class AdminMarker extends Appliance implements DisplayName.Colored {
|
||||||
public TextColor getPlayerColor(Player player) {
|
@Override
|
||||||
|
public @Nullable TextColor getNameColor(Player player) {
|
||||||
if(player.hasPermission("chatcolor"))
|
if(player.hasPermission("chatcolor"))
|
||||||
return TextColor.color(Color.AQUA.asRGB()); // TODO read permission from config
|
return TextColor.color(Color.AQUA.asRGB()); // TODO read permission from config
|
||||||
return TextColor.color(Color.WHITE.asRGB());
|
return TextColor.color(Color.WHITE.asRGB());
|
||||||
|
@ -2,7 +2,7 @@ package eu.mhsl.craftattack.spawn.craftattack.appliances.metaGameplay.afkTag;
|
|||||||
|
|
||||||
import eu.mhsl.craftattack.core.Main;
|
import eu.mhsl.craftattack.core.Main;
|
||||||
import eu.mhsl.craftattack.core.appliance.Appliance;
|
import eu.mhsl.craftattack.core.appliance.Appliance;
|
||||||
import eu.mhsl.craftattack.spawn.craftattack.appliances.metaGameplay.displayName.DisplayName;
|
import eu.mhsl.craftattack.spawn.common.appliances.metaGameplay.displayName.DisplayName;
|
||||||
import net.kyori.adventure.text.Component;
|
import net.kyori.adventure.text.Component;
|
||||||
import net.kyori.adventure.text.event.HoverEvent;
|
import net.kyori.adventure.text.event.HoverEvent;
|
||||||
import net.kyori.adventure.text.format.NamedTextColor;
|
import net.kyori.adventure.text.format.NamedTextColor;
|
||||||
|
@ -2,7 +2,7 @@ package eu.mhsl.craftattack.spawn.craftattack.appliances.metaGameplay.sleepTag;
|
|||||||
|
|
||||||
import eu.mhsl.craftattack.core.Main;
|
import eu.mhsl.craftattack.core.Main;
|
||||||
import eu.mhsl.craftattack.core.appliance.Appliance;
|
import eu.mhsl.craftattack.core.appliance.Appliance;
|
||||||
import eu.mhsl.craftattack.spawn.craftattack.appliances.metaGameplay.displayName.DisplayName;
|
import eu.mhsl.craftattack.spawn.common.appliances.metaGameplay.displayName.DisplayName;
|
||||||
import net.kyori.adventure.text.Component;
|
import net.kyori.adventure.text.Component;
|
||||||
import net.kyori.adventure.text.event.HoverEvent;
|
import net.kyori.adventure.text.event.HoverEvent;
|
||||||
import net.kyori.adventure.text.format.NamedTextColor;
|
import net.kyori.adventure.text.format.NamedTextColor;
|
||||||
|
@ -3,7 +3,7 @@ package eu.mhsl.craftattack.spawn.craftattack.appliances.metaGameplay.yearRank;
|
|||||||
import eu.mhsl.craftattack.core.Main;
|
import eu.mhsl.craftattack.core.Main;
|
||||||
import eu.mhsl.craftattack.core.appliance.Appliance;
|
import eu.mhsl.craftattack.core.appliance.Appliance;
|
||||||
import eu.mhsl.craftattack.core.appliance.ApplianceCommand;
|
import eu.mhsl.craftattack.core.appliance.ApplianceCommand;
|
||||||
import eu.mhsl.craftattack.spawn.craftattack.appliances.metaGameplay.displayName.DisplayName;
|
import eu.mhsl.craftattack.spawn.common.appliances.metaGameplay.displayName.DisplayName;
|
||||||
import net.kyori.adventure.text.Component;
|
import net.kyori.adventure.text.Component;
|
||||||
import net.kyori.adventure.text.TextComponent;
|
import net.kyori.adventure.text.TextComponent;
|
||||||
import net.kyori.adventure.text.event.ClickEvent;
|
import net.kyori.adventure.text.event.ClickEvent;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user