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
91 changes: 64 additions & 27 deletions src/main/java/fr/communaywen/core/teams/Team.java
Original file line number Diff line number Diff line change
Expand Up @@ -3,11 +3,16 @@
import fr.communaywen.core.AywenCraftPlugin;
import fr.communaywen.core.teams.utils.MethodState;
import fr.communaywen.core.utils.database.DatabaseConnector;
import fr.communaywen.core.utils.serializer.BukkitSerializer;
import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.Material;
import org.bukkit.enchantments.Enchantment;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.inventory.InventoryCloseEvent;
import org.bukkit.event.inventory.InventoryOpenEvent;
import org.bukkit.inventory.Inventory;
import org.bukkit.inventory.ItemFlag;
import org.bukkit.inventory.ItemStack;
Expand All @@ -17,17 +22,48 @@
import java.sql.SQLException;
import java.util.*;

public class Team extends DatabaseConnector {
public class Team extends DatabaseConnector implements Listener{

private UUID owner;
private final String name;
private final List<UUID> players = new ArrayList<>();
private final Inventory inventory;

public Team(UUID owner, String name) {
AywenCraftPlugin plugin;

public Team(UUID owner, String name, AywenCraftPlugin plugin) {
this.plugin = plugin;
this.owner = owner;
this.name = name;
this.inventory = Bukkit.createInventory(null, 27, name + " - Inventory");
plugin.getServer().getPluginManager().registerEvents(this, plugin);
}

@EventHandler
public void onInventoryOpen(InventoryOpenEvent e) {
Inventory inv = e.getInventory();
if (inv.equals(inventory)) {
if (inv.getViewers().size() > 1) {
Player other = (Player) inv.getViewers().getFirst();
e.getPlayer().sendMessage(ChatColor.RED+other.getName()+" est déjà entrain de regarder l'inventaire de team");
e.getPlayer().closeInventory();
e.setCancelled(true);
}
}
}

@EventHandler
public void onInventoryClose(InventoryCloseEvent e) {
if (e.getInventory() == inventory) {
try {
PreparedStatement statement = connection.prepareStatement("UPDATE teams SET inventory = ? WHERE teamName = ?");
statement.setBytes(1, new BukkitSerializer().serializeItemStacks(inventory.getContents()));
statement.setString(2, name);
statement.executeUpdate();
} catch (Exception exc) {
plugin.getLogger().severe("Impossible de sauvegarder l'inventaire de la team '"+this.name+"'");
}
}
}

public void delete() throws SQLException {
Expand All @@ -36,34 +72,12 @@ public void delete() throws SQLException {
statement.setString(1, this.name);
statement.executeUpdate();

// Remove team from teams
// Delete team from teams
statement = connection.prepareStatement("DELETE FROM teams WHERE teamName = ?");
statement.setString(1, this.name);
statement.executeUpdate();
}

public void save(){
try {
delete();

for (UUID player : this.getPlayers()){
PreparedStatement statement = connection.prepareStatement("INSERT INTO teams_player VALUES (?, ?)");
statement.setString(1, this.name);
statement.setString(2, player.toString());
statement.executeUpdate();
}

PreparedStatement statement = connection.prepareStatement("INSERT INTO teams VALUES (?, ?, 0)");
statement.setString(1, this.name);
statement.setString(2, this.owner.toString());
statement.executeUpdate();

} catch (SQLException e){
e.printStackTrace();
System.out.println("\u001B[31mErreur en sauvegardant la team '"+this.name+"'\u001B[0m");
}
}


public String getName() {
return name;
Expand Down Expand Up @@ -96,6 +110,12 @@ public void openInventory(Player player) {
player.openInventory(inventory);
}

public void setInventory(ItemStack[] newinv) {
// Woooooh dangereux
if (newinv == null) { return; }
inventory.setContents(newinv);
}

public void giveClaimStick(Player player) {
ItemStack itemStack = new ItemStack(Material.STICK);
ItemMeta itemMeta = itemStack.getItemMeta();
Expand Down Expand Up @@ -137,7 +157,16 @@ public boolean addPlayer(UUID player) {
return false;
}
players.add(player);
save();

try {
PreparedStatement statement = connection.prepareStatement("INSERT INTO teams_player VALUES (?, ?)");
statement.setString(1, this.name);
statement.setString(2, player.toString());
statement.executeUpdate();
} catch (Exception e) {
plugin.getLogger().severe("Impossible d'ajouter '"+player.toString()+"' dans '"+this.name+"'");
}

return true;
}

Expand All @@ -161,7 +190,15 @@ public MethodState removePlayer(UUID player) {
if (isOwner(player)) {
owner = getRandomPlayer();
}
save();

try {
PreparedStatement statement = connection.prepareStatement("DELETE FROM teams_player WHERE player = ?");
statement.setString(2, player.toString());
statement.executeUpdate();
} catch (Exception e) {
plugin.getLogger().severe("Impossible de supprimer '"+player.toString()+"' dans '"+this.name+"'");
}

return MethodState.VALID;
}

Expand Down
25 changes: 22 additions & 3 deletions src/main/java/fr/communaywen/core/teams/TeamManager.java
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
import fr.communaywen.core.credit.Feature;
import fr.communaywen.core.utils.Queue;
import fr.communaywen.core.utils.database.DatabaseConnector;
import fr.communaywen.core.utils.serializer.BukkitSerializer;
import lombok.Getter;
import org.bukkit.Material;
import org.bukkit.inventory.ItemStack;
Expand All @@ -21,18 +22,25 @@ public class TeamManager extends DatabaseConnector {
// Zeub - By Xernas 05/07/2024 à 00:05 (UTC+2)
// Le createur de ce truc

AywenCraftPlugin plugin;

public TeamManager(AywenCraftPlugin plugin) {
this.plugin = plugin;
try {
ResultSet rs = connection.prepareStatement("SELECT * FROM teams").executeQuery();

while (rs.next()) {
Team team = createTeam(UUID.fromString(rs.getString("owner")), rs.getString("teamName"));
PreparedStatement query = connection.prepareStatement("SELECT * FROM teams_player WHERE teamName = ?");
query.setString(1, rs.getString("teamName"));
ResultSet players = query.executeQuery();

ItemStack[] newInventory = new BukkitSerializer().deserializeItemStacks(rs.getBytes("inventory"));
if (newInventory != null) {
team.setInventory(newInventory);
}

ResultSet players = query.executeQuery();
while (players.next()) {
System.out.println("Adding "+players.getString("player"));
team.addPlayerWithoutSave(UUID.fromString(players.getString("player")));
}
}
Expand All @@ -51,10 +59,21 @@ public TeamManager(AywenCraftPlugin plugin) {
private final Queue<UUID, Team> pendingInvites = new Queue<>(20);

public Team createTeam(UUID owner, String name) {
Team team = new Team(owner, name);
Team team = new Team(owner, name, plugin);
if (!teamExists(name)) {
teams.add(team);
}

try {
PreparedStatement statement = connection.prepareStatement("INSERT INTO teams (teamName, owner, balance) VALUES (?, ?, 0)");
statement.setString(1, name);
statement.setString(2, owner.toString());

statement.executeUpdate();
} catch (Exception e) {
plugin.getLogger().severe("Impossible de sauvegarder la team '"+name+"'");
}

return team;
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -48,7 +48,7 @@ public void init() throws SQLException {
this.getConnection().prepareStatement("CREATE TABLE IF NOT EXISTS link_verif (minecraft_uuid VARCHAR(36) NOT NULL, code int(11) NOT NULL)").executeUpdate();
this.getConnection().prepareStatement("CREATE TABLE IF NOT EXISTS events_rewards (player VARCHAR(36) NOT NULL PRIMARY KEY, scope VARCHAR(32) NOT NULL, isClaimed BOOLEAN)").executeUpdate();
this.getConnection().prepareStatement("CREATE TABLE IF NOT EXISTS teams_player (teamName VARCHAR(16) NOT NULL, player VARCHAR(36) NOT NULL)").executeUpdate();
this.getConnection().prepareStatement("CREATE TABLE IF NOT EXISTS teams (teamName VARCHAR(16) NOT NULL PRIMARY KEY, owner VARCHAR(36) NOT NULL, balance BIGINT UNSIGNED)").executeUpdate();
this.getConnection().prepareStatement("CREATE TABLE IF NOT EXISTS teams (teamName VARCHAR(16) NOT NULL PRIMARY KEY, owner VARCHAR(36) NOT NULL, balance BIGINT UNSIGNED, inventory LONGBLOB)").executeUpdate();

// Système de claims
this.getConnection().prepareStatement("CREATE TABLE IF NOT EXISTS claim (" +
Expand Down