ProjectAres/PGM/src/main/java/tc/oc/pgm/broadcast/Broadcast.java

74 lines
2.5 KiB
Java

package tc.oc.pgm.broadcast;
import javax.annotation.Nullable;
import net.md_5.bungee.api.ChatColor;
import net.md_5.bungee.api.chat.BaseComponent;
import net.md_5.bungee.api.chat.TranslatableComponent;
import org.bukkit.Sound;
import java.time.Duration;
import tc.oc.commons.bukkit.chat.BukkitSound;
import tc.oc.commons.bukkit.chat.TemplateComponent;
import tc.oc.commons.bukkit.localization.MessageTemplate;
import tc.oc.commons.core.chat.Component;
import tc.oc.commons.core.util.TimeUtils;
import tc.oc.pgm.features.FeatureDefinition;
import tc.oc.pgm.features.FeatureInfo;
import tc.oc.pgm.filters.Filter;
import static com.google.common.base.Preconditions.checkNotNull;
@FeatureInfo(name = "broadcast", plural = "broadcasts", singular = {"alert", "tip"})
public class Broadcast extends FeatureDefinition.Impl {
public static final Duration MIN_INTERVAL = TimeUtils.fromTicks(1);
public enum Type {
TIP(new Component(new TranslatableComponent("prefixed.tip"), ChatColor.BLUE),
new BukkitSound(Sound.ENTITY_ENDERMEN_AMBIENT, 1, 1.2f)),
ALERT(new Component(new TranslatableComponent("prefixed.alert"), ChatColor.YELLOW),
new BukkitSound(Sound.BLOCK_NOTE_PLING, 1, 2f));
final BaseComponent prefix;
final BukkitSound sound;
Type(BaseComponent prefix, BukkitSound sound) {
this.prefix = prefix;
this.sound = sound;
}
public BaseComponent format(BaseComponent message) {
return new Component(ChatColor.GRAY, ChatColor.BOLD)
.extra("[")
.extra(prefix)
.extra("] ")
.extra(new Component(message, ChatColor.AQUA).bold(false));
}
}
@Inspect final Type type;
@Inspect final Duration after;
@Inspect final @Nullable Duration every;
@Inspect final int count;
@Inspect final MessageTemplate message;
@Inspect final Filter filter;
public Broadcast(Type type, Duration after, @Nullable Duration every, int count, MessageTemplate message, @Nullable Filter filter) {
this.type = checkNotNull(type);
this.after = checkNotNull(after);
this.every = every;
this.count = count;
this.message = checkNotNull(message);
this.filter = checkNotNull(filter);
}
public BaseComponent getFormattedMessage() {
return type.format(new TemplateComponent(message));
}
public BukkitSound getSound() {
return this.type.sound;
}
}