added sleepTag
This commit is contained in:
parent
7e3b043c98
commit
39814dae05
@ -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;
|
||||||
|
@ -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();
|
||||||
|
@ -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);
|
||||||
|
}
|
||||||
|
}
|
@ -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());
|
||||||
|
}
|
||||||
|
}
|
Loading…
x
Reference in New Issue
Block a user