Skip to content
Open
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
6 changes: 5 additions & 1 deletion pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -33,13 +33,17 @@
<id>spigot-repo</id>
<url>https://hub.spigotmc.org/nexus/content/repositories/snapshots/</url>
</repository>
<repository>
<id>sonatype</id>
<url>https://oss.sonatype.org/groups/public/</url>
</repository>
</repositories>


<dependencies>
<dependency>
<groupId>org.spigotmc</groupId>
<artifactId>spigot</artifactId>
<artifactId>spigot-api</artifactId>
<version>1.8.8-R0.1-SNAPSHOT</version>
<scope>provided</scope>
</dependency>
Expand Down
155 changes: 153 additions & 2 deletions src/main/java/fr/revivemc/Main.java
Original file line number Diff line number Diff line change
@@ -1,13 +1,164 @@
package fr.revivemc;

import fr.revivemc.listeners.BreadListener;
import fr.revivemc.commands.PlayeriaCom;
import fr.revivemc.listeners.ConnectListener;
import fr.revivemc.listeners.CreeperListener;
import fr.revivemc.listeners.HealthListener;
import fr.revivemc.ui.PlayeriaScoreboard;
import org.bukkit.Bukkit;
import org.bukkit.configuration.file.YamlConfiguration;
import org.bukkit.entity.Player;
import org.bukkit.plugin.java.JavaPlugin;
import org.bukkit.scheduler.BukkitRunnable;

import java.io.File;
import java.io.IOException;
import java.util.Map;
import java.util.Set;
import java.util.UUID;

import static fr.revivemc.listeners.BreadListener.nmbrPain;
import static fr.revivemc.listeners.CreeperListener.nmbrCreeper;

public class Main extends JavaPlugin {

@Override
public void onEnable() {}
public void onEnable() {

try {
readAndWrite();
} catch (IOException e) {
getLogger().severe("Erreur lors de la lecture du fichier data.yml !");
e.printStackTrace();
}

PlayeriaScoreboard scoreboard = new PlayeriaScoreboard(this);

for (Player player : Bukkit.getOnlinePlayers()) {
scoreboard.update(player);
}

getCommand("playeria").setExecutor(new PlayeriaCom(this, scoreboard));
getServer().getPluginManager().registerEvents(new BreadListener(this, scoreboard), this);
getServer().getPluginManager().registerEvents(new ConnectListener(scoreboard), this);
getServer().getPluginManager().registerEvents(new HealthListener(this, scoreboard), this);
getServer().getPluginManager().registerEvents(new CreeperListener(scoreboard), this);
getLogger().info("Le plugin a démarré avec succès");

new BukkitRunnable() {

@Override
public void run() {
try {
save();
getLogger().info("Auto-save effectué.");
} catch (IOException e) {
getLogger().severe("Erreur lors de l'auto-save !");
e.printStackTrace();
}
}

}.runTaskTimer(this, 0L,6000L );
}

@Override
public void onDisable() {}
public void onDisable() {
try {
save();
} catch (IOException e) {
getLogger().severe("Erreur lors de la sauvegarde du fichier data.yml !");
e.printStackTrace();
}
}

public void createDataFile() {

File path = getDataFolder();
File file = new File(path,"data.yml");

path.mkdirs();
try {
file.createNewFile();
} catch (IOException e) {
getLogger().severe("Erreur lors de la création du fichier data.yml !");
e.printStackTrace();
}
}

public void save() throws IOException {

File path = getDataFolder();
File file = new File(path,"data.yml");

// Sécurité au cas où
if (!file.exists()) {
createDataFile();
}
// Sauvegarde
YamlConfiguration data = YamlConfiguration.loadConfiguration(file);

data.set("bread", null);
data.set("creeper", null);
for (Map.Entry<UUID, Integer> entry : nmbrPain.entrySet()) {

UUID uuid = entry.getKey();
int score = entry.getValue();

data.set("bread." + uuid, score);
}
for (Map.Entry<UUID, Integer> entry : nmbrCreeper.entrySet()) {

UUID uuid = entry.getKey();
int score = entry.getValue();

data.set("creeper." + uuid, score);
}
data.save(file);
}

public void readAndWrite() throws IOException {

File path = getDataFolder();
File file = new File(path,"data.yml");

// --- Si le fichier n'existe pas → sauvegarder puis lire ---
if (!file.exists()) {
createDataFile();
}

// --- Lire le fichier YML ---
YamlConfiguration data = YamlConfiguration.loadConfiguration(file);
nmbrPain.clear();
nmbrCreeper.clear();

if (data.getConfigurationSection("bread") != null) {

Set<String> key = data.getConfigurationSection("bread").getKeys(false);

for (String element : key) {
int score = data.getInt("bread." + element);
UUID uuid = UUID.fromString(element);
nmbrPain.put(uuid, score);
}
}
if (data.getConfigurationSection("creeper") != null) {

Set<String> key = data.getConfigurationSection("creeper").getKeys(false);

for (String element : key) {
int score = data.getInt("creeper." + element);
UUID uuid = UUID.fromString(element);
nmbrCreeper.put(uuid, score);
}
}
}

public Map<UUID, Integer> getPain() {
return nmbrPain;
}

public Map<UUID, Integer> getCreeper() {
return nmbrCreeper;
}
}
105 changes: 105 additions & 0 deletions src/main/java/fr/revivemc/commands/PlayeriaCom.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,105 @@
package fr.revivemc.commands;

