mirror of
https://github.com/WiIIiam278/HuskSync.git
synced 2025-12-27 02:29:10 +00:00
Ensure players have their inventory contents saved on death
This commit is contained in:
@@ -11,6 +11,8 @@ import java.util.Optional;
|
||||
@SuppressWarnings("unused")
|
||||
public class BukkitInventoryMap {
|
||||
|
||||
public static final int INVENTORY_SLOT_COUNT = 41;
|
||||
|
||||
private ItemStack[] contents;
|
||||
|
||||
/**
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
package net.william278.husksync.listener;
|
||||
|
||||
import net.william278.husksync.BukkitHuskSync;
|
||||
import net.william278.husksync.data.BukkitInventoryMap;
|
||||
import net.william278.husksync.data.BukkitSerializer;
|
||||
import net.william278.husksync.data.DataSerializationException;
|
||||
import net.william278.husksync.data.ItemData;
|
||||
@@ -25,6 +26,7 @@ import org.bukkit.event.player.PlayerInteractEvent;
|
||||
import org.bukkit.event.player.PlayerJoinEvent;
|
||||
import org.bukkit.event.player.PlayerQuitEvent;
|
||||
import org.bukkit.event.world.WorldSaveEvent;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
import java.util.Arrays;
|
||||
@@ -52,7 +54,8 @@ public class BukkitEventListener extends EventListener implements Listener {
|
||||
@EventHandler(ignoreCancelled = true)
|
||||
public void onWorldSave(@NotNull WorldSaveEvent event) {
|
||||
CompletableFuture.runAsync(() -> super.handleAsyncWorldSave(event.getWorld().getPlayers().stream()
|
||||
.map(BukkitPlayer::adapt).collect(Collectors.toList())));
|
||||
.map(BukkitPlayer::adapt)
|
||||
.collect(Collectors.toList())));
|
||||
}
|
||||
|
||||
@EventHandler(ignoreCancelled = true)
|
||||
@@ -139,8 +142,14 @@ public class BukkitEventListener extends EventListener implements Listener {
|
||||
return;
|
||||
}
|
||||
|
||||
// Handle their death, e.g. if we need to save their inventory
|
||||
super.handlePlayerDeath(user);
|
||||
// Truncate the drops list to the maximum allowed (44)
|
||||
if (event.getDrops().size() > BukkitInventoryMap.INVENTORY_SLOT_COUNT) {
|
||||
event.getDrops().subList(BukkitInventoryMap.INVENTORY_SLOT_COUNT, event.getDrops().size()).clear();
|
||||
}
|
||||
|
||||
// Convert the death drops to a serialized item stack array
|
||||
BukkitSerializer.serializeItemStackArray(event.getDrops().toArray(new ItemStack[0]))
|
||||
.thenAccept(serializedDrops -> super.handlePlayerDeath(user, new ItemData(serializedDrops)));
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user