forked from MLG-Fortress/AutomaticInventory
-
-
Notifications
You must be signed in to change notification settings - Fork 3
Expand file tree
/
Copy pathDepositAllCommand.java
More file actions
65 lines (55 loc) · 2.48 KB
/
Copy pathDepositAllCommand.java
File metadata and controls
65 lines (55 loc) · 2.48 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
package dev.chaws.automaticinventory.commands;
import dev.chaws.automaticinventory.AutomaticInventory;
import dev.chaws.automaticinventory.configuration.Features;
import dev.chaws.automaticinventory.configuration.PlayerConfig;
import dev.chaws.automaticinventory.messaging.Messages;
import dev.chaws.automaticinventory.tasks.AsyncChestDepositTask;
import dev.chaws.automaticinventory.utilities.Chat;
import dev.chaws.automaticinventory.utilities.Level;
import org.bukkit.Bukkit;
import org.bukkit.ChunkSnapshot;
import org.bukkit.command.Command;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import org.jetbrains.annotations.NotNull;
public class DepositAllCommand extends AutomaticInventoryCommand {
@Override
public boolean onCommand(@NotNull CommandSender sender, @NotNull Command command, @NotNull String label, @NotNull String[] args) {
if (!(sender instanceof Player player)) {
return true;
}
var playerConfig = PlayerConfig.fromPlayer(player);
//ensure player has feature enabled
if (!PlayerConfig.featureEnabled(Features.DepositAll, player)) {
Chat.sendMessage(player, Level.Error, Messages.NoPermissionForFeature);
return true;
}
Chat.sendMessage(player, Level.Info, Messages.StartingDepositAll);
//gather snapshots of adjacent chunks
var location = player.getLocation();
var centerChunk = location.getChunk();
var world = location.getWorld();
if (world == null) {
AutomaticInventory.log.warning("Could not execute deposit all command because the world could not be located.");
return true;
}
var snapshots = new ChunkSnapshot[3][3];
for (var x = -1; x <= 1; x++) {
for (var z = -1; z <= 1; z++) {
var chunk = world.getChunkAt(centerChunk.getX() + x, centerChunk.getZ() + z);
snapshots[x + 1][z + 1] = chunk.getChunkSnapshot();
}
}
//create a thread to search those snapshots and create a chain of quick deposit attempts
var minY = Math.max(0, player.getEyeLocation().getBlockY() - 10);
var maxY = Math.min(world.getMaxHeight(), player.getEyeLocation().getBlockY() + 10);
var startY = player.getEyeLocation().getBlockY();
var startX = player.getEyeLocation().getBlockX();
var startZ = player.getEyeLocation().getBlockZ();
Bukkit.getScheduler().runTaskAsynchronously(AutomaticInventory.instance, () -> new AsyncChestDepositTask(world, snapshots, minY, maxY, startX, startY, startZ, player).start());
if (!playerConfig.hasUsedDepositAll()) {
playerConfig.setUsedDepositAll(true);
}
return true;
}
}