Skip to content

Commit c88d773

Browse files
committed
added basic logic and database entites
1 parent 70b002c commit c88d773

8 files changed

Lines changed: 216 additions & 5 deletions

File tree

build.gradle

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -77,6 +77,13 @@ dependencies {
7777
testImplementation 'org.mockito:mockito-core:4.0.0'
7878
testImplementation 'com.github.seeseemelk:MockBukkit-v1.19:2.140.0'
7979
testImplementation 'org.assertj:assertj-core:3.21.0'
80+
81+
// Database
82+
implementation 'org.hibernate:hibernate-core:6.1.6.Final'
83+
implementation 'mysql:mysql-connector-java:8.0.31'
84+
85+
// Dependecy injection
86+
implementation 'com.google.inject:guice:5.1.0'
8087
}
8188

8289
shadowJar {

src/main/java/org/matrixnetwork/matrixlifesystem/MatrixLifeSystem.java

Lines changed: 23 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,21 @@
11
package org.matrixnetwork.matrixlifesystem;
22

33
import co.aikar.commands.PaperCommandManager;
4+
import co.aikar.locales.MessageKey;
5+
import co.aikar.locales.MessageKeyProvider;
46
import kr.entree.spigradle.annotations.PluginMain;
57
import lombok.AccessLevel;
68
import lombok.Getter;
79
import lombok.Setter;
810
import lombok.experimental.Accessors;
11+
import net.kyori.adventure.text.Component;
912
import net.milkbowl.vault.economy.Economy;
13+
import org.hibernate.Session;
14+
import org.hibernate.SessionFactory;
15+
import org.hibernate.Transaction;
1016
import org.matrixnetwork.matrixlifesystem.commands.TemplatesCommands;
17+
import org.matrixnetwork.matrixlifesystem.database.SessionFactoryMaker;
18+
import org.matrixnetwork.matrixlifesystem.entity.PlayerData;
1119
import org.matrixnetwork.matrixlifesystem.vault.VaultProvider;
1220
import org.bukkit.Bukkit;
1321
import org.bukkit.configuration.InvalidConfigurationException;
@@ -56,7 +64,21 @@ public void onEnable() {
5664

5765
@EventHandler
5866
public void onPlayerJoin(PlayerJoinEvent event) {
59-
getLogger().info("Player joined.");
67+
PlayerData pd = PlayerData.getPlayerData(event.getPlayer().getUniqueId().toString());
68+
69+
if(pd == null) {
70+
event.getPlayer().kick(Component.text("Life System not working!"));
71+
return;
72+
}
73+
74+
if (pd.getLifes() < this.getConfig().getInt("min-lifes")) {
75+
event.getPlayer()
76+
.kick(Component.text(commandManager
77+
.getLocales()
78+
.getMessage(null, MessageKey.of("kick.message")
79+
)));
80+
}
81+
6082
}
6183

6284
private void setupVaultIntegration() {
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
package org.matrixnetwork.matrixlifesystem.database;
2+
3+
import org.hibernate.SessionFactory;
4+
import org.hibernate.cfg.Configuration;
5+
import org.matrixnetwork.matrixlifesystem.entity.PlayerData;
6+
7+
public class SessionFactoryMaker {
8+
private static SessionFactory factory;
9+
10+
private static void configureFactory()
11+
{
12+
try {
13+
factory = new Configuration()
14+
.addAnnotatedClass(PlayerData.class)
15+
.configure().buildSessionFactory();
16+
} catch (Throwable ex) {
17+
System.err.println("Failed to create sessionFactory object." + ex);
18+
throw new ExceptionInInitializerError(ex);
19+
}
20+
}
21+
22+
public static org.hibernate.SessionFactory getFactory() {
23+
if (factory == null) {
24+
configureFactory();
25+
}
26+
27+
return factory;
28+
}
29+
30+
}
Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,64 @@
1+
package org.matrixnetwork.matrixlifesystem.entity;
2+
3+
import jakarta.persistence.Entity;
4+
import jakarta.persistence.Id;
5+
import jakarta.persistence.NamedQueries;
6+
import jakarta.persistence.NamedQuery;
7+
import lombok.Getter;
8+
import net.kyori.adventure.text.Component;
9+
import org.bukkit.entity.Player;
10+
import org.hibernate.Session;
11+
import org.hibernate.SessionFactory;
12+
import org.hibernate.Transaction;
13+
import org.matrixnetwork.matrixlifesystem.database.SessionFactoryMaker;
14+
15+
@Entity
16+
@NamedQueries(
17+
@NamedQuery(name = "PlayerData.findByUUID", query = "select pd from PlayerData pd where pd.uuid=?1")
18+
)
19+
public class PlayerData {
20+
@Id
21+
@Getter
22+
private String uuid;
23+
24+
@Getter
25+
private int lifes;
26+
27+
public PlayerData(String uuid, int lifes) {
28+
this.uuid = uuid;
29+
this.lifes = lifes;
30+
}
31+
32+
public PlayerData() {
33+
}
34+
35+
public static PlayerData getPlayerData(String uuid) {
36+
PlayerData pd;
37+
SessionFactory sessionFactory = SessionFactoryMaker.getFactory();
38+
39+
try (Session session = sessionFactory.openSession()) {
40+
pd = session.createNamedQuery("PlayerData.findByUUID", PlayerData.class)
41+
.setParameter(1, uuid).getSingleResultOrNull();
42+
43+
if (pd == null) {
44+
Transaction tx = session.beginTransaction();
45+
pd = new PlayerData(uuid, 0);
46+
session.merge(pd);
47+
tx.commit();
48+
}
49+
} catch (Exception ignored) {
50+
ignored.printStackTrace();
51+
pd = null;
52+
}
53+
54+
return pd;
55+
}
56+
57+
public void addLife() {
58+
this.lifes++;
59+
}
60+
61+
public void removeLife() {
62+
this.lifes--;
63+
}
64+
}

src/main/resources/config.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
# add your configuration properties here
1+
min-lifes: 1
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
<?xml version = "1.0" encoding = "utf-8"?>
2+
<!DOCTYPE hibernate-configuration SYSTEM
3+
"http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
4+
<hibernate-configuration>
5+
<session-factory>
6+
7+
<property name = "hibernate.dialect">
8+
org.hibernate.dialect.MySQLDialect
9+
</property>
10+
<property name="hibernate.hbm2ddl.auto">create</property>
11+
12+
<property name = "hibernate.connection.driver_class">
13+
com.mysql.jdbc.Driver
14+
</property>
15+
16+
<!-- Assume test is the database name -->
17+
18+
<property name = "hibernate.connection.url">
19+
jdbc:mysql://localhost:3306/matrix
20+
</property>
21+
22+
<property name = "hibernate.connection.username">
23+
root
24+
</property>
25+
26+
<property name = "hibernate.connection.password">
27+
root
28+
</property>
29+
</session-factory>
30+
</hibernate-configuration>

src/main/resources/lang_en.yaml

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,4 +2,7 @@
22
commands:
33
descriptions:
44
info: 'Prints out the players name and play time.'
5-
info: 'Your name is: {player}. Playtime: {play_time}.'
5+
info: 'Your name is: {player}. Playtime: {play_time}.'
6+
7+
kick:
8+
message: 'You cannot join! You do not have enough lifes!'
Lines changed: 57 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,69 @@
11
package org.matrixnetwork.matrixlifesystem;
22

3+
import be.seeseemelk.mockbukkit.entity.PlayerMock;
34
import org.bukkit.event.player.PlayerJoinEvent;
5+
import org.bukkit.event.player.PlayerKickEvent;
6+
import org.bukkit.event.player.PlayerQuitEvent;
7+
import org.hibernate.Session;
8+
import org.hibernate.SessionFactory;
9+
import org.hibernate.Transaction;
410
import org.junit.jupiter.api.Test;
11+
import org.matrixnetwork.matrixlifesystem.database.SessionFactoryMaker;
12+
import org.matrixnetwork.matrixlifesystem.entity.PlayerData;
13+
import org.mockito.MockedStatic;
14+
import org.mockito.Mockito;
15+
16+
import java.util.UUID;
517

618
public class TemplatePluginTests extends TestBase {
719

820
@Test
9-
public void shouldFirePlayerJoinEvent() {
10-
server.addPlayer();
21+
public void testEnoughLifes() {
22+
PlayerMock player = new PlayerMock(server, "TestPlayer", UUID.randomUUID());
23+
addPlayerdData(player.getUniqueId().toString(), 7);
24+
server.addPlayer(player);
25+
assert server.getOnlinePlayers().contains(player);
26+
}
1127

28+
@Test
29+
public void testNotEnoughLifes() {
30+
PlayerMock player = new PlayerMock(server, "TestPlayer", UUID.randomUUID());
31+
addPlayerdData(player.getUniqueId().toString(), 0);
32+
server.addPlayer(player);
33+
assert !server.getOnlinePlayers().contains(player);
34+
}
35+
36+
@Test
37+
public void testMinusEnoughLifes() {
38+
PlayerMock player = new PlayerMock(server, "TestPlayer", UUID.randomUUID());
39+
addPlayerdData(player.getUniqueId().toString(), -1);
40+
server.addPlayer(player);
1241
server.getPluginManager().assertEventFired(PlayerJoinEvent.class);
42+
assert !server.getOnlinePlayers().contains(player);
43+
}
44+
45+
@Test
46+
public void testExactLifes() {
47+
PlayerMock player = new PlayerMock(server, "TestPlayer", UUID.randomUUID());
48+
addPlayerdData(player.getUniqueId().toString(), 1);
49+
server.addPlayer(player);
50+
assert server.getOnlinePlayers().contains(player);
51+
}
52+
53+
54+
public static PlayerData addPlayerdData(String uuid, int lifes) {
55+
PlayerData pd;
56+
57+
SessionFactory sessionFactory = SessionFactoryMaker.getFactory();
58+
try (Session session = sessionFactory.openSession()) {
59+
Transaction tx = session.beginTransaction();
60+
pd = new PlayerData(uuid, lifes);
61+
session.merge(pd);
62+
tx.commit();
63+
} catch (Exception ignored) {
64+
pd = null;
65+
}
66+
67+
return pd;
1368
}
1469
}

0 commit comments

Comments
 (0)