added sleepTag

This commit is contained in:
Elias Müller 2024-11-24 22:44:48 +01:00
parent 7e3b043c98
commit 39814dae05
4 changed files with 101 additions and 6 deletions

View File

@ -34,13 +34,13 @@ public class AfkTag extends Appliance implements DisplayName.DisplayNamed {
public void resetTiming(Player player) { public void resetTiming(Player player) {
boolean wasAfk = isAfk(player); boolean wasAfk = isAfk(player);
this.afkTimings.put(player, System.currentTimeMillis()); this.afkTimings.put(player, System.currentTimeMillis());
if (wasAfk) updateAfkPrefix(player); if (wasAfk) this.updateAfkPrefix(player);
} }
private void checkAfkPlayers() { private void checkAfkPlayers() {
this.afkTimings.keySet().forEach((player) -> { this.afkTimings.keySet().forEach((player) -> {
if(!isAfk(player)) return; if(!isAfk(player)) return;
updateAfkPrefix(player); this.updateAfkPrefix(player);
}); });
} }
@ -57,8 +57,8 @@ public class AfkTag extends Appliance implements DisplayName.DisplayNamed {
} }
@Override @Override
public @Nullable Component getNamePrefix(Player p) { public @Nullable Component getNamePrefix(Player player) {
if(isAfk(p)) return Component.text("[\uD83D\uDECC]", NamedTextColor.GRAY) if(isAfk(player)) return Component.text("[\uD83D\uDEAB]", NamedTextColor.GRAY)
.hoverEvent(HoverEvent.showText(Component.text("Der Spieler ist AFK"))); .hoverEvent(HoverEvent.showText(Component.text("Der Spieler ist AFK")));
return null; return null;

View File

@ -6,6 +6,7 @@ import eu.mhsl.craftattack.spawn.appliances.adminMarker.AdminMarker;
import eu.mhsl.craftattack.spawn.appliances.adminMarker.AdminMarkerListener; import eu.mhsl.craftattack.spawn.appliances.adminMarker.AdminMarkerListener;
import eu.mhsl.craftattack.spawn.appliances.afkTag.AfkTag; import eu.mhsl.craftattack.spawn.appliances.afkTag.AfkTag;
import eu.mhsl.craftattack.spawn.appliances.outlawed.Outlawed; import eu.mhsl.craftattack.spawn.appliances.outlawed.Outlawed;
import eu.mhsl.craftattack.spawn.appliances.sleepTag.SleepTag;
import eu.mhsl.craftattack.spawn.appliances.yearRank.YearRank; import eu.mhsl.craftattack.spawn.appliances.yearRank.YearRank;
import net.kyori.adventure.text.Component; import net.kyori.adventure.text.Component;
import net.kyori.adventure.text.ComponentBuilder; import net.kyori.adventure.text.ComponentBuilder;
@ -22,7 +23,7 @@ import java.util.logging.Level;
public class DisplayName extends Appliance { public class DisplayName extends Appliance {
public interface DisplayNamed { public interface DisplayNamed {
@Nullable Component getNamePrefix(Player p); @Nullable Component getNamePrefix(Player player);
} }
public void update(Player player) { public void update(Player player) {
@ -30,7 +31,8 @@ public class DisplayName extends Appliance {
List<Supplier<Component>> prefixes = List.of( List<Supplier<Component>> prefixes = List.of(
() -> queryAppliance(Outlawed.class).getNamePrefix(player), () -> queryAppliance(Outlawed.class).getNamePrefix(player),
() -> queryAppliance(YearRank.class).getNamePrefix(player), () -> queryAppliance(YearRank.class).getNamePrefix(player),
() -> queryAppliance(AfkTag.class).getNamePrefix(player) () -> queryAppliance(AfkTag.class).getNamePrefix(player),
() -> queryAppliance(SleepTag.class).getNamePrefix(player)
); );
ComponentBuilder<TextComponent, TextComponent.Builder> playerName = Component.text(); ComponentBuilder<TextComponent, TextComponent.Builder> playerName = Component.text();

View File

@ -0,0 +1,19 @@
package eu.mhsl.craftattack.spawn.appliances.sleepTag;
import eu.mhsl.craftattack.spawn.appliance.ApplianceListener;
import org.bukkit.event.EventHandler;
import org.bukkit.event.player.PlayerBedEnterEvent;
import org.bukkit.event.player.PlayerBedLeaveEvent;
public class SleepStateChangeListener extends ApplianceListener<SleepTag> {
@EventHandler
public void onBedEnter(PlayerBedEnterEvent event) {
if(!event.getBedEnterResult().equals(PlayerBedEnterEvent.BedEnterResult.OK)) return;
getAppliance().updateSleeping(event.getPlayer(), true);
}
@EventHandler
public void onBedLeave(PlayerBedLeaveEvent event) {
getAppliance().updateSleeping(event.getPlayer(), false);
}
}

View File

@ -0,0 +1,74 @@
package eu.mhsl.craftattack.spawn.appliances.sleepTag;
import eu.mhsl.craftattack.spawn.Main;
import eu.mhsl.craftattack.spawn.appliance.Appliance;
import eu.mhsl.craftattack.spawn.appliances.displayName.DisplayName;
import net.kyori.adventure.text.Component;
import net.kyori.adventure.text.event.HoverEvent;
import net.kyori.adventure.text.format.NamedTextColor;
import net.kyori.adventure.util.Ticks;
import org.bukkit.Bukkit;
import org.bukkit.entity.Player;
import org.bukkit.event.Listener;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
public class SleepTag extends Appliance implements DisplayName.DisplayNamed {
private final Set<Player> sleepingPlayers = new HashSet<>();
@Override
public void onEnable() {
Bukkit.getScheduler().runTaskTimerAsynchronously(
Main.instance(),
this::cleanup,
Ticks.TICKS_PER_SECOND * 60,
Ticks.TICKS_PER_SECOND * 60
);
}
public void updateSleeping(Player player, boolean isSleeping) {
if(isSleeping) {
this.sleepingPlayers.add(player);
} else {
this.sleepingPlayers.remove(player);
}
this.updateDisplayName(player);
}
private void updateDisplayName(Player player) {
Main.instance().getAppliance(DisplayName.class).update(player);
}
private void cleanup() {
System.out.println("before: " + this.sleepingPlayers);
List<Player> invalidEntries = this.sleepingPlayers.stream()
.filter(player -> !player.isConnected())
.filter(player -> !player.isSleeping())
.toList();
System.out.println("Found invalid: " + invalidEntries);
invalidEntries.forEach(this.sleepingPlayers::remove);
invalidEntries.forEach(this::updateDisplayName);
System.out.println("after: " + this.sleepingPlayers);
}
@Override
public @Nullable Component getNamePrefix(Player player) {
System.out.println("Testfor sleeping");
if(this.sleepingPlayers.contains(player))
return Component.text("[\uD83D\uDECC]", NamedTextColor.GRAY)
.hoverEvent(HoverEvent.showText(Component.text("Der Spieler liegt in einem Bett")));
return null;
}
@Override
protected @NotNull List<Listener> listeners() {
return List.of(new SleepStateChangeListener());
}
}