added chatmute
This commit is contained in:
parent
2a52177043
commit
06641c5d84
@ -0,0 +1,44 @@
|
|||||||
|
package eu.mhsl.craftattack.spawn.appliances.chatMute;
|
||||||
|
|
||||||
|
import eu.mhsl.craftattack.spawn.appliance.Appliance;
|
||||||
|
import eu.mhsl.craftattack.spawn.appliance.ApplianceCommand;
|
||||||
|
import org.bukkit.NamespacedKey;
|
||||||
|
import org.bukkit.entity.Player;
|
||||||
|
import org.bukkit.event.Listener;
|
||||||
|
import org.bukkit.persistence.PersistentDataContainer;
|
||||||
|
import org.bukkit.persistence.PersistentDataType;
|
||||||
|
import org.jetbrains.annotations.NotNull;
|
||||||
|
import org.jetbrains.annotations.Nullable;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Locale;
|
||||||
|
import java.util.Objects;
|
||||||
|
|
||||||
|
public class ChatMute extends Appliance {
|
||||||
|
private static final String namespace = ChatMute.class.getSimpleName().toLowerCase(Locale.ROOT);
|
||||||
|
public static NamespacedKey mutedUntilKey = new NamespacedKey(namespace, "mutedUntilMillis".toLowerCase());
|
||||||
|
|
||||||
|
public void mutePlayer(Player player, int durationHours) {
|
||||||
|
PersistentDataContainer container = player.getPersistentDataContainer();
|
||||||
|
long mutedUntil = System.currentTimeMillis() + (long) durationHours * 60 * 60 * 1000;
|
||||||
|
container.set(ChatMute.mutedUntilKey, PersistentDataType.LONG, mutedUntil);
|
||||||
|
}
|
||||||
|
|
||||||
|
public @Nullable Long muteStatus(Player player) {
|
||||||
|
PersistentDataContainer container = player.getPersistentDataContainer();
|
||||||
|
if(!container.has(mutedUntilKey)) return null;
|
||||||
|
long mutedUntil = Objects.requireNonNull(container.get(mutedUntilKey, PersistentDataType.LONG));
|
||||||
|
if(mutedUntil < System.currentTimeMillis()) return null;
|
||||||
|
return mutedUntil;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected @NotNull List<ApplianceCommand<?>> commands() {
|
||||||
|
return List.of(new MuteCommand());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected @NotNull List<Listener> listeners() {
|
||||||
|
return List.of(new ChatMuteListener());
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,25 @@
|
|||||||
|
package eu.mhsl.craftattack.spawn.appliances.chatMute;
|
||||||
|
|
||||||
|
import eu.mhsl.craftattack.spawn.appliance.ApplianceListener;
|
||||||
|
import eu.mhsl.craftattack.spawn.util.text.DataSizeConverter;
|
||||||
|
import io.papermc.paper.event.player.AsyncChatEvent;
|
||||||
|
import net.kyori.adventure.text.Component;
|
||||||
|
import net.kyori.adventure.text.format.NamedTextColor;
|
||||||
|
import org.bukkit.event.EventHandler;
|
||||||
|
import org.jetbrains.annotations.Nullable;
|
||||||
|
|
||||||
|
public class ChatMuteListener extends ApplianceListener<ChatMute> {
|
||||||
|
@EventHandler
|
||||||
|
public void onChat(AsyncChatEvent event) {
|
||||||
|
@Nullable Long muteDuration = this.getAppliance().muteStatus(event.getPlayer());
|
||||||
|
if(muteDuration == null) return;
|
||||||
|
event.setCancelled(true);
|
||||||
|
event.getPlayer().sendMessage(Component.text(
|
||||||
|
String.format(
|
||||||
|
"Du bist für %s gestummt!",
|
||||||
|
DataSizeConverter.formatSecondsToHumanReadable((int) ((muteDuration - System.currentTimeMillis()) / 1000))
|
||||||
|
),
|
||||||
|
NamedTextColor.RED
|
||||||
|
));
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,35 @@
|
|||||||
|
package eu.mhsl.craftattack.spawn.appliances.chatMute;
|
||||||
|
|
||||||
|
import eu.mhsl.craftattack.spawn.appliance.ApplianceCommand;
|
||||||
|
import org.bukkit.Bukkit;
|
||||||
|
import org.bukkit.command.Command;
|
||||||
|
import org.bukkit.command.CommandSender;
|
||||||
|
import org.bukkit.entity.Player;
|
||||||
|
import org.jetbrains.annotations.NotNull;
|
||||||
|
import org.jetbrains.annotations.Nullable;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Objects;
|
||||||
|
|
||||||
|
public class MuteCommand extends ApplianceCommand<ChatMute> {
|
||||||
|
public MuteCommand() {
|
||||||
|
super("mute");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void execute(@NotNull CommandSender sender, @NotNull Command command, @NotNull String label, @NotNull String[] args) throws Exception {
|
||||||
|
if(args.length < 2) throw new Error("Syntax: mute <player> <duration in hours>");
|
||||||
|
Player player = Objects.requireNonNull(Bukkit.getPlayer(args[0]));
|
||||||
|
int durationInHours = Integer.parseInt(args[1]);
|
||||||
|
this.getAppliance().mutePlayer(player, durationInHours);
|
||||||
|
sender.sendMessage(String.format("%s wurde für %d Stunden gestummt!", player.getName(), durationInHours));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public @Nullable List<String> onTabComplete(@NotNull CommandSender sender, @NotNull Command command, @NotNull String label, @NotNull String[] args) {
|
||||||
|
if(args.length == 1) {
|
||||||
|
return List.of("1", "2", "4", "8", "24", "48");
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
@ -53,3 +53,4 @@ commands:
|
|||||||
feedback:
|
feedback:
|
||||||
requestFeedback:
|
requestFeedback:
|
||||||
setSpawnpoint:
|
setSpawnpoint:
|
||||||
|
mute:
|
Loading…
x
Reference in New Issue
Block a user