diff --git a/sqlupdates/2_0_0_TO_2_1_0-RC-1.sql b/sqlupdates/2_0_0_TO_2_1_0-RC-1.sql index 8d2c7349..be6dc99c 100644 --- a/sqlupdates/2_0_0_TO_2_1_0-RC-1.sql +++ b/sqlupdates/2_0_0_TO_2_1_0-RC-1.sql @@ -67,7 +67,7 @@ DROP PROCEDURE IF EXISTS DEFAULT_YTTV_PLAYLISTS; ALTER TABLE `permissions` ADD COLUMN `cmd_update_youtube_playlists` enum('0','1') NOT NULL DEFAULT '0'; -INSERT INTO `emulator_texts`(`key`, `value`) VALUES ('commands.keys.cmd_update_youtube_playlists', 'update_youtube;update_youtube_playlists') +INSERT INTO `emulator_texts`(`key`, `value`) VALUES ('commands.keys.cmd_update_youtube_playlists', 'update_youtube;update_youtube_playlists'); INSERT INTO `emulator_texts`(`key`, `value`) VALUES ('commands.succes.cmd_update_youtube_playlists', 'YouTube playlists have been refreshed!'); DROP PROCEDURE IF EXISTS UPDATE_TEAM_WIREDS; diff --git a/sqlupdates/2_1_0-RC-1_TO_2_1_0-RC-2.sql b/sqlupdates/2_1_0-RC-1_TO_2_1_0-RC-2.sql new file mode 100644 index 00000000..0890d959 --- /dev/null +++ b/sqlupdates/2_1_0-RC-1_TO_2_1_0-RC-2.sql @@ -0,0 +1,10 @@ +ALTER TABLE `permissions` +ADD COLUMN `cmd_add_youtube_playlist` enum('0','1') NOT NULL DEFAULT '0'; + +INSERT INTO `emulator_texts`(`key`, `value`) VALUES ('commands.keys.cmd_add_youtube_playlist', 'add_youtube;add_playlist;add_youtube_playlist'); +INSERT INTO `emulator_texts`(`key`, `value`) VALUES ('commands.error.cmd_add_youtube_playlist.usage', 'Usage: base_item_id youtube_playlist_id'); +INSERT INTO `emulator_texts`(`key`, `value`) VALUES ('commands.error.cmd_add_youtube_playlist.no_base_item', 'A base item with that ID could not be found.'); +INSERT INTO `emulator_texts`(`key`, `value`) VALUES ('commands.error.cmd_add_youtube_playlist.failed_playlist', 'Error: unable to fetch the given YouTube playlist.'); +INSERT INTO `emulator_texts`(`key`, `value`) VALUES ('commands.succes.cmd_add_youtube_playlist', 'The playlist has been added successfully!'); + +UPDATE `emulator_texts` SET `value` = 'Superwired Usage Information. Possible reward types:
badge: BADGE CODE
Credits: credits#amount
Pixels: pixels#amount
Points: points#amount
Respect: respect#amount
Furniture: furni#FurnitureID
Catalog Item: cata#CatalogItemID' WHERE `key` = 'hotel.wired.superwired.info'; \ No newline at end of file diff --git a/src/main/java/com/eu/habbo/habbohotel/catalog/CatalogManager.java b/src/main/java/com/eu/habbo/habbohotel/catalog/CatalogManager.java index 2658c248..99296bb2 100644 --- a/src/main/java/com/eu/habbo/habbohotel/catalog/CatalogManager.java +++ b/src/main/java/com/eu/habbo/habbohotel/catalog/CatalogManager.java @@ -589,24 +589,10 @@ public class CatalogManager { return this.catalogPages.get(pageId); } - public CatalogPage getCatalogPage(final String captionSafe) { - final CatalogPage[] page = {null}; - - synchronized (this.catalogPages) { - this.catalogPages.forEachValue(new TObjectProcedure() { - @Override - public boolean execute(CatalogPage object) { - if (object.getPageName().equalsIgnoreCase(captionSafe)) { - page[0] = object; - return false; - } - - return true; - } - }); - - return page[0]; - } + public CatalogPage getCatalogPage(String captionSafe) { + return this.catalogPages.valueCollection().stream() + .filter(p -> p != null && p.getPageName() != null && p.getPageName().equalsIgnoreCase(captionSafe)) + .findAny().orElse(null); } diff --git a/src/main/java/com/eu/habbo/habbohotel/commands/AddYoutubePlaylistCommand.java b/src/main/java/com/eu/habbo/habbohotel/commands/AddYoutubePlaylistCommand.java new file mode 100644 index 00000000..5318102b --- /dev/null +++ b/src/main/java/com/eu/habbo/habbohotel/commands/AddYoutubePlaylistCommand.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.items.YoutubeManager; + +import java.sql.Connection; +import java.sql.PreparedStatement; +import java.sql.SQLException; + +public class AddYoutubePlaylistCommand extends Command { + public AddYoutubePlaylistCommand() { + super("cmd_add_youtube_playlist", Emulator.getTexts().getValue("commands.keys.cmd_add_youtube_playlist").split(";")); + } + + @Override + public boolean handle(GameClient gameClient, String[] params) throws Exception { + if (params.length < 3) { + gameClient.getHabbo().whisper(Emulator.getTexts().getValue("commands.error.cmd_add_youtube_playlist.usage")); + return true; + } + + int itemId; + + try { + itemId = Integer.valueOf(params[1]); + } catch (NumberFormatException e) { + gameClient.getHabbo().whisper(Emulator.getTexts().getValue("commands.error.cmd_add_youtube_playlist.no_base_item")); + return true; + } + + if (Emulator.getGameEnvironment().getItemManager().getItem(itemId) == null) { + gameClient.getHabbo().whisper(Emulator.getTexts().getValue("commands.error.cmd_add_youtube_playlist.no_base_item")); + return true; + } + + YoutubeManager.YoutubePlaylist playlist = Emulator.getGameEnvironment().getItemManager().getYoutubeManager().getPlaylistDataById(params[2]); + + if (playlist == null) { + gameClient.getHabbo().whisper(Emulator.getTexts().getValue("commands.error.cmd_add_youtube_playlist.failed_playlist")); + return true; + } + + Emulator.getGameEnvironment().getItemManager().getYoutubeManager().addPlaylistToItem(Integer.valueOf(params[1]), playlist); + + try (Connection connection = Emulator.getDatabase().getDataSource().getConnection(); PreparedStatement statement = connection.prepareStatement("INSERT INTO `youtube_playlists` (`item_id`, `playlist_id`) VALUES (?, ?)")) { + statement.setInt(1, itemId); + statement.setString(2, params[2]); + + statement.execute(); + } catch (SQLException e) { + Emulator.getLogging().logSQLException(e); + } + + gameClient.getHabbo().whisper(Emulator.getTexts().getValue("commands.succes.cmd_add_youtube_playlist")); + + return true; + } +} diff --git a/src/main/java/com/eu/habbo/habbohotel/commands/CommandHandler.java b/src/main/java/com/eu/habbo/habbohotel/commands/CommandHandler.java index 1ba4be67..d51eb126 100644 --- a/src/main/java/com/eu/habbo/habbohotel/commands/CommandHandler.java +++ b/src/main/java/com/eu/habbo/habbohotel/commands/CommandHandler.java @@ -276,6 +276,8 @@ public class CommandHandler { addCommand(new UpdateWordFilterCommand()); addCommand(new UserInfoCommand()); addCommand(new WordQuizCommand()); + addCommand(new UpdateYoutubePlaylistsCommand()); + addCommand(new AddYoutubePlaylistCommand()); addCommand(new TestCommand()); } diff --git a/src/main/java/com/eu/habbo/habbohotel/commands/LayCommand.java b/src/main/java/com/eu/habbo/habbohotel/commands/LayCommand.java index 4a186528..abc534bb 100644 --- a/src/main/java/com/eu/habbo/habbohotel/commands/LayCommand.java +++ b/src/main/java/com/eu/habbo/habbohotel/commands/LayCommand.java @@ -14,6 +14,9 @@ public class LayCommand extends Command { @Override public boolean handle(GameClient gameClient, String[] params) throws Exception { + if (gameClient.getHabbo().getRoomUnit() == null || !gameClient.getHabbo().getRoomUnit().canForcePosture()) + return true; + gameClient.getHabbo().getRoomUnit().cmdLay = true; gameClient.getHabbo().getHabboInfo().getCurrentRoom().updateHabbo(gameClient.getHabbo()); gameClient.getHabbo().getRoomUnit().cmdSit = true; diff --git a/src/main/java/com/eu/habbo/habbohotel/items/YoutubeManager.java b/src/main/java/com/eu/habbo/habbohotel/items/YoutubeManager.java index 7e6ece37..631f15d5 100644 --- a/src/main/java/com/eu/habbo/habbohotel/items/YoutubeManager.java +++ b/src/main/java/com/eu/habbo/habbohotel/items/YoutubeManager.java @@ -90,11 +90,9 @@ public class YoutubeManager { youtubeDataLoaderPool.submit(() -> { ArrayList playlists = this.playlists.getOrDefault(itemId, new ArrayList<>()); - YoutubePlaylist playlist = this.playlistCache.containsKey(playlistId) ? this.playlistCache.get(playlistId) : this.getPlaylistDataById(playlistId); + YoutubePlaylist playlist = this.getPlaylistDataById(playlistId); if (playlist != null) { playlists.add(playlist); - - this.playlistCache.put(playlistId, playlist); } else { Emulator.getLogging().logErrorLine("Failed to load YouTube playlist: " + playlistId); } @@ -117,7 +115,9 @@ public class YoutubeManager { Emulator.getLogging().logStart("YouTube Manager -> Loaded! (" + (System.currentTimeMillis() - millis) + " MS)"); } - private YoutubePlaylist getPlaylistDataById(String playlistId) { + public YoutubePlaylist getPlaylistDataById(String playlistId) { + if (this.playlistCache.containsKey(playlistId)) return this.playlistCache.get(playlistId); + try { URL myUrl = new URL("https://www.youtube.com/playlist?list=" + playlistId); @@ -159,6 +159,8 @@ public class YoutubeManager { br.close(); + this.playlistCache.put(playlistId, playlist); + return playlist; } catch (java.io.IOException e) { e.printStackTrace(); @@ -170,4 +172,8 @@ public class YoutubeManager { public ArrayList getPlaylistsForItemId(int itemId) { return this.playlists.get(itemId); } + + public void addPlaylistToItem(int itemId, YoutubePlaylist playlist) { + this.playlists.computeIfAbsent(itemId, k -> new ArrayList<>()).add(playlist); + } } \ No newline at end of file diff --git a/src/main/java/com/eu/habbo/habbohotel/items/interactions/wired/conditions/WiredConditionNotInTeam.java b/src/main/java/com/eu/habbo/habbohotel/items/interactions/wired/conditions/WiredConditionNotInTeam.java index 1f97a4cc..8258e6fa 100644 --- a/src/main/java/com/eu/habbo/habbohotel/items/interactions/wired/conditions/WiredConditionNotInTeam.java +++ b/src/main/java/com/eu/habbo/habbohotel/items/interactions/wired/conditions/WiredConditionNotInTeam.java @@ -86,7 +86,7 @@ public class WiredConditionNotInTeam extends InteractionWiredCondition { public boolean saveData(ClientMessage packet) { packet.readInt(); - this.teamColor = GameTeamColors.values()[packet.readInt() - 1]; + this.teamColor = GameTeamColors.values()[packet.readInt()]; return true; } diff --git a/src/main/java/com/eu/habbo/habbohotel/items/interactions/wired/conditions/WiredConditionTeamMember.java b/src/main/java/com/eu/habbo/habbohotel/items/interactions/wired/conditions/WiredConditionTeamMember.java index 0d29e6d0..9349cbb2 100644 --- a/src/main/java/com/eu/habbo/habbohotel/items/interactions/wired/conditions/WiredConditionTeamMember.java +++ b/src/main/java/com/eu/habbo/habbohotel/items/interactions/wired/conditions/WiredConditionTeamMember.java @@ -86,7 +86,7 @@ public class WiredConditionTeamMember extends InteractionWiredCondition { public boolean saveData(ClientMessage packet) { packet.readInt(); - this.teamColor = GameTeamColors.values()[packet.readInt() - 1]; + this.teamColor = GameTeamColors.values()[packet.readInt()]; return true; } diff --git a/src/main/java/com/eu/habbo/habbohotel/items/interactions/wired/effects/WiredEffectJoinTeam.java b/src/main/java/com/eu/habbo/habbohotel/items/interactions/wired/effects/WiredEffectJoinTeam.java index f114baf6..3285865a 100644 --- a/src/main/java/com/eu/habbo/habbohotel/items/interactions/wired/effects/WiredEffectJoinTeam.java +++ b/src/main/java/com/eu/habbo/habbohotel/items/interactions/wired/effects/WiredEffectJoinTeam.java @@ -118,7 +118,7 @@ public class WiredEffectJoinTeam extends InteractionWiredEffect { @Override public boolean saveData(ClientMessage packet, GameClient gameClient) { packet.readInt(); - this.teamColor = GameTeamColors.values()[packet.readInt() - 1]; + this.teamColor = GameTeamColors.values()[packet.readInt()]; int unknownInt = packet.readInt(); packet.readString(); this.setDelay(packet.readInt()); diff --git a/src/main/java/com/eu/habbo/habbohotel/rooms/Room.java b/src/main/java/com/eu/habbo/habbohotel/rooms/Room.java index 2cade797..5ca538ea 100644 --- a/src/main/java/com/eu/habbo/habbohotel/rooms/Room.java +++ b/src/main/java/com/eu/habbo/habbohotel/rooms/Room.java @@ -3931,11 +3931,12 @@ public class Room implements Comparable, ISerialize, Runnable { } public void makeSit(Habbo habbo) { - if (habbo.getRoomUnit().hasStatus(RoomUnitStatus.SIT)) { + if (habbo.getRoomUnit() == null) return; + + if (habbo.getRoomUnit().hasStatus(RoomUnitStatus.SIT) || !habbo.getRoomUnit().canForcePosture()) { return; } - this.dance(habbo, DanceType.NONE); habbo.getRoomUnit().cmdSit = true; habbo.getRoomUnit().setBodyRotation(RoomUserRotation.values()[habbo.getRoomUnit().getBodyRotation().getValue() - habbo.getRoomUnit().getBodyRotation().getValue() % 2]); @@ -3994,6 +3995,8 @@ public class Room implements Comparable, ISerialize, Runnable { } if (item.getBaseItem().getType() == FurnitureType.FLOOR) { + if (this.layout == null) return; + this.updateTiles(this.getLayout().getTilesAt(this.layout.getTile(item.getX(), item.getY()), item.getBaseItem().getWidth(), item.getBaseItem().getLength(), item.getRotation())); } } diff --git a/src/main/java/com/eu/habbo/habbohotel/rooms/RoomUnit.java b/src/main/java/com/eu/habbo/habbohotel/rooms/RoomUnit.java index 07809406..d1c6aa6c 100644 --- a/src/main/java/com/eu/habbo/habbohotel/rooms/RoomUnit.java +++ b/src/main/java/com/eu/habbo/habbohotel/rooms/RoomUnit.java @@ -4,6 +4,8 @@ import com.eu.habbo.Emulator; import com.eu.habbo.habbohotel.items.Item; import com.eu.habbo.habbohotel.items.interactions.InteractionGuildGate; import com.eu.habbo.habbohotel.items.interactions.InteractionTeleport; +import com.eu.habbo.habbohotel.items.interactions.InteractionWater; +import com.eu.habbo.habbohotel.items.interactions.InteractionWaterItem; import com.eu.habbo.habbohotel.pets.Pet; import com.eu.habbo.habbohotel.pets.RideablePet; import com.eu.habbo.habbohotel.users.DanceType; @@ -722,4 +724,12 @@ public class RoomUnit { public void setCanLeaveRoomByDoor(boolean canLeaveRoomByDoor) { this.canLeaveRoomByDoor = canLeaveRoomByDoor; } + + public boolean canForcePosture() { + if (this.room == null) return false; + + HabboItem topItem = this.room.getTopItemAt(this.getX(), this.getY()); + + return topItem == null || (!(topItem instanceof InteractionWater) && !(topItem instanceof InteractionWaterItem)); + } }