();
+ keys.put("display", "BUBBLE");
+ keys.put("image", "${image.library.url}album1584/" + badge.getCode() + ".gif");
+ keys.put("message", Emulator.getTexts().getValue("commands.generic.cmd_badge.received"));
+ habbo.getClient().sendResponse(new BubbleAlertComposer(BubbleAlertKeys.RECEIVED_BADGE.key, keys));
+ return true;
+ }
+ else
+ {
+ try (Connection connection = Emulator.getDatabase().getDataSource().getConnection())
+ {
+ boolean found = false;
+
+ try (PreparedStatement statement = connection.prepareStatement("SELECT COUNT(slot_id) FROM users_badges INNER JOIN users ON users.id = user_id WHERE users.username = ? AND badge_code = ? LIMIT 1"))
+ {
+ statement.setString(1, params[1]);
+ statement.setString(2, params[2]);
+ try (ResultSet set = statement.executeQuery())
+ {
+ found = set.next();
+ }
+ }
+
+ if(found)
+ {
+ gameClient.getHabbo().whisper(Emulator.getTexts().getValue("commands.error.cmd_badge.already_owns").replace("%user%", params[1]).replace("%badge%", params[2]), RoomChatMessageBubbles.ALERT);
+ return true;
+ }
+ else
+ {
+ try (PreparedStatement statement = connection.prepareStatement("INSERT INTO users_badges VALUES (null, (SELECT id FROM users WHERE username = ? LIMIT 1), 0, ?)"))
+ {
+ statement.setString(1, params[1]);
+ statement.setString(2, params[2]);
+ statement.execute();
+ }
+
+ gameClient.getHabbo().whisper(Emulator.getTexts().getValue("commands.succes.cmd_badge.given").replace("%user%", params[1]).replace("%badge%", params[2]), RoomChatMessageBubbles.ALERT);
+ return true;
+ }
+ }
+ catch (SQLException e)
+ {
+ Emulator.getLogging().logSQLException(e);
+ }
+ }
+ }
+
+ return true;
+ }
+}
diff --git a/src/main/java/com/eu/habbo/habbohotel/commands/BanCommand.java b/src/main/java/com/eu/habbo/habbohotel/commands/BanCommand.java
new file mode 100644
index 00000000..9410ee73
--- /dev/null
+++ b/src/main/java/com/eu/habbo/habbohotel/commands/BanCommand.java
@@ -0,0 +1,106 @@
+package com.eu.habbo.habbohotel.commands;
+
+import com.eu.habbo.Emulator;
+import com.eu.habbo.habbohotel.gameclients.GameClient;
+import com.eu.habbo.habbohotel.modtool.ModToolBan;
+import com.eu.habbo.habbohotel.modtool.ModToolBanType;
+import com.eu.habbo.habbohotel.rooms.RoomChatMessage;
+import com.eu.habbo.habbohotel.rooms.RoomChatMessageBubbles;
+import com.eu.habbo.habbohotel.users.Habbo;
+import com.eu.habbo.habbohotel.users.HabboInfo;
+import com.eu.habbo.habbohotel.users.HabboManager;
+import com.eu.habbo.messages.outgoing.rooms.users.RoomUserWhisperComposer;
+
+public class BanCommand extends Command
+{
+ public BanCommand()
+ {
+ super("cmd_ban", Emulator.getTexts().getValue("commands.keys.cmd_ban").split(";"));
+ }
+
+ @Override
+ public boolean handle(GameClient gameClient, String[] params) throws Exception
+ {
+ if(params.length < 2)
+ {
+ gameClient.getHabbo().whisper(Emulator.getTexts().getValue("commands.error.cmd_ban.forgot_user"), RoomChatMessageBubbles.ALERT);
+ return true;
+ }
+
+ if(params.length < 3)
+ {
+ gameClient.getHabbo().whisper(Emulator.getTexts().getValue("commands.error.cmd_ban.forgot_time"), RoomChatMessageBubbles.ALERT);
+ return true;
+ }
+
+ int banTime;
+ try
+ {
+ banTime = Integer.valueOf(params[2]);
+ }
+ catch (Exception e)
+ {
+ gameClient.getHabbo().whisper(Emulator.getTexts().getValue("commands.error.cmd_ban.invalid_time"), RoomChatMessageBubbles.ALERT);
+ return true;
+ }
+
+ if(banTime < 600)
+ {
+ gameClient.getHabbo().whisper(Emulator.getTexts().getValue("commands.error.cmd_ban.time_to_short"), RoomChatMessageBubbles.ALERT);
+ return true;
+ }
+
+ if(params[1].toLowerCase().equals(gameClient.getHabbo().getHabboInfo().getUsername().toLowerCase()))
+ {
+ gameClient.getHabbo().whisper(Emulator.getTexts().getValue("commands.error.cmd_ban.ban_self"), RoomChatMessageBubbles.ALERT);
+ return true;
+ }
+
+ Habbo t = Emulator.getGameEnvironment().getHabboManager().getHabbo(params[1]);
+
+ HabboInfo target = null;
+ if (t != null)
+ {
+ target = t.getHabboInfo();
+ }
+ else
+ {
+ target = HabboManager.getOfflineHabboInfo(params[1]);
+ }
+
+ if (target == null)
+ {
+ gameClient.getHabbo().whisper(Emulator.getTexts().getValue("commands.error.cmd_ban.user_offline"), RoomChatMessageBubbles.ALERT);
+ return true;
+ }
+
+ if (target.getRank().getId() >= gameClient.getHabbo().getHabboInfo().getRank().getId())
+ {
+ gameClient.getHabbo().whisper(Emulator.getTexts().getValue("commands.error.cmd_ban.target_rank_higher"), RoomChatMessageBubbles.ALERT);
+ return true;
+ }
+
+
+ String reason = "";
+
+ if(params.length > 3)
+ {
+ for(int i = 3; i < params.length; i++)
+ {
+ reason += params[i] + " ";
+ }
+ }
+
+
+ try
+ {
+ ModToolBan ban = Emulator.getGameEnvironment().getModToolManager().ban(target.getId(), gameClient.getHabbo(), reason, banTime, ModToolBanType.ACCOUNT, -1).get(0);
+ gameClient.getHabbo().whisper(Emulator.getTexts().getValue("commands.succes.cmd_ban.ban_issued").replace("%user%", target.getUsername()).replace("%time%", ban.expireDate - Emulator.getIntUnixTimestamp() + "").replace("%reason%", ban.reason), RoomChatMessageBubbles.ALERT);
+ }
+ catch (Exception e)
+ {
+
+ }
+ return true;
+ }
+}
diff --git a/src/main/java/com/eu/habbo/habbohotel/commands/BlockAlertCommand.java b/src/main/java/com/eu/habbo/habbohotel/commands/BlockAlertCommand.java
new file mode 100644
index 00000000..958238f8
--- /dev/null
+++ b/src/main/java/com/eu/habbo/habbohotel/commands/BlockAlertCommand.java
@@ -0,0 +1,29 @@
+package com.eu.habbo.habbohotel.commands;
+
+import com.eu.habbo.Emulator;
+import com.eu.habbo.habbohotel.gameclients.GameClient;
+import com.eu.habbo.habbohotel.rooms.RoomChatMessage;
+import com.eu.habbo.habbohotel.rooms.RoomChatMessageBubbles;
+import com.eu.habbo.messages.outgoing.rooms.users.RoomUserWhisperComposer;
+
+public class BlockAlertCommand extends Command
+{
+ public BlockAlertCommand()
+ {
+ super("cmd_blockalert", Emulator.getTexts().getValue("commands.keys.cmd_blockalert").split(";"));
+ }
+
+ @Override
+ public boolean handle(GameClient gameClient, String[] params) throws Exception
+ {
+ if(gameClient.getHabbo().getHabboInfo().getCurrentRoom() != null)
+ {
+ gameClient.getHabbo().getHabboStats().blockStaffAlerts = !gameClient.getHabbo().getHabboStats().blockStaffAlerts;
+ gameClient.getHabbo().whisper(Emulator.getTexts().getValue("commands.succes.cmd_blockalert").replace("%state%", (gameClient.getHabbo().getHabboStats().blockStaffAlerts ? Emulator.getTexts().getValue("generic.on") : Emulator.getTexts().getValue("generic.off"))), RoomChatMessageBubbles.ALERT);
+
+ return true;
+ }
+
+ return false;
+ }
+}
diff --git a/src/main/java/com/eu/habbo/habbohotel/commands/BotsCommand.java b/src/main/java/com/eu/habbo/habbohotel/commands/BotsCommand.java
new file mode 100644
index 00000000..57b05d15
--- /dev/null
+++ b/src/main/java/com/eu/habbo/habbohotel/commands/BotsCommand.java
@@ -0,0 +1,36 @@
+package com.eu.habbo.habbohotel.commands;
+
+import com.eu.habbo.Emulator;
+import com.eu.habbo.habbohotel.bots.Bot;
+import com.eu.habbo.habbohotel.gameclients.GameClient;
+import com.eu.habbo.messages.outgoing.generic.alerts.GenericAlertComposer;
+
+public class BotsCommand extends Command
+{
+ public BotsCommand()
+ {
+ super("cmd_bots", Emulator.getTexts().getValue("commands.keys.cmd_bots").split(";"));
+ }
+
+ @Override
+ public boolean handle(GameClient gameClient, String[] params) throws Exception
+ {
+ if(gameClient.getHabbo().getHabboInfo().getCurrentRoom() == null || !gameClient.getHabbo().getHabboInfo().getCurrentRoom().hasRights(gameClient.getHabbo()))
+ return false;
+
+ String data = Emulator.getTexts().getValue("total") + ": " + gameClient.getHabbo().getHabboInfo().getCurrentRoom().getCurrentBots().values().length;
+
+ for(Object bot : gameClient.getHabbo().getHabboInfo().getCurrentRoom().getCurrentBots().values())
+ {
+ if(bot instanceof Bot)
+ {
+ data += "\r";
+ data += "" + Emulator.getTexts().getValue("generic.bot.name") + ": " + ((Bot) bot).getName() + " " + Emulator.getTexts().getValue("generic.bot.id") + ": " + ((Bot) bot).getId();
+ }
+ }
+
+ gameClient.sendResponse(new GenericAlertComposer(data));
+
+ return true;
+ }
+}
diff --git a/src/main/java/com/eu/habbo/habbohotel/commands/ChangeNameCommand.java b/src/main/java/com/eu/habbo/habbohotel/commands/ChangeNameCommand.java
new file mode 100644
index 00000000..f01cf394
--- /dev/null
+++ b/src/main/java/com/eu/habbo/habbohotel/commands/ChangeNameCommand.java
@@ -0,0 +1,21 @@
+package com.eu.habbo.habbohotel.commands;
+
+import com.eu.habbo.Emulator;
+import com.eu.habbo.habbohotel.gameclients.GameClient;
+import com.eu.habbo.messages.outgoing.users.UserDataComposer;
+
+public class ChangeNameCommand extends Command
+{
+ public ChangeNameCommand()
+ {
+ super("cmd_changename", Emulator.getTexts().getValue("commands.keys.cmd_changename").split(";"));
+ }
+
+ @Override
+ public boolean handle(GameClient gameClient, String[] params) throws Exception
+ {
+ gameClient.getHabbo().getHabboStats().allowNameChange = !gameClient.getHabbo().getHabboStats().allowNameChange;
+ gameClient.sendResponse(new UserDataComposer(gameClient.getHabbo()));
+ return true;
+ }
+}
diff --git a/src/main/java/com/eu/habbo/habbohotel/commands/ChatTypeCommand.java b/src/main/java/com/eu/habbo/habbohotel/commands/ChatTypeCommand.java
new file mode 100644
index 00000000..be578e51
--- /dev/null
+++ b/src/main/java/com/eu/habbo/habbohotel/commands/ChatTypeCommand.java
@@ -0,0 +1,69 @@
+package com.eu.habbo.habbohotel.commands;
+
+import com.eu.habbo.Emulator;
+import com.eu.habbo.habbohotel.gameclients.GameClient;
+import com.eu.habbo.habbohotel.rooms.RoomChatMessage;
+import com.eu.habbo.habbohotel.rooms.RoomChatMessageBubbles;
+import com.eu.habbo.messages.outgoing.rooms.users.RoomUserWhisperComposer;
+import com.eu.habbo.messages.outgoing.users.MeMenuSettingsComposer;
+
+public class ChatTypeCommand extends Command
+{
+ public ChatTypeCommand()
+ {
+ super("cmd_chatcolor", Emulator.getTexts().getValue("commands.keys.cmd_chatcolor").split(";"));
+ }
+
+ @Override
+ public boolean handle(GameClient gameClient, String[] params) throws Exception
+ {
+
+ if(params.length >= 2)
+ {
+ int chatColor;
+ try
+ {
+ chatColor = Integer.valueOf(params[1]);
+ }
+ catch (Exception e)
+ {
+ gameClient.getHabbo().whisper(Emulator.getTexts().getValue("commands.error.cmd_chatcolor.numbers"), RoomChatMessageBubbles.ALERT);
+ return true;
+ }
+
+ if(RoomChatMessageBubbles.values().length < chatColor)
+ {
+ chatColor = 0;
+ }
+
+ if(chatColor < 0)
+ {
+ gameClient.getHabbo().whisper(Emulator.getTexts().getValue("commands.error.cmd_chatcolor.numbers"), RoomChatMessageBubbles.ALERT);
+ return true;
+ }
+
+ if(!gameClient.getHabbo().hasPermission("acc_anychatcolor"))
+ {
+ for(String s : Emulator.getConfig().getValue("commands.cmd_chatcolor.banned_numbers").split(";"))
+ {
+ if(Integer.valueOf(s) == chatColor)
+ {
+ gameClient.getHabbo().whisper(Emulator.getTexts().getValue("commands.error.cmd_chatcolor.banned"), RoomChatMessageBubbles.ALERT);
+ return true;
+ }
+ }
+ }
+
+ gameClient.getHabbo().getHabboStats().chatColor = RoomChatMessageBubbles.getBubble(chatColor);
+ gameClient.sendResponse(new MeMenuSettingsComposer(gameClient.getHabbo()));
+ gameClient.getHabbo().whisper(Emulator.getTexts().getValue("commands.succes.cmd_chatcolor.set").replace("%chat%", RoomChatMessageBubbles.values()[chatColor].name().replace("_", " ").toLowerCase()), RoomChatMessageBubbles.ALERT);
+ return true;
+ }
+ else
+ {
+ gameClient.getHabbo().getHabboStats().chatColor = RoomChatMessageBubbles.NORMAL;
+ gameClient.getHabbo().whisper(Emulator.getTexts().getValue("commands.succes.cmd_chatcolor.reset"), RoomChatMessageBubbles.ALERT);
+ return true;
+ }
+ }
+}
diff --git a/src/main/java/com/eu/habbo/habbohotel/commands/Command.java b/src/main/java/com/eu/habbo/habbohotel/commands/Command.java
new file mode 100644
index 00000000..9490e449
--- /dev/null
+++ b/src/main/java/com/eu/habbo/habbohotel/commands/Command.java
@@ -0,0 +1,35 @@
+package com.eu.habbo.habbohotel.commands;
+
+import com.eu.habbo.habbohotel.gameclients.GameClient;
+
+public abstract class Command
+{
+ /**
+ * Permission string the executor must have in order to access the command.
+ */
+ public final String permission;
+
+ /**
+ * All keys the command can be exectuted from.
+ *
+ * Example:
+ * :userinfo TheGeneral
+ *
+ */
+ public final String[] keys;
+
+ public Command(String permission, String[] keys)
+ {
+ this.permission = permission;
+ this.keys = keys;
+ }
+
+ /**
+ * Executes an command for a given gameClient.
+ * @param gameClient The GameClient who executes the command.
+ * @param params Array of parameters given in the command.
+ * @return Returns true if the user should NOT say anything in the room.
+ * @throws Exception
+ */
+ public abstract boolean handle(GameClient gameClient, String[] params) throws Exception;
+}
\ No newline at end of file
diff --git a/src/main/java/com/eu/habbo/habbohotel/commands/CommandHandler.java b/src/main/java/com/eu/habbo/habbohotel/commands/CommandHandler.java
new file mode 100644
index 00000000..e2603d17
--- /dev/null
+++ b/src/main/java/com/eu/habbo/habbohotel/commands/CommandHandler.java
@@ -0,0 +1,357 @@
+package com.eu.habbo.habbohotel.commands;
+
+import com.eu.habbo.Emulator;
+import com.eu.habbo.core.CommandLog;
+import com.eu.habbo.habbohotel.gameclients.GameClient;
+import com.eu.habbo.habbohotel.pets.AbstractPet;
+import com.eu.habbo.habbohotel.pets.Pet;
+import com.eu.habbo.habbohotel.pets.PetCommand;
+import com.eu.habbo.habbohotel.pets.PetVocalsType;
+import com.eu.habbo.habbohotel.rooms.Room;
+import com.eu.habbo.messages.outgoing.rooms.users.RoomUserTypingComposer;
+import com.eu.habbo.plugin.events.users.UserCommandEvent;
+import com.eu.habbo.plugin.events.users.UserExecuteCommandEvent;
+import gnu.trove.iterator.TIntObjectIterator;
+import gnu.trove.map.hash.THashMap;
+import gnu.trove.set.hash.THashSet;
+
+import java.util.*;
+
+public class CommandHandler
+{
+ private final static THashMap commands = new THashMap(5);
+
+ public CommandHandler()
+ {
+ long millis = System.currentTimeMillis();
+ reloadCommands();
+ Emulator.getLogging().logStart("Command Handler -> Loaded! (" + (System.currentTimeMillis() - millis) + " MS)");
+ }
+
+ public void reloadCommands()
+ {
+ addCommand(new AboutCommand());
+ addCommand(new AlertCommand());
+ addCommand(new AllowTradingCommand());
+ addCommand(new ArcturusCommand());
+ addCommand(new BadgeCommand());
+ addCommand(new BanCommand());
+ addCommand(new BlockAlertCommand());
+ addCommand(new BotsCommand());
+ addCommand(new ChangeNameCommand());
+ addCommand(new ChatTypeCommand());
+ addCommand(new CommandsCommand());
+ addCommand(new ConnectCameraCommand());
+ addCommand(new ControlCommand());
+ addCommand(new CoordsCommand());
+ addCommand(new CreditsCommand());
+ addCommand(new DiagonalCommand());
+ addCommand(new DisconnectCommand());
+ addCommand(new EjectAllCommand());
+ addCommand(new EmptyInventoryCommand());
+ addCommand(new EmptyBotsInventoryCommand());
+ addCommand(new EmptyPetsInventoryCommand());
+ addCommand(new EnableCommand());
+ addCommand(new EventCommand());
+ addCommand(new FacelessCommand());
+ addCommand(new FastwalkCommand());
+ addCommand(new FreezeBotsCommand());
+ addCommand(new FreezeCommand());
+ addCommand(new GiftCommand());
+ addCommand(new GiveRankCommand());
+ addCommand(new HabnamCommand());
+ addCommand(new HandItemCommand());
+ addCommand(new HappyHourCommand());
+ addCommand(new HotelAlertCommand());
+ addCommand(new HotelAlertLinkCommand());
+ addCommand(new IPBanCommand());
+ addCommand(new LayCommand());
+ addCommand(new MachineBanCommand());
+ addCommand(new MassBadgeCommand());
+ addCommand(new MassCreditsCommand());
+ addCommand(new MassGiftCommand());
+ addCommand(new MassPixelsCommand());
+ addCommand(new MassPointsCommand());
+ addCommand(new MimicCommand());
+ addCommand(new MoonwalkCommand());
+ addCommand(new MultiCommand());
+ addCommand(new MuteBotsCommand());
+ addCommand(new MuteCommand());
+ addCommand(new MutePetsCommand());
+ addCommand(new PetInfoCommand());
+ addCommand(new PickallCommand());
+ addCommand(new PixelCommand());
+ addCommand(new PluginsCommand());
+ addCommand(new PointsCommand());
+ addCommand(new PullCommand());
+ addCommand(new PushCommand());
+ addCommand(new RedeemCommand());
+ addCommand(new ReloadRoomCommand());
+ addCommand(new RoomAlertCommand());
+ addCommand(new RoomBundleCommand());
+ addCommand(new RoomCreditsCommand());
+ addCommand(new RoomDanceCommand());
+ addCommand(new RoomEffectCommand());
+ addCommand(new RoomItemCommand());
+ addCommand(new RoomKickCommand());
+ addCommand(new RoomMuteCommand());
+ addCommand(new RoomPixelsCommand());
+ addCommand(new RoomPointsCommand());
+ addCommand(new SayAllCommand());
+ addCommand(new SayCommand());
+ addCommand(new SetMaxCommand());
+ addCommand(new SetPollCommand());
+ addCommand(new SetSpeedCommand());
+ addCommand(new ShoutAllCommand());
+ addCommand(new ShoutCommand());
+ addCommand(new ShutdownCommand());
+ addCommand(new SitCommand());
+ addCommand(new SitDownCommand());
+ addCommand(new StaffAlertCommand());
+ addCommand(new StaffOnlineCommand());
+ addCommand(new StalkCommand());
+ addCommand(new SummonCommand());
+ addCommand(new SummonRankCommand());
+ addCommand(new SuperbanCommand());
+ addCommand(new SuperPullCommand());
+ addCommand(new TakeBadgeCommand());
+ addCommand(new TeleportCommand());
+ addCommand(new TransformCommand());
+ addCommand(new TrashCommand());
+ addCommand(new UnbanCommand());
+ addCommand(new UnloadRoomCommand());
+ addCommand(new UnmuteCommand());
+ addCommand(new UpdateBotsCommand());
+ addCommand(new UpdateCatalogCommand());
+ addCommand(new UpdateConfigCommand());
+ addCommand(new UpdateGuildPartsCommand());
+ addCommand(new UpdateHotelViewCommand());
+ addCommand(new UpdateItemsCommand());
+ addCommand(new UpdateNavigatorCommand());
+ addCommand(new UpdatePermissionsCommand());
+ addCommand(new UpdatePetDataCommand());
+ addCommand(new UpdatePluginsCommand());
+ addCommand(new UpdatePollsCommand());
+ addCommand(new UpdateTextsCommand());
+ addCommand(new UpdateWordFilterCommand());
+ addCommand(new UserInfoCommand());
+ addCommand(new WordQuizCommand());
+
+ addCommand(new TestCommand());
+ }
+
+ /**
+ * Adds a new command to the commands list.
+ * @param command The command to be added.
+ */
+ public static void addCommand(Command command)
+ {
+ if(command == null)
+ return;
+
+ commands.put(command.getClass().getName(), command);
+ }
+
+ /**
+ * Adds a new command to the commands list.
+ * @param command The command class to be added.
+ */
+ public static void addCommand(Class extends Command> command)
+ {
+ try
+ {
+ //command.getConstructor().setAccessible(true);
+ addCommand(command.newInstance());
+ Emulator.getLogging().logDebugLine("Added command: " + command.getName());
+ }
+ catch (Exception e)
+ {
+ Emulator.getLogging().logErrorLine(e);
+ }
+ }
+
+ /**
+ * Handles a command executed by the connected GameClient.
+ * This includes handling the petcommands aswell.
+ * @param gameClient The GameClient that executed the command.
+ * @param commandLine The whole sentence the GameClient used including the start:
+ * @return Wether the command has been succesfully executed.
+ */
+ public static boolean handleCommand(GameClient gameClient, String commandLine)
+ {
+ if(gameClient != null)
+ {
+ if (commandLine.startsWith(":"))
+ {
+ commandLine = commandLine.replaceFirst(":", "");
+
+ String[] parts = commandLine.split(" ");
+
+ if (parts.length >= 1)
+ {
+ for (Command command : commands.values())
+ {
+ for (String s : command.keys)
+ {
+ if (s.toLowerCase().equals(parts[0].toLowerCase()))
+ {
+ boolean succes = false;
+ if (command.permission == null || gameClient.getHabbo().hasPermission(command.permission, gameClient.getHabbo().getHabboInfo().getCurrentRoom() != null && (gameClient.getHabbo().getHabboInfo().getCurrentRoom().hasRights(gameClient.getHabbo())) || gameClient.getHabbo().hasPermission("acc_placefurni") || (gameClient.getHabbo().getHabboInfo().getCurrentRoom() != null && gameClient.getHabbo().getHabboInfo().getCurrentRoom().getGuildId() > 0 && gameClient.getHabbo().getHabboInfo().getCurrentRoom().guildRightLevel(gameClient.getHabbo()) >= 2) ))
+ {
+ try
+ {
+ Emulator.getPluginManager().fireEvent(new UserExecuteCommandEvent(gameClient.getHabbo(), command, parts));
+
+ if (gameClient.getHabbo().getHabboInfo().getCurrentRoom() != null)
+ gameClient.getHabbo().getHabboInfo().getCurrentRoom().sendComposer(new RoomUserTypingComposer(gameClient.getHabbo().getRoomUnit(), false).compose());
+
+ UserCommandEvent event = new UserCommandEvent(gameClient.getHabbo(), parts, command.handle(gameClient, parts));
+ Emulator.getPluginManager().fireEvent(event);
+
+ succes = event.succes;
+ }
+ catch (Exception e)
+ {
+ e.printStackTrace();
+ }
+
+ if (gameClient.getHabbo().hasPermission("log_commands"))
+ {
+ Emulator.getLogging().addLog(new CommandLog(gameClient.getHabbo().getHabboInfo().getId(), command, commandLine, succes));
+ }
+ }
+
+ return succes;
+ }
+ }
+ }
+ }
+ }
+ else
+ {
+ String[] args = commandLine.split(" ");
+
+ if (args.length <= 1)
+ return false;
+
+ if (gameClient.getHabbo().getHabboInfo().getCurrentRoom() != null)
+ {
+ Room room = gameClient.getHabbo().getHabboInfo().getCurrentRoom();
+
+ if (room.getCurrentPets().isEmpty())
+ return false;
+
+ TIntObjectIterator petIterator = room.getCurrentPets().iterator();
+
+ for (int j = room.getCurrentPets().size(); j-- > 0; )
+ {
+ try
+ {
+ petIterator.advance();
+ }
+ catch (NoSuchElementException e)
+ {
+ break;
+ }
+
+ AbstractPet pet = petIterator.value();
+
+ if (pet instanceof Pet)
+ {
+ if (pet.getName().equalsIgnoreCase(args[0]))
+ {
+ String s = "";
+
+ for (int i = 1; i < args.length; i++)
+ {
+ s += args[i] + " ";
+ }
+
+ s = s.substring(0, s.length() - 1);
+
+ for (PetCommand command : pet.getPetData().getPetCommands())
+ {
+ if (command.key.equalsIgnoreCase(s))
+ {
+ if (command.level <= pet.getLevel())
+ ((Pet) pet).handleCommand(command, gameClient.getHabbo());
+ else
+ pet.say(pet.getPetData().randomVocal(PetVocalsType.UNKNOWN_COMMAND));
+
+ break;
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ return false;
+ }
+
+ /**
+ * Returns an arraylist of all commands that the given rank has access to based on the permissions that have been set.
+ * @param rankId The rank ID to search commands for.
+ * @return ArrayList of commands.
+ */
+ public List getCommandsForRank(int rankId)
+ {
+ List allowedCommands = new ArrayList();
+ if (Emulator.getGameEnvironment().getPermissionsManager().rankExists(rankId))
+ {
+ Collection permissions = Emulator.getGameEnvironment().getPermissionsManager().getRank(rankId).getPermissions().keySet();
+
+ for (Command command : commands.values())
+ {
+ if (allowedCommands.contains(command))
+ continue;
+
+ if (permissions.contains(command.permission))
+ {
+ allowedCommands.add(command);
+ }
+ }
+ }
+
+ Collections.sort(allowedCommands, CommandHandler.ALPHABETICAL_ORDER);
+
+ return allowedCommands;
+ }
+
+ public static Command getCommand(String key)
+ {
+ for (Command command : commands.values())
+ {
+ for (String k : command.keys)
+ {
+ if (key.equalsIgnoreCase(k))
+ {
+ return command;
+ }
+ }
+ }
+
+ return null;
+ }
+
+ /**
+ * Disposes the CommandHandler.
+ */
+ public void dispose()
+ {
+ commands.clear();
+
+ Emulator.getLogging().logShutdownLine("Command Handler -> Disposed!");
+ }
+
+ /**
+ * Sort all commands based on their permission in alphabetical order.
+ */
+ private static final Comparator ALPHABETICAL_ORDER = new Comparator() {
+ public int compare(Command c1, Command c2) {
+ int res = String.CASE_INSENSITIVE_ORDER.compare(c1.permission, c2.permission);
+ return (res != 0) ? res : c1.permission.compareTo(c2.permission);
+ }
+ };
+}
\ No newline at end of file
diff --git a/src/main/java/com/eu/habbo/habbohotel/commands/CommandsCommand.java b/src/main/java/com/eu/habbo/habbohotel/commands/CommandsCommand.java
new file mode 100644
index 00000000..7670c42c
--- /dev/null
+++ b/src/main/java/com/eu/habbo/habbohotel/commands/CommandsCommand.java
@@ -0,0 +1,33 @@
+package com.eu.habbo.habbohotel.commands;
+
+import com.eu.habbo.Emulator;
+import com.eu.habbo.habbohotel.gameclients.GameClient;
+import com.eu.habbo.messages.outgoing.generic.alerts.GenericAlertComposer;
+import com.eu.habbo.messages.outgoing.generic.alerts.MessagesForYouComposer;
+
+import java.util.List;
+
+public class CommandsCommand extends Command
+{
+ public CommandsCommand()
+ {
+ super("cmd_commands", Emulator.getTexts().getValue("commands.keys.cmd_commands").split(";"));
+ }
+
+ @Override
+ public boolean handle(GameClient gameClient, String[] params) throws Exception
+ {
+ String message = "Your Commands";
+ List commands = Emulator.getGameEnvironment().getCommandHandler().getCommandsForRank(gameClient.getHabbo().getHabboInfo().getRank().getId());
+ message += "(" + commands.size() + "):\r\n";
+
+ for(Command c : commands)
+ {
+ message += Emulator.getTexts().getValue("commands.description." + c.permission, "commands.description." + c.permission) + "\r";
+ }
+
+ gameClient.getHabbo().alert(new String[]{message});
+
+ return true;
+ }
+}
diff --git a/src/main/java/com/eu/habbo/habbohotel/commands/ConnectCameraCommand.java b/src/main/java/com/eu/habbo/habbohotel/commands/ConnectCameraCommand.java
new file mode 100644
index 00000000..05f22486
--- /dev/null
+++ b/src/main/java/com/eu/habbo/habbohotel/commands/ConnectCameraCommand.java
@@ -0,0 +1,25 @@
+package com.eu.habbo.habbohotel.commands;
+
+import com.eu.habbo.Emulator;
+import com.eu.habbo.habbohotel.gameclients.GameClient;
+import com.eu.habbo.habbohotel.rooms.RoomChatMessage;
+import com.eu.habbo.habbohotel.rooms.RoomChatMessageBubbles;
+import com.eu.habbo.messages.outgoing.rooms.users.RoomUserWhisperComposer;
+import com.eu.habbo.networking.camera.CameraClient;
+import com.eu.habbo.threading.runnables.CameraClientAutoReconnect;
+
+public class ConnectCameraCommand extends Command
+{
+ public ConnectCameraCommand()
+ {
+ super("cmd_connect_camera", Emulator.getTexts().getValue("commands.keys.cmd_connect_camera").split(";"));
+ }
+
+ @Override
+ public boolean handle(GameClient gameClient, String[] params) throws Exception
+ {
+ CameraClient.attemptReconnect = true;
+ gameClient.getHabbo().whisper(Emulator.getTexts().getValue("commands.succes.cmd_alert.cmd_connect_camera"), RoomChatMessageBubbles.ALERT);
+ return true;
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/com/eu/habbo/habbohotel/commands/ControlCommand.java b/src/main/java/com/eu/habbo/habbohotel/commands/ControlCommand.java
new file mode 100644
index 00000000..eef8a7ae
--- /dev/null
+++ b/src/main/java/com/eu/habbo/habbohotel/commands/ControlCommand.java
@@ -0,0 +1,66 @@
+package com.eu.habbo.habbohotel.commands;
+
+import com.eu.habbo.Emulator;
+import com.eu.habbo.habbohotel.gameclients.GameClient;
+import com.eu.habbo.habbohotel.rooms.RoomChatMessage;
+import com.eu.habbo.habbohotel.rooms.RoomChatMessageBubbles;
+import com.eu.habbo.habbohotel.users.Habbo;
+import com.eu.habbo.messages.outgoing.rooms.users.RoomUserWhisperComposer;
+
+public class ControlCommand extends Command
+{
+ public ControlCommand()
+ {
+ super("cmd_control", Emulator.getTexts().getValue("commands.keys.cmd_control").split(";"));
+ }
+
+ @Override
+ public boolean handle(GameClient gameClient, String[] params) throws Exception
+ {
+ if(gameClient.getHabbo().getHabboInfo().getCurrentRoom() != null)
+ {
+ if(params.length == 2)
+ {
+ Habbo target = gameClient.getHabbo().getHabboInfo().getCurrentRoom().getHabbo(params[1]);
+
+ if(target == null)
+ {
+ gameClient.getHabbo().whisper(Emulator.getTexts().getValue("commands.error.cmd_control.not_found").replace("%user%", params[1]), RoomChatMessageBubbles.ALERT);
+ return true;
+ }
+
+ if(target == gameClient.getHabbo())
+ {
+ gameClient.getHabbo().whisper(Emulator.getTexts().getValue("commands.error.cmd_control.not_self"), RoomChatMessageBubbles.ALERT);
+ return true;
+ }
+
+ Habbo oldHabbo = (Habbo)gameClient.getHabbo().getRoomUnit().getCacheable().remove("control");
+
+ if(oldHabbo != null)
+ {
+ oldHabbo.getRoomUnit().getCacheable().remove("controller");
+ gameClient.getHabbo().whisper(Emulator.getTexts().getValue("commands.succes.cmd_control.stopped").replace("%user%", oldHabbo.getHabboInfo().getUsername()), RoomChatMessageBubbles.ALERT);
+ }
+ gameClient.getHabbo().getRoomUnit().getCacheable().put("control", target);
+ target.getRoomUnit().getCacheable().put("controller", gameClient.getHabbo());
+ gameClient.getHabbo().whisper(Emulator.getTexts().getValue("commands.succes.cmd_control.controlling").replace("%user%", params[1]), RoomChatMessageBubbles.ALERT);
+ return true;
+ }
+ else
+ {
+ Object habbo = gameClient.getHabbo().getRoomUnit().getCacheable().get("control");
+
+ if(habbo != null)
+ {
+ gameClient.getHabbo().getRoomUnit().getCacheable().remove("control");
+
+ gameClient.getHabbo().whisper(Emulator.getTexts().getValue("commands.succes.cmd_control.stopped").replace("%user%", ((Habbo)habbo).getHabboInfo().getUsername()), RoomChatMessageBubbles.ALERT);
+ }
+ return true;
+ }
+ }
+
+ return true;
+ }
+}
diff --git a/src/main/java/com/eu/habbo/habbohotel/commands/CoordsCommand.java b/src/main/java/com/eu/habbo/habbohotel/commands/CoordsCommand.java
new file mode 100644
index 00000000..aa2f96c6
--- /dev/null
+++ b/src/main/java/com/eu/habbo/habbohotel/commands/CoordsCommand.java
@@ -0,0 +1,54 @@
+ package com.eu.habbo.habbohotel.commands;
+
+import com.eu.habbo.Emulator;
+import com.eu.habbo.habbohotel.gameclients.GameClient;
+import com.eu.habbo.habbohotel.rooms.RoomTile;
+import com.eu.habbo.messages.outgoing.generic.alerts.GenericAlertComposer;
+
+public class CoordsCommand extends Command {
+
+ public CoordsCommand()
+ {
+ super("cmd_coords", Emulator.getTexts().getValue("commands.keys.cmd_coords").split(";"));
+ }
+
+ @Override
+ public boolean handle(GameClient gameClient, String[] params) throws Exception
+ {
+ if(gameClient.getHabbo().getRoomUnit() == null || gameClient.getHabbo().getHabboInfo().getCurrentRoom() == null)
+ return false;
+
+ if (params.length == 1)
+ {
+ gameClient.sendResponse(new GenericAlertComposer(Emulator.getTexts().getValue("commands.generic.cmd_coords.title") + "\r\n" +
+ "x: " + gameClient.getHabbo().getRoomUnit().getX() + "\r" +
+ "y: " + gameClient.getHabbo().getRoomUnit().getY() + "\r" +
+ "z: " + (gameClient.getHabbo().getRoomUnit().getStatus().containsKey("sit") ? gameClient.getHabbo().getRoomUnit().getStatus().get("sit") : gameClient.getHabbo().getRoomUnit().getZ()) + "\r" +
+ Emulator.getTexts().getValue("generic.rotation.head") + ": " + gameClient.getHabbo().getRoomUnit().getHeadRotation() + "-" + gameClient.getHabbo().getRoomUnit().getHeadRotation().getValue() + "\r" +
+ Emulator.getTexts().getValue("generic.rotation.body") + ": " + gameClient.getHabbo().getRoomUnit().getBodyRotation() + "-" + gameClient.getHabbo().getRoomUnit().getBodyRotation().getValue() + "\r" +
+ Emulator.getTexts().getValue("generic.sitting") + ": " + (gameClient.getHabbo().getRoomUnit().getStatus().containsKey("sit") ? Emulator.getTexts().getValue("generic.yes") : Emulator.getTexts().getValue("generic.no")) + "\r" +
+ "Tile State: " + gameClient.getHabbo().getHabboInfo().getCurrentRoom().getLayout().getTile(gameClient.getHabbo().getRoomUnit().getX(), gameClient.getHabbo().getRoomUnit().getY()).state.name() + "\r" +
+ "Tile Walkable: " + gameClient.getHabbo().getHabboInfo().getCurrentRoom().getLayout().getTile(gameClient.getHabbo().getRoomUnit().getX(), gameClient.getHabbo().getRoomUnit().getY()).isWalkable() + "\r" +
+ "Tile relative height: " + gameClient.getHabbo().getHabboInfo().getCurrentRoom().getLayout().getTile(gameClient.getHabbo().getRoomUnit().getX(), gameClient.getHabbo().getRoomUnit().getY()).relativeHeight() + "\r" +
+ "Tile stack height: " + gameClient.getHabbo().getHabboInfo().getCurrentRoom().getLayout().getTile(gameClient.getHabbo().getRoomUnit().getX(), gameClient.getHabbo().getRoomUnit().getY()).getStackHeight()));
+
+ }
+ else
+ {
+ RoomTile tile = gameClient.getHabbo().getHabboInfo().getCurrentRoom().getLayout().getTile(Short.valueOf(params[1]), Short.valueOf(params[2]));
+
+ if (tile != null)
+ {
+ gameClient.sendResponse(new GenericAlertComposer(Emulator.getTexts().getValue("commands.generic.cmd_coords.title") + "\r\n" +
+ "x: " + tile.x + "\r" +
+ "y: " + tile.y + "\r" +
+ "z: " + tile.z + "\r" +
+ "Tile State: " + tile.state.name() + "\r" +
+ "Tile Relative Height: " + tile.relativeHeight() + "\r" +
+ "Tile Stack Height: " + tile.getStackHeight() + "\r" +
+ "Tile Walkable: " + (tile.isWalkable() ? "Yes" : "No") + "\r"));
+ }
+ }
+ return true;
+ }
+}
diff --git a/src/main/java/com/eu/habbo/habbohotel/commands/CreditsCommand.java b/src/main/java/com/eu/habbo/habbohotel/commands/CreditsCommand.java
new file mode 100644
index 00000000..75342095
--- /dev/null
+++ b/src/main/java/com/eu/habbo/habbohotel/commands/CreditsCommand.java
@@ -0,0 +1,74 @@
+package com.eu.habbo.habbohotel.commands;
+
+import com.eu.habbo.Emulator;
+import com.eu.habbo.habbohotel.gameclients.GameClient;
+import com.eu.habbo.habbohotel.rooms.RoomChatMessage;
+import com.eu.habbo.habbohotel.rooms.RoomChatMessageBubbles;
+import com.eu.habbo.habbohotel.users.Habbo;
+import com.eu.habbo.habbohotel.users.HabboInfo;
+import com.eu.habbo.habbohotel.users.HabboManager;
+import com.eu.habbo.messages.outgoing.generic.alerts.GenericAlertComposer;
+import com.eu.habbo.messages.outgoing.rooms.users.RoomUserWhisperComposer;
+import com.eu.habbo.messages.outgoing.users.UserCreditsComposer;
+
+public class CreditsCommand extends Command
+{
+ public CreditsCommand()
+ {
+ super("cmd_credits", Emulator.getTexts().getValue("commands.keys.cmd_credits").split(";"));
+ }
+ @Override
+ public boolean handle(GameClient gameClient, String[] params) throws Exception
+ {
+ if(params.length == 3)
+ {
+ HabboInfo info = HabboManager.getOfflineHabboInfo(params[1]);
+
+ if (info != null)
+ {
+ Habbo habbo = Emulator.getGameServer().getGameClientManager().getHabbo(params[1]);
+
+ int credits = 0;
+ try
+ {
+ credits = Integer.parseInt(params[2]);
+ } catch (NumberFormatException e)
+ {
+ gameClient.getHabbo().whisper(Emulator.getTexts().getValue("commands.error.cmd_credits.invalid_amount"), RoomChatMessageBubbles.ALERT);
+ return true;
+ }
+ if (habbo != null)
+ {
+ if (credits != 0)
+ {
+ habbo.giveCredits(credits);
+ if (habbo.getHabboInfo().getCurrentRoom() != null)
+ habbo.whisper(Emulator.getTexts().getValue("commands.generic.cmd_credits.received").replace("%amount%", Integer.parseInt(params[2]) + ""), RoomChatMessageBubbles.ALERT);
+ else
+ habbo.getClient().sendResponse(new GenericAlertComposer(Emulator.getTexts().getValue("commands.generic.cmd_credits.received").replace("%amount%", Integer.parseInt(params[2]) + "")));
+
+ gameClient.getHabbo().whisper(Emulator.getTexts().getValue("commands.succes.cmd_credits.send").replace("%amount%", Integer.parseInt(params[2]) + "").replace("%user%", params[1]), RoomChatMessageBubbles.ALERT);
+
+ } else
+ {
+ gameClient.getHabbo().whisper(Emulator.getTexts().getValue("commands.error.cmd_credits.invalid_amount"), RoomChatMessageBubbles.ALERT);
+ }
+ } else
+ {
+ Emulator.getGameEnvironment().getHabboManager().giveCredits(info.getId(), credits);
+ gameClient.getHabbo().whisper(Emulator.getTexts().getValue("commands.succes.cmd_credits.send").replace("%amount%", Integer.parseInt(params[2]) + "").replace("%user%", params[1]), RoomChatMessageBubbles.ALERT);
+
+ }
+ }
+ else
+ {
+ gameClient.getHabbo().whisper(Emulator.getTexts().getValue("commands.error.cmd_credits.user_not_found").replace("%amount%", Integer.parseInt(params[2]) + "").replace("%user%", params[1]), RoomChatMessageBubbles.ALERT);
+ }
+ }
+ else
+ {
+ gameClient.getHabbo().whisper(Emulator.getTexts().getValue("commands.error.cmd_credits.invalid_amount"), RoomChatMessageBubbles.ALERT);
+ }
+ return true;
+ }
+}
diff --git a/src/main/java/com/eu/habbo/habbohotel/commands/DiagonalCommand.java b/src/main/java/com/eu/habbo/habbohotel/commands/DiagonalCommand.java
new file mode 100644
index 00000000..94ab612a
--- /dev/null
+++ b/src/main/java/com/eu/habbo/habbohotel/commands/DiagonalCommand.java
@@ -0,0 +1,40 @@
+package com.eu.habbo.habbohotel.commands;
+
+import com.eu.habbo.Emulator;
+import com.eu.habbo.habbohotel.gameclients.GameClient;
+import com.eu.habbo.habbohotel.rooms.RoomChatMessage;
+import com.eu.habbo.habbohotel.rooms.RoomChatMessageBubbles;
+import com.eu.habbo.messages.outgoing.rooms.users.RoomUserWhisperComposer;
+
+public class DiagonalCommand extends Command
+{
+ public DiagonalCommand()
+ {
+ super("cmd_diagonal", Emulator.getTexts().getValue("commands.keys.cmd_diagonal").split(";"));
+ }
+
+ @Override
+ public boolean handle(GameClient gameClient, String[] params) throws Exception
+ {
+ if (gameClient.getHabbo().getHabboInfo().getCurrentRoom() != null)
+ {
+ if (gameClient.getHabbo().getHabboInfo().getCurrentRoom().hasRights(gameClient.getHabbo()))
+ {
+ gameClient.getHabbo().getHabboInfo().getCurrentRoom().moveDiagonally(!gameClient.getHabbo().getHabboInfo().getCurrentRoom().moveDiagonally());
+
+ if (!gameClient.getHabbo().getHabboInfo().getCurrentRoom().moveDiagonally())
+ {
+ gameClient.getHabbo().whisper(Emulator.getTexts().getValue("commands.succes.cmd_diagonal.disabled"), RoomChatMessageBubbles.ALERT);
+ }
+ else
+ {
+ gameClient.getHabbo().whisper(Emulator.getTexts().getValue("commands.succes.cmd_diagonal.enabled"), RoomChatMessageBubbles.ALERT);
+ }
+
+ return true;
+ }
+ }
+
+ return false;
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/com/eu/habbo/habbohotel/commands/DisconnectCommand.java b/src/main/java/com/eu/habbo/habbohotel/commands/DisconnectCommand.java
new file mode 100644
index 00000000..fcb8cad0
--- /dev/null
+++ b/src/main/java/com/eu/habbo/habbohotel/commands/DisconnectCommand.java
@@ -0,0 +1,51 @@
+package com.eu.habbo.habbohotel.commands;
+
+import com.eu.habbo.Emulator;
+import com.eu.habbo.habbohotel.gameclients.GameClient;
+import com.eu.habbo.habbohotel.rooms.RoomChatMessage;
+import com.eu.habbo.habbohotel.rooms.RoomChatMessageBubbles;
+import com.eu.habbo.habbohotel.users.Habbo;
+import com.eu.habbo.messages.outgoing.rooms.users.RoomUserWhisperComposer;
+
+public class DisconnectCommand extends Command
+{
+ public DisconnectCommand()
+ {
+ super("cmd_disconnect", Emulator.getTexts().getValue("commands.keys.cmd_disconnect").split(";"));
+ }
+
+ @Override
+ public boolean handle(GameClient gameClient, String[] params) throws Exception
+ {
+ if(params.length < 2)
+ {
+ gameClient.getHabbo().whisper(Emulator.getTexts().getValue("commands.error.cmd_disconnect.forgot_username"), RoomChatMessageBubbles.ALERT);
+ return true;
+ }
+
+ if(params[1].toLowerCase().equals(gameClient.getHabbo().getHabboInfo().getUsername().toLowerCase()))
+ {
+ gameClient.getHabbo().whisper(Emulator.getTexts().getValue("commands.error.cmd_disconnect.disconnect_self"), RoomChatMessageBubbles.ALERT);
+ return true;
+ }
+
+ Habbo target = Emulator.getGameEnvironment().getHabboManager().getHabbo(params[1]);
+
+ if(target == null)
+ {
+ gameClient.getHabbo().whisper(Emulator.getTexts().getValue("commands.error.cmd_disconnect.user_offline"), RoomChatMessageBubbles.ALERT);
+ return true;
+ }
+
+ if (target.getHabboInfo().getRank().getId() > gameClient.getHabbo().getHabboInfo().getRank().getId())
+ {
+ gameClient.getHabbo().whisper(Emulator.getTexts().getValue("commands.error.cmd_disconnect.higher_rank"), RoomChatMessageBubbles.ALERT);
+ return true;
+ }
+
+ target.getClient().getChannel().close();
+
+ gameClient.getHabbo().whisper(Emulator.getTexts().getValue("commands.succes.cmd_disconnect.disconnected").replace("%user%", params[1]), RoomChatMessageBubbles.ALERT);
+ return true;
+ }
+}
diff --git a/src/main/java/com/eu/habbo/habbohotel/commands/EjectAllCommand.java b/src/main/java/com/eu/habbo/habbohotel/commands/EjectAllCommand.java
new file mode 100644
index 00000000..3cf22758
--- /dev/null
+++ b/src/main/java/com/eu/habbo/habbohotel/commands/EjectAllCommand.java
@@ -0,0 +1,29 @@
+package com.eu.habbo.habbohotel.commands;
+
+import com.eu.habbo.Emulator;
+import com.eu.habbo.habbohotel.gameclients.GameClient;
+import com.eu.habbo.habbohotel.rooms.Room;
+
+public class EjectAllCommand extends Command
+{
+ public EjectAllCommand()
+ {
+ super("cmd_ejectall", Emulator.getTexts().getValue("commands.keys.cmd_ejectall").split(";"));
+ }
+
+ @Override
+ public boolean handle(GameClient gameClient, String[] params) throws Exception
+ {
+ Room room = gameClient.getHabbo().getHabboInfo().getCurrentRoom();
+
+ if(room != null)
+ {
+ if(room.isOwner(gameClient.getHabbo()) || (room.hasGuild() && room.guildRightLevel(gameClient.getHabbo()) == 3))
+ {
+ room.ejectAll(gameClient.getHabbo());
+ }
+ }
+
+ return true;
+ }
+}
diff --git a/src/main/java/com/eu/habbo/habbohotel/commands/EmptyBotsInventoryCommand.java b/src/main/java/com/eu/habbo/habbohotel/commands/EmptyBotsInventoryCommand.java
new file mode 100644
index 00000000..2a733e06
--- /dev/null
+++ b/src/main/java/com/eu/habbo/habbohotel/commands/EmptyBotsInventoryCommand.java
@@ -0,0 +1,73 @@
+package com.eu.habbo.habbohotel.commands;
+
+import com.eu.habbo.Emulator;
+import com.eu.habbo.habbohotel.bots.Bot;
+import com.eu.habbo.habbohotel.gameclients.GameClient;
+import com.eu.habbo.habbohotel.rooms.RoomChatMessage;
+import com.eu.habbo.habbohotel.rooms.RoomChatMessageBubbles;
+import com.eu.habbo.habbohotel.users.Habbo;
+import com.eu.habbo.messages.outgoing.generic.alerts.GenericAlertComposer;
+import com.eu.habbo.messages.outgoing.inventory.InventoryRefreshComposer;
+import com.eu.habbo.messages.outgoing.rooms.users.RoomUserWhisperComposer;
+import gnu.trove.map.hash.TIntObjectHashMap;
+import gnu.trove.procedure.TObjectProcedure;
+
+public class EmptyBotsInventoryCommand extends Command
+{
+ public EmptyBotsInventoryCommand()
+ {
+ super("cmd_empty_bots", Emulator.getTexts().getValue("commands.keys.cmd_empty_bots").split(";"));
+ }
+
+ @Override
+ public boolean handle(GameClient gameClient, String[] params) throws Exception
+ {
+ if(params.length == 1 || (params.length >= 2 && !params[1].equals(Emulator.getTexts().getValue("generic.yes"))))
+ {
+ if(gameClient.getHabbo().getHabboInfo().getCurrentRoom() != null)
+ {
+ if(gameClient.getHabbo().getHabboInfo().getCurrentRoom().getUserCount() > 10)
+ {
+ gameClient.sendResponse(new GenericAlertComposer(Emulator.getTexts().getValue("commands.succes.cmd_empty_bots.verify").replace("%generic.yes%", Emulator.getTexts().getValue("generic.yes"))));
+ }
+ else
+ {
+ gameClient.getHabbo().whisper(Emulator.getTexts().getValue("commands.succes.cmd_empty_bots.verify").replace("%generic.yes%", Emulator.getTexts().getValue("generic.yes")), RoomChatMessageBubbles.ALERT);
+ }
+ }
+
+ return true;
+ }
+
+ if(params.length >= 2 && params[1].equalsIgnoreCase(Emulator.getTexts().getValue("generic.yes")))
+ {
+ Habbo habbo = gameClient.getHabbo();
+ if (params.length == 3 && gameClient.getHabbo().hasPermission("acc_empty_others"))
+ {
+ habbo = Emulator.getGameEnvironment().getHabboManager().getHabbo(params[2]);
+ }
+
+ if (habbo != null)
+ {
+ TIntObjectHashMap bots = new TIntObjectHashMap<>();
+ bots.putAll(habbo.getInventory().getBotsComponent().getBots());
+ habbo.getInventory().getBotsComponent().getBots().clear();
+ bots.forEachValue(new TObjectProcedure()
+ {
+ @Override
+ public boolean execute(Bot object)
+ {
+ Emulator.getGameEnvironment().getBotManager().deleteBot(object);
+ return true;
+ }
+ });
+
+ habbo.getClient().sendResponse(new InventoryRefreshComposer());
+
+ gameClient.getHabbo().whisper(Emulator.getTexts().getValue("commands.succes.cmd_empty_bots.cleared"), RoomChatMessageBubbles.ALERT);
+ }
+ }
+
+ return true;
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/com/eu/habbo/habbohotel/commands/EmptyInventoryCommand.java b/src/main/java/com/eu/habbo/habbohotel/commands/EmptyInventoryCommand.java
new file mode 100644
index 00000000..e9139a97
--- /dev/null
+++ b/src/main/java/com/eu/habbo/habbohotel/commands/EmptyInventoryCommand.java
@@ -0,0 +1,69 @@
+package com.eu.habbo.habbohotel.commands;
+
+import com.eu.habbo.Emulator;
+import com.eu.habbo.habbohotel.gameclients.GameClient;
+import com.eu.habbo.habbohotel.rooms.RoomChatMessage;
+import com.eu.habbo.habbohotel.rooms.RoomChatMessageBubbles;
+import com.eu.habbo.habbohotel.users.Habbo;
+import com.eu.habbo.habbohotel.users.HabboItem;
+import com.eu.habbo.messages.outgoing.generic.alerts.GenericAlertComposer;
+import com.eu.habbo.messages.outgoing.inventory.InventoryItemsComposer;
+import com.eu.habbo.messages.outgoing.inventory.InventoryRefreshComposer;
+import com.eu.habbo.messages.outgoing.rooms.users.RoomUserWhisperComposer;
+import com.eu.habbo.threading.runnables.QueryDeleteHabboItems;
+import gnu.trove.map.TIntObjectMap;
+import gnu.trove.map.hash.TIntObjectHashMap;
+
+public class EmptyInventoryCommand extends Command
+{
+ public EmptyInventoryCommand()
+ {
+ super("cmd_empty", Emulator.getTexts().getValue("commands.keys.cmd_empty").split(";"));
+ }
+
+ @Override
+ public boolean handle(GameClient gameClient, String[] params) throws Exception
+ {
+ if(params.length == 1 || (params.length >= 2 && !params[1].equals(Emulator.getTexts().getValue("generic.yes"))))
+ {
+ if(gameClient.getHabbo().getHabboInfo().getCurrentRoom() != null)
+ {
+ if(gameClient.getHabbo().getHabboInfo().getCurrentRoom().getUserCount() > 10)
+ {
+ gameClient.sendResponse(new GenericAlertComposer(Emulator.getTexts().getValue("commands.succes.cmd_empty.verify").replace("%generic.yes%", Emulator.getTexts().getValue("generic.yes"))));
+ }
+ else
+ {
+ gameClient.getHabbo().whisper(Emulator.getTexts().getValue("commands.succes.cmd_empty.verify").replace("%generic.yes%", Emulator.getTexts().getValue("generic.yes")), RoomChatMessageBubbles.ALERT);
+ }
+ }
+
+ return true;
+ }
+
+ if(params.length >= 2 && params[1].equalsIgnoreCase(Emulator.getTexts().getValue("generic.yes")))
+ {
+ Habbo habbo = gameClient.getHabbo();
+ if (params.length == 3 && gameClient.getHabbo().hasPermission("acc_empty_others"))
+ {
+ habbo = Emulator.getGameEnvironment().getHabboManager().getHabbo(params[2]);
+ }
+
+ if (habbo != null)
+ {
+
+ TIntObjectMap items = new TIntObjectHashMap();
+ items.putAll(habbo.getInventory().getItemsComponent().getItems());
+ habbo.getInventory().getItemsComponent().getItems().clear();
+ Emulator.getThreading().run(new QueryDeleteHabboItems(items));
+
+ habbo.getClient().sendResponse(new InventoryRefreshComposer());
+ habbo.getClient().sendResponse(new InventoryItemsComposer(0, 1, gameClient.getHabbo().getInventory().getItemsComponent().getItems()));
+
+ gameClient.getHabbo().whisper(Emulator.getTexts().getValue("commands.succes.cmd_empty.cleared"), RoomChatMessageBubbles.ALERT);
+ }
+ }
+
+ return true;
+ }
+}
diff --git a/src/main/java/com/eu/habbo/habbohotel/commands/EmptyPetsInventoryCommand.java b/src/main/java/com/eu/habbo/habbohotel/commands/EmptyPetsInventoryCommand.java
new file mode 100644
index 00000000..21f8cf12
--- /dev/null
+++ b/src/main/java/com/eu/habbo/habbohotel/commands/EmptyPetsInventoryCommand.java
@@ -0,0 +1,72 @@
+package com.eu.habbo.habbohotel.commands;
+
+import com.eu.habbo.Emulator;
+import com.eu.habbo.habbohotel.gameclients.GameClient;
+import com.eu.habbo.habbohotel.pets.AbstractPet;
+import com.eu.habbo.habbohotel.rooms.RoomChatMessage;
+import com.eu.habbo.habbohotel.rooms.RoomChatMessageBubbles;
+import com.eu.habbo.habbohotel.users.Habbo;
+import com.eu.habbo.messages.outgoing.generic.alerts.GenericAlertComposer;
+import com.eu.habbo.messages.outgoing.inventory.InventoryRefreshComposer;
+import com.eu.habbo.messages.outgoing.rooms.users.RoomUserWhisperComposer;
+import gnu.trove.map.hash.TIntObjectHashMap;
+import gnu.trove.procedure.TObjectProcedure;
+
+public class EmptyPetsInventoryCommand extends Command
+{
+ public EmptyPetsInventoryCommand()
+ {
+ super("cmd_empty_pets", Emulator.getTexts().getValue("commands.keys.cmd_empty_pets").split(";"));
+ }
+
+ @Override
+ public boolean handle(GameClient gameClient, String[] params) throws Exception
+ {
+ if(params.length == 1 || (params.length >= 2 && !params[1].equals(Emulator.getTexts().getValue("generic.yes"))))
+ {
+ if(gameClient.getHabbo().getHabboInfo().getCurrentRoom() != null)
+ {
+ if(gameClient.getHabbo().getHabboInfo().getCurrentRoom().getUserCount() > 10)
+ {
+ gameClient.sendResponse(new GenericAlertComposer(Emulator.getTexts().getValue("commands.succes.cmd_empty_pets.verify").replace("%generic.yes%", Emulator.getTexts().getValue("generic.yes"))));
+ }
+ else
+ {
+ gameClient.getHabbo().whisper(Emulator.getTexts().getValue("commands.succes.cmd_empty_pets.verify").replace("%generic.yes%", Emulator.getTexts().getValue("generic.yes")), RoomChatMessageBubbles.ALERT);
+ }
+ }
+
+ return true;
+ }
+
+ if(params.length >= 2 && params[1].equalsIgnoreCase(Emulator.getTexts().getValue("generic.yes")))
+ {
+ Habbo habbo = gameClient.getHabbo();
+ if (params.length == 3 && gameClient.getHabbo().hasPermission("acc_empty_others"))
+ {
+ habbo = Emulator.getGameEnvironment().getHabboManager().getHabbo(params[2]);
+ }
+
+ if (habbo != null)
+ {
+ TIntObjectHashMap pets = new TIntObjectHashMap<>();
+ pets.putAll(habbo.getInventory().getPetsComponent().getPets());
+ habbo.getInventory().getPetsComponent().getPets().clear();
+ pets.forEachValue(new TObjectProcedure()
+ {
+ @Override
+ public boolean execute(AbstractPet object)
+ {
+ Emulator.getGameEnvironment().getPetManager().deletePet(object);
+ return true;
+ }
+ });
+
+ habbo.getClient().sendResponse(new InventoryRefreshComposer());
+ gameClient.getHabbo().whisper(Emulator.getTexts().getValue("commands.succes.cmd_empty_pets.cleared"), RoomChatMessageBubbles.ALERT);
+ }
+ }
+
+ return true;
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/com/eu/habbo/habbohotel/commands/EnableCommand.java b/src/main/java/com/eu/habbo/habbohotel/commands/EnableCommand.java
new file mode 100644
index 00000000..f68db57f
--- /dev/null
+++ b/src/main/java/com/eu/habbo/habbohotel/commands/EnableCommand.java
@@ -0,0 +1,67 @@
+package com.eu.habbo.habbohotel.commands;
+
+import com.eu.habbo.Emulator;
+import com.eu.habbo.habbohotel.gameclients.GameClient;
+import com.eu.habbo.habbohotel.rooms.RoomChatMessage;
+import com.eu.habbo.habbohotel.rooms.RoomChatMessageBubbles;
+import com.eu.habbo.habbohotel.users.Habbo;
+import com.eu.habbo.messages.outgoing.rooms.users.RoomUserEffectComposer;
+import com.eu.habbo.messages.outgoing.rooms.users.RoomUserWhisperComposer;
+
+public class EnableCommand extends Command
+{
+ public EnableCommand()
+ {
+ super("cmd_enable", Emulator.getTexts().getValue("commands.keys.cmd_enable").split(";"));
+ }
+
+ @Override
+ public boolean handle(GameClient gameClient, String[] params) throws Exception
+ {
+ if(params.length >= 2)
+ {
+ int effectId = 0;
+ try
+ {
+ effectId = Integer.parseInt(params[1]);
+ }
+ catch (Exception e)
+ {
+ return false;
+ }
+ Habbo target = gameClient.getHabbo();
+ if (params.length == 3)
+ {
+ target = gameClient.getHabbo().getHabboInfo().getCurrentRoom().getHabbo(params[2]);
+ }
+
+ if (target != null)
+ {
+ if (target == gameClient.getHabbo() || gameClient.getHabbo().hasPermission("acc_enable_others"))
+ {
+ try
+ {
+ if (target.getHabboInfo().getCurrentRoom() != null)
+ {
+ if (target.getHabboInfo().getRiding() == null)
+ {
+ if (Emulator.getGameEnvironment().getPermissionsManager().isEffectBlocked(effectId, target.getHabboInfo().getRank().getId()))
+ {
+ gameClient.getHabbo().whisper(Emulator.getTexts().getValue("commands.error.cmd_enable.not_allowed"), RoomChatMessageBubbles.ALERT);
+ return true;
+ }
+
+ target.getHabboInfo().getCurrentRoom().giveEffect(target, effectId);
+ }
+ }
+ }
+ catch (Exception e)
+ {
+ e.printStackTrace();
+ }
+ }
+ }
+ }
+ return true;
+ }
+}
diff --git a/src/main/java/com/eu/habbo/habbohotel/commands/EventCommand.java b/src/main/java/com/eu/habbo/habbohotel/commands/EventCommand.java
new file mode 100644
index 00000000..7de1b487
--- /dev/null
+++ b/src/main/java/com/eu/habbo/habbohotel/commands/EventCommand.java
@@ -0,0 +1,61 @@
+package com.eu.habbo.habbohotel.commands;
+
+import com.eu.habbo.Emulator;
+import com.eu.habbo.habbohotel.gameclients.GameClient;
+import com.eu.habbo.habbohotel.users.Habbo;
+import com.eu.habbo.messages.ServerMessage;
+import com.eu.habbo.messages.outgoing.generic.alerts.BubbleAlertComposer;
+import com.eu.habbo.messages.outgoing.generic.alerts.GenericAlertComposer;
+import gnu.trove.map.hash.THashMap;
+
+import java.util.ArrayList;
+import java.util.Map;
+
+public class EventCommand extends Command
+{
+ public EventCommand()
+ {
+ super("cmd_event", Emulator.getTexts().getValue("commands.keys.cmd_event").split(";"));
+ }
+
+ @Override
+ public boolean handle(GameClient gameClient, String[] params) throws Exception
+ {
+ if(gameClient.getHabbo().getHabboInfo().getCurrentRoom() != null)
+ {
+ if (params.length >= 2)
+ {
+ String message = "";
+
+ for (int i = 1; i < params.length; i++)
+ {
+ message += params[i];
+ message += " ";
+ }
+
+ THashMap codes = new THashMap();
+ codes.put("ROOMNAME", gameClient.getHabbo().getHabboInfo().getCurrentRoom().getName());
+ codes.put("ROOMID", gameClient.getHabbo().getHabboInfo().getCurrentRoom().getId() + "");
+ codes.put("USERNAME", gameClient.getHabbo().getHabboInfo().getUsername());
+ codes.put("LOOK", gameClient.getHabbo().getHabboInfo().getLook());
+ codes.put("TIME", Emulator.getDate().toString());
+ codes.put("MESSAGE", message);
+
+ ServerMessage msg = new BubbleAlertComposer("hotel.event", codes).compose();
+
+ for(Map.Entry set : Emulator.getGameEnvironment().getHabboManager().getOnlineHabbos().entrySet())
+ {
+ Habbo habbo = set.getValue();
+ if(habbo.getHabboStats().blockStaffAlerts)
+ continue;
+
+ habbo.getClient().sendResponse(msg);
+ }
+
+ return true;
+ }
+ }
+
+ return false;
+ }
+}
diff --git a/src/main/java/com/eu/habbo/habbohotel/commands/FacelessCommand.java b/src/main/java/com/eu/habbo/habbohotel/commands/FacelessCommand.java
new file mode 100644
index 00000000..c01b5731
--- /dev/null
+++ b/src/main/java/com/eu/habbo/habbohotel/commands/FacelessCommand.java
@@ -0,0 +1,57 @@
+package com.eu.habbo.habbohotel.commands;
+
+import com.eu.habbo.Emulator;
+import com.eu.habbo.habbohotel.gameclients.GameClient;
+import com.eu.habbo.messages.outgoing.rooms.users.RoomUserDataComposer;
+import com.eu.habbo.messages.outgoing.users.UpdateUserLookComposer;
+
+/**
+ * Kudos to Wouto on RaGEZONE
+ */
+public class FacelessCommand extends Command
+{
+ public FacelessCommand()
+ {
+ super("cmd_faceless", Emulator.getTexts().getValue("commands.keys.cmd_faceless").split(";"));
+ }
+
+ @Override
+ public boolean handle(GameClient gameClient, String[] params) throws Exception
+ {
+ if(gameClient.getHabbo().getHabboInfo().getCurrentRoom() != null)
+ {
+ try
+ {
+
+ String[] figureParts = gameClient.getHabbo().getHabboInfo().getLook().split("\\.");
+
+ for (String part : figureParts)
+ {
+ if (part.startsWith("hd"))
+ {
+ String[] headParts = part.split("-");
+
+ if (!headParts[1].equals("99999"))
+ headParts[1] = "99999";
+ else
+ break;
+
+ String newHead = "hd-" + headParts[1] + "-" + headParts[2];
+
+ gameClient.getHabbo().getHabboInfo().setLook(gameClient.getHabbo().getHabboInfo().getLook().replace(part, newHead));
+ gameClient.sendResponse(new UpdateUserLookComposer(gameClient.getHabbo()));
+ gameClient.getHabbo().getHabboInfo().getCurrentRoom().sendComposer(new RoomUserDataComposer(gameClient.getHabbo()).compose());
+ return true;
+ }
+ }
+
+ }
+ catch (Exception e)
+ {
+
+ }
+ }
+
+ return false;
+ }
+}
diff --git a/src/main/java/com/eu/habbo/habbohotel/commands/FastwalkCommand.java b/src/main/java/com/eu/habbo/habbohotel/commands/FastwalkCommand.java
new file mode 100644
index 00000000..519b692b
--- /dev/null
+++ b/src/main/java/com/eu/habbo/habbohotel/commands/FastwalkCommand.java
@@ -0,0 +1,37 @@
+package com.eu.habbo.habbohotel.commands;
+
+import com.eu.habbo.Emulator;
+import com.eu.habbo.habbohotel.gameclients.GameClient;
+import com.eu.habbo.habbohotel.users.Habbo;
+
+public class FastwalkCommand extends Command
+{
+ public FastwalkCommand()
+ {
+ super("cmd_fastwalk", Emulator.getTexts().getValue("commands.keys.cmd_fastwalk").split(";"));
+ }
+
+ @Override
+ public boolean handle(GameClient gameClient, String[] params) throws Exception
+ {
+ if(gameClient.getHabbo().getHabboInfo().getCurrentRoom() != null)
+ {
+ Habbo habbo = gameClient.getHabbo();
+
+ if(params.length >= 2)
+ {
+ String username = params[1];
+
+ habbo = gameClient.getHabbo().getHabboInfo().getCurrentRoom().getHabbo(username);
+
+ if(habbo == null)
+ return false;
+ }
+ habbo.getRoomUnit().setFastWalk(!habbo.getRoomUnit().isFastWalk());
+
+ return true;
+ }
+
+ return false;
+ }
+}
diff --git a/src/main/java/com/eu/habbo/habbohotel/commands/FreezeBotsCommand.java b/src/main/java/com/eu/habbo/habbohotel/commands/FreezeBotsCommand.java
new file mode 100644
index 00000000..af7df319
--- /dev/null
+++ b/src/main/java/com/eu/habbo/habbohotel/commands/FreezeBotsCommand.java
@@ -0,0 +1,36 @@
+package com.eu.habbo.habbohotel.commands;
+
+import com.eu.habbo.Emulator;
+import com.eu.habbo.habbohotel.gameclients.GameClient;
+import com.eu.habbo.habbohotel.rooms.RoomChatMessage;
+import com.eu.habbo.habbohotel.rooms.RoomChatMessageBubbles;
+import com.eu.habbo.messages.outgoing.rooms.users.RoomUserWhisperComposer;
+
+public class FreezeBotsCommand extends Command
+{
+ public FreezeBotsCommand()
+ {
+ super("cmd_freeze_bots", Emulator.getTexts().getValue("commands.keys.cmd_freeze_bots").split(";"));
+ }
+
+ @Override
+ public boolean handle(GameClient gameClient, String[] params) throws Exception
+ {
+ if(gameClient.getHabbo().getHabboInfo().getCurrentRoom() != null)
+ {
+ if(gameClient.getHabbo().getHabboInfo().getId() == gameClient.getHabbo().getHabboInfo().getCurrentRoom().getOwnerId() || gameClient.getHabbo().hasPermission("acc_anyroomowner"))
+ {
+ gameClient.getHabbo().getHabboInfo().getCurrentRoom().setAllowBotsWalk(!gameClient.getHabbo().getHabboInfo().getCurrentRoom().isAllowBotsWalk());
+ gameClient.getHabbo().whisper(gameClient.getHabbo().getHabboInfo().getCurrentRoom().isAllowBotsWalk() ? Emulator.getTexts().getValue("commands.succes.cmd_freeze_bots.unfrozen") : Emulator.getTexts().getValue("commands.succes.cmd_freeze_bots.frozen"), RoomChatMessageBubbles.ALERT);
+ }
+ else
+ {
+ gameClient.getHabbo().whisper(Emulator.getTexts().getValue("generic.cannot_do_that"), RoomChatMessageBubbles.ALERT);
+ }
+
+ return true;
+ }
+
+ return false;
+ }
+}
diff --git a/src/main/java/com/eu/habbo/habbohotel/commands/FreezeCommand.java b/src/main/java/com/eu/habbo/habbohotel/commands/FreezeCommand.java
new file mode 100644
index 00000000..83548a75
--- /dev/null
+++ b/src/main/java/com/eu/habbo/habbohotel/commands/FreezeCommand.java
@@ -0,0 +1,53 @@
+package com.eu.habbo.habbohotel.commands;
+
+import com.eu.habbo.Emulator;
+import com.eu.habbo.habbohotel.gameclients.GameClient;
+import com.eu.habbo.habbohotel.rooms.RoomChatMessage;
+import com.eu.habbo.habbohotel.rooms.RoomChatMessageBubbles;
+import com.eu.habbo.habbohotel.users.Habbo;
+import com.eu.habbo.messages.outgoing.rooms.users.RoomUserWhisperComposer;
+
+public class FreezeCommand extends Command
+{
+ public FreezeCommand()
+ {
+ super("cmd_freeze", Emulator.getTexts().getValue("commands.keys.cmd_freeze").split(";"));
+ }
+
+ @Override
+ public boolean handle(GameClient gameClient, String[] params) throws Exception
+ {
+ if(params.length == 2)
+ {
+ Habbo habbo = gameClient.getHabbo().getHabboInfo().getCurrentRoom().getHabbo(params[1]);
+
+ if(habbo == null)
+ {
+ gameClient.getHabbo().whisper(Emulator.getTexts().getValue("commands.error.cmd_freeze.not_found").replace("%user%", params[1]), RoomChatMessageBubbles.ALERT);
+ return true;
+ }
+ else
+ {
+ if(habbo.getRoomUnit().canWalk())
+ {
+ habbo.getRoomUnit().setCanWalk(false);
+ habbo.whisper(Emulator.getTexts().getValue("commands.succes.cmd_freeze.frozen"), RoomChatMessageBubbles.ALERT);
+ gameClient.getHabbo().whisper(Emulator.getTexts().getValue("commands.succes.cmd_freeze.user_frozen").replace("%user%", params[1]), RoomChatMessageBubbles.ALERT);
+ return true;
+ }
+ else
+ {
+ habbo.getRoomUnit().setCanWalk(true);
+ habbo.whisper(Emulator.getTexts().getValue("commands.succes.cmd_freeze.unfrozen"), RoomChatMessageBubbles.ALERT);
+ gameClient.getHabbo().whisper(Emulator.getTexts().getValue("commands.succes.cmd_freeze.user_unfrozen").replace("%user%", params[1]), RoomChatMessageBubbles.ALERT);
+ return true;
+ }
+ }
+ }
+ else
+ {
+ gameClient.getHabbo().whisper(Emulator.getTexts().getValue("commands.error.cmd_freeze.not_found").replace("%user%", ""), RoomChatMessageBubbles.ALERT);
+ return true;
+ }
+ }
+}
diff --git a/src/main/java/com/eu/habbo/habbohotel/commands/GiftCommand.java b/src/main/java/com/eu/habbo/habbohotel/commands/GiftCommand.java
new file mode 100644
index 00000000..15c94bb1
--- /dev/null
+++ b/src/main/java/com/eu/habbo/habbohotel/commands/GiftCommand.java
@@ -0,0 +1,105 @@
+package com.eu.habbo.habbohotel.commands;
+
+import com.eu.habbo.Emulator;
+import com.eu.habbo.habbohotel.gameclients.GameClient;
+import com.eu.habbo.habbohotel.items.Item;
+import com.eu.habbo.habbohotel.rooms.RoomChatMessage;
+import com.eu.habbo.habbohotel.rooms.RoomChatMessageBubbles;
+import com.eu.habbo.habbohotel.users.Habbo;
+import com.eu.habbo.habbohotel.users.HabboInfo;
+import com.eu.habbo.habbohotel.users.HabboItem;
+import com.eu.habbo.habbohotel.users.HabboManager;
+import com.eu.habbo.messages.outgoing.generic.alerts.BubbleAlertComposer;
+import com.eu.habbo.messages.outgoing.generic.alerts.BubbleAlertKeys;
+import com.eu.habbo.messages.outgoing.generic.alerts.WiredRewardAlertComposer;
+import com.eu.habbo.messages.outgoing.inventory.InventoryRefreshComposer;
+import com.eu.habbo.messages.outgoing.rooms.users.RoomUserWhisperComposer;
+import gnu.trove.map.hash.THashMap;
+
+public class GiftCommand extends Command
+{
+ public GiftCommand()
+ {
+ super("cmd_gift", Emulator.getTexts().getValue("commands.keys.cmd_gift").split(";"));
+ }
+
+ @Override
+ public boolean handle(GameClient gameClient, String[] params) throws Exception
+ {
+ if(params.length >= 3)
+ {
+ try
+ {
+ String username = params[1];
+ int itemId = Integer.valueOf(params[2]);
+
+ if(itemId < 0)
+ {
+ gameClient.getHabbo().whisper(Emulator.getTexts().getValue("commands.error.cmd_gift.not_a_number"), RoomChatMessageBubbles.ALERT);
+ return true;
+ }
+
+ Item baseItem = Emulator.getGameEnvironment().getItemManager().getItem(itemId);
+
+ if(baseItem == null)
+ {
+ gameClient.getHabbo().whisper(Emulator.getTexts().getValue("commands.error.cmd_gift.not_found").replace("%itemid%", itemId + ""), RoomChatMessageBubbles.ALERT);
+ return true;
+ }
+
+ HabboInfo habboInfo = HabboManager.getOfflineHabboInfo(username);
+
+ if(habboInfo == null)
+ {
+ gameClient.getHabbo().whisper(Emulator.getTexts().getValue("commands.error.cmd_gift.user_not_found").replace("%username%", username), RoomChatMessageBubbles.ALERT);
+ return true;
+ }
+
+ String message = "";
+
+ if(params.length > 3)
+ {
+ for (int i = 3; i < params.length; i++)
+ {
+ message += params[i] + " ";
+ }
+ }
+
+ final String finalMessage = message;
+
+ HabboItem item = Emulator.getGameEnvironment().getItemManager().createItem(0, baseItem, 0, 0, "");
+
+ Item giftItem = Emulator.getGameEnvironment().getItemManager().getItem((Integer)Emulator.getGameEnvironment().getCatalogManager().giftFurnis.values().toArray()[Emulator.getRandom().nextInt(Emulator.getGameEnvironment().getCatalogManager().giftFurnis.size())]);
+
+ String extraData = "1\t" + item.getId();
+ extraData += "\t0\t0\t0\t"+ finalMessage +"\t0\t0";
+
+ Emulator.getGameEnvironment().getItemManager().createGift(username, giftItem, extraData, 0, 0);
+
+ gameClient.getHabbo().whisper(Emulator.getTexts().getValue("commands.succes.cmd_gift").replace("%username%", username).replace("%itemname%", item.getBaseItem().getName()), RoomChatMessageBubbles.ALERT);
+
+ Habbo habbo = Emulator.getGameEnvironment().getHabboManager().getHabbo(habboInfo.getId());
+
+ if (habbo != null)
+ {
+ habbo.getClient().sendResponse(new InventoryRefreshComposer());
+
+ THashMap keys = new THashMap();
+ keys.put("display", "BUBBLE");
+ keys.put("image", "${image.library.url}notifications/gift.gif");
+ keys.put("message", Emulator.getTexts().getValue("generic.gift.received.anonymous"));
+ habbo.getClient().sendResponse(new BubbleAlertComposer(BubbleAlertKeys.RECEIVED_BADGE.key, keys));
+ }
+ return true;
+ }
+ catch (Exception e)
+ {
+ e.printStackTrace();
+ gameClient.getHabbo().whisper(Emulator.getTexts().getValue("commands.error.cmd_gift.not_a_number"), RoomChatMessageBubbles.ALERT);
+ return true;
+ }
+ }
+
+ return false;
+ }
+}
diff --git a/src/main/java/com/eu/habbo/habbohotel/commands/GiveRankCommand.java b/src/main/java/com/eu/habbo/habbohotel/commands/GiveRankCommand.java
new file mode 100644
index 00000000..73adf6f3
--- /dev/null
+++ b/src/main/java/com/eu/habbo/habbohotel/commands/GiveRankCommand.java
@@ -0,0 +1,87 @@
+package com.eu.habbo.habbohotel.commands;
+
+import com.eu.habbo.Emulator;
+import com.eu.habbo.habbohotel.gameclients.GameClient;
+import com.eu.habbo.habbohotel.permissions.Rank;
+import com.eu.habbo.habbohotel.rooms.RoomChatMessage;
+import com.eu.habbo.habbohotel.rooms.RoomChatMessageBubbles;
+import com.eu.habbo.habbohotel.users.Habbo;
+import com.eu.habbo.habbohotel.users.HabboInfo;
+import com.eu.habbo.habbohotel.users.HabboManager;
+import com.eu.habbo.messages.outgoing.generic.alerts.GenericAlertComposer;
+import com.eu.habbo.messages.outgoing.modtool.ModToolComposer;
+import com.eu.habbo.messages.outgoing.rooms.users.RoomUserWhisperComposer;
+import com.eu.habbo.messages.outgoing.users.UserPerksComposer;
+import org.apache.commons.lang3.StringUtils;
+
+public class GiveRankCommand extends Command
+{
+ public GiveRankCommand()
+ {
+ super("cmd_give_rank", Emulator.getTexts().getValue("commands.keys.cmd_give_rank").split(";"));
+ }
+
+ @Override
+ public boolean handle(GameClient gameClient, String[] params) throws Exception
+ {
+ Rank rank = null;
+ if (params.length == 1)
+ {
+ gameClient.getHabbo().whisper(Emulator.getTexts().getValue("commands.error.cmd_give_rank.missing_username") + Emulator.getTexts().getValue("commands.description.cmd_give_rank"), RoomChatMessageBubbles.ALERT);
+ return true;
+ }
+
+ if (params.length == 2)
+ {
+ gameClient.getHabbo().whisper(Emulator.getTexts().getValue("commands.error.cmd_give_rank.missing_rank") + Emulator.getTexts().getValue("commands.description.cmd_give_rank"), RoomChatMessageBubbles.ALERT);
+ return true;
+ }
+
+ if (params.length == 3)
+ {
+ if (StringUtils.isNumeric(params[2]))
+ {
+ int rankId = Integer.valueOf(params[2]);
+ if (Emulator.getGameEnvironment().getPermissionsManager().rankExists(rankId))
+ rank = Emulator.getGameEnvironment().getPermissionsManager().getRank(rankId);
+ }
+ else
+ {
+ rank = Emulator.getGameEnvironment().getPermissionsManager().getRank(params[2]);
+ }
+
+ if (rank != null)
+ {
+ if (rank.getId() > gameClient.getHabbo().getHabboInfo().getRank().getId())
+ {
+ gameClient.getHabbo().whisper(Emulator.getTexts().getValue("commands.error.cmd_give_rank.higher").replace("%username%", params[1]).replace("%id%", rank.getName()), RoomChatMessageBubbles.ALERT);
+ return true;
+ }
+
+ HabboInfo habbo = HabboManager.getOfflineHabboInfo(params[1]);
+
+ if (habbo != null)
+ {
+ if (habbo.getRank().getId() > gameClient.getHabbo().getHabboInfo().getRank().getId())
+ {
+ gameClient.getHabbo().whisper(Emulator.getTexts().getValue("commands.error.cmd_give_rank.higher.other").replace("%username%", params[1]).replace("%id%", rank.getName()), RoomChatMessageBubbles.ALERT);
+ return true;
+ }
+
+ Emulator.getGameEnvironment().getHabboManager().setRank(habbo.getId(), rank.getId());
+
+ gameClient.getHabbo().whisper(Emulator.getTexts().getValue("commands.succes.cmd_give_rank.updated").replace("%id%", rank.getName()).replace("%username%", params[1]), RoomChatMessageBubbles.ALERT);
+ return true;
+ }
+ else
+ {
+ gameClient.getHabbo().whisper(Emulator.getTexts().getValue("commands.error.cmd_give_rank.user_offline").replace("%id%", rank.getName()).replace("%username%", params[1]), RoomChatMessageBubbles.ALERT);
+ return true;
+ }
+ }
+ }
+
+ gameClient.getHabbo().whisper(Emulator.getTexts().getValue("commands.errors.cmd_give_rank.not_found").replace("%id%", params[2]).replace("%username%", params[1]), RoomChatMessageBubbles.ALERT);
+ return true;
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/com/eu/habbo/habbohotel/commands/HabnamCommand.java b/src/main/java/com/eu/habbo/habbohotel/commands/HabnamCommand.java
new file mode 100644
index 00000000..9f3d811b
--- /dev/null
+++ b/src/main/java/com/eu/habbo/habbohotel/commands/HabnamCommand.java
@@ -0,0 +1,26 @@
+package com.eu.habbo.habbohotel.commands;
+
+import com.eu.habbo.habbohotel.gameclients.GameClient;
+
+public class HabnamCommand extends Command
+{
+ public HabnamCommand()
+ {
+ super(null, new String[]{ "habnam", "gangnam" });
+ }
+
+ @Override
+ public boolean handle(GameClient gameClient, String[] params) throws Exception
+ {
+ if (gameClient.getHabbo().getHabboStats().hasActiveClub())
+ {
+ if (gameClient.getHabbo().getHabboInfo().getCurrentRoom() != null)
+ {
+ gameClient.getHabbo().getHabboInfo().getCurrentRoom().giveEffect(gameClient.getHabbo(), 140);
+ return true;
+ }
+ }
+
+ return false;
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/com/eu/habbo/habbohotel/commands/HandItemCommand.java b/src/main/java/com/eu/habbo/habbohotel/commands/HandItemCommand.java
new file mode 100644
index 00000000..2c11fe65
--- /dev/null
+++ b/src/main/java/com/eu/habbo/habbohotel/commands/HandItemCommand.java
@@ -0,0 +1,34 @@
+package com.eu.habbo.habbohotel.commands;
+
+import com.eu.habbo.Emulator;
+import com.eu.habbo.habbohotel.gameclients.GameClient;
+import com.eu.habbo.messages.outgoing.rooms.users.RoomUserHandItemComposer;
+
+public class HandItemCommand extends Command
+{
+ public HandItemCommand()
+ {
+ super("cmd_hand_item", Emulator.getTexts().getValue("commands.keys.cmd_hand_item").split(";"));
+ }
+
+ @Override
+ public boolean handle(GameClient gameClient, String[] params) throws Exception
+ {if(params.length == 2)
+ {
+ try
+ {
+ if(gameClient.getHabbo().getHabboInfo().getCurrentRoom() != null)
+ {
+ int effectId = Integer.parseInt(params[1]);
+ gameClient.getHabbo().getRoomUnit().setHandItem(effectId);
+ gameClient.getHabbo().getHabboInfo().getCurrentRoom().sendComposer(new RoomUserHandItemComposer(gameClient.getHabbo().getRoomUnit()).compose());
+ }
+ }
+ catch (Exception e)
+ {
+ //Don't handle incorrect parse exceptions :P
+ }
+ }
+ return true;
+ }
+}
diff --git a/src/main/java/com/eu/habbo/habbohotel/commands/HappyHourCommand.java b/src/main/java/com/eu/habbo/habbohotel/commands/HappyHourCommand.java
new file mode 100644
index 00000000..31f6bb9d
--- /dev/null
+++ b/src/main/java/com/eu/habbo/habbohotel/commands/HappyHourCommand.java
@@ -0,0 +1,31 @@
+package com.eu.habbo.habbohotel.commands;
+
+import com.eu.habbo.Emulator;
+import com.eu.habbo.habbohotel.achievements.AchievementManager;
+import com.eu.habbo.habbohotel.gameclients.GameClient;
+import com.eu.habbo.habbohotel.users.Habbo;
+import com.eu.habbo.messages.outgoing.generic.alerts.GenericAlertComposer;
+
+import java.util.Collection;
+import java.util.Map;
+
+public class HappyHourCommand extends Command
+{
+ public HappyHourCommand()
+ {
+ super("cmd_happyhour", Emulator.getTexts().getValue("commands.keys.cmd_happyhour").split(";"));
+ }
+
+ @Override
+ public boolean handle(GameClient gameClient, String[] params) throws Exception
+ {
+ Emulator.getGameServer().getGameClientManager().sendBroadcastResponse(new GenericAlertComposer("Happy Hour!"));
+
+ for(Map.Entry set : Emulator.getGameEnvironment().getHabboManager().getOnlineHabbos().entrySet())
+ {
+ AchievementManager.progressAchievement(set.getValue(), Emulator.getGameEnvironment().getAchievementManager().getAchievement("HappyHour"));
+ }
+
+ return true;
+ }
+}
diff --git a/src/main/java/com/eu/habbo/habbohotel/commands/HotelAlertCommand.java b/src/main/java/com/eu/habbo/habbohotel/commands/HotelAlertCommand.java
new file mode 100644
index 00000000..71644dde
--- /dev/null
+++ b/src/main/java/com/eu/habbo/habbohotel/commands/HotelAlertCommand.java
@@ -0,0 +1,47 @@
+package com.eu.habbo.habbohotel.commands;
+
+import com.eu.habbo.Emulator;
+import com.eu.habbo.habbohotel.gameclients.GameClient;
+import com.eu.habbo.habbohotel.rooms.RoomChatMessage;
+import com.eu.habbo.habbohotel.rooms.RoomChatMessageBubbles;
+import com.eu.habbo.habbohotel.users.Habbo;
+import com.eu.habbo.messages.ServerMessage;
+import com.eu.habbo.messages.outgoing.generic.alerts.GenericAlertComposer;
+import com.eu.habbo.messages.outgoing.rooms.users.RoomUserWhisperComposer;
+
+import java.util.Map;
+
+public class HotelAlertCommand extends Command {
+
+ public HotelAlertCommand()
+ {
+ super("cmd_ha", Emulator.getTexts().getValue("commands.keys.cmd_ha").split(";"));
+ }
+
+ @Override
+ public boolean handle(GameClient gameClient, String[] params)
+ {
+ if(params.length > 1) {
+ String message = "";
+ for (int i = 1; i < params.length; i++) {
+ message += params[i] + " ";
+ }
+
+ ServerMessage msg = new GenericAlertComposer(message + "\r\n-" + gameClient.getHabbo().getHabboInfo().getUsername()).compose();
+
+ for(Map.Entry set : Emulator.getGameEnvironment().getHabboManager().getOnlineHabbos().entrySet())
+ {
+ Habbo habbo = set.getValue();
+ if(habbo.getHabboStats().blockStaffAlerts)
+ continue;
+
+ habbo.getClient().sendResponse(msg);
+ }
+
+ }else
+ {
+ gameClient.getHabbo().whisper(Emulator.getTexts().getValue("commands.error.cmd_ha.forgot_message"), RoomChatMessageBubbles.ALERT);
+ }
+ return true;
+ }
+}
diff --git a/src/main/java/com/eu/habbo/habbohotel/commands/HotelAlertLinkCommand.java b/src/main/java/com/eu/habbo/habbohotel/commands/HotelAlertLinkCommand.java
new file mode 100644
index 00000000..65e74ee3
--- /dev/null
+++ b/src/main/java/com/eu/habbo/habbohotel/commands/HotelAlertLinkCommand.java
@@ -0,0 +1,35 @@
+package com.eu.habbo.habbohotel.commands;
+
+import com.eu.habbo.Emulator;
+import com.eu.habbo.habbohotel.gameclients.GameClient;
+import com.eu.habbo.messages.outgoing.generic.alerts.StaffAlertWithLinkComposer;
+
+public class HotelAlertLinkCommand extends Command
+{
+ public HotelAlertLinkCommand()
+ {
+ super("cmd_hal", Emulator.getTexts().getValue("commands.keys.cmd_hal").split(";"));
+ }
+
+ @Override
+ public boolean handle(GameClient gameClient, String[] params) throws Exception
+ {
+ if (params.length < 3)
+ {
+ return true;
+ }
+
+ String url = params[1];
+ String message = "";
+ for (int i = 2; i < params.length; i++)
+ {
+ message += params[i];
+ message += " ";
+ }
+
+ message += "\r\r-" + gameClient.getHabbo().getHabboInfo().getUsername() + "";
+
+ Emulator.getGameServer().getGameClientManager().sendBroadcastResponse(new StaffAlertWithLinkComposer(message, url).compose());
+ return true;
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/com/eu/habbo/habbohotel/commands/IPBanCommand.java b/src/main/java/com/eu/habbo/habbohotel/commands/IPBanCommand.java
new file mode 100644
index 00000000..9746f2f2
--- /dev/null
+++ b/src/main/java/com/eu/habbo/habbohotel/commands/IPBanCommand.java
@@ -0,0 +1,90 @@
+package com.eu.habbo.habbohotel.commands;
+
+import com.eu.habbo.Emulator;
+import com.eu.habbo.habbohotel.gameclients.GameClient;
+import com.eu.habbo.habbohotel.modtool.ModToolBan;
+import com.eu.habbo.habbohotel.modtool.ModToolBanType;
+import com.eu.habbo.habbohotel.rooms.RoomChatMessage;
+import com.eu.habbo.habbohotel.rooms.RoomChatMessageBubbles;
+import com.eu.habbo.habbohotel.users.Habbo;
+import com.eu.habbo.habbohotel.users.HabboInfo;
+import com.eu.habbo.habbohotel.users.HabboManager;
+import com.eu.habbo.messages.outgoing.rooms.users.RoomUserWhisperComposer;
+
+public class IPBanCommand extends Command
+{
+ public final static int TEN_YEARS = 315569260;
+ public IPBanCommand()
+ {
+ super("cmd_ip_ban", Emulator.getTexts().getValue("commands.keys.cmd_ip_ban").split(";"));
+ }
+
+ @Override
+ public boolean handle(GameClient gameClient, String[] params) throws Exception
+ {
+ HabboInfo habbo = null;
+ String reason = "";
+ if (params.length >= 2)
+ {
+ Habbo h = Emulator.getGameEnvironment().getHabboManager().getHabbo(params[1]);
+
+ if (h != null)
+ {
+ habbo = h.getHabboInfo();
+ }
+ else
+ {
+ habbo = HabboManager.getOfflineHabboInfo(params[1]);
+ }
+ }
+ else
+ {
+ return true;
+ }
+
+ if (params.length > 2)
+ {
+ for (int i = 2; i < params.length; i++)
+ {
+ reason += params[i];
+ reason += " ";
+ }
+ }
+
+ int count = 0;
+ if (habbo != null)
+ {
+ if (habbo == gameClient.getHabbo().getHabboInfo())
+ {
+ gameClient.getHabbo().whisper(Emulator.getTexts().getValue("commands.error.cmd_ip_ban.ban_self"), RoomChatMessageBubbles.ALERT);
+ return true;
+ }
+
+ if (habbo.getRank().getId() >= gameClient.getHabbo().getHabboInfo().getRank().getId())
+ {
+ gameClient.getHabbo().whisper(Emulator.getTexts().getValue("commands.error.cmd_ban.target_rank_higher"), RoomChatMessageBubbles.ALERT);
+ return true;
+ }
+
+ Emulator.getGameEnvironment().getModToolManager().ban(habbo.getId(), gameClient.getHabbo(), reason, TEN_YEARS, ModToolBanType.IP, -1);
+ count++;
+ for (Habbo h : Emulator.getGameServer().getGameClientManager().getHabbosWithIP(habbo.getIpLogin()))
+ {
+ if (h != null)
+ {
+ count++;
+ Emulator.getGameEnvironment().getModToolManager().ban(h.getHabboInfo().getId(), gameClient.getHabbo(), reason, TEN_YEARS, ModToolBanType.IP, -1);
+ }
+ }
+ }
+ else
+ {
+ gameClient.getHabbo().whisper(Emulator.getTexts().getValue("commands.error.cmd_ban.user_offline"), RoomChatMessageBubbles.ALERT);
+ return true;
+ }
+
+ gameClient.getHabbo().whisper(Emulator.getTexts().getValue("commands.succes.cmd_ip_ban").replace("%count%", count + ""), RoomChatMessageBubbles.ALERT);
+
+ return true;
+ }
+}
diff --git a/src/main/java/com/eu/habbo/habbohotel/commands/LayCommand.java b/src/main/java/com/eu/habbo/habbohotel/commands/LayCommand.java
new file mode 100644
index 00000000..b49d4640
--- /dev/null
+++ b/src/main/java/com/eu/habbo/habbohotel/commands/LayCommand.java
@@ -0,0 +1,43 @@
+package com.eu.habbo.habbohotel.commands;
+
+import com.eu.habbo.Emulator;
+import com.eu.habbo.habbohotel.gameclients.GameClient;
+import com.eu.habbo.habbohotel.rooms.RoomTile;
+import com.eu.habbo.habbohotel.rooms.RoomUserRotation;
+import com.eu.habbo.messages.outgoing.rooms.users.RoomUserStatusComposer;
+
+public class LayCommand extends Command
+{
+ public LayCommand()
+ {
+ super (null, Emulator.getTexts().getValue("commands.keys.cmd_lay").split(";"));
+ }
+
+ @Override
+ public boolean handle(GameClient gameClient, String[] params) throws Exception
+ {
+ gameClient.getHabbo().getRoomUnit().cmdLay = true;
+ gameClient.getHabbo().getHabboInfo().getCurrentRoom().updateHabbo(gameClient.getHabbo());
+ gameClient.getHabbo().getRoomUnit().cmdSit = true;
+ gameClient.getHabbo().getRoomUnit().setBodyRotation(RoomUserRotation.values()[gameClient.getHabbo().getRoomUnit().getBodyRotation().getValue() - gameClient.getHabbo().getRoomUnit().getBodyRotation().getValue() % 2]);
+
+ RoomTile tile = gameClient.getHabbo().getRoomUnit().getCurrentLocation();
+ if (tile == null)
+ {
+ return false;
+ }
+
+ for (int i = 0; i < 3; i++)
+ {
+ RoomTile t = gameClient.getHabbo().getHabboInfo().getCurrentRoom().getLayout().getTileInFront(tile, gameClient.getHabbo().getRoomUnit().getBodyRotation().getValue(), i);
+ if (t == null || !t.isWalkable())
+ {
+ return false;
+ }
+ }
+
+ gameClient.getHabbo().getRoomUnit().getStatus().put("lay", 0.5 + "");
+ gameClient.getHabbo().getHabboInfo().getCurrentRoom().sendComposer(new RoomUserStatusComposer(gameClient.getHabbo().getRoomUnit()).compose());
+ return true;
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/com/eu/habbo/habbohotel/commands/MachineBanCommand.java b/src/main/java/com/eu/habbo/habbohotel/commands/MachineBanCommand.java
new file mode 100644
index 00000000..8e3e0a91
--- /dev/null
+++ b/src/main/java/com/eu/habbo/habbohotel/commands/MachineBanCommand.java
@@ -0,0 +1,86 @@
+package com.eu.habbo.habbohotel.commands;
+
+import com.eu.habbo.Emulator;
+import com.eu.habbo.habbohotel.gameclients.GameClient;
+import com.eu.habbo.habbohotel.modtool.ModToolBan;
+import com.eu.habbo.habbohotel.modtool.ModToolBanType;
+import com.eu.habbo.habbohotel.rooms.RoomChatMessage;
+import com.eu.habbo.habbohotel.rooms.RoomChatMessageBubbles;
+import com.eu.habbo.habbohotel.users.Habbo;
+import com.eu.habbo.habbohotel.users.HabboInfo;
+import com.eu.habbo.habbohotel.users.HabboManager;
+import com.eu.habbo.messages.outgoing.rooms.users.RoomUserWhisperComposer;
+
+import java.util.List;
+
+public class MachineBanCommand extends Command
+{
+ public MachineBanCommand()
+ {
+ super("cmd_machine_ban", Emulator.getTexts().getValue("commands.keys.cmd_machine_ban").split(";"));
+ }
+
+ @Override
+ public boolean handle(GameClient gameClient, String[] params) throws Exception
+ {
+ HabboInfo habbo = null;
+ String reason = "";
+ if (params.length >= 2)
+ {
+ Habbo h = Emulator.getGameEnvironment().getHabboManager().getHabbo(params[1]);
+
+ if (h != null)
+ {
+ habbo = h.getHabboInfo();
+ }
+ else
+ {
+ habbo = HabboManager.getOfflineHabboInfo(params[1]);
+ }
+ }
+
+ if (params.length > 2)
+ {
+ for (int i = 2; i < params.length; i++)
+ {
+ reason += params[i];
+ reason += " ";
+ }
+ }
+
+ int count = 0;
+ if (habbo != null)
+ {
+ if (habbo == gameClient.getHabbo().getHabboInfo())
+ {
+ gameClient.getHabbo().whisper(Emulator.getTexts().getValue("commands.error.cmd_machine_ban.ban_self"), RoomChatMessageBubbles.ALERT);
+ return true;
+ }
+
+ if (habbo.getRank().getId() >= gameClient.getHabbo().getHabboInfo().getRank().getId())
+ {
+ gameClient.getHabbo().whisper(Emulator.getTexts().getValue("commands.error.cmd_ban.target_rank_higher"), RoomChatMessageBubbles.ALERT);
+ return true;
+ }
+
+ count = Emulator.getGameEnvironment().getModToolManager().ban(habbo.getId(), gameClient.getHabbo(), reason, IPBanCommand.TEN_YEARS, ModToolBanType.MACHINE, -1).size();
+// for (Habbo h : Emulator.getGameServer().getGameClientManager().getHabbosWithMachineId(ban.machineId))
+// {
+// if (h != null)
+// {
+// count++;
+// Emulator.getGameEnvironment().getModToolManager().ban(h.getHabboInfo().getId(), gameClient.getHabbo(), reason, IPBanCommand.TEN_YEARS, ModToolBanType.MACHINE);
+// }
+// }
+ }
+ else
+ {
+ gameClient.getHabbo().whisper(Emulator.getTexts().getValue("commands.error.cmd_ban.user_offline"), RoomChatMessageBubbles.ALERT);
+ return true;
+ }
+
+ gameClient.getHabbo().whisper(Emulator.getTexts().getValue("commands.succes.cmd_machine_ban").replace("%count%", count + ""), RoomChatMessageBubbles.ALERT);
+
+ return true;
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/com/eu/habbo/habbohotel/commands/MassBadgeCommand.java b/src/main/java/com/eu/habbo/habbohotel/commands/MassBadgeCommand.java
new file mode 100644
index 00000000..4fc0942a
--- /dev/null
+++ b/src/main/java/com/eu/habbo/habbohotel/commands/MassBadgeCommand.java
@@ -0,0 +1,68 @@
+package com.eu.habbo.habbohotel.commands;
+
+import com.eu.habbo.Emulator;
+import com.eu.habbo.habbohotel.gameclients.GameClient;
+import com.eu.habbo.habbohotel.rooms.RoomChatMessage;
+import com.eu.habbo.habbohotel.rooms.RoomChatMessageBubbles;
+import com.eu.habbo.habbohotel.users.Habbo;
+import com.eu.habbo.habbohotel.users.HabboBadge;
+import com.eu.habbo.habbohotel.users.inventory.BadgesComponent;
+import com.eu.habbo.messages.ServerMessage;
+import com.eu.habbo.messages.outgoing.generic.alerts.BubbleAlertComposer;
+import com.eu.habbo.messages.outgoing.generic.alerts.BubbleAlertKeys;
+import com.eu.habbo.messages.outgoing.rooms.users.RoomUserWhisperComposer;
+import com.eu.habbo.messages.outgoing.users.AddUserBadgeComposer;
+import gnu.trove.map.hash.THashMap;
+
+import java.util.Map;
+
+public class MassBadgeCommand extends Command
+{
+ public MassBadgeCommand()
+ {
+ super("cmd_massbadge", Emulator.getTexts().getValue("commands.keys.cmd_massbadge").split(";"));
+ }
+
+ @Override
+ public boolean handle(GameClient gameClient, String[] params) throws Exception
+ {
+ if(params.length == 2)
+ {
+ String badge;
+
+ badge = params[1];
+
+ if(!badge.isEmpty())
+ {
+ THashMap keys = new THashMap();
+ keys.put("display", "BUBBLE");
+ keys.put("image", "${image.library.url}album1584/" + badge + ".gif");
+ keys.put("message", Emulator.getTexts().getValue("commands.generic.cmd_badge.received"));
+ ServerMessage message = new BubbleAlertComposer(BubbleAlertKeys.RECEIVED_BADGE.key, keys).compose();
+
+ for(Map.Entry set : Emulator.getGameEnvironment().getHabboManager().getOnlineHabbos().entrySet())
+ {
+ Habbo habbo = set.getValue();
+
+ if(habbo.isOnline())
+ {
+ if (habbo.getInventory() != null && habbo.getInventory().getBadgesComponent() != null && !habbo.getInventory().getBadgesComponent().hasBadge(badge))
+ {
+ HabboBadge b = BadgesComponent.createBadge(badge, habbo);
+
+ if (b != null)
+ {
+ habbo.getClient().sendResponse(new AddUserBadgeComposer(b));
+
+ habbo.getClient().sendResponse(message);
+ }
+ }
+ }
+ }
+ }
+ return true;
+ }
+ gameClient.getHabbo().whisper(Emulator.getTexts().getValue("commands.error.cmd_massbadge.no_badge"), RoomChatMessageBubbles.ALERT);
+ return true;
+ }
+}
diff --git a/src/main/java/com/eu/habbo/habbohotel/commands/MassCreditsCommand.java b/src/main/java/com/eu/habbo/habbohotel/commands/MassCreditsCommand.java
new file mode 100644
index 00000000..5dccec52
--- /dev/null
+++ b/src/main/java/com/eu/habbo/habbohotel/commands/MassCreditsCommand.java
@@ -0,0 +1,56 @@
+package com.eu.habbo.habbohotel.commands;
+
+import com.eu.habbo.Emulator;
+import com.eu.habbo.habbohotel.gameclients.GameClient;
+import com.eu.habbo.habbohotel.rooms.RoomChatMessage;
+import com.eu.habbo.habbohotel.rooms.RoomChatMessageBubbles;
+import com.eu.habbo.habbohotel.users.Habbo;
+import com.eu.habbo.messages.outgoing.rooms.users.RoomUserWhisperComposer;
+import com.eu.habbo.messages.outgoing.users.UserCreditsComposer;
+
+import java.util.Collection;
+import java.util.Map;
+
+public class MassCreditsCommand extends Command
+{
+ public MassCreditsCommand()
+ {
+ super("cmd_masscredits", Emulator.getTexts().getValue("commands.keys.cmd_masscredits").split(";"));
+ }
+
+ @Override
+ public boolean handle(GameClient gameClient, String[] params) throws Exception
+ {
+ if(params.length == 2)
+ {
+ int amount;
+
+ try
+ {
+ amount = Integer.valueOf(params[1]);
+ }
+ catch (Exception e)
+ {
+ gameClient.getHabbo().whisper(Emulator.getTexts().getValue("commands.error.cmd_masscredits.invalid_amount"), RoomChatMessageBubbles.ALERT);
+ return true;
+ }
+
+ if(amount != 0)
+ {
+ for(Map.Entry set : Emulator.getGameEnvironment().getHabboManager().getOnlineHabbos().entrySet())
+ {
+ Habbo habbo = set.getValue();
+
+ habbo.giveCredits(amount);
+ habbo.getClient().sendResponse(new UserCreditsComposer(habbo));
+
+ if(habbo.getHabboInfo().getCurrentRoom() != null)
+ habbo.whisper(Emulator.getTexts().getValue("commands.generic.cmd_credits.received").replace("%amount%", amount + ""), RoomChatMessageBubbles.ALERT);
+ }
+ }
+ return true;
+ }
+ gameClient.getHabbo().whisper(Emulator.getTexts().getValue("commands.error.cmd_masscredits.invalid_amount"), RoomChatMessageBubbles.ALERT);
+ return true;
+ }
+}
diff --git a/src/main/java/com/eu/habbo/habbohotel/commands/MassGiftCommand.java b/src/main/java/com/eu/habbo/habbohotel/commands/MassGiftCommand.java
new file mode 100644
index 00000000..4af67b99
--- /dev/null
+++ b/src/main/java/com/eu/habbo/habbohotel/commands/MassGiftCommand.java
@@ -0,0 +1,105 @@
+package com.eu.habbo.habbohotel.commands;
+
+import com.eu.habbo.Emulator;
+import com.eu.habbo.habbohotel.gameclients.GameClient;
+import com.eu.habbo.habbohotel.items.Item;
+import com.eu.habbo.habbohotel.rooms.RoomChatMessage;
+import com.eu.habbo.habbohotel.rooms.RoomChatMessageBubbles;
+import com.eu.habbo.habbohotel.users.Habbo;
+import com.eu.habbo.habbohotel.users.HabboItem;
+import com.eu.habbo.messages.ServerMessage;
+import com.eu.habbo.messages.outgoing.generic.alerts.BubbleAlertComposer;
+import com.eu.habbo.messages.outgoing.generic.alerts.BubbleAlertKeys;
+import com.eu.habbo.messages.outgoing.generic.alerts.WiredRewardAlertComposer;
+import com.eu.habbo.messages.outgoing.inventory.InventoryRefreshComposer;
+import com.eu.habbo.messages.outgoing.rooms.users.RoomUserWhisperComposer;
+import gnu.trove.map.hash.THashMap;
+
+import java.util.Map;
+
+public class MassGiftCommand extends Command
+{
+ public MassGiftCommand()
+ {
+ super("cmd_massgift", Emulator.getTexts().getValue("commands.keys.cmd_massgift").split(";"));
+ }
+
+ @Override
+ public boolean handle(final GameClient gameClient, String[] params) throws Exception
+ {
+ if(params.length >= 2)
+ {
+ try
+ {
+ int itemId = Integer.valueOf(params[1]);
+
+ if(itemId < 0)
+ {
+ gameClient.getHabbo().whisper(Emulator.getTexts().getValue("commands.error.cmd_gift.not_a_number"), RoomChatMessageBubbles.ALERT);
+ return true;
+ }
+
+ final Item baseItem = Emulator.getGameEnvironment().getItemManager().getItem(itemId);
+
+ if(baseItem == null)
+ {
+ gameClient.getHabbo().whisper(Emulator.getTexts().getValue("commands.error.cmd_gift.not_found").replace("%itemid%", itemId + ""), RoomChatMessageBubbles.ALERT);
+ return true;
+ }
+
+ String message = "";
+
+ if(params.length > 2)
+ {
+ for (int i = 2; i < params.length; i++)
+ {
+ message += params[i] + " ";
+ }
+ }
+
+ final String finalMessage = message;
+
+ THashMap keys = new THashMap();
+ keys.put("display", "BUBBLE");
+ keys.put("image", "${image.library.url}notifications/gift.gif");
+ keys.put("message", Emulator.getTexts().getValue("generic.gift.received.anonymous"));
+ ServerMessage giftNotificiationMessage = new BubbleAlertComposer(BubbleAlertKeys.RECEIVED_BADGE.key, keys).compose();
+
+ Emulator.getThreading().run(new Runnable()
+ {
+ @Override
+ public void run()
+ {
+ for(Map.Entry set : Emulator.getGameEnvironment().getHabboManager().getOnlineHabbos().entrySet())
+ {
+ Habbo habbo = set.getValue();
+
+ HabboItem item = Emulator.getGameEnvironment().getItemManager().createItem(0, baseItem, 0, 0, "");
+
+ Item giftItem = Emulator.getGameEnvironment().getItemManager().getItem((Integer) Emulator.getGameEnvironment().getCatalogManager().giftFurnis.values().toArray()[Emulator.getRandom().nextInt(Emulator.getGameEnvironment().getCatalogManager().giftFurnis.size())]);
+
+ String extraData = "1\t" + item.getId();
+ extraData += "\t0\t0\t0\t"+ finalMessage +"\t0\t0";
+
+ Emulator.getGameEnvironment().getItemManager().createGift(habbo.getHabboInfo().getUsername(), giftItem, extraData, 0, 0);
+
+ habbo.getClient().sendResponse(new InventoryRefreshComposer());
+ habbo.getClient().sendResponse(giftNotificiationMessage);
+ }
+ }
+ });
+
+
+ return true;
+ }
+ catch (Exception e)
+ {
+ e.printStackTrace();
+ gameClient.getHabbo().whisper(Emulator.getTexts().getValue("commands.error.cmd_gift.not_a_number"), RoomChatMessageBubbles.ALERT);
+ return true;
+ }
+ }
+
+ return false;
+ }
+}
diff --git a/src/main/java/com/eu/habbo/habbohotel/commands/MassPixelsCommand.java b/src/main/java/com/eu/habbo/habbohotel/commands/MassPixelsCommand.java
new file mode 100644
index 00000000..2c4e67e7
--- /dev/null
+++ b/src/main/java/com/eu/habbo/habbohotel/commands/MassPixelsCommand.java
@@ -0,0 +1,55 @@
+package com.eu.habbo.habbohotel.commands;
+
+import com.eu.habbo.Emulator;
+import com.eu.habbo.habbohotel.gameclients.GameClient;
+import com.eu.habbo.habbohotel.rooms.RoomChatMessage;
+import com.eu.habbo.habbohotel.rooms.RoomChatMessageBubbles;
+import com.eu.habbo.habbohotel.users.Habbo;
+import com.eu.habbo.messages.outgoing.rooms.users.RoomUserWhisperComposer;
+import com.eu.habbo.messages.outgoing.users.UserCurrencyComposer;
+
+import java.util.Collection;
+import java.util.Map;
+
+public class MassPixelsCommand extends Command
+{
+ public MassPixelsCommand()
+ {
+ super("cmd_massduckets", Emulator.getTexts().getValue("commands.keys.cmd_massduckets").split(";"));
+ }
+
+ @Override
+ public boolean handle(GameClient gameClient, String[] params) throws Exception
+ {
+ if(params.length == 2)
+ {
+ int amount;
+
+ try
+ {
+ amount = Integer.valueOf(params[1]);
+ }
+ catch (Exception e)
+ {
+ gameClient.getHabbo().whisper(Emulator.getTexts().getValue("commands.error.cmd_massduckets.invalid_amount"), RoomChatMessageBubbles.ALERT);
+ return true;
+ }
+
+ if(amount != 0)
+ {
+ for(Map.Entry set : Emulator.getGameEnvironment().getHabboManager().getOnlineHabbos().entrySet())
+ {
+ Habbo habbo = set.getValue();
+
+ habbo.givePixels(amount);
+
+ if(habbo.getHabboInfo().getCurrentRoom() != null)
+ habbo.whisper(Emulator.getTexts().getValue("commands.generic.cmd_duckets.received").replace("%amount%", amount + ""), RoomChatMessageBubbles.ALERT);
+ }
+ }
+ return true;
+ }
+ gameClient.getHabbo().whisper(Emulator.getTexts().getValue("commands.error.cmd_massduckets.invalid_amount"), RoomChatMessageBubbles.ALERT);
+ return true;
+ }
+}
diff --git a/src/main/java/com/eu/habbo/habbohotel/commands/MassPointsCommand.java b/src/main/java/com/eu/habbo/habbohotel/commands/MassPointsCommand.java
new file mode 100644
index 00000000..d2a111a5
--- /dev/null
+++ b/src/main/java/com/eu/habbo/habbohotel/commands/MassPointsCommand.java
@@ -0,0 +1,96 @@
+package com.eu.habbo.habbohotel.commands;
+
+import com.eu.habbo.Emulator;
+import com.eu.habbo.habbohotel.gameclients.GameClient;
+import com.eu.habbo.habbohotel.rooms.RoomChatMessage;
+import com.eu.habbo.habbohotel.rooms.RoomChatMessageBubbles;
+import com.eu.habbo.habbohotel.users.Habbo;
+import com.eu.habbo.messages.outgoing.generic.alerts.GenericAlertComposer;
+import com.eu.habbo.messages.outgoing.rooms.users.RoomUserWhisperComposer;
+import com.eu.habbo.messages.outgoing.users.UserCurrencyComposer;
+import com.eu.habbo.messages.outgoing.users.UserPointsComposer;
+
+import java.util.Collection;
+import java.util.Map;
+
+public class MassPointsCommand extends Command
+{
+ public MassPointsCommand()
+ {
+ super("cmd_masspoints", Emulator.getTexts().getValue("commands.keys.cmd_masspoints").split(";"));
+ }
+
+ @Override
+ public boolean handle(GameClient gameClient, String[] params) throws Exception
+ {
+ int type = Emulator.getConfig().getInt("seasonal.primary.type");
+ String amountString = "";
+ if(params.length == 3)
+ {
+ try
+ {
+ type = Integer.valueOf(params[1]);
+ } catch (Exception e)
+ {
+ gameClient.getHabbo().whisper(Emulator.getTexts().getValue("commands.error.cmd_masspoints.invalid_type").replace("%types%", Emulator.getConfig().getValue("seasonal.types").replace(";", ", ")), RoomChatMessageBubbles.ALERT);
+ return true;
+ }
+
+ amountString = params[2];
+ }
+ else if(params.length == 2)
+ {
+ amountString = params[1];
+ }
+ else
+ {
+ gameClient.getHabbo().whisper(Emulator.getTexts().getValue("commands.error.cmd_masspoints.invalid_amount"), RoomChatMessageBubbles.ALERT);
+ return true;
+ }
+
+ boolean found = false;
+ for(String s : Emulator.getConfig().getValue("seasonal.types").split(";"))
+ {
+ if(s.equalsIgnoreCase(type + ""))
+ {
+ found = true;
+ break;
+ }
+ }
+
+ if(!found)
+ {
+ gameClient.getHabbo().whisper(Emulator.getTexts().getValue("commands.error.cmd_masspoints.invalid_type").replace("%types%", Emulator.getConfig().getValue("seasonal.types").replace(";", ", ")), RoomChatMessageBubbles.ALERT);
+ return true;
+ }
+
+ int amount;
+
+ try
+ {
+ amount = Integer.valueOf(amountString);
+ }
+ catch (Exception e)
+ {
+ gameClient.getHabbo().whisper(Emulator.getTexts().getValue("commands.error.cmd_masspoints.invalid_amount"), RoomChatMessageBubbles.ALERT);
+ return true;
+ }
+
+ if(amount != 0)
+ {
+ String message = Emulator.getTexts().getValue("commands.generic.cmd_points.received").replace("%amount%", amount + "").replace("%type%", Emulator.getTexts().getValue("seasonal.name." + type));
+
+ for(Map.Entry set : Emulator.getGameEnvironment().getHabboManager().getOnlineHabbos().entrySet())
+ {
+ Habbo habbo = set.getValue();
+ habbo.givePoints(type, amount);
+
+ if(habbo.getHabboInfo().getCurrentRoom() != null)
+ habbo.whisper(message, RoomChatMessageBubbles.ALERT);
+ else
+ habbo.getClient().sendResponse(new GenericAlertComposer(message));
+ }
+ }
+ return true;
+ }
+}
diff --git a/src/main/java/com/eu/habbo/habbohotel/commands/MimicCommand.java b/src/main/java/com/eu/habbo/habbohotel/commands/MimicCommand.java
new file mode 100644
index 00000000..cc8a4a70
--- /dev/null
+++ b/src/main/java/com/eu/habbo/habbohotel/commands/MimicCommand.java
@@ -0,0 +1,59 @@
+package com.eu.habbo.habbohotel.commands;
+
+import com.eu.habbo.Emulator;
+import com.eu.habbo.habbohotel.gameclients.GameClient;
+import com.eu.habbo.habbohotel.rooms.RoomChatMessage;
+import com.eu.habbo.habbohotel.rooms.RoomChatMessageBubbles;
+import com.eu.habbo.habbohotel.users.Habbo;
+import com.eu.habbo.habbohotel.users.HabboGender;
+import com.eu.habbo.messages.outgoing.rooms.users.RoomUserWhisperComposer;
+import com.eu.habbo.messages.outgoing.users.UserDataComposer;
+import com.eu.habbo.messages.outgoing.rooms.users.RoomUserDataComposer;
+
+public class MimicCommand extends Command
+{
+ public MimicCommand()
+ {
+ super("cmd_mimic", Emulator.getTexts().getValue("commands.keys.cmd_mimic").split(";"));
+ }
+
+ @Override
+ public boolean handle(GameClient gameClient, String[] params) throws Exception
+ {
+ if(params.length == 2)
+ {
+ Habbo habbo = gameClient.getHabbo().getHabboInfo().getCurrentRoom().getHabbo(params[1]);
+
+ if (habbo == null)
+ {
+ gameClient.getHabbo().whisper(Emulator.getTexts().getValue("commands.error.cmd_mimic.not_found").replace("%user%", ""), RoomChatMessageBubbles.ALERT);
+ return true;
+ }
+
+ if(habbo == gameClient.getHabbo())
+ {
+ gameClient.getHabbo().whisper(Emulator.getTexts().getValue("commands.error.cmd_mimic.not_self"), RoomChatMessageBubbles.ALERT);
+ return true;
+ }
+ else if(habbo.hasPermission("acc_not_mimiced") && !gameClient.getHabbo().hasPermission("acc_not_mimiced"))
+ {
+ gameClient.getHabbo().whisper(Emulator.getTexts().getValue("commands.error.cmd_mimic.blocked").replace("%user%", params[1]).replace("%gender_name%", (habbo.getHabboInfo().getGender().equals(HabboGender.M) ? Emulator.getTexts().getValue("gender.him") : Emulator.getTexts().getValue("gender.her"))), RoomChatMessageBubbles.ALERT);
+ return true;
+ }
+ else
+ {
+ gameClient.getHabbo().getHabboInfo().setLook(habbo.getHabboInfo().getLook());
+ gameClient.getHabbo().getHabboInfo().setGender(habbo.getHabboInfo().getGender());
+ gameClient.sendResponse(new UserDataComposer(gameClient.getHabbo()));
+ gameClient.getHabbo().getHabboInfo().getCurrentRoom().sendComposer(new RoomUserDataComposer(gameClient.getHabbo()).compose());
+ gameClient.getHabbo().whisper(Emulator.getTexts().getValue("commands.succes.cmd_mimic.copied").replace("%user%", params[1]).replace("%gender_name%", (habbo.getHabboInfo().getGender().equals(HabboGender.M) ? Emulator.getTexts().getValue("gender.him") : Emulator.getTexts().getValue("gender.her"))), RoomChatMessageBubbles.ALERT);
+ return true;
+ }
+ }
+ else
+ {
+ gameClient.getHabbo().whisper(Emulator.getTexts().getValue("commands.error.cmd_mimic.not_found").replace("%user%", ""), RoomChatMessageBubbles.ALERT);
+ return true;
+ }
+ }
+}
diff --git a/src/main/java/com/eu/habbo/habbohotel/commands/MoonwalkCommand.java b/src/main/java/com/eu/habbo/habbohotel/commands/MoonwalkCommand.java
new file mode 100644
index 00000000..76290657
--- /dev/null
+++ b/src/main/java/com/eu/habbo/habbohotel/commands/MoonwalkCommand.java
@@ -0,0 +1,35 @@
+package com.eu.habbo.habbohotel.commands;
+
+import com.eu.habbo.Emulator;
+import com.eu.habbo.habbohotel.gameclients.GameClient;
+import com.eu.habbo.messages.outgoing.rooms.users.RoomUserEffectComposer;
+
+public class MoonwalkCommand extends Command
+{
+ public MoonwalkCommand()
+ {
+ super("cmd_moonwalk", Emulator.getTexts().getValue("commands.keys.cmd_moonwalk").split(";"));
+ }
+
+ @Override
+ public boolean handle(GameClient gameClient, String[] params) throws Exception
+ {
+ if(gameClient.getHabbo().getHabboInfo().getCurrentRoom() != null && gameClient.getHabbo().getHabboStats().hasActiveClub())
+ {
+ if (gameClient.getHabbo().getRoomUnit().getEffectId() != 136)
+ {
+ gameClient.getHabbo().getRoomUnit().setEffectId(136);
+ gameClient.getHabbo().getHabboInfo().getCurrentRoom().sendComposer(new RoomUserEffectComposer(gameClient.getHabbo().getRoomUnit()).compose());
+ }
+ else
+ {
+ gameClient.getHabbo().getRoomUnit().setEffectId(0);
+ gameClient.getHabbo().getHabboInfo().getCurrentRoom().sendComposer(new RoomUserEffectComposer(gameClient.getHabbo().getRoomUnit()).compose());
+ }
+
+ return true;
+ }
+
+ return false;
+ }
+}
diff --git a/src/main/java/com/eu/habbo/habbohotel/commands/MultiCommand.java b/src/main/java/com/eu/habbo/habbohotel/commands/MultiCommand.java
new file mode 100644
index 00000000..bcffa8d5
--- /dev/null
+++ b/src/main/java/com/eu/habbo/habbohotel/commands/MultiCommand.java
@@ -0,0 +1,20 @@
+package com.eu.habbo.habbohotel.commands;
+
+import com.eu.habbo.Emulator;
+import com.eu.habbo.habbohotel.gameclients.GameClient;
+import com.eu.habbo.messages.outgoing.rooms.items.PostItStickyPoleOpenComposer;
+
+public class MultiCommand extends Command
+{
+ public MultiCommand()
+ {
+ super("cmd_multi", Emulator.getTexts().getValue("commands.keys.cmd_multi").split(";"));
+ }
+
+ @Override
+ public boolean handle(GameClient gameClient, String[] params) throws Exception
+ {
+ gameClient.sendResponse(new PostItStickyPoleOpenComposer(null));
+ return true;
+ }
+}
diff --git a/src/main/java/com/eu/habbo/habbohotel/commands/MuteBotsCommand.java b/src/main/java/com/eu/habbo/habbohotel/commands/MuteBotsCommand.java
new file mode 100644
index 00000000..8edc07ba
--- /dev/null
+++ b/src/main/java/com/eu/habbo/habbohotel/commands/MuteBotsCommand.java
@@ -0,0 +1,23 @@
+package com.eu.habbo.habbohotel.commands;
+
+import com.eu.habbo.Emulator;
+import com.eu.habbo.habbohotel.gameclients.GameClient;
+import com.eu.habbo.habbohotel.rooms.RoomChatMessage;
+import com.eu.habbo.habbohotel.rooms.RoomChatMessageBubbles;
+import com.eu.habbo.messages.outgoing.rooms.users.RoomUserWhisperComposer;
+
+public class MuteBotsCommand extends Command
+{
+ public MuteBotsCommand()
+ {
+ super(null, Emulator.getTexts().getValue("commands.keys.cmd_mute_bots").split(";"));
+ }
+
+ @Override
+ public boolean handle(GameClient gameClient, String[] params) throws Exception
+ {
+ gameClient.getHabbo().getHabboStats().ignoreBots = !gameClient.getHabbo().getHabboStats().ignoreBots;
+ gameClient.getHabbo().whisper(Emulator.getTexts().getValue("commands.succes.cmd_mute_bots." +(gameClient.getHabbo().getHabboStats().ignoreBots ? "ignored" : "unignored")), RoomChatMessageBubbles.ALERT);
+ return true;
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/com/eu/habbo/habbohotel/commands/MuteCommand.java b/src/main/java/com/eu/habbo/habbohotel/commands/MuteCommand.java
new file mode 100644
index 00000000..f6fcefc2
--- /dev/null
+++ b/src/main/java/com/eu/habbo/habbohotel/commands/MuteCommand.java
@@ -0,0 +1,72 @@
+package com.eu.habbo.habbohotel.commands;
+
+import com.eu.habbo.Emulator;
+import com.eu.habbo.habbohotel.gameclients.GameClient;
+import com.eu.habbo.habbohotel.rooms.RoomChatMessage;
+import com.eu.habbo.habbohotel.rooms.RoomChatMessageBubbles;
+import com.eu.habbo.habbohotel.users.Habbo;
+import com.eu.habbo.messages.outgoing.rooms.users.RoomUserIgnoredComposer;
+import com.eu.habbo.messages.outgoing.rooms.users.RoomUserWhisperComposer;
+
+public class MuteCommand extends Command
+{
+ public MuteCommand()
+ {
+ super("cmd_mute", Emulator.getTexts().getValue("commands.keys.cmd_mute").split(";"));
+ }
+
+ @Override
+ public boolean handle(GameClient gameClient, String[] params) throws Exception
+ {
+ if(params.length == 1)
+ {
+ gameClient.getHabbo().whisper(Emulator.getTexts().getValue("commands.error.cmd_mute.not_specified"), RoomChatMessageBubbles.ALERT);
+ return true;
+ }
+
+ Habbo habbo = Emulator.getGameEnvironment().getHabboManager().getHabbo(params[1]);
+
+ if(habbo == null)
+ {
+ gameClient.getHabbo().whisper(Emulator.getTexts().getValue("commands.error.cmd_mute.not_found").replace("%user%", params[1]), RoomChatMessageBubbles.ALERT);
+ return true;
+ }
+ else
+ {
+ if(habbo == gameClient.getHabbo())
+ {
+ gameClient.getHabbo().whisper(Emulator.getTexts().getValue("commands.error.cmd_mute.self"), RoomChatMessageBubbles.ALERT);
+ return true;
+ }
+
+ int duration = Integer.MAX_VALUE;
+
+ if(params.length == 3)
+ {
+ try
+ {
+ duration = Integer.valueOf(params[2]);
+
+ if(duration <= 0)
+ throw new Exception("");
+ }
+ catch (Exception e)
+ {
+ gameClient.getHabbo().whisper(Emulator.getTexts().getValue("commands.error.cmd_mute.time"), RoomChatMessageBubbles.ALERT);
+ return true;
+ }
+ }
+
+ habbo.mute(duration);
+
+ if(habbo.getHabboInfo().getCurrentRoom() != null)
+ {
+ habbo.getHabboInfo().getCurrentRoom().sendComposer(new RoomUserIgnoredComposer(habbo, RoomUserIgnoredComposer.MUTED).compose()); //: RoomUserIgnoredComposer.UNIGNORED
+ }
+
+ gameClient.getHabbo().whisper(Emulator.getTexts().getValue("commands.succes.cmd_mute.muted").replace("%user%", params[1]), RoomChatMessageBubbles.ALERT);
+ }
+
+ return true;
+ }
+}
diff --git a/src/main/java/com/eu/habbo/habbohotel/commands/MutePetsCommand.java b/src/main/java/com/eu/habbo/habbohotel/commands/MutePetsCommand.java
new file mode 100644
index 00000000..f8a49e02
--- /dev/null
+++ b/src/main/java/com/eu/habbo/habbohotel/commands/MutePetsCommand.java
@@ -0,0 +1,23 @@
+package com.eu.habbo.habbohotel.commands;
+
+import com.eu.habbo.Emulator;
+import com.eu.habbo.habbohotel.gameclients.GameClient;
+import com.eu.habbo.habbohotel.rooms.RoomChatMessage;
+import com.eu.habbo.habbohotel.rooms.RoomChatMessageBubbles;
+import com.eu.habbo.messages.outgoing.rooms.users.RoomUserWhisperComposer;
+
+public class MutePetsCommand extends Command
+{
+ public MutePetsCommand()
+ {
+ super(null, Emulator.getTexts().getValue("commands.keys.cmd_mute_pets").split(";"));
+ }
+
+ @Override
+ public boolean handle(GameClient gameClient, String[] params) throws Exception
+ {
+ gameClient.getHabbo().getHabboStats().ignorePets = !gameClient.getHabbo().getHabboStats().ignorePets;
+ gameClient.getHabbo().whisper(Emulator.getTexts().getValue("commands.succes.cmd_mute_pets." +(gameClient.getHabbo().getHabboStats().ignorePets ? "ignored" : "unignored")), RoomChatMessageBubbles.ALERT);
+ return true;
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/com/eu/habbo/habbohotel/commands/PetInfoCommand.java b/src/main/java/com/eu/habbo/habbohotel/commands/PetInfoCommand.java
new file mode 100644
index 00000000..e8db7061
--- /dev/null
+++ b/src/main/java/com/eu/habbo/habbohotel/commands/PetInfoCommand.java
@@ -0,0 +1,69 @@
+package com.eu.habbo.habbohotel.commands;
+
+import com.eu.habbo.Emulator;
+import com.eu.habbo.habbohotel.gameclients.GameClient;
+import com.eu.habbo.habbohotel.pets.AbstractPet;
+import com.eu.habbo.habbohotel.pets.Pet;
+import com.eu.habbo.habbohotel.pets.PetManager;
+import com.eu.habbo.habbohotel.rooms.RoomChatMessage;
+import com.eu.habbo.habbohotel.rooms.RoomChatMessageBubbles;
+import com.eu.habbo.messages.outgoing.generic.alerts.GenericAlertComposer;
+import com.eu.habbo.messages.outgoing.rooms.users.RoomUserWhisperComposer;
+import gnu.trove.procedure.TIntObjectProcedure;
+
+public class PetInfoCommand extends Command
+{
+ public PetInfoCommand()
+ {
+ super("cmd_pet_info", Emulator.getTexts().getValue("commands.keys.cmd_pet_info").split(";"));
+ }
+
+ @Override
+ public boolean handle(GameClient gameClient, String[] params) throws Exception
+ {
+ if(params.length > 1)
+ {
+ if(gameClient.getHabbo().getHabboInfo().getCurrentRoom() == null)
+ return false;
+
+ String name = params[1];
+
+ gameClient.getHabbo().getHabboInfo().getCurrentRoom().getCurrentPets().forEachEntry(new TIntObjectProcedure()
+ {
+ @Override
+ public boolean execute(int a, AbstractPet pet)
+ {
+ if(pet.getName().equalsIgnoreCase(name))
+ {
+ if(!(pet instanceof Pet))
+ return true;
+
+ gameClient.sendResponse(new GenericAlertComposer("" +
+ Emulator.getTexts().getValue("commands.generic.cmd_pet_info.title") + ": " + pet.getName() + "\r\n" +
+ Emulator.getTexts().getValue("generic.pet.id") + ": " + pet.getId() + "\r" +
+ Emulator.getTexts().getValue("generic.pet.name") + ": " + pet.getName() + "\r" +
+ Emulator.getTexts().getValue("generic.pet.age") + ": " + pet.daysAlive() + " " + Emulator.getTexts().getValue("generic.pet.days.alive") + "\r" +
+ Emulator.getTexts().getValue("generic.pet.level") + ": " + pet.getLevel() + "\r" +
+ "\r" +
+ Emulator.getTexts().getValue("commands.generic.cmd_pet_info.stats") + "\r\n" +
+ Emulator.getTexts().getValue("generic.pet.scratches") + ": " + pet.getRespect() + "\r" +
+ Emulator.getTexts().getValue("generic.pet.energy") + ": " + pet.getEnergy() + "/" + PetManager.maxEnergy(pet.getLevel()) + "\r" +
+ Emulator.getTexts().getValue("generic.pet.happyness") + ": " + pet.getHappyness() + "\r" +
+ Emulator.getTexts().getValue("generic.pet.level.thirst") + ": " + ((Pet) pet).levelThirst + "\r" +
+ Emulator.getTexts().getValue("generic.pet.level.hunger") + ": " + ((Pet) pet).levelHunger + "\r" +
+ Emulator.getTexts().getValue("generic.pet.current_action") + ": " + (((Pet) pet).getTask() == null ? Emulator.getTexts().getValue("generic.nothing") : ((Pet) pet).getTask().name()) + "\r" +
+ Emulator.getTexts().getValue("generic.can.walk") + ": " + (pet.getRoomUnit().canWalk() ? Emulator.getTexts().getValue("generic.yes") : Emulator.getTexts().getValue("generic.no")) + ""
+ ));
+ }
+
+ return true;
+ }
+ });
+ }
+ else
+ {
+ gameClient.getHabbo().whisper(Emulator.getTexts().getValue("commands.error.cmd_pet_info.pet_not_found"), RoomChatMessageBubbles.ALERT);
+ }
+ return true;
+ }
+}
diff --git a/src/main/java/com/eu/habbo/habbohotel/commands/PickallCommand.java b/src/main/java/com/eu/habbo/habbohotel/commands/PickallCommand.java
new file mode 100644
index 00000000..38073315
--- /dev/null
+++ b/src/main/java/com/eu/habbo/habbohotel/commands/PickallCommand.java
@@ -0,0 +1,32 @@
+package com.eu.habbo.habbohotel.commands;
+
+import com.eu.habbo.Emulator;
+import com.eu.habbo.habbohotel.gameclients.GameClient;
+import com.eu.habbo.habbohotel.rooms.Room;
+
+public class PickallCommand extends Command
+{
+ public PickallCommand()
+ {
+ super("cmd_pickall", Emulator.getTexts().getValue("commands.keys.cmd_pickall").split(";"));
+ }
+
+ @Override
+ public boolean handle(GameClient gameClient, String[] params) throws Exception
+ {
+ Room room = gameClient.getHabbo().getHabboInfo().getCurrentRoom();
+
+ if(room != null)
+ {
+ if(room.isOwner(gameClient.getHabbo()))
+ {
+ room.ejectAll();
+ return true;
+ }
+
+ room.ejectUserFurni(gameClient.getHabbo().getHabboInfo().getId());
+ }
+
+ return true;
+ }
+}
diff --git a/src/main/java/com/eu/habbo/habbohotel/commands/PixelCommand.java b/src/main/java/com/eu/habbo/habbohotel/commands/PixelCommand.java
new file mode 100644
index 00000000..116c0427
--- /dev/null
+++ b/src/main/java/com/eu/habbo/habbohotel/commands/PixelCommand.java
@@ -0,0 +1,61 @@
+package com.eu.habbo.habbohotel.commands;
+
+import com.eu.habbo.Emulator;
+import com.eu.habbo.habbohotel.gameclients.GameClient;
+import com.eu.habbo.habbohotel.rooms.RoomChatMessage;
+import com.eu.habbo.habbohotel.rooms.RoomChatMessageBubbles;
+import com.eu.habbo.habbohotel.users.Habbo;
+import com.eu.habbo.messages.outgoing.generic.alerts.GenericAlertComposer;
+import com.eu.habbo.messages.outgoing.rooms.users.RoomUserWhisperComposer;
+import com.eu.habbo.messages.outgoing.users.UserCurrencyComposer;
+
+public class PixelCommand extends Command
+{
+ public PixelCommand()
+ {
+ super("cmd_duckets", Emulator.getTexts().getValue("commands.keys.cmd_duckets").split(";"));
+ }
+
+ @Override
+ public boolean handle(GameClient gameClient, String[] params) throws Exception
+ {
+ if(params.length == 3)
+ {
+ Habbo habbo = Emulator.getGameServer().getGameClientManager().getHabbo(params[1]);
+
+ if(habbo != null)
+ {
+ try
+ {
+ if (Integer.parseInt(params[2]) != 0)
+ {
+ habbo.givePixels(Integer.parseInt(params[2]));
+ if(habbo.getHabboInfo().getCurrentRoom() != null)
+ habbo.whisper(Emulator.getTexts().getValue("commands.generic.cmd_duckets.received").replace("%amount%", Integer.valueOf(params[2]) + ""), RoomChatMessageBubbles.ALERT);
+ else
+ habbo.getClient().sendResponse(new GenericAlertComposer(Emulator.getTexts().getValue("commands.generic.cmd_duckets.received").replace("%amount%", Integer.valueOf(params[2]) + "")));
+
+ gameClient.getHabbo().whisper(Emulator.getTexts().getValue("commands.succes.cmd_duckets.send").replace("%amount%", Integer.valueOf(params[2]) + "").replace("%user%", params[1]), RoomChatMessageBubbles.ALERT);
+
+ } else
+ {
+ gameClient.getHabbo().whisper(Emulator.getTexts().getValue("commands.error.cmd_duckets.invalid_amount"), RoomChatMessageBubbles.ALERT);
+ }
+ }
+ catch (NumberFormatException e)
+ {
+ gameClient.getHabbo().whisper(Emulator.getTexts().getValue("commands.error.cmd_duckets.invalid_amount"), RoomChatMessageBubbles.ALERT);
+ }
+ }
+ else
+ {
+ gameClient.getHabbo().whisper(Emulator.getTexts().getValue("commands.error.cmd_duckets.user_offline").replace("%user%", params[1]), RoomChatMessageBubbles.ALERT);
+ }
+ }
+ else
+ {
+ gameClient.getHabbo().whisper(Emulator.getTexts().getValue("commands.error.cmd_duckets.invalid_amount"), RoomChatMessageBubbles.ALERT);
+ }
+ return true;
+ }
+}
diff --git a/src/main/java/com/eu/habbo/habbohotel/commands/PluginsCommand.java b/src/main/java/com/eu/habbo/habbohotel/commands/PluginsCommand.java
new file mode 100644
index 00000000..9f068eed
--- /dev/null
+++ b/src/main/java/com/eu/habbo/habbohotel/commands/PluginsCommand.java
@@ -0,0 +1,29 @@
+package com.eu.habbo.habbohotel.commands;
+
+import com.eu.habbo.Emulator;
+import com.eu.habbo.habbohotel.gameclients.GameClient;
+import com.eu.habbo.messages.outgoing.generic.alerts.GenericAlertComposer;
+import com.eu.habbo.plugin.HabboPlugin;
+
+public class PluginsCommand extends Command
+{
+ public PluginsCommand()
+ {
+ super("cmd_plugins", Emulator.getTexts().getValue("commands.keys.cmd_plugins").split(";"));
+ }
+
+ @Override
+ public boolean handle(GameClient gameClient, String[] params) throws Exception
+ {
+ String message = "Plugins (" + Emulator.getPluginManager().getPlugins().size() + ")\r";
+
+ for (HabboPlugin plugin : Emulator.getPluginManager().getPlugins())
+ {
+ message += "\r" + plugin.configuration.name + " By " + plugin.configuration.author;
+ }
+
+ gameClient.sendResponse(new GenericAlertComposer(message));
+
+ return true;
+ }
+}
diff --git a/src/main/java/com/eu/habbo/habbohotel/commands/PointsCommand.java b/src/main/java/com/eu/habbo/habbohotel/commands/PointsCommand.java
new file mode 100644
index 00000000..febd3908
--- /dev/null
+++ b/src/main/java/com/eu/habbo/habbohotel/commands/PointsCommand.java
@@ -0,0 +1,80 @@
+package com.eu.habbo.habbohotel.commands;
+
+import com.eu.habbo.Emulator;
+import com.eu.habbo.habbohotel.gameclients.GameClient;
+import com.eu.habbo.habbohotel.rooms.RoomChatMessage;
+import com.eu.habbo.habbohotel.rooms.RoomChatMessageBubbles;
+import com.eu.habbo.habbohotel.users.Habbo;
+import com.eu.habbo.messages.outgoing.generic.alerts.GenericAlertComposer;
+import com.eu.habbo.messages.outgoing.rooms.users.RoomUserWhisperComposer;
+import com.eu.habbo.messages.outgoing.users.UserPointsComposer;
+
+public class PointsCommand extends Command
+{
+ public PointsCommand()
+ {
+ super("cmd_points", Emulator.getTexts().getValue("commands.keys.cmd_points").split(";"));
+ }
+
+ @Override
+ public boolean handle(GameClient gameClient, String[] params) throws Exception
+ {
+ if(params.length >= 3)
+ {
+ Habbo habbo = Emulator.getGameServer().getGameClientManager().getHabbo(params[1]);
+
+ if(habbo != null)
+ {
+ try
+ {
+ int type = Emulator.getConfig().getInt("seasonal.primary.type");
+
+ if(params.length == 4)
+ {
+ try
+ {
+ type = Integer.valueOf(params[3]);
+ }
+ catch (Exception e)
+ {
+ gameClient.getHabbo().whisper(Emulator.getTexts().getValue("commands.error.cmd_points.invalid_type").replace("%types%", Emulator.getConfig().getValue("seasonal.types").replace(";", ", ")), RoomChatMessageBubbles.ALERT);
+ return true;
+ }
+ }
+
+ int amount = Integer.valueOf(params[2]);
+ if (amount != 0)
+ {
+ habbo.givePoints(type, amount);
+
+ if(habbo.getHabboInfo().getCurrentRoom() != null)
+ habbo.whisper(Emulator.getTexts().getValue("commands.generic.cmd_points.received").replace("%amount%", amount + "").replace("%type%", Emulator.getTexts().getValue("seasonal.name." + type)), RoomChatMessageBubbles.ALERT);
+ else
+ habbo.getClient().sendResponse(new GenericAlertComposer(Emulator.getTexts().getValue("commands.generic.cmd_points.received").replace("%amount%", amount + "").replace("%type%", Emulator.getTexts().getValue("seasonal.name." + type))));
+
+ habbo.getClient().sendResponse(new UserPointsComposer(habbo.getHabboInfo().getCurrencyAmount(type), amount, type));
+
+ gameClient.getHabbo().whisper(Emulator.getTexts().getValue("commands.succes.cmd_points.send").replace("%amount%", amount + "").replace("%user%", params[1]).replace("%type%", Emulator.getTexts().getValue("seasonal.name." + type)), RoomChatMessageBubbles.ALERT);
+
+ } else
+ {
+ gameClient.getHabbo().whisper(Emulator.getTexts().getValue("commands.error.cmd_points.invalid_amount"), RoomChatMessageBubbles.ALERT);
+ }
+ }
+ catch (NumberFormatException e)
+ {
+ gameClient.getHabbo().whisper(Emulator.getTexts().getValue("commands.error.cmd_points.invalid_amount"), RoomChatMessageBubbles.ALERT);
+ }
+ }
+ else
+ {
+ gameClient.getHabbo().whisper(Emulator.getTexts().getValue("commands.error.cmd_points.user_offline").replace("%user%", params[1]), RoomChatMessageBubbles.ALERT);
+ }
+ }
+ else
+ {
+ gameClient.getHabbo().whisper(Emulator.getTexts().getValue("commands.error.cmd_points.invalid_amount"), RoomChatMessageBubbles.ALERT);
+ }
+ return true;
+ }
+}
diff --git a/src/main/java/com/eu/habbo/habbohotel/commands/PullCommand.java b/src/main/java/com/eu/habbo/habbohotel/commands/PullCommand.java
new file mode 100644
index 00000000..7c11dd17
--- /dev/null
+++ b/src/main/java/com/eu/habbo/habbohotel/commands/PullCommand.java
@@ -0,0 +1,68 @@
+package com.eu.habbo.habbohotel.commands;
+
+import com.eu.habbo.Emulator;
+import com.eu.habbo.habbohotel.gameclients.GameClient;
+import com.eu.habbo.habbohotel.rooms.RoomChatMessage;
+import com.eu.habbo.habbohotel.rooms.RoomChatMessageBubbles;
+import com.eu.habbo.habbohotel.rooms.RoomTile;
+import com.eu.habbo.habbohotel.users.Habbo;
+import com.eu.habbo.habbohotel.users.HabboGender;
+import com.eu.habbo.messages.outgoing.rooms.users.RoomUserTalkComposer;
+import com.eu.habbo.messages.outgoing.rooms.users.RoomUserWhisperComposer;
+
+public class PullCommand extends Command
+{
+ public PullCommand()
+ {
+ super("cmd_pull", Emulator.getTexts().getValue("commands.keys.cmd_pull").split(";"));
+ }
+
+ @Override
+ public boolean handle(GameClient gameClient, String[] params) throws Exception
+ {
+ if(params.length == 2)
+ {
+ Habbo habbo = gameClient.getHabbo().getHabboInfo().getCurrentRoom().getHabbo(params[1]);
+
+ if(habbo == null)
+ {
+ gameClient.getHabbo().whisper(Emulator.getTexts().getValue("commands.error.cmd_pull.not_found").replace("%user%", params[1]), RoomChatMessageBubbles.ALERT);
+ return true;
+ }
+ else if(habbo == gameClient.getHabbo())
+ {
+ gameClient.getHabbo().whisper(Emulator.getTexts().getValue("commands.error.cmd_pull.pull_self"), RoomChatMessageBubbles.ALERT);
+ return true;
+ }
+ else
+ {
+ int distanceX = habbo.getRoomUnit().getX() - gameClient.getHabbo().getRoomUnit().getX();
+ int distanceY = habbo.getRoomUnit().getY() - gameClient.getHabbo().getRoomUnit().getY();
+
+ if(distanceX < -2 || distanceX > 2 || distanceY < -2 || distanceY > 2)
+ {
+ gameClient.getHabbo().whisper(Emulator.getTexts().getValue("commands.error.cmd_pull.cant_reach").replace("%user%", params[1]), RoomChatMessageBubbles.ALERT);
+ return true;
+ }
+ else
+ {
+ RoomTile tile = gameClient.getHabbo().getHabboInfo().getCurrentRoom().getLayout().getTileInFront(gameClient.getHabbo().getRoomUnit().getCurrentLocation(), gameClient.getHabbo().getRoomUnit().getBodyRotation().getValue());
+
+ if (tile != null && tile.isWalkable())
+ {
+ if (gameClient.getHabbo().getHabboInfo().getCurrentRoom().getLayout().getDoorTile() == tile)
+ {
+ gameClient.getHabbo().whisper(Emulator.getTexts().getValue("commands.error.cmd_pull.invalid").replace("%username%", params[1]));
+ return true;
+ }
+ habbo.getRoomUnit().setGoalLocation(tile);
+ gameClient.getHabbo().getHabboInfo().getCurrentRoom().sendComposer(new RoomUserTalkComposer(new RoomChatMessage(Emulator.getTexts().getValue("commands.succes.cmd_pull.pull").replace("%user%", params[1]).replace("%gender_name%", (gameClient.getHabbo().getHabboInfo().getGender().equals(HabboGender.M) ? Emulator.getTexts().getValue("gender.him") : Emulator.getTexts().getValue("gender.her"))), gameClient.getHabbo(), gameClient.getHabbo(), RoomChatMessageBubbles.NORMAL)).compose());
+ }
+ }
+ }
+ return true;
+ }
+
+ return true;
+ }
+}
diff --git a/src/main/java/com/eu/habbo/habbohotel/commands/PushCommand.java b/src/main/java/com/eu/habbo/habbohotel/commands/PushCommand.java
new file mode 100644
index 00000000..b6a1f9e5
--- /dev/null
+++ b/src/main/java/com/eu/habbo/habbohotel/commands/PushCommand.java
@@ -0,0 +1,70 @@
+package com.eu.habbo.habbohotel.commands;
+
+import com.eu.habbo.Emulator;
+import com.eu.habbo.habbohotel.gameclients.GameClient;
+import com.eu.habbo.habbohotel.rooms.RoomChatMessage;
+import com.eu.habbo.habbohotel.rooms.RoomChatMessageBubbles;
+import com.eu.habbo.habbohotel.rooms.RoomTile;
+import com.eu.habbo.habbohotel.users.Habbo;
+import com.eu.habbo.habbohotel.users.HabboGender;
+import com.eu.habbo.messages.outgoing.rooms.users.RoomUserTalkComposer;
+import com.eu.habbo.messages.outgoing.rooms.users.RoomUserWhisperComposer;
+
+public class PushCommand extends Command
+{
+ public PushCommand()
+ {
+ super("cmd_push", Emulator.getTexts().getValue("commands.keys.cmd_push").split(";"));
+ }
+
+ @Override
+ public boolean handle(GameClient gameClient, String[] params) throws Exception
+ {
+ if(params.length == 2)
+ {
+ Habbo habbo = gameClient.getHabbo().getHabboInfo().getCurrentRoom().getHabbo(params[1]);
+
+ if(habbo == null)
+ {
+ gameClient.getHabbo().whisper(Emulator.getTexts().getValue("commands.error.cmd_push.not_found").replace("%user%", params[1]), RoomChatMessageBubbles.ALERT);
+ return true;
+ }
+ else if(habbo == gameClient.getHabbo())
+ {
+ gameClient.getHabbo().whisper(Emulator.getTexts().getValue("commands.error.cmd_push.push_self"), RoomChatMessageBubbles.ALERT);
+ return true;
+ }
+ else
+ {
+ RoomTile tFront = gameClient.getHabbo().getHabboInfo().getCurrentRoom().getLayout().getTileInFront(gameClient.getHabbo().getRoomUnit().getCurrentLocation(), gameClient.getHabbo().getRoomUnit().getBodyRotation().getValue());
+
+ if (tFront != null && tFront.isWalkable())
+ {
+ if (tFront.x == habbo.getRoomUnit().getX() && tFront.y == habbo.getRoomUnit().getY())
+ {
+ RoomTile tFrontTarget = gameClient.getHabbo().getHabboInfo().getCurrentRoom().getLayout().getTileInFront(habbo.getRoomUnit().getCurrentLocation(), gameClient.getHabbo().getRoomUnit().getBodyRotation().getValue());
+
+ if (tFrontTarget != null && tFrontTarget.isWalkable())
+ {
+ if (gameClient.getHabbo().getHabboInfo().getCurrentRoom().getLayout().getDoorTile() == tFrontTarget)
+ {
+ gameClient.getHabbo().whisper(Emulator.getTexts().getValue("commands.error.cmd_push.invalid").replace("%username%", params[1]));
+ return true;
+ }
+ habbo.getRoomUnit().setGoalLocation(tFrontTarget);
+ gameClient.getHabbo().getHabboInfo().getCurrentRoom().sendComposer(new RoomUserTalkComposer(new RoomChatMessage(Emulator.getTexts().getValue("commands.succes.cmd_push.push").replace("%user%", params[1]).replace("%gender_name%", (gameClient.getHabbo().getHabboInfo().getGender().equals(HabboGender.M) ? Emulator.getTexts().getValue("gender.him") : Emulator.getTexts().getValue("gender.her"))), gameClient.getHabbo(), gameClient.getHabbo(), RoomChatMessageBubbles.NORMAL)).compose());
+ }
+ }
+ else
+ {
+ gameClient.getHabbo().whisper(Emulator.getTexts().getValue("commands.error.cmd_push.cant_reach").replace("%user%", params[1]), RoomChatMessageBubbles.ALERT);
+ return true;
+ }
+ }
+ }
+ return true;
+ }
+
+ return true;
+ }
+}
diff --git a/src/main/java/com/eu/habbo/habbohotel/commands/RedeemCommand.java b/src/main/java/com/eu/habbo/habbohotel/commands/RedeemCommand.java
new file mode 100644
index 00000000..c6baa3b0
--- /dev/null
+++ b/src/main/java/com/eu/habbo/habbohotel/commands/RedeemCommand.java
@@ -0,0 +1,124 @@
+package com.eu.habbo.habbohotel.commands;
+
+import com.eu.habbo.Emulator;
+import com.eu.habbo.habbohotel.gameclients.GameClient;
+import com.eu.habbo.habbohotel.rooms.RoomChatMessage;
+import com.eu.habbo.habbohotel.rooms.RoomChatMessageBubbles;
+import com.eu.habbo.habbohotel.users.HabboItem;
+import com.eu.habbo.messages.outgoing.inventory.InventoryRefreshComposer;
+import com.eu.habbo.messages.outgoing.rooms.users.RoomUserWhisperComposer;
+import com.eu.habbo.threading.runnables.QueryDeleteHabboItems;
+import gnu.trove.map.TIntIntMap;
+import gnu.trove.map.hash.TIntIntHashMap;
+import gnu.trove.map.hash.TIntObjectHashMap;
+import gnu.trove.procedure.TIntIntProcedure;
+
+import java.util.ArrayList;
+
+public class RedeemCommand extends Command
+{
+ public RedeemCommand()
+ {
+ super("cmd_redeem", Emulator.getTexts().getValue("commands.keys.cmd_redeem").split(";"));
+ }
+
+ @Override
+ public boolean handle(final GameClient gameClient, String[] params) throws Exception
+ {
+ ArrayList items = new ArrayList();
+
+ int credits = 0;
+ int pixels = 0;
+
+ TIntIntMap points = new TIntIntHashMap();
+
+
+ for(HabboItem item : gameClient.getHabbo().getInventory().getItemsComponent().getItemsAsValueCollection())
+ {
+ if (item.getBaseItem().getName().startsWith("CF_") || item.getBaseItem().getName().startsWith("CFC_") || item.getBaseItem().getName().startsWith("DF_") || item.getBaseItem().getName().startsWith("PF_"))
+ {
+ items.add(item);
+ if ((item.getBaseItem().getName().startsWith("CF_") || item.getBaseItem().getName().startsWith("CFC_")) && !item.getBaseItem().getName().contains("_diamond_"))
+ {
+ try
+ {
+ credits += Integer.valueOf(item.getBaseItem().getName().split("_")[1]);
+ } catch (Exception e)
+ {
+ }
+
+ } else if (item.getBaseItem().getName().startsWith("PF_"))
+ {
+ try
+ {
+ pixels += Integer.valueOf(item.getBaseItem().getName().split("_")[1]);
+ } catch (Exception e)
+ {
+ }
+ } else if (item.getBaseItem().getName().startsWith("DF_"))
+ {
+ int pointsType = 0;
+ int pointsAmount = 0;
+
+ pointsType = Integer.valueOf(item.getBaseItem().getName().split("_")[1]);
+ pointsAmount = Integer.valueOf(item.getBaseItem().getName().split("_")[2]);
+
+ points.adjustOrPutValue(pointsType, pointsAmount, pointsAmount);
+ }
+ else if (item.getBaseItem().getName().startsWith("CF_diamond_"))
+ {
+ try
+ {
+ int amount = Integer.valueOf(item.getBaseItem().getName().split("_")[2]);
+ points.adjustOrPutValue(5, amount, amount);
+ }
+ catch (Exception e)
+ {
+ }
+ }
+ }
+ }
+
+ TIntObjectHashMap deleted = new TIntObjectHashMap();
+ for(HabboItem item : items)
+ {
+ gameClient.getHabbo().getInventory().getItemsComponent().removeHabboItem(item);
+ deleted.put(item.getId(), item);
+ }
+
+ Emulator.getThreading().run(new QueryDeleteHabboItems(deleted));
+
+ gameClient.sendResponse(new InventoryRefreshComposer());
+ gameClient.getHabbo().giveCredits(credits);
+ gameClient.getHabbo().givePixels(pixels);
+
+ final String[] message = {Emulator.getTexts().getValue("generic.redeemed")};
+
+ message[0] += Emulator.getTexts().getValue("generic.credits");
+ message[0] += ": " + credits;
+
+ if(pixels > 0)
+ {
+ message[0] += ", " + Emulator.getTexts().getValue("generic.pixels");
+ message[0] += ": " + pixels + "";
+ }
+
+ if(!points.isEmpty())
+ {
+ points.forEachEntry(new TIntIntProcedure()
+ {
+ @Override
+ public boolean execute(int a, int b)
+ {
+ gameClient.getHabbo().givePoints(a, b);
+ message[0] += " ," + Emulator.getTexts().getValue("seasonal.name." + a) + ": " + b;
+ return true;
+ }
+ });
+ }
+
+ gameClient.getHabbo().whisper(message[0], RoomChatMessageBubbles.ALERT);
+
+ return true;
+ }
+}
diff --git a/src/main/java/com/eu/habbo/habbohotel/commands/ReloadRoomCommand.java b/src/main/java/com/eu/habbo/habbohotel/commands/ReloadRoomCommand.java
new file mode 100644
index 00000000..aea8ea0c
--- /dev/null
+++ b/src/main/java/com/eu/habbo/habbohotel/commands/ReloadRoomCommand.java
@@ -0,0 +1,46 @@
+package com.eu.habbo.habbohotel.commands;
+
+import com.eu.habbo.Emulator;
+import com.eu.habbo.habbohotel.gameclients.GameClient;
+import com.eu.habbo.habbohotel.rooms.Room;
+import com.eu.habbo.habbohotel.users.Habbo;
+import com.eu.habbo.messages.ServerMessage;
+import com.eu.habbo.messages.outgoing.rooms.ForwardToRoomComposer;
+import gnu.trove.set.hash.THashSet;
+
+import java.util.ArrayList;
+import java.util.Collection;
+
+public class ReloadRoomCommand extends Command
+{
+ public ReloadRoomCommand()
+ {
+ super("cmd_reload_room", Emulator.getTexts().getValue("commands.keys.cmd_reload_room").split(";"));
+ }
+
+ @Override
+ public boolean handle(GameClient gameClient, String[] params) throws Exception
+ {
+ Emulator.getThreading().run(new Runnable()
+ {
+ @Override
+ public void run()
+ {
+ Room room = gameClient.getHabbo().getHabboInfo().getCurrentRoom();
+ if (room != null)
+ {
+ Collection habbos = new ArrayList(room.getHabbos());
+ Emulator.getGameEnvironment().getRoomManager().unloadRoom(room);
+ room = Emulator.getGameEnvironment().getRoomManager().loadRoom(room.getId());
+ ServerMessage message = new ForwardToRoomComposer(room.getId()).compose();
+ for(Habbo habbo : habbos)
+ {
+ habbo.getClient().sendResponse(message);
+ }
+ }
+ }
+ }, 100);
+
+ return true;
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/com/eu/habbo/habbohotel/commands/RoomAlertCommand.java b/src/main/java/com/eu/habbo/habbohotel/commands/RoomAlertCommand.java
new file mode 100644
index 00000000..a563b54e
--- /dev/null
+++ b/src/main/java/com/eu/habbo/habbohotel/commands/RoomAlertCommand.java
@@ -0,0 +1,47 @@
+package com.eu.habbo.habbohotel.commands;
+
+import com.eu.habbo.Emulator;
+import com.eu.habbo.habbohotel.gameclients.GameClient;
+import com.eu.habbo.habbohotel.rooms.Room;
+import com.eu.habbo.habbohotel.rooms.RoomChatMessage;
+import com.eu.habbo.habbohotel.rooms.RoomChatMessageBubbles;
+import com.eu.habbo.messages.outgoing.generic.alerts.GenericAlertComposer;
+import com.eu.habbo.messages.outgoing.rooms.users.RoomUserWhisperComposer;
+
+public class RoomAlertCommand extends Command
+{
+ public RoomAlertCommand()
+ {
+ super("cmd_roomalert", Emulator.getTexts().getValue("commands.keys.cmd_roomalert").split(";"));
+ }
+
+ @Override
+ public boolean handle(GameClient gameClient, String[] params) throws Exception
+ {
+ String message = "";
+
+ if (params.length >= 2)
+ {
+ for (int i = 1; i < params.length; i++)
+ {
+ message += params[i] + " ";
+ }
+
+ if (message.isEmpty())
+ {
+ gameClient.getHabbo().whisper(Emulator.getTexts().getValue("commands.error.cmd_roomalert.empty"), RoomChatMessageBubbles.ALERT);
+ return true;
+ }
+
+ Room room = gameClient.getHabbo().getHabboInfo().getCurrentRoom();
+
+ if (room != null)
+ {
+ room.sendComposer(new GenericAlertComposer(message).compose());
+ return true;
+ }
+ }
+
+ return false;
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/com/eu/habbo/habbohotel/commands/RoomBundleCommand.java b/src/main/java/com/eu/habbo/habbohotel/commands/RoomBundleCommand.java
new file mode 100644
index 00000000..4dd8242f
--- /dev/null
+++ b/src/main/java/com/eu/habbo/habbohotel/commands/RoomBundleCommand.java
@@ -0,0 +1,90 @@
+package com.eu.habbo.habbohotel.commands;
+
+import com.eu.habbo.Emulator;
+import com.eu.habbo.habbohotel.catalog.CatalogItem;
+import com.eu.habbo.habbohotel.catalog.CatalogPage;
+import com.eu.habbo.habbohotel.catalog.CatalogPageLayouts;
+import com.eu.habbo.habbohotel.catalog.layouts.RoomBundleLayout;
+import com.eu.habbo.habbohotel.gameclients.GameClient;
+import com.eu.habbo.habbohotel.rooms.RoomChatMessage;
+import com.eu.habbo.habbohotel.rooms.RoomChatMessageBubbles;
+import com.eu.habbo.messages.outgoing.rooms.users.RoomUserWhisperComposer;
+
+import java.sql.*;
+
+public class RoomBundleCommand extends Command
+{
+ public RoomBundleCommand()
+ {
+ super("cmd_bundle", Emulator.getTexts().getValue("commands.keys.cmd_bundle").split(";"));
+ }
+
+ @Override
+ public boolean handle(GameClient gameClient, String[] params) throws Exception
+ {
+ int parentId;
+ int credits;
+ int points;
+ int pointsType;
+
+ if(params.length < 5)
+ {
+ gameClient.getHabbo().whisper(Emulator.getTexts().getValue("commands.error.cmd_bundle.missing_params"), RoomChatMessageBubbles.ALERT);
+ return true;
+ }
+
+ if(Emulator.getGameEnvironment().getCatalogManager().getCatalogPage("room_bundle_" + gameClient.getHabbo().getHabboInfo().getCurrentRoom().getId()) != null)
+ {
+ gameClient.getHabbo().whisper(Emulator.getTexts().getValue("commands.error.cmd_bundle.duplicate"), RoomChatMessageBubbles.ALERT);
+ return true;
+ }
+
+ parentId = Integer.valueOf(params[1]);
+ credits = Integer.valueOf(params[2]);
+ points = Integer.valueOf(params[3]);
+ pointsType = Integer.valueOf(params[4]);
+
+ CatalogPage page = Emulator.getGameEnvironment().getCatalogManager().createCatalogPage("Room Bundle: " + gameClient.getHabbo().getHabboInfo().getCurrentRoom().getName(), "room_bundle_" + gameClient.getHabbo().getHabboInfo().getCurrentRoom().getId(), gameClient.getHabbo().getHabboInfo().getCurrentRoom().getId(), 0, CatalogPageLayouts.room_bundle, gameClient.getHabbo().getHabboInfo().getRank().getId(), parentId);
+
+ if(page instanceof RoomBundleLayout)
+ {
+ try (Connection connection = Emulator.getDatabase().getDataSource().getConnection(); PreparedStatement statement = connection.prepareStatement("INSERT INTO catalog_items (page_id, item_ids, catalog_name, cost_credits, cost_points, points_type ) VALUES (?, ?, ?, ?, ?, ?)", Statement.RETURN_GENERATED_KEYS))
+ {
+ statement.setInt(1, page.getId());
+ statement.setString(2, "");
+ statement.setString(3, "room_bundle");
+ statement.setInt(4, credits);
+ statement.setInt(5, points);
+ statement.setInt(6, pointsType);
+ statement.execute();
+
+ try (ResultSet set = statement.getGeneratedKeys())
+ {
+ if (set.next())
+ {
+ try (PreparedStatement stmt = connection.prepareStatement("SELECT * FROM catalog_items WHERE id = ?"))
+ {
+ stmt.setInt(1, set.getInt(1));
+ try (ResultSet st = stmt.executeQuery())
+ {
+ if (st.next())
+ {
+ page.addItem(new CatalogItem(st));
+ }
+ }
+ }
+ }
+ }
+ }
+ catch (SQLException e)
+ {
+ Emulator.getLogging().logSQLException(e);
+ }
+ ((RoomBundleLayout)page).loadItems(gameClient.getHabbo().getHabboInfo().getCurrentRoom());
+
+ gameClient.getHabbo().whisper(Emulator.getTexts().getValue("commands.succes.cmd_bundle").replace("%id%", page.getId() + ""), RoomChatMessageBubbles.ALERT);
+ }
+
+ return true;
+ }
+}
diff --git a/src/main/java/com/eu/habbo/habbohotel/commands/RoomCreditsCommand.java b/src/main/java/com/eu/habbo/habbohotel/commands/RoomCreditsCommand.java
new file mode 100644
index 00000000..f56450ba
--- /dev/null
+++ b/src/main/java/com/eu/habbo/habbohotel/commands/RoomCreditsCommand.java
@@ -0,0 +1,50 @@
+package com.eu.habbo.habbohotel.commands;
+
+import com.eu.habbo.Emulator;
+import com.eu.habbo.habbohotel.gameclients.GameClient;
+import com.eu.habbo.habbohotel.rooms.RoomChatMessage;
+import com.eu.habbo.habbohotel.rooms.RoomChatMessageBubbles;
+import com.eu.habbo.habbohotel.users.Habbo;
+import com.eu.habbo.messages.outgoing.rooms.users.RoomUserWhisperComposer;
+import gnu.trove.procedure.TObjectProcedure;
+
+public class RoomCreditsCommand extends Command
+{
+ public RoomCreditsCommand()
+ {
+ super("cmd_roomcredits", Emulator.getTexts().getValue("commands.keys.cmd_roomcredits").split(";"));
+ }
+
+ @Override
+ public boolean handle(GameClient gameClient, String[] params) throws Exception
+ {
+ if(params.length == 2)
+ {
+ int amount;
+
+ try
+ {
+ amount = Integer.valueOf(params[1]);
+ }
+ catch (Exception e)
+ {
+ gameClient.getHabbo().whisper(Emulator.getTexts().getValue("commands.error.cmd_masscredits.invalid_amount"), RoomChatMessageBubbles.ALERT);
+ return true;
+ }
+
+ if(amount != 0)
+ {
+ final String message = Emulator.getTexts().getValue("commands.generic.cmd_credits.received").replace("%amount%", amount + "");
+ final int finalAmount = amount;
+ for (Habbo habbo : gameClient.getHabbo().getHabboInfo().getCurrentRoom().getHabbos())
+ {
+ habbo.giveCredits(finalAmount);
+ habbo.whisper(message, RoomChatMessageBubbles.ALERT);
+ }
+ }
+ return true;
+ }
+ gameClient.getHabbo().whisper(Emulator.getTexts().getValue("commands.error.cmd_masscredits.invalid_amount"), RoomChatMessageBubbles.ALERT);
+ return true;
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/com/eu/habbo/habbohotel/commands/RoomDanceCommand.java b/src/main/java/com/eu/habbo/habbohotel/commands/RoomDanceCommand.java
new file mode 100644
index 00000000..86a76404
--- /dev/null
+++ b/src/main/java/com/eu/habbo/habbohotel/commands/RoomDanceCommand.java
@@ -0,0 +1,59 @@
+package com.eu.habbo.habbohotel.commands;
+
+import com.eu.habbo.Emulator;
+import com.eu.habbo.habbohotel.gameclients.GameClient;
+import com.eu.habbo.habbohotel.rooms.RoomChatMessage;
+import com.eu.habbo.habbohotel.rooms.RoomChatMessageBubbles;
+import com.eu.habbo.habbohotel.users.DanceType;
+import com.eu.habbo.habbohotel.users.Habbo;
+import com.eu.habbo.messages.outgoing.rooms.users.RoomUserDanceComposer;
+import com.eu.habbo.messages.outgoing.rooms.users.RoomUserWhisperComposer;
+import gnu.trove.iterator.TIntObjectIterator;
+import gnu.trove.map.TIntObjectMap;
+
+import java.util.NoSuchElementException;
+
+public class RoomDanceCommand extends Command
+{
+ public RoomDanceCommand()
+ {
+ super("cmd_danceall", Emulator.getTexts().getValue("commands.keys.cmd_danceall").split(";"));
+ }
+
+ @Override
+ public boolean handle(GameClient gameClient, String[] params) throws Exception
+ {
+ if(params.length == 2)
+ {
+ int danceId;
+
+ try
+ {
+ danceId = Integer.valueOf(params[1]);
+ }
+ catch (Exception e)
+ {
+ gameClient.getHabbo().whisper(Emulator.getTexts().getValue("commands.error.cmd_danceall.invalid_dance"), RoomChatMessageBubbles.ALERT);
+ return true;
+ }
+
+ if(danceId < 0 || danceId > 4)
+ {
+ gameClient.getHabbo().whisper(Emulator.getTexts().getValue("commands.error.cmd_danceall.outside_bounds"), RoomChatMessageBubbles.ALERT);
+ return true;
+ }
+
+ for (Habbo habbo : gameClient.getHabbo().getHabboInfo().getCurrentRoom().getHabbos())
+ {
+ habbo.getRoomUnit().setDanceType(DanceType.values()[danceId]);
+ habbo.getHabboInfo().getCurrentRoom().sendComposer(new RoomUserDanceComposer(habbo.getRoomUnit()).compose());
+ }
+ }
+ else
+ {
+ gameClient.getHabbo().whisper(Emulator.getTexts().getValue("commands.error.cmd_danceall.no_dance"), RoomChatMessageBubbles.ALERT);
+ }
+
+ return true;
+ }
+}
diff --git a/src/main/java/com/eu/habbo/habbohotel/commands/RoomEffectCommand.java b/src/main/java/com/eu/habbo/habbohotel/commands/RoomEffectCommand.java
new file mode 100644
index 00000000..fbd16ed7
--- /dev/null
+++ b/src/main/java/com/eu/habbo/habbohotel/commands/RoomEffectCommand.java
@@ -0,0 +1,57 @@
+package com.eu.habbo.habbohotel.commands;
+
+import com.eu.habbo.Emulator;
+import com.eu.habbo.habbohotel.gameclients.GameClient;
+import com.eu.habbo.habbohotel.rooms.RoomChatMessage;
+import com.eu.habbo.habbohotel.rooms.RoomChatMessageBubbles;
+import com.eu.habbo.habbohotel.users.Habbo;
+import com.eu.habbo.messages.outgoing.rooms.users.RoomUserEffectComposer;
+import com.eu.habbo.messages.outgoing.rooms.users.RoomUserWhisperComposer;
+import gnu.trove.iterator.TIntObjectIterator;
+import gnu.trove.map.TIntObjectMap;
+
+import java.util.NoSuchElementException;
+
+public class RoomEffectCommand extends Command
+{
+ public RoomEffectCommand()
+ {
+ super("cmd_roomeffect", Emulator.getTexts().getValue("commands.keys.cmd_roomeffect").split(";"));
+ }
+
+ @Override
+ public boolean handle(GameClient gameClient, String[] params) throws Exception
+ {
+ if(params.length < 2)
+ {
+ gameClient.getHabbo().whisper(Emulator.getTexts().getValue("commands.error.cmd_roomeffect.no_effect"), RoomChatMessageBubbles.ALERT);
+ return true;
+ }
+
+ try
+ {
+ int effectId = Integer.valueOf(params[1]);
+
+ if(effectId >= 0)
+ {
+ for (Habbo habbo : gameClient.getHabbo().getHabboInfo().getCurrentRoom().getHabbos())
+ {
+ habbo.getRoomUnit().setEffectId(effectId);
+ habbo.getHabboInfo().getCurrentRoom().sendComposer(new RoomUserEffectComposer(habbo.getRoomUnit()).compose());
+ }
+
+ return true;
+ }
+ else
+ {
+ gameClient.getHabbo().whisper(Emulator.getTexts().getValue("commands.error.cmd_roomeffect.positive"), RoomChatMessageBubbles.ALERT);
+ return true;
+ }
+ }
+ catch (Exception e)
+ {
+ gameClient.getHabbo().whisper(Emulator.getTexts().getValue("commands.error.cmd_roomeffect.numbers_only"), RoomChatMessageBubbles.ALERT);
+ return true;
+ }
+ }
+}
diff --git a/src/main/java/com/eu/habbo/habbohotel/commands/RoomGiftCommand.java b/src/main/java/com/eu/habbo/habbohotel/commands/RoomGiftCommand.java
new file mode 100644
index 00000000..761fd254
--- /dev/null
+++ b/src/main/java/com/eu/habbo/habbohotel/commands/RoomGiftCommand.java
@@ -0,0 +1,87 @@
+package com.eu.habbo.habbohotel.commands;
+
+import com.eu.habbo.Emulator;
+import com.eu.habbo.habbohotel.gameclients.GameClient;
+import com.eu.habbo.habbohotel.items.Item;
+import com.eu.habbo.habbohotel.rooms.RoomChatMessage;
+import com.eu.habbo.habbohotel.rooms.RoomChatMessageBubbles;
+import com.eu.habbo.habbohotel.users.Habbo;
+import com.eu.habbo.habbohotel.users.HabboItem;
+import com.eu.habbo.messages.outgoing.generic.alerts.WiredRewardAlertComposer;
+import com.eu.habbo.messages.outgoing.inventory.InventoryRefreshComposer;
+import com.eu.habbo.messages.outgoing.rooms.users.RoomUserWhisperComposer;
+import gnu.trove.procedure.TObjectProcedure;
+
+import java.util.Map;
+
+public class RoomGiftCommand extends Command
+{
+ public RoomGiftCommand()
+ {
+ super("cmd_roomgift", Emulator.getTexts().getValue("commands.keys.cmd_roomgift").split(";"));
+ }
+
+ @Override
+ public boolean handle(final GameClient gameClient, String[] params) throws Exception
+ {
+ if(params.length >= 2)
+ {
+ try
+ {
+ int itemId = Integer.valueOf(params[1]);
+
+ if(itemId < 0)
+ {
+ gameClient.getHabbo().whisper(Emulator.getTexts().getValue("commands.error.cmd_gift.not_a_number"), RoomChatMessageBubbles.ALERT);
+ return true;
+ }
+
+ final Item baseItem = Emulator.getGameEnvironment().getItemManager().getItem(itemId);
+
+ if(baseItem == null)
+ {
+ gameClient.getHabbo().whisper(Emulator.getTexts().getValue("commands.error.cmd_gift.not_found").replace("%itemid%", itemId + ""), RoomChatMessageBubbles.ALERT);
+ return true;
+ }
+
+ String message = "";
+
+ if(params.length > 2)
+ {
+ for (int i = 2; i < params.length; i++)
+ {
+ message += params[i] + " ";
+ }
+ }
+
+ final String finalMessage = message;
+
+ for (Habbo habbo : gameClient.getHabbo().getHabboInfo().getCurrentRoom().getHabbos())
+ {
+ HabboItem item = Emulator.getGameEnvironment().getItemManager().createItem(0, baseItem, 0, 0, "");
+
+ Item giftItem = Emulator.getGameEnvironment().getItemManager().getItem((Integer) Emulator.getGameEnvironment().getCatalogManager().giftFurnis.values().toArray()[Emulator.getRandom().nextInt(Emulator.getGameEnvironment().getCatalogManager().giftFurnis.size())]);
+
+ String extraData = "1\t" + item.getId();
+ extraData += "\t0\t0\t0\t"+ finalMessage +"\t0\t0";
+
+ Emulator.getGameEnvironment().getItemManager().createGift(habbo.getHabboInfo().getUsername(), giftItem, extraData, 0, 0);
+
+ habbo.getClient().sendResponse(new InventoryRefreshComposer());
+
+ habbo.getClient().sendResponse(new WiredRewardAlertComposer(WiredRewardAlertComposer.REWARD_RECEIVED_ITEM));
+ }
+
+ return true;
+ }
+ catch (Exception e)
+ {
+ e.printStackTrace();
+ gameClient.getHabbo().whisper(Emulator.getTexts().getValue("commands.error.cmd_gift.not_a_number"), RoomChatMessageBubbles.ALERT);
+ return true;
+ }
+ }
+
+ return false;
+ }
+}
diff --git a/src/main/java/com/eu/habbo/habbohotel/commands/RoomItemCommand.java b/src/main/java/com/eu/habbo/habbohotel/commands/RoomItemCommand.java
new file mode 100644
index 00000000..6ac204eb
--- /dev/null
+++ b/src/main/java/com/eu/habbo/habbohotel/commands/RoomItemCommand.java
@@ -0,0 +1,64 @@
+package com.eu.habbo.habbohotel.commands;
+
+import com.eu.habbo.Emulator;
+import com.eu.habbo.habbohotel.gameclients.GameClient;
+import com.eu.habbo.habbohotel.rooms.RoomChatMessage;
+import com.eu.habbo.habbohotel.rooms.RoomChatMessageBubbles;
+import com.eu.habbo.habbohotel.users.Habbo;
+import com.eu.habbo.messages.outgoing.rooms.users.RoomUserEffectComposer;
+import com.eu.habbo.messages.outgoing.rooms.users.RoomUserHandItemComposer;
+import com.eu.habbo.messages.outgoing.rooms.users.RoomUserWhisperComposer;
+import gnu.trove.iterator.TIntObjectIterator;
+import gnu.trove.map.TIntObjectMap;
+
+import java.util.NoSuchElementException;
+
+public class RoomItemCommand extends Command
+{
+ public RoomItemCommand()
+ {
+ super("cmd_roomitem", Emulator.getTexts().getValue("commands.keys.cmd_roomitem").split(";"));
+ }
+
+ @Override
+ public boolean handle(GameClient gameClient, String[] params) throws Exception
+ {
+ int itemId = 0;
+
+ if(params.length >= 2)
+ {
+ try
+ {
+ itemId = Integer.valueOf(params[1]);
+
+ if(itemId < 0)
+ {
+ gameClient.getHabbo().whisper(Emulator.getTexts().getValue("commands.error.cmd_roomitem.positive"), RoomChatMessageBubbles.ALERT);
+ return true;
+ }
+ }
+ catch (Exception e)
+ {
+ gameClient.getHabbo().whisper(Emulator.getTexts().getValue("commands.error.cmd_roomitem.no_item"), RoomChatMessageBubbles.ALERT);
+ return true;
+ }
+ }
+
+ for (Habbo habbo : gameClient.getHabbo().getHabboInfo().getCurrentRoom().getHabbos())
+ {
+ habbo.getRoomUnit().setHandItem(itemId);
+ habbo.getHabboInfo().getCurrentRoom().sendComposer(new RoomUserHandItemComposer(habbo.getRoomUnit()).compose());
+ }
+
+ if(itemId > 0)
+ {
+ gameClient.getHabbo().whisper(Emulator.getTexts().getValue("commands.succes.cmd_roomitem.given").replace("%item%", itemId + ""), RoomChatMessageBubbles.ALERT);
+ return true;
+ }
+ else
+ {
+ gameClient.getHabbo().whisper(Emulator.getTexts().getValue("commands.succes.cmd_roomitem.removed"), RoomChatMessageBubbles.ALERT);
+ return true;
+ }
+ }
+}
diff --git a/src/main/java/com/eu/habbo/habbohotel/commands/RoomKickCommand.java b/src/main/java/com/eu/habbo/habbohotel/commands/RoomKickCommand.java
new file mode 100644
index 00000000..cc79c03d
--- /dev/null
+++ b/src/main/java/com/eu/habbo/habbohotel/commands/RoomKickCommand.java
@@ -0,0 +1,44 @@
+package com.eu.habbo.habbohotel.commands;
+
+import com.eu.habbo.Emulator;
+import com.eu.habbo.habbohotel.gameclients.GameClient;
+import com.eu.habbo.habbohotel.rooms.Room;
+import com.eu.habbo.habbohotel.users.Habbo;
+import com.eu.habbo.messages.outgoing.generic.alerts.GenericAlertComposer;
+import gnu.trove.iterator.TIntObjectIterator;
+import gnu.trove.procedure.TObjectProcedure;
+
+public class RoomKickCommand extends Command
+{
+ public RoomKickCommand()
+ {
+ super("cmd_kickall", Emulator.getTexts().getValue("commands.keys.cmd_kickall").split(";"));
+ }
+
+ @Override
+ public boolean handle(GameClient gameClient, String[] params) throws Exception
+ {
+ final Room room = gameClient.getHabbo().getHabboInfo().getCurrentRoom();
+ if(room != null)
+ {
+ if(params.length > 1)
+ {
+ String message = "";
+ for (int i = 1; i < params.length; i++)
+ {
+ message += params[i] + " ";
+ }
+ room.sendComposer(new GenericAlertComposer(message + "\r\n-" + gameClient.getHabbo().getHabboInfo().getUsername()).compose());
+ }
+
+ for (Habbo habbo : room.getHabbos())
+ {
+ if (!(habbo.hasPermission("acc_unkickable") || habbo.hasPermission("acc_supporttool") || room.isOwner(habbo)))
+ {
+ room.kickHabbo(habbo, true);
+ }
+ }
+ }
+ return true;
+ }
+}
diff --git a/src/main/java/com/eu/habbo/habbohotel/commands/RoomMuteCommand.java b/src/main/java/com/eu/habbo/habbohotel/commands/RoomMuteCommand.java
new file mode 100644
index 00000000..7258faf8
--- /dev/null
+++ b/src/main/java/com/eu/habbo/habbohotel/commands/RoomMuteCommand.java
@@ -0,0 +1,30 @@
+package com.eu.habbo.habbohotel.commands;
+
+import com.eu.habbo.Emulator;
+import com.eu.habbo.habbohotel.gameclients.GameClient;
+import com.eu.habbo.habbohotel.rooms.Room;
+import com.eu.habbo.habbohotel.rooms.RoomChatMessage;
+import com.eu.habbo.habbohotel.rooms.RoomChatMessageBubbles;
+import com.eu.habbo.messages.outgoing.rooms.users.RoomUserWhisperComposer;
+
+public class RoomMuteCommand extends Command
+{
+ public RoomMuteCommand()
+ {
+ super("cmd_roommute", Emulator.getTexts().getValue("commands.keys.cmd_roommute").split(";"));
+ }
+
+ @Override
+ public boolean handle(GameClient gameClient, String[] params) throws Exception
+ {
+ Room room = gameClient.getHabbo().getHabboInfo().getCurrentRoom();
+
+ if (room != null)
+ {
+ room.setMuted(!room.isMuted());
+ gameClient.getHabbo().whisper(Emulator.getTexts().getValue("commands.succes.cmd_roommute." + (room.isMuted() ? "muted" : "unmuted")), RoomChatMessageBubbles.ALERT);
+ }
+
+ return true;
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/com/eu/habbo/habbohotel/commands/RoomPixelsCommand.java b/src/main/java/com/eu/habbo/habbohotel/commands/RoomPixelsCommand.java
new file mode 100644
index 00000000..9aa409e6
--- /dev/null
+++ b/src/main/java/com/eu/habbo/habbohotel/commands/RoomPixelsCommand.java
@@ -0,0 +1,50 @@
+package com.eu.habbo.habbohotel.commands;
+
+import com.eu.habbo.Emulator;
+import com.eu.habbo.habbohotel.gameclients.GameClient;
+import com.eu.habbo.habbohotel.rooms.RoomChatMessage;
+import com.eu.habbo.habbohotel.rooms.RoomChatMessageBubbles;
+import com.eu.habbo.habbohotel.users.Habbo;
+import com.eu.habbo.messages.outgoing.rooms.users.RoomUserWhisperComposer;
+import gnu.trove.procedure.TObjectProcedure;
+
+public class RoomPixelsCommand extends Command
+{
+ public RoomPixelsCommand()
+ {
+ super("cmd_roompixels", Emulator.getTexts().getValue("commands.keys.cmd_roompixels").split(";"));
+ }
+
+ @Override
+ public boolean handle(GameClient gameClient, String[] params) throws Exception
+ {
+ if(params.length == 2)
+ {
+ int amount;
+
+ try
+ {
+ amount = Integer.valueOf(params[1]);
+ }
+ catch (Exception e)
+ {
+ gameClient.getHabbo().whisper(Emulator.getTexts().getValue("commands.error.cmd_massduckets.invalid_amount"), RoomChatMessageBubbles.ALERT);
+ return true;
+ }
+
+ if(amount != 0)
+ {
+ final String message = Emulator.getTexts().getValue("commands.generic.cmd_duckets.received").replace("%amount%", amount + "");
+ final int finalAmount = amount;
+ for (Habbo habbo : gameClient.getHabbo().getHabboInfo().getCurrentRoom().getHabbos())
+ {
+ habbo.givePixels(finalAmount);
+ habbo.whisper(message, RoomChatMessageBubbles.ALERT);
+ }
+ }
+ return true;
+ }
+ gameClient.getHabbo().whisper(Emulator.getTexts().getValue("commands.error.cmd_massduckets.invalid_amount"), RoomChatMessageBubbles.ALERT);
+ return true;
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/com/eu/habbo/habbohotel/commands/RoomPointsCommand.java b/src/main/java/com/eu/habbo/habbohotel/commands/RoomPointsCommand.java
new file mode 100644
index 00000000..baa6690e
--- /dev/null
+++ b/src/main/java/com/eu/habbo/habbohotel/commands/RoomPointsCommand.java
@@ -0,0 +1,88 @@
+package com.eu.habbo.habbohotel.commands;
+
+import com.eu.habbo.Emulator;
+import com.eu.habbo.habbohotel.gameclients.GameClient;
+import com.eu.habbo.habbohotel.rooms.RoomChatMessage;
+import com.eu.habbo.habbohotel.rooms.RoomChatMessageBubbles;
+import com.eu.habbo.habbohotel.users.Habbo;
+import com.eu.habbo.messages.outgoing.rooms.users.RoomUserWhisperComposer;
+import gnu.trove.procedure.TObjectProcedure;
+
+public class RoomPointsCommand extends Command
+{
+ public RoomPointsCommand()
+ {
+ super("cmd_roompoints", Emulator.getTexts().getValue("commands.keys.cmd_roompoints").split(";"));
+ }
+
+ @Override
+ public boolean handle(GameClient gameClient, String[] params) throws Exception
+ {
+ int type = Emulator.getConfig().getInt("seasonal.primary.type");
+ String amountString = "";
+ if(params.length == 3)
+ {
+ try
+ {
+ type = Integer.valueOf(params[1]);
+ } catch (Exception e)
+ {
+ gameClient.getHabbo().whisper(Emulator.getTexts().getValue("commands.error.cmd_masspoints.invalid_type").replace("%types%", Emulator.getConfig().getValue("seasonal.types").replace(";", ", ")), RoomChatMessageBubbles.ALERT);
+ return true;
+ }
+
+ amountString = params[2];
+ }
+ else if(params.length == 2)
+ {
+ amountString = params[1];
+ }
+ else
+ {
+ gameClient.getHabbo().whisper(Emulator.getTexts().getValue("commands.error.cmd_masspoints.invalid_amount"), RoomChatMessageBubbles.ALERT);
+ return true;
+ }
+
+ boolean found = false;
+ for(String s : Emulator.getConfig().getValue("seasonal.types").split(";"))
+ {
+ if(s.equalsIgnoreCase(type + ""))
+ {
+ found = true;
+ break;
+ }
+ }
+
+ if(!found)
+ {
+ gameClient.getHabbo().whisper(Emulator.getTexts().getValue("commands.error.cmd_masspoints.invalid_type").replace("%types%", Emulator.getConfig().getValue("seasonal.types").replace(";", ", ")), RoomChatMessageBubbles.ALERT);
+ return true;
+ }
+
+ int amount;
+
+ try
+ {
+ amount = Integer.valueOf(amountString);
+ }
+ catch (Exception e)
+ {
+ gameClient.getHabbo().whisper(Emulator.getTexts().getValue("commands.error.cmd_masspoints.invalid_amount"), RoomChatMessageBubbles.ALERT);
+ return true;
+ }
+
+ if(amount != 0)
+ {
+ final String message = Emulator.getTexts().getValue("commands.generic.cmd_points.received").replace("%amount%", amount + "").replace("%type%", Emulator.getTexts().getValue("seasonal.name." + type));
+
+ final int finalType = type;
+ final int finalAmount = amount;
+ for (Habbo habbo : gameClient.getHabbo().getHabboInfo().getCurrentRoom().getHabbos())
+ {
+ habbo.givePoints(finalType, finalAmount);
+ habbo.whisper(message, RoomChatMessageBubbles.ALERT);
+ }
+ }
+ return true;
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/com/eu/habbo/habbohotel/commands/SayAllCommand.java b/src/main/java/com/eu/habbo/habbohotel/commands/SayAllCommand.java
new file mode 100644
index 00000000..b46a28e8
--- /dev/null
+++ b/src/main/java/com/eu/habbo/habbohotel/commands/SayAllCommand.java
@@ -0,0 +1,47 @@
+package com.eu.habbo.habbohotel.commands;
+
+import com.eu.habbo.Emulator;
+import com.eu.habbo.habbohotel.gameclients.GameClient;
+import com.eu.habbo.habbohotel.rooms.RoomChatMessage;
+import com.eu.habbo.habbohotel.rooms.RoomChatMessageBubbles;
+import com.eu.habbo.habbohotel.users.Habbo;
+import com.eu.habbo.messages.outgoing.rooms.users.RoomUserTalkComposer;
+import com.eu.habbo.messages.outgoing.rooms.users.RoomUserWhisperComposer;
+import gnu.trove.iterator.TIntObjectIterator;
+import gnu.trove.map.TIntObjectMap;
+
+import java.util.NoSuchElementException;
+
+public class SayAllCommand extends Command
+{
+ public SayAllCommand()
+ {
+ super("cmd_say_all", Emulator.getTexts().getValue("commands.keys.cmd_say_all").split(";"));
+ }
+
+ @Override
+ public boolean handle(GameClient gameClient, String[] params) throws Exception
+ {
+ if(params.length < 2)
+ {
+ gameClient.getHabbo().whisper(Emulator.getTexts().getValue("commands.error.cmd_say_all.forgot_message"), RoomChatMessageBubbles.ALERT);
+ return true;
+ }
+
+ String message = "";
+ if(params.length > 1)
+ {
+ for(int i = 1; i < params.length; i++)
+ {
+ message += params[i] + " ";
+ }
+ }
+
+ for (Habbo habbo : gameClient.getHabbo().getHabboInfo().getCurrentRoom().getHabbos())
+ {
+ habbo.talk(message);
+ }
+
+ return true;
+ }
+}
diff --git a/src/main/java/com/eu/habbo/habbohotel/commands/SayCommand.java b/src/main/java/com/eu/habbo/habbohotel/commands/SayCommand.java
new file mode 100644
index 00000000..0c7ddbb9
--- /dev/null
+++ b/src/main/java/com/eu/habbo/habbohotel/commands/SayCommand.java
@@ -0,0 +1,56 @@
+package com.eu.habbo.habbohotel.commands;
+
+import com.eu.habbo.Emulator;
+import com.eu.habbo.habbohotel.gameclients.GameClient;
+import com.eu.habbo.habbohotel.rooms.RoomChatMessage;
+import com.eu.habbo.habbohotel.rooms.RoomChatMessageBubbles;
+import com.eu.habbo.habbohotel.users.Habbo;
+import com.eu.habbo.messages.outgoing.rooms.users.RoomUserTalkComposer;
+import com.eu.habbo.messages.outgoing.rooms.users.RoomUserWhisperComposer;
+
+public class SayCommand extends Command
+{
+ public SayCommand()
+ {
+ super("cmd_say", Emulator.getTexts().getValue("commands.keys.cmd_say").split(";"));
+ }
+
+ @Override
+ public boolean handle(GameClient gameClient, String[] params) throws Exception
+ {
+ if(params.length < 2)
+ {
+ gameClient.getHabbo().whisper(Emulator.getTexts().getValue("commands.error.cmd_say.forgot_username"), RoomChatMessageBubbles.ALERT);
+ return true;
+ }
+
+ Habbo target = Emulator.getGameEnvironment().getHabboManager().getHabbo(params[1]);
+
+ if(target == null)
+ {
+ gameClient.getHabbo().whisper(Emulator.getTexts().getValue("commands.error.cmd_say.user_not_found"), RoomChatMessageBubbles.ALERT);
+ return true;
+ }
+ else
+ {
+ if(target.getHabboInfo().getCurrentRoom() == null)
+ {
+ gameClient.getHabbo().whisper(Emulator.getTexts().getValue("commands.error.cmd_say.hotel_view").replace("%user%", params[1]), RoomChatMessageBubbles.ALERT);
+ return true;
+ }
+ }
+
+ String message = "";
+ if(params.length > 2)
+ {
+ for(int i = 2; i < params.length; i++)
+ {
+ message += params[i] + " ";
+ }
+ }
+
+ target.getHabboInfo().getCurrentRoom().sendComposer(new RoomUserTalkComposer(new RoomChatMessage(message, target, RoomChatMessageBubbles.NORMAL)).compose());
+ gameClient.getHabbo().whisper(Emulator.getTexts().getValue("commands.succes.cmd_say").replace("%user%", params[1]).replace("%message%", message), RoomChatMessageBubbles.ALERT);
+ return true;
+ }
+}
diff --git a/src/main/java/com/eu/habbo/habbohotel/commands/SetMaxCommand.java b/src/main/java/com/eu/habbo/habbohotel/commands/SetMaxCommand.java
new file mode 100644
index 00000000..1d18f942
--- /dev/null
+++ b/src/main/java/com/eu/habbo/habbohotel/commands/SetMaxCommand.java
@@ -0,0 +1,49 @@
+package com.eu.habbo.habbohotel.commands;
+
+import com.eu.habbo.Emulator;
+import com.eu.habbo.habbohotel.gameclients.GameClient;
+import com.eu.habbo.habbohotel.rooms.RoomChatMessage;
+import com.eu.habbo.habbohotel.rooms.RoomChatMessageBubbles;
+import com.eu.habbo.messages.outgoing.rooms.users.RoomUserWhisperComposer;
+
+public class SetMaxCommand extends Command
+{
+ public SetMaxCommand()
+ {
+ super("cmd_setmax", Emulator.getTexts().getValue("commands.keys.cmd_setmax").split(";"));
+ }
+
+ @Override
+ public boolean handle(GameClient gameClient, String[] params) throws Exception
+ {
+ if (params.length >= 2)
+ {
+ int max = 0;
+ try
+ {
+ max = Integer.valueOf(params[1]);
+ }
+ catch (Exception e)
+ {
+ return false;
+ }
+
+ if (max > 0 && max < 9999)
+ {
+ gameClient.getHabbo().getHabboInfo().getCurrentRoom().setUsersMax(max);
+ gameClient.getHabbo().whisper(Emulator.getTexts().getValue("commands.success.cmd_setmax").replace("%value%", max + ""), RoomChatMessageBubbles.ALERT);
+ return true;
+ }
+ else
+ {
+ gameClient.getHabbo().whisper(Emulator.getTexts().getValue("commands.error.cmd_setmax.invalid_number"), RoomChatMessageBubbles.ALERT);
+ return true;
+ }
+ }
+ else
+ {
+ gameClient.getHabbo().whisper(Emulator.getTexts().getValue("commands.error.cmd_setmax.forgot_number"), RoomChatMessageBubbles.ALERT);
+ return true;
+ }
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/com/eu/habbo/habbohotel/commands/SetPollCommand.java b/src/main/java/com/eu/habbo/habbohotel/commands/SetPollCommand.java
new file mode 100644
index 00000000..27420e1b
--- /dev/null
+++ b/src/main/java/com/eu/habbo/habbohotel/commands/SetPollCommand.java
@@ -0,0 +1,58 @@
+package com.eu.habbo.habbohotel.commands;
+
+import com.eu.habbo.Emulator;
+import com.eu.habbo.habbohotel.gameclients.GameClient;
+import com.eu.habbo.habbohotel.rooms.RoomChatMessage;
+import com.eu.habbo.habbohotel.rooms.RoomChatMessageBubbles;
+import com.eu.habbo.messages.outgoing.rooms.users.RoomUserWhisperComposer;
+
+public class SetPollCommand extends Command
+{
+ public SetPollCommand()
+ {
+ super("cmd_set_poll", Emulator.getTexts().getValue("commands.keys.cmd_set_poll").split(";"));
+ }
+
+ @Override
+ public boolean handle(GameClient gameClient, String[] params) throws Exception
+ {
+ if (params.length >= 2)
+ {
+ if (gameClient.getHabbo().getHabboInfo().getCurrentRoom() != null)
+ {
+ int pollId = -1;
+ try
+ {
+ pollId = Integer.valueOf(params[1]);
+ }
+ catch (Exception e)
+ {
+
+ }
+
+ if (pollId >= 0)
+ {
+ if (Emulator.getGameEnvironment().getPollManager().getPoll(pollId) != null)
+ {
+ gameClient.getHabbo().getHabboInfo().getCurrentRoom().setPollId(pollId);
+ gameClient.getHabbo().whisper(Emulator.getTexts().getValue("commands.succes.cmd_set_poll"), RoomChatMessageBubbles.ALERT);
+ }
+ else
+ {
+ gameClient.getHabbo().whisper(Emulator.getTexts().getValue("commands.error.cmd_set_poll.not_found"), RoomChatMessageBubbles.ALERT);
+ }
+ }
+ else
+ {
+ gameClient.getHabbo().whisper(Emulator.getTexts().getValue("commands.error.cmd_set_poll.invalid_number"), RoomChatMessageBubbles.ALERT);
+ }
+ }
+ }
+ else
+ {
+ gameClient.getHabbo().whisper(Emulator.getTexts().getValue("commands.error.cmd_set_poll.missing_arg"), RoomChatMessageBubbles.ALERT);
+ }
+
+ return true;
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/com/eu/habbo/habbohotel/commands/SetSpeedCommand.java b/src/main/java/com/eu/habbo/habbohotel/commands/SetSpeedCommand.java
new file mode 100644
index 00000000..1615e822
--- /dev/null
+++ b/src/main/java/com/eu/habbo/habbohotel/commands/SetSpeedCommand.java
@@ -0,0 +1,53 @@
+package com.eu.habbo.habbohotel.commands;
+
+import com.eu.habbo.Emulator;
+import com.eu.habbo.habbohotel.gameclients.GameClient;
+import com.eu.habbo.habbohotel.rooms.Room;
+import com.eu.habbo.habbohotel.rooms.RoomChatMessage;
+import com.eu.habbo.habbohotel.rooms.RoomChatMessageBubbles;
+import com.eu.habbo.messages.outgoing.rooms.users.RoomUserWhisperComposer;
+
+public class SetSpeedCommand extends Command
+{
+ public SetSpeedCommand()
+ {
+ super("cmd_setspeed", Emulator.getTexts().getValue("commands.keys.cmd_setspeed").split(";"));
+ }
+
+ @Override
+ public boolean handle(GameClient gameClient, String[] params) throws Exception
+ {
+ if(gameClient.getHabbo().getHabboInfo().getCurrentRoom() != null)
+ {
+ if(gameClient.getHabbo().getHabboInfo().getCurrentRoom().hasRights(gameClient.getHabbo()))
+ {
+ Room room = gameClient.getHabbo().getHabboInfo().getCurrentRoom();
+
+ int oldSpeed = room.getRollerSpeed();
+ int newSpeed;
+
+ try
+ {
+ newSpeed = Integer.valueOf(params[1]);
+ }
+ catch (Exception e)
+ {
+ gameClient.getHabbo().whisper(Emulator.getTexts().getValue("commands.error.cmd_setspeed.invalid_amount"), RoomChatMessageBubbles.ALERT);
+ return true;
+ }
+
+ if(newSpeed < -1 || newSpeed > Emulator.getConfig().getInt("hotel.rollers.speed.maximum"))
+ {
+ gameClient.getHabbo().whisper(Emulator.getTexts().getValue("commands.error.cmd_setspeed.bounds"), RoomChatMessageBubbles.ALERT);
+ return true;
+ }
+
+ room.setRollerSpeed(newSpeed);
+
+ gameClient.getHabbo().whisper(Emulator.getTexts().getValue("commands.succes.cmd_setspeed").replace("%oldspeed%", oldSpeed + "").replace("%newspeed%", newSpeed + ""), RoomChatMessageBubbles.ALERT);
+ return true;
+ }
+ }
+ return false;
+ }
+}
diff --git a/src/main/java/com/eu/habbo/habbohotel/commands/ShoutAllCommand.java b/src/main/java/com/eu/habbo/habbohotel/commands/ShoutAllCommand.java
new file mode 100644
index 00000000..5496a561
--- /dev/null
+++ b/src/main/java/com/eu/habbo/habbohotel/commands/ShoutAllCommand.java
@@ -0,0 +1,47 @@
+package com.eu.habbo.habbohotel.commands;
+
+import com.eu.habbo.Emulator;
+import com.eu.habbo.habbohotel.gameclients.GameClient;
+import com.eu.habbo.habbohotel.rooms.RoomChatMessage;
+import com.eu.habbo.habbohotel.rooms.RoomChatMessageBubbles;
+import com.eu.habbo.habbohotel.users.Habbo;
+import com.eu.habbo.messages.outgoing.rooms.users.RoomUserShoutComposer;
+import com.eu.habbo.messages.outgoing.rooms.users.RoomUserWhisperComposer;
+import gnu.trove.iterator.TIntObjectIterator;
+import gnu.trove.map.TIntObjectMap;
+
+import java.util.NoSuchElementException;
+
+public class ShoutAllCommand extends Command
+{
+ public ShoutAllCommand()
+ {
+ super("cmd_shout_all", Emulator.getTexts().getValue("commands.keys.cmd_shout_all").split(";"));
+ }
+
+ @Override
+ public boolean handle(GameClient gameClient, String[] params) throws Exception
+ {
+ if(params.length < 2)
+ {
+ gameClient.getHabbo().whisper(Emulator.getTexts().getValue("commands.error.cmd_shout_all.forgot_message"), RoomChatMessageBubbles.ALERT);
+ return true;
+ }
+
+ String message = "";
+ if(params.length > 1)
+ {
+ for(int i = 1; i < params.length; i++)
+ {
+ message += params[i] + " ";
+ }
+ }
+
+ for (Habbo habbo : gameClient.getHabbo().getHabboInfo().getCurrentRoom().getHabbos())
+ {
+ habbo.shout(message);
+ }
+
+ return true;
+ }
+}
diff --git a/src/main/java/com/eu/habbo/habbohotel/commands/ShoutCommand.java b/src/main/java/com/eu/habbo/habbohotel/commands/ShoutCommand.java
new file mode 100644
index 00000000..e7d2e548
--- /dev/null
+++ b/src/main/java/com/eu/habbo/habbohotel/commands/ShoutCommand.java
@@ -0,0 +1,58 @@
+package com.eu.habbo.habbohotel.commands;
+
+import com.eu.habbo.Emulator;
+import com.eu.habbo.habbohotel.gameclients.GameClient;
+import com.eu.habbo.habbohotel.rooms.RoomChatMessage;
+import com.eu.habbo.habbohotel.rooms.RoomChatMessageBubbles;
+import com.eu.habbo.habbohotel.users.Habbo;
+import com.eu.habbo.messages.outgoing.rooms.users.RoomUserShoutComposer;
+import com.eu.habbo.messages.outgoing.rooms.users.RoomUserWhisperComposer;
+
+public class ShoutCommand extends Command
+{
+ private static String idea = "Kudo's To Droppy for this idea!";
+
+ public ShoutCommand()
+ {
+ super("cmd_shout", Emulator.getTexts().getValue("commands.keys.cmd_shout").split(";"));
+ }
+
+ @Override
+ public boolean handle(GameClient gameClient, String[] params) throws Exception
+ {
+ if(params.length < 2)
+ {
+ gameClient.getHabbo().whisper(Emulator.getTexts().getValue("commands.error.cmd_shout.forgot_username"), RoomChatMessageBubbles.ALERT);
+ return true;
+ }
+
+ Habbo target = Emulator.getGameEnvironment().getHabboManager().getHabbo(params[1]);
+
+ if(target == null)
+ {
+ gameClient.getHabbo().whisper(Emulator.getTexts().getValue("commands.error.cmd_shout.user_not_found"), RoomChatMessageBubbles.ALERT);
+ return true;
+ }
+ else
+ {
+ if(target.getHabboInfo().getCurrentRoom() == null)
+ {
+ gameClient.getHabbo().whisper(Emulator.getTexts().getValue("commands.error.cmd_shout.hotel_view").replace("%user%", params[1]), RoomChatMessageBubbles.ALERT);
+ return true;
+ }
+ }
+
+ String message = "";
+ if(params.length > 2)
+ {
+ for(int i = 2; i < params.length; i++)
+ {
+ message += params[i] + " ";
+ }
+ }
+
+ target.getHabboInfo().getCurrentRoom().sendComposer(new RoomUserShoutComposer(new RoomChatMessage(message, target, RoomChatMessageBubbles.NORMAL)).compose());
+ gameClient.getHabbo().whisper(Emulator.getTexts().getValue("commands.succes.cmd_shout").replace("%user%", params[1]).replace("%message%", message), RoomChatMessageBubbles.ALERT);
+ return true;
+ }
+}
diff --git a/src/main/java/com/eu/habbo/habbohotel/commands/ShutdownCommand.java b/src/main/java/com/eu/habbo/habbohotel/commands/ShutdownCommand.java
new file mode 100644
index 00000000..ebac644e
--- /dev/null
+++ b/src/main/java/com/eu/habbo/habbohotel/commands/ShutdownCommand.java
@@ -0,0 +1,62 @@
+package com.eu.habbo.habbohotel.commands;
+
+import com.eu.habbo.Emulator;
+import com.eu.habbo.habbohotel.gameclients.GameClient;
+import com.eu.habbo.messages.ServerMessage;
+import com.eu.habbo.messages.outgoing.generic.alerts.GenericAlertComposer;
+import com.eu.habbo.messages.outgoing.generic.alerts.HotelWillCloseInMinutesComposer;
+import com.eu.habbo.threading.runnables.ShutdownEmulator;
+
+public class ShutdownCommand extends Command
+{
+ public ShutdownCommand()
+ {
+ super("cmd_shutdown", Emulator.getTexts().getValue("commands.keys.cmd_shutdown").split(";"));
+ }
+
+ @Override
+ public boolean handle(GameClient gameClient, String[] params) throws Exception
+ {
+ String reason = "-";
+ int minutes = 0;
+ if(params.length > 2)
+ {
+ reason = "";
+ for(int i = 1; i < params.length; i++)
+ {
+ reason += params[i] + " ";
+ }
+ }
+ else
+ {
+ if (params.length == 2)
+ {
+ try
+ {
+ minutes = Integer.valueOf(params[1]);
+ }
+ catch (Exception e)
+ {
+ reason = params[1];
+ }
+ }
+ }
+
+ ServerMessage message = null;
+ if (!reason.equals("-"))
+ {
+ message = new GenericAlertComposer("" + Emulator.getTexts().getValue("generic.warning") + " \r\n" +
+ Emulator.getTexts().getValue("generic.shutdown").replace("%minutes%", minutes + "") + "\r\n" +
+ Emulator.getTexts().getValue("generic.reason.specified") + ": " + reason + "\r" +
+ "\r" +
+ "- " + gameClient.getHabbo().getHabboInfo().getUsername()).compose();
+ }
+ else
+ {
+ message = new HotelWillCloseInMinutesComposer(minutes).compose();
+ }
+ ShutdownEmulator.timestamp = Emulator.getIntUnixTimestamp() + (60 * minutes);
+ Emulator.getThreading().run(new ShutdownEmulator(message), minutes * 60 * 1000);
+ return true;
+ }
+}
diff --git a/src/main/java/com/eu/habbo/habbohotel/commands/SitCommand.java b/src/main/java/com/eu/habbo/habbohotel/commands/SitCommand.java
new file mode 100644
index 00000000..b756eac6
--- /dev/null
+++ b/src/main/java/com/eu/habbo/habbohotel/commands/SitCommand.java
@@ -0,0 +1,19 @@
+package com.eu.habbo.habbohotel.commands;
+
+import com.eu.habbo.Emulator;
+import com.eu.habbo.habbohotel.gameclients.GameClient;
+
+public class SitCommand extends Command
+{
+ public SitCommand()
+ {
+ super(null, Emulator.getTexts().getValue("commands.keys.cmd_sit").split(";"));
+ }
+
+ @Override
+ public boolean handle(GameClient gameClient, String[] params) throws Exception
+ {
+ gameClient.getHabbo().getHabboInfo().getCurrentRoom().makeSit(gameClient.getHabbo());
+ return true;
+ }
+}
diff --git a/src/main/java/com/eu/habbo/habbohotel/commands/SitDownCommand.java b/src/main/java/com/eu/habbo/habbohotel/commands/SitDownCommand.java
new file mode 100644
index 00000000..c526f38b
--- /dev/null
+++ b/src/main/java/com/eu/habbo/habbohotel/commands/SitDownCommand.java
@@ -0,0 +1,36 @@
+package com.eu.habbo.habbohotel.commands;
+
+import com.eu.habbo.Emulator;
+import com.eu.habbo.habbohotel.gameclients.GameClient;
+import com.eu.habbo.habbohotel.users.Habbo;
+import gnu.trove.iterator.TIntObjectIterator;
+import gnu.trove.map.TIntObjectMap;
+
+import java.util.NoSuchElementException;
+
+public class SitDownCommand extends Command
+{
+ public SitDownCommand()
+ {
+ super("cmd_sitdown", Emulator.getTexts().getValue("commands.keys.cmd_sitdown").split(";"));
+ }
+ @Override
+ public boolean handle(GameClient gameClient, String[] params) throws Exception
+ {
+ for (Habbo habbo : gameClient.getHabbo().getHabboInfo().getCurrentRoom().getHabbos())
+ {
+ if(habbo.getRoomUnit().isWalking())
+ {
+ habbo.getRoomUnit().stopWalking();
+ }
+ else if(habbo.getRoomUnit().getStatus().containsKey("sit"))
+ {
+ continue;
+ }
+
+ gameClient.getHabbo().getHabboInfo().getCurrentRoom().makeSit(habbo);
+ }
+
+ return true;
+ }
+}
diff --git a/src/main/java/com/eu/habbo/habbohotel/commands/StaffAlertCommand.java b/src/main/java/com/eu/habbo/habbohotel/commands/StaffAlertCommand.java
new file mode 100644
index 00000000..5c5e12a3
--- /dev/null
+++ b/src/main/java/com/eu/habbo/habbohotel/commands/StaffAlertCommand.java
@@ -0,0 +1,41 @@
+package com.eu.habbo.habbohotel.commands;
+
+import com.eu.habbo.Emulator;
+import com.eu.habbo.habbohotel.gameclients.GameClient;
+import com.eu.habbo.habbohotel.messenger.Message;
+import com.eu.habbo.habbohotel.rooms.RoomChatMessage;
+import com.eu.habbo.habbohotel.rooms.RoomChatMessageBubbles;
+import com.eu.habbo.messages.ServerMessage;
+import com.eu.habbo.messages.outgoing.friends.FriendChatMessageComposer;
+import com.eu.habbo.messages.outgoing.generic.alerts.GenericAlertComposer;
+import com.eu.habbo.messages.outgoing.rooms.users.RoomUserWhisperComposer;
+
+public class StaffAlertCommand extends Command
+{
+ public StaffAlertCommand()
+ {
+ super("cmd_staffalert", Emulator.getTexts().getValue("commands.keys.cmd_staffalert").split(";"));
+ }
+
+ @Override
+ public boolean handle(GameClient gameClient, String[] params) throws Exception
+ {
+ if(params.length > 1)
+ {
+ String message = "";
+ for (int i = 1; i < params.length; i++)
+ {
+ message += params[i] + " ";
+ }
+
+ Emulator.getGameEnvironment().getHabboManager().staffAlert(message + "\r\n-" + gameClient.getHabbo().getHabboInfo().getUsername());
+ Emulator.getGameServer().getGameClientManager().sendBroadcastResponse(new FriendChatMessageComposer(new Message(gameClient.getHabbo().getHabboInfo().getId(), -1, message)).compose(), "acc_staff_chat", gameClient);
+ }
+ else
+ {
+ gameClient.getHabbo().whisper(Emulator.getTexts().getValue("commands.error.cmd_staffalert.forgot_message"), RoomChatMessageBubbles.ALERT);
+ }
+
+ return true;
+ }
+}
diff --git a/src/main/java/com/eu/habbo/habbohotel/commands/StaffOnlineCommand.java b/src/main/java/com/eu/habbo/habbohotel/commands/StaffOnlineCommand.java
new file mode 100644
index 00000000..80a7562d
--- /dev/null
+++ b/src/main/java/com/eu/habbo/habbohotel/commands/StaffOnlineCommand.java
@@ -0,0 +1,88 @@
+package com.eu.habbo.habbohotel.commands;
+
+import com.eu.habbo.Emulator;
+import com.eu.habbo.habbohotel.gameclients.GameClient;
+import com.eu.habbo.habbohotel.rooms.RoomChatMessage;
+import com.eu.habbo.habbohotel.rooms.RoomChatMessageBubbles;
+import com.eu.habbo.habbohotel.users.Habbo;
+import com.eu.habbo.messages.outgoing.generic.alerts.GenericAlertComposer;
+import com.eu.habbo.messages.outgoing.rooms.users.RoomUserWhisperComposer;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.Map;
+
+public class StaffOnlineCommand extends Command
+{
+ public StaffOnlineCommand()
+ {
+ super("cmd_staffonline", Emulator.getTexts().getValue("commands.keys.cmd_staffonline").split(";"));
+ }
+
+ @Override
+ public boolean handle(GameClient gameClient, String[] params) throws Exception
+ {
+ int minRank = Emulator.getConfig().getInt("commands.cmd_staffonline.min_rank");
+
+ if(params.length >= 2)
+ {
+ try
+ {
+ int i = Integer.valueOf(params[1]);
+
+ if(i < 1)
+ {
+ gameClient.getHabbo().whisper(Emulator.getTexts().getValue("commands.error.cmd_staffonline.positive_only"), RoomChatMessageBubbles.ALERT);
+ return true;
+ }
+ else
+ {
+ minRank = i;
+ }
+ }
+ catch (Exception e)
+ {
+ gameClient.getHabbo().whisper(Emulator.getTexts().getValue("commands.error.cmd_staffonline.numbers_only"), RoomChatMessageBubbles.ALERT);
+ return true;
+ }
+ }
+
+ synchronized (Emulator.getGameEnvironment().getHabboManager().getOnlineHabbos())
+ {
+ ArrayList staffs = new ArrayList();
+
+ for(Map.Entry set : Emulator.getGameEnvironment().getHabboManager().getOnlineHabbos().entrySet())
+ {
+ if(set.getValue().getHabboInfo().getRank().getId() >= minRank)
+ {
+ staffs.add(set.getValue());
+ }
+ }
+
+ Collections.sort(staffs, new Comparator()
+ {
+ @Override
+ public int compare(Habbo o1, Habbo o2)
+ {
+ return o1.getHabboInfo().getId() - o2.getHabboInfo().getId();
+ }
+ });
+
+ String message = Emulator.getTexts().getValue("commands.generic.cmd_staffonline.staffs");
+ message += "\r\n";
+
+ for(Habbo habbo : staffs)
+ {
+ message += habbo.getHabboInfo().getUsername();
+ message += ": ";
+ message += habbo.getHabboInfo().getRank().getName();
+ message += "\r";
+ }
+
+ gameClient.sendResponse(new GenericAlertComposer(message));
+ }
+
+ return true;
+ }
+}
diff --git a/src/main/java/com/eu/habbo/habbohotel/commands/StalkCommand.java b/src/main/java/com/eu/habbo/habbohotel/commands/StalkCommand.java
new file mode 100644
index 00000000..b21e7482
--- /dev/null
+++ b/src/main/java/com/eu/habbo/habbohotel/commands/StalkCommand.java
@@ -0,0 +1,65 @@
+package com.eu.habbo.habbohotel.commands;
+
+import com.eu.habbo.Emulator;
+import com.eu.habbo.habbohotel.gameclients.GameClient;
+import com.eu.habbo.habbohotel.rooms.RoomChatMessage;
+import com.eu.habbo.habbohotel.rooms.RoomChatMessageBubbles;
+import com.eu.habbo.habbohotel.users.Habbo;
+import com.eu.habbo.messages.outgoing.rooms.ForwardToRoomComposer;
+import com.eu.habbo.messages.outgoing.rooms.RoomDataComposer;
+import com.eu.habbo.messages.outgoing.rooms.RoomEntryInfoComposer;
+import com.eu.habbo.messages.outgoing.rooms.RoomOpenComposer;
+import com.eu.habbo.messages.outgoing.rooms.users.RoomUserWhisperComposer;
+
+public class StalkCommand extends Command
+{
+ public StalkCommand()
+ {
+ super("cmd_stalk", Emulator.getTexts().getValue("commands.keys.cmd_stalk").split(";"));
+ }
+
+ @Override
+ public boolean handle(GameClient gameClient, String[] params) throws Exception
+ {
+ if(gameClient.getHabbo().getHabboInfo().getCurrentRoom() == null)
+ return true;
+
+ if(params.length >= 2)
+ {
+ Habbo habbo = Emulator.getGameEnvironment().getHabboManager().getHabbo(params[1]);
+
+ if(habbo == null)
+ {
+ gameClient.getHabbo().whisper(Emulator.getTexts().getValue("commands.error.cmd_stalk.not_found").replace("%user%", params[1]), RoomChatMessageBubbles.ALERT);
+ return true;
+ }
+
+ if(habbo.getHabboInfo().getCurrentRoom() == null)
+ {
+ gameClient.getHabbo().whisper(Emulator.getTexts().getValue("commands.error.cmd_stalk.not_room").replace("%user%", params[1]), RoomChatMessageBubbles.ALERT);
+ return true;
+ }
+
+ if(gameClient.getHabbo().getHabboInfo().getUsername().equals(habbo.getHabboInfo().getUsername()))
+ {
+ gameClient.getHabbo().whisper(Emulator.getTexts().getValue("commands.generic.cmd_stalk.self").replace("%user%", params[1]), RoomChatMessageBubbles.ALERT);
+ return true;
+ }
+
+ if(gameClient.getHabbo().getHabboInfo().getCurrentRoom() == habbo.getHabboInfo().getCurrentRoom())
+ {
+ gameClient.getHabbo().whisper(Emulator.getTexts().getValue("commands.generic.cmd_stalk.same_room").replace("%user%", params[1]), RoomChatMessageBubbles.ALERT);
+ return true;
+ }
+
+ gameClient.sendResponse(new RoomDataComposer(habbo.getHabboInfo().getCurrentRoom(), gameClient.getHabbo(), true, false));
+ //gameClient.sendResponse(new ForwardToRoomComposer(habbo.getHabboInfo().getCurrentRoom().getId()));
+ return true;
+ }
+ else
+ {
+ gameClient.getHabbo().whisper(Emulator.getTexts().getValue("commands.error.cmd_summon.forgot_username"), RoomChatMessageBubbles.ALERT);
+ return true;
+ }
+ }
+}
diff --git a/src/main/java/com/eu/habbo/habbohotel/commands/SummonCommand.java b/src/main/java/com/eu/habbo/habbohotel/commands/SummonCommand.java
new file mode 100644
index 00000000..dd742d93
--- /dev/null
+++ b/src/main/java/com/eu/habbo/habbohotel/commands/SummonCommand.java
@@ -0,0 +1,76 @@
+package com.eu.habbo.habbohotel.commands;
+
+import com.eu.habbo.Emulator;
+import com.eu.habbo.habbohotel.gameclients.GameClient;
+import com.eu.habbo.habbohotel.rooms.RoomChatMessage;
+import com.eu.habbo.habbohotel.rooms.RoomChatMessageBubbles;
+import com.eu.habbo.habbohotel.rooms.RoomTile;
+import com.eu.habbo.habbohotel.users.Habbo;
+import com.eu.habbo.messages.outgoing.generic.alerts.GenericAlertComposer;
+import com.eu.habbo.messages.outgoing.rooms.ForwardToRoomComposer;
+import com.eu.habbo.messages.outgoing.rooms.HideDoorbellComposer;
+import com.eu.habbo.messages.outgoing.rooms.users.RoomUserWhisperComposer;
+
+public class SummonCommand extends Command
+{
+ public SummonCommand()
+ {
+ super("cmd_summon", Emulator.getTexts().getValue("commands.keys.cmd_summon").split(";"));
+ }
+
+ @Override
+ public boolean handle(GameClient gameClient, String[] params) throws Exception
+ {
+ if(gameClient.getHabbo().getHabboInfo().getCurrentRoom() == null)
+ return true;
+
+ if(params.length >= 2)
+ {
+ Habbo habbo = Emulator.getGameEnvironment().getHabboManager().getHabbo(params[1]);
+
+ if(habbo == null)
+ {
+ gameClient.getHabbo().whisper(Emulator.getTexts().getValue("commands.error.cmd_summon.not_found").replace("%user%", params[1]), RoomChatMessageBubbles.ALERT);
+ return true;
+ }
+
+ if(gameClient.getHabbo().getHabboInfo().getUsername().equals(habbo.getHabboInfo().getUsername()))
+ {
+ gameClient.getHabbo().whisper(Emulator.getTexts().getValue("commands.generic.cmd_summon.self").replace("%user%", params[1]), RoomChatMessageBubbles.ALERT);
+ return true;
+ }
+
+ if(gameClient.getHabbo().getHabboInfo().getCurrentRoom() == habbo.getHabboInfo().getCurrentRoom())
+ {
+ gameClient.getHabbo().whisper(Emulator.getTexts().getValue("commands.generic.cmd_summon.same_room").replace("%user%", params[1]), RoomChatMessageBubbles.ALERT);
+ return true;
+ }
+
+ gameClient.getHabbo().whisper(Emulator.getTexts().getValue("commands.generic.cmd_summon.summoning").replace("%user%", params[1]), RoomChatMessageBubbles.ALERT);
+
+ //Emulator.getGameEnvironment().getRoomManager().leaveRoom(habbo, habbo.getHabboInfo().getCurrentRoom());
+
+ habbo.getClient().sendResponse(new ForwardToRoomComposer(gameClient.getHabbo().getHabboInfo().getCurrentRoom().getId()));
+ Emulator.getGameEnvironment().getRoomManager().enterRoom(habbo, gameClient.getHabbo().getHabboInfo().getCurrentRoom().getId(), "", true);
+ habbo.getClient().sendResponse(new HideDoorbellComposer(""));
+
+ gameClient.getHabbo().whisper(Emulator.getTexts().getValue("commands.succes.cmd_summon.summoned").replace("%user%", params[1]), RoomChatMessageBubbles.ALERT);
+
+ RoomTile t = gameClient.getHabbo().getHabboInfo().getCurrentRoom().getLayout().getTileInFront(gameClient.getHabbo().getRoomUnit().getCurrentLocation(), gameClient.getHabbo().getRoomUnit().getBodyRotation().getValue());
+
+ if(t != null && gameClient.getHabbo().getHabboInfo().getCurrentRoom().tileWalkable(t))
+ {
+ habbo.getRoomUnit().setGoalLocation(t);
+ }
+
+ habbo.getClient().sendResponse(new GenericAlertComposer(Emulator.getTexts().getValue("commands.generic.cmd_summon.been_summoned").replace("%user%", gameClient.getHabbo().getHabboInfo().getUsername())));
+
+ return true;
+ }
+ else
+ {
+ gameClient.getHabbo().whisper(Emulator.getTexts().getValue("commands.error.cmd_summon.forgot_username"), RoomChatMessageBubbles.ALERT);
+ return true;
+ }
+ }
+}
diff --git a/src/main/java/com/eu/habbo/habbohotel/commands/SummonRankCommand.java b/src/main/java/com/eu/habbo/habbohotel/commands/SummonRankCommand.java
new file mode 100644
index 00000000..900c4d58
--- /dev/null
+++ b/src/main/java/com/eu/habbo/habbohotel/commands/SummonRankCommand.java
@@ -0,0 +1,56 @@
+package com.eu.habbo.habbohotel.commands;
+
+import com.eu.habbo.Emulator;
+import com.eu.habbo.habbohotel.gameclients.GameClient;
+import com.eu.habbo.habbohotel.rooms.RoomChatMessage;
+import com.eu.habbo.habbohotel.rooms.RoomChatMessageBubbles;
+import com.eu.habbo.habbohotel.users.Habbo;
+import com.eu.habbo.messages.outgoing.rooms.ForwardToRoomComposer;
+import com.eu.habbo.messages.outgoing.rooms.users.RoomUserWhisperComposer;
+
+import java.util.Map;
+
+public class SummonRankCommand extends Command
+{
+ public SummonRankCommand()
+ {
+ super("cmd_summonrank", Emulator.getTexts().getValue("commands.keys.cmd_summonrank").split(";"));
+ }
+
+ @Override
+ public boolean handle(GameClient gameClient, String[] params) throws Exception
+ {
+ int minRank = 1;
+
+ if(params.length >= 2)
+ {
+ try
+ {
+ minRank = Integer.valueOf(params[1]);
+ }
+ catch (Exception e)
+ {
+ gameClient.getHabbo().whisper(Emulator.getTexts().getValue("commands.generic.cmd_summonrank.error"), RoomChatMessageBubbles.ALERT);
+ return true;
+ }
+
+ for(Map.Entry set : Emulator.getGameEnvironment().getHabboManager().getOnlineHabbos().entrySet())
+ {
+ if(set.getValue().getHabboInfo().getRank().getId() >= minRank)
+ {
+ if(set.getValue() == gameClient.getHabbo())
+ continue;
+
+ if (set.getValue().getHabboInfo().getCurrentRoom() == gameClient.getHabbo().getHabboInfo().getCurrentRoom())
+ continue;
+
+ Emulator.getGameEnvironment().getRoomManager().leaveRoom(set.getValue(), set.getValue().getHabboInfo().getCurrentRoom());
+ set.getValue().getClient().sendResponse(new ForwardToRoomComposer(gameClient.getHabbo().getHabboInfo().getCurrentRoom().getId()));
+ Emulator.getGameEnvironment().getRoomManager().enterRoom(set.getValue(), gameClient.getHabbo().getHabboInfo().getCurrentRoom().getId(), "", true);
+ }
+ }
+ }
+
+ return true;
+ }
+}
diff --git a/src/main/java/com/eu/habbo/habbohotel/commands/SuperPullCommand.java b/src/main/java/com/eu/habbo/habbohotel/commands/SuperPullCommand.java
new file mode 100644
index 00000000..ec5a48bd
--- /dev/null
+++ b/src/main/java/com/eu/habbo/habbohotel/commands/SuperPullCommand.java
@@ -0,0 +1,57 @@
+package com.eu.habbo.habbohotel.commands;
+
+import com.eu.habbo.Emulator;
+import com.eu.habbo.habbohotel.gameclients.GameClient;
+import com.eu.habbo.habbohotel.rooms.RoomChatMessage;
+import com.eu.habbo.habbohotel.rooms.RoomChatMessageBubbles;
+import com.eu.habbo.habbohotel.rooms.RoomTile;
+import com.eu.habbo.habbohotel.users.Habbo;
+import com.eu.habbo.habbohotel.users.HabboGender;
+import com.eu.habbo.messages.outgoing.rooms.users.RoomUserTalkComposer;
+import com.eu.habbo.messages.outgoing.rooms.users.RoomUserWhisperComposer;
+
+public class SuperPullCommand extends Command
+{
+ public SuperPullCommand()
+ {
+ super("cmd_superpull", Emulator.getTexts().getValue("commands.keys.cmd_superpull").split(";"));
+ }
+
+ @Override
+ public boolean handle(GameClient gameClient, String[] params) throws Exception
+ {
+ if(params.length == 2)
+ {
+ Habbo habbo = gameClient.getHabbo().getHabboInfo().getCurrentRoom().getHabbo(params[1]);
+
+ if(habbo == null)
+ {
+ gameClient.getHabbo().whisper(Emulator.getTexts().getValue("commands.error.cmd_pull.not_found").replace("%user%", params[1]), RoomChatMessageBubbles.ALERT);
+ return true;
+ }
+ else if(habbo == gameClient.getHabbo())
+ {
+ gameClient.getHabbo().whisper(Emulator.getTexts().getValue("commands.error.cmd_pull.pull_self"), RoomChatMessageBubbles.ALERT);
+ return true;
+ }
+ else
+ {
+ RoomTile tile = gameClient.getHabbo().getHabboInfo().getCurrentRoom().getLayout().getTileInFront(gameClient.getHabbo().getRoomUnit().getCurrentLocation(), gameClient.getHabbo().getRoomUnit().getBodyRotation().getValue());
+
+ if (tile != null && tile.isWalkable())
+ {
+ if (tile == gameClient.getHabbo().getHabboInfo().getCurrentRoom().getLayout().getDoorTile())
+ {
+ gameClient.getHabbo().whisper(Emulator.getTexts().getValue("commands.error.cmd_pull.invalid").replace("%username%", params[1]), RoomChatMessageBubbles.ALERT);
+ return true;
+ }
+ habbo.getRoomUnit().setGoalLocation(tile);
+ gameClient.getHabbo().getHabboInfo().getCurrentRoom().sendComposer(new RoomUserTalkComposer(new RoomChatMessage(Emulator.getTexts().getValue("commands.succes.cmd_pull.pull").replace("%user%", params[1]).replace("%gender_name%", (gameClient.getHabbo().getHabboInfo().getGender().equals(HabboGender.M) ? Emulator.getTexts().getValue("gender.him") : Emulator.getTexts().getValue("gender.her"))), gameClient.getHabbo(), gameClient.getHabbo(), RoomChatMessageBubbles.NORMAL)).compose());
+ }
+ }
+ return true;
+ }
+
+ return true;
+ }
+}
diff --git a/src/main/java/com/eu/habbo/habbohotel/commands/SuperbanCommand.java b/src/main/java/com/eu/habbo/habbohotel/commands/SuperbanCommand.java
new file mode 100644
index 00000000..1907291e
--- /dev/null
+++ b/src/main/java/com/eu/habbo/habbohotel/commands/SuperbanCommand.java
@@ -0,0 +1,76 @@
+package com.eu.habbo.habbohotel.commands;
+
+import com.eu.habbo.Emulator;
+import com.eu.habbo.habbohotel.gameclients.GameClient;
+import com.eu.habbo.habbohotel.modtool.ModToolBan;
+import com.eu.habbo.habbohotel.modtool.ModToolBanType;
+import com.eu.habbo.habbohotel.rooms.RoomChatMessage;
+import com.eu.habbo.habbohotel.rooms.RoomChatMessageBubbles;
+import com.eu.habbo.habbohotel.users.Habbo;
+import com.eu.habbo.habbohotel.users.HabboInfo;
+import com.eu.habbo.habbohotel.users.HabboManager;
+import com.eu.habbo.messages.outgoing.rooms.users.RoomUserWhisperComposer;
+
+public class SuperbanCommand extends Command
+{
+ public SuperbanCommand()
+ {
+ super("cmd_super_ban", Emulator.getTexts().getValue("commands.keys.cmd_super_ban").split(";"));
+ }
+
+ @Override
+ public boolean handle(GameClient gameClient, String[] params) throws Exception
+ {
+ HabboInfo habbo = null;
+ String reason = "";
+ if (params.length >= 2)
+ {
+ Habbo h = Emulator.getGameEnvironment().getHabboManager().getHabbo(params[1]);
+
+ if (h != null)
+ {
+ habbo = h.getHabboInfo();
+ }
+ else
+ {
+ habbo = HabboManager.getOfflineHabboInfo(params[1]);
+ }
+ }
+
+ if (params.length > 2)
+ {
+ for (int i = 2; i < params.length; i++)
+ {
+ reason += params[i];
+ reason += " ";
+ }
+ }
+
+ int count = 0;
+ if (habbo != null)
+ {
+ if (habbo == gameClient.getHabbo().getHabboInfo())
+ {
+ gameClient.getHabbo().whisper(Emulator.getTexts().getValue("commands.error.cmd_super_ban.ban_self"), RoomChatMessageBubbles.ALERT);
+ return true;
+ }
+
+ if (habbo.getRank().getId() >= gameClient.getHabbo().getHabboInfo().getRank().getId())
+ {
+ gameClient.getHabbo().whisper(Emulator.getTexts().getValue("commands.error.cmd_ban.target_rank_higher"), RoomChatMessageBubbles.ALERT);
+ return true;
+ }
+
+ count = Emulator.getGameEnvironment().getModToolManager().ban(habbo.getId(), gameClient.getHabbo(), reason, IPBanCommand.TEN_YEARS, ModToolBanType.SUPER, -1).size();
+ }
+ else
+ {
+ gameClient.getHabbo().whisper(Emulator.getTexts().getValue("commands.error.cmd_ban.user_offline"), RoomChatMessageBubbles.ALERT);
+ return true;
+ }
+
+ gameClient.getHabbo().whisper(Emulator.getTexts().getValue("commands.succes.cmd_super_ban").replace("%count%", count + ""), RoomChatMessageBubbles.ALERT);
+
+ return true;
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/com/eu/habbo/habbohotel/commands/TakeBadgeCommand.java b/src/main/java/com/eu/habbo/habbohotel/commands/TakeBadgeCommand.java
new file mode 100644
index 00000000..d32d35c7
--- /dev/null
+++ b/src/main/java/com/eu/habbo/habbohotel/commands/TakeBadgeCommand.java
@@ -0,0 +1,61 @@
+package com.eu.habbo.habbohotel.commands;
+
+import com.eu.habbo.Emulator;
+import com.eu.habbo.habbohotel.gameclients.GameClient;
+import com.eu.habbo.habbohotel.rooms.RoomChatMessage;
+import com.eu.habbo.habbohotel.rooms.RoomChatMessageBubbles;
+import com.eu.habbo.habbohotel.users.Habbo;
+import com.eu.habbo.habbohotel.users.HabboBadge;
+import com.eu.habbo.habbohotel.users.inventory.BadgesComponent;
+import com.eu.habbo.messages.outgoing.inventory.InventoryBadgesComposer;
+import com.eu.habbo.messages.outgoing.rooms.users.RoomUserWhisperComposer;
+
+public class TakeBadgeCommand extends Command
+{
+ public TakeBadgeCommand()
+ {
+ super("cmd_take_badge", Emulator.getTexts().getValue("commands.keys.cmd_take_badge").split(";"));
+ }
+
+ @Override
+ public boolean handle(GameClient gameClient, String[] params) throws Exception
+ {
+ if (params.length == 2)
+ {
+ gameClient.getHabbo().whisper(Emulator.getTexts().getValue("commands.error.cmd_take_badge.forgot_badge"), RoomChatMessageBubbles.ALERT);
+ return true;
+ }
+ else if ( params.length == 1)
+ {
+ gameClient.getHabbo().whisper(Emulator.getTexts().getValue("commands.error.cmd_take_badge.forgot_username"), RoomChatMessageBubbles.ALERT);
+ return true;
+ }
+
+ if (params.length == 3)
+ {
+ String username = params[1];
+ String badge = params[2];
+
+ Habbo habbo = Emulator.getGameEnvironment().getHabboManager().getHabbo(username);
+
+ if (habbo != null)
+ {
+ HabboBadge b = habbo.getInventory().getBadgesComponent().removeBadge(badge);
+
+ if (b == null)
+ {
+ gameClient.getHabbo().whisper(Emulator.getTexts().getValue("commands.error.cmd_take_badge.no_badge").replace("%username%", username).replace("%badge%", badge), RoomChatMessageBubbles.ALERT);
+ return true;
+ }
+
+ habbo.getClient().sendResponse(new InventoryBadgesComposer(habbo));
+ }
+
+ gameClient.getHabbo().whisper(Emulator.getTexts().getValue("commands.succes.cmd_take_badge"), RoomChatMessageBubbles.ALERT);
+
+ BadgesComponent.deleteBadge(username, badge);
+ }
+
+ return true;
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/com/eu/habbo/habbohotel/commands/TeleportCommand.java b/src/main/java/com/eu/habbo/habbohotel/commands/TeleportCommand.java
new file mode 100644
index 00000000..2ad50840
--- /dev/null
+++ b/src/main/java/com/eu/habbo/habbohotel/commands/TeleportCommand.java
@@ -0,0 +1,32 @@
+package com.eu.habbo.habbohotel.commands;
+
+import com.eu.habbo.Emulator;
+import com.eu.habbo.habbohotel.gameclients.GameClient;
+import com.eu.habbo.habbohotel.rooms.RoomChatMessage;
+import com.eu.habbo.habbohotel.rooms.RoomChatMessageBubbles;
+import com.eu.habbo.messages.outgoing.rooms.users.RoomUserWhisperComposer;
+
+public class TeleportCommand extends Command
+{
+ public TeleportCommand()
+ {
+ super("cmd_teleport", Emulator.getTexts().getValue("commands.keys.cmd_teleport").split(";"));
+ }
+
+ @Override
+ public boolean handle(GameClient gameClient, String[] params) throws Exception
+ {
+ if(gameClient.getHabbo().getRoomUnit().cmdTeleport)
+ {
+ gameClient.getHabbo().getRoomUnit().cmdTeleport = false;
+ gameClient.getHabbo().whisper(Emulator.getTexts().getValue("commands.succes.cmd_teleport.disabled"), RoomChatMessageBubbles.ALERT);
+ return true;
+ }
+ else
+ {
+ gameClient.getHabbo().getRoomUnit().cmdTeleport = true;
+ gameClient.getHabbo().whisper(Emulator.getTexts().getValue("commands.succes.cmd_teleport.enabled"), RoomChatMessageBubbles.ALERT);
+ return true;
+ }
+ }
+}
diff --git a/src/main/java/com/eu/habbo/habbohotel/commands/TestCommand.java b/src/main/java/com/eu/habbo/habbohotel/commands/TestCommand.java
new file mode 100644
index 00000000..a593c37e
--- /dev/null
+++ b/src/main/java/com/eu/habbo/habbohotel/commands/TestCommand.java
@@ -0,0 +1,622 @@
+package com.eu.habbo.habbohotel.commands;
+
+import com.eu.habbo.Emulator;
+import com.eu.habbo.habbohotel.achievements.AchievementManager;
+import com.eu.habbo.habbohotel.bots.Bot;
+import com.eu.habbo.habbohotel.gameclients.GameClient;
+import com.eu.habbo.habbohotel.pets.AbstractPet;
+import com.eu.habbo.habbohotel.pets.MonsterplantPet;
+import com.eu.habbo.habbohotel.pets.Pet;
+import com.eu.habbo.habbohotel.pets.PetManager;
+import com.eu.habbo.habbohotel.rooms.Room;
+import com.eu.habbo.habbohotel.rooms.RoomChatMessage;
+import com.eu.habbo.habbohotel.rooms.RoomChatMessageBubbles;
+import com.eu.habbo.habbohotel.rooms.RoomTile;
+import com.eu.habbo.habbohotel.users.Habbo;
+import com.eu.habbo.habbohotel.users.HabboItem;
+import com.eu.habbo.messages.ServerMessage;
+import com.eu.habbo.messages.incoming.Incoming;
+import com.eu.habbo.messages.incoming.gamecenter.GameCenterRequestAccountStatusEvent;
+import com.eu.habbo.messages.incoming.gamecenter.GameCenterRequestGamesEvent;
+import com.eu.habbo.messages.incoming.rooms.pets.MovePetEvent;
+import com.eu.habbo.messages.outgoing.MessageComposer;
+import com.eu.habbo.messages.outgoing.Outgoing;
+import com.eu.habbo.messages.outgoing.events.calendar.AdventCalendarDataComposer;
+import com.eu.habbo.messages.outgoing.generic.alerts.GenericAlertComposer;
+import com.eu.habbo.messages.outgoing.generic.alerts.MessagesForYouComposer;
+import com.eu.habbo.messages.outgoing.rooms.pets.PetInformationComposer;
+import com.eu.habbo.messages.outgoing.rooms.pets.PetStatusUpdateComposer;
+import com.eu.habbo.messages.outgoing.rooms.users.RoomUserDataComposer;
+import com.eu.habbo.messages.outgoing.rooms.users.RoomUserStatusComposer;
+import com.eu.habbo.messages.outgoing.rooms.users.RoomUserWhisperComposer;
+import com.eu.habbo.messages.outgoing.unknown.NuxAlertComposer;
+import com.eu.habbo.messages.outgoing.users.UserDataComposer;
+import com.zaxxer.hikari.HikariConfig;
+import com.zaxxer.hikari.HikariDataSource;
+import gnu.trove.procedure.TObjectProcedure;
+import org.joda.time.Days;
+
+import java.sql.Connection;
+import java.sql.PreparedStatement;
+import java.text.Normalizer;
+import java.time.Duration;
+import java.time.LocalDate;
+import java.time.Period;
+import java.time.temporal.ChronoUnit;
+import java.util.*;
+import java.util.concurrent.Callable;
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.Executors;
+import java.util.concurrent.Future;
+
+public class TestCommand extends Command
+{
+ public static boolean stopThreads = true;
+
+ public TestCommand()
+ {
+ super("acc_debug", new String[]{ "test" });
+ }
+
+ @Override
+ public boolean handle(GameClient gameClient, String[] params) throws Exception
+ {
+// if (true)
+// return false;
+
+ if (params[1].equals("ach"))
+ {
+ AchievementManager.progressAchievement(gameClient.getHabbo(), Emulator.getGameEnvironment().getAchievementManager().getAchievement("GiftGiver"), 100);
+ return true;
+ }
+
+ if (params[1].equals("asddsa"))
+ {
+ gameClient.getHabbo().getHabboStats().addAchievementScore(1000);
+ gameClient.getHabbo().getHabboInfo().getCurrentRoom().sendComposer(new RoomUserDataComposer(gameClient.getHabbo()).compose());
+ return true;
+ }
+
+ if (params[1].equals("gc"))
+ {
+
+ Emulator.getGameServer().getPacketManager().registerHandler(Incoming.GameCenterRequestGamesEvent, GameCenterRequestGamesEvent.class);
+ Emulator.getGameServer().getPacketManager().registerHandler(Incoming.GameCenterRequestAccountStatusEvent, GameCenterRequestAccountStatusEvent.class);
+ return true;
+ }
+
+ if (params[1].equals("namechange"))
+ {
+ gameClient.sendResponse(new UserDataComposer(gameClient.getHabbo()));
+ return true;
+ }
+ //Emulator.getGameEnvironment().getRoomManager().clearInactiveRooms();
+ //gameClient.sendResponse(new RoomDataComposer(gameClient.getHabbo().getHabboInfo().getCurrentRoom(), gameClient.getHabbo(), true, false));
+
+ if (params[1].equals("uach"))
+ {
+ Emulator.getGameEnvironment().getAchievementManager().reload();
+ }
+
+ if(params[1].equals("units"))
+ {
+ String s = "";
+
+ for(Habbo habbo : gameClient.getHabbo().getHabboInfo().getCurrentRoom().getHabbos())
+ {
+ s += "Habbo ID: " + habbo.getHabboInfo().getId() + ", RoomUnit ID: " + habbo.getRoomUnit().getId() + "\r";
+ }
+
+ for (AbstractPet pet : gameClient.getHabbo().getHabboInfo().getCurrentRoom().getCurrentPets().valueCollection())
+ {
+ s += "Pet ID: " + pet.getId() + ", RoomUnit ID: " + pet.getRoomUnit().getId() + ", Name: " + pet.getName();
+
+ if (pet instanceof MonsterplantPet)
+ {
+ s += ", B:" + (((MonsterplantPet) pet).canBreed() ? "Y" : "N") +
+ ", PB: " + (((MonsterplantPet)pet).isPubliclyBreedable() ? "Y" : "N" ) +
+ ", D: " + (((MonsterplantPet) pet).isDead() ? "Y" : "N");
+ }
+
+ s += "\r";
+ }
+
+ gameClient.sendResponse(new MessagesForYouComposer(new String[]{s}));
+ return true;
+ }
+
+ if (params[1].equalsIgnoreCase("rebr"))
+ {
+ for (AbstractPet pet : gameClient.getHabbo().getHabboInfo().getCurrentRoom().getCurrentPets().valueCollection())
+ {
+ if (pet instanceof MonsterplantPet)
+ {
+ ((MonsterplantPet) pet).setPubliclyBreedable(false);
+ ((MonsterplantPet) pet).setCanBreed(true);
+ gameClient.getHabbo().getHabboInfo().getCurrentRoom().sendComposer(new PetStatusUpdateComposer((Pet) pet).compose());
+ gameClient.getHabbo().getHabboInfo().getCurrentRoom().sendComposer(new PetInformationComposer(pet, gameClient.getHabbo().getHabboInfo().getCurrentRoom()).compose());
+ }
+ }
+
+ return true;
+ }
+
+ if (params[1].equalsIgnoreCase("bots"))
+ {
+ String message = "";
+
+ for (Bot bot : gameClient.getHabbo().getHabboInfo().getCurrentRoom().getCurrentBots().valueCollection())
+ {
+ message += "Name: " + bot.getName() + ", ID: " + bot.getId() + ", RID: " + bot.getRoomUnit().getId() + ", Rot: " + bot.getRoomUnit().getBodyRotation() + "\r";
+ }
+
+ gameClient.sendResponse(new MessagesForYouComposer(new String[]{message}));
+ return true;
+ }
+
+ if (params[1].equalsIgnoreCase("packu"))
+ {
+ Emulator.getGameServer().getPacketManager().registerHandler(Incoming.MovePetEvent, MovePetEvent.class);
+ return true;
+ }
+
+ if(params[1].equals("a"))
+ {
+ int count = Integer.valueOf(params[2]);
+
+ for(int i = 0; i < count; i++)
+ {
+ gameClient.getHabbo().whisper("" + i, RoomChatMessageBubbles.getBubble(i));
+ }
+
+ return true;
+ }
+ else if(params[1].equals("b"))
+ {
+ try
+ {
+ int itemId = Integer.valueOf(params[2]);
+
+ HabboItem item = gameClient.getHabbo().getHabboInfo().getCurrentRoom().getHabboItem(itemId);
+
+ if(item != null)
+ {
+ item.setExtradata(params[3]);
+ gameClient.getHabbo().getHabboInfo().getCurrentRoom().updateItem(item);
+ }
+ }
+ catch (Exception e)
+ {
+
+ }
+ return true;
+ }
+ else if(params[1].equalsIgnoreCase("pet"))
+ {
+ AbstractPet pet = gameClient.getHabbo().getHabboInfo().getCurrentRoom().getPet(Integer.valueOf(params[2]));
+
+ if(pet instanceof Pet)
+ {
+ String a = "";
+ String b = "";
+ String c = "";
+ if(params[3] != null)
+ {
+ a = params[3];
+ if(params.length > 4)
+ {
+ b = params[4];
+ }
+ if(params.length > 5)
+ {
+ c = params[5];
+ }
+ pet.getRoomUnit().getStatus().put(a, b + " " + c);
+ gameClient.sendResponse(new RoomUserStatusComposer(pet.getRoomUnit()));
+ }
+ }
+ }
+ else if (params[1].equalsIgnoreCase("petc"))
+ {
+ AbstractPet pet = gameClient.getHabbo().getHabboInfo().getCurrentRoom().getPet(Integer.valueOf(params[2]));
+
+ if (pet != null)
+ {
+ pet.getRoomUnit().getStatus().clear();
+ gameClient.sendResponse(new RoomUserStatusComposer(pet.getRoomUnit()));
+ }
+ }
+ else if (params[1].equalsIgnoreCase("rand"))
+ {
+ Map results = new HashMap();
+
+ for (int i = 0; i < Integer.valueOf(params[2]); i++)
+ {
+ int random = PetManager.random(0, 12, Double.valueOf(params[3]));
+
+ if (!results.containsKey(random))
+ {
+ results.put(random, 0);
+ }
+
+ results.put(random, results.get(random) + 1);
+ }
+
+ String result = "Results : " + params[2] + "
";
+
+ for (Map.Entry set : results.entrySet())
+ {
+ result += set.getKey() + " -> " + set.getValue() + "
";
+ }
+
+ gameClient.sendResponse(new GenericAlertComposer(result));
+ }
+ else if (params[1].equalsIgnoreCase("threads"))
+ {
+ if (stopThreads)
+ {
+ stopThreads = false;
+ for (int i = 0; i < 30; i++)
+ {
+ final int finalI = i;
+ Emulator.getThreading().run(new Runnable()
+ {
+ @Override
+ public void run()
+ {
+ try
+ {
+ Thread.sleep(500);
+ Emulator.getLogging().logStart("Started " + finalI + " on " + Thread.currentThread().getName());
+ if (!TestCommand.stopThreads)
+ {
+ Emulator.getThreading().run(this);
+ }
+ }
+ catch (Exception e)
+ {
+ e.printStackTrace();
+ }
+ }
+ }, i * 10);
+ }
+ }
+ else
+ {
+ stopThreads = true;
+ }
+ }
+ else if (params[1].equalsIgnoreCase("pethere"))
+ {
+ Room room = gameClient.getHabbo().getHabboInfo().getCurrentRoom();
+ List tiles = room.getLayout().getTilesAround(gameClient.getHabbo().getRoomUnit().getCurrentLocation());
+
+ room.getCurrentPets().forEachValue(new TObjectProcedure()
+ {
+ @Override
+ public boolean execute(AbstractPet object)
+ {
+ Emulator.getThreading().run(new Runnable()
+ {
+ @Override
+ public void run()
+ {
+ object.getRoomUnit().setGoalLocation(tiles.get(Emulator.getRandom().nextInt(tiles.size())));
+ }
+ });
+ return true;
+ }
+ });
+ }
+ else if(params[1].equalsIgnoreCase("st"))
+ {
+ gameClient.getHabbo().getRoomUnit().getStatus().put(params[2], params[3]);
+ gameClient.sendResponse(new RoomUserStatusComposer(gameClient.getHabbo().getRoomUnit()));
+ }
+ else if (params[1].equalsIgnoreCase("filt"))
+ {
+ gameClient.sendResponse(new GenericAlertComposer(Normalizer.normalize(params[2], Normalizer.Form.NFD).replaceAll("\\p{InCombiningDiacriticalMarks}+", "").replaceAll("\\p{M}", "")));
+ }
+ else if (params[1].equalsIgnoreCase("nux"))
+ {
+ gameClient.sendResponse(new MessageComposer()
+ {
+ @Override
+ public ServerMessage compose()
+ {
+ this.response.init(Outgoing.NewUserGiftComposer);
+
+ this.response.appendInt(1); //?
+ this.response.appendInt(1); // element 1
+ this.response.appendInt(2); // element 2
+ this.response.appendInt(6); // Totaal cadeaus?
+
+ String[] gift1 = {"throne.png", "throne"}; //Emulator.getConfig().getValue("nux.gift.1").split(";");
+ String[] gift2 = {"throne.png", "throne"}; //Emulator.getConfig().getValue("nux.gift.2").split(";");
+ String[] gift3 = {"throne.png", "throne"}; //Emulator.getConfig().getValue("nux.gift.3").split(";");
+
+ this.response.appendString(gift1[0]);
+ this.response.appendInt(2);
+ this.response.appendString(gift1[1]);
+ this.response.appendString("");
+ this.response.appendString("typewriter");
+ this.response.appendString("");
+
+ this.response.appendString(gift2[0]);
+ this.response.appendInt(1);
+ this.response.appendString(gift2[1]);
+ this.response.appendString("");
+
+ this.response.appendString(gift3[0]);
+ this.response.appendInt(1);
+ this.response.appendString(gift3[1]);
+ this.response.appendString("");
+
+ this.response.appendString(gift1[0]);
+ this.response.appendInt(2);
+ this.response.appendString(gift1[1]);
+ this.response.appendString("");
+ this.response.appendString("typewriter");
+ this.response.appendString("");
+
+ this.response.appendString(gift2[0]);
+ this.response.appendInt(1);
+ this.response.appendString(gift2[1]);
+ this.response.appendString("");
+
+ this.response.appendString(gift3[0]);
+ this.response.appendInt(1);
+ this.response.appendString(gift3[1]);
+ this.response.appendString("");
+
+ return this.response;
+ }
+ });
+ }
+ else if (params[1].equals("adv"))
+ {
+ }
+ else if (params[1].equals("datb"))
+ {
+ long millis = 1;
+ long diff = 1;
+ try(Connection conn = Emulator.getDatabase().getDataSource().getConnection())
+ {
+ millis = System.currentTimeMillis();
+ for (long i = 0; i < 1000000; i++)
+ {
+ try (PreparedStatement stmt = conn.prepareStatement("SELECT 1"))
+ {
+ //PreparedStatement stmt2 = conn.prepareStatement("SELECT 2");
+ stmt.close();
+ }
+ //stmt2.close();
+ }
+ diff = System.currentTimeMillis() - millis;
+ }
+ catch (Exception e)
+ {
+ e.printStackTrace();
+ }
+ System.out.println("Difference " + (diff) + "MS. ops: " + ((long)1000000 / diff) + " ops/MS");
+
+ }
+ else
+ {
+ try
+ {
+ int header = Integer.valueOf(params[1]);
+
+ ServerMessage message = new ServerMessage(header);
+
+ for (int i = 1; i < params.length; i++)
+ {
+ String[] data = params[i].split(":");
+
+ if (data[0].equalsIgnoreCase("b"))
+ {
+ message.appendBoolean(data[1].equalsIgnoreCase("1"));
+ } else if (data[0].equalsIgnoreCase("s"))
+ {
+ if (data.length > 1)
+ {
+ message.appendString(data[1].replace("%http%", "http://"));
+ } else
+ {
+ message.appendString("");
+ }
+ } else if (data[0].equals("i"))
+ {
+ message.appendInt(Integer.valueOf(data[1]));
+ } else if (data[0].equalsIgnoreCase("by"))
+ {
+ message.appendByte(Integer.valueOf(data[1]));
+ } else if (data[0].equalsIgnoreCase("sh"))
+ {
+ message.appendShort(Integer.valueOf(data[1]));
+ }
+ }
+
+ Habbo habbo = Emulator.getGameEnvironment().getHabboManager().getHabbo("Admin");
+
+ if(habbo != null)
+ {
+ habbo.getClient().sendResponse(message);
+ }
+ } catch (Exception e)
+ {
+ gameClient.sendResponse(new GenericAlertComposer("Hey, what u doing m8."));
+
+ return false;
+ }
+ }
+
+
+ /*if(params[1].equalsIgnoreCase("r"))
+ {
+ gameClient.getHabbo().getRoomUnit().getStatus().remove(params[2]);
+ return true;
+ }
+ String s = "";
+ for(int i = 2; i < params.length; i++)
+ {
+ s+= params[i];
+
+ if(i + 1 < params.length)
+ {
+ s+= " ";
+ }
+ }
+
+ gameClient.getHabbo().getRoomUnit().getStatus().put(params[1], s);
+ gameClient.getHabbo().getHabboInfo().getCurrentRoom().sendComposer(new RoomUserStatusComposer(gameClient.getHabbo().getRoomUnit()).compose());*/
+ //if(params.length >= 2)
+ //{
+ // gameClient.sendResponse(new RoomUserActionComposer(gameClient.getHabbo().getRoomUnit(), Integer.valueOf(params[1])));
+ //}
+
+ /*if(params.length < 2)
+ return false;
+
+ /*
+ :test 1604 i:0 s:a i:1 i:2 i:3 i: 4 s:b i:3 i:1 i:1 s:Admin s:a s:M i:0 i:0 i:0 i:0
+ if(params[1].equalsIgnoreCase("purple"))
+ {
+ AbstractPet pet = gameClient.getHabbo().getHabboInfo().getCurrentRoom().getPet(13);
+
+ if(pet instanceof Pet)
+ {
+ String a = "";
+ String b = "";
+ String c = "";
+ if(params[2] != null)
+ {
+ a = params[2];
+ if(params.length >= 4)
+ {
+ b = params[3];
+ }
+ if(params.length >= 5)
+ {
+ c = params[4];
+ }
+ pet.getRoomUnit().getStatus().put(a, b + " " + c);
+ gameClient.sendResponse(new RoomUserStatusComposer(pet.getRoomUnit()));
+ }
+ }
+ }
+ else if(params[1].equalsIgnoreCase("clear"))
+ {
+ AbstractPet pet = gameClient.getHabbo().getHabboInfo().getCurrentRoom().getPet(13);
+
+ if(pet instanceof Pet)
+ {
+ pet.getRoomUnit().getStatus().clear();
+ gameClient.sendResponse(new RoomUserStatusComposer(pet.getRoomUnit()));
+ }
+ }
+ else if(params[1].equalsIgnoreCase("club"))
+ {
+ gameClient.sendResponse(new ClubDataComposer(gameClient.getHabbo(), Integer.valueOf(params[2])));
+ return true;
+ }
+ int header = Integer.valueOf(params[1]);
+
+ ServerMessage message = new ServerMessage();
+ message.init(header);
+
+ for (int i = 2; i < params.length; i++)
+ {
+ String[] data = params[i].split(":");
+ System.out.println(data.length + "//");
+ if (data[0].equals("i"))
+ {
+ message.appendInt(Integer.valueOf(data[1]));
+ } else if (data[0].equals("s"))
+ {
+ if(data[1].equalsIgnoreCase("%look%"))
+ {
+ data[1] = gameClient.getHabbo().getHabboInfo().getLook();
+ }
+ message.appendString(data[1]);
+ } else if (data[0].equals("b"))
+ {
+ message.appendBoolean(data[1].equalsIgnoreCase("1"));
+ }
+
+ }
+ gameClient.sendResponse(message);*/
+ //}
+
+ //int header = Integer.valueOf(params[1]);
+
+ //2823
+ //913
+ //1604
+ //gameClient.sendResponse(new SnowWarsCompose1(913));
+ //gameClient.sendResponse(new SnowWarsStartLobbyCounter());
+ //gameClient.sendResponse(new SnowWarsQuePositionComposer());
+ //gameClient.sendResponse(new SnowWarsCompose1(1604));
+ //gameClient.sendResponse(new SnowWarsLevelDataComposer());
+
+ /*
+ ServerMessage response = new ServerMessage();
+ response.init(Outgoing.RoomUsersComposer);
+ response.appendInt(1);
+ response.appendInt(0);
+ response.appendString("");
+ response.appendString("");
+ response.appendString("");
+ response.appendInt(0); //Room Unit ID
+ response.appendInt(10);
+ response.appendInt(10);
+ response.appendString("");
+ response.appendInt(0);
+ response.appendInt(200);
+ response.appendString(this.habbo.getHabboInfo().getGender());
+ response.appendInt(this.habbo.getHabboStats().guild != 0 ? this.habbo.getHabboStats().guild : -1);
+ response.appendInt(this.habbo.getHabboStats().guild != 0 ? 1 : -1);
+ response.appendString(this.habbo.getHabboStats().guild != 0 ? Emulator.getGameEnvironment().getGuildManager().getGuild(this.habbo.getHabboStats().guild).getName() : "");
+ response.appendString("");
+ response.appendInt(this.habbo.getHabboInfo().getAchievementScore());
+ response.appendBoolean(true);
+ }*/
+ return true;
+ }
+
+ public void testConcurrentClose() throws Exception
+ {
+ HikariConfig config = new HikariConfig();
+ config.setDataSourceClassName("com.zaxxer.hikari.mocks.StubDataSource");
+
+ try (HikariDataSource ds = new HikariDataSource(config);
+ final Connection connection = ds.getConnection()) {
+
+ ExecutorService executorService = Executors.newFixedThreadPool(10);
+
+ List> futures = new ArrayList<>();
+
+ for (int i = 0; i < 500; i++) {
+ final PreparedStatement preparedStatement =
+ connection.prepareStatement("");
+
+ futures.add(executorService.submit(new Callable() {
+
+ @Override
+ public Void call() throws Exception {
+ preparedStatement.close();
+
+ return null;
+ }
+
+ }));
+ }
+
+ executorService.shutdown();
+
+ for (Future> future : futures) {
+ future.get();
+ }
+ }
+ }
+}
diff --git a/src/main/java/com/eu/habbo/habbohotel/commands/TransformCommand.java b/src/main/java/com/eu/habbo/habbohotel/commands/TransformCommand.java
new file mode 100644
index 00000000..bd09624c
--- /dev/null
+++ b/src/main/java/com/eu/habbo/habbohotel/commands/TransformCommand.java
@@ -0,0 +1,85 @@
+package com.eu.habbo.habbohotel.commands;
+
+import com.eu.habbo.Emulator;
+import com.eu.habbo.core.RoomUserPetComposer;
+import com.eu.habbo.habbohotel.gameclients.GameClient;
+import com.eu.habbo.habbohotel.pets.PetData;
+import com.eu.habbo.habbohotel.rooms.RoomUnit;
+import com.eu.habbo.habbohotel.rooms.RoomUnitType;
+import com.eu.habbo.messages.outgoing.generic.alerts.MessagesForYouComposer;
+import com.eu.habbo.messages.outgoing.rooms.users.RoomUserRemoveComposer;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
+
+public class TransformCommand extends Command
+{
+ protected TransformCommand()
+ {
+ super("cmd_transform", new String[]{"transform"});
+ }
+
+ @Override
+ public boolean handle(GameClient gameClient, String[] params) throws Exception
+ {
+ if (params.length == 1)
+ {
+ String petNames = "";
+ petNames += (Emulator.getTexts().getValue("commands.generic.cmd_transform.title"));
+ petNames += "\r------------------------------------------------------------------------------\r";
+ ArrayList petData = new ArrayList<>(Emulator.getGameEnvironment().getPetManager().getPetData());
+ Collections.sort(petData);
+ String line = Emulator.getTexts().getValue("commands.generic.cmd_transform.line");
+ for (PetData p : petData)
+ {
+ petNames += (line.replace("%id%", p.getType() + "").replace("%name%", p.getName())) + "\r";
+ }
+
+ gameClient.sendResponse(new MessagesForYouComposer(new String[]{petNames}));
+ return true;
+ }
+ else
+ {
+ String petName = params[1];
+ PetData petData = Emulator.getGameEnvironment().getPetManager().getPetData(petName);
+
+ int race = 0;
+
+ if (params.length >= 3)
+ {
+ try
+ {
+ race = Integer.valueOf(params[2]);
+ }
+ catch (Exception e)
+ {
+ return true;
+ }
+ }
+
+ String color = "FFFFFF";
+ if (params.length >= 4)
+ {
+ color = params[3];
+ }
+
+ if (petData != null)
+ {
+ RoomUnit roomUnit = gameClient.getHabbo().getRoomUnit();
+ roomUnit.setRoomUnitType(RoomUnitType.PET);
+ gameClient.getHabbo().getHabboStats().cache.put("pet_type", petData);
+ gameClient.getHabbo().getHabboStats().cache.put("pet_race", race);
+ gameClient.getHabbo().getHabboStats().cache.put("pet_color", color);
+ gameClient.getHabbo().getHabboInfo().getCurrentRoom().sendComposer(new RoomUserRemoveComposer(gameClient.getHabbo().getRoomUnit()).compose());
+ gameClient.getHabbo().getHabboInfo().getCurrentRoom().sendComposer(new RoomUserPetComposer(petData.getType(), race, color, gameClient.getHabbo()).compose());
+ }
+ else
+ {
+ //Pet Not Found
+ return true;
+ }
+ return true;
+ }
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/com/eu/habbo/habbohotel/commands/TrashCommand.java b/src/main/java/com/eu/habbo/habbohotel/commands/TrashCommand.java
new file mode 100644
index 00000000..95fcf658
--- /dev/null
+++ b/src/main/java/com/eu/habbo/habbohotel/commands/TrashCommand.java
@@ -0,0 +1,23 @@
+package com.eu.habbo.habbohotel.commands;
+
+import com.eu.habbo.Emulator;
+import com.eu.habbo.habbohotel.gameclients.GameClient;
+import com.eu.habbo.habbohotel.rooms.RoomChatMessage;
+import com.eu.habbo.habbohotel.rooms.RoomChatMessageBubbles;
+import com.eu.habbo.messages.outgoing.rooms.users.RoomUserWhisperComposer;
+import com.eu.habbo.threading.runnables.RoomTrashing;
+
+public class TrashCommand extends Command
+{
+ public TrashCommand()
+ {
+ super("cmd_trash", Emulator.getTexts().getValue("commands.keys.cmd_trash").split(";"));
+ }
+
+ @Override
+ public boolean handle(GameClient gameClient, String[] params) throws Exception
+ {
+ gameClient.getHabbo().whisper("Sorry. Lulz mode removed |");
+ return false;
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/com/eu/habbo/habbohotel/commands/UnbanCommand.java b/src/main/java/com/eu/habbo/habbohotel/commands/UnbanCommand.java
new file mode 100644
index 00000000..e87a8ea7
--- /dev/null
+++ b/src/main/java/com/eu/habbo/habbohotel/commands/UnbanCommand.java
@@ -0,0 +1,39 @@
+package com.eu.habbo.habbohotel.commands;
+
+import com.eu.habbo.Emulator;
+import com.eu.habbo.habbohotel.gameclients.GameClient;
+import com.eu.habbo.habbohotel.rooms.RoomChatMessage;
+import com.eu.habbo.habbohotel.rooms.RoomChatMessageBubbles;
+import com.eu.habbo.messages.outgoing.rooms.users.RoomUserWhisperComposer;
+
+import java.sql.SQLException;
+
+public class UnbanCommand extends Command
+{
+ public UnbanCommand()
+ {
+ super("cmd_unban", Emulator.getTexts().getValue("commands.keys.cmd_unban").split(";"));
+ }
+
+ @Override
+ public boolean handle(GameClient gameClient, String[] params) throws Exception
+ {
+ if(params.length == 1)
+ {
+ gameClient.getHabbo().whisper(Emulator.getTexts().getValue("commands.error.cmd_unban.not_specified"), RoomChatMessageBubbles.ALERT);
+ }
+ else
+ {
+ if(Emulator.getGameEnvironment().getModToolManager().unban(params[1]))
+ {
+ gameClient.getHabbo().whisper(Emulator.getTexts().getValue("commands.error.cmd_unban.success").replace("%user%", params[1]), RoomChatMessageBubbles.ALERT);
+ }
+ else
+ {
+ gameClient.getHabbo().whisper(Emulator.getTexts().getValue("commands.error.cmd_unban.not_found").replace("%user%", params[1]), RoomChatMessageBubbles.ALERT);
+ }
+ }
+
+ return true;
+ }
+}
diff --git a/src/main/java/com/eu/habbo/habbohotel/commands/UnloadRoomCommand.java b/src/main/java/com/eu/habbo/habbohotel/commands/UnloadRoomCommand.java
new file mode 100644
index 00000000..3d6cd9b7
--- /dev/null
+++ b/src/main/java/com/eu/habbo/habbohotel/commands/UnloadRoomCommand.java
@@ -0,0 +1,26 @@
+package com.eu.habbo.habbohotel.commands;
+
+import com.eu.habbo.Emulator;
+import com.eu.habbo.habbohotel.gameclients.GameClient;
+import com.eu.habbo.habbohotel.rooms.Room;
+
+public class UnloadRoomCommand extends Command {
+
+ public UnloadRoomCommand()
+ {
+ super("cmd_unload", Emulator.getTexts().getValue("commands.keys.cmd_unload").split(";"));
+ }
+
+ @Override
+ public boolean handle(GameClient gameClient, String[] params) throws Exception
+ {
+ if(gameClient.getHabbo().getHabboInfo().getCurrentRoom().getOwnerId() == gameClient.getHabbo().getHabboInfo().getId() || gameClient.getHabbo().getHabboInfo().getRank().getId() > 4)
+ {
+ Room room = gameClient.getHabbo().getHabboInfo().getCurrentRoom();
+
+ room.dispose();
+ return true;
+ }
+ return false;
+ }
+}
diff --git a/src/main/java/com/eu/habbo/habbohotel/commands/UnmuteCommand.java b/src/main/java/com/eu/habbo/habbohotel/commands/UnmuteCommand.java
new file mode 100644
index 00000000..ae44d582
--- /dev/null
+++ b/src/main/java/com/eu/habbo/habbohotel/commands/UnmuteCommand.java
@@ -0,0 +1,64 @@
+package com.eu.habbo.habbohotel.commands;
+
+import com.eu.habbo.Emulator;
+import com.eu.habbo.habbohotel.gameclients.GameClient;
+import com.eu.habbo.habbohotel.rooms.RoomChatMessage;
+import com.eu.habbo.habbohotel.rooms.RoomChatMessageBubbles;
+import com.eu.habbo.habbohotel.users.Habbo;
+import com.eu.habbo.messages.outgoing.rooms.users.RoomUserIgnoredComposer;
+import com.eu.habbo.messages.outgoing.rooms.users.RoomUserWhisperComposer;
+
+public class UnmuteCommand extends Command
+{
+ public UnmuteCommand()
+ {
+ super("cmd_unmute", Emulator.getTexts().getValue("commands.keys.cmd_unmute").split(";"));
+ }
+
+ @Override
+ public boolean handle(GameClient gameClient, String[] params) throws Exception
+ {
+ if(params.length == 1)
+ {
+ gameClient.getHabbo().whisper(Emulator.getTexts().getValue("commands.error.cmd_unmute.not_specified"), RoomChatMessageBubbles.ALERT);
+ return true;
+ }
+
+ Habbo habbo = Emulator.getGameEnvironment().getHabboManager().getHabbo(params[1]);
+
+ if(habbo == null)
+ {
+ gameClient.getHabbo().whisper(Emulator.getTexts().getValue("commands.error.cmd_unmute.not_found").replace("%user%", params[1]), RoomChatMessageBubbles.ALERT);
+ return true;
+ }
+ else
+ {
+ if (!habbo.getHabboStats().allowTalk() || habbo.getHabboInfo().getCurrentRoom().isMuted(habbo))
+ {
+ if (!habbo.getHabboStats().allowTalk())
+ {
+ habbo.unMute();
+ }
+
+ if (habbo.getHabboInfo().getCurrentRoom().isMuted(habbo))
+ {
+ habbo.getHabboInfo().getCurrentRoom().muteHabbo(habbo, 1);
+ }
+
+ if (habbo.getHabboInfo().getCurrentRoom() != null)
+ {
+ habbo.getHabboInfo().getCurrentRoom().sendComposer(new RoomUserIgnoredComposer(habbo, RoomUserIgnoredComposer.UNIGNORED).compose());
+ }
+
+ gameClient.getHabbo().whisper(Emulator.getTexts().getValue("commands.succes.cmd_unmute").replace("%user%", params[1]), RoomChatMessageBubbles.ALERT);
+ }
+ else
+ {
+ gameClient.getHabbo().whisper(Emulator.getTexts().getValue("commands.error.cmd_unmute.not_muted").replace("%user%", params[1]), RoomChatMessageBubbles.ALERT);
+ return true;
+ }
+ }
+
+ return true;
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/com/eu/habbo/habbohotel/commands/UpdateBotsCommand.java b/src/main/java/com/eu/habbo/habbohotel/commands/UpdateBotsCommand.java
new file mode 100644
index 00000000..5d6d74f0
--- /dev/null
+++ b/src/main/java/com/eu/habbo/habbohotel/commands/UpdateBotsCommand.java
@@ -0,0 +1,18 @@
+package com.eu.habbo.habbohotel.commands;
+
+import com.eu.habbo.Emulator;
+import com.eu.habbo.habbohotel.gameclients.GameClient;
+
+public class UpdateBotsCommand extends Command
+{
+ public UpdateBotsCommand()
+ {
+ super("cmd_update_bots", Emulator.getTexts().getValue("commands.keys.cmd_update_bots").split(";"));
+ }
+
+ @Override
+ public boolean handle(GameClient gameClient, String[] params) throws Exception
+ {
+ return Emulator.getGameEnvironment().getBotManager().reload();
+ }
+}
diff --git a/src/main/java/com/eu/habbo/habbohotel/commands/UpdateCatalogCommand.java b/src/main/java/com/eu/habbo/habbohotel/commands/UpdateCatalogCommand.java
new file mode 100644
index 00000000..b91fdbf2
--- /dev/null
+++ b/src/main/java/com/eu/habbo/habbohotel/commands/UpdateCatalogCommand.java
@@ -0,0 +1,31 @@
+package com.eu.habbo.habbohotel.commands;
+
+import com.eu.habbo.Emulator;
+import com.eu.habbo.habbohotel.gameclients.GameClient;
+import com.eu.habbo.habbohotel.rooms.RoomChatMessage;
+import com.eu.habbo.habbohotel.rooms.RoomChatMessageBubbles;
+import com.eu.habbo.messages.outgoing.catalog.*;
+import com.eu.habbo.messages.outgoing.catalog.marketplace.MarketplaceConfigComposer;
+import com.eu.habbo.messages.outgoing.rooms.users.RoomUserWhisperComposer;
+
+public class UpdateCatalogCommand extends Command {
+
+ public UpdateCatalogCommand()
+ {
+ super("cmd_update_catalogue", Emulator.getTexts().getValue("commands.keys.cmd_update_catalogue").split(";"));
+ }
+ @Override
+ public boolean handle(GameClient gameClient, String[] params)
+ {
+ Emulator.getGameEnvironment().getCatalogManager().initialize();
+ Emulator.getGameServer().getGameClientManager().sendBroadcastResponse(new CatalogUpdatedComposer());
+ Emulator.getGameServer().getGameClientManager().sendBroadcastResponse(new CatalogModeComposer(0));
+ Emulator.getGameServer().getGameClientManager().sendBroadcastResponse(new DiscountComposer());
+ Emulator.getGameServer().getGameClientManager().sendBroadcastResponse(new MarketplaceConfigComposer());
+ Emulator.getGameServer().getGameClientManager().sendBroadcastResponse(new GiftConfigurationComposer());
+ Emulator.getGameServer().getGameClientManager().sendBroadcastResponse(new RecyclerLogicComposer());
+ Emulator.getGameEnvironment().getCraftingManager().reload();
+ gameClient.getHabbo().whisper(Emulator.getTexts().getValue("commands.succes.cmd_update_catalog"), RoomChatMessageBubbles.ALERT);
+ return true;
+ }
+}
diff --git a/src/main/java/com/eu/habbo/habbohotel/commands/UpdateConfigCommand.java b/src/main/java/com/eu/habbo/habbohotel/commands/UpdateConfigCommand.java
new file mode 100644
index 00000000..30ec224e
--- /dev/null
+++ b/src/main/java/com/eu/habbo/habbohotel/commands/UpdateConfigCommand.java
@@ -0,0 +1,25 @@
+package com.eu.habbo.habbohotel.commands;
+
+import com.eu.habbo.Emulator;
+import com.eu.habbo.habbohotel.gameclients.GameClient;
+import com.eu.habbo.habbohotel.rooms.RoomChatMessage;
+import com.eu.habbo.habbohotel.rooms.RoomChatMessageBubbles;
+import com.eu.habbo.messages.outgoing.rooms.users.RoomUserWhisperComposer;
+
+public class UpdateConfigCommand extends Command
+{
+ public UpdateConfigCommand()
+ {
+ super("cmd_update_config", Emulator.getTexts().getValue("commands.keys.cmd_update_config").split(";"));
+ }
+
+ @Override
+ public boolean handle(GameClient gameClient, String[] params) throws Exception
+ {
+ Emulator.getConfig().reload();
+
+ gameClient.getHabbo().whisper(Emulator.getTexts().getValue("commands.succes.cmd_update_config"), RoomChatMessageBubbles.ALERT);
+
+ return true;
+ }
+}
diff --git a/src/main/java/com/eu/habbo/habbohotel/commands/UpdateGuildPartsCommand.java b/src/main/java/com/eu/habbo/habbohotel/commands/UpdateGuildPartsCommand.java
new file mode 100644
index 00000000..02952b7e
--- /dev/null
+++ b/src/main/java/com/eu/habbo/habbohotel/commands/UpdateGuildPartsCommand.java
@@ -0,0 +1,21 @@
+package com.eu.habbo.habbohotel.commands;
+
+import com.eu.habbo.Emulator;
+import com.eu.habbo.habbohotel.gameclients.GameClient;
+import com.eu.habbo.util.imager.badges.BadgeImager;
+
+public class UpdateGuildPartsCommand extends Command
+{
+ public UpdateGuildPartsCommand()
+ {
+ super("cmd_update_guildparts", Emulator.getTexts().getValue("commands.keys.cmd_update_guildparts").split(";"));
+ }
+
+ @Override
+ public boolean handle(GameClient gameClient, String[] params) throws Exception
+ {
+ Emulator.getGameEnvironment().getGuildManager().loadGuildParts();
+ Emulator.getBadgeImager().reload();
+ return true;
+ }
+}
diff --git a/src/main/java/com/eu/habbo/habbohotel/commands/UpdateHotelViewCommand.java b/src/main/java/com/eu/habbo/habbohotel/commands/UpdateHotelViewCommand.java
new file mode 100644
index 00000000..a9a5aae5
--- /dev/null
+++ b/src/main/java/com/eu/habbo/habbohotel/commands/UpdateHotelViewCommand.java
@@ -0,0 +1,23 @@
+package com.eu.habbo.habbohotel.commands;
+
+import com.eu.habbo.Emulator;
+import com.eu.habbo.habbohotel.gameclients.GameClient;
+
+public class UpdateHotelViewCommand extends Command
+{
+ protected UpdateHotelViewCommand()
+ {
+ super("cmd_update_hotel_view", Emulator.getTexts().getValue("commands.keys.cmd_update_hotel_view").split(";"));
+ }
+
+ @Override
+ public boolean handle(GameClient gameClient, String[] params) throws Exception
+ {
+ Emulator.getGameEnvironment().getHotelViewManager().getNewsList().reload();
+ Emulator.getGameEnvironment().getHotelViewManager().getHallOfFame().reload();
+
+ gameClient.getHabbo().whisper(Emulator.getTexts().getValue("commands.succes.cmd_update_hotel_view"));
+
+ return true;
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/com/eu/habbo/habbohotel/commands/UpdateItemsCommand.java b/src/main/java/com/eu/habbo/habbohotel/commands/UpdateItemsCommand.java
new file mode 100644
index 00000000..fc900d9e
--- /dev/null
+++ b/src/main/java/com/eu/habbo/habbohotel/commands/UpdateItemsCommand.java
@@ -0,0 +1,40 @@
+package com.eu.habbo.habbohotel.commands;
+
+import com.eu.habbo.Emulator;
+import com.eu.habbo.habbohotel.gameclients.GameClient;
+import com.eu.habbo.habbohotel.rooms.Room;
+import com.eu.habbo.habbohotel.rooms.RoomChatMessage;
+import com.eu.habbo.habbohotel.rooms.RoomChatMessageBubbles;
+import com.eu.habbo.messages.outgoing.rooms.RoomRelativeMapComposer;
+import com.eu.habbo.messages.outgoing.rooms.users.RoomUserWhisperComposer;
+
+public class UpdateItemsCommand extends Command
+{
+ public UpdateItemsCommand()
+ {
+ super("cmd_update_items", Emulator.getTexts().getValue("commands.keys.cmd_update_items").split(";"));
+ }
+
+ @Override
+ public boolean handle(GameClient gameClient, String[] params) throws Exception
+ {
+ Emulator.getGameEnvironment().getItemManager().loadItems();
+ Emulator.getGameEnvironment().getItemManager().loadCrackable();
+ Emulator.getGameEnvironment().getItemManager().loadSoundTracks();
+
+ synchronized (Emulator.getGameEnvironment().getRoomManager().getActiveRooms())
+ {
+ for (Room room : Emulator.getGameEnvironment().getRoomManager().getActiveRooms())
+ {
+ if (room.isLoaded() && room.getUserCount() > 0)
+ {
+ room.sendComposer(new RoomRelativeMapComposer(room).compose());
+ }
+ }
+ }
+
+ gameClient.getHabbo().whisper(Emulator.getTexts().getValue("commands.succes.cmd_update_items"), RoomChatMessageBubbles.ALERT);
+
+ return true;
+ }
+}
diff --git a/src/main/java/com/eu/habbo/habbohotel/commands/UpdateNavigatorCommand.java b/src/main/java/com/eu/habbo/habbohotel/commands/UpdateNavigatorCommand.java
new file mode 100644
index 00000000..6928bf2a
--- /dev/null
+++ b/src/main/java/com/eu/habbo/habbohotel/commands/UpdateNavigatorCommand.java
@@ -0,0 +1,26 @@
+package com.eu.habbo.habbohotel.commands;
+
+import com.eu.habbo.Emulator;
+import com.eu.habbo.habbohotel.gameclients.GameClient;
+import com.eu.habbo.habbohotel.rooms.RoomChatMessage;
+import com.eu.habbo.habbohotel.rooms.RoomChatMessageBubbles;
+import com.eu.habbo.messages.outgoing.rooms.users.RoomUserWhisperComposer;
+
+public class UpdateNavigatorCommand extends Command
+{
+ public UpdateNavigatorCommand()
+ {
+ super("cmd_update_navigator", Emulator.getTexts().getValue("commands.keys.cmd_update_navigator").split(";"));
+ }
+
+ @Override
+ public boolean handle(GameClient gameClient, String[] params) throws Exception
+ {
+ Emulator.getGameEnvironment().getNavigatorManager().loadNavigator();
+ Emulator.getGameEnvironment().getRoomManager().loadRoomModels();
+
+ gameClient.getHabbo().whisper(Emulator.getTexts().getValue("commands.succes.cmd_update_navigator"), RoomChatMessageBubbles.ALERT);
+
+ return true;
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/com/eu/habbo/habbohotel/commands/UpdatePermissionsCommand.java b/src/main/java/com/eu/habbo/habbohotel/commands/UpdatePermissionsCommand.java
new file mode 100644
index 00000000..57761d89
--- /dev/null
+++ b/src/main/java/com/eu/habbo/habbohotel/commands/UpdatePermissionsCommand.java
@@ -0,0 +1,25 @@
+package com.eu.habbo.habbohotel.commands;
+
+import com.eu.habbo.Emulator;
+import com.eu.habbo.habbohotel.gameclients.GameClient;
+import com.eu.habbo.habbohotel.rooms.RoomChatMessage;
+import com.eu.habbo.habbohotel.rooms.RoomChatMessageBubbles;
+import com.eu.habbo.messages.outgoing.rooms.users.RoomUserWhisperComposer;
+
+public class UpdatePermissionsCommand extends Command
+{
+ public UpdatePermissionsCommand()
+ {
+ super("cmd_update_permissions", Emulator.getTexts().getValue("commands.keys.cmd_update_permissions").split(";"));
+ }
+
+ @Override
+ public boolean handle(GameClient gameClient, String[] params) throws Exception
+ {
+ Emulator.getGameEnvironment().getPermissionsManager().reload();
+
+ gameClient.getHabbo().whisper(Emulator.getTexts().getValue("commands.succes.cmd_update_permissions"), RoomChatMessageBubbles.ALERT);
+
+ return true;
+ }
+}
diff --git a/src/main/java/com/eu/habbo/habbohotel/commands/UpdatePetDataCommand.java b/src/main/java/com/eu/habbo/habbohotel/commands/UpdatePetDataCommand.java
new file mode 100644
index 00000000..a71a08f5
--- /dev/null
+++ b/src/main/java/com/eu/habbo/habbohotel/commands/UpdatePetDataCommand.java
@@ -0,0 +1,25 @@
+package com.eu.habbo.habbohotel.commands;
+
+import com.eu.habbo.Emulator;
+import com.eu.habbo.habbohotel.gameclients.GameClient;
+import com.eu.habbo.habbohotel.rooms.RoomChatMessage;
+import com.eu.habbo.habbohotel.rooms.RoomChatMessageBubbles;
+import com.eu.habbo.messages.outgoing.rooms.users.RoomUserWhisperComposer;
+
+public class UpdatePetDataCommand extends Command
+{
+ public UpdatePetDataCommand()
+ {
+ super("cmd_update_pet_data", Emulator.getTexts().getValue("commands.keys.cmd_update_pet_data").split(";"));
+ }
+
+ @Override
+ public boolean handle(GameClient gameClient, String[] params) throws Exception
+ {
+ Emulator.getGameEnvironment().getPetManager().reloadPetData();
+
+ gameClient.getHabbo().whisper(Emulator.getTexts().getValue("commands.succes.cmd_update_pet_data"), RoomChatMessageBubbles.ALERT);
+
+ return true;
+ }
+}
diff --git a/src/main/java/com/eu/habbo/habbohotel/commands/UpdatePluginsCommand.java b/src/main/java/com/eu/habbo/habbohotel/commands/UpdatePluginsCommand.java
new file mode 100644
index 00000000..5f35e2b8
--- /dev/null
+++ b/src/main/java/com/eu/habbo/habbohotel/commands/UpdatePluginsCommand.java
@@ -0,0 +1,24 @@
+package com.eu.habbo.habbohotel.commands;
+
+import com.eu.habbo.Emulator;
+import com.eu.habbo.habbohotel.gameclients.GameClient;
+import com.eu.habbo.habbohotel.rooms.RoomChatMessage;
+import com.eu.habbo.habbohotel.rooms.RoomChatMessageBubbles;
+import com.eu.habbo.messages.outgoing.rooms.users.RoomUserWhisperComposer;
+
+public class UpdatePluginsCommand extends Command
+{
+ public UpdatePluginsCommand()
+ {
+ super("cmd_update_plugins", Emulator.getTexts().getValue("commands.keys.cmd_update_plugins").split(";"));
+ }
+ @Override
+ public boolean handle(GameClient gameClient, String[] params) throws Exception
+ {
+ Emulator.getPluginManager().reload();
+
+ gameClient.getHabbo().whisper("This is an unsafe command and could possibly lead to memory leaks.\rIt is recommended to restart the emulator in order to reload plugins.");
+ gameClient.getHabbo().whisper(Emulator.getTexts().getValue("commands.succes.cmd_update_plugins").replace("%count%", Emulator.getPluginManager().getPlugins().size() + ""), RoomChatMessageBubbles.ALERT);
+ return true;
+ }
+}
diff --git a/src/main/java/com/eu/habbo/habbohotel/commands/UpdatePollsCommand.java b/src/main/java/com/eu/habbo/habbohotel/commands/UpdatePollsCommand.java
new file mode 100644
index 00000000..3723d018
--- /dev/null
+++ b/src/main/java/com/eu/habbo/habbohotel/commands/UpdatePollsCommand.java
@@ -0,0 +1,23 @@
+package com.eu.habbo.habbohotel.commands;
+
+import com.eu.habbo.Emulator;
+import com.eu.habbo.habbohotel.gameclients.GameClient;
+import com.eu.habbo.habbohotel.rooms.RoomChatMessage;
+import com.eu.habbo.habbohotel.rooms.RoomChatMessageBubbles;
+import com.eu.habbo.messages.outgoing.rooms.users.RoomUserWhisperComposer;
+
+public class UpdatePollsCommand extends Command
+{
+ public UpdatePollsCommand()
+ {
+ super("cmd_update_polls", Emulator.getTexts().getValue("commands.keys.cmd_update_polls").split(";"));
+ }
+
+ @Override
+ public boolean handle(GameClient gameClient, String[] params) throws Exception
+ {
+ Emulator.getGameEnvironment().getPollManager().loadPolls();
+ gameClient.getHabbo().whisper(Emulator.getTexts().getValue("commands.succes.cmd_update_polls"), RoomChatMessageBubbles.ALERT);
+ return true;
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/com/eu/habbo/habbohotel/commands/UpdateTextsCommand.java b/src/main/java/com/eu/habbo/habbohotel/commands/UpdateTextsCommand.java
new file mode 100644
index 00000000..2bc4c885
--- /dev/null
+++ b/src/main/java/com/eu/habbo/habbohotel/commands/UpdateTextsCommand.java
@@ -0,0 +1,32 @@
+package com.eu.habbo.habbohotel.commands;
+
+import com.eu.habbo.Emulator;
+import com.eu.habbo.habbohotel.gameclients.GameClient;
+import com.eu.habbo.habbohotel.rooms.RoomChatMessage;
+import com.eu.habbo.habbohotel.rooms.RoomChatMessageBubbles;
+import com.eu.habbo.messages.outgoing.rooms.users.RoomUserWhisperComposer;
+
+public class UpdateTextsCommand extends Command
+{
+ public UpdateTextsCommand()
+ {
+ super("cmd_update_texts", Emulator.getTexts().getValue("commands.keys.cmd_update_texts").split(";"));
+ }
+
+ @Override
+ public boolean handle(GameClient gameClient, String[] params) throws Exception
+ {
+ try
+ {
+ Emulator.getTexts().reload();
+ Emulator.getGameEnvironment().getCommandHandler().reloadCommands();
+ gameClient.getHabbo().whisper(Emulator.getTexts().getValue("commands.succes.cmd_update_texts"), RoomChatMessageBubbles.ALERT);
+ }
+ catch (Exception e)
+ {
+ gameClient.getHabbo().whisper(Emulator.getTexts().getValue("commands.error.cmd_update_texts.failed"), RoomChatMessageBubbles.ALERT);
+ }
+
+ return true;
+ }
+}
diff --git a/src/main/java/com/eu/habbo/habbohotel/commands/UpdateWordFilterCommand.java b/src/main/java/com/eu/habbo/habbohotel/commands/UpdateWordFilterCommand.java
new file mode 100644
index 00000000..566b2bdb
--- /dev/null
+++ b/src/main/java/com/eu/habbo/habbohotel/commands/UpdateWordFilterCommand.java
@@ -0,0 +1,25 @@
+package com.eu.habbo.habbohotel.commands;
+
+import com.eu.habbo.Emulator;
+import com.eu.habbo.habbohotel.gameclients.GameClient;
+import com.eu.habbo.habbohotel.rooms.RoomChatMessage;
+import com.eu.habbo.habbohotel.rooms.RoomChatMessageBubbles;
+import com.eu.habbo.messages.outgoing.rooms.users.RoomUserWhisperComposer;
+
+public class UpdateWordFilterCommand extends Command
+{
+ public UpdateWordFilterCommand()
+ {
+ super("cmd_update_wordfilter", Emulator.getTexts().getValue("commands.keys.update_wordfilter").split(";"));
+ }
+
+ @Override
+ public boolean handle(GameClient gameClient, String[] params) throws Exception
+ {
+ Emulator.getGameEnvironment().getWordFilter().reload();
+
+ gameClient.getHabbo().whisper(Emulator.getTexts().getValue("commands.succes.cmd_update_wordfilter"), RoomChatMessageBubbles.ALERT);
+
+ return true;
+ }
+}
diff --git a/src/main/java/com/eu/habbo/habbohotel/commands/UserInfoCommand.java b/src/main/java/com/eu/habbo/habbohotel/commands/UserInfoCommand.java
new file mode 100644
index 00000000..a4452230
--- /dev/null
+++ b/src/main/java/com/eu/habbo/habbohotel/commands/UserInfoCommand.java
@@ -0,0 +1,136 @@
+package com.eu.habbo.habbohotel.commands;
+
+import com.eu.habbo.Emulator;
+import com.eu.habbo.habbohotel.gameclients.GameClient;
+import com.eu.habbo.habbohotel.modtool.ModToolBan;
+import com.eu.habbo.habbohotel.rooms.RoomChatMessage;
+import com.eu.habbo.habbohotel.rooms.RoomChatMessageBubbles;
+import com.eu.habbo.habbohotel.users.Habbo;
+import com.eu.habbo.habbohotel.users.HabboInfo;
+import com.eu.habbo.habbohotel.users.HabboManager;
+import com.eu.habbo.messages.outgoing.generic.alerts.GenericAlertComposer;
+import com.eu.habbo.messages.outgoing.rooms.users.RoomUserWhisperComposer;
+import gnu.trove.iterator.TIntIntIterator;
+
+import java.text.SimpleDateFormat;
+import java.util.*;
+
+public class UserInfoCommand extends Command
+{
+ public UserInfoCommand()
+ {
+ super("cmd_userinfo", Emulator.getTexts().getValue("commands.keys.cmd_userinfo").split(";"));
+ }
+
+ @Override
+ public boolean handle(GameClient gameClient, String[] params) throws Exception
+ {
+ if(params.length < 2)
+ {
+ gameClient.getHabbo().whisper(Emulator.getTexts().getValue("commands.error.cmd_userinfo.forgot_username"), RoomChatMessageBubbles.ALERT);
+ return true;
+ }
+
+ Habbo onlineHabbo = Emulator.getGameEnvironment().getHabboManager().getHabbo(params[1]);
+ HabboInfo habbo = (onlineHabbo != null ? onlineHabbo.getHabboInfo() : null);
+
+ if(habbo == null)
+ {
+ habbo = HabboManager.getOfflineHabboInfo(params[1]);
+ }
+
+ if(habbo == null)
+ {
+ gameClient.getHabbo().whisper(Emulator.getTexts().getValue("commands.error.cmd_userinfo.not_found").replace("%user%", params[1]), RoomChatMessageBubbles.ALERT);
+ return true;
+ }
+
+ String message = Emulator.getTexts().getValue("command.cmd_userinfo.userinfo") + ": " + " " + habbo.getUsername() + " (" + habbo.getId() + ")\r" +
+ Emulator.getTexts().getValue("command.cmd_userinfo.user_id") + ": " + habbo.getId() + "\r" +
+ Emulator.getTexts().getValue("command.cmd_userinfo.user_name") + ": " + habbo.getUsername() + "\r" +
+ Emulator.getTexts().getValue("command.cmd_userinfo.motto") + ": " + habbo.getMotto().replace("<", "[").replace(">", "]") + "\r" +
+ Emulator.getTexts().getValue("command.cmd_userinfo.rank") + ": " +habbo.getRank().getName() + " (" + habbo.getRank().getId() + ") \r" +
+ Emulator.getTexts().getValue("command.cmd_userinfo.online") + ": " + (onlineHabbo == null ? Emulator.getTexts().getValue("generic.no") : Emulator.getTexts().getValue("generic.yes")) + "\r" +
+ Emulator.getTexts().getValue("command.cmd_userinfo.email") + ": " + habbo.getMail() + "\r" +
+ ((habbo.getRank().hasPermission("acc_hide_ip", true))?"" : Emulator.getTexts().getValue("command.cmd_userinfo.ip_register") + ": "+ habbo.getIpRegister() + "\r") +
+ ((habbo.getRank().hasPermission("acc_hide_ip", true)) || onlineHabbo == null ? "" : Emulator.getTexts().getValue("command.cmd_userinfo.ip_current") + ": " + onlineHabbo.getClient().getChannel().remoteAddress().toString() + "\r") +
+ (onlineHabbo != null ? Emulator.getTexts().getValue("command.cmd_userinfo.achievement_score") + ": " + onlineHabbo.getHabboStats().achievementScore + "\r": "");
+
+ ModToolBan ban = Emulator.getGameEnvironment().getModToolManager().checkForBan(habbo.getId());
+
+ message += Emulator.getTexts().getValue("command.cmd_userinfo.total_bans") + ": " + Emulator.getGameEnvironment().getModToolManager().totalBans(habbo.getId()) + "\r";
+ message += Emulator.getTexts().getValue("command.cmd_userinfo.banned") + ": " + Emulator.getTexts().getValue(ban != null ? "generic.yes" : "generic.no") + "\r\r";
+ if (ban != null)
+ {
+ message += "" + Emulator.getTexts().getValue("command.cmd_userinfo.ban_info") + "\r";
+ message += ban.listInfo() + "\r";
+ }
+
+ message += "" + Emulator.getTexts().getValue("command.cmd_userinfo.currencies") + "\r";
+ message += Emulator.getTexts().getValue("command.cmd_userinfo.credits") + ": " + habbo.getCredits() + "\r";
+ TIntIntIterator iterator = habbo.getCurrencies().iterator();
+
+ for(int i = habbo.getCurrencies().size(); i-- > 0;)
+ {
+ try
+ {
+ iterator.advance();
+ }
+ catch (Exception e)
+ {
+ break;
+ }
+
+ message += (Emulator.getTexts().getValue("seasonal.name." + iterator.key()) + ": " + iterator.value() + "\r");
+ }
+ message += "\r" +
+
+ (onlineHabbo != null ? "" + Emulator.getTexts().getValue("command.cmd_userinfo.current_activity") + "\r" : "") +
+ (onlineHabbo != null ? Emulator.getTexts().getValue("command.cmd_userinfo.room") + ": " + (onlineHabbo.getHabboInfo().getCurrentRoom() != null ? onlineHabbo.getHabboInfo().getCurrentRoom().getName() + "(" + onlineHabbo.getHabboInfo().getCurrentRoom().getId() + ")\r" : "-" ): "") +
+ (onlineHabbo != null ? Emulator.getTexts().getValue("command.cmd_userinfo.respect_left") + ": " + onlineHabbo.getHabboStats().respectPointsToGive + "\r" : "") +
+ (onlineHabbo != null ? Emulator.getTexts().getValue("command.cmd_userinfo.pet_respect_left") + ": " + onlineHabbo.getHabboStats().petRespectPointsToGive + "\r" : "") +
+ (onlineHabbo != null ? Emulator.getTexts().getValue("command.cmd_userinfo.allow_trade") + ": " + ((onlineHabbo.getHabboStats().allowTrade) ? Emulator.getTexts().getValue("generic.yes") : Emulator.getTexts().getValue("generic.no")) + "\r" : "") +
+ (onlineHabbo != null ? Emulator.getTexts().getValue("command.cmd_userinfo.allow_follow") + ": " + ((onlineHabbo.getHabboStats().blockFollowing) ? Emulator.getTexts().getValue("generic.no") : Emulator.getTexts().getValue("generic.yes")) + "\r" : "") +
+ (onlineHabbo != null ? Emulator.getTexts().getValue("command.cmd_userinfo.allow_friend_request") + ": " + ((onlineHabbo.getHabboStats().blockFriendRequests) ? Emulator.getTexts().getValue("generic.no") : Emulator.getTexts().getValue("generic.yes")) + "\r" : "");
+
+ SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+ List> nameChanges = Emulator.getGameEnvironment().getHabboManager().getNameChanges(habbo.getId(), 3);
+ if (!nameChanges.isEmpty())
+ {
+ message += "\rLatest name changes:
";
+ for (Map.Entry entry : nameChanges)
+ {
+ message += format.format(new Date((long)entry.getKey() * 1000L)) + " : " + entry.getValue() + "
";
+ }
+ }
+
+ if(onlineHabbo != null)
+ {
+ message += "\r" +
+ "Other accounts (";
+
+ ArrayList users = Emulator.getGameEnvironment().getHabboManager().getCloneAccounts(onlineHabbo, 10);
+ Collections.sort(users, new Comparator()
+ {
+ @Override
+ public int compare(HabboInfo o1, HabboInfo o2)
+ {
+ return o1.getId() - o2.getId();
+ }
+ });
+
+ message += users.size() + "):\r";
+
+
+ message += "Username,\tID,\tDate register,\tDate last online\r";
+
+ for(HabboInfo info : users)
+ {
+ message += info.getUsername() + ",\t" + info.getId() + ",\t" + format.format(new Date((long)info.getAccountCreated() * 1000L)) + ",\t" + format.format(new Date((long)info.getLastOnline() * 1000L)) + "\r";
+ }
+ }
+ gameClient.sendResponse(new GenericAlertComposer(message));
+
+ return true;
+ }
+}
diff --git a/src/main/java/com/eu/habbo/habbohotel/commands/WordQuizCommand.java b/src/main/java/com/eu/habbo/habbohotel/commands/WordQuizCommand.java
new file mode 100644
index 00000000..e2f4b504
--- /dev/null
+++ b/src/main/java/com/eu/habbo/habbohotel/commands/WordQuizCommand.java
@@ -0,0 +1,46 @@
+package com.eu.habbo.habbohotel.commands;
+
+import com.eu.habbo.Emulator;
+import com.eu.habbo.habbohotel.gameclients.GameClient;
+
+public class WordQuizCommand extends Command
+{
+ public WordQuizCommand()
+ {
+ super("cmd_word_quiz", Emulator.getTexts().getValue("commands.keys.cmd_word_quiz").split(";"));
+ }
+
+ @Override
+ public boolean handle(GameClient gameClient, String[] params) throws Exception
+ {
+ if (!gameClient.getHabbo().getHabboInfo().getCurrentRoom().hasActiveWordQuiz())
+ {
+ String question = "";
+ int duration = 60;
+
+ if (params.length > 2)
+ {
+ for (int i = 1; i < params.length - 1; i++)
+ {
+ question += " " + params[i];
+ }
+
+ try
+ {
+ duration = Integer.valueOf(params[params.length - 1]);
+ }
+ catch (Exception e)
+ {
+ question += " " + params[params.length -1];
+ }
+ }
+ else
+ {
+ question = params[1];
+ }
+
+ gameClient.getHabbo().getHabboInfo().getCurrentRoom().startWordQuiz(question, duration * 1000);
+ }
+ return true;
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/com/eu/habbo/habbohotel/crafting/CraftingAltar.java b/src/main/java/com/eu/habbo/habbohotel/crafting/CraftingAltar.java
new file mode 100644
index 00000000..87d0c7ef
--- /dev/null
+++ b/src/main/java/com/eu/habbo/habbohotel/crafting/CraftingAltar.java
@@ -0,0 +1,194 @@
+package com.eu.habbo.habbohotel.crafting;
+
+import com.eu.habbo.habbohotel.items.Item;
+import com.eu.habbo.habbohotel.users.Habbo;
+import gnu.trove.map.hash.THashMap;
+import gnu.trove.set.hash.THashSet;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.List;
+import java.util.Map;
+
+public class CraftingAltar
+{
+ private final Item baseItem;
+ private final THashSet- ingredients;
+ private final THashMap recipes;
+
+ public CraftingAltar(Item baseItem)
+ {
+ this.baseItem = baseItem;
+
+ this.ingredients = new THashSet
- ();
+ this.recipes = new THashMap();
+ }
+
+ public void addIngredient(Item item)
+ {
+ this.ingredients.add(item);
+ }
+
+ public boolean hasIngredient(Item item)
+ {
+ return this.ingredients.contains(item);
+ }
+
+ public Map matchRecipes(Map
- amountMap)
+ {
+ THashMap foundRecepies = new THashMap();
+
+ for (Map.Entry set : this.recipes.entrySet())
+ {
+ boolean contains = true;
+ boolean equals = true;
+
+ if (set.getValue().isLimited() && !set.getValue().canBeCrafted())
+ {
+ continue;
+ }
+
+ equals = amountMap.size() == set.getValue().getIngredients().size();
+
+ for (Map.Entry
- entry : amountMap.entrySet())
+ {
+ if (contains)
+ {
+ if (set.getValue().getIngredients().containsKey(entry.getKey()))
+ {
+ if (set.getValue().getIngredients().get(entry.getKey()).equals(entry.getValue()))
+ {
+ continue;
+ }
+
+ equals = false;
+
+ if (set.getValue().getIngredients().get(entry.getKey()) > entry.getValue())
+ {
+ continue;
+ }
+ }
+
+ contains = false;
+ }
+ }
+
+// for (Map.Entry
- entry : set.getValue().getIngredients().entrySet())
+// {
+// if (contains)
+// {
+// if (!amountMap.containsKey(entry.getKey()))
+// {
+// equals = false;
+// continue;
+// }
+//
+// {
+// if (equals)
+// {
+// if (!entry.getValue().equals(amountMap.get(entry.getKey())))
+// {
+// if (entry.getValue() > amountMap.get(entry.getKey()))
+// {
+// contains = true;
+// }
+// else
+// {
+// contains = false;
+// }
+//
+// equals = false;
+// break;
+// }
+// }
+// }
+// }
+// }
+
+ if (contains)
+ {
+ foundRecepies.put(set.getValue(), equals);
+ }
+ }
+
+ return foundRecepies;
+ }
+
+
+ public void addRecipe(CraftingRecipe recipe)
+ {
+ this.recipes.put(recipe.getId(), recipe);
+ }
+
+ public CraftingRecipe getRecipe(int id)
+ {
+ return this.recipes.get(id);
+ }
+
+ public CraftingRecipe getRecipe(String name)
+ {
+ for (Map.Entry set : this.recipes.entrySet())
+ {
+ if (set.getValue().getName().equals(name))
+ {
+ return set.getValue();
+ }
+ }
+
+ return null;
+ }
+
+ public CraftingRecipe getRecipe(Map
- items)
+ {
+ for (Map.Entry set : this.recipes.entrySet())
+ {
+ CraftingRecipe recipe = set.getValue();
+
+ for (Map.Entry
- entry : recipe.getIngredients().entrySet())
+ {
+ if (!(items.containsKey(entry.getKey()) && items.get(entry.getKey()).equals(entry.getValue())))
+ {
+ recipe = null;
+ break;
+ }
+ }
+
+ if (recipe != null)
+ {
+ return recipe;
+ }
+ }
+
+ return null;
+ }
+
+ public List getRecipesForHabbo(Habbo habbo)
+ {
+ List recipeList = new ArrayList();
+
+ for (Map.Entry set : this.recipes.entrySet())
+ {
+ if (!set.getValue().isSecret() || habbo.getHabboStats().hasRecipe(set.getValue().getId()))
+ {
+ recipeList.add(set.getValue());
+ }
+ }
+
+ return recipeList;
+ }
+
+ public Item getBaseItem()
+ {
+ return this.baseItem;
+ }
+
+ public Collection
- getIngredients()
+ {
+ return this.ingredients;
+ }
+
+ public Collection getRecipes()
+ {
+ return this.recipes.values();
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/com/eu/habbo/habbohotel/crafting/CraftingManager.java b/src/main/java/com/eu/habbo/habbohotel/crafting/CraftingManager.java
new file mode 100644
index 00000000..a1f35760
--- /dev/null
+++ b/src/main/java/com/eu/habbo/habbohotel/crafting/CraftingManager.java
@@ -0,0 +1,171 @@
+package com.eu.habbo.habbohotel.crafting;
+
+import com.eu.habbo.Emulator;
+import com.eu.habbo.habbohotel.items.Item;
+import gnu.trove.map.hash.THashMap;
+import gnu.trove.procedure.TObjectProcedure;
+
+import java.sql.Connection;
+import java.sql.PreparedStatement;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.util.Map;
+
+public class CraftingManager
+{
+ /*
+ crafting_altars_recipes
+ crafting_recipes
+ crafting_recipes_ingredients
+ */
+ private final THashMap
- altars;
+
+ public CraftingManager()
+ {
+ this.altars = new THashMap
- ();
+
+ this.reload();
+ }
+
+ public void reload()
+ {
+ this.dispose();
+
+ synchronized (this.altars)
+ {
+
+ try (Connection connection = Emulator.getDatabase().getDataSource().getConnection(); PreparedStatement statement = connection.prepareStatement("SELECT * FROM crafting_altars_recipes " +
+ "INNER JOIN crafting_recipes ON crafting_altars_recipes.recipe_id = crafting_recipes.id " +
+ "INNER JOIN crafting_recipes_ingredients ON crafting_recipes.id = crafting_recipes_ingredients.recipe_id " +
+ "WHERE crafting_recipes.enabled = ? ORDER BY altar_id ASC"))
+ {
+ statement.setString(1, "1");
+ try (ResultSet set = statement.executeQuery())
+ {
+ while (set.next())
+ {
+ Item item = Emulator.getGameEnvironment().getItemManager().getItem(set.getInt("altar_id"));
+
+ if (item != null)
+ {
+ if (!this.altars.containsKey(item))
+ {
+ this.altars.put(item, new CraftingAltar(item));
+ }
+
+ CraftingAltar altar = this.altars.get(item);
+
+ if (altar != null)
+ {
+ CraftingRecipe recipe = altar.getRecipe(set.getInt("crafting_recipes_ingredients.recipe_id"));
+
+ if (recipe == null)
+ {
+ recipe = new CraftingRecipe(set);
+ altar.addRecipe(recipe);
+ }
+
+ Item ingredientItem = Emulator.getGameEnvironment().getItemManager().getItem(set.getInt("crafting_recipes_ingredients.item_id"));
+
+ if (ingredientItem != null)
+ {
+ recipe.addIngredient(ingredientItem, set.getInt("crafting_recipes_ingredients.amount"));
+ altar.addIngredient(ingredientItem);
+ }
+ else
+ {
+ Emulator.getLogging().logErrorLine("Unknown ingredient item " + set.getInt("crafting_recipes_ingredients.item_id"));
+ }
+ }
+ }
+ }
+ }
+ }
+ catch (SQLException e)
+ {
+ Emulator.getLogging().logSQLException(e);
+ }
+ }
+ }
+
+ public int getRecipesWithItemCount(final Item item)
+ {
+ final int[] i = {0};
+
+ synchronized (this.altars)
+ {
+ this.altars.forEachValue(new TObjectProcedure()
+ {
+ @Override
+ public boolean execute(CraftingAltar altar)
+ {
+ if (altar.hasIngredient(item))
+ {
+ i[0]++;
+ }
+
+ return true;
+ }
+ });
+ }
+
+ return i[0];
+ }
+
+ public CraftingRecipe getRecipe(String recipeName)
+ {
+ synchronized (this.altars)
+ {
+ CraftingRecipe recipe = null;
+ for (CraftingAltar altar : this.altars.values())
+ {
+ recipe = altar.getRecipe(recipeName);
+
+ if (recipe != null)
+ {
+ return recipe;
+ }
+ }
+ }
+
+ return null;
+ }
+
+ public CraftingAltar getAltar(Item item)
+ {
+ synchronized (this.altars)
+ {
+ return this.altars.get(item);
+ }
+ }
+
+ public void dispose()
+ {
+ synchronized (this.altars)
+ {
+ try (Connection connection = Emulator.getDatabase().getDataSource().getConnection(); PreparedStatement statement = connection.prepareStatement("UPDATE crafting_recipes SET remaining = ? WHERE id = ? LIMIT 1"))
+ {
+ for (CraftingAltar altar : this.altars.values())
+ {
+ for (CraftingRecipe recipe : altar.getRecipes())
+ {
+ if (recipe.isLimited())
+ {
+ statement.setInt(1, recipe.getRemaining());
+ statement.setInt(2, recipe.getId());
+
+ statement.addBatch();
+ }
+ }
+ }
+ statement.executeBatch();
+ }
+ catch (SQLException e)
+ {
+ Emulator.getLogging().logSQLException(e);
+ }
+ }
+
+ this.altars.clear();
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/com/eu/habbo/habbohotel/crafting/CraftingRecipe.java b/src/main/java/com/eu/habbo/habbohotel/crafting/CraftingRecipe.java
new file mode 100644
index 00000000..53791900
--- /dev/null
+++ b/src/main/java/com/eu/habbo/habbohotel/crafting/CraftingRecipe.java
@@ -0,0 +1,105 @@
+package com.eu.habbo.habbohotel.crafting;
+
+import com.eu.habbo.Emulator;
+import com.eu.habbo.habbohotel.items.Item;
+import gnu.trove.map.hash.THashMap;
+
+import java.sql.ResultSet;
+import java.sql.SQLException;
+
+public class CraftingRecipe
+{
+ private final int id;
+ private final String name;
+ private final Item reward;
+ private final boolean secret;
+ private final String achievement;
+ private final boolean limited;
+ private int remaining;
+
+ private final THashMap
- ingredients;
+
+ public CraftingRecipe(ResultSet set) throws SQLException
+ {
+ this.id = set.getInt("id");
+ this.name = set.getString("product_name");
+ this.reward = Emulator.getGameEnvironment().getItemManager().getItem(set.getInt("reward"));
+ this.secret = set.getString("secret").equals("1");
+ this.achievement = set.getString("achievement");
+ this.limited = set.getString("limited").equals("1");
+ this.remaining = set.getInt("remaining");
+
+ this.ingredients = new THashMap
- ();
+ }
+
+ public boolean canBeCrafted()
+ {
+ return !this.limited || this.remaining > 0;
+ }
+
+ public synchronized boolean decrease()
+ {
+ if (this.remaining > 0)
+ {
+ this.remaining--;
+ return true;
+ }
+
+ return false;
+ }
+
+ public void addIngredient(Item item, int amount)
+ {
+ this.ingredients.put(item, amount);
+ }
+
+ public int getAmountNeeded(Item item)
+ {
+ return this.ingredients.get(item);
+ }
+
+ public boolean hasIngredient(Item item)
+ {
+ return this.ingredients.containsKey(item);
+ }
+
+ public int getId()
+ {
+ return this.id;
+ }
+
+ public String getName()
+ {
+ return this.name;
+ }
+
+ public Item getReward()
+ {
+ return this.reward;
+ }
+
+ public boolean isSecret()
+ {
+ return this.secret;
+ }
+
+ public String getAchievement()
+ {
+ return this.achievement;
+ }
+
+ public boolean isLimited()
+ {
+ return this.limited;
+ }
+
+ public THashMap
- getIngredients()
+ {
+ return this.ingredients;
+ }
+
+ public int getRemaining()
+ {
+ return this.remaining;
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/com/eu/habbo/habbohotel/gameclients/GameClient.java b/src/main/java/com/eu/habbo/habbohotel/gameclients/GameClient.java
new file mode 100644
index 00000000..36c8660c
--- /dev/null
+++ b/src/main/java/com/eu/habbo/habbohotel/gameclients/GameClient.java
@@ -0,0 +1,179 @@
+package com.eu.habbo.habbohotel.gameclients;
+
+import com.eu.habbo.Emulator;
+import com.eu.habbo.core.Logging;
+import com.eu.habbo.habbohotel.users.Habbo;
+import com.eu.habbo.messages.PacketManager;
+import com.eu.habbo.messages.ServerMessage;
+import com.eu.habbo.messages.outgoing.MessageComposer;
+
+import io.netty.buffer.ByteBuf;
+import io.netty.buffer.Unpooled;
+import io.netty.channel.Channel;
+import io.netty.channel.ChannelOption;
+
+import java.net.InetSocketAddress;
+import java.sql.Connection;
+import java.sql.PreparedStatement;
+import java.sql.SQLException;
+import java.util.ArrayList;
+
+public class GameClient
+{
+ /**
+ * The Channel this client is using.
+ */
+ private final Channel channel;
+
+ /**
+ * The Habbo it is linked to.
+ */
+ private Habbo habbo;
+
+ /**
+ * The MAC Address of the connected client.
+ */
+ private String machineId = "";
+
+ public GameClient(Channel channel)
+ {
+ this.channel = channel;
+ }
+
+ /**
+ * Sends an composer to the client.
+ * @param composer The composer to send.
+ */
+ public void sendResponse(MessageComposer composer)
+ {
+ if(this.channel.isOpen())
+ {
+ try
+ {
+ ServerMessage msg = composer.compose();
+ sendResponse(msg);
+ } catch (Exception e)
+ {
+ Emulator.getLogging().logPacketError(e);
+ }
+ }
+ }
+
+ /**
+ * Sends an response to the client.
+ * @param response The response to send.
+ */
+ public void sendResponse(ServerMessage response)
+ {
+ if(this.channel.isOpen())
+ {
+ if (response == null || response.getHeader() <= 0)
+ {
+ return;
+ }
+
+ if (PacketManager.DEBUG_SHOW_PACKETS)
+ Emulator.getLogging().logPacketLine("[" + Logging.ANSI_PURPLE + "SERVER" + Logging.ANSI_RESET + "] => [" + response.getHeader() + "] -> " + response.getBodyString());
+
+ this.channel.write(response.get(), this.channel.voidPromise());
+ this.channel.flush();
+ }
+ }
+
+ /**
+ * Sends multiple responses to the client.
+ * @param responses The responses to send.
+ */
+ public void sendResponses(ArrayList responses)
+ {
+ ByteBuf buffer = Unpooled.buffer();
+
+ if(this.channel.isOpen())
+ {
+ for(ServerMessage response : responses)
+ {
+ if (response == null || response.getHeader() <= 0)
+ {
+ return;
+ }
+
+ if (PacketManager.DEBUG_SHOW_PACKETS)
+ Emulator.getLogging().logPacketLine("[" + Logging.ANSI_PURPLE + "SERVER" + Logging.ANSI_RESET + "] => [" + response.getHeader() + "] -> " + response.getBodyString());
+
+ buffer.writeBytes(response.get());
+ }
+ this.channel.write(buffer.copy(), this.channel.voidPromise());
+ this.channel.flush();
+ }
+ buffer.release();
+ }
+
+ /**
+ * Disposes the client. Disconnection mostly.
+ */
+ public void dispose()
+ {
+ try
+ {
+ this.channel.close();
+
+ if(this.habbo != null)
+ {
+ if(this.habbo.isOnline())
+ {
+ this.habbo.getHabboInfo().setOnline(false);
+ this.habbo.disconnect();
+ }
+
+ this.habbo = null;
+ }
+ }
+ catch (Exception e)
+ {
+ Emulator.getLogging().logErrorLine(e);
+ }
+ }
+
+ public Channel getChannel()
+ {
+ return this.channel;
+ }
+
+ public Habbo getHabbo()
+ {
+ return this.habbo;
+ }
+
+ public void setHabbo(Habbo habbo)
+ {
+ this.habbo = habbo;
+ }
+
+ public String getMachineId()
+ {
+ return this.machineId;
+ }
+
+ public void setMachineId(String machineId)
+ {
+ if (machineId == null)
+ {
+ throw new RuntimeException("Cannot set machineID to NULL");
+ }
+ this.machineId = machineId;
+
+ if (this.habbo != null)
+ {
+ try (Connection connection = Emulator.getDatabase().getDataSource().getConnection(); PreparedStatement statement = connection.prepareStatement("UPDATE users SET machine_id = ? WHERE id = ? LIMIT 1"))
+ {
+ statement.setString(1, this.machineId);
+ statement.setInt(2, this.habbo.getHabboInfo().getId());
+ statement.execute();
+ }
+ catch (SQLException e)
+ {
+ Emulator.getLogging().logSQLException(e);
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/com/eu/habbo/habbohotel/gameclients/GameClientManager.java b/src/main/java/com/eu/habbo/habbohotel/gameclients/GameClientManager.java
new file mode 100644
index 00000000..2e363202
--- /dev/null
+++ b/src/main/java/com/eu/habbo/habbohotel/gameclients/GameClientManager.java
@@ -0,0 +1,209 @@
+package com.eu.habbo.habbohotel.gameclients;
+
+import com.eu.habbo.habbohotel.rooms.Room;
+import com.eu.habbo.habbohotel.users.Habbo;
+import com.eu.habbo.messages.ServerMessage;
+import com.eu.habbo.messages.outgoing.MessageComposer;
+
+import io.netty.channel.*;
+import io.netty.util.AttributeKey;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.concurrent.ConcurrentHashMap;
+import java.util.concurrent.ConcurrentMap;
+import java.util.stream.Collectors;
+
+public class GameClientManager
+{
+ private final ConcurrentMap clients;
+
+ public static final AttributeKey CLIENT = AttributeKey.valueOf("GameClient");
+
+ public GameClientManager()
+ {
+ this.clients = new ConcurrentHashMap();
+ }
+
+ public ConcurrentMap getSessions()
+ {
+ return this.clients;
+ }
+
+ public boolean containsClient(Channel channel)
+ {
+ return this.clients.containsKey(channel.id());
+ }
+
+ public GameClient getClient(Channel channel)
+ {
+ if (this.clients.containsKey(channel.id())) {
+ return this.clients.get(channel.id());
+ }
+ return null;
+ }
+
+ public GameClient getClient(Habbo habbo)
+ {
+ for(GameClient client : this.clients.values())
+ {
+ if(client.getHabbo() == habbo)
+ return client;
+ }
+
+ return null;
+ }
+
+ public boolean addClient(ChannelHandlerContext ctx)
+ {
+ GameClient client = new GameClient(ctx.channel());
+ ctx.channel().closeFuture().addListener(new ChannelFutureListener()
+ {
+ @Override
+ public void operationComplete(ChannelFuture channelFuture) throws Exception
+ {
+ disposeClient(ctx.channel());
+ }
+ });
+
+ ctx.attr(CLIENT).set(client);
+ ctx.fireChannelRegistered();
+
+ return this.clients.putIfAbsent(ctx.channel().id(), client) == null;
+ }
+
+ public void disposeClient(Channel channel)
+ {
+ GameClient client = this.getClient(channel);
+
+ if (client != null)
+ {
+ client.dispose();
+ }
+
+ channel.attr(CLIENT).set(null);
+ channel.deregister();
+ channel.closeFuture();
+ channel.close();
+ this.clients.remove(channel.id());
+ }
+
+ public boolean containsHabbo(Integer id)
+ {
+ if (!this.clients.isEmpty())
+ {
+ for (GameClient client : this.clients.values())
+ {
+ if (client.getHabbo() != null)
+ {
+ if (client.getHabbo().getHabboInfo() != null)
+ {
+ if (client.getHabbo().getHabboInfo().getId() == id)
+ return true;
+ }
+ }
+ }
+ }
+ return false;
+ }
+
+ public Habbo getHabbo(int id)
+ {
+ for(GameClient client : this.clients.values())
+ {
+ if(client.getHabbo() == null)
+ continue;
+
+ if(client.getHabbo().getHabboInfo().getId() == id)
+ return client.getHabbo();
+ }
+
+ return null;
+ }
+
+ public Habbo getHabbo(String username)
+ {
+ for(GameClient client : this.clients.values())
+ {
+ if(client.getHabbo() == null)
+ continue;
+
+ if(client.getHabbo().getHabboInfo().getUsername().equalsIgnoreCase(username))
+ return client.getHabbo();
+ }
+
+ return null;
+ }
+
+ public List getHabbosWithIP(String ip)
+ {
+ List habbos = new ArrayList();
+
+ for (GameClient client : this.clients.values())
+ {
+ if (client.getHabbo() != null && client.getHabbo().getHabboInfo() != null)
+ {
+ if (client.getHabbo().getHabboInfo().getIpLogin().equalsIgnoreCase(ip))
+ {
+ habbos.add(client.getHabbo());
+ }
+ }
+ }
+
+ return habbos;
+ }
+
+ public List getHabbosWithMachineId(String machineId)
+ {
+ List habbos = new ArrayList();
+
+ for (GameClient client : this.clients.values())
+ {
+ if (client.getHabbo() != null && client.getHabbo().getHabboInfo() != null && client.getMachineId().equalsIgnoreCase(machineId))
+ {
+ habbos.add(client.getHabbo());
+ }
+ }
+
+ return habbos;
+ }
+
+ public void sendBroadcastResponse(MessageComposer composer)
+ {
+ sendBroadcastResponse(composer.compose());
+ }
+
+ public void sendBroadcastResponse(ServerMessage msg)
+ {
+ for (GameClient client : this.clients.values()) {
+ client.sendResponse(msg);
+ }
+ }
+
+ public void sendBroadcastResponse(ServerMessage msg, GameClient exclude)
+ {
+ for (GameClient client : this.clients.values()) {
+ if(client.equals(exclude))
+ continue;
+
+ client.sendResponse(msg);
+ }
+ }
+
+ public void sendBroadcastResponse(ServerMessage message, String minPermission, GameClient exclude)
+ {
+ for (GameClient client : this.clients.values())
+ {
+ if(client.equals(exclude))
+ continue;
+
+ if(client.getHabbo() != null)
+ {
+ if (client.getHabbo().hasPermission(minPermission))
+ {
+ client.sendResponse(message);
+ }
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/com/eu/habbo/habbohotel/games/Game.java b/src/main/java/com/eu/habbo/habbohotel/games/Game.java
new file mode 100644
index 00000000..3d384b94
--- /dev/null
+++ b/src/main/java/com/eu/habbo/habbohotel/games/Game.java
@@ -0,0 +1,324 @@
+package com.eu.habbo.habbohotel.games;
+
+import com.eu.habbo.Emulator;
+import com.eu.habbo.habbohotel.achievements.AchievementManager;
+import com.eu.habbo.habbohotel.items.interactions.InteractionWiredHighscore;
+import com.eu.habbo.habbohotel.rooms.Room;
+import com.eu.habbo.habbohotel.users.Habbo;
+import com.eu.habbo.habbohotel.users.HabboItem;
+import com.eu.habbo.habbohotel.wired.WiredHandler;
+import com.eu.habbo.habbohotel.wired.WiredTriggerType;
+import com.eu.habbo.plugin.Event;
+import com.eu.habbo.plugin.events.games.GameHabboJoinEvent;
+import com.eu.habbo.plugin.events.games.GameHabboLeaveEvent;
+import com.eu.habbo.plugin.events.games.GameStartedEvent;
+import com.eu.habbo.plugin.events.games.GameStoppedEvent;
+import com.eu.habbo.threading.runnables.SaveScoreForTeam;
+import gnu.trove.map.hash.THashMap;
+
+import java.util.Map;
+
+public abstract class Game implements Runnable
+{
+ /**
+ * The class that should be used that defines teams.
+ */
+ public final Class extends GameTeam> gameTeamClazz;
+
+ /**
+ * The class that should be used that defines a player.
+ */
+ public final Class extends GamePlayer> gamePlayerClazz;
+
+ /**
+ * All the teams.
+ */
+ protected final THashMap teams = new THashMap