onFinish(Player player, SignGUIResult result);
26 | }
27 |
--------------------------------------------------------------------------------
/src/main/java/fr/openmc/api/input/signgui/SignGUIResult.java:
--------------------------------------------------------------------------------
1 | package fr.openmc.api.input.signgui;
2 |
3 | import org.bukkit.ChatColor;
4 |
5 | // Ce code est basé sur le fichier SignGUIResult.java du dépôt SignGUI
6 | // (https://github.com/Rapha149/SignGUI). Licence originale : MIT.
7 | /**
8 | * The result of the sign editing.
9 | */
10 | public class SignGUIResult {
11 |
12 | private final String[] lines;
13 |
14 | SignGUIResult(String[] lines) {
15 | this.lines = lines;
16 | }
17 |
18 | /**
19 | * @return The lines of the sign when the player finished editing.
20 | */
21 | public String[] getLines() {
22 | return lines;
23 | }
24 |
25 | /**
26 | * Used for getting a specific line of the sign.
27 | * @param index The index of the desired line.
28 | * @return The line at the given index.
29 | */
30 | public String getLine(int index) {
31 | return lines[index];
32 | }
33 |
34 | /**
35 | * Used for getting the lines of the sign without color codes.
36 | * Calls {@link org.bukkit.ChatColor#stripColor(String)} on each line.
37 | * This method only strips color codes with § (not with {@literal &} for example).
38 | *
39 | * @return The lines of the sign without color codes.
40 | */
41 | public String[] getLinesWithoutColor() {
42 | String[] linesWithoutColor = new String[lines.length];
43 | for (int i = 0; i < lines.length; i++)
44 | linesWithoutColor[i] = ChatColor.stripColor(lines[i]);
45 | return linesWithoutColor;
46 | }
47 |
48 | /**
49 | * Used for getting a specific line of the sign without color codes.
50 | * Calls {@link org.bukkit.ChatColor#stripColor(String)} on the line.
51 | * This method only strips color codes with § (not with {@literal &} for example).
52 | *
53 | * @param index The index of the desired line.
54 | * @return The line at the given index without color codes.
55 | */
56 | public String getLineWithoutColor(int index) {
57 | return ChatColor.stripColor(lines[index]);
58 | }
59 | }
60 |
--------------------------------------------------------------------------------
/src/main/java/fr/openmc/api/input/signgui/exception/SignGUIException.java:
--------------------------------------------------------------------------------
1 | package fr.openmc.api.input.signgui.exception;
2 |
3 | // Ce code est basé sur le fichier SignGUIException.java du dépôt SignGUI
4 | // (https://github.com/Rapha149/SignGUI). Licence originale : MIT.
5 | /**
6 | * An exception thrown when an error occurs while using this api.
7 | */
8 | public class SignGUIException extends RuntimeException {
9 |
10 | /**
11 | * {@inheritDoc}
12 | */
13 | public SignGUIException() {
14 | }
15 |
16 | /**
17 | * {@inheritDoc}
18 | */
19 | public SignGUIException(String message) {
20 | super(message);
21 | }
22 |
23 | /**
24 | * {@inheritDoc}
25 | */
26 | public SignGUIException(String message, Throwable cause) {
27 | super(message, cause);
28 | }
29 |
30 | /**
31 | * {@inheritDoc}
32 | */
33 | public SignGUIException(Throwable cause) {
34 | super(cause);
35 | }
36 |
37 | /**
38 | * {@inheritDoc}
39 | */
40 | public SignGUIException(String message, Throwable cause, boolean enableSuppression, boolean writableStackTrace) {
41 | super(message, cause, enableSuppression, writableStackTrace);
42 | }
43 | }
44 |
--------------------------------------------------------------------------------
/src/main/java/fr/openmc/api/input/signgui/exception/SignGUIVersionException.java:
--------------------------------------------------------------------------------
1 | package fr.openmc.api.input.signgui.exception;
2 |
3 | // Ce code est basé sur le fichier SignGUIVersionException.java du dépôt SignGUI
4 | // (https://github.com/Rapha149/SignGUI). Licence originale : MIT.
5 | /**
6 | * An exception thrown when the server version is not supported by this api or an error occured during initialization.
7 | */
8 | public class SignGUIVersionException extends Exception {
9 |
10 | /**
11 | * {@inheritDoc}
12 | */
13 | public SignGUIVersionException() {
14 | }
15 |
16 | /**
17 | * {@inheritDoc}
18 | */
19 | public SignGUIVersionException(String message) {
20 | super(message);
21 | }
22 |
23 | /**
24 | * {@inheritDoc}
25 | */
26 | public SignGUIVersionException(String message, Throwable cause) {
27 | super(message, cause);
28 | }
29 |
30 | /**
31 | * {@inheritDoc}
32 | */
33 | public SignGUIVersionException(Throwable cause) {
34 | super(cause);
35 | }
36 |
37 | /**
38 | * {@inheritDoc}
39 | */
40 | public SignGUIVersionException(String message, Throwable cause, boolean enableSuppression, boolean writableStackTrace) {
41 | super(message, cause, enableSuppression, writableStackTrace);
42 | }
43 | }
44 |
--------------------------------------------------------------------------------
/src/main/java/fr/openmc/api/menulib/utils/InventorySize.java:
--------------------------------------------------------------------------------
1 | package fr.openmc.api.menulib.utils;
2 |
3 | import lombok.Getter;
4 |
5 | /**
6 | * Represents different inventory sizes that can be used for organizing game inventories.
7 | * Each inventory size is associated with a specific numerical value representing the
8 | * number of slots available in the inventory.
9 | *
10 | * This enum provides a convenient way to define and manage various inventory sizes:
11 | * - {@code SMALLEST}: 9 slots
12 | * - {@code SMALL}: 18 slots
13 | * - {@code NORMAL}: 27 slots
14 | * - {@code LARGE}: 36 slots
15 | * - {@code LARGER}: 45 slots
16 | * - {@code LARGEST}: 54 slots
17 | */
18 | public enum InventorySize {
19 |
20 | SMALLEST(9),
21 | SMALL(18),
22 | NORMAL(27),
23 | LARGE(36),
24 | LARGER(45),
25 | LARGEST(54);
26 |
27 | @Getter
28 | private final int size;
29 |
30 | /**
31 | * Constructs an InventorySize enum instance with the specified size.
32 | *
33 | * @param size the size of the inventory associated with this enum instance
34 | */
35 | InventorySize(int size) {
36 | this.size = size;
37 | }
38 | }
--------------------------------------------------------------------------------
/src/main/java/fr/openmc/core/CommandsManager.java:
--------------------------------------------------------------------------------
1 | package fr.openmc.core;
2 |
3 | import fr.openmc.api.cooldown.CooldownInterceptor;
4 | import fr.openmc.core.commands.admin.freeze.FreezeCommand;
5 | import fr.openmc.core.commands.debug.ChronometerCommand;
6 | import fr.openmc.core.commands.debug.CooldownCommand;
7 | import fr.openmc.core.commands.fun.Diceroll;
8 | import fr.openmc.core.commands.fun.Playtime;
9 | import fr.openmc.core.commands.utils.*;
10 | import fr.openmc.core.features.adminshop.AdminShopCommand;
11 | import fr.openmc.core.features.friend.FriendCommand;
12 | import fr.openmc.core.features.friend.FriendManager;
13 | import fr.openmc.core.features.mailboxes.MailboxCommand;
14 | import fr.openmc.core.features.quests.command.QuestCommand;
15 | import fr.openmc.core.features.updates.UpdateCommand;
16 | import lombok.Getter;
17 | import revxrsal.commands.bukkit.BukkitCommandHandler;
18 |
19 | public class CommandsManager {
20 | @Getter static CommandsManager instance;
21 | @Getter static BukkitCommandHandler handler;
22 |
23 | public CommandsManager() {
24 | instance = this;
25 | OMCPlugin plugin = OMCPlugin.getInstance();
26 | handler = BukkitCommandHandler.create(plugin);
27 |
28 | handler.registerCondition(new CooldownInterceptor());
29 |
30 | registerSuggestions();
31 | registerCommands();
32 | }
33 |
34 | private void registerCommands() {
35 | handler.register(
36 | new Socials(),
37 | new Spawn(),
38 | new UpdateCommand(),
39 | new Rtp(),
40 | new SetSpawn(),
41 | new Playtime(),
42 | new Diceroll(),
43 | new CooldownCommand(),
44 | new ChronometerCommand(),
45 | new FreezeCommand(),
46 | new MailboxCommand(OMCPlugin.getInstance()),
47 | new FriendCommand(),
48 | new QuestCommand(),
49 | new Restart(),
50 | new AdminShopCommand()
51 | );
52 | }
53 |
54 | private void registerSuggestions() {
55 | FriendManager.getInstance().initCommandSuggestion();
56 | }
57 | }
58 |
--------------------------------------------------------------------------------
/src/main/java/fr/openmc/core/ListenersManager.java:
--------------------------------------------------------------------------------
1 | package fr.openmc.core;
2 |
3 | import fr.openmc.api.input.ChatInput;
4 | import fr.openmc.api.input.location.ItemInteraction;
5 | import fr.openmc.core.features.bossbar.listeners.BossbarListener;
6 | import fr.openmc.core.features.mailboxes.MailboxListener;
7 | import fr.openmc.core.features.updates.UpdateListener;
8 | import fr.openmc.core.listeners.*;
9 | import org.bukkit.Bukkit;
10 | import org.bukkit.Server;
11 | import org.bukkit.event.Listener;
12 | import org.bukkit.plugin.java.JavaPlugin;
13 |
14 | public class ListenersManager {
15 | public ListenersManager() {
16 | registerEvents(
17 | new SessionsListener(),
18 | new JoinMessageListener(),
19 | new UpdateListener(),
20 | new ClockInfos(),
21 | new MailboxListener(),
22 | new ChronometerListener(),
23 | new CubeListener(OMCPlugin.getInstance()),
24 | new ItemInteraction(),
25 | new ChatInput(),
26 | new CubeListener(OMCPlugin.getInstance()),
27 | new RespawnListener(),
28 | new SleepListener(),
29 | new PlayerDeathListener(),
30 | new AsyncChatListener(OMCPlugin.getInstance()),
31 | new BossbarListener()
32 | );
33 | }
34 |
35 | private void registerEvents(Listener... args) {
36 | Server server = Bukkit.getServer();
37 | JavaPlugin plugin = OMCPlugin.getInstance();
38 | for (Listener listener : args) {
39 | server.getPluginManager().registerEvents(listener, plugin);
40 | }
41 | }
42 | }
43 |
--------------------------------------------------------------------------------
/src/main/java/fr/openmc/core/commands/admin/freeze/FreezeCommand.java:
--------------------------------------------------------------------------------
1 | package fr.openmc.core.commands.admin.freeze;
2 |
3 | import org.bukkit.entity.Player;
4 | import revxrsal.commands.annotation.Command;
5 | import revxrsal.commands.annotation.Named;
6 | import revxrsal.commands.bukkit.annotation.CommandPermission;
7 |
8 | public class FreezeCommand {
9 |
10 | /**
11 | * Freeze a player
12 | *
13 | * @param player The player who executes the command
14 | * @param target The target player to freeze
15 | */
16 | @Command("freeze")
17 | @CommandPermission("omc.admins.commands.freeze")
18 | public void onCommand(Player player, @Named("player") Player target) {
19 | FreezeManager.switchFreeze(player, target);
20 | }
21 | }
22 |
--------------------------------------------------------------------------------
/src/main/java/fr/openmc/core/commands/debug/ChronometerCommand.java:
--------------------------------------------------------------------------------
1 | package fr.openmc.core.commands.debug;
2 |
3 | import fr.openmc.api.chronometer.Chronometer;
4 | import fr.openmc.api.chronometer.ChronometerType;
5 | import org.bukkit.entity.Player;
6 | import revxrsal.commands.annotation.Command;
7 | import revxrsal.commands.annotation.Description;
8 | import revxrsal.commands.annotation.Named;
9 | import revxrsal.commands.bukkit.annotation.CommandPermission;
10 |
11 | public class ChronometerCommand {
12 | @Command("debug chronometer start")
13 | @CommandPermission("omc.debug.chronometer.start")
14 | @Description("Test du chronometre")
15 | private void chronometerStart(Player target,@Named("time") int time){
16 | if (time > 90) {
17 | target.sendMessage("§4Ne pas dépasser plus de 90s pour le débogage");
18 | return;
19 | }
20 | Chronometer.startChronometer(target, "debug", time, ChronometerType.ACTION_BAR, null, ChronometerType.ACTION_BAR, null);
21 | }
22 |
23 | @Command("debug chronometer stopall")
24 | @CommandPermission("omc.debug.chronometer.stopall")
25 | @Description("Test du chronometre")
26 | private void chronometerStopAll(Player target) {
27 | Chronometer.stopAllChronometer(target, ChronometerType.ACTION_BAR, null);
28 | }
29 |
30 | @Command("debug chronometer stop")
31 | @CommandPermission("omc.debug.chronometer.stop")
32 | @Description("Test du chronometre")
33 | private void chronometerStop(Player target, @Named("group") String group) {
34 | Chronometer.stopChronometer(target, group, ChronometerType.ACTION_BAR, null);
35 | }
36 |
37 | @Command("debug chronometer list")
38 | @CommandPermission("omc.debug.chronometer.list")
39 | @Description("Test du chronometre")
40 | private void chronometerList(Player owner, @Named("target") Player target) {
41 | Chronometer.listChronometers(target, owner);
42 | }
43 | }
44 |
--------------------------------------------------------------------------------
/src/main/java/fr/openmc/core/commands/debug/CooldownCommand.java:
--------------------------------------------------------------------------------
1 | package fr.openmc.core.commands.debug;
2 |
3 | import fr.openmc.api.cooldown.DynamicCooldown;
4 | import fr.openmc.api.cooldown.DynamicCooldownManager;
5 | import net.kyori.adventure.text.Component;
6 | import net.kyori.adventure.text.format.NamedTextColor;
7 | import org.bukkit.entity.Player;
8 | import revxrsal.commands.annotation.AutoComplete;
9 | import revxrsal.commands.annotation.Command;
10 | import revxrsal.commands.annotation.Description;
11 | import revxrsal.commands.annotation.Named;
12 | import revxrsal.commands.bukkit.annotation.CommandPermission;
13 |
14 | public class CooldownCommand {
15 | @Command("debug cooldown")
16 | @CommandPermission("omc.debug.cooldown")
17 | @AutoComplete("success|error")
18 | @Description("Test de cooldown")
19 | @DynamicCooldown(group="test", message = "§c%ms% (%sec%s)")
20 | public void cooldown(Player player, @Named("isSuccess") String isSuccess) {
21 | if (isSuccess.equals("success")) {
22 | player.sendMessage(Component.text("Succès, le cooldown est activé").color(NamedTextColor.GREEN));
23 | DynamicCooldownManager.use(player.getUniqueId().toString(), "test" ,5000);
24 | } else {
25 | player.sendMessage(Component.text("Erreur, vous pouvez refaire la commande").color(NamedTextColor.RED));
26 | }
27 | }
28 | }
29 |
--------------------------------------------------------------------------------
/src/main/java/fr/openmc/core/commands/fun/Diceroll.java:
--------------------------------------------------------------------------------
1 | package fr.openmc.core.commands.fun;
2 |
3 | import java.util.Random;
4 |
5 | import fr.openmc.core.utils.messages.MessageType;
6 | import fr.openmc.core.utils.messages.MessagesManager;
7 | import fr.openmc.core.utils.messages.Prefix;
8 | import net.kyori.adventure.text.Component;
9 | import org.bukkit.entity.Player;
10 | import revxrsal.commands.annotation.Command;
11 | import revxrsal.commands.annotation.Description;
12 | import revxrsal.commands.bukkit.annotation.CommandPermission;
13 |
14 | public class Diceroll {
15 | @Command("diceroll")
16 | @CommandPermission("omc.commands.diceroll")
17 | @Description("Faire un lancé de dés (Donne un nombre aléatoire entre 1 et 10)")
18 | private void diceroll(Player player) {
19 | Random rand = new Random();
20 | int result = rand.nextInt(10) + 1;
21 |
22 |
23 | MessagesManager.sendMessage(player, Component.text("🎲 Le résultat est: §6" + result + "§r 🎲"), Prefix.OPENMC, MessageType.INFO, true);
24 | }
25 | }
26 |
--------------------------------------------------------------------------------
/src/main/java/fr/openmc/core/commands/fun/Playtime.java:
--------------------------------------------------------------------------------
1 | package fr.openmc.core.commands.fun;
2 |
3 | import fr.openmc.core.OMCPlugin;
4 | import fr.openmc.core.utils.DateUtils;
5 | import fr.openmc.core.utils.messages.MessageType;
6 | import fr.openmc.core.utils.messages.MessagesManager;
7 | import fr.openmc.core.utils.messages.Prefix;
8 | import net.kyori.adventure.text.Component;
9 | import org.bukkit.Statistic;
10 | import org.bukkit.entity.Player;
11 | import revxrsal.commands.annotation.Command;
12 | import revxrsal.commands.annotation.Description;
13 | import revxrsal.commands.bukkit.annotation.CommandPermission;
14 |
15 | public class Playtime {
16 | @Command("playtime")
17 | @CommandPermission("omc.commands.playtime")
18 | @Description("Donne votre temps de jeu")
19 | private void playtime(Player player) {
20 | long timePlayed = player.getStatistic(Statistic.PLAY_ONE_MINUTE);
21 |
22 | MessagesManager.sendMessage(player, Component.text(OMCPlugin.getTranslationManager().getTranslation("messages.general.playtime",
23 | "fr", "playTime", DateUtils.convertTime(timePlayed))), Prefix.OPENMC, MessageType.INFO, true);
24 | }
25 | }
26 |
--------------------------------------------------------------------------------
/src/main/java/fr/openmc/core/commands/utils/SetSpawn.java:
--------------------------------------------------------------------------------
1 | package fr.openmc.core.commands.utils;
2 |
3 | import net.kyori.adventure.text.Component;
4 | import org.bukkit.Location;
5 | import org.bukkit.entity.Player;
6 |
7 | import fr.openmc.core.utils.messages.MessageType;
8 | import fr.openmc.core.utils.messages.MessagesManager;
9 | import fr.openmc.core.utils.messages.Prefix;
10 | import revxrsal.commands.annotation.Command;
11 | import revxrsal.commands.annotation.Description;
12 | import revxrsal.commands.bukkit.annotation.CommandPermission;
13 |
14 | public class SetSpawn {
15 |
16 | @Command("setspawn")
17 | @Description("Permet de changer le spawn")
18 | @CommandPermission("omc.admin.commands.setspawn")
19 | public void setSpawn(Player player) {
20 |
21 | Location location = player.getLocation();
22 |
23 | SpawnManager.getInstance().setSpawn(location);
24 |
25 | MessagesManager.sendMessage(player, Component.text("§aVous avez changé le point de spawn en §6X: §e" + location.getBlockX() + "§6, Y:§e" + location.getBlockY() + "§6, Z: §e" + location.getBlockY()), Prefix.OPENMC, MessageType.SUCCESS, true);
26 |
27 | }
28 | }
29 |
--------------------------------------------------------------------------------
/src/main/java/fr/openmc/core/features/adminshop/AdminShopCommand.java:
--------------------------------------------------------------------------------
1 | package fr.openmc.core.features.adminshop;
2 |
3 | import org.bukkit.entity.Player;
4 | import revxrsal.commands.annotation.Command;
5 | import revxrsal.commands.annotation.Description;
6 |
7 |
8 | public class AdminShopCommand {
9 |
10 | @Command("adminshop")
11 | @Description("Ouvrir le menu du shop admin")
12 | public void openAdminShop(Player player) {
13 | AdminShopManager.getInstance().openMainMenu(player);
14 | }
15 |
16 | }
17 |
--------------------------------------------------------------------------------
/src/main/java/fr/openmc/core/features/adminshop/ShopCategory.java:
--------------------------------------------------------------------------------
1 | package fr.openmc.core.features.adminshop;
2 |
3 | import org.bukkit.Material;
4 |
5 | public record ShopCategory(String id, String name, Material material, int position) {}
--------------------------------------------------------------------------------
/src/main/java/fr/openmc/core/features/analytics/AnalyticsManager.java:
--------------------------------------------------------------------------------
1 | package fr.openmc.core.features.analytics;
2 |
3 | import fr.openmc.core.OMCPlugin;
4 | import java.sql.Connection;
5 | import java.sql.SQLException;
6 |
7 | public class AnalyticsManager {
8 | public static boolean isEnabled() {
9 | return OMCPlugin.getConfigs().getBoolean("features.analytics", false);
10 | }
11 |
12 | public static void init_db(Connection conn) throws SQLException {
13 | try {
14 | conn.prepareStatement("CREATE TABLE IF NOT EXISTS stats (player VARCHAR(36) NOT NULL PRIMARY KEY , scope VARCHAR(255) NOT NULL , `value` BIGINT DEFAULT 0);").executeUpdate();
15 | } catch (SQLException e) {
16 | e.printStackTrace();
17 | }
18 | }
19 | }
20 |
--------------------------------------------------------------------------------
/src/main/java/fr/openmc/core/features/bossbar/listeners/BossbarListener.java:
--------------------------------------------------------------------------------
1 | package fr.openmc.core.features.bossbar.listeners;
2 |
3 | import fr.openmc.core.features.bossbar.BossbarManager;
4 | import org.bukkit.event.EventHandler;
5 | import org.bukkit.event.Listener;
6 | import org.bukkit.event.player.PlayerJoinEvent;
7 | import org.bukkit.event.player.PlayerQuitEvent;
8 |
9 | public class BossbarListener implements Listener {
10 |
11 | @EventHandler
12 | public void onPlayerJoin(PlayerJoinEvent event) {
13 | BossbarManager.getInstance().addBossBar(event.getPlayer());
14 | }
15 | @EventHandler
16 | public void onPlayerQuit(PlayerQuitEvent event) {
17 | BossbarManager.getInstance().removeBossBar(event.getPlayer());
18 | }
19 | }
20 |
--------------------------------------------------------------------------------
/src/main/java/fr/openmc/core/features/city/CPermission.java:
--------------------------------------------------------------------------------
1 | package fr.openmc.core.features.city;
2 |
3 | import lombok.Getter;
4 |
5 | public enum CPermission {
6 | OWNER("Propriétaire"), //Impossible à donner sauf avec un transfert
7 | INVITE("Inviter"),
8 | KICK("Expulser"),
9 | CLAIM("Claim"),
10 | SEE_CHUNKS("Voir les Claims"),
11 | RENAME("Renommer"),
12 | MONEY_GIVE("Donner de l'argent"),
13 | MONEY_BALANCE("Voir l'argent"),
14 | MONEY_TAKE("Prendre de l'argent"),
15 | PERMS("Permissions"), // Cette permission est donnée seulement par l'owner
16 | CHEST("Accès au Coffre"),
17 | CHEST_UPGRADE("Améliorer le coffre"),
18 | TYPE("Changer le type de ville"),
19 | MASCOT_MOVE("Déplacer la mascotte"),
20 | MASCOT_SKIN("Changer le skin de la mascotte"),
21 | MASCOT_UPGRADE("Améliorer la mascotte"),
22 | MASCOT_HEAL("Soigner la mascotte")
23 | ;
24 |
25 | @Getter
26 | private final String displayName;
27 |
28 | CPermission(String displayName) {
29 | this.displayName = displayName;
30 | }
31 | }
--------------------------------------------------------------------------------
/src/main/java/fr/openmc/core/features/city/ChunkDataCache.java:
--------------------------------------------------------------------------------
1 | package fr.openmc.core.features.city;
2 |
3 | import fr.openmc.core.utils.ChunkInfo;
4 | import fr.openmc.core.utils.ChunkPos;
5 |
6 | import java.util.Map;
7 |
8 | public class ChunkDataCache {
9 | public static final long CACHE_EXPIRY_MS = 30000; // 30 seconds
10 | public final Map chunkInfoMap;
11 | final long timestamp;
12 |
13 | public ChunkDataCache(Map chunkInfoMap) {
14 | this.chunkInfoMap = chunkInfoMap;
15 | this.timestamp = System.currentTimeMillis();
16 | }
17 |
18 | public boolean isExpired() {
19 | return System.currentTimeMillis() - timestamp > CACHE_EXPIRY_MS;
20 | }
21 | }
22 |
--------------------------------------------------------------------------------
/src/main/java/fr/openmc/core/features/city/CityType.java:
--------------------------------------------------------------------------------
1 | package fr.openmc.core.features.city;
2 |
3 | public enum CityType {
4 | WAR,
5 | PEACE,
6 | }
7 |
--------------------------------------------------------------------------------
/src/main/java/fr/openmc/core/features/city/commands/CityChatCommand.java:
--------------------------------------------------------------------------------
1 | package fr.openmc.core.features.city.commands;
2 |
3 | import fr.openmc.core.features.city.CityChatManager;
4 | import org.bukkit.entity.Player;
5 | import revxrsal.commands.annotation.Command;
6 | import revxrsal.commands.annotation.Description;
7 | import revxrsal.commands.bukkit.annotation.CommandPermission;
8 |
9 | public class CityChatCommand {
10 | @Command({"cc", "city chat", "ville chat"})
11 | @CommandPermission("omc.commands.city.chat")
12 | @Description("Activer ou désactiver le chat de ville")
13 | public void onCityChat(Player sender) {
14 | if (!CityChatManager.isCityChatMember(sender)) {
15 | CityChatManager.addCityChatMember(sender);
16 | } else {
17 | CityChatManager.removeCityChatMember(sender);
18 | }
19 | }
20 | }
21 |
--------------------------------------------------------------------------------
/src/main/java/fr/openmc/core/features/city/conditions/CityClaimCondition.java:
--------------------------------------------------------------------------------
1 | package fr.openmc.core.features.city.conditions;
2 |
3 | import fr.openmc.core.features.city.CPermission;
4 | import fr.openmc.core.features.city.City;
5 | import fr.openmc.core.utils.messages.MessageType;
6 | import fr.openmc.core.utils.messages.MessagesManager;
7 | import fr.openmc.core.utils.messages.Prefix;
8 | import net.kyori.adventure.text.Component;
9 | import org.bukkit.Bukkit;
10 | import org.bukkit.entity.Player;
11 |
12 | /**
13 | * Le but de cette classe est de regrouper toutes les conditions necessaires
14 | * pour claim une zone (utile pour faire une modif sur menu et commandes).
15 | */
16 | public class CityClaimCondition {
17 |
18 | /**
19 | * Retourne un booleen pour dire si la ville peut etre etendu
20 | *
21 | * @param city la ville sur laquelle on fait les actions
22 | * @param player le joueur sur lequel tester les permissions
23 | * @return booleen
24 | */
25 | public static boolean canCityClaim(City city, Player player) {
26 | if (player.getWorld() != Bukkit.getWorld("world")) return false ;
27 |
28 | if (city == null) {
29 | MessagesManager.sendMessage(player, MessagesManager.Message.PLAYERNOCITY.getMessage(), Prefix.CITY, MessageType.ERROR, false);
30 | return false;
31 | }
32 |
33 | if (!(city.hasPermission(player.getUniqueId(), CPermission.CLAIM))) {
34 | MessagesManager.sendMessage(player, Component.text("Tu n'as pas la permission de claim"), Prefix.CITY, MessageType.ERROR, false);
35 | return false;
36 | }
37 |
38 | return true;
39 | }
40 | }
41 |
--------------------------------------------------------------------------------
/src/main/java/fr/openmc/core/features/city/conditions/CityLeaveCondition.java:
--------------------------------------------------------------------------------
1 | package fr.openmc.core.features.city.conditions;
2 |
3 | import fr.openmc.core.features.city.CPermission;
4 | import fr.openmc.core.features.city.City;
5 | import fr.openmc.core.utils.messages.MessageType;
6 | import fr.openmc.core.utils.messages.MessagesManager;
7 | import fr.openmc.core.utils.messages.Prefix;
8 | import net.kyori.adventure.text.Component;
9 | import org.bukkit.entity.Player;
10 |
11 | /**
12 | * Le but de cette classe est de regrouper toutes les conditions necessaires
13 | * pour quitter une ville (utile pour faire une modif sur menu et commandes).
14 | */
15 | public class CityLeaveCondition {
16 |
17 | /**
18 | * Retourne un booleen pour dire si le joueur peut quitter
19 | *
20 | * @param city la ville sur laquelle on veut quitter
21 | * @param player le joueur qui veut quitter
22 | * @return booleen
23 | */
24 | public static boolean canCityLeave(City city, Player player) {
25 | if (city == null) {
26 | MessagesManager.sendMessage(player, MessagesManager.Message.PLAYERNOCITY.getMessage(), Prefix.CITY, MessageType.ERROR, false);
27 | return false;
28 | }
29 |
30 | if (city.hasPermission(player.getUniqueId(), CPermission.OWNER)) {
31 | MessagesManager.sendMessage(player, Component.text("Tu ne peux pas quitter la ville car tu en es le maire, supprime la ou transfère la propriété"), Prefix.CITY, MessageType.ERROR, false);
32 | return false;
33 | }
34 | return true;
35 | }
36 | }
37 |
--------------------------------------------------------------------------------
/src/main/java/fr/openmc/core/features/city/conditions/CityTypeConditions.java:
--------------------------------------------------------------------------------
1 | package fr.openmc.core.features.city.conditions;
2 |
3 | import fr.openmc.core.features.city.CPermission;
4 | import fr.openmc.core.features.city.City;
5 | import fr.openmc.core.utils.messages.MessageType;
6 | import fr.openmc.core.utils.messages.MessagesManager;
7 | import fr.openmc.core.utils.messages.Prefix;
8 | import net.kyori.adventure.text.Component;
9 | import org.bukkit.entity.Player;
10 |
11 | /**
12 | * Le but de cette classe est de regrouper toutes les conditions necessaires
13 | * touchant aux mascottes (utile pour faire une modif sur menu et commandes).
14 | */
15 | public class CityTypeConditions {
16 |
17 | /**
18 | * Retourne un booleen pour dire si la ville peut changer de typê
19 | *
20 | * @param city la ville sur laquelle on teste cela
21 | * @param player le joueur sur lequel tester les permissions
22 | * @return booleen
23 | */
24 | public static boolean canCityChangeType(City city, Player player, boolean reply) {
25 |
26 | if (city == null) {
27 | if (reply) MessagesManager.sendMessage(player, MessagesManager.Message.PLAYERNOCITY.getMessage(), Prefix.CITY, MessageType.ERROR, false);
28 | return false;
29 | }
30 |
31 | if (!(city.hasPermission(player.getUniqueId(), CPermission.TYPE))) {
32 | if (reply) MessagesManager.sendMessage(player, Component.text("Tu n'as pas la permission de changer le status de ta ville"), Prefix.CITY, MessageType.ERROR, false);
33 | return false;
34 | }
35 | return true;
36 | }
37 |
38 | }
39 |
--------------------------------------------------------------------------------
/src/main/java/fr/openmc/core/features/city/events/ChunkClaimedEvent.java:
--------------------------------------------------------------------------------
1 | package fr.openmc.core.features.city.events;
2 |
3 | import fr.openmc.core.features.city.City;
4 | import lombok.Getter;
5 | import org.bukkit.Chunk;
6 | import org.bukkit.event.Event;
7 | import org.bukkit.event.HandlerList;
8 | import org.jetbrains.annotations.NotNull;
9 |
10 | public class ChunkClaimedEvent extends Event {
11 |
12 | private static final HandlerList HANDLERS = new HandlerList();
13 |
14 | @Getter private City city;
15 | @Getter private Chunk chunk;
16 |
17 | public ChunkClaimedEvent(City city, Chunk chunk) {
18 | this.city = city;
19 | this.chunk = chunk;
20 | }
21 |
22 | public static HandlerList getHandlerList() {
23 | return HANDLERS;
24 | }
25 |
26 | @Override
27 | public @NotNull HandlerList getHandlers() {
28 | return HANDLERS;
29 | }
30 |
31 | }
32 |
--------------------------------------------------------------------------------
/src/main/java/fr/openmc/core/features/city/events/CityCreationEvent.java:
--------------------------------------------------------------------------------
1 | package fr.openmc.core.features.city.events;
2 |
3 | import fr.openmc.core.features.city.City;
4 | import fr.openmc.core.features.quests.quests.CityCreateQuest;
5 | import lombok.Getter;
6 | import org.bukkit.entity.Player;
7 | import org.bukkit.event.Event;
8 | import org.bukkit.event.HandlerList;
9 | import org.jetbrains.annotations.NotNull;
10 |
11 | public class CityCreationEvent extends Event {
12 |
13 | @Getter private final City city;
14 | @Getter private final Player owner;
15 |
16 | private static final HandlerList HANDLERS = new HandlerList();
17 |
18 | public CityCreationEvent(City city, Player owner) {
19 | this.city = city;
20 | this.owner = owner;
21 | }
22 |
23 | public static HandlerList getHandlerList() {
24 | return HANDLERS;
25 | }
26 |
27 | @Override
28 | public @NotNull HandlerList getHandlers() {
29 | return HANDLERS;
30 | }
31 |
32 | }
33 |
--------------------------------------------------------------------------------
/src/main/java/fr/openmc/core/features/city/events/CityDeleteEvent.java:
--------------------------------------------------------------------------------
1 | package fr.openmc.core.features.city.events;
2 |
3 | import fr.openmc.core.features.city.City;
4 | import lombok.Getter;
5 | import org.bukkit.event.Event;
6 | import org.bukkit.event.HandlerList;
7 | import org.jetbrains.annotations.NotNull;
8 |
9 | public class CityDeleteEvent extends Event {
10 |
11 | @Getter private City city;
12 |
13 | public CityDeleteEvent(City city) {
14 | this.city = city;
15 | }
16 |
17 | private static final HandlerList HANDLERS = new HandlerList();
18 |
19 | public static HandlerList getHandlerList() {
20 | return HANDLERS;
21 | }
22 |
23 | @Override
24 | public @NotNull HandlerList getHandlers() {
25 | return HANDLERS;
26 | }
27 |
28 | }
29 |
--------------------------------------------------------------------------------
/src/main/java/fr/openmc/core/features/city/events/CityMoneyUpdateEvent.java:
--------------------------------------------------------------------------------
1 | package fr.openmc.core.features.city.events;
2 |
3 | import fr.openmc.core.features.city.City;
4 | import lombok.Getter;
5 | import org.bukkit.event.Event;
6 | import org.bukkit.event.HandlerList;
7 | import org.jetbrains.annotations.NotNull;
8 |
9 | public class CityMoneyUpdateEvent extends Event {
10 |
11 | private static final HandlerList HANDLERS = new HandlerList();
12 |
13 | @Getter private double difference;
14 | @Getter private double before;
15 | @Getter private double after;
16 | @Getter private City city;
17 |
18 | public CityMoneyUpdateEvent(City city, double before, double after) {
19 | this.city = city;
20 | this.before = before;
21 | this.after = after;
22 | this.difference = after - before;
23 | }
24 |
25 | public static HandlerList getHandlerList() {
26 | return HANDLERS;
27 | }
28 |
29 | @Override
30 | public @NotNull HandlerList getHandlers() {
31 | return HANDLERS;
32 | }
33 |
34 | }
35 |
--------------------------------------------------------------------------------
/src/main/java/fr/openmc/core/features/city/events/CityPermissionChangeEvent.java:
--------------------------------------------------------------------------------
1 | package fr.openmc.core.features.city.events;
2 |
3 | import fr.openmc.core.features.city.CPermission;
4 | import fr.openmc.core.features.city.City;
5 | import lombok.Getter;
6 | import org.bukkit.OfflinePlayer;
7 | import org.bukkit.event.Event;
8 | import org.bukkit.event.HandlerList;
9 | import org.jetbrains.annotations.NotNull;
10 |
11 | public class CityPermissionChangeEvent extends Event {
12 |
13 | @Getter private final City city;
14 | @Getter private final OfflinePlayer member;
15 | @Getter private final CPermission permission;
16 | @Getter private final boolean value;
17 |
18 | private static final HandlerList HANDLERS = new HandlerList();
19 |
20 | public CityPermissionChangeEvent(City city, OfflinePlayer member, CPermission permission, boolean value) {
21 | this.city = city;
22 | this.member = member;
23 | this.permission = permission;
24 | this.value = value;
25 | }
26 |
27 | public static HandlerList getHandlerList() {
28 | return HANDLERS;
29 | }
30 |
31 | @Override
32 | public @NotNull HandlerList getHandlers() {
33 | return HANDLERS;
34 | }
35 |
36 | }
37 |
--------------------------------------------------------------------------------
/src/main/java/fr/openmc/core/features/city/events/CityRenameEvent.java:
--------------------------------------------------------------------------------
1 | package fr.openmc.core.features.city.events;
2 |
3 | import fr.openmc.core.features.city.City;
4 | import lombok.Getter;
5 | import org.bukkit.event.Event;
6 | import org.bukkit.event.HandlerList;
7 | import org.jetbrains.annotations.NotNull;
8 |
9 | public class CityRenameEvent extends Event {
10 |
11 | @Getter private String oldName;
12 | @Getter private City city;
13 |
14 | public CityRenameEvent(String oldName, City city) {
15 | this.oldName = oldName;
16 | this.city = city;
17 | }
18 |
19 | private static final HandlerList HANDLERS = new HandlerList();
20 |
21 | public static HandlerList getHandlerList() {
22 | return HANDLERS;
23 | }
24 |
25 | @Override
26 | public @NotNull HandlerList getHandlers() {
27 | return HANDLERS;
28 | }
29 |
30 | }
31 |
--------------------------------------------------------------------------------
/src/main/java/fr/openmc/core/features/city/events/MemberJoinEvent.java:
--------------------------------------------------------------------------------
1 | package fr.openmc.core.features.city.events;
2 |
3 | import fr.openmc.core.features.city.City;
4 | import lombok.Getter;
5 | import org.bukkit.OfflinePlayer;
6 | import org.bukkit.event.Event;
7 | import org.bukkit.event.HandlerList;
8 | import org.jetbrains.annotations.NotNull;
9 |
10 | public class MemberJoinEvent extends Event {
11 |
12 | @Getter private OfflinePlayer player;
13 | @Getter private City city;
14 |
15 | public MemberJoinEvent(OfflinePlayer player, City city) {
16 | this.player = player;
17 | this.city = city;
18 | }
19 |
20 | private static final HandlerList HANDLERS = new HandlerList();
21 |
22 | public static HandlerList getHandlerList() {
23 | return HANDLERS;
24 | }
25 |
26 | @Override
27 | public @NotNull HandlerList getHandlers() {
28 | return HANDLERS;
29 | }
30 |
31 | }
32 |
--------------------------------------------------------------------------------
/src/main/java/fr/openmc/core/features/city/events/MemberLeaveEvent.java:
--------------------------------------------------------------------------------
1 | package fr.openmc.core.features.city.events;
2 |
3 | import fr.openmc.core.features.city.City;
4 | import lombok.Getter;
5 | import org.bukkit.OfflinePlayer;
6 | import org.bukkit.event.Event;
7 | import org.bukkit.event.HandlerList;
8 | import org.jetbrains.annotations.NotNull;
9 |
10 | public class MemberLeaveEvent extends Event {
11 | @Getter private OfflinePlayer player;
12 | @Getter private City city;
13 |
14 | public MemberLeaveEvent(OfflinePlayer player, City city) {
15 | this.player = player;
16 | this.city = city;
17 | }
18 |
19 | private static final HandlerList HANDLERS = new HandlerList();
20 |
21 | public static HandlerList getHandlerList() {
22 | return HANDLERS;
23 | }
24 |
25 | @Override
26 | public @NotNull HandlerList getHandlers() {
27 | return HANDLERS;
28 | }
29 |
30 | }
31 |
--------------------------------------------------------------------------------
/src/main/java/fr/openmc/core/features/city/listeners/CityChatListener.java:
--------------------------------------------------------------------------------
1 | package fr.openmc.core.features.city.listeners;
2 |
3 | import fr.openmc.core.features.city.CityChatManager;
4 | import io.papermc.paper.event.player.AsyncChatEvent;
5 | import net.kyori.adventure.text.Component;
6 | import org.bukkit.entity.Player;
7 | import org.bukkit.event.EventHandler;
8 | import org.bukkit.event.Listener;
9 |
10 | public class CityChatListener implements Listener {
11 |
12 | @EventHandler
13 | public void onPlayerChat(AsyncChatEvent event) {
14 | Player player = event.getPlayer();
15 | Component message = event.message();
16 |
17 | if (CityChatManager.isCityChatMember(player)) {
18 | event.setCancelled(true);
19 | CityChatManager.sendCityChatMessage(player, message);
20 | }
21 | }
22 | }
23 |
--------------------------------------------------------------------------------
/src/main/java/fr/openmc/core/features/city/listeners/CityTypeCooldown.java:
--------------------------------------------------------------------------------
1 | package fr.openmc.core.features.city.listeners;
2 |
3 | import fr.openmc.api.cooldown.DynamicCooldownManager;
4 | import fr.openmc.core.features.city.City;
5 | import fr.openmc.core.features.city.CityManager;
6 | import fr.openmc.core.utils.messages.MessageType;
7 | import fr.openmc.core.utils.messages.MessagesManager;
8 | import fr.openmc.core.utils.messages.Prefix;
9 | import net.kyori.adventure.text.Component;
10 | import org.bukkit.entity.Player;
11 | import org.bukkit.event.EventHandler;
12 | import org.bukkit.event.Listener;
13 | import org.bukkit.event.player.PlayerJoinEvent;
14 |
15 | import java.util.UUID;
16 |
17 | public class CityTypeCooldown implements Listener {
18 |
19 | private static final long COOLDOWN_TIME = 5 * 24 * 60 * 60 * 1000L; // 5 jours en ms
20 |
21 | @EventHandler
22 | void onJoin(PlayerJoinEvent e){
23 | Player player = e.getPlayer();
24 | City city = CityManager.getPlayerCity(player.getUniqueId());
25 | if (city!=null){
26 | String city_uuid = city.getUUID();
27 | if (!DynamicCooldownManager.isReady(city_uuid, "city:type")) {
28 | MessagesManager.sendMessage(player, Component.text("Type de ville changeable dans : " + DynamicCooldownManager.getRemaining(UUID.fromString(city_uuid).toString(), "city:type")/1000 + "s"), Prefix.CITY, MessageType.INFO, false);
29 | } else {
30 | MessagesManager.sendMessage(player, Component.text("Type de ville changeable"), Prefix.CITY, MessageType.INFO, false);
31 | }
32 | }
33 | }
34 | }
35 |
36 |
--------------------------------------------------------------------------------
/src/main/java/fr/openmc/core/features/city/listeners/protections/BlockProtection.java:
--------------------------------------------------------------------------------
1 | package fr.openmc.core.features.city.listeners.protections;
2 |
3 | import fr.openmc.core.features.city.ProtectionsManager;
4 | import org.bukkit.event.EventHandler;
5 | import org.bukkit.event.EventPriority;
6 | import org.bukkit.event.Listener;
7 | import org.bukkit.event.block.BlockBreakEvent;
8 | import org.bukkit.event.block.BlockPlaceEvent;
9 |
10 | public class BlockProtection implements Listener {
11 | @EventHandler(priority = EventPriority.HIGH)
12 | public void onPlaceBlock(BlockPlaceEvent event) {
13 | ProtectionsManager.verify(event.getPlayer(), event, event.getBlock().getLocation());
14 | }
15 |
16 | @EventHandler
17 | void onBlockBreak(BlockBreakEvent event) {
18 | ProtectionsManager.verify(event.getPlayer(), event, event.getBlock().getLocation());
19 | }
20 | }
21 |
--------------------------------------------------------------------------------
/src/main/java/fr/openmc/core/features/city/listeners/protections/BowProtection.java:
--------------------------------------------------------------------------------
1 | package fr.openmc.core.features.city.listeners.protections;
2 |
3 | import com.destroystokyo.paper.event.player.PlayerLaunchProjectileEvent;
4 | import fr.openmc.core.features.city.ProtectionsManager;
5 | import org.bukkit.entity.Player;
6 | import org.bukkit.event.EventHandler;
7 | import org.bukkit.event.Listener;
8 | import org.bukkit.event.entity.EntityShootBowEvent;
9 |
10 | public class BowProtection implements Listener {
11 | @EventHandler
12 | void onLaunchProjectile(PlayerLaunchProjectileEvent event) {
13 | ProtectionsManager.verify(event.getPlayer(), event, event.getPlayer().getLocation());
14 | }
15 |
16 | @EventHandler
17 | public void onEntityShootBow(EntityShootBowEvent event) {
18 | if (!(event.getEntity() instanceof Player player)) return;
19 |
20 | ProtectionsManager.verify(player, event, event.getEntity().getLocation());
21 | }
22 | }
23 |
--------------------------------------------------------------------------------
/src/main/java/fr/openmc/core/features/city/listeners/protections/EntityProtection.java:
--------------------------------------------------------------------------------
1 | package fr.openmc.core.features.city.listeners.protections;
2 |
3 | import fr.openmc.core.features.city.ProtectionsManager;
4 | import org.bukkit.entity.Entity;
5 | import org.bukkit.entity.Player;
6 | import org.bukkit.event.EventHandler;
7 | import org.bukkit.event.Listener;
8 | import org.bukkit.event.player.PlayerArmorStandManipulateEvent;
9 | import org.bukkit.event.player.PlayerInteractEntityEvent;
10 | import org.bukkit.event.player.PlayerShearEntityEvent;
11 | import org.bukkit.inventory.InventoryHolder;
12 | import org.bukkit.inventory.Merchant;
13 |
14 | public class EntityProtection implements Listener {
15 | @EventHandler
16 | public void onArmorStandManipulate(PlayerArmorStandManipulateEvent event) {
17 | ProtectionsManager.verify(event.getPlayer(), event, event.getRightClicked().getLocation());
18 | }
19 |
20 | @EventHandler
21 | void onShear(PlayerShearEntityEvent event) {
22 | ProtectionsManager.verify(event.getPlayer(), event, event.getEntity().getLocation());
23 | }
24 |
25 | @EventHandler
26 | public void onEntityInventoryOpen(PlayerInteractEntityEvent event) {
27 | Player player = event.getPlayer();
28 | Entity entity = event.getRightClicked();
29 |
30 | if (entity instanceof Merchant || entity instanceof InventoryHolder) {
31 | ProtectionsManager.verify(player, event, entity.getLocation());
32 | }
33 | }
34 | }
35 |
--------------------------------------------------------------------------------
/src/main/java/fr/openmc/core/features/city/listeners/protections/FireProtection.java:
--------------------------------------------------------------------------------
1 | package fr.openmc.core.features.city.listeners.protections;
2 |
3 |
4 | import fr.openmc.core.features.city.ProtectionsManager;
5 | import org.bukkit.Location;
6 | import org.bukkit.entity.Player;
7 | import org.bukkit.event.EventHandler;
8 | import org.bukkit.event.Listener;
9 | import org.bukkit.event.block.BlockIgniteEvent;
10 |
11 | public class FireProtection implements Listener {
12 | @EventHandler
13 | public void onFireIgnite(BlockIgniteEvent event) {
14 | Location loc = event.getBlock().getLocation();
15 | Player player = event.getPlayer();
16 |
17 | if (player == null) return;
18 |
19 | ProtectionsManager.verify(event.getPlayer(), event, loc);
20 | }
21 | }
22 |
--------------------------------------------------------------------------------
/src/main/java/fr/openmc/core/features/city/listeners/protections/FishProtection.java:
--------------------------------------------------------------------------------
1 | package fr.openmc.core.features.city.listeners.protections;
2 |
3 | import fr.openmc.core.features.city.ProtectionsManager;
4 | import org.bukkit.event.EventHandler;
5 | import org.bukkit.event.Listener;
6 | import org.bukkit.event.player.PlayerFishEvent;
7 |
8 | public class FishProtection implements Listener {
9 | @EventHandler
10 | void onFish(PlayerFishEvent event) {
11 | ProtectionsManager.verify(event.getPlayer(), event, event.getHook().getLocation());
12 | }
13 | }
14 |
--------------------------------------------------------------------------------
/src/main/java/fr/openmc/core/features/city/listeners/protections/FoodProtection.java:
--------------------------------------------------------------------------------
1 | package fr.openmc.core.features.city.listeners.protections;
2 |
3 | import org.bukkit.event.EventHandler;
4 | import org.bukkit.event.EventPriority;
5 | import org.bukkit.event.Listener;
6 | import org.bukkit.event.player.PlayerItemConsumeEvent;
7 |
8 | public class FoodProtection implements Listener {
9 | @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true)
10 | public void onFoodConsume(PlayerItemConsumeEvent event) {
11 | // on laisse les gens manger
12 | }
13 | }
14 |
--------------------------------------------------------------------------------
/src/main/java/fr/openmc/core/features/city/listeners/protections/HangingProtection.java:
--------------------------------------------------------------------------------
1 | package fr.openmc.core.features.city.listeners.protections;
2 |
3 | import fr.openmc.core.features.city.ProtectionsManager;
4 | import org.bukkit.entity.*;
5 | import org.bukkit.event.EventHandler;
6 | import org.bukkit.event.Listener;
7 | import org.bukkit.event.hanging.HangingBreakByEntityEvent;
8 | import org.bukkit.event.player.PlayerInteractEntityEvent;
9 |
10 | public class HangingProtection implements Listener {
11 | @EventHandler
12 | public void onPlayerInteractEntity(PlayerInteractEntityEvent event) {
13 | if (event.isCancelled()) return;
14 |
15 | Player player = event.getPlayer();
16 | Entity entity = event.getRightClicked();
17 |
18 | if (entity instanceof ItemFrame || entity instanceof GlowItemFrame || entity instanceof Hanging) {
19 | ProtectionsManager.verify(player, event, entity.getLocation());
20 | }
21 | }
22 |
23 | @EventHandler
24 | public void onHangingBreakByEntity(HangingBreakByEntityEvent event) {
25 | if (event.isCancelled()) return;
26 | if (event.getRemover() instanceof Player player) {
27 | ProtectionsManager.verify(player, event, event.getEntity().getLocation());
28 | }
29 | }
30 | }
31 |
--------------------------------------------------------------------------------
/src/main/java/fr/openmc/core/features/city/listeners/protections/LeashProtection.java:
--------------------------------------------------------------------------------
1 | package fr.openmc.core.features.city.listeners.protections;
2 |
3 | import fr.openmc.core.features.city.ProtectionsManager;
4 | import org.bukkit.event.EventHandler;
5 | import org.bukkit.event.Listener;
6 | import org.bukkit.event.entity.PlayerLeashEntityEvent;
7 | import org.bukkit.event.player.PlayerUnleashEntityEvent;
8 |
9 | public class LeashProtection implements Listener {
10 | @EventHandler
11 | void onLeash(PlayerLeashEntityEvent event) {
12 | ProtectionsManager.verify(event.getPlayer(), event, event.getEntity().getLocation());
13 | }
14 |
15 | @EventHandler
16 | void onUnleash(PlayerUnleashEntityEvent event) {
17 | ProtectionsManager.verify(event.getPlayer(), event, event.getEntity().getLocation());
18 | }
19 |
20 | }
21 |
--------------------------------------------------------------------------------
/src/main/java/fr/openmc/core/features/city/listeners/protections/MountProtection.java:
--------------------------------------------------------------------------------
1 | package fr.openmc.core.features.city.listeners.protections;
2 |
3 | import fr.openmc.core.features.city.ProtectionsManager;
4 | import org.bukkit.entity.Entity;
5 | import org.bukkit.entity.Player;
6 | import org.bukkit.entity.Tameable;
7 | import org.bukkit.event.EventHandler;
8 | import org.bukkit.event.Listener;
9 | import org.bukkit.event.entity.EntityMountEvent;
10 |
11 | public class MountProtection implements Listener {
12 | @EventHandler
13 | public void onEntityMount(EntityMountEvent event) {
14 | if (event.isCancelled()) return;
15 | if (!(event.getEntity() instanceof Player player)) return;
16 |
17 | Entity mount = event.getMount();
18 |
19 | if (!(mount instanceof Tameable tameable)) return;
20 |
21 |
22 | if (!tameable.isTamed()) return;
23 |
24 | if (!tameable.getOwnerUniqueId().equals(player.getUniqueId()))
25 | ProtectionsManager.verify(player, event, mount.getLocation());
26 | }
27 | }
28 |
--------------------------------------------------------------------------------
/src/main/java/fr/openmc/core/features/city/listeners/protections/PotionProtection.java:
--------------------------------------------------------------------------------
1 | package fr.openmc.core.features.city.listeners.protections;
2 |
3 | import fr.openmc.core.features.city.City;
4 | import fr.openmc.core.features.city.CityManager;
5 | import fr.openmc.core.features.city.CityType;
6 | import org.bukkit.Location;
7 | import org.bukkit.entity.LivingEntity;
8 | import org.bukkit.entity.Player;
9 | import org.bukkit.entity.ThrownPotion;
10 | import org.bukkit.entity.Witch;
11 | import org.bukkit.event.EventHandler;
12 | import org.bukkit.event.EventPriority;
13 | import org.bukkit.event.Listener;
14 | import org.bukkit.event.entity.PotionSplashEvent;
15 | import org.bukkit.projectiles.ProjectileSource;
16 |
17 | public class PotionProtection implements Listener {
18 | @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true)
19 | public void onPotionSplash(PotionSplashEvent event) {
20 | ThrownPotion potion = event.getPotion();
21 | ProjectileSource shooter = potion.getShooter();
22 |
23 | if (!(shooter instanceof Witch witch))
24 | return;
25 |
26 | Location witchLocation = witch.getLocation();
27 | City city = CityManager.getCityFromChunk(witchLocation.getChunk().getX(), witchLocation.getChunk().getZ());
28 | if (city == null)
29 | return;
30 |
31 | boolean isCityInWar = city.getType().equals(CityType.WAR);
32 |
33 | for (LivingEntity affectedEntity : event.getAffectedEntities()) {
34 | if (!(affectedEntity instanceof Player player))
35 | continue;
36 |
37 | boolean isNotMember = !city.isMember(player);
38 | if (!isNotMember || isCityInWar)
39 | continue;
40 |
41 | event.setCancelled(true);
42 | }
43 | }
44 | }
45 |
--------------------------------------------------------------------------------
/src/main/java/fr/openmc/core/features/city/listeners/protections/TramplingProtection.java:
--------------------------------------------------------------------------------
1 | package fr.openmc.core.features.city.listeners.protections;
2 |
3 | import fr.openmc.core.features.city.ProtectionsManager;
4 | import org.bukkit.Material;
5 | import org.bukkit.block.Block;
6 | import org.bukkit.event.EventHandler;
7 | import org.bukkit.event.Listener;
8 | import org.bukkit.event.block.Action;
9 | import org.bukkit.event.entity.EntityInteractEvent;
10 | import org.bukkit.event.player.PlayerInteractEvent;
11 |
12 | public class TramplingProtection implements Listener {
13 | @EventHandler
14 | public void onEntityInteract(EntityInteractEvent event) {
15 | if (event.isCancelled()) return;
16 | Block block = event.getBlock();
17 | if (block.getType() == Material.FARMLAND) {
18 | ProtectionsManager.verify(event.getEntity(), event, block.getLocation());
19 | }
20 | }
21 |
22 | @EventHandler
23 | public void onPlayerTrampling(PlayerInteractEvent event) {
24 | if (event.isCancelled()) return;
25 | if (event.getAction() == Action.PHYSICAL) {
26 | if (event.getClickedBlock() == null) return;
27 | if (event.getClickedBlock().getType() == Material.FARMLAND) {
28 | ProtectionsManager.verify(event.getPlayer(), event, event.getClickedBlock().getLocation());
29 | }
30 | }
31 | }
32 | }
33 |
--------------------------------------------------------------------------------
/src/main/java/fr/openmc/core/features/city/mascots/Mascot.java:
--------------------------------------------------------------------------------
1 | package fr.openmc.core.features.city.mascots;
2 |
3 | import lombok.Getter;
4 | import lombok.Setter;
5 | import org.bukkit.Chunk;
6 |
7 | import java.util.UUID;
8 |
9 | @Setter
10 | @Getter
11 | public class Mascot {
12 |
13 | private String cityUUID;
14 | private UUID mascotUUID;
15 | private int level;
16 | private boolean immunity;
17 | private boolean alive;
18 | private Chunk chunk;
19 |
20 | public Mascot(String cityUUID, UUID mascotUUID, int level, boolean immunity, boolean alive, Chunk chunk) {
21 | this.cityUUID = cityUUID;
22 | this.mascotUUID = mascotUUID;
23 | this.level = level;
24 | this.immunity = immunity;
25 | this.alive = alive;
26 | this.chunk = chunk;
27 | }
28 | }
29 |
30 |
--------------------------------------------------------------------------------
/src/main/java/fr/openmc/core/features/city/mayor/CityLaw.java:
--------------------------------------------------------------------------------
1 | package fr.openmc.core.features.city.mayor;
2 |
3 | import lombok.Getter;
4 | import lombok.Setter;
5 | import org.bukkit.Location;
6 |
7 |
8 | @Setter
9 | @Getter
10 | public class CityLaw {
11 | private boolean pvp;
12 | private Location warp;
13 |
14 | public CityLaw(boolean pvp, Location warp) {
15 | this.pvp = pvp;
16 | this.warp = warp;
17 | }
18 |
19 | }
--------------------------------------------------------------------------------
/src/main/java/fr/openmc/core/features/city/mayor/ElectionType.java:
--------------------------------------------------------------------------------
1 | package fr.openmc.core.features.city.mayor;
2 |
3 | public enum ElectionType {
4 | ELECTION,
5 | OWNER_CHOOSE,
6 | }
7 |
--------------------------------------------------------------------------------
/src/main/java/fr/openmc/core/features/city/mayor/Mayor.java:
--------------------------------------------------------------------------------
1 | package fr.openmc.core.features.city.mayor;
2 |
3 | import fr.openmc.core.features.city.City;
4 | import lombok.Getter;
5 | import lombok.Setter;
6 | import net.kyori.adventure.text.format.NamedTextColor;
7 |
8 | import java.util.UUID;
9 |
10 | @Getter
11 | @Setter
12 | public class Mayor {
13 | private City city;
14 | private String name;
15 | private UUID UUID;
16 | private NamedTextColor mayorColor;
17 | private int idPerk1;
18 | private int idPerk2;
19 | private int idPerk3;
20 | private ElectionType electionType;
21 |
22 | public Mayor(City city, String mayorName, UUID mayorUUID, NamedTextColor mayorColor, int idPerk1, int idPerk2, int idPerk3, ElectionType electionType) {
23 | this.city = city;
24 | this.name = mayorName;
25 | this.UUID = mayorUUID;
26 | this.mayorColor = mayorColor;
27 | this.idPerk1 = idPerk1;
28 | this.idPerk2 = idPerk2;
29 | this.idPerk3 = idPerk3;
30 | this.electionType = electionType;
31 | }
32 | }
33 |
--------------------------------------------------------------------------------
/src/main/java/fr/openmc/core/features/city/mayor/MayorCandidate.java:
--------------------------------------------------------------------------------
1 | package fr.openmc.core.features.city.mayor;
2 |
3 | import fr.openmc.core.features.city.City;
4 | import lombok.Getter;
5 | import lombok.Setter;
6 | import net.kyori.adventure.text.format.NamedTextColor;
7 |
8 | import java.util.UUID;
9 |
10 | @Getter
11 | public class MayorCandidate {
12 | private final City city;
13 | private final String name;
14 | private final UUID UUID;
15 | @Setter private NamedTextColor candidateColor;
16 | private final int idChoicePerk2;
17 | private final int idChoicePerk3;
18 | @Setter private int vote;
19 |
20 | public MayorCandidate(City city, String candidateName, UUID candidateUUID, NamedTextColor candidateColor, int idChoicePerk2, int idChoicePerk3, int vote) {
21 | this.city = city;
22 | this.name = candidateName;
23 | this.UUID = candidateUUID;
24 | this.candidateColor = candidateColor;
25 | this.idChoicePerk2 = idChoicePerk2;
26 | this.idChoicePerk3 = idChoicePerk3;
27 | this.vote = vote;
28 | }
29 | }
30 |
--------------------------------------------------------------------------------
/src/main/java/fr/openmc/core/features/city/mayor/MayorVote.java:
--------------------------------------------------------------------------------
1 | package fr.openmc.core.features.city.mayor;
2 |
3 | import lombok.Getter;
4 |
5 | import java.util.UUID;
6 |
7 | @Getter
8 | public class MayorVote {
9 | private final UUID voterUUID;
10 | private final MayorCandidate candidate;
11 |
12 | public MayorVote(UUID voterUUID, MayorCandidate candidate) {
13 | this.voterUUID = voterUUID;
14 | this.candidate = candidate;
15 | }
16 | }
17 |
--------------------------------------------------------------------------------
/src/main/java/fr/openmc/core/features/city/mayor/listeners/JoinListener.java:
--------------------------------------------------------------------------------
1 | package fr.openmc.core.features.city.mayor.listeners;
2 |
3 | import fr.openmc.core.features.city.City;
4 | import fr.openmc.core.features.city.CityManager;
5 | import fr.openmc.core.features.city.mayor.ElectionType;
6 | import fr.openmc.core.features.city.mayor.managers.MayorManager;
7 | import org.bukkit.entity.Player;
8 | import org.bukkit.event.EventHandler;
9 | import org.bukkit.event.Listener;
10 | import org.bukkit.event.player.PlayerJoinEvent;
11 |
12 | public class JoinListener implements Listener {
13 |
14 | @EventHandler
15 | public void onPlayerJoin(PlayerJoinEvent event) {
16 | Player player = event.getPlayer();
17 | MayorManager mayorManager = MayorManager.getInstance();
18 | City playerCity = CityManager.getPlayerCity(player.getUniqueId());
19 |
20 | if (playerCity == null) return;
21 |
22 | if (playerCity.getLaw() == null) {
23 | MayorManager.createCityLaws(playerCity, false, null);
24 | }
25 |
26 | if (mayorManager.phaseMayor == 2 && mayorManager.cityMayor.get(playerCity)==null) {
27 | mayorManager.runSetupMayor(playerCity);
28 | } else if (mayorManager.phaseMayor == 1 && mayorManager.cityMayor.get(playerCity)==null) {
29 | if (playerCity.getMembers().size()>=mayorManager.MEMBER_REQ_ELECTION) {
30 | mayorManager.createMayor(null,null, playerCity, null, null, null, null, ElectionType.ELECTION);
31 | }
32 | mayorManager.createMayor(null, null, playerCity, null, null, null, null, ElectionType.OWNER_CHOOSE);
33 |
34 | }
35 | }
36 | }
37 |
--------------------------------------------------------------------------------
/src/main/java/fr/openmc/core/features/city/mayor/listeners/PhaseListener.java:
--------------------------------------------------------------------------------
1 | package fr.openmc.core.features.city.mayor.listeners;
2 |
3 | import fr.openmc.core.OMCPlugin;
4 | import fr.openmc.core.features.city.mayor.managers.MayorManager;
5 | import fr.openmc.core.utils.DateUtils;
6 | import org.bukkit.scheduler.BukkitRunnable;
7 |
8 | import java.sql.SQLException;
9 |
10 | import static fr.openmc.core.features.city.mayor.managers.MayorManager.PHASE_1_DAY;
11 | import static fr.openmc.core.features.city.mayor.managers.MayorManager.PHASE_2_DAY;
12 |
13 | public class PhaseListener {
14 |
15 | /**
16 | * Constructor for the PhaseListener class.
17 | * This class is responsible for managing the phases of the mayor election process.
18 | *
19 | * @param plugin The OMCPlugin instance.
20 | */
21 | public PhaseListener(OMCPlugin plugin) {
22 | MayorManager mayorManager = MayorManager.getInstance();
23 | BukkitRunnable eventRunnable = new BukkitRunnable() {
24 | @Override
25 | public void run() {
26 | int phase = mayorManager.phaseMayor;
27 |
28 | // PHASE 1 - Elections - Mardi à Mercredi
29 | if (phase == 2 && PHASE_1_DAY == DateUtils.getCurrentDayOfWeek()) {
30 | try {
31 | mayorManager.initPhase1();
32 | } catch (SQLException e) {
33 | throw new RuntimeException(e);
34 | }
35 | }
36 |
37 | // PHASE 2 - Maire Elu - Jeudi à Jeudi Prochain
38 | if (phase == 1 && PHASE_2_DAY == DateUtils.getCurrentDayOfWeek()) {
39 | mayorManager.initPhase2();
40 | }
41 | }
42 | };
43 | // 1200 s = 1 min
44 | eventRunnable.runTaskTimer(plugin, 0, 1200);
45 | }
46 |
47 | }
48 |
--------------------------------------------------------------------------------
/src/main/java/fr/openmc/core/features/city/mayor/npcs/MayorNPC.java:
--------------------------------------------------------------------------------
1 | package fr.openmc.core.features.city.mayor.npcs;
2 |
3 | import de.oliver.fancynpcs.api.Npc;
4 | import lombok.Getter;
5 | import lombok.Setter;
6 | import org.bukkit.Location;
7 |
8 | public class MayorNPC {
9 |
10 | @Getter
11 | private Npc npc;
12 | @Getter
13 | private String cityUUID;
14 | @Getter
15 | @Setter
16 | private Location location;
17 |
18 | public MayorNPC(Npc npc, String cityUUID, Location location) {
19 | this.npc = npc;
20 | this.cityUUID=cityUUID;
21 | this.location=location;
22 | }
23 | }
--------------------------------------------------------------------------------
/src/main/java/fr/openmc/core/features/city/mayor/npcs/OwnerNPC.java:
--------------------------------------------------------------------------------
1 | package fr.openmc.core.features.city.mayor.npcs;
2 |
3 | import de.oliver.fancynpcs.api.Npc;
4 | import lombok.Getter;
5 | import lombok.Setter;
6 | import org.bukkit.Location;
7 |
8 | public class OwnerNPC {
9 |
10 | @Getter
11 | private Npc npc;
12 | @Getter
13 | private String cityUUID;
14 | @Getter
15 | @Setter
16 | private Location location;
17 |
18 | public OwnerNPC(Npc npc, String cityUUID, Location location) {
19 | this.npc = npc;
20 | this.cityUUID=cityUUID;
21 | this.location=location;
22 | }
23 | }
--------------------------------------------------------------------------------
/src/main/java/fr/openmc/core/features/city/mayor/perks/PerkType.java:
--------------------------------------------------------------------------------
1 | package fr.openmc.core.features.city.mayor.perks;
2 |
3 | public enum PerkType {
4 | EVENT,
5 | BASIC
6 | ;
7 | }
8 |
--------------------------------------------------------------------------------
/src/main/java/fr/openmc/core/features/city/mayor/perks/basic/CityHunterPerk.java:
--------------------------------------------------------------------------------
1 | package fr.openmc.core.features.city.mayor.perks.basic;
2 |
3 | import fr.openmc.core.features.city.City;
4 | import fr.openmc.core.features.city.CityManager;
5 | import fr.openmc.core.features.city.mayor.managers.MayorManager;
6 | import fr.openmc.core.features.city.mayor.managers.PerkManager;
7 | import fr.openmc.core.features.city.mayor.perks.Perks;
8 | import org.bukkit.entity.Entity;
9 | import org.bukkit.entity.Monster;
10 | import org.bukkit.entity.Player;
11 | import org.bukkit.event.EventHandler;
12 | import org.bukkit.event.Listener;
13 | import org.bukkit.event.entity.EntityDamageByEntityEvent;
14 |
15 | public class CityHunterPerk implements Listener {
16 |
17 | @EventHandler
18 | public void onEntityDamageByEntity(EntityDamageByEntityEvent event) {
19 | if (!(event.getDamager() instanceof Player attacker)) {
20 | return;
21 | }
22 |
23 |
24 | City attackerCity = CityManager.getPlayerCity(attacker.getUniqueId());
25 | if (attackerCity == null) {
26 | return;
27 | }
28 |
29 | if (attackerCity.getMayor() == null) return;
30 |
31 | if (MayorManager.getInstance().phaseMayor != 2) return;
32 |
33 | if (!PerkManager.hasPerk(attackerCity.getMayor(), Perks.CITY_HUNTER.getId())) {
34 | return;
35 | }
36 |
37 | Entity target = event.getEntity();
38 |
39 | if (!(target instanceof Player) && !(target instanceof Monster)) {
40 | return;
41 | }
42 |
43 | if (CityManager.getCityFromChunk(target.getChunk().getX(), target.getChunk().getZ()) != null && CityManager.getCityFromChunk(target.getChunk().getX(), target.getChunk().getZ()) != attackerCity) {
44 | return;
45 | }
46 |
47 | double baseDamage = event.getDamage();
48 | double newDamage = baseDamage * 1.20;
49 |
50 | event.setDamage(newDamage);
51 | }
52 | }
53 |
--------------------------------------------------------------------------------
/src/main/java/fr/openmc/core/features/city/mayor/perks/basic/SymbiosisPerk.java:
--------------------------------------------------------------------------------
1 | package fr.openmc.core.features.city.mayor.perks.basic;
2 |
3 | import fr.openmc.core.features.city.City;
4 | import fr.openmc.core.features.city.CityManager;
5 | import fr.openmc.core.features.city.mayor.managers.PerkManager;
6 | import fr.openmc.core.features.city.mayor.perks.Perks;
7 | import org.bukkit.Bukkit;
8 | import org.bukkit.entity.LivingEntity;
9 | import org.bukkit.entity.Player;
10 | import org.bukkit.event.EventHandler;
11 | import org.bukkit.event.Listener;
12 | import org.bukkit.event.entity.EntityDamageEvent;
13 |
14 | public class SymbiosisPerk implements Listener {
15 |
16 | private static final double RADIUS = 10.0;
17 |
18 | @EventHandler
19 | public void onEntityDamage(EntityDamageEvent event) {
20 | if (!(event.getEntity() instanceof Player)) {
21 | return;
22 | }
23 | Player player = (Player) event.getEntity();
24 |
25 | City playerCity = CityManager.getPlayerCity(player.getUniqueId());
26 | if (playerCity == null) {
27 | return;
28 | }
29 |
30 | if (!PerkManager.hasPerk(playerCity.getMayor(), Perks.SYMBIOSIS.getId())) return;
31 |
32 | LivingEntity mascot = (LivingEntity) Bukkit.getEntity(playerCity.getMascot().getMascotUUID());
33 |
34 | if (mascot == null || !mascot.isValid()) {
35 | return;
36 | }
37 |
38 | if (player.getLocation().distance(mascot.getLocation()) <= RADIUS) {
39 | double originalDamage = event.getDamage();
40 | double reducedDamage = originalDamage * 0.85;
41 | event.setDamage(reducedDamage);
42 | }
43 | }
44 | }
45 |
--------------------------------------------------------------------------------
/src/main/java/fr/openmc/core/features/city/menu/mayor/create/MenuType.java:
--------------------------------------------------------------------------------
1 | package fr.openmc.core.features.city.menu.mayor.create;
2 |
3 | public enum MenuType {
4 | OWNER, // donc le propriétaire qui choisis 3 Perk comme les elections sont désactivé
5 | CANDIDATE, // donc un joueur normal si les elections sont activé
6 | OWNER_1 // donc le propriétaire qui choisis 1 perk evenementiels
7 | ;
8 | }
9 |
--------------------------------------------------------------------------------
/src/main/java/fr/openmc/core/features/contest/ContestEndEvent.java:
--------------------------------------------------------------------------------
1 | package fr.openmc.core.features.contest;
2 |
3 | import lombok.Getter;
4 | import org.bukkit.event.Event;
5 | import org.bukkit.event.HandlerList;
6 | import org.jetbrains.annotations.NotNull;
7 |
8 | import java.util.List;
9 | import java.util.UUID;
10 |
11 | public class ContestEndEvent extends Event {
12 |
13 | @Getter
14 | private final ContestData contestData;
15 | private static final HandlerList HANDLERS = new HandlerList();
16 | @Getter
17 | private final List winners;
18 | @Getter
19 | private final List losers;
20 |
21 | /**
22 | * @param contestData The contest data
23 | * @param winners The list of winners
24 | * @param losers The list of losers
25 | */
26 | public ContestEndEvent(ContestData contestData, List winners, List losers) {
27 | this.contestData = contestData;
28 | this.winners = winners;
29 | this.losers = losers;
30 | }
31 |
32 | public static HandlerList getHandlerList() {
33 | return HANDLERS;
34 | }
35 |
36 | @Override
37 | public @NotNull HandlerList getHandlers() {
38 | return HANDLERS;
39 | }
40 | }
41 |
--------------------------------------------------------------------------------
/src/main/java/fr/openmc/core/features/contest/ContestPlayer.java:
--------------------------------------------------------------------------------
1 | package fr.openmc.core.features.contest;
2 |
3 | import lombok.Getter;
4 | import net.kyori.adventure.text.format.NamedTextColor;
5 |
6 | @Getter
7 | public class ContestPlayer {
8 | private final String name;
9 | private final int points;
10 | private final int camp;
11 | private final NamedTextColor color;
12 |
13 | public ContestPlayer(String name, int points, int camp, NamedTextColor color) {
14 | this.name = name;
15 | this.points = points;
16 | this.camp = camp;
17 | this.color = color;
18 | }
19 | }
20 |
21 |
--------------------------------------------------------------------------------
/src/main/java/fr/openmc/core/features/contest/listeners/ContestIntractEvents.java:
--------------------------------------------------------------------------------
1 | package fr.openmc.core.features.contest.listeners;
2 |
3 | import dev.lone.itemsadder.api.Events.FurnitureInteractEvent;
4 | import org.bukkit.Sound;
5 | import org.bukkit.event.EventHandler;
6 | import org.bukkit.event.Listener;
7 | import org.bukkit.Bukkit;
8 |
9 | public class ContestIntractEvents implements Listener {
10 | @EventHandler
11 | private void onFurnitureInteractEvent(FurnitureInteractEvent furniture) {
12 | if (furniture.getNamespacedID().equals("omc_contest:borne")) {
13 | furniture.getPlayer().playSound(furniture.getPlayer().getLocation(), Sound.BLOCK_BARREL_OPEN, 1.0F, 0.7F);
14 | Bukkit.dispatchCommand(furniture.getPlayer(), "openmc:contest");
15 | }
16 | }
17 | }
18 |
--------------------------------------------------------------------------------
/src/main/java/fr/openmc/core/features/corporation/CorpPermission.java:
--------------------------------------------------------------------------------
1 | package fr.openmc.core.features.corporation;
2 |
3 | import lombok.Getter;
4 |
5 | @Getter
6 | public enum CorpPermission {
7 | OWNER("Propriétaire"),
8 | //CITYMEMBER("Membre de la ville"),
9 | SUPERIOR("Gérant des permission"),
10 | SETCUT("Définir la part de l'entrprise"),
11 | INVITE("Inviter"),
12 | FIRE("Expulser"),
13 | SUPPLY("Réapprovisionner"),
14 | SELLER("Ajouter/Retirer des items en vente"),
15 | LIQUIDATESHOP("Liquider un shop"),
16 | CREATESHOP("Créer un shop"),
17 | DELETESHOP("Supprimer un shop"),
18 | HIRINGER("Embaucher les postulants"),
19 | WITHDRAW("Retirer x$ de l'entreprise"),
20 | DEPOSIT("Ajouter x$ dans l'entreprise")
21 | ;
22 |
23 | private final String displayName;
24 |
25 | CorpPermission(String displayName) {
26 | this.displayName = displayName;
27 | }
28 | }
29 |
--------------------------------------------------------------------------------
/src/main/java/fr/openmc/core/features/corporation/ItemsAdderIntegration.java:
--------------------------------------------------------------------------------
1 | package fr.openmc.core.features.corporation;
2 |
3 | import dev.lone.itemsadder.api.CustomFurniture;
4 | import dev.lone.itemsadder.api.CustomStack;
5 | import org.bukkit.block.Block;
6 |
7 | public class ItemsAdderIntegration {
8 |
9 | public static boolean placeShopFurniture(Block block) {
10 | CustomStack customFurniture = CustomFurniture.getInstance("omc_company:caisse");
11 | if (customFurniture == null || block.getType() != org.bukkit.Material.AIR)
12 | return false;
13 |
14 | CustomFurniture.spawn("omc_company:caisse", block);
15 | return true;
16 | }
17 |
18 | public static boolean removeShopFurniture(Block block) {
19 | CustomStack placed = CustomFurniture.byAlreadySpawned(block);
20 | if (placed == null || !placed.getNamespacedID().equals("omc_company:caisse"))
21 | return false;
22 |
23 | CustomFurniture.remove(CustomFurniture.byAlreadySpawned(block).getEntity(), false);
24 | return true;
25 | }
26 |
27 | public static boolean hasFurniture(Block block) {
28 | CustomStack placed = CustomFurniture.byAlreadySpawned(block);
29 | return placed != null && placed.getNamespacedID().equals("omc_company:caisse");
30 | }
31 |
32 | }
33 |
--------------------------------------------------------------------------------
/src/main/java/fr/openmc/core/features/corporation/MethodState.java:
--------------------------------------------------------------------------------
1 | package fr.openmc.core.features.corporation;
2 |
3 | import lombok.Getter;
4 |
5 | @Getter
6 | public enum MethodState {
7 | SUCCESS,
8 | WARNING,
9 | ERROR,
10 | FAILURE,
11 | ESCAPE,
12 | SPECIAL
13 |
14 | }
15 |
--------------------------------------------------------------------------------
/src/main/java/fr/openmc/core/features/corporation/company/CompanyOwner.java:
--------------------------------------------------------------------------------
1 | package fr.openmc.core.features.corporation.company;
2 |
3 | import fr.openmc.core.features.city.City;
4 | import lombok.Getter;
5 |
6 | import java.util.UUID;
7 |
8 | @Getter
9 | public class CompanyOwner {
10 |
11 | private final City city;
12 | private final UUID player;
13 |
14 | public CompanyOwner(City city) {
15 | this.city = city;
16 | this.player = null;
17 | }
18 |
19 | public CompanyOwner(UUID owner) {
20 | this.city = null;
21 | this.player = owner;
22 | }
23 |
24 | /**
25 | * know if the owner is a city
26 | *
27 | * @return true if it's a city
28 | */
29 | public boolean isCity() {
30 | return city != null;
31 | }
32 |
33 | /**
34 | * know if the owner is a player
35 | *
36 | * @return true if it's a player
37 | */
38 | public boolean isPlayer() {
39 | return player != null;
40 | }
41 |
42 | }
43 |
--------------------------------------------------------------------------------
/src/main/java/fr/openmc/core/features/corporation/data/MerchantData.java:
--------------------------------------------------------------------------------
1 | package fr.openmc.core.features.corporation.data;
2 |
3 | import lombok.Getter;
4 | import org.bukkit.inventory.ItemStack;
5 |
6 | import java.util.ArrayList;
7 | import java.util.List;
8 |
9 | @Getter
10 | public class MerchantData {
11 |
12 | private final List depositedItems = new ArrayList<>();
13 | private double moneyWon = 0;
14 |
15 | /**
16 | * @return the amount of items the merchant has deposit
17 | */
18 | public int getAllDepositedItemsAmount() {
19 | int amount = 0;
20 | for (ItemStack item : depositedItems) {
21 | amount += item.getAmount();
22 | }
23 | return amount;
24 | }
25 |
26 | /**
27 | * add an item to the merchant data
28 | *
29 | * @param item the item to add
30 | */
31 | public void depositItem(ItemStack item) {
32 | depositedItems.add(item);
33 | }
34 |
35 | /**
36 | * add money to the money won of the merchant
37 | *
38 | * @param money the money to add
39 | */
40 | public void addMoneyWon(double money) {
41 | moneyWon += money;
42 | }
43 |
44 | }
45 |
--------------------------------------------------------------------------------
/src/main/java/fr/openmc/core/features/corporation/data/TransactionData.java:
--------------------------------------------------------------------------------
1 | package fr.openmc.core.features.corporation.data;
2 |
3 | import java.util.UUID;
4 |
5 | public record TransactionData(double value, String nature, String place, UUID sender) {
6 | }
7 |
--------------------------------------------------------------------------------
/src/main/java/fr/openmc/core/features/corporation/listener/CustomItemsCompanyListener.java:
--------------------------------------------------------------------------------
1 | package fr.openmc.core.features.corporation.listener;
2 |
3 | import dev.lone.itemsadder.api.CustomFurniture;
4 | import dev.lone.itemsadder.api.Events.FurnitureBreakEvent;
5 | import dev.lone.itemsadder.api.Events.FurnitureInteractEvent;
6 | import fr.openmc.core.features.corporation.shops.Shop;
7 | import fr.openmc.core.features.corporation.manager.ShopBlocksManager;
8 | import fr.openmc.core.features.corporation.menu.shop.ShopMenu;
9 | import org.bukkit.Location;
10 | import org.bukkit.event.EventHandler;
11 | import org.bukkit.event.Listener;
12 |
13 | public class CustomItemsCompanyListener implements Listener {
14 | private final ShopBlocksManager shopBlocksManager = ShopBlocksManager.getInstance();
15 |
16 |
17 | @EventHandler
18 | public void onFurnitureBreak(FurnitureBreakEvent event){
19 | CustomFurniture furniture = event.getFurniture();
20 |
21 | if (furniture!=null && furniture.getNamespacedID().equals("omc_company:caisse") && !event.getPlayer().isOp()){
22 | event.setCancelled(true);
23 | }
24 | }
25 |
26 | @EventHandler
27 | public void onFurnitureInteract(FurnitureInteractEvent e){
28 | if (e.getFurniture() == null) {
29 | return;
30 | }
31 |
32 | if (e.getFurniture().getNamespacedID().equals("omc_company:caisse")){
33 |
34 | double x = e.getFurniture().getEntity().getLocation().getBlockX();
35 | double y = e.getFurniture().getEntity().getLocation().getBlockY();
36 | double z = e.getFurniture().getEntity().getLocation().getBlockZ();
37 |
38 | Shop shop = shopBlocksManager.getShop(new Location(e.getFurniture().getEntity().getWorld(), x, y, z));
39 | if (shop == null) {
40 | return;
41 | }
42 | e.setCancelled(true);
43 | ShopMenu menu = new ShopMenu(e.getPlayer(), shop, 0);
44 | menu.open();
45 | }
46 | }
47 | }
48 |
--------------------------------------------------------------------------------
/src/main/java/fr/openmc/core/features/corporation/shops/ShopOwner.java:
--------------------------------------------------------------------------------
1 | package fr.openmc.core.features.corporation.shops;
2 |
3 | import fr.openmc.core.features.corporation.company.Company;
4 | import lombok.Getter;
5 |
6 | import java.util.UUID;
7 |
8 | @Getter
9 | public class ShopOwner {
10 |
11 | private final Company company;
12 | private final UUID player;
13 |
14 | /**
15 | * ShopOwner for a company or a player
16 | * @param company to set a company as the owner
17 | */
18 |
19 | public ShopOwner(Company company) {
20 | this.company = company;
21 | this.player = null;
22 | }
23 |
24 | /**
25 | * ShopOwner for a company or a player
26 | * @param owner to set a player as the owner
27 | */
28 | public ShopOwner(UUID owner) {
29 | this.company = null;
30 | this.player = owner;
31 | }
32 |
33 | /**
34 | * know if it's a company
35 | */
36 | public boolean isCompany() {
37 | return company != null;
38 | }
39 |
40 | /**
41 | * know if it's a player
42 | */
43 | public boolean isPlayer() {
44 | return player != null;
45 | }
46 |
47 | }
48 |
--------------------------------------------------------------------------------
/src/main/java/fr/openmc/core/features/corporation/shops/Supply.java:
--------------------------------------------------------------------------------
1 | package fr.openmc.core.features.corporation.shops;
2 |
3 | import lombok.Getter;
4 | import lombok.Setter;
5 |
6 | import java.util.UUID;
7 |
8 | @Getter
9 | public class Supply {
10 |
11 | private final UUID supplier;
12 | private final UUID itemId;
13 | private final UUID supplierUUID;
14 | @Setter
15 | private int amount;
16 |
17 | public Supply(UUID supplier, UUID itemId, int amount) {
18 | this.supplier = supplier;
19 | this.itemId = itemId;
20 | this.amount = amount;
21 | this.supplierUUID = UUID.randomUUID();
22 | }
23 |
24 | public Supply(UUID supplier, UUID itemId, int amount, UUID supplierUUID) {
25 | this.supplier = supplier;
26 | this.itemId = itemId;
27 | this.amount = amount;
28 | this.supplierUUID = supplierUUID;
29 | }
30 | }
31 |
--------------------------------------------------------------------------------
/src/main/java/fr/openmc/core/features/economy/TransactionsManager.java:
--------------------------------------------------------------------------------
1 | package fr.openmc.core.features.economy;
2 |
3 | import fr.openmc.core.OMCPlugin;
4 | import fr.openmc.core.utils.database.DatabaseManager;
5 |
6 | import java.sql.Connection;
7 | import java.sql.PreparedStatement;
8 | import java.sql.ResultSet;
9 | import java.sql.SQLException;
10 | import java.util.ArrayList;
11 | import java.util.List;
12 | import java.util.UUID;
13 |
14 | public class TransactionsManager {
15 | public static void init_db(Connection conn) throws SQLException {
16 | conn.prepareStatement("CREATE TABLE IF NOT EXISTS transactions (recipient VARCHAR(36), sender VARCHAR(36), amount DOUBLE, reason VARCHAR(255), date TIMESTAMP DEFAULT CURRENT_TIMESTAMP)").executeUpdate();
17 | }
18 |
19 | public static List getTransactionsByPlayers(UUID player, int limit) {
20 | if (!OMCPlugin.getConfigs().getBoolean("features.transactions", false)) {
21 | return List.of(new Transaction("CONSOLE", "CONSOLE", 0, "Désactivé"));
22 | }
23 |
24 | List transactions = new ArrayList<>();
25 | try {
26 | PreparedStatement statement = DatabaseManager.getConnection().prepareStatement("SELECT recipient, sender, amount, reason FROM transactions WHERE recipient = ? OR sender = ? ORDER BY date DESC LIMIT ?");
27 | statement.setString(1, player.toString());
28 | statement.setString(2, player.toString());
29 | statement.setInt(3, limit);
30 |
31 | ResultSet rs = statement.executeQuery();
32 | while (rs.next()) {
33 | transactions.add(new Transaction(
34 | rs.getString("recipient"),
35 | rs.getString("sender"),
36 | rs.getDouble("amount"),
37 | rs.getString("reason")
38 | ));
39 | }
40 |
41 | return transactions;
42 | } catch (SQLException err) {
43 | err.printStackTrace();
44 | return List.of(new Transaction("CONSOLE", "CONSOLE", 0, "ERREUR"));
45 | }
46 | }
47 | }
--------------------------------------------------------------------------------
/src/main/java/fr/openmc/core/features/economy/TransactionsMenu.java:
--------------------------------------------------------------------------------
1 | package fr.openmc.core.features.economy;
2 |
3 | import fr.openmc.api.menulib.Menu;
4 | import fr.openmc.api.menulib.utils.InventorySize;
5 | import fr.openmc.core.utils.CacheOfflinePlayer;
6 | import org.bukkit.Bukkit;
7 | import org.bukkit.entity.Player;
8 | import org.bukkit.event.inventory.InventoryClickEvent;
9 | import org.bukkit.event.inventory.InventoryCloseEvent;
10 | import org.bukkit.inventory.ItemStack;
11 | import org.jetbrains.annotations.NotNull;
12 |
13 | import java.util.HashMap;
14 | import java.util.List;
15 | import java.util.Map;
16 | import java.util.UUID;
17 |
18 | public class TransactionsMenu extends Menu {
19 | Player owner;
20 | UUID target;
21 |
22 | public TransactionsMenu(Player owner, UUID target) {
23 | super(owner);
24 | this.owner = owner;
25 | this.target = target;
26 | }
27 |
28 | @Override
29 | public @NotNull String getName() {
30 | return "Transactions de "+ CacheOfflinePlayer.getOfflinePlayer(target).getName();
31 | }
32 |
33 | @Override
34 | public @NotNull InventorySize getInventorySize() {
35 | return InventorySize.LARGEST;
36 | }
37 |
38 | @Override
39 | public void onInventoryClick(InventoryClickEvent inventoryClickEvent) {}
40 |
41 | @Override
42 | public @NotNull Map getContent() {
43 | Map items = new HashMap<>();
44 | int iter = 0;
45 | for (Transaction transaction: TransactionsManager.getTransactionsByPlayers(target, 54)) {
46 | items.put(iter, transaction.toItemStack(target));
47 | iter++;
48 | }
49 |
50 | return items;
51 | }
52 |
53 | @Override
54 | public void onClose(InventoryCloseEvent event) {
55 | //empty
56 | }
57 |
58 | @Override
59 | public List getTakableSlot() {
60 | return List.of();
61 | }
62 | }
--------------------------------------------------------------------------------
/src/main/java/fr/openmc/core/features/economy/commands/History.java:
--------------------------------------------------------------------------------
1 | package fr.openmc.core.features.economy.commands;
2 |
3 | import fr.openmc.core.features.economy.TransactionsMenu;
4 | import org.bukkit.entity.Player;
5 | import revxrsal.commands.annotation.Command;
6 | import revxrsal.commands.annotation.Cooldown;
7 | import revxrsal.commands.annotation.Description;
8 | import revxrsal.commands.annotation.Optional;
9 | import revxrsal.commands.bukkit.annotation.CommandPermission;
10 |
11 | public class History {
12 | @Command("money history")
13 | @Description("Affiche votre historique de transactions")
14 | @CommandPermission("omc.commands.money.history")
15 | @Cooldown(30)
16 | public void history(Player sender, @Optional Player target){
17 | if (!(sender instanceof Player player)) { return; }
18 |
19 | if (target == null) {
20 | target = player;
21 | } else {
22 | if (!sender.hasPermission("omc.admin.money.history")) {
23 | target = player;
24 | }
25 | }
26 |
27 | new TransactionsMenu(player, target.getUniqueId()).open();
28 | }
29 | }
30 |
--------------------------------------------------------------------------------
/src/main/java/fr/openmc/core/features/homes/HomeLimit.java:
--------------------------------------------------------------------------------
1 | package fr.openmc.core.features.homes;
2 |
3 | import lombok.Getter;
4 | import lombok.Setter;
5 |
6 | import java.util.UUID;
7 |
8 | @Getter
9 | public class HomeLimit {
10 |
11 | private final UUID playerUUID;
12 | @Setter private HomeLimits homeLimit;
13 |
14 | public HomeLimit(UUID playerUUID, HomeLimits limit) {
15 | this.playerUUID = playerUUID;
16 | this.homeLimit = limit;
17 | }
18 | }
--------------------------------------------------------------------------------
/src/main/java/fr/openmc/core/features/homes/HomeLimits.java:
--------------------------------------------------------------------------------
1 | package fr.openmc.core.features.homes;
2 |
3 | import lombok.Getter;
4 |
5 | public enum HomeLimits {
6 |
7 | LIMIT_0(1, 0, 0),
8 | LIMIT_1(3, 5000, 10),
9 | LIMIT_2(5, 10000, 20),
10 | LIMIT_3(7, 15000, 30),
11 | LIMIT_4(10, 20000, 40),
12 | LIMIT_5(13, 25000, 50),
13 | LIMIT_6(15, 30000, 60),
14 | LIMIT_7(17, 35000, 70),
15 | LIMIT_8(20, 40000, 80),
16 | LIMIT_9(23, 45000, 90),
17 | LIMIT_10(25, 50000, 100),
18 | LIMIT_11(27, 55000, 110),
19 | LIMIT_12(30, 60000, 120),
20 | ;
21 |
22 | @Getter int limit;
23 | @Getter int price;
24 | @Getter int ayweniteCost;
25 |
26 | HomeLimits(int limit, int price, int ayweniteCost) {
27 | this.limit = limit;
28 | this.price = price;
29 | this.ayweniteCost = ayweniteCost;
30 | }
31 |
32 | }
33 |
--------------------------------------------------------------------------------
/src/main/java/fr/openmc/core/features/homes/world/WorldDisableInfo.java:
--------------------------------------------------------------------------------
1 | package fr.openmc.core.features.homes.world;
2 |
3 | public record WorldDisableInfo(String addedBy, long addedOn) {}
4 |
--------------------------------------------------------------------------------
/src/main/java/fr/openmc/core/features/mailboxes/letter/SenderLetter.java:
--------------------------------------------------------------------------------
1 | package fr.openmc.core.features.mailboxes.letter;
2 |
3 | import net.kyori.adventure.text.Component;
4 | import net.kyori.adventure.text.format.NamedTextColor;
5 | import org.bukkit.Material;
6 | import org.bukkit.OfflinePlayer;
7 | import org.bukkit.inventory.ItemStack;
8 | import org.bukkit.inventory.meta.SkullMeta;
9 |
10 | import java.time.LocalDateTime;
11 | import java.util.ArrayList;
12 |
13 | import static fr.openmc.core.features.mailboxes.utils.MailboxUtils.*;
14 | import static fr.openmc.core.utils.DateUtils.formatRelativeDate;
15 |
16 | public class SenderLetter extends ItemStack {
17 | private final int id;
18 |
19 | public SenderLetter(OfflinePlayer player, int id, int itemsCount, LocalDateTime sentAt, boolean refused) {
20 | super(Material.PLAYER_HEAD, 1);
21 | this.id = id;
22 | SkullMeta skullMeta = (SkullMeta) this.getItemMeta();
23 | skullMeta.setOwningPlayer(player);
24 | skullMeta.displayName(getStatus(refused));
25 | ArrayList lore = new ArrayList<>();
26 | lore.add(colorText("➡ Cliquez pour annuler", NamedTextColor.YELLOW, true));
27 | lore.add(getPlayerName(player));
28 | lore.add(colorText(formatRelativeDate(sentAt) + ", " + itemsCount + " " + getItemCount(itemsCount), NamedTextColor.DARK_GRAY, true));
29 | skullMeta.lore(lore);
30 | this.setItemMeta(skullMeta);
31 | }
32 |
33 | public static Component getStatus(boolean refused) {
34 | NamedTextColor color = refused ? NamedTextColor.DARK_RED : NamedTextColor.DARK_AQUA;
35 | Component status = Component.text("[", NamedTextColor.DARK_GRAY)
36 | .append(Component.text(refused ? "❌" : "⌚", color))
37 | .append(Component.text("] ", NamedTextColor.DARK_GRAY))
38 | .append(Component.text(refused ? "Refusée" : "En attente", color));
39 | return nonItalic(status);
40 | }
41 |
42 | public int getId() {
43 | return id;
44 | }
45 | }
46 |
--------------------------------------------------------------------------------
/src/main/java/fr/openmc/core/features/mailboxes/menu/PlayersList.java:
--------------------------------------------------------------------------------
1 | package fr.openmc.core.features.mailboxes.menu;
2 |
3 |
4 | import fr.openmc.core.features.mailboxes.utils.PaginatedMailbox;
5 | import fr.openmc.core.utils.ItemUtils;
6 | import org.bukkit.Bukkit;
7 | import org.bukkit.entity.Player;
8 | import org.bukkit.inventory.ItemStack;
9 |
10 | public class PlayersList extends PaginatedMailbox {
11 | public PlayersList(Player player) {
12 | super(player);
13 | for (Player onlinePlayer : Bukkit.getOnlinePlayers()) {
14 | if (onlinePlayer == player) continue;
15 | pageItems.add(ItemUtils.getPlayerHead(onlinePlayer.getUniqueId()));
16 | }
17 | initInventory();
18 | }
19 |
20 | @Override
21 | public void openInventory() {
22 | player.openInventory(this.inventory);
23 | }
24 | }
25 |
--------------------------------------------------------------------------------
/src/main/java/fr/openmc/core/features/mailboxes/utils/MailboxInv.java:
--------------------------------------------------------------------------------
1 | package fr.openmc.core.features.mailboxes.utils;
2 |
3 |
4 | import fr.openmc.core.OMCPlugin;
5 | import org.bukkit.entity.Player;
6 | import org.bukkit.inventory.Inventory;
7 | import org.bukkit.inventory.InventoryHolder;
8 | import org.jetbrains.annotations.NotNull;
9 |
10 | import static fr.openmc.core.features.mailboxes.utils.MailboxMenuManager.playerInventories;
11 | import static fr.openmc.core.features.mailboxes.utils.MailboxUtils.sendFailureMessage;
12 |
13 | public abstract class MailboxInv implements InventoryHolder {
14 | protected static String invErrorMessage;
15 | protected final Player player;
16 | protected final OMCPlugin plugin = OMCPlugin.getInstance();
17 | protected Inventory inventory;
18 |
19 | public MailboxInv(Player player) {
20 | this.player = player;
21 | }
22 |
23 | public void addInventory() {
24 | playerInventories.put(player, this);
25 | }
26 |
27 | public void removeInventory() {
28 | playerInventories.remove(player);
29 | }
30 |
31 | @Override
32 | public @NotNull Inventory getInventory() {
33 | return this.inventory;
34 | }
35 |
36 | public void openInventory() {
37 | if (inventory == null) {
38 | sendInvErrorMessage(player);
39 | return;
40 | }
41 | player.openInventory(this.inventory);
42 | }
43 |
44 | protected void sendInvErrorMessage(Player player) {
45 | if (invErrorMessage == null) return;
46 | sendFailureMessage(player, invErrorMessage);
47 | }
48 | }
49 |
--------------------------------------------------------------------------------
/src/main/java/fr/openmc/core/features/quests/command/QuestCommand.java:
--------------------------------------------------------------------------------
1 | package fr.openmc.core.features.quests.command;
2 |
3 | import fr.openmc.core.features.quests.menus.QuestsMenu;
4 | import fr.openmc.core.utils.messages.MessageType;
5 | import fr.openmc.core.utils.messages.MessagesManager;
6 | import fr.openmc.core.utils.messages.Prefix;
7 | import org.bukkit.entity.Player;
8 | import revxrsal.commands.annotation.*;
9 |
10 | @Command({"quest", "quests"})
11 | @Description("Commande pour les quêtes")
12 | public class QuestCommand {
13 |
14 | @DefaultFor({"~"})
15 | @Description("Ouvre le menu des quêtes")
16 | public void onQuest(Player player) {
17 | new QuestsMenu(player).open();
18 | }
19 |
20 | @Subcommand("open")
21 | @Description("Ouvre le menu des quêtes")
22 | public void resetProgress(Player sender, @Optional Player target) {
23 | if (target == null || target == sender) {
24 | new QuestsMenu(sender).open();
25 | } else {
26 | if (sender.hasPermission("omc.quests.admin")) new QuestsMenu(target).open();
27 | else MessagesManager.sendMessage(sender, MessagesManager.Message.NOPERMISSION.getMessage(), Prefix.OPENMC, MessageType.ERROR, true);
28 |
29 | }
30 | }
31 | }
32 |
--------------------------------------------------------------------------------
/src/main/java/fr/openmc/core/features/quests/quests/BreakDiamondQuest.java:
--------------------------------------------------------------------------------
1 | package fr.openmc.core.features.quests.quests;
2 |
3 | import fr.openmc.core.features.quests.objects.Quest;
4 | import fr.openmc.core.features.quests.objects.QuestTier;
5 | import fr.openmc.core.features.quests.rewards.QuestMoneyReward;
6 | import org.bukkit.Material;
7 | import org.bukkit.enchantments.Enchantment;
8 | import org.bukkit.event.EventHandler;
9 | import org.bukkit.event.EventPriority;
10 | import org.bukkit.event.Listener;
11 | import org.bukkit.event.block.BlockBreakEvent;
12 | import org.bukkit.inventory.ItemStack;
13 |
14 | public class BreakDiamondQuest extends Quest implements Listener {
15 |
16 | public BreakDiamondQuest() {
17 | super(
18 | "Richou",
19 | "Casser {target} minerai{s} de diamant",
20 | Material.DIAMOND
21 | );
22 |
23 | this.addTiers(
24 | new QuestTier(100, new QuestMoneyReward(2500)),
25 | new QuestTier(400, new QuestMoneyReward(5000)),
26 | new QuestTier(800, new QuestMoneyReward(10000))
27 | );
28 | }
29 |
30 | @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true)
31 | public void onPlayerBreak(BlockBreakEvent event) {
32 | ItemStack tool = event.getPlayer().getInventory().getItemInMainHand();
33 | if (tool.containsEnchantment(Enchantment.SILK_TOUCH)) {
34 | return; // Ne pas compter si le joueur utilise Silk Touch
35 | }
36 |
37 | if (event.getBlock().getType().equals(Material.DIAMOND_ORE)
38 | || event.getBlock().getType().equals(Material.DEEPSLATE_DIAMOND_ORE)
39 | ) {
40 | this.incrementProgress(event.getPlayer().getUniqueId());
41 | }
42 | }
43 | }
44 |
--------------------------------------------------------------------------------
/src/main/java/fr/openmc/core/features/quests/quests/BreakStoneQuest.java:
--------------------------------------------------------------------------------
1 | package fr.openmc.core.features.quests.quests;
2 |
3 | import fr.openmc.core.features.quests.objects.Quest;
4 | import fr.openmc.core.features.quests.objects.QuestTier;
5 | import fr.openmc.core.features.quests.rewards.QuestMoneyReward;
6 | import org.bukkit.Material;
7 | import org.bukkit.block.Block;
8 | import org.bukkit.enchantments.Enchantment;
9 | import org.bukkit.event.EventHandler;
10 | import org.bukkit.event.EventPriority;
11 | import org.bukkit.event.Listener;
12 | import org.bukkit.event.block.BlockBreakEvent;
13 | import org.bukkit.inventory.ItemStack;
14 |
15 | public class BreakStoneQuest extends Quest implements Listener {
16 |
17 | public BreakStoneQuest() {
18 | super("Casseur de pierres","Miner {target} blocs de pierre", new ItemStack(Material.DIAMOND_PICKAXE));
19 |
20 |
21 | this.addTiers(
22 | new QuestTier(10000, new QuestMoneyReward(2000)),
23 | new QuestTier(30000, new QuestMoneyReward(4000)),
24 | new QuestTier(80000, new QuestMoneyReward(6000)),
25 | new QuestTier(150000, new QuestMoneyReward(10000))
26 | );
27 | }
28 |
29 | @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true)
30 | public void onPlayerBreak(BlockBreakEvent event) {
31 | ItemStack tool = event.getPlayer().getInventory().getItemInMainHand();
32 | Block block = event.getBlock();
33 | if (block.getType().equals(Material.STONE)) {
34 | this.incrementProgress(event.getPlayer().getUniqueId());
35 | }
36 | }
37 |
38 | }
39 |
--------------------------------------------------------------------------------
/src/main/java/fr/openmc/core/features/quests/quests/ChickenThrowerQuest.java:
--------------------------------------------------------------------------------
1 | package fr.openmc.core.features.quests.quests;
2 |
3 | import fr.openmc.core.features.quests.objects.Quest;
4 | import fr.openmc.core.features.quests.objects.QuestTier;
5 | import fr.openmc.core.features.quests.rewards.QuestMoneyReward;
6 | import org.bukkit.Material;
7 | import org.bukkit.event.EventHandler;
8 | import org.bukkit.event.EventPriority;
9 | import org.bukkit.event.Listener;
10 | import org.bukkit.event.player.PlayerEggThrowEvent;
11 | import org.bukkit.inventory.ItemStack;
12 |
13 | public class ChickenThrowerQuest extends Quest implements Listener {
14 |
15 | public ChickenThrowerQuest() {
16 | super(
17 | "Lanceur de Poules",
18 | "Lancer {target} oeufs",
19 | new ItemStack(Material.EGG)
20 | );
21 |
22 | this.addTiers(
23 | new QuestTier(50, new QuestMoneyReward(500)),
24 | new QuestTier(200, new QuestMoneyReward(2000)),
25 | new QuestTier(500, new QuestMoneyReward(5000)),
26 | new QuestTier(1000, new QuestMoneyReward(10000))
27 | );
28 | }
29 |
30 | @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true)
31 | public void onEggThrow(PlayerEggThrowEvent event) {
32 | this.incrementProgress(event.getPlayer().getUniqueId(), 1);
33 | }
34 | }
--------------------------------------------------------------------------------
/src/main/java/fr/openmc/core/features/quests/quests/CityCreateQuest.java:
--------------------------------------------------------------------------------
1 | package fr.openmc.core.features.quests.quests;
2 |
3 | import fr.openmc.core.features.city.events.CityCreationEvent;
4 | import fr.openmc.core.features.city.events.MemberJoinEvent;
5 | import fr.openmc.core.features.quests.objects.Quest;
6 | import fr.openmc.core.features.quests.objects.QuestTier;
7 | import fr.openmc.core.features.quests.rewards.QuestMoneyReward;
8 | import org.bukkit.Material;
9 | import org.bukkit.OfflinePlayer;
10 | import org.bukkit.entity.Player;
11 | import org.bukkit.event.EventHandler;
12 | import org.bukkit.event.EventPriority;
13 | import org.bukkit.event.Listener;
14 |
15 | public class CityCreateQuest extends Quest implements Listener {
16 |
17 | public CityCreateQuest() {
18 | super(
19 | "Citoyen",
20 | "Créer ou rejoins une ville",
21 | Material.OAK_DOOR
22 | );
23 |
24 | this.addTier(new QuestTier(
25 | 1,
26 | new QuestMoneyReward(3000)
27 | ));
28 | }
29 |
30 | @EventHandler(priority = EventPriority.NORMAL)
31 | public void onCityCreate(CityCreationEvent event) {
32 | Player player = event.getOwner();
33 | if (player != null) this.incrementProgress(player.getUniqueId());
34 | }
35 |
36 | @EventHandler(priority = EventPriority.NORMAL)
37 | public void onPlayerJoin(MemberJoinEvent event) {
38 | OfflinePlayer player = event.getPlayer();
39 | if (player.isOnline()) this.incrementProgress(player.getUniqueId());
40 | }
41 | }
42 |
--------------------------------------------------------------------------------
/src/main/java/fr/openmc/core/features/quests/quests/ConsumeKebabQuest.java:
--------------------------------------------------------------------------------
1 | package fr.openmc.core.features.quests.quests;
2 |
3 | import fr.openmc.core.features.quests.objects.Quest;
4 | import fr.openmc.core.features.quests.objects.QuestTier;
5 | import fr.openmc.core.features.quests.rewards.QuestMoneyReward;
6 | import fr.openmc.core.utils.customitems.CustomItemRegistry;
7 | import org.bukkit.event.EventHandler;
8 | import org.bukkit.event.EventPriority;
9 | import org.bukkit.event.Listener;
10 | import org.bukkit.event.player.PlayerItemConsumeEvent;
11 | import org.bukkit.inventory.ItemStack;
12 |
13 | public class ConsumeKebabQuest extends Quest implements Listener {
14 |
15 | public ConsumeKebabQuest() {
16 | super("Miam Miam", "Manger {target} kebab{s}", CustomItemRegistry.getByName("omc_foods:kebab").getBest());
17 |
18 | this.addTiers(
19 | new QuestTier(10, new QuestMoneyReward(30)),
20 | new QuestTier(64, new QuestMoneyReward(80)),
21 | new QuestTier(256, new QuestMoneyReward(160)),
22 | new QuestTier(1024, new QuestMoneyReward(1000))
23 | );
24 | }
25 |
26 | @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true)
27 | public void onPlayerConsume(PlayerItemConsumeEvent event) {
28 | ItemStack item = event.getItem();
29 | if (item.isSimilar(CustomItemRegistry.getByName("omc_foods:kebab").getBest())) {
30 | this.incrementProgress(event.getPlayer().getUniqueId());
31 | }
32 | }
33 |
34 | }
35 |
--------------------------------------------------------------------------------
/src/main/java/fr/openmc/core/features/quests/quests/CraftCakeQuest.java:
--------------------------------------------------------------------------------
1 | package fr.openmc.core.features.quests.quests;
2 |
3 | import fr.openmc.core.features.quests.objects.Quest;
4 | import fr.openmc.core.features.quests.objects.QuestTier;
5 | import fr.openmc.core.features.quests.rewards.QuestMoneyReward;
6 | import org.bukkit.Material;
7 | import org.bukkit.event.EventHandler;
8 | import org.bukkit.event.EventPriority;
9 | import org.bukkit.event.Listener;
10 | import org.bukkit.event.inventory.CraftItemEvent;
11 |
12 | public class CraftCakeQuest extends Quest implements Listener {
13 |
14 | public CraftCakeQuest() {
15 | super("Le pâtissier", "Craft {target} gâteaux", Material.CAKE);
16 |
17 | this.addTiers(
18 | new QuestTier(64, new QuestMoneyReward(100)),
19 | new QuestTier(256, new QuestMoneyReward(400))
20 | );
21 | }
22 |
23 | @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true)
24 | public void onPlayerCraft(CraftItemEvent event) {
25 | if (event.getRecipe().getResult().getType().equals(Material.CAKE)) {
26 | this.incrementProgress(event.getWhoClicked().getUniqueId());
27 | }
28 | }
29 |
30 | }
31 |
--------------------------------------------------------------------------------
/src/main/java/fr/openmc/core/features/quests/quests/CraftKebabQuest.java:
--------------------------------------------------------------------------------
1 | package fr.openmc.core.features.quests.quests;
2 |
3 | import fr.openmc.core.features.quests.objects.Quest;
4 | import fr.openmc.core.features.quests.objects.QuestTier;
5 | import fr.openmc.core.features.quests.rewards.QuestItemReward;
6 | import fr.openmc.core.features.quests.rewards.QuestMoneyReward;
7 | import fr.openmc.core.utils.customitems.CustomItemRegistry;
8 | import org.bukkit.Material;
9 | import org.bukkit.event.EventHandler;
10 | import org.bukkit.event.EventPriority;
11 | import org.bukkit.event.Listener;
12 | import org.bukkit.event.inventory.CraftItemEvent;
13 | import org.bukkit.inventory.ItemStack;
14 |
15 | public class CraftKebabQuest extends Quest implements Listener {
16 |
17 | public CraftKebabQuest() {
18 | super(
19 | "Kebab",
20 | "Fabriquer {target} kebab{s}",
21 | Material.BREAD
22 | );
23 |
24 | this.addTiers(
25 | new QuestTier(1, new QuestItemReward(CustomItemRegistry.getByName("omc_foods:kebab").getBest(), 16)),
26 | new QuestTier(32, new QuestMoneyReward(100)),
27 | new QuestTier(128, new QuestMoneyReward(400)),
28 | new QuestTier(512, new QuestMoneyReward(800))
29 | );
30 | }
31 |
32 | @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true)
33 | public void onPlayerCraft(CraftItemEvent event) {
34 | ItemStack item = event.getCurrentItem();
35 | if (item != null && item.isSimilar(CustomItemRegistry.getByName("omc_foods:kebab").getBest())) {
36 | incrementProgress(event.getWhoClicked().getUniqueId());
37 | }
38 | }
39 |
40 | }
41 |
--------------------------------------------------------------------------------
/src/main/java/fr/openmc/core/features/quests/quests/EnchantFirstItemQuest.java:
--------------------------------------------------------------------------------
1 | package fr.openmc.core.features.quests.quests;
2 |
3 | import fr.openmc.core.features.quests.objects.Quest;
4 | import fr.openmc.core.features.quests.objects.QuestTier;
5 | import fr.openmc.core.features.quests.rewards.QuestMoneyReward;
6 | import org.bukkit.Material;
7 | import org.bukkit.event.EventHandler;
8 | import org.bukkit.event.EventPriority;
9 | import org.bukkit.event.Listener;
10 | import org.bukkit.event.enchantment.EnchantItemEvent;
11 | import org.bukkit.inventory.ItemStack;
12 |
13 | public class EnchantFirstItemQuest extends Quest implements Listener {
14 |
15 | public EnchantFirstItemQuest() {
16 | super("Abracadabra", "Enchanter un objet pour la première fois", Material.ENCHANTING_TABLE);
17 |
18 | this.addTiers(
19 | new QuestTier(1, new QuestMoneyReward(200))
20 | );
21 | }
22 |
23 | @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true)
24 | public void onEnchantItem(EnchantItemEvent event) {
25 | ItemStack item = event.getItem();
26 | if (item.getType() != Material.AIR) {
27 | this.incrementProgress(event.getEnchanter().getUniqueId());
28 | }
29 | }
30 | }
31 |
--------------------------------------------------------------------------------
/src/main/java/fr/openmc/core/features/quests/quests/KillPlayersQuest.java:
--------------------------------------------------------------------------------
1 | package fr.openmc.core.features.quests.quests;
2 |
3 | import fr.openmc.core.features.quests.objects.Quest;
4 | import fr.openmc.core.features.quests.objects.QuestTier;
5 | import fr.openmc.core.features.quests.rewards.QuestMoneyReward;
6 | import org.bukkit.Material;
7 | import org.bukkit.entity.Player;
8 | import org.bukkit.event.EventHandler;
9 | import org.bukkit.event.EventPriority;
10 | import org.bukkit.event.Listener;
11 | import org.bukkit.event.entity.PlayerDeathEvent;
12 |
13 | public class KillPlayersQuest extends Quest implements Listener {
14 |
15 | public KillPlayersQuest() {
16 | super(
17 | "Tueur à gage",
18 | "Tuer {target} joueurs",
19 | Material.IRON_SWORD
20 | );
21 |
22 | this.addTiers(
23 | new QuestTier(5, new QuestMoneyReward(2500)),
24 | new QuestTier(20, new QuestMoneyReward(5000)),
25 | new QuestTier(30, new QuestMoneyReward(10000))
26 | );
27 | }
28 |
29 | @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true)
30 | public void onPlayerKill(PlayerDeathEvent event) {
31 | if (event.getEntity().getKiller() instanceof Player player) {
32 | this.incrementProgress(player.getUniqueId(), 1);
33 | }
34 | }
35 | }
36 |
--------------------------------------------------------------------------------
/src/main/java/fr/openmc/core/features/quests/quests/KillSuperCreeperQuest.java:
--------------------------------------------------------------------------------
1 | package fr.openmc.core.features.quests.quests;
2 |
3 | import fr.openmc.core.features.quests.objects.Quest;
4 | import fr.openmc.core.features.quests.objects.QuestTier;
5 | import fr.openmc.core.features.quests.rewards.QuestMoneyReward;
6 | import org.bukkit.Material;
7 | import org.bukkit.entity.Creeper;
8 | import org.bukkit.entity.Player;
9 | import org.bukkit.event.EventHandler;
10 | import org.bukkit.event.EventPriority;
11 | import org.bukkit.event.Listener;
12 | import org.bukkit.event.entity.EntityDeathEvent;
13 |
14 | public class KillSuperCreeperQuest extends Quest implements Listener {
15 |
16 | public KillSuperCreeperQuest() {
17 | super(
18 | "Le Boss des Creepers",
19 | "Tuer {target} creepers super chargés",
20 | Material.CREEPER_HEAD
21 | );
22 |
23 | this.addTier(new QuestTier(1, new QuestMoneyReward(1000)));
24 | }
25 |
26 | @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true)
27 | public void onPlayerKill(EntityDeathEvent event) {
28 | Player player = event.getEntity().getKiller();
29 | if (player != null && event.getEntity() instanceof Creeper creeper && creeper.isPowered()) {
30 | this.incrementProgress(player.getUniqueId());
31 | }
32 | }
33 |
34 | }
35 |
--------------------------------------------------------------------------------
/src/main/java/fr/openmc/core/features/quests/quests/KillZombieQuest.java:
--------------------------------------------------------------------------------
1 | package fr.openmc.core.features.quests.quests;
2 |
3 | import fr.openmc.core.features.quests.objects.Quest;
4 | import fr.openmc.core.features.quests.objects.QuestTier;
5 | import fr.openmc.core.features.quests.rewards.QuestMoneyReward;
6 | import org.bukkit.Material;
7 | import org.bukkit.entity.Player;
8 | import org.bukkit.entity.Zombie;
9 | import org.bukkit.event.EventHandler;
10 | import org.bukkit.event.EventPriority;
11 | import org.bukkit.event.Listener;
12 | import org.bukkit.event.entity.EntityDeathEvent;
13 |
14 | public class KillZombieQuest extends Quest implements Listener {
15 |
16 | public KillZombieQuest() {
17 | super("Apocalypse zombie ?", "Tuer {target} zombies", Material.ZOMBIE_HEAD);
18 |
19 | this.addTiers(
20 | new QuestTier(1000, new QuestMoneyReward(8000)),
21 | new QuestTier(4000, new QuestMoneyReward(10000)),
22 | new QuestTier(10000, new QuestMoneyReward(15000))
23 | );
24 | }
25 |
26 | @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true)
27 | public void onZombieKill(EntityDeathEvent event) {
28 | if (event.getEntity().getKiller() instanceof Player player && event.getEntity() instanceof Zombie) {
29 | this.incrementProgress(player.getUniqueId());
30 | }
31 | }
32 |
33 | }
34 |
--------------------------------------------------------------------------------
/src/main/java/fr/openmc/core/features/quests/quests/MineAyweniteQuest.java:
--------------------------------------------------------------------------------
1 | package fr.openmc.core.features.quests.quests;
2 |
3 | import dev.lone.itemsadder.api.CustomBlock;
4 | import fr.openmc.core.features.quests.objects.Quest;
5 | import fr.openmc.core.features.quests.objects.QuestTier;
6 | import fr.openmc.core.features.quests.rewards.QuestItemReward;
7 | import fr.openmc.core.features.quests.rewards.QuestMoneyReward;
8 | import fr.openmc.core.utils.customitems.CustomItemRegistry;
9 | import org.bukkit.Material;
10 | import org.bukkit.enchantments.Enchantment;
11 | import org.bukkit.event.EventHandler;
12 | import org.bukkit.event.EventPriority;
13 | import org.bukkit.event.Listener;
14 | import org.bukkit.event.block.BlockBreakEvent;
15 | import org.bukkit.inventory.ItemStack;
16 |
17 | public class MineAyweniteQuest extends Quest implements Listener {
18 |
19 | public MineAyweniteQuest() {
20 | super("Ohhh... c'est précieux ça ?", "Miner {target} Aywenite{s}", CustomItemRegistry.getByName("omc_items:aywenite").getBest());
21 |
22 | this.addTiers(
23 | new QuestTier(1, new QuestMoneyReward(20)),
24 | new QuestTier(64, new QuestMoneyReward(140)),
25 | new QuestTier(512, new QuestItemReward(Material.ANCIENT_DEBRIS, 2))
26 | );
27 | }
28 |
29 | @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true)
30 | public void onPlayerBreakBlock(BlockBreakEvent event) {
31 | ItemStack tool = event.getPlayer().getInventory().getItemInMainHand();
32 | if (tool.containsEnchantment(Enchantment.SILK_TOUCH)) {
33 | return; // Ne pas compter si le joueur utilise Silk Touch
34 | }
35 |
36 | CustomBlock customBlock = CustomBlock.byAlreadyPlaced(event.getBlock());
37 | if (customBlock != null && customBlock.getNamespacedID() != null &&
38 | ("omc_blocks:aywenite_ore".equals(customBlock.getNamespacedID()) ||
39 | "omc_blocks:deepslate_aywenite_ore".equals(customBlock.getNamespacedID()))
40 | ) {
41 | this.incrementProgress(event.getPlayer().getUniqueId());
42 | }
43 | }
44 | }
--------------------------------------------------------------------------------
/src/main/java/fr/openmc/core/features/quests/quests/SaveTheEarthQuest.java:
--------------------------------------------------------------------------------
1 | package fr.openmc.core.features.quests.quests;
2 |
3 | import fr.openmc.core.features.quests.objects.Quest;
4 | import fr.openmc.core.features.quests.objects.QuestTier;
5 | import fr.openmc.core.features.quests.rewards.QuestItemReward;
6 | import org.bukkit.Material;
7 | import org.bukkit.event.EventHandler;
8 | import org.bukkit.event.EventPriority;
9 | import org.bukkit.event.Listener;
10 | import org.bukkit.event.world.StructureGrowEvent;
11 |
12 | public class SaveTheEarthQuest extends Quest implements Listener {
13 |
14 | public SaveTheEarthQuest() {
15 | super("Sauvons la planète", "Planter {target} arbres et les faire grandir avec des poudres d'os", Material.OAK_SAPLING);
16 |
17 | this.addTiers(
18 | new QuestTier(10, new QuestItemReward(Material.OAK_LOG, 32)),
19 | new QuestTier(40, new QuestItemReward(Material.OAK_LOG, 64)),
20 | new QuestTier(100, new QuestItemReward(Material.OAK_LOG, 128)),
21 | new QuestTier(1000, new QuestItemReward(Material.OAK_LOG, 256))
22 | );
23 | }
24 |
25 | @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true)
26 | public void onPlayerBreak(StructureGrowEvent event) {
27 | if (event.getPlayer() != null)
28 | this.incrementProgress(event.getPlayer().getUniqueId());
29 | }
30 | }
31 |
--------------------------------------------------------------------------------
/src/main/java/fr/openmc/core/features/quests/quests/SmeltIronQuest.java:
--------------------------------------------------------------------------------
1 | package fr.openmc.core.features.quests.quests;
2 |
3 | import fr.openmc.core.features.quests.objects.Quest;
4 | import fr.openmc.core.features.quests.objects.QuestTier;
5 | import fr.openmc.core.features.quests.rewards.QuestMoneyReward;
6 | import org.bukkit.Material;
7 | import org.bukkit.event.EventHandler;
8 | import org.bukkit.event.EventPriority;
9 | import org.bukkit.event.Listener;
10 | import org.bukkit.event.inventory.FurnaceExtractEvent;
11 |
12 | public class SmeltIronQuest extends Quest implements Listener {
13 |
14 | public SmeltIronQuest() {
15 | super("Chaud devant !", "Faire fondre {target} lingots de fer", Material.IRON_ORE);
16 |
17 | this.addTiers(
18 | new QuestTier(256, new QuestMoneyReward(2000)),
19 | new QuestTier(512, new QuestMoneyReward(4000)),
20 | new QuestTier(1536, new QuestMoneyReward(8000))
21 | );
22 | }
23 |
24 | @EventHandler(priority = EventPriority.MONITOR)
25 | public void onPlayerSmelt(FurnaceExtractEvent event) {
26 | if (event.getItemType().equals(Material.IRON_INGOT)) {
27 | int amount = event.getItemAmount();
28 | this.incrementProgress(event.getPlayer().getUniqueId(), amount);
29 | }
30 | }
31 | }
32 |
--------------------------------------------------------------------------------
/src/main/java/fr/openmc/core/features/quests/quests/WalkQuests.java:
--------------------------------------------------------------------------------
1 | package fr.openmc.core.features.quests.quests;
2 |
3 | import fr.openmc.core.features.quests.objects.Quest;
4 | import fr.openmc.core.features.quests.objects.QuestTier;
5 | import fr.openmc.core.features.quests.rewards.QuestMoneyReward;
6 | import org.bukkit.Material;
7 | import org.bukkit.entity.Player;
8 | import org.bukkit.event.EventHandler;
9 | import org.bukkit.event.EventPriority;
10 | import org.bukkit.event.Listener;
11 | import org.bukkit.event.player.PlayerMoveEvent;
12 |
13 | public class WalkQuests extends Quest implements Listener {
14 | public WalkQuests() {
15 | super("Le randonneur", "Marcher {target} blocs", Material.LEATHER_BOOTS, true);
16 |
17 | this.addTiers(
18 | new QuestTier(4000, new QuestMoneyReward(500)),
19 | new QuestTier(10000, new QuestMoneyReward(1200)),
20 | new QuestTier(30000, new QuestMoneyReward(3200)),
21 | new QuestTier(100000, new QuestMoneyReward(8000))
22 | );
23 | }
24 |
25 | @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true)
26 | public void onPlayerMove(PlayerMoveEvent event) {
27 | Player player = event.getPlayer();
28 | if (
29 | (event.getFrom().getBlockX() != event.getTo().getBlockX()
30 | || event.getFrom().getBlockZ() != event.getTo().getBlockZ())
31 | && !player.isFlying()
32 | && !player.isGliding()
33 | && !player.isInsideVehicle()
34 | ) {
35 | this.incrementProgress(player.getUniqueId());
36 | }
37 | }
38 | }
39 |
--------------------------------------------------------------------------------
/src/main/java/fr/openmc/core/features/quests/quests/WinContestQuest.java:
--------------------------------------------------------------------------------
1 | package fr.openmc.core.features.quests.quests;
2 |
3 | import fr.openmc.core.features.contest.ContestEndEvent;
4 | import fr.openmc.core.features.quests.objects.Quest;
5 | import fr.openmc.core.features.quests.objects.QuestTier;
6 | import fr.openmc.core.features.quests.rewards.QuestItemReward;
7 | import fr.openmc.core.utils.customitems.CustomItemRegistry;
8 | import org.bukkit.Material;
9 | import org.bukkit.event.EventHandler;
10 | import org.bukkit.event.Listener;
11 |
12 | import java.util.UUID;
13 |
14 | public class WinContestQuest extends Quest implements Listener {
15 |
16 | public WinContestQuest() {
17 | super(
18 | "Choisir son camp",
19 | "Gagne {target} contest",
20 | Material.NAUTILUS_SHELL
21 | );
22 |
23 | this.addTier(new QuestTier(1, new QuestItemReward(CustomItemRegistry.getByName("omc_contest:contest_shell").getBest(), 5)));
24 | }
25 |
26 | @EventHandler
27 | public void onEndContest(ContestEndEvent event) {
28 | for (UUID playerUUID : event.getWinners()) {
29 | this.incrementProgress(playerUUID);
30 | }
31 | }
32 | }
33 |
--------------------------------------------------------------------------------
/src/main/java/fr/openmc/core/features/quests/rewards/QuestMoneyReward.java:
--------------------------------------------------------------------------------
1 | package fr.openmc.core.features.quests.rewards;
2 |
3 | import fr.openmc.core.features.economy.EconomyManager;
4 | import fr.openmc.core.utils.messages.MessageType;
5 | import fr.openmc.core.utils.messages.MessagesManager;
6 | import fr.openmc.core.utils.messages.Prefix;
7 | import lombok.Getter;
8 | import net.kyori.adventure.text.Component;
9 | import org.bukkit.entity.Player;
10 |
11 | /**
12 | * Class representing a money reward for a quest.
13 | *
14 | * This class implements the QuestReward interface and provides functionality to give a specified amount of money to a player.
15 | */
16 | public class QuestMoneyReward implements QuestReward {
17 |
18 | @Getter private final double amount;
19 |
20 | /**
21 | * Constructor for the QuestMoneyReward class.
22 | *
23 | * @param amount The amount of money to be rewarded.
24 | */
25 | public QuestMoneyReward(double amount) {
26 | this.amount = amount;
27 | }
28 |
29 | /**
30 | * Gives the specified amount of money to the player.
31 | *
32 | * @param player The player to whom the reward will be given.
33 | */
34 | @Override
35 | public void giveReward(Player player) {
36 | EconomyManager.getInstance().addBalance(player.getUniqueId(), amount);
37 | MessagesManager.sendMessage(
38 | player,
39 | Component.text("§aVous avez reçu §e" + amount + EconomyManager.getEconomyIcon()),
40 | Prefix.QUEST,
41 | MessageType.SUCCESS,
42 | false
43 | );
44 | }
45 | }
46 |
--------------------------------------------------------------------------------
/src/main/java/fr/openmc/core/features/quests/rewards/QuestReward.java:
--------------------------------------------------------------------------------
1 | package fr.openmc.core.features.quests.rewards;
2 |
3 | import org.bukkit.entity.Player;
4 |
5 | /**
6 | * Interface representing a quest reward.
7 | * Implementations of this interface should define how to give the reward to a player.
8 | */
9 | public interface QuestReward {
10 | /**
11 | * Gives the reward to the specified player.
12 | *
13 | * @param player The player to give the reward to.
14 | */
15 | void giveReward(Player player);
16 | }
17 |
--------------------------------------------------------------------------------
/src/main/java/fr/openmc/core/features/scoreboards/TabList.java:
--------------------------------------------------------------------------------
1 | package fr.openmc.core.features.scoreboards;
2 |
3 | import com.comphenix.protocol.PacketType;
4 | import com.comphenix.protocol.ProtocolLibrary;
5 | import com.comphenix.protocol.ProtocolManager;
6 | import com.comphenix.protocol.events.PacketContainer;
7 | import com.comphenix.protocol.wrappers.WrappedChatComponent;
8 | import lombok.Getter;
9 | import me.clip.placeholderapi.PlaceholderAPI;
10 | import org.bukkit.Bukkit;
11 | import org.bukkit.entity.Player;
12 |
13 | public class TabList {
14 |
15 | @Getter private static TabList instance;
16 | private ProtocolManager protocolManager = null;
17 |
18 | public TabList() {
19 | instance = this;
20 | if (Bukkit.getPluginManager().getPlugin("ProtocolLib") != null)
21 | this.protocolManager = ProtocolLibrary.getProtocolManager();
22 | }
23 |
24 | public void updateHeaderFooter(Player player, String header, String footer) {
25 | try {
26 | if (protocolManager == null) return;
27 | PacketContainer packet = protocolManager.createPacket(PacketType.Play.Server.PLAYER_LIST_HEADER_FOOTER);
28 | packet.getChatComponents().write(0, WrappedChatComponent.fromText(header))
29 | .write(1, WrappedChatComponent.fromText(footer));
30 | protocolManager.sendServerPacket(player, packet);
31 | } catch (Exception e) {
32 | throw new RuntimeException(e);
33 | }
34 | }
35 |
36 | public void updateTabList(Player player) {
37 | int visibleOnlinePlayers = 0;
38 | for (Player p : Bukkit.getOnlinePlayers()) {
39 | if (p.canSee(player)) {
40 | visibleOnlinePlayers++;
41 | }
42 | }
43 |
44 | String header = PlaceholderAPI.setPlaceholders(player, "\n\n\n\n\n\n\n"+PlaceholderAPI.setPlaceholders(player, "%img_openmc%")+"\n\n §eJoueurs en ligne §7: §6"+visibleOnlinePlayers+"§7/§e%server_max_players% \n");
45 | String footer = "\n§dplay.openmc.fr\n";
46 |
47 | updateHeaderFooter(player, header, footer);
48 | }
49 |
50 | }
51 |
--------------------------------------------------------------------------------
/src/main/java/fr/openmc/core/features/tpa/TPAManager.java:
--------------------------------------------------------------------------------
1 | package fr.openmc.core.features.tpa;
2 |
3 | import fr.openmc.core.OMCPlugin;
4 | import fr.openmc.core.CommandsManager;
5 | import fr.openmc.core.features.tpa.commands.TPACommand;
6 | import fr.openmc.core.features.tpa.commands.TPAcceptCommand;
7 | import fr.openmc.core.features.tpa.commands.TPCancelCommand;
8 | import fr.openmc.core.features.tpa.commands.TPDenyCommand;
9 |
10 | public class TPAManager {
11 |
12 | public TPAManager() {
13 | CommandsManager.getHandler().register(
14 | new TPAcceptCommand(),
15 | new TPACommand(OMCPlugin.getInstance()),
16 | new TPDenyCommand(),
17 | new TPCancelCommand()
18 | );
19 | }
20 | }
21 |
--------------------------------------------------------------------------------
/src/main/java/fr/openmc/core/features/tpa/commands/TPCancelCommand.java:
--------------------------------------------------------------------------------
1 | package fr.openmc.core.features.tpa.commands;
2 |
3 | import fr.openmc.core.features.tpa.TPAQueue;
4 | import fr.openmc.core.utils.messages.MessageType;
5 | import fr.openmc.core.utils.messages.MessagesManager;
6 | import fr.openmc.core.utils.messages.Prefix;
7 | import net.kyori.adventure.text.Component;
8 | import org.bukkit.entity.Player;
9 | import revxrsal.commands.annotation.Command;
10 | import revxrsal.commands.annotation.Named;
11 | import revxrsal.commands.annotation.Optional;
12 | import revxrsal.commands.bukkit.annotation.CommandPermission;
13 |
14 | public class TPCancelCommand {
15 |
16 | /**
17 | * Command to cancel a teleport request.
18 | * @param player The player who wants to cancel the request.
19 | */
20 | @Command("tpcancel")
21 | @CommandPermission("omc.commands.tpa")
22 | public void tpCancel(Player player) {
23 | if (!TPAQueue.QUEUE.requesterHasPendingRequest(player)) {
24 | MessagesManager.sendMessage(player, Component.text("§4Vous n'avez aucune demande de téléportation en cours"), Prefix.OPENMC, MessageType.ERROR, false);
25 | return;
26 | }
27 |
28 | Player target = TPAQueue.QUEUE.getTargetByRequester(player);
29 |
30 | TPAQueue.QUEUE.removeRequest(player, target);
31 | MessagesManager.sendMessage(player, Component.text("§2Vous avez annulé votre demande de téléportation à §6" + target.getName()), Prefix.OPENMC, MessageType.SUCCESS, true);
32 | MessagesManager.sendMessage(target, Component.text("§3" + player.getName() + " §4a annulé sa demande de téléportation"), Prefix.OPENMC, MessageType.INFO, true);
33 |
34 | }
35 | }
36 |
--------------------------------------------------------------------------------
/src/main/java/fr/openmc/core/features/updates/UpdateCommand.java:
--------------------------------------------------------------------------------
1 | package fr.openmc.core.features.updates;
2 |
3 | import org.bukkit.entity.Player;
4 |
5 | import revxrsal.commands.annotation.Command;
6 | import revxrsal.commands.annotation.Description;
7 | import revxrsal.commands.bukkit.annotation.CommandPermission;
8 |
9 | public class UpdateCommand {
10 |
11 | @Command("omc version")
12 | @CommandPermission("omc.commands.version")
13 | @Description("Vous donne de l'information sur le version du plugin")
14 | private void version(Player player) {
15 | UpdateManager.getInstance().sendUpdateMessage(player);
16 | }
17 | }
18 |
--------------------------------------------------------------------------------
/src/main/java/fr/openmc/core/features/updates/UpdateListener.java:
--------------------------------------------------------------------------------
1 | package fr.openmc.core.features.updates;
2 |
3 | import org.bukkit.entity.Player;
4 | import org.bukkit.event.EventHandler;
5 | import org.bukkit.event.Listener;
6 | import org.bukkit.event.player.PlayerJoinEvent;
7 |
8 | public class UpdateListener implements Listener {
9 |
10 | @EventHandler
11 | public void onPlayerJoin(PlayerJoinEvent event) {
12 | final Player player = event.getPlayer();
13 |
14 | UpdateManager.getInstance().sendUpdateMessage(player);
15 | }
16 | }
17 |
--------------------------------------------------------------------------------
/src/main/java/fr/openmc/core/features/updates/UpdateManager.java:
--------------------------------------------------------------------------------
1 | package fr.openmc.core.features.updates;
2 |
3 | import org.bukkit.Bukkit;
4 | import org.bukkit.entity.Player;
5 | import org.bukkit.scheduler.BukkitRunnable;
6 |
7 | import fr.openmc.core.OMCPlugin;
8 | import fr.openmc.core.utils.messages.MessageType;
9 | import fr.openmc.core.utils.messages.MessagesManager;
10 | import fr.openmc.core.utils.messages.Prefix;
11 | import lombok.Getter;
12 | import net.kyori.adventure.text.Component;
13 | import net.kyori.adventure.text.event.ClickEvent;
14 |
15 | public class UpdateManager {
16 | @Getter
17 | static UpdateManager instance;
18 | @Getter
19 | Component message;
20 |
21 | public UpdateManager() {
22 | instance = this;
23 |
24 | String version = OMCPlugin.getInstance().getDescription().getVersion();
25 | String milestoneUrl = "https://github.com/ServerOpenMC/PluginV2/releases/";
26 |
27 | message = Component.text("§8§m §r\n\n§7 Vous jouez actuellement sur la version")
28 | .append(Component.text("§d§l " + version).clickEvent(ClickEvent.openUrl(milestoneUrl)))
29 | .append(Component.text("§7 du plugin §d§lOpenMC.\n"))
30 | .append(Component.text("§f§l Cliquez ici pour voir les changements.").clickEvent(ClickEvent.openUrl(milestoneUrl)))
31 | .append(Component.text("\n\n§8§m §r"));
32 |
33 | long period = 14400 * 20; // 4h
34 |
35 | new BukkitRunnable() {
36 | @Override
37 | public void run() {
38 | sendUpdateBroadcast();
39 | };
40 | }.runTaskTimer(OMCPlugin.getInstance(), 0, period);
41 | }
42 |
43 | public void sendUpdateMessage(Player player) {
44 | player.sendMessage(message);
45 | }
46 |
47 | public void sendUpdateBroadcast() {
48 | Bukkit.broadcast(message);
49 | }
50 | }
51 |
--------------------------------------------------------------------------------
/src/main/java/fr/openmc/core/listeners/ChronometerListener.java:
--------------------------------------------------------------------------------
1 | package fr.openmc.core.listeners;
2 |
3 | import fr.openmc.api.chronometer.Chronometer;
4 | import org.bukkit.event.EventHandler;
5 | import org.bukkit.event.Listener;
6 | import org.bukkit.event.player.PlayerQuitEvent;
7 |
8 | public class ChronometerListener implements Listener {
9 | @EventHandler
10 | public void onDisconnection(PlayerQuitEvent e){
11 | Chronometer.stopAllChronometer(e.getPlayer(), null, "%null%");
12 | }
13 | }
14 |
--------------------------------------------------------------------------------
/src/main/java/fr/openmc/core/listeners/ClockInfos.java:
--------------------------------------------------------------------------------
1 | package fr.openmc.core.listeners;
2 |
3 | import net.kyori.adventure.text.Component;
4 | import org.bukkit.Material;
5 | import org.bukkit.entity.Player;
6 | import org.bukkit.event.EventHandler;
7 | import org.bukkit.event.Listener;
8 | import org.bukkit.event.player.PlayerInteractEvent;
9 | import org.bukkit.inventory.PlayerInventory;
10 |
11 | /*
12 | * Repris de src/main/java/fr/communaywen/core/clockinfos/tasks/CompassClockTask.java
13 | * Travail original par Fnafgameur
14 | */
15 | public class ClockInfos implements Listener {
16 | @EventHandler
17 | public void onPlayerInteract(PlayerInteractEvent event) {
18 | Player player = event.getPlayer();
19 | PlayerInventory inv = player.getInventory();
20 |
21 | if (inv.getItemInMainHand().getType() != Material.CLOCK) return;
22 |
23 | long daysPassed = player.getWorld().getFullTime() / 24000;
24 | long currentTime = player.getWorld().getTime();
25 | long time = currentTime + (daysPassed * 24000);
26 | long hours = (time / 1000 + 6) % 24;
27 | long minutes = (time % 1000) * 60 / 1000;
28 |
29 | String minutesAsText = String.format("%02d", minutes);
30 | String hoursAsText = String.format("%02d", hours);
31 |
32 | // J12 03h49
33 | player.sendActionBar(Component.text("J"+daysPassed+" "+hoursAsText+"h"+minutesAsText));
34 | }
35 | }
36 |
--------------------------------------------------------------------------------
/src/main/java/fr/openmc/core/listeners/PlayerDeathListener.java:
--------------------------------------------------------------------------------
1 | package fr.openmc.core.listeners;
2 |
3 | import fr.openmc.core.features.economy.EconomyManager;
4 | import fr.openmc.core.utils.messages.MessageType;
5 | import fr.openmc.core.utils.messages.MessagesManager;
6 | import fr.openmc.core.utils.messages.Prefix;
7 | import net.kyori.adventure.text.Component;
8 | import net.kyori.adventure.text.format.NamedTextColor;
9 | import org.bukkit.entity.Player;
10 | import org.bukkit.event.EventHandler;
11 | import org.bukkit.event.Listener;
12 | import org.bukkit.event.entity.PlayerDeathEvent;
13 |
14 | import static fr.openmc.core.features.economy.EconomyManager.*;
15 |
16 | public class PlayerDeathListener implements Listener {
17 | private final double LOSS_MONEY = 0.35;
18 |
19 | @EventHandler(ignoreCancelled = true)
20 | public void onPlayerDead(PlayerDeathEvent event) {
21 | Player player = event.getPlayer();
22 | double balance = getBalance(player.getUniqueId());
23 |
24 | if (balance>0) {
25 | withdrawBalance(player.getUniqueId(), balance * LOSS_MONEY);
26 | MessagesManager.sendMessage(player, Component.text("Vous venez de mourrir avec §6" + getFormattedSimplifiedNumber(balance) + EconomyManager.getEconomyIcon() + "§f, vous avez perdu §6" + getFormattedSimplifiedNumber(balance * LOSS_MONEY) + EconomyManager.getEconomyIcon() + "\n§8*pensez à mettre votre argent dans la banque*"), Prefix.OPENMC, MessageType.INFO, false);
27 | }
28 |
29 | if (event.deathMessage() == null) return;
30 | MessagesManager.broadcastMessage(event.deathMessage().color(NamedTextColor.DARK_RED), Prefix.DEATH, MessageType.INFO);
31 | event.deathMessage(null);
32 | }
33 | }
34 |
--------------------------------------------------------------------------------
/src/main/java/fr/openmc/core/listeners/RespawnListener.java:
--------------------------------------------------------------------------------
1 | package fr.openmc.core.listeners;
2 |
3 | import fr.openmc.core.commands.utils.SpawnManager;
4 | import org.bukkit.entity.Player;
5 | import org.bukkit.event.EventHandler;
6 | import org.bukkit.event.Listener;
7 | import org.bukkit.event.player.PlayerRespawnEvent;
8 |
9 | public class RespawnListener implements Listener {
10 |
11 | @EventHandler
12 | public void onRespawn(PlayerRespawnEvent event) {
13 | final Player player = event.getPlayer();
14 | if (player.getRespawnLocation() != null) return;
15 | event.setRespawnLocation(SpawnManager.getInstance().getSpawnLocation());
16 | }
17 |
18 | }
19 |
--------------------------------------------------------------------------------
/src/main/java/fr/openmc/core/listeners/SessionsListener.java:
--------------------------------------------------------------------------------
1 | package fr.openmc.core.listeners;
2 |
3 | import fr.openmc.core.features.analytics.Stats;
4 | import org.bukkit.event.EventHandler;
5 | import org.bukkit.event.Listener;
6 | import org.bukkit.event.player.PlayerJoinEvent;
7 |
8 | public class SessionsListener implements Listener {
9 | @EventHandler
10 | void onPlayerJoin(PlayerJoinEvent event) {
11 | Stats.SESSION.increment(event.getPlayer().getUniqueId());
12 | }
13 | }
14 |
--------------------------------------------------------------------------------
/src/main/java/fr/openmc/core/utils/CacheOfflinePlayer.java:
--------------------------------------------------------------------------------
1 | package fr.openmc.core.utils;
2 |
3 | import org.bukkit.Bukkit;
4 | import org.bukkit.OfflinePlayer;
5 |
6 | import java.util.HashMap;
7 | import java.util.Map;
8 | import java.util.UUID;
9 |
10 | public class CacheOfflinePlayer {
11 | private static final Map offlinePlayerCache = new HashMap<>();
12 |
13 | /**
14 | * Donne l'OfflinePlayer s'il est déjà mis en cache, sinon il exécute la méthode basique
15 | */
16 | public static OfflinePlayer getOfflinePlayer(UUID uuid) {
17 | return offlinePlayerCache.computeIfAbsent(uuid, Bukkit::getOfflinePlayer);
18 | }
19 | }
20 |
--------------------------------------------------------------------------------
/src/main/java/fr/openmc/core/utils/ChunkInfo.java:
--------------------------------------------------------------------------------
1 | package fr.openmc.core.utils;
2 |
3 | import fr.openmc.core.features.city.City;
4 |
5 | public record ChunkInfo(City city, boolean isProtected) { }
--------------------------------------------------------------------------------
/src/main/java/fr/openmc/core/utils/ChunkPos.java:
--------------------------------------------------------------------------------
1 | package fr.openmc.core.utils;
2 |
3 | public class ChunkPos {
4 | final int x, z;
5 | public ChunkPos(int x, int z) { this.x = x; this.z = z; }
6 |
7 | @Override
8 | public boolean equals(Object o) {
9 | if (this == o) return true;
10 | if (o == null || getClass() != o.getClass()) return false;
11 | ChunkPos chunkPos = (ChunkPos) o;
12 | return x == chunkPos.x && z == chunkPos.z;
13 | }
14 |
15 | @Override
16 | public int hashCode() {
17 | return 31 * x + z;
18 | }
19 |
20 | @Override
21 | public String toString() {
22 | return x + "," + z;
23 | }
24 | }
25 |
--------------------------------------------------------------------------------
/src/main/java/fr/openmc/core/utils/DiscordWebhook.java:
--------------------------------------------------------------------------------
1 | package fr.openmc.core.utils;
2 |
3 | import javax.net.ssl.HttpsURLConnection;
4 | import java.io.OutputStream;
5 | import java.net.URI;
6 | import java.net.URL;
7 | import java.nio.charset.StandardCharsets;
8 |
9 | public class DiscordWebhook {
10 |
11 | /**
12 | * Envoie un message vers un webhook Discord via POST JSON.
13 | *
14 | * @param webhookUrl URL complète du webhook (https://discord.com/api/webhooks/ID/TOKEN).
15 | * @param message Contenu du message à envoyer.
16 | * @throws Exception en cas d’erreur de connexion ou d’I/O.
17 | */
18 | public static void sendMessage(String webhookUrl, String message) throws Exception {
19 | URL url = new URI(webhookUrl).toURL();
20 | HttpsURLConnection conn = (HttpsURLConnection) url.openConnection();
21 | conn.setRequestMethod("POST");
22 | conn.setRequestProperty("Content-Type", "application/json");
23 | conn.setDoOutput(true);
24 |
25 | String jsonPayload = String.format("{\"content\":\"%s\"}", message);
26 | try (OutputStream os = conn.getOutputStream()) {
27 | os.write(jsonPayload.getBytes(StandardCharsets.UTF_8));
28 | }
29 |
30 | int status = conn.getResponseCode();
31 | if (status != 204) {
32 | throw new RuntimeException("Échec du webhook, code HTTP : " + status);
33 | }
34 | }
35 | }
--------------------------------------------------------------------------------
/src/main/java/fr/openmc/core/utils/MotdUtils.java:
--------------------------------------------------------------------------------
1 | package fr.openmc.core.utils;
2 |
3 | import org.bukkit.Bukkit;
4 | import org.bukkit.configuration.file.YamlConfiguration;
5 | import org.bukkit.plugin.java.JavaPlugin;
6 | import org.bukkit.scheduler.BukkitRunnable;
7 | import net.kyori.adventure.text.Component;
8 |
9 | import java.io.File;
10 | import java.util.List;
11 | import java.util.Map;
12 | import java.util.Random;
13 |
14 | public class MotdUtils {
15 | private final YamlConfiguration motdConfig;
16 | private static Component motd;
17 |
18 | public MotdUtils(JavaPlugin plugin) {
19 | File motdFile = new File(plugin.getDataFolder() + "/data", "motd.yml");
20 |
21 | if(!motdFile.exists()) {
22 | motdFile.getParentFile().mkdirs();
23 | plugin.saveResource("data/motd.yml", false);
24 | }
25 |
26 | motdConfig = YamlConfiguration.loadConfiguration(motdFile);
27 |
28 | new BukkitRunnable() {
29 | @Override
30 | public void run() {
31 | List