summaryrefslogtreecommitdiffstats
path: root/Essentials/src/net/ess3/commands/Commandgamemode.java
blob: 0692d1c9b1bbcaa4093b783006cf20bfc44857c8 (plain)
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
122
123
124
125
126
package net.ess3.commands;

import java.util.Locale;
import static net.ess3.I18n._;
import net.ess3.api.IUser;
import net.ess3.permissions.Permissions;
import org.bukkit.GameMode;
import org.bukkit.command.CommandSender;


public class Commandgamemode extends EssentialsSettingsCommand
{
	protected void setValue(final IUser player, GameMode value)
	{
		if (value == null)
		{
			value = rotateGameMode(player);
		}
		player.getPlayer().setGameMode(value);
	}

	protected GameMode getValue(final IUser player)
	{
		return player.getPlayer().getGameMode();
	}

	@Override
	protected void informSender(final CommandSender sender, final boolean value, final IUser player)
	{
		if (value)
		{
			sender.sendMessage(_("§6Set game mode§c {0} §6for {1}§6.", getValue(player).toString().toLowerCase(Locale.ENGLISH), player.getPlayer().getDisplayName()));
		}
		else
		{
			sender.sendMessage(_("gamemodeFailed", player.getName()));
		}
	}

	@Override
	protected void informPlayer(final IUser player)
	{
		final String message = _("§6Set game mode§c {0} §6for {1}§6.", getValue(player).toString().toLowerCase(Locale.ENGLISH), player.getPlayer().getDisplayName());
		player.sendMessage(message);
	}

	@Override
	protected boolean canEditOthers(final IUser user)
	{
		return Permissions.GAMEMODE_OTHERS.isAuthorized(user);
	}

	@Override
	protected boolean isExempt(final CommandSender sender, final IUser player)
	{
		return Permissions.GAMEMODE_EXEMPT.isAuthorized(player);
	}

	@Override
	protected boolean toggleOfflinePlayers()
	{
		return false;
	}

	@Override
	protected boolean canMatch(final String arg)
	{
		try
		{
			matchGameMode(arg);
			return true;
		}
		catch (NotEnoughArgumentsException ex)
		{
			return false;
		}
	}

	@Override
	protected void playerMatch(final IUser player, final String arg) throws NotEnoughArgumentsException
	{
		if (arg == null)
		{
			setValue(player, null);
		}
		else
		{
			setValue(player, matchGameMode(arg));
		}
	}

	private GameMode rotateGameMode(final IUser player)
	{
		return getValue(player) == GameMode.SURVIVAL ? GameMode.CREATIVE : getValue(player) == GameMode.CREATIVE ? GameMode.ADVENTURE : GameMode.SURVIVAL;
	}

	private GameMode matchGameMode(String modeString) throws NotEnoughArgumentsException
	{
		final GameMode mode;
		if (modeString.equalsIgnoreCase("gmc") || modeString.equalsIgnoreCase("egmc") || modeString.contains("creat") || modeString.equalsIgnoreCase(
				"1") || modeString.equalsIgnoreCase("c"))
		{
			mode = GameMode.CREATIVE;
		}
		else if (modeString.equalsIgnoreCase("gms") || modeString.equalsIgnoreCase("egms") || modeString.contains("survi") || modeString.equalsIgnoreCase(
				"0") || modeString.equalsIgnoreCase("s"))
		{
			mode = GameMode.SURVIVAL;
		}
		else if (modeString.equalsIgnoreCase("gma") || modeString.equalsIgnoreCase("egma") || modeString.contains("advent") || modeString.equalsIgnoreCase(
				"2") || modeString.equalsIgnoreCase("a"))
		{
			mode = GameMode.ADVENTURE;
		}
		else if (modeString.equalsIgnoreCase("gmt") || modeString.equalsIgnoreCase("egmt") || modeString.contains("toggle") || modeString.contains(
				"cycle") || modeString.equalsIgnoreCase("t"))
		{
			mode = null;
		}
		else
		{
			throw new NotEnoughArgumentsException();
		}
		return mode;
	}
}