api header support, team api integration

This commit is contained in:
2025-05-30 18:34:49 +02:00
parent 8093a4a644
commit 558e6f84f1
19 changed files with 157 additions and 58 deletions

View File

@ -0,0 +1,28 @@
package eu.mhsl.craftattack.spawn.varo.api;
import eu.mhsl.craftattack.spawn.core.config.Configuration;
import org.bukkit.configuration.ConfigurationSection;
import java.net.URI;
import java.net.URISyntaxException;
import java.net.http.HttpRequest;
import java.util.Objects;
public class VaroApi {
private final static ConfigurationSection apiConfig = Objects.requireNonNull(Configuration.cfg.getConfigurationSection("varoApi"));
public final static String basePath = apiConfig.getString("endpoint");
public final static String apiSecret = apiConfig.getString("auth");
public static URI getBaseUri() {
Objects.requireNonNull(basePath);
try {
return new URI(basePath);
} catch(URISyntaxException e) {
throw new RuntimeException(e);
}
}
public static void authorizationHeader(HttpRequest.Builder builder) {
builder.header("Authorization", apiSecret);
}
}

View File

@ -0,0 +1,36 @@
package eu.mhsl.craftattack.spawn.varo.api.repositories;
import com.google.common.reflect.TypeToken;
import eu.mhsl.craftattack.spawn.core.api.client.HttpRepository;
import eu.mhsl.craftattack.spawn.core.api.client.ReqResp;
import eu.mhsl.craftattack.spawn.varo.api.VaroApi;
import java.util.List;
import java.util.UUID;
public class TeamRepository extends HttpRepository {
public TeamRepository() {
super(VaroApi.getBaseUri(), new RequestModifier(null, VaroApi::authorizationHeader));
}
public record Team(
String name,
String color,
Object lastJoined,
Object strikeWeight,
List<User> users
) {
public record User(
UUID uuid,
boolean dead
) {}
}
public ReqResp<List<Team>> getTeams() {
var resp = this.get("team", Object.class);
System.out.println(resp.toString());
return resp
.convertToTypeToken(new TypeToken<List<Team>>() {}.getType())
.cast();
}
}

View File

@ -4,6 +4,7 @@ import eu.mhsl.craftattack.spawn.core.Main;
import eu.mhsl.craftattack.spawn.core.appliance.Appliance;
import eu.mhsl.craftattack.spawn.core.util.text.DisconnectInfo;
import eu.mhsl.craftattack.spawn.common.appliances.metaGameplay.displayName.DisplayName;
import eu.mhsl.craftattack.spawn.varo.api.repositories.TeamRepository;
import eu.mhsl.craftattack.spawn.varo.appliances.metaGameplay.joinProtection.JoinProtection;
import net.kyori.adventure.text.Component;
import net.kyori.adventure.text.format.NamedTextColor;
@ -18,19 +19,19 @@ import org.jetbrains.annotations.Nullable;
import java.util.*;
public class Teams extends Appliance implements DisplayName.Prefixed, DisplayName.Colored {
private Set<VaroTeam> teams = new HashSet<>() {{
this.add(new VaroTeam(
new HashSet<>() {{
this.add(new VaroTeam.Member(UUID.fromString("3a0a699c-7f0c-319b-839c-ccc8cac8ae63"), false));
this.add(new VaroTeam.Member(UUID.fromString("959ed433-14ea-38fe-918b-75b7d09466af"), true));
}},
"Die Admins",
"#0E0E0E"
));
}};
private List<VaroTeam> teams = List.of();
public Teams() {
this.refreshTeamList();
}
public void refreshTeamList() {
this.teams = this.queryRepository(TeamRepository.class).getTeams().data().stream()
.map(team -> new VaroTeam(
team.users().stream().map(user -> new VaroTeam.Member(user.uuid(), user.dead())).toList(),
team.name(),
team.color()
)).toList();
}
public boolean canLogin(UUID playerId) {
@ -58,16 +59,14 @@ public class Teams extends Appliance implements DisplayName.Prefixed, DisplayNam
VaroTeam team = this.getTeamFromPlayer(joinedPlayer.getUniqueId());
Bukkit.getScheduler().scheduleSyncDelayedTask(
Main.instance(),
() -> {
team.members.stream()
.filter(member -> !member.isDead)
.filter(member -> {
Player p = Bukkit.getPlayer(member.player.getUniqueId());
return p == null || !p.isOnline();
})
.findAny()
.ifPresent(member -> team.kickTeam(disconnectInfo));
},
() -> team.members.stream()
.filter(member -> !member.isDead)
.filter(member -> {
Player p = Bukkit.getPlayer(member.player.getUniqueId());
return p == null || !p.isOnline();
})
.findAny()
.ifPresent(member -> team.kickTeam(disconnectInfo)),
Ticks.TICKS_PER_SECOND * (JoinProtection.resistanceDuration / 2)
);
}

View File

@ -5,8 +5,8 @@ import org.bukkit.Bukkit;
import org.bukkit.OfflinePlayer;
import org.jetbrains.annotations.Nullable;
import java.util.List;
import java.util.Objects;
import java.util.Set;
import java.util.UUID;
class VaroTeam {
@ -26,18 +26,18 @@ class VaroTeam {
}
public boolean isFree(int countdownSeconds) {
return this.timestampSince < System.currentTimeMillis() - (countdownSeconds * 1000);
return this.timestampSince < System.currentTimeMillis() - (countdownSeconds * 1000L);
}
}
public final Set<Member> members;
public final List<Member> members;
public final UUID teamUuid;
public final String name;
public final String color;
public JoinCountdown joinCountdown;
public VaroTeam(Set<Member> members, String name, String color) {
public VaroTeam(List<Member> members, String name, String color) {
this.teamUuid = UUID.randomUUID();
this.members = members;
this.name = name;