added chat mentions, added setting categories
This commit is contained in:
parent
4c4975b0a4
commit
ebab4cbd34
@ -2,9 +2,10 @@ package eu.mhsl.craftattack.spawn;
|
|||||||
|
|
||||||
import eu.mhsl.craftattack.spawn.api.HttpServer;
|
import eu.mhsl.craftattack.spawn.api.HttpServer;
|
||||||
import eu.mhsl.craftattack.spawn.appliance.Appliance;
|
import eu.mhsl.craftattack.spawn.appliance.Appliance;
|
||||||
import eu.mhsl.craftattack.spawn.appliances.AntiSignEdit.AntiSignEdit;
|
import eu.mhsl.craftattack.spawn.appliances.antiSignEdit.AntiSignEdit;
|
||||||
import eu.mhsl.craftattack.spawn.appliances.adminMarker.AdminMarker;
|
import eu.mhsl.craftattack.spawn.appliances.adminMarker.AdminMarker;
|
||||||
import eu.mhsl.craftattack.spawn.appliances.autoShulker.AutoShulker;
|
import eu.mhsl.craftattack.spawn.appliances.autoShulker.AutoShulker;
|
||||||
|
import eu.mhsl.craftattack.spawn.appliances.chatMention.ChatMention;
|
||||||
import eu.mhsl.craftattack.spawn.appliances.chatMessages.ChatMessages;
|
import eu.mhsl.craftattack.spawn.appliances.chatMessages.ChatMessages;
|
||||||
import eu.mhsl.craftattack.spawn.appliances.customAdvancements.CustomAdvancements;
|
import eu.mhsl.craftattack.spawn.appliances.customAdvancements.CustomAdvancements;
|
||||||
import eu.mhsl.craftattack.spawn.appliances.debug.Debug;
|
import eu.mhsl.craftattack.spawn.appliances.debug.Debug;
|
||||||
@ -73,7 +74,8 @@ public final class Main extends JavaPlugin {
|
|||||||
new PortableCrafting(),
|
new PortableCrafting(),
|
||||||
new AutoShulker(),
|
new AutoShulker(),
|
||||||
new AntiSignEdit(),
|
new AntiSignEdit(),
|
||||||
new HotbarRefill()
|
new HotbarRefill(),
|
||||||
|
new ChatMention()
|
||||||
);
|
);
|
||||||
|
|
||||||
Main.logger.info("Loading appliances...");
|
Main.logger.info("Loading appliances...");
|
||||||
|
@ -0,0 +1,66 @@
|
|||||||
|
package eu.mhsl.craftattack.spawn.appliances.chatMention;
|
||||||
|
|
||||||
|
import eu.mhsl.craftattack.spawn.Main;
|
||||||
|
import eu.mhsl.craftattack.spawn.appliance.Appliance;
|
||||||
|
import eu.mhsl.craftattack.spawn.appliances.settings.Settings;
|
||||||
|
import eu.mhsl.craftattack.spawn.appliances.settings.settings.ChatMentionSetting;
|
||||||
|
import net.kyori.adventure.sound.Sound;
|
||||||
|
import org.bukkit.Bukkit;
|
||||||
|
import org.bukkit.OfflinePlayer;
|
||||||
|
import org.bukkit.event.Listener;
|
||||||
|
import org.jetbrains.annotations.NotNull;
|
||||||
|
|
||||||
|
import java.util.Arrays;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Objects;
|
||||||
|
|
||||||
|
public class ChatMention extends Appliance {
|
||||||
|
private static List<String> playerNames;
|
||||||
|
|
||||||
|
public String formatPlayer(String name) {
|
||||||
|
return "@" + name;
|
||||||
|
}
|
||||||
|
|
||||||
|
public List<String> getPlayerNames() {
|
||||||
|
return playerNames;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void refreshPlayers() {
|
||||||
|
Bukkit.getScheduler().runTaskAsynchronously(
|
||||||
|
Main.instance(),
|
||||||
|
() -> playerNames = Arrays.stream(Bukkit.getOfflinePlayers())
|
||||||
|
.map(OfflinePlayer::getName)
|
||||||
|
.filter(Objects::nonNull)
|
||||||
|
.toList()
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void notifyPlayers(List<String> playerNames) {
|
||||||
|
playerNames.stream()
|
||||||
|
.distinct()
|
||||||
|
.map(Bukkit::getPlayer)
|
||||||
|
.filter(Objects::nonNull)
|
||||||
|
.filter(player -> Settings.instance()
|
||||||
|
.getSetting(player, Settings.Key.ChatMentions, ChatMentionSetting.ChatMentionConfig.class)
|
||||||
|
.notifyOnMention()
|
||||||
|
)
|
||||||
|
.forEach(player -> player.playSound(
|
||||||
|
Sound.sound(
|
||||||
|
org.bukkit.Sound.ENTITY_EXPERIENCE_ORB_PICKUP,
|
||||||
|
Sound.Source.PLAYER,
|
||||||
|
1.0f,
|
||||||
|
1.0f
|
||||||
|
)
|
||||||
|
));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onEnable() {
|
||||||
|
refreshPlayers();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected @NotNull List<Listener> eventHandlers() {
|
||||||
|
return List.of(new ChatMentionListener());
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,46 @@
|
|||||||
|
package eu.mhsl.craftattack.spawn.appliances.chatMention;
|
||||||
|
|
||||||
|
import eu.mhsl.craftattack.spawn.appliance.ApplianceListener;
|
||||||
|
import eu.mhsl.craftattack.spawn.appliances.settings.Settings;
|
||||||
|
import eu.mhsl.craftattack.spawn.appliances.settings.settings.ChatMentionSetting;
|
||||||
|
import io.papermc.paper.event.player.AsyncChatDecorateEvent;
|
||||||
|
import net.kyori.adventure.text.Component;
|
||||||
|
import net.kyori.adventure.text.format.NamedTextColor;
|
||||||
|
import net.kyori.adventure.text.serializer.plain.PlainTextComponentSerializer;
|
||||||
|
import org.bukkit.event.EventHandler;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
public class ChatMentionListener extends ApplianceListener<ChatMention> {
|
||||||
|
@SuppressWarnings("UnstableApiUsage")
|
||||||
|
@EventHandler
|
||||||
|
public void coloringEvent(AsyncChatDecorateEvent event) {
|
||||||
|
String message = PlainTextComponentSerializer.plainText().serialize(event.result());
|
||||||
|
List<String> words = List.of(message.split(" "));
|
||||||
|
List<String> mentioned = new ArrayList<>();
|
||||||
|
|
||||||
|
ChatMentionSetting.ChatMentionConfig config = Settings.instance()
|
||||||
|
.getSetting(event.player(), Settings.Key.ChatMentions, ChatMentionSetting.ChatMentionConfig.class);
|
||||||
|
|
||||||
|
Component result = words.stream()
|
||||||
|
.map(word -> {
|
||||||
|
String wordWithoutAnnotation = word.replace("@", "");
|
||||||
|
boolean isPlayer = getAppliance().getPlayerNames().contains(wordWithoutAnnotation);
|
||||||
|
if(isPlayer && config.applyMentions()) {
|
||||||
|
mentioned.add(wordWithoutAnnotation);
|
||||||
|
return Component.text(
|
||||||
|
getAppliance().formatPlayer(wordWithoutAnnotation),
|
||||||
|
NamedTextColor.GOLD
|
||||||
|
);
|
||||||
|
} else {
|
||||||
|
return Component.text(word);
|
||||||
|
}
|
||||||
|
})
|
||||||
|
.reduce((a, b) -> a.append(Component.text(" ")).append(b))
|
||||||
|
.orElseThrow();
|
||||||
|
|
||||||
|
getAppliance().notifyPlayers(mentioned);
|
||||||
|
event.result(result);
|
||||||
|
}
|
||||||
|
}
|
@ -1,12 +1,25 @@
|
|||||||
package eu.mhsl.craftattack.spawn.appliances.chatMessages;
|
package eu.mhsl.craftattack.spawn.appliances.chatMessages;
|
||||||
|
|
||||||
import eu.mhsl.craftattack.spawn.appliance.Appliance;
|
import eu.mhsl.craftattack.spawn.appliance.Appliance;
|
||||||
|
import net.kyori.adventure.text.Component;
|
||||||
|
import net.kyori.adventure.text.event.ClickEvent;
|
||||||
|
import net.kyori.adventure.text.event.HoverEvent;
|
||||||
|
import net.kyori.adventure.text.format.NamedTextColor;
|
||||||
|
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;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
public class ChatMessages extends Appliance {
|
public class ChatMessages extends Appliance {
|
||||||
|
public Component getReportablePlayerName(Player player) {
|
||||||
|
return Component
|
||||||
|
.text("")
|
||||||
|
.append(player.displayName())
|
||||||
|
.hoverEvent(HoverEvent.showText(Component.text("Klicke, um diesen Spieler zu reporten").color(NamedTextColor.GOLD)))
|
||||||
|
.clickEvent(ClickEvent.clickEvent(ClickEvent.Action.SUGGEST_COMMAND, "/report " + player.getName() + " "));
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@NotNull
|
@NotNull
|
||||||
protected List<Listener> eventHandlers() {
|
protected List<Listener> eventHandlers() {
|
||||||
|
@ -5,12 +5,9 @@ import eu.mhsl.craftattack.spawn.appliances.settings.Settings;
|
|||||||
import eu.mhsl.craftattack.spawn.util.IteratorUtil;
|
import eu.mhsl.craftattack.spawn.util.IteratorUtil;
|
||||||
import io.papermc.paper.event.player.AsyncChatEvent;
|
import io.papermc.paper.event.player.AsyncChatEvent;
|
||||||
import net.kyori.adventure.text.Component;
|
import net.kyori.adventure.text.Component;
|
||||||
import net.kyori.adventure.text.event.ClickEvent;
|
|
||||||
import net.kyori.adventure.text.event.HoverEvent;
|
|
||||||
import net.kyori.adventure.text.format.NamedTextColor;
|
import net.kyori.adventure.text.format.NamedTextColor;
|
||||||
import net.kyori.adventure.text.format.TextColor;
|
import net.kyori.adventure.text.format.TextColor;
|
||||||
import org.bukkit.Color;
|
import org.bukkit.Color;
|
||||||
import org.bukkit.entity.Player;
|
|
||||||
import org.bukkit.event.EventHandler;
|
import org.bukkit.event.EventHandler;
|
||||||
import org.bukkit.event.entity.PlayerDeathEvent;
|
import org.bukkit.event.entity.PlayerDeathEvent;
|
||||||
import org.bukkit.event.player.PlayerJoinEvent;
|
import org.bukkit.event.player.PlayerJoinEvent;
|
||||||
@ -24,7 +21,7 @@ public class ChatMessagesListener extends ApplianceListener<ChatMessages> {
|
|||||||
event.renderer(
|
event.renderer(
|
||||||
(source, sourceDisplayName, message, viewer) ->
|
(source, sourceDisplayName, message, viewer) ->
|
||||||
Component.text("")
|
Component.text("")
|
||||||
.append(getReportablePlayerName(source))
|
.append(getAppliance().getReportablePlayerName(source))
|
||||||
.append(Component.text(" > ").color(TextColor.color(Color.GRAY.asRGB())))
|
.append(Component.text(" > ").color(TextColor.color(Color.GRAY.asRGB())))
|
||||||
.append(message).color(TextColor.color(Color.SILVER.asRGB()))
|
.append(message).color(TextColor.color(Color.SILVER.asRGB()))
|
||||||
);
|
);
|
||||||
@ -38,7 +35,7 @@ public class ChatMessagesListener extends ApplianceListener<ChatMessages> {
|
|||||||
player.sendMessage(
|
player.sendMessage(
|
||||||
Component
|
Component
|
||||||
.text(">>> ").color(NamedTextColor.GREEN)
|
.text(">>> ").color(NamedTextColor.GREEN)
|
||||||
.append(getReportablePlayerName(event.getPlayer()))
|
.append(getAppliance().getReportablePlayerName(event.getPlayer()))
|
||||||
);
|
);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@ -51,7 +48,7 @@ public class ChatMessagesListener extends ApplianceListener<ChatMessages> {
|
|||||||
player.sendMessage(
|
player.sendMessage(
|
||||||
Component
|
Component
|
||||||
.text("<<< ").color(NamedTextColor.RED)
|
.text("<<< ").color(NamedTextColor.RED)
|
||||||
.append(getReportablePlayerName(event.getPlayer()))
|
.append(getAppliance().getReportablePlayerName(event.getPlayer()))
|
||||||
);
|
);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@ -69,12 +66,4 @@ public class ChatMessagesListener extends ApplianceListener<ChatMessages> {
|
|||||||
.color(TextColor.color(Color.SILVER.asRGB()))
|
.color(TextColor.color(Color.SILVER.asRGB()))
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
private Component getReportablePlayerName(Player player) {
|
|
||||||
return Component
|
|
||||||
.text("")
|
|
||||||
.append(player.displayName())
|
|
||||||
.hoverEvent(HoverEvent.showText(Component.text("Klicke, um diesen Spieler zu reporten").color(NamedTextColor.GOLD)))
|
|
||||||
.clickEvent(ClickEvent.clickEvent(ClickEvent.Action.SUGGEST_COMMAND, "/report " + player.getName() + " "));
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
@ -0,0 +1,5 @@
|
|||||||
|
package eu.mhsl.craftattack.spawn.appliances.settings;
|
||||||
|
|
||||||
|
public interface CategorizedSetting {
|
||||||
|
SettingCategory category();
|
||||||
|
}
|
@ -0,0 +1,7 @@
|
|||||||
|
package eu.mhsl.craftattack.spawn.appliances.settings;
|
||||||
|
|
||||||
|
public enum SettingCategory {
|
||||||
|
Gameplay,
|
||||||
|
Chat,
|
||||||
|
Misc,
|
||||||
|
}
|
@ -14,8 +14,10 @@ import org.bukkit.event.Listener;
|
|||||||
import org.bukkit.inventory.Inventory;
|
import org.bukkit.inventory.Inventory;
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
|
|
||||||
|
import java.util.Arrays;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.WeakHashMap;
|
import java.util.WeakHashMap;
|
||||||
|
import java.util.concurrent.atomic.AtomicInteger;
|
||||||
|
|
||||||
public class Settings extends Appliance {
|
public class Settings extends Appliance {
|
||||||
private static Settings settingsInstance;
|
private static Settings settingsInstance;
|
||||||
@ -28,6 +30,7 @@ public class Settings extends Appliance {
|
|||||||
AutoShulker,
|
AutoShulker,
|
||||||
SignEdit,
|
SignEdit,
|
||||||
HotbarReplacer,
|
HotbarReplacer,
|
||||||
|
ChatMentions,
|
||||||
}
|
}
|
||||||
|
|
||||||
public static Settings instance() {
|
public static Settings instance() {
|
||||||
@ -47,13 +50,14 @@ public class Settings extends Appliance {
|
|||||||
if(settingsCache.containsKey(player)) return settingsCache.get(player);
|
if(settingsCache.containsKey(player)) return settingsCache.get(player);
|
||||||
|
|
||||||
List<Setting<?>> settings = List.of(
|
List<Setting<?>> settings = List.of(
|
||||||
new TechnicalTablistSetting(),
|
new PortableCraftingSetting(),
|
||||||
new ShowJoinAndLeaveMessagesSetting(),
|
|
||||||
new EnablePortableCraftingSetting(),
|
|
||||||
new EnableSettingsShortcutSetting(),
|
|
||||||
new AutoShulkerSetting(),
|
new AutoShulkerSetting(),
|
||||||
new SignEditSetting(),
|
new SignEditSetting(),
|
||||||
new HotbarReplaceSetting()
|
new HotbarReplaceSetting(),
|
||||||
|
new ChatMentionSetting(),
|
||||||
|
new ShowJoinAndLeaveMessagesSetting(),
|
||||||
|
new TechnicalTablistSetting(),
|
||||||
|
new SettingsShortcutSetting()
|
||||||
);
|
);
|
||||||
|
|
||||||
settings.forEach(setting -> setting.initializeFromPlayer(player));
|
settings.forEach(setting -> setting.initializeFromPlayer(player));
|
||||||
@ -75,13 +79,58 @@ public class Settings extends Appliance {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public void openSettings(Player player) {
|
public void openSettings(Player player) {
|
||||||
Inventory inventory = Bukkit.createInventory(null, 9, Component.text("Einstellungen"));
|
|
||||||
List<Setting<?>> settings = getSettings(player);
|
List<Setting<?>> settings = getSettings(player);
|
||||||
settings.forEach(setting -> inventory.addItem(setting.buildItem()));
|
Inventory inventory = Bukkit.createInventory(null, calculateInvSize(settings), Component.text("Einstellungen"));
|
||||||
|
|
||||||
|
AtomicInteger row = new AtomicInteger(0);
|
||||||
|
Arrays.stream(SettingCategory.values())
|
||||||
|
.forEach(category -> {
|
||||||
|
List<Setting<?>> categorizedSettings = settings.stream()
|
||||||
|
.filter(setting -> setting instanceof CategorizedSetting)
|
||||||
|
.filter(setting -> ((CategorizedSetting) setting).category().equals(category))
|
||||||
|
.toList();
|
||||||
|
|
||||||
|
for (int i = 0; i < categorizedSettings.size(); i++) {
|
||||||
|
int slot = row.get() * 9 + i % 9;
|
||||||
|
inventory.setItem(slot, categorizedSettings.get(i).buildItem());
|
||||||
|
|
||||||
|
if (i % 9 == 8) {
|
||||||
|
row.incrementAndGet();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
row.incrementAndGet();
|
||||||
|
});
|
||||||
|
|
||||||
|
List<Setting<?>> uncategorizedSettings = settings.stream()
|
||||||
|
.filter(setting -> !(setting instanceof CategorizedSetting))
|
||||||
|
.toList();
|
||||||
|
|
||||||
|
for (int i = 0; i < uncategorizedSettings.size(); i++) {
|
||||||
|
int slot = row.get() * 9 + i % 9;
|
||||||
|
inventory.setItem(slot, uncategorizedSettings.get(i).buildItem());
|
||||||
|
|
||||||
|
if (i % 9 == 8) {
|
||||||
|
row.incrementAndGet();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
player.openInventory(inventory);
|
player.openInventory(inventory);
|
||||||
this.openSettingsInventories.put(player, new OpenSettingsInventory(inventory, settings));
|
this.openSettingsInventories.put(player, new OpenSettingsInventory(inventory, settings));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private int calculateInvSize(List<Setting<?>> settings) {
|
||||||
|
int countOfUncategorized = (int) settings.stream().filter(setting -> !(setting instanceof CategorizedSetting)).count();
|
||||||
|
return Arrays.stream(SettingCategory.values())
|
||||||
|
.map(settingCategory -> settings.stream()
|
||||||
|
.filter(setting -> setting instanceof CategorizedSetting)
|
||||||
|
.filter(setting -> ((CategorizedSetting) setting).category().equals(settingCategory))
|
||||||
|
.count())
|
||||||
|
.map(itemCount -> itemCount + countOfUncategorized)
|
||||||
|
.map(itemCount -> (int) Math.ceil((double) itemCount / 9))
|
||||||
|
.reduce(Integer::sum)
|
||||||
|
.orElse(1) * 9;
|
||||||
|
}
|
||||||
|
|
||||||
public void onSettingsClose(Player player) {
|
public void onSettingsClose(Player player) {
|
||||||
if(!openSettingsInventories.containsKey(player)) return;
|
if(!openSettingsInventories.containsKey(player)) return;
|
||||||
openSettingsInventories.remove(player);
|
openSettingsInventories.remove(player);
|
||||||
|
@ -1,5 +1,7 @@
|
|||||||
package eu.mhsl.craftattack.spawn.appliances.settings.settings;
|
package eu.mhsl.craftattack.spawn.appliances.settings.settings;
|
||||||
|
|
||||||
|
import eu.mhsl.craftattack.spawn.appliances.settings.CategorizedSetting;
|
||||||
|
import eu.mhsl.craftattack.spawn.appliances.settings.SettingCategory;
|
||||||
import eu.mhsl.craftattack.spawn.appliances.settings.Settings;
|
import eu.mhsl.craftattack.spawn.appliances.settings.Settings;
|
||||||
import eu.mhsl.craftattack.spawn.appliances.settings.datatypes.SelectSetting;
|
import eu.mhsl.craftattack.spawn.appliances.settings.datatypes.SelectSetting;
|
||||||
import org.bukkit.Material;
|
import org.bukkit.Material;
|
||||||
@ -8,7 +10,7 @@ import org.bukkit.NamespacedKey;
|
|||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Locale;
|
import java.util.Locale;
|
||||||
|
|
||||||
public class AutoShulkerSetting extends SelectSetting {
|
public class AutoShulkerSetting extends SelectSetting implements CategorizedSetting {
|
||||||
private static final String namespace = AutoShulkerSetting.class.getSimpleName().toLowerCase(Locale.ROOT);
|
private static final String namespace = AutoShulkerSetting.class.getSimpleName().toLowerCase(Locale.ROOT);
|
||||||
public static Options.Option disabled = new Options.Option("Deaktiviert", new NamespacedKey(namespace, "disabled"));
|
public static Options.Option disabled = new Options.Option("Deaktiviert", new NamespacedKey(namespace, "disabled"));
|
||||||
public static Options.Option notFromPlayers = new Options.Option("Keine manuell gedroppten Items", new NamespacedKey(namespace, "noplayerdrops"));
|
public static Options.Option notFromPlayers = new Options.Option("Keine manuell gedroppten Items", new NamespacedKey(namespace, "noplayerdrops"));
|
||||||
@ -40,4 +42,9 @@ public class AutoShulkerSetting extends SelectSetting {
|
|||||||
protected Options.Option defaultValue() {
|
protected Options.Option defaultValue() {
|
||||||
return disabled;
|
return disabled;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public SettingCategory category() {
|
||||||
|
return SettingCategory.Gameplay;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -0,0 +1,48 @@
|
|||||||
|
package eu.mhsl.craftattack.spawn.appliances.settings.settings;
|
||||||
|
|
||||||
|
import eu.mhsl.craftattack.spawn.appliances.settings.CategorizedSetting;
|
||||||
|
import eu.mhsl.craftattack.spawn.appliances.settings.SettingCategory;
|
||||||
|
import eu.mhsl.craftattack.spawn.appliances.settings.Settings;
|
||||||
|
import eu.mhsl.craftattack.spawn.appliances.settings.datatypes.MultiBoolSetting;
|
||||||
|
import org.bukkit.Material;
|
||||||
|
|
||||||
|
public class ChatMentionSetting extends MultiBoolSetting<ChatMentionSetting.ChatMentionConfig> implements CategorizedSetting {
|
||||||
|
@Override
|
||||||
|
public SettingCategory category() {
|
||||||
|
return SettingCategory.Chat;
|
||||||
|
}
|
||||||
|
|
||||||
|
public record ChatMentionConfig(
|
||||||
|
@DisplayName("Spielernamen hervorheben") boolean applyMentions,
|
||||||
|
@DisplayName("Benachrichtigungston") boolean notifyOnMention
|
||||||
|
) {}
|
||||||
|
|
||||||
|
public ChatMentionSetting() {
|
||||||
|
super(Settings.Key.ChatMentions);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected String title() {
|
||||||
|
return "Erwähnungen im Chat";
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected String description() {
|
||||||
|
return "Erwähnungen werden automatisch im Chat angewandt und der Empfänger erhält einen Signalton";
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected Material icon() {
|
||||||
|
return Material.FEATHER;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected ChatMentionConfig defaultValue() {
|
||||||
|
return new ChatMentionConfig(true, true);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Class<?> dataType() {
|
||||||
|
return ChatMentionConfig.class;
|
||||||
|
}
|
||||||
|
}
|
@ -1,10 +1,17 @@
|
|||||||
package eu.mhsl.craftattack.spawn.appliances.settings.settings;
|
package eu.mhsl.craftattack.spawn.appliances.settings.settings;
|
||||||
|
|
||||||
|
import eu.mhsl.craftattack.spawn.appliances.settings.CategorizedSetting;
|
||||||
|
import eu.mhsl.craftattack.spawn.appliances.settings.SettingCategory;
|
||||||
import eu.mhsl.craftattack.spawn.appliances.settings.Settings;
|
import eu.mhsl.craftattack.spawn.appliances.settings.Settings;
|
||||||
import eu.mhsl.craftattack.spawn.appliances.settings.datatypes.MultiBoolSetting;
|
import eu.mhsl.craftattack.spawn.appliances.settings.datatypes.MultiBoolSetting;
|
||||||
import org.bukkit.Material;
|
import org.bukkit.Material;
|
||||||
|
|
||||||
public class HotbarReplaceSetting extends MultiBoolSetting<HotbarReplaceSetting.HotbarReplaceConfig> {
|
public class HotbarReplaceSetting extends MultiBoolSetting<HotbarReplaceSetting.HotbarReplaceConfig> implements CategorizedSetting {
|
||||||
|
@Override
|
||||||
|
public SettingCategory category() {
|
||||||
|
return SettingCategory.Gameplay;
|
||||||
|
}
|
||||||
|
|
||||||
public record HotbarReplaceConfig(
|
public record HotbarReplaceConfig(
|
||||||
@DisplayName("Blöcke") boolean onBlocks,
|
@DisplayName("Blöcke") boolean onBlocks,
|
||||||
@DisplayName("Werkzeuge") boolean onTools,
|
@DisplayName("Werkzeuge") boolean onTools,
|
||||||
|
@ -1,11 +1,13 @@
|
|||||||
package eu.mhsl.craftattack.spawn.appliances.settings.settings;
|
package eu.mhsl.craftattack.spawn.appliances.settings.settings;
|
||||||
|
|
||||||
|
import eu.mhsl.craftattack.spawn.appliances.settings.CategorizedSetting;
|
||||||
|
import eu.mhsl.craftattack.spawn.appliances.settings.SettingCategory;
|
||||||
import eu.mhsl.craftattack.spawn.appliances.settings.Settings;
|
import eu.mhsl.craftattack.spawn.appliances.settings.Settings;
|
||||||
import eu.mhsl.craftattack.spawn.appliances.settings.datatypes.BoolSetting;
|
import eu.mhsl.craftattack.spawn.appliances.settings.datatypes.BoolSetting;
|
||||||
import org.bukkit.Material;
|
import org.bukkit.Material;
|
||||||
|
|
||||||
public class EnablePortableCraftingSetting extends BoolSetting {
|
public class PortableCraftingSetting extends BoolSetting implements CategorizedSetting {
|
||||||
public EnablePortableCraftingSetting() {
|
public PortableCraftingSetting() {
|
||||||
super(Settings.Key.EnablePortableCrafting);
|
super(Settings.Key.EnablePortableCrafting);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -28,4 +30,9 @@ public class EnablePortableCraftingSetting extends BoolSetting {
|
|||||||
protected Boolean defaultValue() {
|
protected Boolean defaultValue() {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public SettingCategory category() {
|
||||||
|
return SettingCategory.Gameplay;
|
||||||
|
}
|
||||||
}
|
}
|
@ -1,11 +1,13 @@
|
|||||||
package eu.mhsl.craftattack.spawn.appliances.settings.settings;
|
package eu.mhsl.craftattack.spawn.appliances.settings.settings;
|
||||||
|
|
||||||
|
import eu.mhsl.craftattack.spawn.appliances.settings.CategorizedSetting;
|
||||||
|
import eu.mhsl.craftattack.spawn.appliances.settings.SettingCategory;
|
||||||
import eu.mhsl.craftattack.spawn.appliances.settings.Settings;
|
import eu.mhsl.craftattack.spawn.appliances.settings.Settings;
|
||||||
import eu.mhsl.craftattack.spawn.appliances.settings.datatypes.BoolSetting;
|
import eu.mhsl.craftattack.spawn.appliances.settings.datatypes.BoolSetting;
|
||||||
import org.bukkit.Material;
|
import org.bukkit.Material;
|
||||||
|
|
||||||
public class EnableSettingsShortcutSetting extends BoolSetting {
|
public class SettingsShortcutSetting extends BoolSetting implements CategorizedSetting {
|
||||||
public EnableSettingsShortcutSetting() {
|
public SettingsShortcutSetting() {
|
||||||
super(Settings.Key.EnableSettingsShortcut);
|
super(Settings.Key.EnableSettingsShortcut);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -28,4 +30,9 @@ public class EnableSettingsShortcutSetting extends BoolSetting {
|
|||||||
protected Boolean defaultValue() {
|
protected Boolean defaultValue() {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public SettingCategory category() {
|
||||||
|
return SettingCategory.Misc;
|
||||||
|
}
|
||||||
}
|
}
|
@ -1,10 +1,12 @@
|
|||||||
package eu.mhsl.craftattack.spawn.appliances.settings.settings;
|
package eu.mhsl.craftattack.spawn.appliances.settings.settings;
|
||||||
|
|
||||||
|
import eu.mhsl.craftattack.spawn.appliances.settings.CategorizedSetting;
|
||||||
|
import eu.mhsl.craftattack.spawn.appliances.settings.SettingCategory;
|
||||||
import eu.mhsl.craftattack.spawn.appliances.settings.Settings;
|
import eu.mhsl.craftattack.spawn.appliances.settings.Settings;
|
||||||
import eu.mhsl.craftattack.spawn.appliances.settings.datatypes.BoolSetting;
|
import eu.mhsl.craftattack.spawn.appliances.settings.datatypes.BoolSetting;
|
||||||
import org.bukkit.Material;
|
import org.bukkit.Material;
|
||||||
|
|
||||||
public class ShowJoinAndLeaveMessagesSetting extends BoolSetting {
|
public class ShowJoinAndLeaveMessagesSetting extends BoolSetting implements CategorizedSetting {
|
||||||
public ShowJoinAndLeaveMessagesSetting() {
|
public ShowJoinAndLeaveMessagesSetting() {
|
||||||
super(Settings.Key.ShowJoinAndLeaveMessages);
|
super(Settings.Key.ShowJoinAndLeaveMessages);
|
||||||
}
|
}
|
||||||
@ -28,4 +30,9 @@ public class ShowJoinAndLeaveMessagesSetting extends BoolSetting {
|
|||||||
protected Boolean defaultValue() {
|
protected Boolean defaultValue() {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public SettingCategory category() {
|
||||||
|
return SettingCategory.Chat;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,5 +1,7 @@
|
|||||||
package eu.mhsl.craftattack.spawn.appliances.settings.settings;
|
package eu.mhsl.craftattack.spawn.appliances.settings.settings;
|
||||||
|
|
||||||
|
import eu.mhsl.craftattack.spawn.appliances.settings.CategorizedSetting;
|
||||||
|
import eu.mhsl.craftattack.spawn.appliances.settings.SettingCategory;
|
||||||
import eu.mhsl.craftattack.spawn.appliances.settings.Settings;
|
import eu.mhsl.craftattack.spawn.appliances.settings.Settings;
|
||||||
import eu.mhsl.craftattack.spawn.appliances.settings.datatypes.SelectSetting;
|
import eu.mhsl.craftattack.spawn.appliances.settings.datatypes.SelectSetting;
|
||||||
import org.bukkit.Material;
|
import org.bukkit.Material;
|
||||||
@ -8,7 +10,7 @@ import org.bukkit.NamespacedKey;
|
|||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Locale;
|
import java.util.Locale;
|
||||||
|
|
||||||
public class SignEditSetting extends SelectSetting {
|
public class SignEditSetting extends SelectSetting implements CategorizedSetting {
|
||||||
private static final String namespace = SignEditSetting.class.getSimpleName().toLowerCase(Locale.ROOT);
|
private static final String namespace = SignEditSetting.class.getSimpleName().toLowerCase(Locale.ROOT);
|
||||||
public static Options.Option editable = new Options.Option("Bearbeitbar", new NamespacedKey(namespace, "editable"));
|
public static Options.Option editable = new Options.Option("Bearbeitbar", new NamespacedKey(namespace, "editable"));
|
||||||
public static Options.Option editableWhenEmpty = new Options.Option("Bearbeitbar wenn leer", new NamespacedKey(namespace, "emptyeditable"));
|
public static Options.Option editableWhenEmpty = new Options.Option("Bearbeitbar wenn leer", new NamespacedKey(namespace, "emptyeditable"));
|
||||||
@ -40,4 +42,9 @@ public class SignEditSetting extends SelectSetting {
|
|||||||
protected Options.Option defaultValue() {
|
protected Options.Option defaultValue() {
|
||||||
return editableWhenEmpty;
|
return editableWhenEmpty;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public SettingCategory category() {
|
||||||
|
return SettingCategory.Gameplay;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,10 +1,12 @@
|
|||||||
package eu.mhsl.craftattack.spawn.appliances.settings.settings;
|
package eu.mhsl.craftattack.spawn.appliances.settings.settings;
|
||||||
|
|
||||||
|
import eu.mhsl.craftattack.spawn.appliances.settings.CategorizedSetting;
|
||||||
|
import eu.mhsl.craftattack.spawn.appliances.settings.SettingCategory;
|
||||||
import eu.mhsl.craftattack.spawn.appliances.settings.Settings;
|
import eu.mhsl.craftattack.spawn.appliances.settings.Settings;
|
||||||
import eu.mhsl.craftattack.spawn.appliances.settings.datatypes.BoolSetting;
|
import eu.mhsl.craftattack.spawn.appliances.settings.datatypes.BoolSetting;
|
||||||
import org.bukkit.Material;
|
import org.bukkit.Material;
|
||||||
|
|
||||||
public class TechnicalTablistSetting extends BoolSetting {
|
public class TechnicalTablistSetting extends BoolSetting implements CategorizedSetting {
|
||||||
public TechnicalTablistSetting() {
|
public TechnicalTablistSetting() {
|
||||||
super(Settings.Key.TechnicalTab);
|
super(Settings.Key.TechnicalTab);
|
||||||
}
|
}
|
||||||
@ -28,4 +30,9 @@ public class TechnicalTablistSetting extends BoolSetting {
|
|||||||
protected Boolean defaultValue() {
|
protected Boolean defaultValue() {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public SettingCategory category() {
|
||||||
|
return SettingCategory.Misc;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user