Skip to content

Commit b397b9c

Browse files
committed
Version 3.6.0 -> Added hotbar slot selection syncing & Language presets
1 parent af460a0 commit b397b9c

7 files changed

Lines changed: 94 additions & 4 deletions

File tree

pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66

77
<groupId>de.lostesburger</groupId>
88
<artifactId>MySqlPlayerBridge</artifactId>
9-
<version>3.5.4</version>
9+
<version>3.6.0</version>
1010
<packaging>jar</packaging>
1111

1212
<name>MySqlPlayerBridge</name>

src/main/java/de/lostesburger/mySqlPlayerBridge/Handlers/MySqlConnection/MySqlConnectionHandler.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,10 @@ private void createTables() {
6565
MySqlManager.ColumnDefinition.varchar("uuid", 36),
6666
MySqlManager.ColumnDefinition.longText("stats")
6767
);
68+
mySqlManager.createTable(Main.TABLE_NAME_SELECTED_HOTBAR_SLOT,
69+
MySqlManager.ColumnDefinition.varchar("uuid", 36),
70+
MySqlManager.ColumnDefinition.integer("slot")
71+
);
6872
} catch (MySqlError e) {
6973
new MySqlErrorHandler().onTableCreate();
7074
throw new RuntimeException(e);

src/main/java/de/lostesburger/mySqlPlayerBridge/Main.java

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
import de.lostesburger.mySqlPlayerBridge.Managers.PlayerBridge.PlayerBridgeManager;
99
import de.lostesburger.mySqlPlayerBridge.Managers.SyncManagers.AdvancementDataManager.AdvancementDataManager;
1010
import de.lostesburger.mySqlPlayerBridge.Managers.SyncManagers.EffectDataManager.EffectDataManager;
11+
import de.lostesburger.mySqlPlayerBridge.Managers.SyncManagers.HotbarSelectionDataManager.HotbarSlotSelectionDataManager;
1112
import de.lostesburger.mySqlPlayerBridge.Managers.SyncManagers.StatsDataManager.StatsDataManager;
1213
import de.lostesburger.mySqlPlayerBridge.Managers.Vault.VaultManager;
1314
import de.lostesburger.mySqlPlayerBridge.Serialization.Serialization.AdvancementSerializer;
@@ -56,6 +57,7 @@ public final class Main extends JavaPlugin {
5657
public static EffectDataManager effectDataManager;
5758
public static AdvancementDataManager advancementDataManager;
5859
public static StatsDataManager statsDataManager;
60+
public static HotbarSlotSelectionDataManager hotbarSlotSelectionDataManager;
5961

6062
public static MySqlConnectionHandler mySqlConnectionHandler;
6163

@@ -68,6 +70,7 @@ public final class Main extends JavaPlugin {
6870
public static String TABLE_NAME_EFFECTS;
6971
public static String TABLE_NAME_ADVANCEMENTS;
7072
public static String TABLE_NAME_STATS;
73+
public static String TABLE_NAME_SELECTED_HOTBAR_SLOT;
7174

7275
public static SerializationType serializationType = SerializationType.NBT_API;
7376

@@ -83,7 +86,7 @@ public void onEnable() {
8386

8487
if (Minecraft.isFolia()) {
8588
this.getLogger().warning("Server is running Folia, a software supported by this plugin");
86-
this.getLogger().warning("Unknown errors in folia itself can occur (including major security flaws)");
89+
this.getLogger().warning("Unknown errors in Folia itself can occur (including major security flaws)");
8790
}
8891

8992
/**
@@ -106,6 +109,7 @@ public void onEnable() {
106109
TABLE_NAME_EFFECTS = TABLE_NAME + "_potion_effects";
107110
TABLE_NAME_ADVANCEMENTS = TABLE_NAME + "_advancements";
108111
TABLE_NAME_STATS = TABLE_NAME + "_stats";
112+
TABLE_NAME_SELECTED_HOTBAR_SLOT = TABLE_NAME + "_selected_hotbar_slot";
109113

110114
this.getLogger().log(Level.INFO, "Loading/Creating configuration ...");
111115
BukkitYMLConfig ymlConfigMessages = new BukkitYMLConfig(this, "lang/"+LANGUAGE+".yml");
@@ -211,6 +215,7 @@ public void onPluginEnable(PluginEnableEvent event) {
211215
advancementDataManager = new AdvancementDataManager();
212216
statsSerializer = new StatsSerializer();
213217
statsDataManager = new StatsDataManager();
218+
hotbarSlotSelectionDataManager = new HotbarSlotSelectionDataManager();
214219
}
215220

216221

src/main/java/de/lostesburger/mySqlPlayerBridge/Managers/Modules/ModulesManager.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ public class ModulesManager {
1818
public String pathSyncEffects;
1919
public String pathSyncAdvancements;
2020
public String pathSyncStats;
21+
public String pathSyncSelectedHotbarSlot;
2122

2223
public boolean kickOnSyncFail;
2324
public boolean syncEnderChest;
@@ -33,6 +34,7 @@ public class ModulesManager {
3334
public boolean syncEffects;
3435
public boolean syncAdvancements;
3536
public boolean syncStats;
37+
public boolean syncSelectedHotbarSlot;
3638

3739

3840
public ModulesManager(){
@@ -51,6 +53,7 @@ public ModulesManager(){
5153
this.pathSyncEffects = "sync.effects";
5254
this.pathSyncAdvancements = "sync.advancements";
5355
this.pathSyncStats = "sync.statistics";
56+
this.pathSyncSelectedHotbarSlot = "sync.selected_hotbar_slot";
5457

5558

5659
this.syncVaultEconomy = conf.getBoolean(this.pathSyncVaultEconomy);
@@ -67,5 +70,6 @@ public ModulesManager(){
6770
this.syncEffects = conf.getBoolean(this.pathSyncEffects);
6871
this.syncAdvancements = conf.getBoolean(this.pathSyncAdvancements);
6972
this.syncStats = conf.getBoolean(this.pathSyncStats);
73+
this.syncSelectedHotbarSlot = conf.getBoolean(this.pathSyncSelectedHotbarSlot);
7074
}
7175
}

src/main/java/de/lostesburger/mySqlPlayerBridge/Managers/MySqlData/MySqlDataManager.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -132,6 +132,7 @@ public void savePlayerData(Player player){
132132
Main.effectDataManager.savePlayer(player);
133133
Main.advancementDataManager.savePlayer(player);
134134
Main.statsDataManager.savePlayer(player);
135+
Main.hotbarSlotSelectionDataManager.savePlayer(player);
135136
}
136137

137138

@@ -248,6 +249,7 @@ public void applyDataToPlayer(Player player){
248249
Main.effectDataManager.applyPlayer(player);
249250
Main.advancementDataManager.applyPlayer(player);
250251
Main.statsDataManager.applyPlayer(player);
252+
Main.hotbarSlotSelectionDataManager.applyPlayer(player);
251253
}
252254

253255
public void saveAllOnlinePlayers(){
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,75 @@
1+
package de.lostesburger.mySqlPlayerBridge.Managers.SyncManagers.HotbarSelectionDataManager;
2+
3+
import de.craftcore.craftcore.global.mysql.MySqlError;
4+
import de.craftcore.craftcore.global.mysql.MySqlManager;
5+
import de.craftcore.craftcore.global.scheduler.Scheduler;
6+
import de.lostesburger.mySqlPlayerBridge.Main;
7+
import org.bukkit.entity.Player;
8+
import java.util.Map;
9+
10+
public class HotbarSlotSelectionDataManager {
11+
private final boolean enabled;
12+
private final MySqlManager mySqlManager;
13+
14+
public HotbarSlotSelectionDataManager(){
15+
this.enabled = Main.modulesManager.syncSelectedHotbarSlot;
16+
this.mySqlManager = Main.mySqlConnectionHandler.getManager();
17+
18+
try {
19+
if(!this.mySqlManager.tableExists(Main.TABLE_NAME_SELECTED_HOTBAR_SLOT)){
20+
throw new RuntimeException("Selected hotbar slot mysql table is missing!");
21+
}
22+
} catch (MySqlError e) {
23+
throw new RuntimeException(e);
24+
}
25+
}
26+
27+
public void savePlayer(Player player){
28+
Scheduler.runAsync(() -> {
29+
if(!this.enabled) return;
30+
try {
31+
mySqlManager.setOrUpdateEntry(
32+
Main.TABLE_NAME_SELECTED_HOTBAR_SLOT,
33+
Map.of("uuid", player.getUniqueId().toString()),
34+
Map.of("slot", player.getInventory().getHeldItemSlot())
35+
);
36+
} catch (MySqlError e) {
37+
throw new RuntimeException(e);
38+
}
39+
}, Main.getInstance());
40+
41+
}
42+
43+
public void applyPlayer(Player player){
44+
Scheduler.runAsync(() -> {
45+
if(!this.enabled) return;
46+
47+
Map<String, Object> entry;
48+
try {
49+
entry = mySqlManager.getEntry(Main.TABLE_NAME_SELECTED_HOTBAR_SLOT,
50+
Map.of("uuid", player.getUniqueId().toString())
51+
);
52+
} catch (MySqlError e) {
53+
throw new RuntimeException(e);
54+
}
55+
if(entry == null) return;
56+
if(entry.isEmpty()) return;
57+
int slot = (Integer) entry.get("slot");
58+
59+
Scheduler.run(() -> {
60+
this.setHotbarSlot(player, slot);
61+
}, Main.getInstance());
62+
63+
}, Main.getInstance());
64+
65+
}
66+
67+
private void setHotbarSlot(Player player, int slot) {
68+
if (slot >= 0 && slot < 9) {
69+
player.getInventory().setHeldItemSlot(slot);
70+
} else {
71+
throw new RuntimeException("Invalid hotbar slot");
72+
}
73+
}
74+
75+
}

src/main/resources/config.yml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -37,8 +37,6 @@ sync:
3737
enderChest: false
3838
amorSlots: false
3939
location: false
40-
# Respawn location sync only useful when using location sync
41-
respawn-location: false
4240
gamemode: false
4341
exp: false
4442
health: false
@@ -49,6 +47,8 @@ sync:
4947
effects: false
5048
advancements: false
5149
statistics: false
50+
# synchronizes a player's hotbar slot selection
51+
selected_hotbar_slot: false
5252

5353
# Create an automatic running task which saves all online player's inventory every given time.
5454
syncTask:

0 commit comments

Comments
 (0)