-
Notifications
You must be signed in to change notification settings - Fork 0
/
CommandSupplyDrop.java
121 lines (94 loc) · 4.72 KB
/
CommandSupplyDrop.java
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
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
package net.minenite.warzairdrops;
import org.bukkit.Location;
import org.bukkit.Material;
import org.bukkit.World;
import org.bukkit.block.Block;
import org.bukkit.command.Command;
import org.bukkit.command.CommandExecutor;
import org.bukkit.command.CommandSender;
import org.bukkit.configuration.file.FileConfiguration;
import org.bukkit.entity.Player;
import net.minenite.warzairdrops.Main;
import net.minenite.warzairdrops.DropGlider;
import net.minenite.warzairdrops.SendInfoMessages;
import net.minenite.warzairdrops.SupplyDropsDataManager;
public class CommandSupplyDrop
implements CommandExecutor
{
FileConfiguration cfg = Main.getPlugin().getConfig();
public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
if (sender instanceof Player) {
Player p = (Player)sender;
if (p.hasPermission("supplydrop.use")) {
if (args.length == 0) {
SendInfoMessages.sendInfoMessage(p, "SpecifyDropName");
return false;
}
String dropName = args[0];
if (SupplyDropsDataManager.getSupplyDropsData().getString("drops." + dropName) == null) {
SendInfoMessages.sendInfoMessage(p, "SpecifyValidDropName");
return false;
}
if (!p.hasPermission("supplydrop.use." + dropName)) {
SendInfoMessages.sendInfoMessage(p, "InsufficientPermissionsPerDrop", dropName, "");
return false;
}
World curWorld = p.getWorld();
Location ploc = p.getLocation();
int locX = (int)((Integer.signum((int)ploc.getX()) == -1.0D) ? (ploc.getX() - 1.0D) : ploc.getX());
int locY = (int)ploc.getY();
int locZ = (int)((Integer.signum((int)ploc.getZ()) == -1.0D) ? (ploc.getZ() - 1.0D) : ploc.getZ());
Location check1 = new Location(curWorld, (locX + 1), locY, locZ);
Location check2 = new Location(curWorld, locX, locY, (locZ + 1));
Location check3 = new Location(curWorld, (locX - 1), locY, locZ);
Location check4 = new Location(curWorld, locX, locY, (locZ - 1));
Block b1 = check1.getBlock();
Block b2 = check2.getBlock();
Block b3 = check3.getBlock();
Block b4 = check4.getBlock();
if ((new Location(curWorld, locX, (locY - 1), locZ)).getBlock().getType().equals(Material.AIR)) {
SendInfoMessages.sendInfoMessage(p, "NotOnGroundError");
return false;
}
if (this.cfg.getBoolean("Options.SpawnTorchesAround"))
{
if (!b1.getType().equals(Material.AIR) || !b2.getType().equals(Material.AIR) ||
!b3.getType().equals(Material.AIR) || !b4.getType().equals(Material.AIR)) {
SendInfoMessages.sendInfoMessage(p, "NoFlatAreaError");
return false;
}
}
boolean dropAtMaxHeight = this.cfg.getBoolean("Options.DropAtMaxHeight");
int dropHeight = this.cfg.getInt("Options.DropHeight");
int currentDropHeight = locY + dropHeight;
if (dropAtMaxHeight) {
currentDropHeight = 256;
}
int testHeight = locY;
if (!dropAtMaxHeight)
{
if (locY + dropHeight > 256) {
SendInfoMessages.sendInfoMessage(p, "NoSpaceAboveError");
return false;
}
}
while (testHeight < currentDropHeight) {
Location testLoc = new Location(curWorld, locX, testHeight, locZ);
if (!testLoc.getBlock().getType().equals(Material.AIR)) {
SendInfoMessages.sendInfoMessage(p, "NoSpaceAboveError");
return false;
}
testHeight++;
}
SendInfoMessages.sendInfoMessage(p, "RequestedDrop", dropName, "");
if (this.cfg.getBoolean("Options.EnableGlider")) {
DropGlider g = new DropGlider(curWorld, locX, (dropAtMaxHeight ? '?' : (locY + dropHeight)), locZ);
g.drop(locY);
}
} else {
SendInfoMessages.sendInfoMessage(p, "InsufficientPermissions");
}
}
return false;
}
}