Skip to content

Commit a47d05e

Browse files
committed
First working release
1 parent f243b17 commit a47d05e

8 files changed

Lines changed: 198 additions & 121 deletions

File tree

src/main/java/fr/fluffevent/fluffyteams/FluffyTeams.java

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,8 @@
22

33
import java.io.File;
44
import org.bukkit.plugin.PluginDescriptionFile;
5-
import org.bukkit.plugin.PluginManager;
65
import org.bukkit.plugin.java.JavaPlugin;
76
import org.bukkit.plugin.java.JavaPluginLoader;
8-
import org.bukkit.scheduler.BukkitScheduler;
97
import fr.fluffevent.fluffyteams.database.DatabaseManager;
108
import fr.fluffevent.fluffyteams.runnables.commands.FluffyTeamsCommand;
119

src/main/java/fr/fluffevent/fluffyteams/controllers/TeamController.java

Lines changed: 87 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package fr.fluffevent.fluffyteams.controllers;
22

33
import java.util.List;
4+
import java.util.UUID;
45

56
import org.bukkit.Bukkit;
67
import org.bukkit.ChatColor;
@@ -24,6 +25,41 @@ public TeamController() {
2425
db = DatabaseManager.getDatabase();
2526
}
2627

28+
public Team getTeam(String name) {
29+
List<Team> teams = db.where("name = ?", name).results(Team.class);
30+
if (teams.isEmpty()) {
31+
return null;
32+
}
33+
return teams.get(0);
34+
}
35+
36+
public Member getMember(String teamName, Player player) {
37+
Team team = getTeam(teamName);
38+
if (team == null) {
39+
throw new IllegalArgumentException("Team " + teamName + " not found");
40+
}
41+
42+
List<Member> members = db.where("team_id = ? AND player_uuid = ?", team.id, player.getUniqueId())
43+
.results(Member.class);
44+
if (members.isEmpty()) {
45+
return null;
46+
}
47+
return members.get(0);
48+
}
49+
50+
public Spawn getSpawn(String teamName) {
51+
Team team = getTeam(teamName);
52+
if (team == null) {
53+
throw new IllegalArgumentException("Team " + teamName + " not found");
54+
}
55+
56+
List<Spawn> spawns = db.where("team_id = ?", team.id).results(Spawn.class);
57+
if (spawns.isEmpty()) {
58+
return null;
59+
}
60+
return spawns.get(0);
61+
}
62+
2763
public void create(String name, String displayName) {
2864
Team team = new Team();
2965
team.name = name;
@@ -32,26 +68,38 @@ public void create(String name, String displayName) {
3268
db.insert(team);
3369
}
3470

35-
public void delete(String name) {
36-
Team team = db.where("name = ?", name).results(Team.class).get(0);
71+
public void delete(String teamName) {
72+
Team team = getTeam(teamName);
73+
if (team == null) {
74+
throw new IllegalArgumentException("Team " + teamName + " not found");
75+
}
3776
db.delete(team);
3877
}
3978

4079
public void addMember(String teamName, Player player) {
41-
Team team = db.where("name = ?", teamName).results(Team.class).get(0);
80+
Team team = getTeam(teamName);
81+
if (team == null) {
82+
throw new IllegalArgumentException("Team " + teamName + " not found");
83+
}
4284

4385
Member member = new Member();
4486
member.teamId = team.id;
45-
member.playerUuid = player.getUniqueId();
87+
member.playerUuid = player.getUniqueId().toString();
4688

4789
db.insert(member);
4890
}
4991

5092
public void removeMember(String teamName, Player player) {
51-
Team team = db.where("name = ?", teamName).results(Team.class).get(0);
93+
Team team = getTeam(teamName);
94+
if (team == null) {
95+
throw new IllegalArgumentException("Team " + teamName + " not found");
96+
}
5297

53-
Member member = db.where("team_id = ? AND player_uuid = ?", team.id, player.getUniqueId()).results(Member.class)
54-
.get(0);
98+
Member member = getMember(teamName, player);
99+
100+
if (member == null) {
101+
throw new IllegalArgumentException("Player " + player.getName() + " not found in team " + teamName);
102+
}
55103

56104
db.delete(member);
57105
}
@@ -61,50 +109,59 @@ public List<Team> list() {
61109
}
62110

63111
public List<OfflinePlayer> listMembers(String teamName) {
64-
Team team = db.where("name = ?", teamName).results(Team.class).get(0);
112+
Team team = getTeam(teamName);
65113
List<Member> members = db.where("team_id = ?", team.id).results(Member.class);
66114

67-
return members.stream().map(m -> Bukkit.getOfflinePlayer(m.playerUuid)).toList();
115+
return members.stream().map(m -> Bukkit.getOfflinePlayer(UUID.fromString(m.playerUuid))).toList();
68116
}
69117

70118
public void spawn(String teamName) {
71119
if (teamName.equals("*")) {
72120
this.list().forEach(t -> spawn(t.name));
73-
} else {
74-
Team team = db.where("name = ?", teamName).results(Team.class).get(0);
75-
Spawn spawn = db.where("team_id = ?", team.id).results(Spawn.class).get(0);
76-
77-
if (spawn == null) {
78-
throw new IllegalArgumentException("No spawn set for team " + teamName);
79-
}
121+
return;
122+
}
80123

81-
World world = Bukkit.getWorld(spawn.world);
82-
Location location = new Location(world, spawn.x, spawn.y, spawn.z, spawn.yaw, spawn.pitch);
124+
Spawn spawn = getSpawn(teamName);
83125

84-
listMembers(teamName).forEach(p -> {
85-
if (p.isOnline()) {
86-
p.getPlayer().teleport(location);
87-
}
88-
});
126+
if (spawn == null) {
127+
throw new IllegalArgumentException("No spawn set for team " + teamName);
89128
}
129+
130+
World world = Bukkit.getWorld(spawn.world);
131+
Location location = new Location(world, spawn.x, spawn.y, spawn.z, spawn.yaw, spawn.pitch);
132+
133+
listMembers(teamName).forEach(p -> {
134+
if (p.isOnline()) {
135+
p.getPlayer().teleport(location);
136+
}
137+
});
90138
}
91139

92140
public void setSpawn(String teamName, Location location) {
93-
Team team = db.where("name = ?", teamName).results(Team.class).get(0);
141+
if (teamName.equals("*")) {
142+
this.list().forEach(t -> setSpawn(t.name, location));
143+
return;
144+
}
145+
146+
Team team = getTeam(teamName);
147+
148+
if (team == null) {
149+
throw new IllegalArgumentException("Team " + teamName + " not found");
150+
}
94151

95-
Spawn spawn = db.where("team_id = ?", team.id).results(Spawn.class).get(0);
152+
Spawn spawn = getSpawn(teamName);
96153

97154
if (spawn == null) {
98155
spawn = new Spawn();
99156
spawn.teamId = team.id;
100157
}
101158

102159
spawn.world = location.getWorld().getName();
103-
spawn.x = (long) location.getX();
104-
spawn.y = (long) location.getY();
105-
spawn.z = (long) location.getZ();
106-
spawn.yaw = (long) location.getYaw();
107-
spawn.pitch = (long) location.getPitch();
160+
spawn.x = location.getX();
161+
spawn.y = location.getY();
162+
spawn.z = location.getZ();
163+
spawn.yaw = location.getYaw();
164+
spawn.pitch = location.getPitch();
108165

109166
if (spawn.id == 0) {
110167
db.insert(spawn);

src/main/java/fr/fluffevent/fluffyteams/database/DatabaseManager.java

Lines changed: 22 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,15 @@
11
package fr.fluffevent.fluffyteams.database;
22

3-
import com.dieselpoint.norm.Database;
3+
import java.lang.reflect.Constructor;
44
import java.util.ArrayList;
55
import java.util.Iterator;
66
import java.util.List;
7+
8+
import com.dieselpoint.norm.Database;
9+
710
import fr.fluffevent.fluffyteams.Config;
811
import fr.fluffevent.fluffyteams.FluffyTeams;
12+
import fr.fluffevent.fluffyteams.models.database.Member;
913
import fr.fluffevent.fluffyteams.models.database.Spawn;
1014
import fr.fluffevent.fluffyteams.models.database.Team;
1115

@@ -23,6 +27,7 @@ public static void connect() {
2327
List<Class<?>> classes = new ArrayList<Class<?>>();
2428
classes.add(Team.class);
2529
classes.add(Spawn.class);
30+
classes.add(Member.class);
2631
createStructure(classes);
2732

2833
FluffyTeams
@@ -35,11 +40,24 @@ public static void createStructure(List<Class<?>> classes) {
3540
Iterator<Class<?>> it = classes.iterator();
3641
while (it.hasNext()) {
3742
Class<?> classToCreate = it.next();
43+
String sqlCreationQuery = null;
44+
try {
45+
// Try to access custom table SQL creation if exists
46+
Constructor<?> ctor = classToCreate.getConstructor();
47+
Object object = ctor.newInstance(new Object[] {});
48+
sqlCreationQuery = (String) classToCreate.getDeclaredField("sqlCreationQuery").get(object);
49+
} catch (Exception ex) {
50+
// Auto generate the query if missing
51+
sqlCreationQuery = database.getSqlMaker().getCreateTableSql(classToCreate);
52+
}
53+
54+
// Patch to avoid exceptions
55+
sqlCreationQuery = sqlCreationQuery.replace("create table", "create table if not exists");
56+
3857
try {
39-
database.createTable(classToCreate);
58+
database.sql(sqlCreationQuery).execute();
4059
} catch (Exception ex) {
41-
// TODO handle exeptions
42-
// PS: it's normal some are thrown if the table already exists
60+
ex.printStackTrace();
4361
}
4462
}
4563
}
Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,23 @@
11
package fr.fluffevent.fluffyteams.models.database;
22

3-
import java.util.UUID;
43
import javax.persistence.Column;
54
import javax.persistence.GeneratedValue;
65
import javax.persistence.Id;
76
import javax.persistence.Table;
7+
import javax.persistence.Transient;
88

99
@Table(name = "fluffy_members")
1010
public class Member extends DatabaseModel {
11+
@Transient
12+
public String sqlCreationQuery = "create table `fluffy_members` (`id` bigint(20) NOT NULL AUTO_INCREMENT, `team_id` bigint(20), `player_uuid` varchar(255), PRIMARY KEY (`id`));";
1113

1214
@Id
1315
@GeneratedValue
1416
public long id;
1517

16-
@Column(name = "id")
18+
@Column(name = "team_id")
1719
public long teamId;
1820

1921
@Column(name = "player_uuid")
20-
public UUID playerUuid;
22+
public String playerUuid;
2123
}
Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,36 +1,38 @@
11
package fr.fluffevent.fluffyteams.models.database;
22

3-
import java.util.UUID;
43
import javax.persistence.Column;
54
import javax.persistence.GeneratedValue;
65
import javax.persistence.Id;
76
import javax.persistence.Table;
7+
import javax.persistence.Transient;
88

99
@Table(name = "fluffy_spawns")
1010
public class Spawn extends DatabaseModel {
11+
@Transient
12+
public String sqlCreationQuery = "create table `fluffy_spawns` (`id` bigint(20) NOT NULL AUTO_INCREMENT, `team_id` bigint(20), `world` varchar(255), `display_name` varchar(255), `x` double, `y` double, `z` double, `yaw` float, `pitch` float, PRIMARY KEY (`id`));";
1113

1214
@Id
1315
@GeneratedValue
1416
public long id;
1517

16-
@Column(name = "id")
18+
@Column(name = "team_id")
1719
public long teamId;
1820

1921
@Column(name = "world")
2022
public String world;
2123

2224
@Column(name = "x")
23-
public long x;
25+
public double x;
2426

2527
@Column(name = "y")
26-
public long y;
28+
public double y;
2729

2830
@Column(name = "z")
29-
public long z;
31+
public double z;
3032

3133
@Column(name = "yaw")
32-
public long yaw;
34+
public float yaw;
3335

3436
@Column(name = "pitch")
35-
public long pitch;
37+
public float pitch;
3638
}

src/main/java/fr/fluffevent/fluffyteams/models/database/Team.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,15 @@
11
package fr.fluffevent.fluffyteams.models.database;
22

3-
import java.util.UUID;
43
import javax.persistence.Column;
54
import javax.persistence.GeneratedValue;
65
import javax.persistence.Id;
76
import javax.persistence.Table;
7+
import javax.persistence.Transient;
88

99
@Table(name = "fluffy_teams")
1010
public class Team extends DatabaseModel {
11+
@Transient
12+
public String sqlCreationQuery = "create table `fluffy_teams` (`id` bigint(20) NOT NULL AUTO_INCREMENT, `name` varchar(255), `display_name` varchar(255), PRIMARY KEY (`id`));";
1113

1214
@Id
1315
@GeneratedValue

0 commit comments

Comments
 (0)