Skip to content

Commit 856ee4e

Browse files
Improve Kit contents (de)serialization. (#61)
* feat(ClaimedKit): Specify table name for ClaimedKit entity * feat(database): Migrate from PostgreSQL to MariaDB in docker-compose * refactor(InventoryUtil): Remove unused serialization methods and improve inventory handling * feat(PlayerKit): Update items field to use byte array for kit content storage * feat(PlayerKitService): Refactor kit handling and improve inventory management * feat(PlayerKitSetup): Update item serialization to use byte array format * feat(PlayerKitsPlugin): Initialize PlayerKitService during plugin startup * fix(InventoryUtil): Simplify inventory free space calculation and remove deprecated methods * feat(ClaimedKit): Update kitName to kitId for improved data handling * feat(ClaimedKitService): Refactor kit handling to use kitId instead of kitName for improved data consistency * fix(TimeUtil): Simplify time calculation by removing redundant System.currentTimeMillis() call * feat(ClaimedKitService): Update cooldown and claimedAt for existing claimed kits
1 parent f618335 commit 856ee4e

9 files changed

Lines changed: 119 additions & 182 deletions

File tree

Lines changed: 11 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,21 @@
11
# docker compose up -d
22
services:
3-
postgres:
4-
image: postgres
5-
container_name: 'player_kits_postgresql'
3+
mariadb:
4+
image: mariadb
5+
container_name: 'player_kits_mariadb'
66
ports:
7-
- 5432:5432
7+
- "3306:3306"
88
shm_size: 128mb
99
volumes:
10-
- ./postgresql/data/:/var/lib/postgresql
10+
- ./mariadb/data/:/var/lib/mysql
1111
environment:
12-
POSTGRES_PASSWORD: playerkits
13-
POSTGRES_USER: playerkits
14-
POSTGRES_DB: playerkits
12+
MARIADB_ROOT_PASSWORD: playerkits
13+
MARIADB_USER: playerkits
14+
MARIADB_PASSWORD: playerkits
15+
MARIADB_DATABASE: playerkits
1516
networks:
16-
- player_kits_postgresql_go_net
17+
- player_kits_mariadb_net
1718

1819
networks:
19-
player_kits_postgresql_go_net:
20+
player_kits_mariadb_net:
2021
driver: bridge

src/main/java/net/onelitefeather/playerkits/PlayerKitsPlugin.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,10 @@ public void onEnable() {
5151
this.itemRegistry = new ItemRegistry(this);
5252

5353
this.claimedKitService = new ClaimedKitService(this);
54+
5455
this.playerKitService = new PlayerKitService(this);
56+
this.playerKitService.init();
57+
5558
this.kitSetupService = new PlayerKitSetupService(this);
5659

5760
this.paperCommandService = new PaperCommandService(this);

src/main/java/net/onelitefeather/playerkits/kit/ClaimedKit.java

Lines changed: 13 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,13 @@
22

33
import jakarta.persistence.*;
44
import org.jetbrains.annotations.NotNull;
5+
import org.jetbrains.annotations.Nullable;
56

67
import java.util.Objects;
78
import java.util.UUID;
89

910
@Entity
10-
@Table
11+
@Table(name = "claimed_kits")
1112
public class ClaimedKit {
1213

1314
@Id
@@ -18,7 +19,7 @@ public class ClaimedKit {
1819
private String claimedBy;
1920

2021
@Column
21-
private String kitName;
22+
private Long kitId;
2223

2324
@Column
2425
private Boolean firstJoin;
@@ -35,16 +36,16 @@ public class ClaimedKit {
3536
public ClaimedKit() {
3637
}
3738

38-
public ClaimedKit(@NotNull Long id,
39+
public ClaimedKit(@Nullable Long id,
3940
@NotNull String claimedBy,
40-
@NotNull String kitName,
41+
@NotNull Long kitId,
4142
@NotNull Boolean firstJoin,
4243
@NotNull Boolean oneTime,
4344
@NotNull Long claimedAt,
4445
@NotNull Long cooldown) {
4546
this.id = id;
4647
this.claimedBy = claimedBy;
47-
this.kitName = kitName;
48+
this.kitId = kitId;
4849
this.firstJoin = firstJoin;
4950
this.oneTime = oneTime;
5051
this.claimedAt = claimedAt;
@@ -79,12 +80,12 @@ public void setClaimedBy(@NotNull String claimedBy) {
7980
}
8081

8182
@NotNull
82-
public String getKitName() {
83-
return kitName;
83+
public Long getKitId() {
84+
return kitId;
8485
}
8586

86-
public void setKitName(@NotNull String kitName) {
87-
this.kitName = kitName;
87+
public void setKitId(@NotNull Long kitId) {
88+
this.kitId = kitId;
8889
}
8990

9091
@NotNull
@@ -129,7 +130,7 @@ public String toString() {
129130
return "ClaimedKit{" +
130131
"id=" + id +
131132
", claimedBy='" + claimedBy + '\'' +
132-
", kitName='" + kitName + '\'' +
133+
", kitName='" + kitId + '\'' +
133134
'}';
134135
}
135136

@@ -140,7 +141,7 @@ public boolean equals(Object o) {
140141

141142
if (!Objects.equals(id, that.id)) return false;
142143
if (!Objects.equals(claimedBy, that.claimedBy)) return false;
143-
if (!Objects.equals(kitName, that.kitName)) return false;
144+
if (!Objects.equals(kitId, that.kitId)) return false;
144145
if (!Objects.equals(firstJoin, that.firstJoin)) return false;
145146
if (!Objects.equals(oneTime, that.oneTime)) return false;
146147
if (!Objects.equals(claimedAt, that.claimedAt)) return false;
@@ -151,7 +152,7 @@ public boolean equals(Object o) {
151152
public int hashCode() {
152153
int result = id != null ? id.hashCode() : 0;
153154
result = 31 * result + (claimedBy != null ? claimedBy.hashCode() : 0);
154-
result = 31 * result + (kitName != null ? kitName.hashCode() : 0);
155+
result = 31 * result + (kitId != null ? kitId.hashCode() : 0);
155156
result = 31 * result + (firstJoin != null ? firstJoin.hashCode() : 0);
156157
result = 31 * result + (oneTime != null ? oneTime.hashCode() : 0);
157158
result = 31 * result + (claimedAt != null ? claimedAt.hashCode() : 0);

src/main/java/net/onelitefeather/playerkits/kit/PlayerKit.java

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@
44
import net.kyori.adventure.text.Component;
55
import net.kyori.adventure.text.minimessage.MiniMessage;
66
import net.onelitefeather.playerkits.kit.property.PlayerKitProperties;
7+
import net.onelitefeather.playerkits.util.InventoryUtil;
8+
import org.bukkit.inventory.ItemStack;
79
import org.jetbrains.annotations.NotNull;
810

911
@Entity
@@ -14,8 +16,9 @@ public final class PlayerKit {
1416
@GeneratedValue(strategy = GenerationType.IDENTITY)
1517
private Long id;
1618

17-
@Column(columnDefinition = "TEXT")
18-
private String items;
19+
@Lob
20+
@Column(name = "kit_content", columnDefinition = "longblob")
21+
private byte[] contents;
1922

2023
@Column
2124
private String name;
@@ -35,13 +38,12 @@ public void setId(@NotNull Long id) {
3538
this.id = id;
3639
}
3740

38-
@NotNull
39-
public String getItems() {
40-
return items;
41+
public void setContents(byte[] contents) {
42+
this.contents = contents;
4143
}
4244

43-
public void setItems(@NotNull String items) {
44-
this.items = items;
45+
public byte[] getContents() {
46+
return contents;
4547
}
4648

4749
@NotNull

src/main/java/net/onelitefeather/playerkits/kit/setup/PlayerKitSetup.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -77,8 +77,7 @@ public PlayerKit createKit(@Nullable ItemStack @NotNull[] items) {
7777
var displayItemStep = KitSetupStep.DISPLAY_ITEM;
7878

7979
kit.setDisplayName((String) this.values.getOrDefault(displayNameStep.getId(), kitName));
80-
kit.setItems(InventoryUtil.serializeInventoryToString(items));
81-
80+
kit.setContents(ItemStack.serializeItemsAsBytes(items));
8281
var properties = new PlayerKitProperties();
8382
properties.setOneTime((Boolean) this.values.getOrDefault(oneTimeStep.getId(), oneTimeStep.getDefaultValue()));
8483
properties.setFirstJoin((Boolean) this.values.getOrDefault(firstJoinStep.getId(), firstJoinStep.getDefaultValue()));

src/main/java/net/onelitefeather/playerkits/service/ClaimedKitService.java

Lines changed: 45 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@
1818
public final class ClaimedKitService {
1919

2020
public static final Long IGNORE_COOLDOWN = -1L;
21-
private static final String KIT_NAME_PARAMETER = "kitName";
21+
private static final String KIT_NAME_PARAMETER = "kitId";
2222
private static final String CLAIMED_BY_PARAMETER = "claimedBy";
2323
private final PlayerKitsPlugin plugin;
2424

@@ -35,20 +35,20 @@ public List<ClaimedKit> getClaimedKits(@NotNull UUID claimedBy) {
3535
}).orElseGet(ArrayList::new);
3636
}
3737

38-
public Optional<ClaimedKit> getClaimedKit(@NotNull String kitName, @NotNull UUID claimedBy) {
38+
public Optional<ClaimedKit> getClaimedKit(@NotNull Long kitId, @NotNull UUID claimedBy) {
3939
return this.plugin.getDatabaseService().getSessionFactory().map(SessionFactory::openSession).map(session -> {
40-
var query = session.createQuery("SELECT ck FROM ClaimedKit ck WHERE ck.kitName = :kitName AND ck.claimedBy = :claimedBy", ClaimedKit.class);
41-
query.setParameter(KIT_NAME_PARAMETER, kitName);
40+
var query = session.createQuery("SELECT ck FROM ClaimedKit ck WHERE ck.kitId = :kitId AND ck.claimedBy = :claimedBy", ClaimedKit.class);
41+
query.setParameter(KIT_NAME_PARAMETER, kitId);
4242
query.setParameter(CLAIMED_BY_PARAMETER, claimedBy.toString());
4343
return query.uniqueResult();
4444
});
4545
}
4646

4747
@NotNull
48-
public KitClaimResult canClaim(@NotNull UUID claimedBy, @NotNull String kitName) {
48+
public KitClaimResult canClaim(@NotNull UUID claimedBy, @NotNull Long kitId) {
4949

50-
var claimedKit = getClaimedKit(kitName, claimedBy);
51-
var playerKit = plugin.getPlayerKitService().getPlayerKit(kitName);
50+
var claimedKit = getClaimedKit(kitId, claimedBy);
51+
var playerKit = plugin.getPlayerKitService().getPlayerKit(kitId);
5252
if (playerKit == null) return KitClaimResult.UNKNOWN_KIT;
5353

5454
var offlinePlayer = plugin.getServer().getOfflinePlayer(claimedBy);
@@ -61,44 +61,59 @@ public KitClaimResult canClaim(@NotNull UUID claimedBy, @NotNull String kitName)
6161
return System.currentTimeMillis() > claimedKit.get().getCooldown() ? KitClaimResult.SUCCESS : KitClaimResult.COOLDOWN_NOT_EXPIRED;
6262
}
6363

64-
public boolean claimKit(@NotNull String kitName,
65-
@NotNull UUID claimedBy,
66-
@NotNull Boolean firstJoin,
67-
@NotNull Boolean oneTime,
68-
@NotNull Long claimedAt,
69-
@NotNull Long cooldown) {
70-
71-
var claimedKit = getClaimedKit(kitName, claimedBy);
72-
if (claimedKit.isPresent()) return !firstJoin || !oneTime || cooldown.equals(IGNORE_COOLDOWN);
7364

65+
public boolean updateClaimedKit(ClaimedKit claimedKit) {
7466
Transaction transaction = null;
7567

7668
var sessionFactory = this.plugin.getDatabaseService().getSessionFactory();
7769
if (sessionFactory.isEmpty()) return false;
7870

7971
try (Session session = sessionFactory.get().openSession()) {
8072
transaction = session.beginTransaction();
73+
session.merge(claimedKit);
74+
transaction.commit();
75+
return true;
76+
} catch (HibernateException e) {
77+
if (transaction != null) transaction.rollback();
78+
this.plugin.getLogger().log(Level.SEVERE, "Cannot update claimed kit called %s".formatted(claimedKit.getKitId()), e);
79+
return false;
80+
}
81+
}
8182

82-
ClaimedKit kit = new ClaimedKit();
83-
kit.setKitName(kitName);
84-
kit.setClaimedByUniqueId(claimedBy);
85-
kit.setClaimedAt(claimedAt);
86-
kit.setFirstJoin(firstJoin);
87-
kit.setCooldown(cooldown);
88-
kit.setOneTime(oneTime);
83+
public boolean saveClaimedKit(ClaimedKit claimedKit) {
84+
Transaction transaction = null;
8985

90-
session.persist(kit);
91-
transaction.commit();
86+
var sessionFactory = this.plugin.getDatabaseService().getSessionFactory();
87+
if (sessionFactory.isEmpty()) return false;
9288

89+
try (Session session = sessionFactory.get().openSession()) {
90+
transaction = session.beginTransaction();
91+
session.persist(claimedKit);
92+
transaction.commit();
9393
return true;
9494
} catch (HibernateException e) {
95+
if (transaction != null) transaction.rollback();
96+
this.plugin.getLogger().log(Level.SEVERE, "Cannot save claimed kit called %s".formatted(claimedKit.getKitId()), e);
97+
return false;
98+
}
99+
}
95100

96-
if (transaction != null) {
97-
transaction.rollback();
98-
}
101+
public boolean claimKit(@NotNull Long kitId,
102+
@NotNull UUID claimedBy,
103+
@NotNull Boolean firstJoin,
104+
@NotNull Boolean oneTime,
105+
@NotNull Long claimedAt,
106+
@NotNull Long cooldown) {
99107

100-
this.plugin.getLogger().log(Level.SEVERE, "Cannot save claimed kit called %s".formatted(kitName), e);
101-
return false;
108+
var claimedKit = getClaimedKit(kitId, claimedBy);
109+
if (claimedKit.isPresent()) {
110+
var kit = claimedKit.get();
111+
kit.setCooldown(cooldown);
112+
kit.setClaimedAt(claimedAt);
113+
return updateClaimedKit(kit);
102114
}
115+
116+
var kit = new ClaimedKit(null, claimedBy.toString(), kitId, firstJoin, oneTime, claimedAt, cooldown);
117+
return saveClaimedKit(kit);
103118
}
104119
}

0 commit comments

Comments
 (0)