unlimited admin access
This commit is contained in:
@ -30,7 +30,9 @@ class ChatMessagesListener extends ApplianceListener<ChatMessages> {
|
|||||||
|
|
||||||
@EventHandler(priority = EventPriority.HIGH)
|
@EventHandler(priority = EventPriority.HIGH)
|
||||||
public void onPlayerJoin(PlayerJoinEvent event) {
|
public void onPlayerJoin(PlayerJoinEvent event) {
|
||||||
|
boolean wasHidden = event.joinMessage() == null;
|
||||||
event.joinMessage(null);
|
event.joinMessage(null);
|
||||||
|
if(wasHidden) return;
|
||||||
IteratorUtil.onlinePlayers(player -> {
|
IteratorUtil.onlinePlayers(player -> {
|
||||||
if(!Settings.instance().getSetting(player, Settings.Key.ShowJoinAndLeaveMessages, Boolean.class)) return;
|
if(!Settings.instance().getSetting(player, Settings.Key.ShowJoinAndLeaveMessages, Boolean.class)) return;
|
||||||
player.sendMessage(
|
player.sendMessage(
|
||||||
@ -43,7 +45,9 @@ class ChatMessagesListener extends ApplianceListener<ChatMessages> {
|
|||||||
|
|
||||||
@EventHandler
|
@EventHandler
|
||||||
public void onPlayerLeave(PlayerQuitEvent event) {
|
public void onPlayerLeave(PlayerQuitEvent event) {
|
||||||
|
boolean wasHidden = event.quitMessage() == null;
|
||||||
event.quitMessage(null);
|
event.quitMessage(null);
|
||||||
|
if(wasHidden) return;
|
||||||
IteratorUtil.onlinePlayers(player -> {
|
IteratorUtil.onlinePlayers(player -> {
|
||||||
if(!Settings.instance().getSetting(player, Settings.Key.ShowJoinAndLeaveMessages, Boolean.class)) return;
|
if(!Settings.instance().getSetting(player, Settings.Key.ShowJoinAndLeaveMessages, Boolean.class)) return;
|
||||||
player.sendMessage(
|
player.sendMessage(
|
||||||
|
@ -27,6 +27,8 @@ public class JoinProtection extends Appliance {
|
|||||||
private final Map<UUID, Options> protectedPlayers = new HashMap<>();
|
private final Map<UUID, Options> protectedPlayers = new HashMap<>();
|
||||||
|
|
||||||
public void addProtection(Player player) {
|
public void addProtection(Player player) {
|
||||||
|
if(player.isOp()) return;
|
||||||
|
|
||||||
this.protectedPlayers.put(player.getUniqueId(), new Options());
|
this.protectedPlayers.put(player.getUniqueId(), new Options());
|
||||||
PotionEffect resistance = new PotionEffect(PotionEffectType.RESISTANCE, Ticks.TICKS_PER_SECOND * resistanceDuration, 1);
|
PotionEffect resistance = new PotionEffect(PotionEffectType.RESISTANCE, Ticks.TICKS_PER_SECOND * resistanceDuration, 1);
|
||||||
PotionEffect blindness = new PotionEffect(PotionEffectType.DARKNESS, Ticks.TICKS_PER_SECOND * 3, 1);
|
PotionEffect blindness = new PotionEffect(PotionEffectType.DARKNESS, Ticks.TICKS_PER_SECOND * 3, 1);
|
||||||
|
@ -13,7 +13,6 @@ import org.jetbrains.annotations.NotNull;
|
|||||||
import org.jetbrains.annotations.Nullable;
|
import org.jetbrains.annotations.Nullable;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.NoSuchElementException;
|
|
||||||
import java.util.stream.Stream;
|
import java.util.stream.Stream;
|
||||||
|
|
||||||
public class PlayTimerCommand extends ApplianceCommand<PlayTimer> {
|
public class PlayTimerCommand extends ApplianceCommand<PlayTimer> {
|
||||||
@ -33,20 +32,18 @@ public class PlayTimerCommand extends ApplianceCommand<PlayTimer> {
|
|||||||
VaroTeam team = switch (mode) {
|
VaroTeam team = switch (mode) {
|
||||||
case "user" -> {
|
case "user" -> {
|
||||||
OfflinePlayer player = Bukkit.getOfflinePlayer(identifier);
|
OfflinePlayer player = Bukkit.getOfflinePlayer(identifier);
|
||||||
try {
|
yield teamAppliance.getTeamFromPlayer(player.getUniqueId());
|
||||||
yield teamAppliance.getTeamFromPlayer(player.getUniqueId());
|
|
||||||
} catch(NoSuchElementException e) {
|
|
||||||
throw new Error("Dieser Spieler konnte keinem Team zugeordnet werden!");
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
case "team" -> {
|
case "team" -> teamAppliance.findTeamByName(identifier);
|
||||||
VaroTeam targetTeam = teamAppliance.findTeamByName(identifier);
|
case "incallbyone" -> {
|
||||||
if (targetTeam == null) throw new Error("Team nicht gefunden.");
|
this.getAppliance().incrementAll();
|
||||||
yield targetTeam;
|
throw new Error("Incremented all Teams by one!");
|
||||||
}
|
}
|
||||||
default -> throw new Error("Ungültiger Modus: " + mode + ". Erlaubt: user | team");
|
default -> throw new Error("Ungültiger Modus: " + mode + ". Erlaubt: user | team");
|
||||||
};
|
};
|
||||||
|
|
||||||
|
if(team == null) throw new Error("Team nicht gefunden.");
|
||||||
|
|
||||||
switch (action) {
|
switch (action) {
|
||||||
case "get" -> {
|
case "get" -> {
|
||||||
int ticketCount = this.getAppliance().getTickets(team);
|
int ticketCount = this.getAppliance().getTickets(team);
|
||||||
@ -67,7 +64,7 @@ public class PlayTimerCommand extends ApplianceCommand<PlayTimer> {
|
|||||||
List<VaroTeam> teams = Main.instance().getAppliance(Teams.class).getAllTeams();
|
List<VaroTeam> teams = Main.instance().getAppliance(Teams.class).getAllTeams();
|
||||||
|
|
||||||
return switch (args.length) {
|
return switch (args.length) {
|
||||||
case 1 -> Stream.of("user", "team")
|
case 1 -> Stream.of("user", "team", "incAllByOne")
|
||||||
.filter(opt -> opt.startsWith(args[0].toLowerCase()))
|
.filter(opt -> opt.startsWith(args[0].toLowerCase()))
|
||||||
.toList();
|
.toList();
|
||||||
|
|
||||||
|
@ -12,6 +12,7 @@ import net.kyori.adventure.text.format.NamedTextColor;
|
|||||||
import net.kyori.adventure.text.format.TextColor;
|
import net.kyori.adventure.text.format.TextColor;
|
||||||
import net.kyori.adventure.util.Ticks;
|
import net.kyori.adventure.util.Ticks;
|
||||||
import org.bukkit.Bukkit;
|
import org.bukkit.Bukkit;
|
||||||
|
import org.bukkit.OfflinePlayer;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
import org.bukkit.event.Listener;
|
import org.bukkit.event.Listener;
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
@ -65,15 +66,18 @@ public class Teams extends Appliance implements DisplayName.Prefixed, DisplayNam
|
|||||||
}
|
}
|
||||||
|
|
||||||
public boolean canLogin(UUID playerId) {
|
public boolean canLogin(UUID playerId) {
|
||||||
|
OfflinePlayer offlinePlayer = Bukkit.getOfflinePlayer(playerId);
|
||||||
|
if(offlinePlayer.isOp()) return true;
|
||||||
|
|
||||||
return this.teams.stream()
|
return this.teams.stream()
|
||||||
.anyMatch(varoTeam -> varoTeam.hasMember(playerId) && !Objects.requireNonNull(varoTeam.getMemberById(playerId)).isDead);
|
.anyMatch(varoTeam -> varoTeam.hasMember(playerId) && !Objects.requireNonNull(varoTeam.getMemberById(playerId)).isDead);
|
||||||
}
|
}
|
||||||
|
|
||||||
public VaroTeam getTeamFromPlayer(UUID playerId) {
|
public @Nullable VaroTeam getTeamFromPlayer(UUID playerId) {
|
||||||
return this.teams.stream()
|
return this.teams.stream()
|
||||||
.filter(varoTeam -> varoTeam.hasMember(playerId))
|
.filter(varoTeam -> varoTeam.hasMember(playerId))
|
||||||
.findFirst()
|
.findFirst()
|
||||||
.orElseThrow();
|
.orElse(null);
|
||||||
}
|
}
|
||||||
|
|
||||||
public List<VaroTeam> getAllTeams() {
|
public List<VaroTeam> getAllTeams() {
|
||||||
@ -81,6 +85,8 @@ public class Teams extends Appliance implements DisplayName.Prefixed, DisplayNam
|
|||||||
}
|
}
|
||||||
|
|
||||||
public void enforceTeamJoin(Player joinedPlayer) {
|
public void enforceTeamJoin(Player joinedPlayer) {
|
||||||
|
if(joinedPlayer.isOp()) return;
|
||||||
|
|
||||||
DisconnectInfo teamNotCompleteInfo = new DisconnectInfo(
|
DisconnectInfo teamNotCompleteInfo = new DisconnectInfo(
|
||||||
"Teampartner nicht beigetreten",
|
"Teampartner nicht beigetreten",
|
||||||
"Deine Verbindung wurde getrennt, da dein Teampartner keine Verbindung zum Server hergestellt hat!",
|
"Deine Verbindung wurde getrennt, da dein Teampartner keine Verbindung zum Server hergestellt hat!",
|
||||||
@ -96,6 +102,7 @@ public class Teams extends Appliance implements DisplayName.Prefixed, DisplayNam
|
|||||||
);
|
);
|
||||||
|
|
||||||
VaroTeam team = this.getTeamFromPlayer(joinedPlayer.getUniqueId());
|
VaroTeam team = this.getTeamFromPlayer(joinedPlayer.getUniqueId());
|
||||||
|
if(team == null) throw new IllegalStateException("Player must be in a Team");
|
||||||
|
|
||||||
PlayTimer playTimer = Main.instance().getAppliance(PlayTimer.class);
|
PlayTimer playTimer = Main.instance().getAppliance(PlayTimer.class);
|
||||||
boolean isAllowed = playTimer.tryConsumeTicket(team);
|
boolean isAllowed = playTimer.tryConsumeTicket(team);
|
||||||
@ -150,7 +157,7 @@ public class Teams extends Appliance implements DisplayName.Prefixed, DisplayNam
|
|||||||
leftPlayer.getUniqueId()
|
leftPlayer.getUniqueId()
|
||||||
);
|
);
|
||||||
VaroTeam team = this.getTeamFromPlayer(leftPlayer.getUniqueId());
|
VaroTeam team = this.getTeamFromPlayer(leftPlayer.getUniqueId());
|
||||||
team.kickTeam(disconnectInfo);
|
if(team != null) team.kickTeam(disconnectInfo);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -162,8 +169,8 @@ public class Teams extends Appliance implements DisplayName.Prefixed, DisplayNam
|
|||||||
public @Nullable Component getNamePrefix(Player player) {
|
public @Nullable Component getNamePrefix(Player player) {
|
||||||
VaroTeam team = this.getTeamFromPlayer(player.getUniqueId());
|
VaroTeam team = this.getTeamFromPlayer(player.getUniqueId());
|
||||||
return Component.text(
|
return Component.text(
|
||||||
String.format("[%s]", team.name),
|
String.format("[%s]", team != null ? team.name : "?"),
|
||||||
TextColor.fromCSSHexString(team.color)
|
TextColor.fromCSSHexString(team != null ? team.color : "#ffffff")
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -0,0 +1,39 @@
|
|||||||
|
package eu.mhsl.craftattack.spawn.varo.appliances.tooling.adminInvisibility;
|
||||||
|
|
||||||
|
import eu.mhsl.craftattack.spawn.core.Main;
|
||||||
|
import eu.mhsl.craftattack.spawn.core.appliance.Appliance;
|
||||||
|
import net.kyori.adventure.text.Component;
|
||||||
|
import org.bukkit.Bukkit;
|
||||||
|
import org.bukkit.entity.Player;
|
||||||
|
import org.bukkit.event.Listener;
|
||||||
|
import org.bukkit.event.player.PlayerJoinEvent;
|
||||||
|
import org.jetbrains.annotations.NotNull;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
public class AdminInvisibility extends Appliance {
|
||||||
|
public void updateVisibility(PlayerJoinEvent event) {
|
||||||
|
Player target = event.getPlayer();
|
||||||
|
boolean shouldBeHidden = target.isOp();
|
||||||
|
for (Player viewer : Bukkit.getOnlinePlayers()) {
|
||||||
|
if (viewer.equals(target)) continue;
|
||||||
|
|
||||||
|
if (shouldBeHidden) {
|
||||||
|
viewer.hidePlayer(Main.instance(), target);
|
||||||
|
} else {
|
||||||
|
viewer.showPlayer(Main.instance(), target);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if(shouldBeHidden) {
|
||||||
|
target.playerListName(Component.empty());
|
||||||
|
event.joinMessage(null);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected @NotNull List<Listener> listeners() {
|
||||||
|
return List.of(new OnAdminJoinListener());
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,12 @@
|
|||||||
|
package eu.mhsl.craftattack.spawn.varo.appliances.tooling.adminInvisibility;
|
||||||
|
|
||||||
|
import eu.mhsl.craftattack.spawn.core.appliance.ApplianceListener;
|
||||||
|
import org.bukkit.event.EventHandler;
|
||||||
|
import org.bukkit.event.player.PlayerJoinEvent;
|
||||||
|
|
||||||
|
class OnAdminJoinListener extends ApplianceListener<AdminInvisibility> {
|
||||||
|
@EventHandler
|
||||||
|
public void onJoin(PlayerJoinEvent event) {
|
||||||
|
this.getAppliance().updateVisibility(event);
|
||||||
|
}
|
||||||
|
}
|
Reference in New Issue
Block a user