Skip to content
This repository was archived by the owner on Oct 12, 2025. It is now read-only.
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 3 additions & 1 deletion src/main/java/fr/communaywen/core/AywenCraftPlugin.java
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@
import fr.communaywen.core.commands.fun.*;
import fr.communaywen.core.commands.link.LinkCommand;
import fr.communaywen.core.commands.link.ManualLinkCommand;
import fr.communaywen.core.commands.randomEvents.RandomEventsCommand;
import fr.communaywen.core.commands.socials.DiscordCommand;
import fr.communaywen.core.commands.socials.GithubCommand;
import fr.communaywen.core.commands.staff.ReportCommands;
Expand Down Expand Up @@ -215,7 +216,8 @@ public void onEnable() {
new ShowCraftCommand(managers.getCustomItemsManager()),
new ReportCommands(),
new ChatChannelCMD(),
new MailboxCommand()
new MailboxCommand(),
new RandomEventsCommand(this)
);

/* -------- */
Expand Down
496 changes: 323 additions & 173 deletions src/main/java/fr/communaywen/core/EventsManager.java

Large diffs are not rendered by default.

4 changes: 3 additions & 1 deletion src/main/java/fr/communaywen/core/Managers.java
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package fr.communaywen.core;

import fr.communaywen.core.commands.fun.RewardCommand;
import fr.communaywen.core.commands.randomEvents.RandomEventsData;
import fr.communaywen.core.corpse.CorpseManager;
import fr.communaywen.core.credit.Credit;
import fr.communaywen.core.credit.FeatureManager;
Expand Down Expand Up @@ -81,7 +82,8 @@ public void init(AywenCraftPlugin plugin) {
RewardCommand.class,
TeamManager.class,
Team.class,
TransactionsManager.class
TransactionsManager.class,
RandomEventsData.class
);
}
// Database
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
package fr.communaywen.core.commands.randomEvents;

