Skip to content

Commit 68bdc61

Browse files
committed
Fixes issue #34
1 parent cc18b81 commit 68bdc61

File tree

6 files changed

+136
-0
lines changed

6 files changed

+136
-0
lines changed

src/main/java/pw/hwk/tutorial/EndTutorial.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
import org.bukkit.entity.Player;
55
import pw.hwk.tutorial.api.EndTutorialEvent;
66
import pw.hwk.tutorial.data.Caching;
7+
import pw.hwk.tutorial.data.DataLoading;
78
import pw.hwk.tutorial.data.TutorialManager;
89
import pw.hwk.tutorial.data.TutorialPlayer;
910
import pw.hwk.tutorial.enums.CommandType;
@@ -47,6 +48,9 @@ public void endTutorial(Player player) {
4748
}
4849
TutorialPlayer tutorialPlayer = plugin.getTutorialPlayer(Caching.getCaching().getUUID(player));
4950
tutorialPlayer.restorePlayer(player);
51+
plugin.getTempPlayers().remove(player.getUniqueId());
52+
DataLoading.getDataLoading().getTempData().set("players." + player.getUniqueId(), null);
53+
DataLoading.getDataLoading().saveTempData();
5054
}
5155

5256
public void endTutorialPlayer(final Player player, String endMessage) {
@@ -60,6 +64,9 @@ public void endTutorialPlayer(final Player player, String endMessage) {
6064

6165
plugin.removeTutorialPlayer(player);
6266
plugin.removeFromTutorial(player.getName());
67+
plugin.getTempPlayers().remove(player.getUniqueId());
68+
DataLoading.getDataLoading().getTempData().set("players." + player.getUniqueId(), null);
69+
DataLoading.getDataLoading().saveTempData();
6370
}
6471

6572
public void reloadEndTutorial(Player player) {

src/main/java/pw/hwk/tutorial/ServerTutorial.java

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,13 +20,17 @@
2020
import java.util.Map;
2121
import java.util.UUID;
2222
import java.util.logging.Level;
23+
import pw.hwk.tutorial.data.TempPlayerData;
24+
import pw.hwk.tutorial.util.Base64Serialize;
2325

2426
public class ServerTutorial extends JavaPlugin {
2527

2628
private static ServerTutorial instance;
2729

2830
private Map<UUID, TutorialPlayer> tutorialPlayers = new HashMap<>();
2931

32+
private Map<UUID, TempPlayerData> tempPlayers = new HashMap<>();
33+
3034
private EndTutorial endTutorial = new EndTutorial(this);
3135

3236
public ServerTutorial() {}
@@ -41,9 +45,11 @@ public void onEnable() {
4145

4246
DataLoading.getDataLoading().loadData();
4347
DataLoading.getDataLoading().loadPlayerData();
48+
DataLoading.getDataLoading().loadTempData();
4449
Caching.getCaching().casheAllData();
4550
Caching.getCaching().cacheConfigs();
4651
Caching.getCaching().cachePlayerData();
52+
Caching.getCaching().cacheTempData();
4753

4854
this.checkUpdate();
4955
}
@@ -107,6 +113,7 @@ public void startTutorial(String tutorialName, Player player) {
107113
return;
108114
}
109115

116+
addPlayertoTemp(player);
110117
TutorialPlayer tutorialPlayer = new TutorialPlayer(player);
111118
tutorialPlayer.clearPlayer(player);
112119
addTutorialPlayer(uuid, tutorialPlayer);
@@ -203,6 +210,18 @@ public void removeTutorialView(String tutorialName, int viewID) {
203210
Caching.getCaching().reCasheTutorials();
204211
}
205212

213+
public Map<UUID, TempPlayerData> getTempPlayers() {
214+
return this.tempPlayers;
215+
}
216+
217+
public void addPlayertoTemp(Player player) {
218+
DataLoading.getDataLoading().getTempData().set("players." + player.getUniqueId() + ".gamemode", player.getGameMode());
219+
DataLoading.getDataLoading().getTempData().set("players." + player.getUniqueId() + ".inventory", Base64Serialize.toBase64(player.getInventory()));
220+
DataLoading.getDataLoading().getTempData().set("players." + player.getUniqueId() + ".armor", Base64Serialize.itemStackArrayToBase64(player.getInventory().getArmorContents()));
221+
DataLoading.getDataLoading().saveTempData();
222+
Caching.getCaching().cacheTempData();
223+
}
224+
206225
public static ServerTutorial getInstance() {
207226
return instance;
208227
}

src/main/java/pw/hwk/tutorial/TutorialListener.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -184,6 +184,12 @@ public void onJoin(PlayerJoinEvent event) {
184184
if (TutorialManager.getManager().getConfigs().getCheckGameMode()) {
185185
event.getPlayer().setGameMode(GameMode.SURVIVAL);
186186
}
187+
if (plugin.getTempPlayers().containsKey(player.getUniqueId())) {
188+
plugin.getTempPlayers().get(player.getUniqueId()).restorePlayer();
189+
plugin.getTempPlayers().remove(player.getUniqueId());
190+
DataLoading.getDataLoading().getTempData().set("players." + player.getUniqueId(), null);
191+
DataLoading.getDataLoading().saveTempData();
192+
}
187193
if (!plugin.getServer().getOnlineMode()) {
188194
plugin.getServer().getScheduler().runTaskAsynchronously(plugin, new Runnable() {
189195
@Override

src/main/java/pw/hwk/tutorial/data/Caching.java

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ public class Caching {
2727
private Map<UUID, Set<String>> seenTutorials = new HashMap<>();
2828
private static Caching instance;
2929
private Map<UUID, Boolean> allowedTeleports = new HashMap<>();
30+
private Map<UUID, String> getTempPlayers = new HashMap<>();
3031

3132
public void casheAllData() {
3233
if (DataLoading.getDataLoading().getData().getString("tutorials") == null) {
@@ -105,6 +106,19 @@ public void cachePlayerData() {
105106
}
106107
}
107108

109+
public void cacheTempData() {
110+
if (DataLoading.getDataLoading().getTempData().getString("players") == null) {
111+
return;
112+
}
113+
114+
for (String uuid : DataLoading.getDataLoading().getPlayerData().getConfigurationSection("players").getKeys(false)) {
115+
UUID playerUUID = UUID.fromString(uuid);
116+
if (!plugin.getTempPlayers().containsKey(playerUUID)) {
117+
plugin.getTempPlayers().put(playerUUID, new TempPlayerData(playerUUID));
118+
}
119+
}
120+
}
121+
108122
public List<String> tutorialNames() {
109123
return this.tutorialNames;
110124
}

src/main/java/pw/hwk/tutorial/data/DataLoading.java

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,8 @@ public class DataLoading {
1515
private YamlConfiguration data;
1616
private File playerDataFile;
1717
private YamlConfiguration playerData;
18+
private File tempDataFile;
19+
private YamlConfiguration tempData;
1820

1921
public void loadData() {
2022
File f = new File(plugin.getDataFolder(), "data.yml");
@@ -49,6 +51,19 @@ public void loadPlayerData() {
4951
playerData = YamlConfiguration.loadConfiguration(f);
5052
}
5153

54+
public void loadTempData() {
55+
File f = new File(plugin.getDataFolder(), "tempdata.yml");
56+
if (!f.exists()) {
57+
try {
58+
f.createNewFile();
59+
} catch (IOException e) {
60+
e.printStackTrace();
61+
}
62+
}
63+
tempDataFile = f;
64+
tempData = YamlConfiguration.loadConfiguration(f);
65+
}
66+
5267
public YamlConfiguration getPlayerData() {
5368
return this.playerData;
5469
}
@@ -57,6 +72,18 @@ public YamlConfiguration getData() {
5772
return this.data;
5873
}
5974

75+
public YamlConfiguration getTempData() {
76+
return this.tempData;
77+
}
78+
79+
public void saveTempData() {
80+
try {
81+
tempData.save(tempDataFile);
82+
} catch (IOException exception) {
83+
plugin.getLogger().warning("Failed to save temp data :(");
84+
}
85+
}
86+
6087
public void saveData() {
6188
try {
6289
data.save(dataFile);
Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,63 @@
1+
/*
2+
* To change this license header, choose License Headers in Project Properties.
3+
* To change this template file, choose Tools | Templates
4+
* and open the template in the editor.
5+
*/
6+
package pw.hwk.tutorial.data;
7+
8+
import java.util.UUID;
9+
import org.bukkit.GameMode;
10+
import org.bukkit.OfflinePlayer;
11+
import org.bukkit.entity.Player;
12+
import org.bukkit.inventory.Inventory;
13+
import org.bukkit.inventory.ItemStack;
14+
import pw.hwk.tutorial.ServerTutorial;
15+
import pw.hwk.tutorial.util.Base64Serialize;
16+
17+
/**
18+
*
19+
* @author Frostalf
20+
*/
21+
public class TempPlayerData {
22+
23+
private OfflinePlayer player;
24+
private UUID playerUUID;
25+
private Inventory inventory;
26+
private GameMode gameMode;
27+
private ItemStack[] armorItemStack;
28+
29+
private static ServerTutorial plugin = ServerTutorial.getInstance();
30+
31+
public TempPlayerData(UUID playerUUID) {
32+
this.playerUUID = playerUUID;
33+
this.player = plugin.getServer().getOfflinePlayer(playerUUID);
34+
getTempPlayerData();
35+
}
36+
37+
private void getTempPlayerData() {
38+
this.inventory = Base64Serialize.fromBase64(DataLoading.getDataLoading().getTempData().getString("players." + this.playerUUID + ".inventory"));
39+
this.gameMode = GameMode.valueOf(DataLoading.getDataLoading().getTempData().getString("players." + this.playerUUID + ".gamemode"));
40+
this.armorItemStack = Base64Serialize.itemStackArrayFromBase64(DataLoading.getDataLoading().getTempData().getString("players." + this.playerUUID + ".armor"));
41+
}
42+
43+
public Inventory getPlayerInventory() {
44+
return this.inventory;
45+
}
46+
47+
public ItemStack[] getPlayerArmor() {
48+
return this.armorItemStack;
49+
}
50+
51+
public GameMode getPlayerGameMode() {
52+
return this.gameMode;
53+
}
54+
55+
public void restorePlayer() {
56+
if (player.isOnline()) {
57+
Player onlinePlayer = (Player)player;
58+
onlinePlayer.getInventory().setContents(getPlayerInventory().getContents());
59+
onlinePlayer.getInventory().setArmorContents(getPlayerArmor());
60+
onlinePlayer.setGameMode(getPlayerGameMode());
61+
}
62+
}
63+
}

0 commit comments

Comments
 (0)