import fr.revivemc.Main;
import fr.revivemc.ui.PlayeriaScoreboard;
import org.bukkit.Bukkit;
import org.bukkit.command.Command;
import org.bukkit.command.CommandExecutor;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;

import java.io.IOException;

import static fr.revivemc.listeners.BreadListener.nmbrPain;
import static fr.revivemc.listeners.CreeperListener.nmbrCreeper;
import static org.bukkit.Bukkit.getLogger;

public class PlayeriaCom implements CommandExecutor {

private final Main plugin;
private final PlayeriaScoreboard scoreboard;

public PlayeriaCom(Main plugin, PlayeriaScoreboard scoreboard) {
this.plugin = plugin;
this.scoreboard = scoreboard;
}

@Override
public boolean onCommand(CommandSender commandSender, Command command, String s, String[] args) {

if (args.length != 0) {
switch (args[0]) {
case "help":
commandSender.sendMessage("§6===== Playeria Commands =====");
commandSender.sendMessage("§e/playeria help §7- affiche les commandes");
commandSender.sendMessage("§e/playeria save §7- sauvegarde les données");
commandSender.sendMessage("§e/playeria clear bread §7- reset le compteur de pains pour tous les joueurs");
commandSender.sendMessage("§e/playeria clear creeper §7- reset le compteur de creepers pour tous les joueurs");
commandSender.sendMessage("§e/playeria clear all §7- reset le compteur de creepers et de pains pour tous les joueurs");
break;
case "save":
if (!commandSender.hasPermission("playeria.admin")) {
commandSender.sendMessage("§cTu n'as pas la permission pour executer cette commande !");
return true;
}
try {
plugin.save();
commandSender.sendMessage("§2Sauvegarde réussie");
if (commandSender instanceof Player) {
getLogger().info("Sauvegarde demandée par " + commandSender.getName());
}
} catch (IOException e) {
commandSender.sendMessage("§4Erreur lors de la sauvegarde du fichier data.yml, voir les logs pour plus de détail !");

getLogger().severe("Erreur lors de la sauvegarde du fichier data.yml !");
e.printStackTrace();
}
break;
case "clear" :
if (!commandSender.hasPermission("playeria.admin")) {
commandSender.sendMessage("§cTu n'as pas la permission pour executer cette commande !");
return true;
}
if (args.length >= 2) {
switch (args[1]){
case "bread" :
nmbrPain.clear();
for (Player player : Bukkit.getOnlinePlayers()) {
scoreboard.update(player);
}
commandSender.sendMessage("§2Le compteur de pains a été reset pour tous les joueurs !");

break;
case "creeper" :
nmbrCreeper.clear();
for (Player player : Bukkit.getOnlinePlayers()) {
scoreboard.update(player);
}
commandSender.sendMessage("§2Le compteur de creepers a été reset pour tous les joueurs !");
break;
case "all":
nmbrPain.clear();
nmbrCreeper.clear();
for (Player player : Bukkit.getOnlinePlayers()) {
scoreboard.update(player);
}
commandSender.sendMessage("§2Toutes les stats ont été reset pour tous les joueurs !");
break;
default:
commandSender.sendMessage("§4Mauvaise commande. \nListe des commandes disponibles avec /playeria : \n - /playeria help");
break;
}
} else {
commandSender.sendMessage("§4Commande mal exécutée. \nFaite /playeria help pour plus d'info");
}
break;
default:
commandSender.sendMessage("§4Mauvaise commande. \nListe des commandes disponibles avec /playeria : \n - /playeria help");
break;
}
} else {
commandSender.sendMessage("§4Commande mal exécutée. \nFaite /playeria help pour plus d'info");
}
return true;
}
}
83 changes: 83 additions & 0 deletions src/main/java/fr/revivemc/listeners/BreadListener.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,83 @@
package fr.revivemc.listeners;