public class EventsDifficulties {
public static final int DISABLED = 0;
public static final int EASY = 1;
public static final int NORMAL = 2;
public static final int HARD = 3;
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
package fr.communaywen.core.commands.randomEvents;

import org.bukkit.entity.Player;

import fr.communaywen.core.AywenCraftPlugin;
import fr.communaywen.core.credit.Credit;
import fr.communaywen.core.credit.Feature;
import revxrsal.commands.annotation.Command;
import revxrsal.commands.annotation.Description;


@Credit("Armibule")
@Feature("EventsCommand")
public class RandomEventsCommand {

private AywenCraftPlugin plugin;

public RandomEventsCommand(AywenCraftPlugin plugin) {
this.plugin = plugin;
}

@Command("events")
@Description("Ouvre le menu des évènements aléatoires")
public void adminShop(Player player) {
RandomEventsMenu menu = new RandomEventsMenu(player, plugin);
menu.open();
}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,77 @@
package fr.communaywen.core.commands.randomEvents;

import fr.communaywen.core.utils.database.DatabaseConnector;
import org.bukkit.configuration.file.FileConfiguration;
import org.bukkit.configuration.file.YamlConfiguration;
import org.bukkit.entity.Player;

import java.io.File;
import java.io.IOException;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.HashMap;
import java.util.Map;
import java.util.UUID;


// Stocke les préférences des joueurs en terme de difficulté etc
public class RandomEventsData extends DatabaseConnector {
private static Map<UUID, Integer> playersDifficulties;

public static void setPlayerDifficulty(Player player, Integer difficulty) {
if (0 <= difficulty && difficulty <= 3) {
playersDifficulties.put(player.getUniqueId(), difficulty);
savePlayerData(player);
}
}
public static Integer getPlayerDifficulty(Player player) {
return playersDifficulties.getOrDefault(player.getUniqueId(), EventsDifficulties.NORMAL);
}

// returns true on success, false when it fails
public static boolean savePlayerData(Player player) {
try {
PreparedStatement statement = connection.prepareStatement("SELECT * FROM random_events WHERE player = ?");
statement.setString(1, player.getUniqueId().toString());

ResultSet result = statement.executeQuery();

if (result.next()) {
statement = connection.prepareStatement("UPDATE random_events SET difficulty = ? WHERE player = ?");
statement.setDouble(1, getPlayerDifficulty(player));
statement.setString(2, player.getUniqueId().toString());
} else {
statement = connection.prepareStatement("INSERT INTO random_events (player, difficulty) VALUES (?, ?)");
statement.setString(1, player.getUniqueId().toString());
statement.setDouble(2, getPlayerDifficulty(player));
}

int affectedRows = statement.executeUpdate();

if (affectedRows == 0) {
return false;
}

} catch (SQLException ignored) {
return false;
}
return true;
}

public static void loadData() {
try {
PreparedStatement statement = connection.prepareStatement("SELECT * FROM random_events");
ResultSet result = statement.executeQuery();

playersDifficulties = new HashMap<>();

while (result.next()) {
playersDifficulties.put(UUID.fromString(result.getString("player")), result.getInt("difficulty"));
}
} catch (SQLException ignored) {
System.err.println("Random Events data coundn't be loaded !");
}
}
}

Original file line number Diff line number Diff line change
@@ -0,0 +1,242 @@
package fr.communaywen.core.commands.randomEvents;

import dev.xernas.menulib.Menu;
import dev.xernas.menulib.utils.InventorySize;
import dev.xernas.menulib.utils.ItemBuilder;
import fr.communaywen.core.AywenCraftPlugin;
import fr.communaywen.core.EventsManager;
import net.kyori.adventure.text.Component;
import net.md_5.bungee.api.ChatColor;

import org.bukkit.Material;
import org.bukkit.entity.Player;
import org.bukkit.event.inventory.InventoryClickEvent;
import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.meta.ItemMeta;
import org.jetbrains.annotations.NotNull;

import java.util.Map;
import java.util.List;


public class RandomEventsMenu extends Menu {

private EventsManager eventsManager;
private boolean isAdmin;

public RandomEventsMenu(Player player, AywenCraftPlugin plugin) {
super(player);

eventsManager = plugin.eventsManager;
isAdmin = player.isOp();
}

@Override
public @NotNull String getName() {
if (isAdmin) {
return ChatColor.GOLD + "Events aléatoires - Admin";
} else {
return ChatColor.BLACK + "Events aléatoires - Paramètres";
}
}

@Override
public @NotNull InventorySize getInventorySize() {
return InventorySize.NORMAL;
}

@Override
public void onInventoryClick(InventoryClickEvent event) {}

@Override
public @NotNull Map<Integer, ItemStack> getContent() {
Map<Integer, ItemStack> content = fill(Material.GRAY_STAINED_GLASS_PANE);

ItemBuilder item;
ItemMeta meta;

if (isAdmin) {
item = new ItemBuilder(this, Material.ZOMBIE_SPAWN_EGG);
meta = item.getItemMeta();
meta.itemName(Component.text("Nuit Terrifiante"));

if (eventsManager.isTerrifyingNightEnabled()) {
meta.lore(List.of(
Component.text(ChatColor.GREEN + "Activé"),
Component.text("Clic gauche pour désactiver"),
Component.text(ChatColor.GOLD + "Clic droit pour lancer")
));
meta.setEnchantmentGlintOverride(true);
item.setOnClick(event -> {
if (event.isRightClick()) {
eventsManager.startTerrifyingNight();
} else {
eventsManager.enabledEvents.remove(EventsManager.TERRIFYING_NIGHT);
}
open();
});
} else {
meta.lore(List.of(
Component.text(ChatColor.RED + "Désactivé"),
Component.text("Clic gauche pour réactiver"),
Component.text(ChatColor.GOLD + "Clic droit pour lancer")
));
item.setOnClick(event -> {
if (event.isRightClick()) {
eventsManager.startTerrifyingNight();
} else {
eventsManager.enabledEvents.add(EventsManager.TERRIFYING_NIGHT);
}
open();
});
}
item.setItemMeta(meta);
content.put(10, item);


item = new ItemBuilder(this, Material.FISHING_ROD);
meta = item.getItemMeta();
meta.itemName(Component.text("Pêche Miraculeuse"));

if (eventsManager.isMiraculousFishingEnabled()) {
meta.lore(List.of(
Component.text(ChatColor.GREEN + "Activé"),
Component.text(ChatColor.RED + "Clic gauche pour désactiver"),
Component.text(ChatColor.GOLD + "Clic droit pour lancer")
));
meta.setEnchantmentGlintOverride(true);
item.setOnClick(event -> {
if (event.isRightClick()) {
eventsManager.startMiraculousFishing();
} else {
eventsManager.enabledEvents.remove(EventsManager.MIRACULOUS_FISHING);
}
open();
});
} else {
meta.lore(List.of(
Component.text(ChatColor.RED + "Désactivé"),
Component.text(ChatColor.GREEN + "Clic gauche pour réactiver"),
Component.text(ChatColor.GOLD + "Clic droit pour lancer")
));
item.setOnClick(event -> {
if (event.isRightClick()) {
eventsManager.startMiraculousFishing();
} else {
eventsManager.enabledEvents.add(EventsManager.MIRACULOUS_FISHING);
}
open();
});
}
item.setItemMeta(meta);
content.put(11, item);


if (eventsManager.isRunning()) {
item = new ItemBuilder(this, Material.GREEN_WOOL);
meta = item.getItemMeta();
meta.itemName(Component.text(ChatColor.RED + "Désactiver les events"));
meta.setEnchantmentGlintOverride(true);
item.setOnClick(event -> {
eventsManager.stop();
open();
});
} else {
item = new ItemBuilder(this, Material.RED_WOOL);
meta = item.getItemMeta();
meta.itemName(Component.text(ChatColor.GREEN + "Réactiver les events"));
item.setOnClick(event -> {
eventsManager.start();
open();
});
}
item.setItemMeta(meta);
content.put(15, item);


item = new ItemBuilder(this, Material.PLAYER_HEAD);
meta = item.getItemMeta();
meta.itemName(Component.text(ChatColor.GOLD + "Menu joueur"));
item.setItemMeta(meta);

item.setOnClick(event -> {
isAdmin = false;
open();
});
content.put(16, item);

} else {

Integer difficulty = RandomEventsData.getPlayerDifficulty(getOwner());


switch (difficulty) {
case EventsDifficulties.DISABLED:
item = new ItemBuilder(this, Material.BARRIER);
meta = item.getItemMeta();

meta.lore(List.of(
Component.text(ChatColor.RED + "Désactivé"),
Component.text("Clic gauche pour changer la difficulté")
));
item.setOnClick(event -> {
RandomEventsData.setPlayerDifficulty(getOwner(), EventsDifficulties.EASY);
open();
});
break;

case EventsDifficulties.EASY:
item = new ItemBuilder(this, Material.ZOMBIE_SPAWN_EGG);
meta = item.getItemMeta();

meta.lore(List.of(
Component.text(ChatColor.GREEN + "Facile"),
Component.text("Clic gauche pour changer la difficulté")
));
item.setOnClick(event -> {
RandomEventsData.setPlayerDifficulty(getOwner(), EventsDifficulties.NORMAL);
open();
});
break;

case EventsDifficulties.NORMAL:
item = new ItemBuilder(this, Material.ZOMBIE_HEAD);
meta = item.getItemMeta();

meta.lore(List.of(
Component.text(ChatColor.YELLOW + "Normale"),
Component.text("Clic gauche pour changer la difficulté")
));
item.setOnClick(event -> {
RandomEventsData.setPlayerDifficulty(getOwner(), EventsDifficulties.HARD);
open();
});
break;

case EventsDifficulties.HARD:
item = new ItemBuilder(this, Material.WITHER_SKELETON_SKULL);
meta = item.getItemMeta();

meta.lore(List.of(
Component.text(ChatColor.LIGHT_PURPLE + "Difficile"),
Component.text("Clic gauche pour changer la difficulté")
));
item.setOnClick(event -> {
RandomEventsData.setPlayerDifficulty(getOwner(), EventsDifficulties.DISABLED);
open();
});
break;

default:
// Achievement unlocked: How did we get there ?
item = new ItemBuilder(this, Material.AIR);
meta = item.getItemMeta();
break;
}
meta.itemName(Component.text(ChatColor.GOLD + "Difficulté des events"));
item.setItemMeta(meta);
content.put(13, item);
}
return content;
}
}
Loading