-
Notifications
You must be signed in to change notification settings - Fork 2
Expand file tree
/
Copy pathSpawnCommand.java
More file actions
70 lines (61 loc) · 3.39 KB
/
Copy pathSpawnCommand.java
File metadata and controls
70 lines (61 loc) · 3.39 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
66
67
68
69
70
package dev.hytalemodding.hyssentials.commands.spawn;
import com.hypixel.hytale.component.Ref;
import com.hypixel.hytale.component.Store;
import com.hypixel.hytale.math.vector.Transform;
import com.hypixel.hytale.math.vector.Rotation3f;
import org.joml.Vector3d;
import com.hypixel.hytale.server.core.command.system.CommandContext;
import com.hypixel.hytale.server.core.command.system.basecommands.AbstractPlayerCommand;
import com.hypixel.hytale.server.core.universe.PlayerRef;
import com.hypixel.hytale.server.core.universe.world.World;
import com.hypixel.hytale.server.core.universe.world.spawn.ISpawnProvider;
import com.hypixel.hytale.server.core.universe.world.storage.EntityStore;
import dev.hytalemodding.hyssentials.data.CommandSettings;
import dev.hytalemodding.hyssentials.data.LocationData;
import dev.hytalemodding.hyssentials.lang.Messages;
import dev.hytalemodding.hyssentials.manager.CooldownManager;
import dev.hytalemodding.hyssentials.manager.RankManager;
import dev.hytalemodding.hyssentials.manager.TeleportWarmupManager;
import dev.hytalemodding.hyssentials.util.ChatUtil;
import dev.hytalemodding.hyssentials.util.Permissions;
import java.util.UUID;
import javax.annotation.Nonnull;
public class SpawnCommand extends AbstractPlayerCommand {
private final TeleportWarmupManager warmupManager;
private final CooldownManager cooldownManager;
private final RankManager rankManager;
public SpawnCommand(@Nonnull TeleportWarmupManager warmupManager,
@Nonnull CooldownManager cooldownManager, @Nonnull RankManager rankManager) {
super("spawn", "Teleport to the world spawn");
this.warmupManager = warmupManager;
this.cooldownManager = cooldownManager;
this.rankManager = rankManager;
}
@Override
protected boolean canGeneratePermission() {
return false;
}
@Override
protected void execute(@Nonnull CommandContext context, @Nonnull Store<EntityStore> store,
@Nonnull Ref<EntityStore> ref, @Nonnull PlayerRef playerRef, @Nonnull World world) {
UUID playerUuid = playerRef.getUuid();
CommandSettings settings = rankManager.getEffectiveSettings(playerRef, CooldownManager.SPAWN);
boolean bypassCooldown = Permissions.canBypassCooldown(playerRef);
if (!settings.isEnabled()) {
context.sendMessage(ChatUtil.parse(Messages.NO_PERMISSION_SPAWN));
return;
}
if (!bypassCooldown && cooldownManager.isOnCooldown(playerUuid, CooldownManager.SPAWN, settings.getCooldownSeconds())) {
long remaining = cooldownManager.getCooldownRemaining(playerUuid, CooldownManager.SPAWN, settings.getCooldownSeconds());
context.sendMessage(ChatUtil.parse(Messages.COOLDOWN_SPAWN, remaining));
return;
}
ISpawnProvider spawnProvider = world.getWorldConfig().getSpawnProvider();
Transform spawn = spawnProvider.getSpawnPoint(world, playerUuid);
Vector3d position = spawn.getPosition();
Rotation3f rotation = spawn.getRotation();
LocationData spawnLocation = new LocationData(world.getName(), position.x(), position.y(), position.z(), rotation.pitch(), rotation.yaw());
int warmupSeconds = bypassCooldown ? 0 : settings.getWarmupSeconds();
warmupManager.startWarmup(playerRef, store, ref, world, spawnLocation, warmupSeconds, CooldownManager.SPAWN, "spawn", null);
}
}