Add PlayerDataSaveEvent

This commit is contained in:
Luck 2018-05-06 18:21:14 +01:00
parent 64838708ab
commit 51f215b8ac
No known key found for this signature in database
GPG Key ID: EFA9B3EC5FD90F8B
6 changed files with 161 additions and 2 deletions

View File

@ -0,0 +1,69 @@
/*
* This file is part of LuckPerms, licensed under the MIT License.
*
* Copyright (c) lucko (Luck) <luck@lucko.me>
* 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.
*
* <p>Data can be saved using {@link UserManager#savePlayerData(UUID, String)}.</p>
*
* @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();
}

View File

@ -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 {

View File

@ -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);

View File

@ -0,0 +1,72 @@
/*
* This file is part of LuckPerms, licensed under the MIT License.
*
* Copyright (c) lucko (Luck) <luck@lucko.me>
* 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 + ")";
}
}

View File

@ -283,7 +283,13 @@ public class AbstractStorage implements Storage {
@Override
public CompletableFuture<PlayerSaveResult> 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

View File

@ -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 + ")";
}
}