diff --git a/api/src/main/java/me/lucko/luckperms/api/event/player/PlayerDataSaveEvent.java b/api/src/main/java/me/lucko/luckperms/api/event/player/PlayerDataSaveEvent.java new file mode 100644 index 000000000..5d6b5ee40 --- /dev/null +++ b/api/src/main/java/me/lucko/luckperms/api/event/player/PlayerDataSaveEvent.java @@ -0,0 +1,69 @@ +/* + * This file is part of LuckPerms, licensed under the MIT License. + * + * Copyright (c) lucko (Luck) + * Copyright (c) contributors + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + +package me.lucko.luckperms.api.event.player; + +import me.lucko.luckperms.api.PlayerSaveResult; +import me.lucko.luckperms.api.event.LuckPermsEvent; +import me.lucko.luckperms.api.manager.UserManager; + +import java.util.UUID; + +import javax.annotation.Nonnull; + +/** + * Called when player data is saved to the storage. + * + *

Data can be saved using {@link UserManager#savePlayerData(UUID, String)}.

+ * + * @since 4.3 + */ +public interface PlayerDataSaveEvent extends LuckPermsEvent { + + /** + * Gets the unique ID that was saved. + * + * @return the uuid + */ + @Nonnull + UUID getUuid(); + + /** + * Gets the username that was saved. + * + * @return the username + */ + @Nonnull + String getUsername(); + + /** + * Gets the result of the operation. + * + * @return the result + */ + @Nonnull + PlayerSaveResult getResult(); + +} diff --git a/api/src/main/java/me/lucko/luckperms/api/event/user/UserCacheLoadEvent.java b/api/src/main/java/me/lucko/luckperms/api/event/user/UserCacheLoadEvent.java index d0e311040..a3f3b8ad5 100644 --- a/api/src/main/java/me/lucko/luckperms/api/event/user/UserCacheLoadEvent.java +++ b/api/src/main/java/me/lucko/luckperms/api/event/user/UserCacheLoadEvent.java @@ -32,7 +32,7 @@ import me.lucko.luckperms.api.event.LuckPermsEvent; import javax.annotation.Nonnull; /** - * Called when a users {@link me.lucko.luckperms.api.caching.UserData} is loaded. + * Called when a users {@link UserData} is loaded. */ public interface UserCacheLoadEvent extends LuckPermsEvent { diff --git a/common/src/main/java/me/lucko/luckperms/common/event/EventFactory.java b/common/src/main/java/me/lucko/luckperms/common/event/EventFactory.java index 779af6322..4d224d1f0 100644 --- a/common/src/main/java/me/lucko/luckperms/common/event/EventFactory.java +++ b/common/src/main/java/me/lucko/luckperms/common/event/EventFactory.java @@ -30,6 +30,7 @@ import com.google.common.collect.ImmutableSet; import me.lucko.luckperms.api.LogEntry; import me.lucko.luckperms.api.Node; +import me.lucko.luckperms.api.PlayerSaveResult; import me.lucko.luckperms.api.caching.GroupData; import me.lucko.luckperms.api.caching.UserData; import me.lucko.luckperms.api.event.LuckPermsEvent; @@ -55,6 +56,7 @@ import me.lucko.luckperms.common.event.impl.EventLogReceive; import me.lucko.luckperms.common.event.impl.EventNodeAdd; import me.lucko.luckperms.common.event.impl.EventNodeClear; import me.lucko.luckperms.common.event.impl.EventNodeRemove; +import me.lucko.luckperms.common.event.impl.EventPlayerDataSave; import me.lucko.luckperms.common.event.impl.EventPostSync; import me.lucko.luckperms.common.event.impl.EventPreNetworkSync; import me.lucko.luckperms.common.event.impl.EventPreSync; @@ -261,6 +263,11 @@ public final class EventFactory { fireEventAsync(event); } + public void handlePlayerDataSave(UUID uuid, String username, PlayerSaveResult result) { + EventPlayerDataSave event = new EventPlayerDataSave(uuid, username, result); + fireEventAsync(event); + } + public void handleUserLoad(User user) { EventUserLoad event = new EventUserLoad(new ApiUser(user)); fireEventAsync(event); diff --git a/common/src/main/java/me/lucko/luckperms/common/event/impl/EventPlayerDataSave.java b/common/src/main/java/me/lucko/luckperms/common/event/impl/EventPlayerDataSave.java new file mode 100644 index 000000000..c0167b757 --- /dev/null +++ b/common/src/main/java/me/lucko/luckperms/common/event/impl/EventPlayerDataSave.java @@ -0,0 +1,72 @@ +/* + * This file is part of LuckPerms, licensed under the MIT License. + * + * Copyright (c) lucko (Luck) + * Copyright (c) contributors + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + +package me.lucko.luckperms.common.event.impl; + +import me.lucko.luckperms.api.PlayerSaveResult; +import me.lucko.luckperms.api.event.player.PlayerDataSaveEvent; +import me.lucko.luckperms.common.event.AbstractEvent; + +import java.util.UUID; + +import javax.annotation.Nonnull; + +public class EventPlayerDataSave extends AbstractEvent implements PlayerDataSaveEvent { + private final UUID uuid; + private final String username; + private final PlayerSaveResult result; + + public EventPlayerDataSave(UUID uuid, String username, PlayerSaveResult result) { + this.uuid = uuid; + this.username = username; + this.result = result; + } + + @Nonnull + @Override + public UUID getUuid() { + return this.uuid; + } + + @Nonnull + @Override + public String getUsername() { + return this.username; + } + + @Nonnull + @Override + public PlayerSaveResult getResult() { + return this.result; + } + + @Override + public String toString() { + return "PlayerDataSaveEvent(" + + "uuid=" + this.uuid + ", " + + "username=" + this.username + ", " + + "result=" + this.result + ")"; + } +} diff --git a/common/src/main/java/me/lucko/luckperms/common/storage/AbstractStorage.java b/common/src/main/java/me/lucko/luckperms/common/storage/AbstractStorage.java index 26437d5aa..590abb1de 100644 --- a/common/src/main/java/me/lucko/luckperms/common/storage/AbstractStorage.java +++ b/common/src/main/java/me/lucko/luckperms/common/storage/AbstractStorage.java @@ -283,7 +283,13 @@ public class AbstractStorage implements Storage { @Override public CompletableFuture savePlayerData(UUID uuid, String username) { - return makeFuture(() -> this.dao.savePlayerData(uuid, username)); + return makeFuture(() -> { + PlayerSaveResult result = this.dao.savePlayerData(uuid, username); + if (result != null) { + this.plugin.getEventFactory().handlePlayerDataSave(uuid, username, result); + } + return result; + }); } @Override diff --git a/common/src/main/java/me/lucko/luckperms/common/storage/PlayerSaveResultImpl.java b/common/src/main/java/me/lucko/luckperms/common/storage/PlayerSaveResultImpl.java index b3c7f2616..073e68b5f 100644 --- a/common/src/main/java/me/lucko/luckperms/common/storage/PlayerSaveResultImpl.java +++ b/common/src/main/java/me/lucko/luckperms/common/storage/PlayerSaveResultImpl.java @@ -132,4 +132,9 @@ public final class PlayerSaveResultImpl implements PlayerSaveResult { public int hashCode() { return Objects.hash(this.status, this.oldUsername, this.otherUuids); } + + @Override + public String toString() { + return "PlayerSaveResult(status=" + this.status + ", oldUsername=" + this.oldUsername + ", otherUuids=" + this.otherUuids + ")"; + } }