mirror of
https://github.com/HibiscusMC/HMCCosmetics.git
synced 2025-12-19 15:09:19 +00:00
add unload
This commit is contained in:
@@ -0,0 +1,44 @@
|
|||||||
|
package com.hibiscusmc.hmccosmetics.api.events;
|
||||||
|
|
||||||
|
import org.bukkit.event.Cancellable;
|
||||||
|
import org.bukkit.event.HandlerList;
|
||||||
|
import org.jetbrains.annotations.NotNull;
|
||||||
|
|
||||||
|
import java.util.UUID;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Called before a player's data is un-loaded from the plugin.
|
||||||
|
*
|
||||||
|
* <p>
|
||||||
|
* If this event is cancelled, the player's data will not be un-loaded,
|
||||||
|
* and will be kept in memory.
|
||||||
|
* </p>
|
||||||
|
*/
|
||||||
|
public class PlayerPreUnloadEvent extends PlayerEvent implements Cancellable {
|
||||||
|
private static final HandlerList HANDLER_LIST = new HandlerList();
|
||||||
|
|
||||||
|
private boolean cancelled = false;
|
||||||
|
|
||||||
|
public PlayerPreUnloadEvent(@NotNull UUID id) {
|
||||||
|
super(id);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean isCancelled() {
|
||||||
|
return cancelled;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void setCancelled(boolean cancel) {
|
||||||
|
this.cancelled = cancel;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public @NotNull HandlerList getHandlers() {
|
||||||
|
return HANDLER_LIST;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static @NotNull HandlerList getHandlerList() {
|
||||||
|
return HANDLER_LIST;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -3,6 +3,7 @@ package com.hibiscusmc.hmccosmetics.listener;
|
|||||||
import com.hibiscusmc.hmccosmetics.HMCCosmeticsPlugin;
|
import com.hibiscusmc.hmccosmetics.HMCCosmeticsPlugin;
|
||||||
import com.hibiscusmc.hmccosmetics.api.events.PlayerLoadEvent;
|
import com.hibiscusmc.hmccosmetics.api.events.PlayerLoadEvent;
|
||||||
import com.hibiscusmc.hmccosmetics.api.events.PlayerPreLoadEvent;
|
import com.hibiscusmc.hmccosmetics.api.events.PlayerPreLoadEvent;
|
||||||
|
import com.hibiscusmc.hmccosmetics.api.events.PlayerPreUnloadEvent;
|
||||||
import com.hibiscusmc.hmccosmetics.api.events.PlayerUnloadEvent;
|
import com.hibiscusmc.hmccosmetics.api.events.PlayerUnloadEvent;
|
||||||
import com.hibiscusmc.hmccosmetics.config.DatabaseSettings;
|
import com.hibiscusmc.hmccosmetics.config.DatabaseSettings;
|
||||||
import com.hibiscusmc.hmccosmetics.database.Database;
|
import com.hibiscusmc.hmccosmetics.database.Database;
|
||||||
@@ -11,6 +12,7 @@ import com.hibiscusmc.hmccosmetics.user.CosmeticUser;
|
|||||||
import com.hibiscusmc.hmccosmetics.user.CosmeticUsers;
|
import com.hibiscusmc.hmccosmetics.user.CosmeticUsers;
|
||||||
import com.hibiscusmc.hmccosmetics.util.MessagesUtil;
|
import com.hibiscusmc.hmccosmetics.util.MessagesUtil;
|
||||||
import org.bukkit.Bukkit;
|
import org.bukkit.Bukkit;
|
||||||
|
import org.bukkit.entity.Player;
|
||||||
import org.bukkit.event.EventHandler;
|
import org.bukkit.event.EventHandler;
|
||||||
import org.bukkit.event.EventPriority;
|
import org.bukkit.event.EventPriority;
|
||||||
import org.bukkit.event.Listener;
|
import org.bukkit.event.Listener;
|
||||||
@@ -21,69 +23,59 @@ import org.jetbrains.annotations.NotNull;
|
|||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
|
|
||||||
public class PlayerConnectionListener implements Listener {
|
public class PlayerConnectionListener implements Listener {
|
||||||
|
|
||||||
@EventHandler(priority = EventPriority.MONITOR)
|
@EventHandler(priority = EventPriority.MONITOR)
|
||||||
public void onPlayerJoin(@NotNull PlayerJoinEvent event) {
|
public void onPlayerJoin(@NotNull PlayerJoinEvent event) {
|
||||||
if (event.getPlayer().isOp() || event.getPlayer().hasPermission("hmccosmetics.notifyupdate")) {
|
|
||||||
if (!HMCCosmeticsPlugin.getInstance().getLatestVersion().equalsIgnoreCase(HMCCosmeticsPlugin.getInstance().getDescription().getVersion()) && HMCCosmeticsPlugin.getInstance().getLatestVersion().isEmpty())
|
|
||||||
MessagesUtil.sendMessageNoKey(
|
|
||||||
event.getPlayer(),
|
|
||||||
"<br>" +
|
|
||||||
"<GRAY>There is a new version of <light_purple><Bold>HMCCosmetics<reset><gray> available!<br>" +
|
|
||||||
"<GRAY>Current version: <red>" + HMCCosmeticsPlugin.getInstance().getDescription().getVersion() + " <GRAY>| Latest version: <light_purple>" + HMCCosmeticsPlugin.getInstance().getLatestVersion() + "<br>" +
|
|
||||||
"<GRAY>Download it on <gold><click:OPEN_URL:'https://www.spigotmc.org/resources/100107/'>Spigot<reset> <gray>or <gold><click:OPEN_URL:'https://polymart.org/resource/1879'>Polymart<reset><gray>!" +
|
|
||||||
"<br>"
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
// This literally makes me want to end it all but I can't do that so I'll just cry instead
|
|
||||||
Runnable run = () -> {
|
|
||||||
if (!event.getPlayer().isOnline()) return; // If a player is no longer online, don't run this.
|
|
||||||
UUID uuid = event.getPlayer().getUniqueId();
|
|
||||||
|
|
||||||
PlayerPreLoadEvent preLoadEvent = new PlayerPreLoadEvent(uuid);
|
|
||||||
Bukkit.getPluginManager().callEvent(preLoadEvent);
|
|
||||||
if (preLoadEvent.isCancelled()) return;
|
|
||||||
|
|
||||||
Database.get(uuid).thenAccept(userData -> {
|
|
||||||
if (userData == null) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
Bukkit.getScheduler().runTask(HMCCosmeticsPlugin.getInstance(), () -> {
|
|
||||||
CosmeticUser cosmeticUser = CosmeticUsers.getProvider()
|
|
||||||
.createCosmeticUser(uuid)
|
|
||||||
.initialize(userData);
|
|
||||||
cosmeticUser.startTicking();
|
|
||||||
|
|
||||||
CosmeticUsers.addUser(cosmeticUser);
|
|
||||||
MessagesUtil.sendDebugMessages("Run User Join for " + uuid);
|
|
||||||
|
|
||||||
PlayerLoadEvent playerLoadEvent = new PlayerLoadEvent(cosmeticUser);
|
|
||||||
Bukkit.getPluginManager().callEvent(playerLoadEvent);
|
|
||||||
|
|
||||||
// And finally, launch an update for the cosmetics they have.
|
|
||||||
Bukkit.getScheduler().runTaskLater(HMCCosmeticsPlugin.getInstance(), () -> {
|
|
||||||
if (cosmeticUser.getPlayer() == null) return;
|
|
||||||
cosmeticUser.updateCosmetic();
|
|
||||||
}, 4);
|
|
||||||
});
|
|
||||||
}).exceptionally(ex -> {
|
|
||||||
MessagesUtil.sendDebugMessages("Unable to load Cosmetic User " + uuid + ". Exception: " + ex.getMessage());
|
|
||||||
return null;
|
|
||||||
});
|
|
||||||
};
|
|
||||||
|
|
||||||
if (DatabaseSettings.isEnabledDelay()) {
|
if (DatabaseSettings.isEnabledDelay()) {
|
||||||
MessagesUtil.sendDebugMessages("Delay Enabled with " + DatabaseSettings.getDelayLength() + " ticks");
|
MessagesUtil.sendDebugMessages("Delay Enabled with " + DatabaseSettings.getDelayLength() + " ticks");
|
||||||
Bukkit.getScheduler().runTaskLater(HMCCosmeticsPlugin.getInstance(), run, DatabaseSettings.getDelayLength());
|
Bukkit.getScheduler().runTaskLater(
|
||||||
|
HMCCosmeticsPlugin.getInstance(),
|
||||||
|
() -> this.loadUserData(event.getPlayer()),
|
||||||
|
DatabaseSettings.getDelayLength()
|
||||||
|
);
|
||||||
} else {
|
} else {
|
||||||
run.run();
|
this.loadUserData(event.getPlayer());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void loadUserData(final Player player) {
|
||||||
|
if(!player.isOnline()) return;
|
||||||
|
final UUID playerId = player.getUniqueId();
|
||||||
|
|
||||||
|
PlayerPreLoadEvent preLoadEvent = new PlayerPreLoadEvent(playerId);
|
||||||
|
Bukkit.getPluginManager().callEvent(preLoadEvent);
|
||||||
|
if (preLoadEvent.isCancelled()) return;
|
||||||
|
|
||||||
|
Database.get(playerId).thenAccept(userData -> {
|
||||||
|
Bukkit.getScheduler().runTask(HMCCosmeticsPlugin.getInstance(), () -> {
|
||||||
|
CosmeticUser cosmeticUser = CosmeticUsers.getProvider()
|
||||||
|
.createCosmeticUser(playerId)
|
||||||
|
.initialize(userData);
|
||||||
|
cosmeticUser.startTicking();
|
||||||
|
|
||||||
|
CosmeticUsers.addUser(cosmeticUser);
|
||||||
|
MessagesUtil.sendDebugMessages("Run User Join for " + playerId);
|
||||||
|
|
||||||
|
PlayerLoadEvent playerLoadEvent = new PlayerLoadEvent(cosmeticUser);
|
||||||
|
Bukkit.getPluginManager().callEvent(playerLoadEvent);
|
||||||
|
|
||||||
|
// And finally, launch an update for the cosmetics they have.
|
||||||
|
Bukkit.getScheduler().runTaskLater(HMCCosmeticsPlugin.getInstance(), () -> {
|
||||||
|
if (cosmeticUser.getPlayer() == null) return;
|
||||||
|
cosmeticUser.updateCosmetic();
|
||||||
|
}, 4);
|
||||||
|
});
|
||||||
|
}).exceptionally(ex -> {
|
||||||
|
MessagesUtil.sendDebugMessages("Unable to load Cosmetic User " + playerId + ". Exception: " + ex.getMessage());
|
||||||
|
return null;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
@EventHandler(priority = EventPriority.MONITOR)
|
@EventHandler(priority = EventPriority.MONITOR)
|
||||||
public void onPlayerQuit(@NotNull PlayerQuitEvent event) {
|
public void onPlayerQuit(@NotNull PlayerQuitEvent event) {
|
||||||
|
PlayerPreUnloadEvent preUnloadEvent = new PlayerPreUnloadEvent(event.getPlayer().getUniqueId());
|
||||||
|
Bukkit.getPluginManager().callEvent(preUnloadEvent);
|
||||||
|
if (preUnloadEvent.isCancelled()) return;
|
||||||
|
|
||||||
CosmeticUser user = CosmeticUsers.getUser(event.getPlayer());
|
CosmeticUser user = CosmeticUsers.getUser(event.getPlayer());
|
||||||
if (user == null) return; // Player never initialized, don't do anything
|
if (user == null) return; // Player never initialized, don't do anything
|
||||||
|
|
||||||
@@ -99,4 +91,19 @@ public class PlayerConnectionListener implements Listener {
|
|||||||
user.destroy();
|
user.destroy();
|
||||||
CosmeticUsers.removeUser(user.getUniqueId());
|
CosmeticUsers.removeUser(user.getUniqueId());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@EventHandler(priority = EventPriority.MONITOR)
|
||||||
|
public void notifyAdminUpdate(final PlayerJoinEvent event) {
|
||||||
|
if (event.getPlayer().isOp() || event.getPlayer().hasPermission("hmccosmetics.notifyupdate")) {
|
||||||
|
if (!HMCCosmeticsPlugin.getInstance().getLatestVersion().equalsIgnoreCase(HMCCosmeticsPlugin.getInstance().getDescription().getVersion()) && HMCCosmeticsPlugin.getInstance().getLatestVersion().isEmpty())
|
||||||
|
MessagesUtil.sendMessageNoKey(
|
||||||
|
event.getPlayer(),
|
||||||
|
"<br>" +
|
||||||
|
"<GRAY>There is a new version of <light_purple><Bold>HMCCosmetics<reset><gray> available!<br>" +
|
||||||
|
"<GRAY>Current version: <red>" + HMCCosmeticsPlugin.getInstance().getDescription().getVersion() + " <GRAY>| Latest version: <light_purple>" + HMCCosmeticsPlugin.getInstance().getLatestVersion() + "<br>" +
|
||||||
|
"<GRAY>Download it on <gold><click:OPEN_URL:'https://www.spigotmc.org/resources/100107/'>Spigot<reset> <gray>or <gold><click:OPEN_URL:'https://polymart.org/resource/1879'>Polymart<reset><gray>!" +
|
||||||
|
"<br>"
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
Reference in New Issue
Block a user