summaryrefslogtreecommitdiffstats
path: root/Essentials/src/net/ess3/commands/Commandgamemode.java
blob: bcaeb498614a7c9f00f047cfe182371e7687088d (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
127
128
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;
	}

}