-
Notifications
You must be signed in to change notification settings - Fork 7
/
HomeCommand.java
79 lines (67 loc) · 3.7 KB
/
HomeCommand.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
package de.melanx.skyblockbuilder.commands;
import com.mojang.brigadier.builder.ArgumentBuilder;
import com.mojang.brigadier.exceptions.CommandSyntaxException;
import de.melanx.skyblockbuilder.config.common.PermissionsConfig;
import de.melanx.skyblockbuilder.data.SkyblockSavedData;
import de.melanx.skyblockbuilder.data.Team;
import de.melanx.skyblockbuilder.events.SkyblockHooks;
import de.melanx.skyblockbuilder.util.RandomUtility;
import de.melanx.skyblockbuilder.util.WorldUtil;
import net.minecraft.ChatFormatting;
import net.minecraft.commands.CommandSourceStack;
import net.minecraft.commands.Commands;
import net.minecraft.network.chat.Component;
import net.minecraft.server.level.ServerLevel;
import net.minecraft.server.level.ServerPlayer;
public class HomeCommand {
public static ArgumentBuilder<CommandSourceStack, ?> register() {
// Teleports the player back home
return Commands.literal("home")
.executes(context -> home(context.getSource()));
}
private static int home(CommandSourceStack source) throws CommandSyntaxException {
WorldUtil.checkSkyblock(source);
ServerLevel level = source.getLevel();
SkyblockSavedData data = SkyblockSavedData.get(level);
ServerPlayer player = source.getPlayerOrException();
Team team = data.getTeamFromPlayer(player);
if (team == null) {
source.sendSuccess(() -> Component.translatable("skyblockbuilder.command.error.user_has_no_team").withStyle(ChatFormatting.RED), false);
return 0;
}
if (!player.hasPermissions(2) && !data.getOrCreateMetaInfo(player).canTeleportHome(level.getGameTime())) {
source.sendFailure(Component.translatable("skyblockbuilder.command.error.cooldown",
RandomUtility.formattedCooldown(PermissionsConfig.Teleports.homeCooldown - (level.getGameTime() - data.getOrCreateMetaInfo(player).getLastHomeTeleport()))));
return 0;
}
if (!player.hasPermissions(2) && !PermissionsConfig.Teleports.teleportationDimensions.test(player.level().dimension().location())) {
source.sendFailure(Component.translatable("skyblockbuilder.command.error.teleportation_not_allowed_dimension"));
return 0;
}
if (!player.hasPermissions(2) && !PermissionsConfig.Teleports.crossDimensionTeleportation && player.level() != data.getLevel()) {
source.sendFailure(Component.translatable("skyblockbuilder.command.error.teleport_across_dimensions"));
return 0;
}
if (!player.hasPermissions(2) && PermissionsConfig.Teleports.preventWhileFalling && player.fallDistance > 1) {
source.sendFailure(Component.translatable("skyblockbuilder.command.error.prevent_while_falling"));
return 0;
}
switch (SkyblockHooks.onHome(player, team)) {
case DENY:
source.sendSuccess(() -> Component.translatable("skyblockbuilder.command.denied.teleport_home").withStyle(ChatFormatting.RED), false);
return 0;
case DEFAULT:
if (!PermissionsConfig.Teleports.home && !source.hasPermission(2)) {
source.sendSuccess(() -> Component.translatable("skyblockbuilder.command.disabled.teleport_home").withStyle(ChatFormatting.RED), false);
return 0;
}
break;
case ALLOW:
break;
}
data.getOrCreateMetaInfo(player).setLastHomeTeleport(level.getGameTime());
source.sendSuccess(() -> Component.translatable("skyblockbuilder.command.success.teleport_home").withStyle(ChatFormatting.GOLD), true);
WorldUtil.teleportToIsland(player, team);
return 1;
}
}