import fr.revivemc.ui.PlayeriaScoreboard;
import org.bukkit.Bukkit;
import org.bukkit.Material;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.inventory.CraftItemEvent;
import org.bukkit.inventory.ItemStack;
import org.bukkit.plugin.java.JavaPlugin;

import java.util.HashMap;
import java.util.UUID;


public class BreadListener implements Listener {

private final JavaPlugin pluginInstance;
private final PlayeriaScoreboard scoreboard;

public BreadListener(JavaPlugin pluginInstance, PlayeriaScoreboard scoreboard){
this.pluginInstance = pluginInstance;
this.scoreboard = scoreboard;
}


public static HashMap<UUID, Integer> nmbrPain = new HashMap<>();


@EventHandler
public void onCraft(CraftItemEvent event) {
if (event.getWhoClicked() instanceof Player) {

Player player = (Player) event.getWhoClicked();

UUID uuid = player.getUniqueId();


if (event.getCurrentItem() != null && event.getCurrentItem().getType() == Material.BREAD) {
// Shift click traité séparément
if (event.isShiftClick()) {
int nmbrPainAvant = 0;

for (ItemStack item : player.getInventory().getContents()) {
if (item != null) {
if (item.getType() == Material.BREAD) {
nmbrPainAvant += item.getAmount();
}
}
}

final int finalPainAvant = nmbrPainAvant;

// fait le craft puis compte les objets dans l'inv après
Bukkit.getScheduler().runTask(pluginInstance, () -> {

int nmbrPainApres = 0;

for (ItemStack item : player.getInventory().getContents()) {
if (item != null) {
if (item.getType() == Material.BREAD) {
nmbrPainApres += item.getAmount();
}
}
}

int ancienScore = nmbrPain.getOrDefault(uuid, 0);
int diff = nmbrPainApres -finalPainAvant;
nmbrPain.put(uuid, ancienScore + diff);
scoreboard.update(player);

});

} else {
int ancienScore = nmbrPain.getOrDefault(uuid, 0);
nmbrPain.put(uuid, ancienScore + event.getCurrentItem().getAmount());
scoreboard.update(player);
}
}
}
}
}
21 changes: 21 additions & 0 deletions src/main/java/fr/revivemc/listeners/ConnectListener.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
package fr.revivemc.listeners;

import fr.revivemc.ui.PlayeriaScoreboard;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.player.PlayerJoinEvent;
import org.bukkit.event.player.PlayerLoginEvent;

public class ConnectListener implements Listener {

private final PlayeriaScoreboard scoreboard;

public ConnectListener(PlayeriaScoreboard scoreboard) {
this.scoreboard = scoreboard;
}

@EventHandler
public void onConnection(PlayerJoinEvent event) {
scoreboard.update(event.getPlayer());
}
}
Loading