Merge branch 'ms4/supernova-room-managers' into 'ms4/supernova'

Various room managers

See merge request morningstar/Arcturus-Community!82
This commit is contained in:
Dominic Bridge 2023-12-19 19:30:38 +00:00
commit 0ab52d40af
117 changed files with 1308 additions and 1136 deletions

View File

@ -2,7 +2,7 @@ package com.eu.habbo.core;
import com.eu.habbo.Emulator;
import com.eu.habbo.habbohotel.rooms.Room;
import com.eu.habbo.habbohotel.rooms.RoomChatMessage;
import com.eu.habbo.habbohotel.rooms.chat.RoomChatMessage;
import com.eu.habbo.habbohotel.rooms.constants.RoomChatMessageBubbles;
import com.eu.habbo.messages.outgoing.rooms.users.UserRemoveMessageComposer;
import com.eu.habbo.messages.outgoing.rooms.users.WhisperMessageComposer;

View File

@ -2,7 +2,7 @@ package com.eu.habbo.habbohotel.bots;
import com.eu.habbo.Emulator;
import com.eu.habbo.habbohotel.rooms.Room;
import com.eu.habbo.habbohotel.rooms.RoomChatMessage;
import com.eu.habbo.habbohotel.rooms.chat.RoomChatMessage;
import com.eu.habbo.habbohotel.rooms.constants.RoomChatMessageBubbles;
import com.eu.habbo.habbohotel.rooms.constants.RoomUserAction;
import com.eu.habbo.habbohotel.rooms.bots.entities.RoomBot;

View File

@ -1,7 +1,7 @@
package com.eu.habbo.habbohotel.bots;
import com.eu.habbo.Emulator;
import com.eu.habbo.habbohotel.rooms.RoomChatMessage;
import com.eu.habbo.habbohotel.rooms.chat.RoomChatMessage;
import com.eu.habbo.habbohotel.rooms.constants.RoomUnitStatus;
import com.eu.habbo.habbohotel.wired.WiredHandler;
import com.eu.habbo.habbohotel.wired.WiredTriggerType;

View File

@ -2,7 +2,7 @@ package com.eu.habbo.habbohotel.bots;
import com.eu.habbo.Emulator;
import com.eu.habbo.habbohotel.modtool.ModToolRoomVisit;
import com.eu.habbo.habbohotel.rooms.RoomChatMessage;
import com.eu.habbo.habbohotel.rooms.chat.RoomChatMessage;
import com.eu.habbo.habbohotel.users.Habbo;
import gnu.trove.set.hash.THashSet;

View File

@ -149,11 +149,11 @@ public class CommandsManager {
Room room = gameClient.getHabbo().getRoomUnit().getRoom();
if (room.getRoomUnitManager().getCurrentPets().isEmpty()) {
if (room.getRoomUnitManager().getRoomPetManager().getCurrentPets().isEmpty()) {
return false;
}
for(Pet pet : room.getRoomUnitManager().getCurrentPets().values()) {
for(Pet pet : room.getRoomUnitManager().getRoomPetManager().getCurrentPets().values()) {
if (pet != null && pet.getName().equalsIgnoreCase(args[0])) {
StringBuilder commandBuilder = new StringBuilder();

View File

@ -20,7 +20,7 @@ public class LayCommand extends Command {
return true;
gameClient.getHabbo().getRoomUnit().setCmdLayEnabled(true);
gameClient.getHabbo().getRoomUnit().getRoom().updateRoomUnit(gameClient.getHabbo().getRoomUnit());
gameClient.getHabbo().getRoomUnit().getRoom().getRoomUnitManager().updateRoomUnit(gameClient.getHabbo().getRoomUnit());
gameClient.getHabbo().getRoomUnit().setCmdSitEnabled(true);
gameClient.getHabbo().getRoomUnit().setBodyRotation(RoomRotation.values()[gameClient.getHabbo().getRoomUnit().getBodyRotation().getValue() - gameClient.getHabbo().getRoomUnit().getBodyRotation().getValue() % 2]);

View File

@ -21,7 +21,7 @@ public class PetInfoCommand extends Command {
String name = params[1];
gameClient.getHabbo().getRoomUnit().getRoom().getRoomUnitManager().getCurrentPets().forEach((a, pet) -> {
gameClient.getHabbo().getRoomUnit().getRoom().getRoomUnitManager().getRoomPetManager().getCurrentPets().forEach((a, pet) -> {
if (pet.getName().equalsIgnoreCase(name)) {
gameClient.getHabbo().alert("" +
getTextsValue("commands.generic.cmd_pet_info.title") + ": " + pet.getName() + "\r\n" +

View File

@ -2,7 +2,7 @@ package com.eu.habbo.habbohotel.commands.list;
import com.eu.habbo.habbohotel.commands.Command;
import com.eu.habbo.habbohotel.gameclients.GameClient;
import com.eu.habbo.habbohotel.rooms.RoomChatMessage;
import com.eu.habbo.habbohotel.rooms.chat.RoomChatMessage;
import com.eu.habbo.habbohotel.rooms.constants.RoomChatMessageBubbles;
import com.eu.habbo.habbohotel.rooms.RoomTile;
import com.eu.habbo.habbohotel.users.Habbo;

View File

@ -2,7 +2,7 @@ package com.eu.habbo.habbohotel.commands.list;
import com.eu.habbo.habbohotel.commands.Command;
import com.eu.habbo.habbohotel.gameclients.GameClient;
import com.eu.habbo.habbohotel.rooms.RoomChatMessage;
import com.eu.habbo.habbohotel.rooms.chat.RoomChatMessage;
import com.eu.habbo.habbohotel.rooms.constants.RoomChatMessageBubbles;
import com.eu.habbo.habbohotel.rooms.RoomTile;
import com.eu.habbo.habbohotel.users.Habbo;

View File

@ -20,7 +20,7 @@ public class RedeemCommand extends Command {
@Override
public boolean handle(final GameClient gameClient, String[] params) {
if (gameClient.getHabbo().getRoomUnit().getRoom().getActiveTradeForHabbo(gameClient.getHabbo()) != null)
if (gameClient.getHabbo().getRoomUnit().getRoom().getRoomTradeManager().getActiveTradeForHabbo(gameClient.getHabbo()) != null)
return false;
ArrayList<RoomItem> items = new ArrayList<>();

View File

@ -16,8 +16,8 @@ public class RoomMuteCommand extends Command {
Room room = gameClient.getHabbo().getRoomUnit().getRoom();
if (room != null) {
room.setMuted(!room.isMuted());
gameClient.getHabbo().whisper(Emulator.getTexts().getValue("commands.succes.cmd_roommute." + (room.isMuted() ? "muted" : "unmuted")), RoomChatMessageBubbles.ALERT);
room.getRoomChatManager().setMuted(!room.getRoomChatManager().isMuted());
gameClient.getHabbo().whisper(Emulator.getTexts().getValue("commands.succes.cmd_roommute." + (room.getRoomChatManager().isMuted() ? "muted" : "unmuted")), RoomChatMessageBubbles.ALERT);
}
return true;

View File

@ -2,7 +2,7 @@ package com.eu.habbo.habbohotel.commands.list;
import com.eu.habbo.habbohotel.commands.Command;
import com.eu.habbo.habbohotel.gameclients.GameClient;
import com.eu.habbo.habbohotel.rooms.RoomChatMessage;
import com.eu.habbo.habbohotel.rooms.chat.RoomChatMessage;
import com.eu.habbo.habbohotel.rooms.constants.RoomChatMessageBubbles;
import com.eu.habbo.habbohotel.users.Habbo;
import com.eu.habbo.messages.outgoing.rooms.users.ChatMessageComposer;

View File

@ -3,7 +3,7 @@ package com.eu.habbo.habbohotel.commands.list;
import com.eu.habbo.Emulator;
import com.eu.habbo.habbohotel.commands.Command;
import com.eu.habbo.habbohotel.gameclients.GameClient;
import com.eu.habbo.habbohotel.rooms.RoomChatMessage;
import com.eu.habbo.habbohotel.rooms.chat.RoomChatMessage;
import com.eu.habbo.habbohotel.rooms.constants.RoomChatMessageBubbles;
import com.eu.habbo.habbohotel.users.Habbo;
import com.eu.habbo.messages.outgoing.rooms.users.ShoutMessageComposer;

View File

@ -3,7 +3,7 @@ package com.eu.habbo.habbohotel.commands.list;
import com.eu.habbo.Emulator;
import com.eu.habbo.habbohotel.commands.Command;
import com.eu.habbo.habbohotel.gameclients.GameClient;
import com.eu.habbo.habbohotel.rooms.RoomTrade;
import com.eu.habbo.habbohotel.rooms.trades.RoomTrade;
import com.eu.habbo.messages.ServerMessage;
import com.eu.habbo.messages.outgoing.generic.alerts.HabboBroadcastMessageComposer;
import com.eu.habbo.messages.outgoing.generic.alerts.HotelWillCloseInMinutesComposer;

View File

@ -2,7 +2,7 @@ package com.eu.habbo.habbohotel.commands.list;
import com.eu.habbo.habbohotel.commands.Command;
import com.eu.habbo.habbohotel.gameclients.GameClient;
import com.eu.habbo.habbohotel.rooms.RoomChatMessage;
import com.eu.habbo.habbohotel.rooms.chat.RoomChatMessage;
import com.eu.habbo.habbohotel.rooms.constants.RoomChatMessageBubbles;
import com.eu.habbo.habbohotel.rooms.RoomTile;
import com.eu.habbo.habbohotel.users.Habbo;

View File

@ -25,13 +25,13 @@ public class UnmuteCommand extends Command {
return true;
}
if (!habbo.getHabboStats().allowTalk() || (habbo.getRoomUnit().getRoom() != null && habbo.getRoomUnit().getRoom().isMuted(habbo))) {
if (!habbo.getHabboStats().allowTalk() || (habbo.getRoomUnit().getRoom() != null && habbo.getRoomUnit().getRoom().getRoomInfractionManager().isMuted(habbo))) {
if (!habbo.getHabboStats().allowTalk()) {
habbo.unMute();
}
if (habbo.getRoomUnit().getRoom() != null && habbo.getRoomUnit().getRoom().isMuted(habbo)) {
habbo.getRoomUnit().getRoom().muteHabbo(habbo, 1);
if (habbo.getRoomUnit().getRoom() != null && habbo.getRoomUnit().getRoom().getRoomInfractionManager().isMuted(habbo)) {
habbo.getRoomUnit().getRoom().getRoomInfractionManager().muteHabbo(habbo, 1);
}
gameClient.getHabbo().whisper(replaceUser(getTextsValue("commands.succes.cmd_unmute"), params[1]), RoomChatMessageBubbles.ALERT);

View File

@ -13,7 +13,7 @@ public class WordQuizCommand extends Command {
@Override
public boolean handle(GameClient gameClient, String[] params) {
if (!gameClient.getHabbo().getRoomUnit().getRoom().hasActiveWordQuiz()) {
if (!gameClient.getHabbo().getRoomUnit().getRoom().getRoomWordQuizManager().hasActiveWordQuiz()) {
if(params.length == 1) {
gameClient.getHabbo().whisper(getTextsValue("commands.description.cmd_word_quiz"), RoomChatMessageBubbles.ALERT);
return true;
@ -31,7 +31,7 @@ public class WordQuizCommand extends Command {
question.append(" ").append(params[i]);
}
gameClient.getHabbo().getRoomUnit().getRoom().startWordQuiz(question.toString(), duration * 1000);
gameClient.getHabbo().getRoomUnit().getRoom().getRoomWordQuizManager().startWordQuiz(question.toString(), duration * 1000);
}
return true;
}

View File

@ -137,7 +137,7 @@ public class InteractionGymEquipment extends InteractionEffectTile implements IC
if (roomUnit != null) {
roomUnit.setRotation(RoomRotation.fromValue(rotation));
room.updateRoomUnit(roomUnit);
room.getRoomUnitManager().updateRoomUnit(roomUnit);
}
}
}

View File

@ -97,7 +97,7 @@ public class InteractionObstacle extends RoomItem implements ICycleable {
Habbo habbo = room.getRoomUnitManager().getHabboByRoomUnit(roomUnit);
if (habbo == null) {
Pet pet = room.getRoomUnitManager().getPetByRoomUnit(roomUnit);
Pet pet = room.getRoomUnitManager().getRoomPetManager().getPetByRoomUnit(roomUnit);
if (pet instanceof HorsePet && ((HorsePet) pet).getRider() != null) {
if (roomUnit.getBodyRotation().getValue() % 2 == 0) {
@ -126,7 +126,7 @@ public class InteractionObstacle extends RoomItem implements ICycleable {
Habbo habbo = room.getRoomUnitManager().getHabboByRoomUnit(roomUnit);
if (habbo == null) {
Pet pet = room.getRoomUnitManager().getPetByRoomUnit(roomUnit);
Pet pet = room.getRoomUnitManager().getRoomPetManager().getPetByRoomUnit(roomUnit);
if (pet instanceof HorsePet && ((HorsePet) pet).getRider() != null) {
pet.getRoomUnit().removeStatus(RoomUnitStatus.JUMP);

View File

@ -83,7 +83,7 @@ public class InteractionWater extends InteractionDefault {
if(roomUnit == null) return;
roomUnit.setSwimming(true);
Pet pet = room.getRoomUnitManager().getPetByRoomUnit(roomUnit);
Pet pet = room.getRoomUnitManager().getRoomPetManager().getPetByRoomUnit(roomUnit);
if (pet == null)
return;
@ -100,7 +100,7 @@ public class InteractionWater extends InteractionDefault {
super.onWalkOff(roomUnit, room, objects);
if ( roomUnit.getRoomUnitType() != RoomUnitType.PET) return;
Pet pet = room.getRoomUnitManager().getPetByRoomUnit(roomUnit);
Pet pet = room.getRoomUnitManager().getRoomPetManager().getPetByRoomUnit(roomUnit);
if (pet == null) return;
@ -133,7 +133,7 @@ public class InteractionWater extends InteractionDefault {
public boolean canWalkOn(RoomUnit roomUnit, Room room, Object[] objects) {
if (!super.canWalkOn(roomUnit, room, objects)) return false;
Pet pet = room.getRoomUnitManager().getPetByRoomUnit(roomUnit);
Pet pet = room.getRoomUnitManager().getRoomPetManager().getPetByRoomUnit(roomUnit);
return pet == null || pet.getPetData().isCanSwim();
}

View File

@ -68,7 +68,7 @@ public class InteractionNest extends RoomItem {
public void onWalkOn(RoomUnit roomUnit, Room room, Object[] objects) throws Exception {
super.onWalkOn(roomUnit, room, objects);
Pet pet = room.getRoomUnitManager().getPetByRoomUnit(roomUnit);
Pet pet = room.getRoomUnitManager().getRoomPetManager().getPetByRoomUnit(roomUnit);
if (pet == null)
return;

View File

@ -35,7 +35,7 @@ public class InteractionPetBreedingNest extends RoomItem {
@Override
public boolean canWalkOn(RoomUnit roomUnit, Room room, Object[] objects) {
return room.getRoomUnitManager().getPetByRoomUnit(roomUnit) != null && !this.boxFull();
return room.getRoomUnitManager().getRoomPetManager().getPetByRoomUnit(roomUnit) != null && !this.boxFull();
}
@Override
@ -59,7 +59,7 @@ public class InteractionPetBreedingNest extends RoomItem {
@Override
public void onWalkOn(RoomUnit roomUnit, Room room, Object[] objects) {
Pet pet = room.getRoomUnitManager().getPetByRoomUnit(roomUnit);
Pet pet = room.getRoomUnitManager().getRoomPetManager().getPetByRoomUnit(roomUnit);
if (pet != null && !this.boxFull()) {
this.addPet(pet);
@ -153,7 +153,7 @@ public class InteractionPetBreedingNest extends RoomItem {
Pet offspring = Emulator.getGameEnvironment().getPetManager().createPet(petOne.getPetData().getOffspringType(), (int) Math.min(Math.round(Math.max(1d, PetManager.getNormalDistributionForBreeding(petOne.getLevel(), petTwo.getLevel()).sample())), 20), name, habbo.getClient());
habbo.getRoomUnit().getRoom().getRoomUnitManager().placePet(offspring, habbo.getRoomUnit().getRoom(), box.getCurrentPosition().getX(), box.getCurrentPosition().getY(), box.getCurrentZ());
habbo.getRoomUnit().getRoom().getRoomUnitManager().getRoomPetManager().placePet(offspring, habbo.getRoomUnit().getRoom(), box.getCurrentPosition().getX(), box.getCurrentPosition().getY(), box.getCurrentZ());
offspring.setSqlUpdateNeeded(true);
offspring.run();
InteractionPetBreedingNest.this.freePets();

View File

@ -71,7 +71,7 @@ public class InteractionPetDrink extends InteractionDefault {
if (this.getExtraData() == null || this.getExtraData().isEmpty())
this.setExtraData("0");
Pet pet = room.getRoomUnitManager().getPetByRoomUnit(roomUnit);
Pet pet = room.getRoomUnitManager().getRoomPetManager().getPetByRoomUnit(roomUnit);
if (pet != null && pet.getPetData().haveDrinkItem(this) && pet.levelThirst >= 35) {
pet.clearPosture();

View File

@ -33,7 +33,7 @@ public class InteractionPetFood extends InteractionDefault {
if (this.getExtraData().length() == 0)
this.setExtraData("0");
Pet pet = room.getRoomUnitManager().getPetByRoomUnit(roomUnit);
Pet pet = room.getRoomUnitManager().getRoomPetManager().getPetByRoomUnit(roomUnit);
if (pet != null) {
if (pet.getPetData().haveFoodItem(this)) {

View File

@ -38,7 +38,7 @@ public class InteractionPetToy extends InteractionDefault {
this.setExtraData("0");
room.updateItem(this);
for (Pet pet : room.getRoomUnitManager().getPetsAt(oldLocation)) {
for (Pet pet : room.getRoomUnitManager().getRoomPetManager().getPetsAt(oldLocation)) {
pet.getRoomUnit().clearStatuses();
pet.setPacketUpdate(true);
}
@ -57,7 +57,7 @@ public class InteractionPetToy extends InteractionDefault {
public void onWalkOn(RoomUnit roomUnit, Room room, Object[] objects) throws Exception {
super.onWalkOn(roomUnit, room, objects);
Pet pet = room.getRoomUnitManager().getPetByRoomUnit(roomUnit);
Pet pet = room.getRoomUnitManager().getRoomPetManager().getPetByRoomUnit(roomUnit);
if (pet != null && pet.getPetData().haveToyItem(this.getBaseItem())) {
if (this.getOccupyingTiles(room.getLayout()).contains(pet.getRoomUnit().getTargetPosition())) {
@ -90,7 +90,7 @@ public class InteractionPetToy extends InteractionDefault {
public void onWalkOff(RoomUnit roomUnit, Room room, Object[] objects) throws Exception {
super.onWalkOff(roomUnit, room, objects);
Pet pet = room.getRoomUnitManager().getPetByRoomUnit(roomUnit);
Pet pet = room.getRoomUnitManager().getRoomPetManager().getPetByRoomUnit(roomUnit);
if (pet != null) {
this.setExtraData("0");
@ -102,7 +102,7 @@ public class InteractionPetToy extends InteractionDefault {
@Override
public boolean canWalkOn(RoomUnit roomUnit, Room room, Object[] objects) {
Pet pet = room.getRoomUnitManager().getPetByRoomUnit(roomUnit);
Pet pet = room.getRoomUnitManager().getRoomPetManager().getPetByRoomUnit(roomUnit);
return roomUnit.getRoomUnitType() == RoomUnitType.PET && pet != null && pet.getPetData().haveToyItem(this.getBaseItem());
}

View File

@ -38,7 +38,7 @@ public class InteractionPetTrampoline extends InteractionDefault {
this.setExtraData("0");
room.updateItem(this);
for (Pet pet : room.getRoomUnitManager().getPetsAt(oldLocation)) {
for (Pet pet : room.getRoomUnitManager().getRoomPetManager().getPetsAt(oldLocation)) {
pet.getRoomUnit().removeStatus(RoomUnitStatus.JUMP);
pet.setPacketUpdate(true);
}
@ -58,7 +58,7 @@ public class InteractionPetTrampoline extends InteractionDefault {
public void onWalkOn(RoomUnit roomUnit, Room room, Object[] objects) throws Exception {
super.onWalkOn(roomUnit, room, objects);
Pet pet = room.getRoomUnitManager().getPetByRoomUnit(roomUnit);
Pet pet = room.getRoomUnitManager().getRoomPetManager().getPetByRoomUnit(roomUnit);
if (pet != null && pet.getPetData().haveToyItem(this.getBaseItem())) {
if (this.getOccupyingTiles(room.getLayout()).contains(pet.getRoomUnit().getTargetPosition())) {
@ -87,7 +87,7 @@ public class InteractionPetTrampoline extends InteractionDefault {
public void onWalkOff(RoomUnit roomUnit, Room room, Object[] objects) throws Exception {
super.onWalkOff(roomUnit, room, objects);
Pet pet = room.getRoomUnitManager().getPetByRoomUnit(roomUnit);
Pet pet = room.getRoomUnitManager().getRoomPetManager().getPetByRoomUnit(roomUnit);
if (pet != null) {
this.setExtraData("0");
@ -99,7 +99,7 @@ public class InteractionPetTrampoline extends InteractionDefault {
@Override
public boolean canWalkOn(RoomUnit roomUnit, Room room, Object[] objects) {
Pet pet = room.getRoomUnitManager().getPetByRoomUnit(roomUnit);
Pet pet = room.getRoomUnitManager().getRoomPetManager().getPetByRoomUnit(roomUnit);
return roomUnit.getRoomUnitType() == RoomUnitType.PET && pet != null && pet.getPetData().haveToyItem(this.getBaseItem());
}

View File

@ -28,7 +28,7 @@ public class InteractionPetTree extends InteractionDefault {
@Override
public void onMove(Room room, RoomTile oldLocation, RoomTile newLocation) {
for (Pet pet : room.getRoomUnitManager().getPetsAt(oldLocation)) {
for (Pet pet : room.getRoomUnitManager().getRoomPetManager().getPetsAt(oldLocation)) {
pet.getRoomUnit().clearStatuses();
pet.setPacketUpdate(true);
}
@ -45,7 +45,7 @@ public class InteractionPetTree extends InteractionDefault {
public void onWalkOn(RoomUnit roomUnit, Room room, Object[] objects) throws Exception {
super.onWalkOn(roomUnit, room, objects);
Pet pet = room.getRoomUnitManager().getPetByRoomUnit(roomUnit);
Pet pet = room.getRoomUnitManager().getRoomPetManager().getPetByRoomUnit(roomUnit);
if (pet != null && pet.getPetData().haveToyItem(this.getBaseItem())) {
if (this.getOccupyingTiles(room.getLayout()).contains(pet.getRoomUnit().getTargetPosition())) {
RoomUnitStatus task = switch (pet.getTask()) {
@ -88,7 +88,7 @@ public class InteractionPetTree extends InteractionDefault {
public void onWalkOff(RoomUnit roomUnit, Room room, Object[] objects) throws Exception {
super.onWalkOff(roomUnit, room, objects);
Pet pet = room.getRoomUnitManager().getPetByRoomUnit(roomUnit);
Pet pet = room.getRoomUnitManager().getRoomPetManager().getPetByRoomUnit(roomUnit);
if (pet != null) {
pet.getRoomUnit().clearStatuses();
@ -98,7 +98,7 @@ public class InteractionPetTree extends InteractionDefault {
@Override
public boolean canWalkOn(RoomUnit roomUnit, Room room, Object[] objects) {
Pet pet = room.getRoomUnitManager().getPetByRoomUnit(roomUnit);
Pet pet = room.getRoomUnitManager().getRoomPetManager().getPetByRoomUnit(roomUnit);
return roomUnit.getRoomUnitType() == RoomUnitType.PET && pet != null && pet.getPetData().haveToyItem(this.getBaseItem());
}

View File

@ -33,7 +33,7 @@ public class WiredConditionFurniHaveRoom extends InteractionWiredCondition {
Collection<Habbo> habbos = room.getRoomUnitManager().getCurrentHabbos().values();
Collection<Bot> bots = room.getRoomUnitManager().getRoomBotManager().getCurrentBots().values();
Collection<Pet> pets = room.getRoomUnitManager().getCurrentPets().values();
Collection<Pet> pets = room.getRoomUnitManager().getRoomPetManager().getCurrentPets().values();
return this.getWiredSettings().getItems(room).stream().allMatch(item -> {
THashSet<RoomTile> occupiedTiles = room.getLayout().getTilesAt(room.getLayout().getTile(item.getCurrentPosition().getX(), item.getCurrentPosition().getY()), item.getBaseItem().getWidth(), item.getBaseItem().getLength(), item.getRotation());

View File

@ -33,7 +33,7 @@ public class WiredConditionNotFurniHaveRoom extends InteractionWiredCondition {
Collection<Habbo> habbos = room.getRoomUnitManager().getCurrentHabbos().values();
Collection<Bot> bots = room.getRoomUnitManager().getRoomBotManager().getCurrentBots().values();
Collection<Pet> pets = room.getRoomUnitManager().getCurrentPets().values();
Collection<Pet> pets = room.getRoomUnitManager().getRoomPetManager().getCurrentPets().values();
return this.getWiredSettings().getItems(room).stream().noneMatch(item -> {
THashSet<RoomTile> occupiedTiles = room.getLayout().getTilesAt(room.getLayout().getTile(item.getCurrentPosition().getX(), item.getCurrentPosition().getY()), item.getBaseItem().getWidth(), item.getBaseItem().getLength(), item.getRotation());

View File

@ -5,7 +5,7 @@ import com.eu.habbo.habbohotel.items.Item;
import com.eu.habbo.habbohotel.items.interactions.InteractionWiredEffect;
import com.eu.habbo.habbohotel.permissions.Permission;
import com.eu.habbo.habbohotel.rooms.Room;
import com.eu.habbo.habbohotel.rooms.RoomChatMessage;
import com.eu.habbo.habbohotel.rooms.chat.RoomChatMessage;
import com.eu.habbo.habbohotel.rooms.constants.RoomChatMessageBubbles;
import com.eu.habbo.habbohotel.rooms.entities.units.RoomUnit;
import com.eu.habbo.habbohotel.users.Habbo;

View File

@ -4,7 +4,7 @@ import com.eu.habbo.Emulator;
import com.eu.habbo.habbohotel.items.Item;
import com.eu.habbo.habbohotel.items.interactions.InteractionWiredEffect;
import com.eu.habbo.habbohotel.rooms.Room;
import com.eu.habbo.habbohotel.rooms.RoomChatMessage;
import com.eu.habbo.habbohotel.rooms.chat.RoomChatMessage;
import com.eu.habbo.habbohotel.rooms.constants.RoomChatMessageBubbles;
import com.eu.habbo.habbohotel.rooms.entities.units.RoomUnit;
import com.eu.habbo.habbohotel.users.Habbo;
@ -40,7 +40,7 @@ public class WiredEffectMuteRoom extends InteractionWiredEffect {
if (room.getRoomRightsManager().hasRights(habbo))
return false;
room.muteHabbo(habbo, 60);
room.getRoomInfractionManager().muteHabbo(habbo, 60);
habbo.getClient().sendResponse(new WhisperMessageComposer(new RoomChatMessage(message.replace("%user%", habbo.getHabboInfo().getUsername()).replace("%online_count%", Emulator.getGameEnvironment().getHabboManager().getOnlineCount() + "").replace("%room_count%", Emulator.getGameEnvironment().getRoomManager().getActiveRooms().size() + ""), habbo, habbo, RoomChatMessageBubbles.WIRED)));
}

View File

@ -4,7 +4,7 @@ import com.eu.habbo.Emulator;
import com.eu.habbo.habbohotel.items.Item;
import com.eu.habbo.habbohotel.items.interactions.InteractionWiredEffect;
import com.eu.habbo.habbohotel.rooms.Room;
import com.eu.habbo.habbohotel.rooms.RoomChatMessage;
import com.eu.habbo.habbohotel.rooms.chat.RoomChatMessage;
import com.eu.habbo.habbohotel.rooms.constants.RoomChatMessageBubbles;
import com.eu.habbo.habbohotel.rooms.entities.units.RoomUnit;
import com.eu.habbo.habbohotel.users.Habbo;

View File

@ -3,7 +3,7 @@ package com.eu.habbo.habbohotel.modtool;
import com.eu.habbo.Emulator;
import com.eu.habbo.habbohotel.messenger.Message;
import com.eu.habbo.habbohotel.permissions.Permission;
import com.eu.habbo.habbohotel.rooms.RoomChatMessage;
import com.eu.habbo.habbohotel.rooms.chat.RoomChatMessage;
import com.eu.habbo.habbohotel.users.Habbo;
import com.eu.habbo.messages.outgoing.friends.NewConsoleMessageComposer;
import com.eu.habbo.plugin.events.users.UserTriggerWordFilterEvent;

View File

@ -4,10 +4,11 @@ import com.eu.habbo.Emulator;
import com.eu.habbo.database.DatabaseConstants;
import com.eu.habbo.habbohotel.achievements.AchievementManager;
import com.eu.habbo.habbohotel.rooms.*;
import com.eu.habbo.habbohotel.rooms.chat.RoomChatMessage;
import com.eu.habbo.habbohotel.rooms.constants.RoomChatMessageBubbles;
import com.eu.habbo.habbohotel.rooms.constants.RoomUnitStatus;
import com.eu.habbo.habbohotel.rooms.items.entities.RoomItem;
import com.eu.habbo.habbohotel.rooms.entities.units.types.RoomPet;
import com.eu.habbo.habbohotel.rooms.pets.entities.RoomPet;
import com.eu.habbo.habbohotel.units.Unit;
import com.eu.habbo.habbohotel.users.Habbo;
import com.eu.habbo.messages.ISerialize;
@ -739,7 +740,7 @@ public class Pet extends Unit implements ISerialize, Runnable {
if (!dontSendPackets) {
room.sendComposer(new UserRemoveMessageComposer(this.getRoomUnit()).compose());
room.getRoomUnitManager().removePet(this.id);
room.getRoomUnitManager().getRoomPetManager().removePet(this.id);
}
this.roomUnit.setRoom(null);

File diff suppressed because it is too large Load Diff

View File

@ -22,10 +22,12 @@ import com.eu.habbo.habbohotel.pets.PetData;
import com.eu.habbo.habbohotel.pets.PetTasks;
import com.eu.habbo.habbohotel.polls.Poll;
import com.eu.habbo.habbohotel.polls.PollManager;
import com.eu.habbo.habbohotel.rooms.constants.RoomConfiguration;
import com.eu.habbo.habbohotel.rooms.constants.RoomRightLevels;
import com.eu.habbo.habbohotel.rooms.constants.RoomState;
import com.eu.habbo.habbohotel.rooms.constants.RoomUnitStatus;
import com.eu.habbo.habbohotel.rooms.entities.RoomRotation;
import com.eu.habbo.habbohotel.rooms.infractions.RoomBan;
import com.eu.habbo.habbohotel.rooms.items.entities.RoomItem;
import com.eu.habbo.habbohotel.rooms.entities.units.RoomUnitType;
import com.eu.habbo.habbohotel.rooms.entities.units.types.RoomHabbo;
@ -38,8 +40,6 @@ import com.eu.habbo.messages.incoming.users.NewUserExperienceScriptProceedEvent;
import com.eu.habbo.messages.outgoing.generic.alerts.GenericErrorComposer;
import com.eu.habbo.messages.outgoing.hotelview.CloseConnectionMessageComposer;
import com.eu.habbo.messages.outgoing.polls.PollOfferComposer;
import com.eu.habbo.messages.outgoing.polls.infobus.QuestionComposer;
import com.eu.habbo.messages.outgoing.polls.infobus.QuestionFinishedComposer;
import com.eu.habbo.messages.outgoing.rooms.*;
import com.eu.habbo.messages.outgoing.rooms.items.ItemsComposer;
import com.eu.habbo.messages.outgoing.rooms.items.ObjectsMessageComposer;
@ -216,7 +216,7 @@ public class RoomManager {
public List<Room> getRoomsByScore() {
List<Room> rooms = new ArrayList<>(this.activeRooms.values());
rooms.sort(Room.SORT_SCORE);
rooms.sort(RoomConfiguration.SORT_SCORE);
return rooms;
}
@ -240,7 +240,7 @@ public class RoomManager {
}
}
rooms.sort(Room.SORT_ID);
rooms.sort(RoomConfiguration.SORT_ID);
return rooms;
}
@ -489,7 +489,7 @@ public class RoomManager {
}
//If Habbo is banned AND doesn't have Permissions can't enter to room
if (room.isBanned(habbo) && !room.getRoomInfo().isRoomOwner(habbo) && !habbo.hasPermissionRight(Permission.ACC_ENTERANYROOM)) {
if (room.getRoomInfractionManager().isBanned(habbo) && !room.getRoomInfo().isRoomOwner(habbo) && !habbo.hasPermissionRight(Permission.ACC_ENTERANYROOM)) {
habbo.getClient().sendResponse(new CantConnectMessageComposer(CantConnectMessageComposer.ROOM_ERROR_BANNED));
return;
}
@ -542,8 +542,7 @@ public class RoomManager {
} else if (room.getRoomInfo().getState() == RoomState.PASSWORD) {
if (room.getRoomInfo().getPassword().equalsIgnoreCase(password)) {
this.openRoom(habbo, room, spawnLocation);
}
else {
} else {
habbo.getClient().sendResponse(new GenericErrorComposer(GenericErrorComposer.WRONG_PASSWORD_USED));
habbo.getClient().sendResponse(new CloseConnectionMessageComposer());
habbo.getRoomUnit().setLoadingRoom(null);
@ -582,12 +581,12 @@ public class RoomManager {
RoomTile spawnTile = spawnLocation == null ? room.getLayout().getDoorTile() : spawnLocation;
RoomRotation spawnDirection = RoomRotation.values()[room.getLayout().getDoorDirection()];
if(spawnLocation != null) {
if (spawnLocation != null) {
roomHabbo.setCanLeaveRoomByDoor(false);
roomHabbo.setTeleporting(true);
RoomItem topItem = room.getRoomItemManager().getTopItemAt(spawnLocation);
if(topItem != null) {
if (topItem != null) {
spawnDirection = RoomRotation.values()[topItem.getRotation()];
}
}
@ -624,8 +623,8 @@ public class RoomManager {
roomHabbo.setCmdFastWalkEnabled(roomHabbo.isCmdFastWalkEnabled() && habbo.canExecuteCommand("cmd_fastwalk", room.getRoomRightsManager().hasRights(habbo)));
if (room.isPromoted()) {
habbo.getClient().sendResponse(new RoomEventComposer(room, room.getPromotion()));
if (room.getRoomInfo().isPromoted()) {
habbo.getClient().sendResponse(new RoomEventComposer(room, room.getRoomPromotionManager().getPromotion()));
} else {
habbo.getClient().sendResponse(new RoomEventComposer(null, null));
}
@ -755,9 +754,9 @@ public class RoomManager {
habbo.getClient().sendResponse(new ObjectsMessageComposer(room.getFurniOwnerNames(), floorItems));
floorItems.clear();
if (!room.getRoomUnitManager().getCurrentPets().isEmpty()) {
habbo.getClient().sendResponse(new RoomPetComposer(room.getRoomUnitManager().getCurrentPets()));
room.getRoomUnitManager().getCurrentPets().values().forEach(pet -> habbo.getClient().sendResponse(new UserUpdateComposer(pet.getRoomUnit())));
if (!room.getRoomUnitManager().getRoomPetManager().getCurrentPets().isEmpty()) {
habbo.getClient().sendResponse(new RoomPetComposer(room.getRoomUnitManager().getRoomPetManager().getCurrentPets()));
room.getRoomUnitManager().getRoomPetManager().getCurrentPets().values().forEach(pet -> habbo.getClient().sendResponse(new UserUpdateComposer(pet.getRoomUnit())));
}
if (!habbo.getHabboStats().allowTalk()) {
@ -837,13 +836,7 @@ public class RoomManager {
}
}
if (room.hasActiveWordQuiz()) {
habbo.getClient().sendResponse(new QuestionComposer((Emulator.getIntUnixTimestamp() - room.getWordQuizEnd()) * 1000, room.getWordQuiz()));
if (room.hasVotedInWordQuiz(habbo)) {
habbo.getClient().sendResponse(new QuestionFinishedComposer(room.getNoVotes(), room.getYesVotes()));
}
}
room.getRoomWordQuizManager().onHabboEntered(habbo);
WiredHandler.handle(WiredTriggerType.ENTER_ROOM, habbo.getRoomUnit(), room, null);
room.habboEntered(habbo);
@ -855,6 +848,7 @@ public class RoomManager {
}
}
void logEnter(Habbo habbo, Room room) {
habbo.getHabboStats().roomEnterTimestamp = Emulator.getIntUnixTimestamp();
try (Connection connection = Emulator.getDatabase().getDataSource().getConnection(); PreparedStatement statement = connection.prepareStatement("INSERT INTO room_enter_log (room_id, user_id, timestamp) VALUES(?, ?, ?)")) {
@ -938,7 +932,7 @@ public class RoomManager {
}
public ArrayList<Room> getPublicRooms() {
return this.activeRooms.values().stream().filter(room -> room.getRoomInfo().isPublicRoom()).sorted(Room.SORT_ID) .collect(Collectors.toCollection(ArrayList::new));
return this.activeRooms.values().stream().filter(room -> room.getRoomInfo().isPublicRoom()).sorted(RoomConfiguration.SORT_ID).collect(Collectors.toCollection(ArrayList::new));
}
public ArrayList<Room> getPopularRooms(int count) {
@ -1279,7 +1273,8 @@ public class RoomManager {
}
public ArrayList<Room> getRoomsPromoted() {
return activeRooms.values().stream().filter(Room::isPromoted).collect(Collectors.toCollection(ArrayList::new)); }
return activeRooms.values().stream().filter(r -> r.getRoomInfo().isPromoted()).collect(Collectors.toCollection(ArrayList::new));
}
public ArrayList<Room> getRoomsStaffPromoted() {
return activeRooms.values().stream().filter(room -> room.getRoomInfo().isStaffPicked()).collect(Collectors.toCollection(ArrayList::new));
@ -1384,7 +1379,7 @@ public class RoomManager {
RoomBan roomBan = new RoomBan(roomId, userId, name, Emulator.getIntUnixTimestamp() + length.duration);
roomBan.insert();
room.addRoomBan(roomBan);
room.getRoomInfractionManager().addRoomBan(roomBan);
if (habbo != null && habbo.getRoomUnit().getRoom() == room) {
room.getRoomUnitManager().removeHabbo(habbo, true);
@ -1393,9 +1388,9 @@ public class RoomManager {
}
public void handleSpawnLocation(RoomHabbo roomHabbo, RoomTile location, RoomRotation direction) {
roomHabbo.setLocation(location);
roomHabbo.setCurrentZ(location.getStackHeight());
roomHabbo.setRotation(direction);
roomHabbo.setLocation(location);
roomHabbo.setCurrentZ(location.getStackHeight());
roomHabbo.setRotation(direction);
}
public void registerGameType(Class<? extends Game> gameClass) {

View File

@ -8,9 +8,9 @@ import com.eu.habbo.habbohotel.items.interactions.InteractionGate;
import com.eu.habbo.habbohotel.items.interactions.InteractionPyramid;
import com.eu.habbo.habbohotel.items.interactions.InteractionRoller;
import com.eu.habbo.habbohotel.pets.Pet;
import com.eu.habbo.habbohotel.pets.PetManager;
import com.eu.habbo.habbohotel.pets.RideablePet;
import com.eu.habbo.habbohotel.rooms.bots.RoomBotManager;
import com.eu.habbo.habbohotel.rooms.constants.RoomConfiguration;
import com.eu.habbo.habbohotel.rooms.constants.RoomRightLevels;
import com.eu.habbo.habbohotel.rooms.constants.RoomTileState;
import com.eu.habbo.habbohotel.rooms.constants.RoomUnitStatus;
@ -18,15 +18,15 @@ import com.eu.habbo.habbohotel.rooms.entities.RoomRotation;
import com.eu.habbo.habbohotel.rooms.entities.units.RoomUnit;
import com.eu.habbo.habbohotel.rooms.entities.units.RoomUnitType;
import com.eu.habbo.habbohotel.rooms.entities.units.types.RoomHabbo;
import com.eu.habbo.habbohotel.rooms.entities.units.types.RoomPet;
import com.eu.habbo.habbohotel.rooms.items.entities.RoomItem;
import com.eu.habbo.habbohotel.rooms.pets.RoomPetManager;
import com.eu.habbo.habbohotel.rooms.pets.entities.RoomPet;
import com.eu.habbo.habbohotel.rooms.trades.RoomTrade;
import com.eu.habbo.habbohotel.rooms.types.IRoomManager;
import com.eu.habbo.habbohotel.units.Unit;
import com.eu.habbo.habbohotel.users.Habbo;
import com.eu.habbo.messages.ServerMessage;
import com.eu.habbo.messages.outgoing.MessageComposer;
import com.eu.habbo.messages.outgoing.inventory.PetAddedToInventoryComposer;
import com.eu.habbo.messages.outgoing.rooms.items.FloorItemOnRollerComposer;
import com.eu.habbo.messages.outgoing.rooms.pets.RoomPetComposer;
import com.eu.habbo.messages.outgoing.rooms.users.IgnoreResultMessageComposer;
import com.eu.habbo.messages.outgoing.rooms.users.RoomUnitOnRollerComposer;
import com.eu.habbo.messages.outgoing.rooms.users.UserRemoveMessageComposer;
@ -40,87 +40,49 @@ import lombok.Setter;
import lombok.extern.slf4j.Slf4j;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.*;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import java.util.concurrent.ConcurrentHashMap;
import java.util.stream.Collectors;
import java.util.stream.Stream;
import static com.eu.habbo.database.DatabaseConstants.CAUGHT_SQL_EXCEPTION;
import static com.eu.habbo.habbohotel.rooms.Room.CAUGHT_EXCEPTION;
import static com.eu.habbo.habbohotel.rooms.constants.RoomConfiguration.CAUGHT_EXCEPTION;
import static com.eu.habbo.habbohotel.rooms.utils.cycle.CycleFunctions.cycleIdle;
@Slf4j
@Getter
public class RoomUnitManager {
private final Room room;
public class RoomUnitManager extends IRoomManager {
private final ConcurrentHashMap<Integer, RoomUnit> currentRoomUnits;
private final ConcurrentHashMap<Integer, Habbo> currentHabbos;
private final ConcurrentHashMap<Integer, Pet> currentPets;
private volatile int roomUnitCounter;
public final Object roomUnitLock;
private final RoomBotManager roomBotManager;
private final RoomPetManager roomPetManager;
private int roomIdleCycles;
@Setter
private long rollerCycle = System.currentTimeMillis();
public RoomUnitManager(Room room) {
this.room = room;
super(room);
this.currentRoomUnits = new ConcurrentHashMap<>();
this.currentHabbos = new ConcurrentHashMap<>();
this.currentPets = new ConcurrentHashMap<>();
this.roomUnitCounter = 0;
this.roomUnitLock = new Object();
roomBotManager = new RoomBotManager(this);
roomPetManager = new RoomPetManager(this);
}
public synchronized void load(Connection connection) {
this.roomIdleCycles = 0;
roomBotManager.loadBots(connection);
this.loadPets(connection);
roomPetManager.loadPets(connection);
}
private synchronized void loadPets(Connection connection) {
this.currentPets.clear();
try (PreparedStatement statement = connection.prepareStatement("SELECT users.username as pet_owner_name, users_pets.* FROM users_pets INNER JOIN users ON users_pets.user_id = users.id WHERE room_id = ?")) {
statement.setInt(1, this.room.getRoomInfo().getId());
try (ResultSet set = statement.executeQuery()) {
while (set.next()) {
Pet pet = PetManager.loadPet(set);
pet.setRoom(this.room);
pet.getRoomUnit().setRoom(this.room);
pet.getRoomUnit().setLocation(this.room.getLayout().getTile((short) set.getInt("x"), (short) set.getInt("y")));
if (pet.getRoomUnit().getCurrentPosition() == null || pet.getRoomUnit().getCurrentPosition().getState() == RoomTileState.INVALID) {
pet.getRoomUnit().setCurrentZ(this.room.getLayout().getDoorTile().getStackHeight());
pet.getRoomUnit().setLocation(this.room.getLayout().getDoorTile());
pet.getRoomUnit().setRotation(RoomRotation.fromValue(this.room.getLayout().getDoorDirection()));
} else {
pet.getRoomUnit().setCurrentZ(set.getDouble("z"));
pet.getRoomUnit().setRotation(RoomRotation.values()[set.getInt("rot")]);
}
pet.getRoomUnit().setRoomUnitType(RoomUnitType.PET);
pet.getRoomUnit().setCanWalk(true);
this.addRoomUnit(pet);
this.room.getFurniOwnerNames().put(pet.getUserId(), set.getString("pet_owner_name"));
}
}
} catch (SQLException e) {
log.error(CAUGHT_SQL_EXCEPTION, e);
} catch (Exception e) {
log.error("Caught Exception", e);
}
}
public void addRoomUnit(Unit unit) {
synchronized (this.roomUnitLock) {
//TODO Maybe set the room in this method
@ -135,10 +97,10 @@ public class RoomUnitManager {
unit.getRoomUnit().getRoom().updateDatabaseUserCount();
}
case BOT -> {
roomBotManager.addBot((Bot)unit);
roomBotManager.addBot((Bot) unit);
}
case PET -> {
this.currentPets.put(((Pet) unit).getId(), (Pet) unit);
roomPetManager.addPet((Pet) unit);
Habbo habbo = this.getRoomHabboById(((Pet) unit).getUserId());
if (habbo != null) {
unit.getRoomUnit().getRoom().getFurniOwnerNames().put(((Pet) unit).getUserId(), this.getRoomHabboById(((Pet) unit).getUserId()).getHabboInfo().getUsername());
@ -157,10 +119,10 @@ public class RoomUnitManager {
}
public boolean areRoomUnitsAt(RoomTile tile, RoomUnit skippedRoomUnit) {
if(skippedRoomUnit == null) {
if (skippedRoomUnit == null) {
return this.areRoomUnitsAt(tile);
}
return this.currentRoomUnits.values().stream().filter(roomUnit -> !roomUnit.equals(skippedRoomUnit)).anyMatch(roomUnit -> roomUnit.getCurrentPosition().equals(tile));
}
@ -199,7 +161,7 @@ public class RoomUnitManager {
public void updateHabbosAt(RoomTile tile) {
Collection<Habbo> habbos = this.getHabbosAt(tile);
if(habbos == null || habbos.isEmpty()) {
if (habbos == null || habbos.isEmpty()) {
return;
}
@ -217,9 +179,9 @@ public class RoomUnitManager {
}
if (item != null && (item.getBaseItem().allowSit() || item.getBaseItem().allowLay())) {
if(item.getBaseItem().allowSit()) {
if (item.getBaseItem().allowSit()) {
habbo.getRoomUnit().addStatus(RoomUnitStatus.SIT, String.valueOf(Item.getCurrentHeight(item)));
} else if(item.getBaseItem().allowLay()) {
} else if (item.getBaseItem().allowLay()) {
habbo.getRoomUnit().addStatus(RoomUnitStatus.LAY, String.valueOf(Item.getCurrentHeight(item)));
}
@ -232,81 +194,14 @@ public class RoomUnitManager {
}
public void placePet(Pet pet, Room room, short x, short y, double z) {
synchronized (this.currentPets) {
RoomTile spawnTile = room.getLayout().getTile(x, y);
if (spawnTile == null) {
spawnTile = room.getLayout().getDoorTile();
}
pet.setRoom(room);
pet.getRoomUnit().walkTo(spawnTile);
pet.getRoomUnit().setLocation(spawnTile)
.setRoomUnitType(RoomUnitType.PET)
.setCanWalk(true)
.setCurrentZ(z);
if (pet.getRoomUnit().getCurrentPosition() == null) {
pet.getRoomUnit()
.setLocation(room.getLayout().getDoorTile())
.setRotation(RoomRotation.fromValue(room.getLayout().getDoorDirection()));
}
pet.setSqlUpdateNeeded(true);
room.getFurniOwnerNames().put(pet.getUserId(), this.getRoomHabboById(pet.getUserId()).getHabboInfo().getUsername());
this.addRoomUnit(pet);
room.sendComposer(new RoomPetComposer(pet).compose());
}
}
public boolean hasPetsAt(RoomTile tile) {
return this.currentPets.values().stream().anyMatch(pet -> pet.getRoomUnit().getCurrentPosition().equals(tile));
}
public Collection<Pet> getPetsAt(RoomTile tile) {
return this.currentPets.values().stream().filter(pet -> pet.getRoomUnit().getCurrentPosition().equals(tile)).collect(Collectors.toSet());
}
public Pet getRoomPetById(int petId) {
return this.currentPets.get(petId);
}
public Pet getPetByRoomUnit(RoomUnit roomUnit) {
return this.currentPets.values().stream().filter(pet -> pet.getRoomUnit() == roomUnit).findFirst().orElse(null);
}
public void pickUpMyPets(Habbo owner) {
THashSet<Pet> pets = new THashSet<>();
synchronized (this.currentPets) {
for (Pet pet : this.currentPets.values()) {
if (pet.getUserId() == owner.getHabboInfo().getId()) {
pets.add(pet);
}
}
}
for (Pet pet : pets) {
pet.removeFromRoom();
Emulator.getThreading().run(pet);
owner.getInventory().getPetsComponent().addPet(pet);
owner.getClient().sendResponse(new PetAddedToInventoryComposer(pet));
this.currentPets.remove(pet.getId());
}
}
public void removeHabbo(Habbo habbo, boolean sendRemovePacket) {
if(!this.currentHabbos.containsKey(habbo.getHabboInfo().getId())) {
if (!this.currentHabbos.containsKey(habbo.getHabboInfo().getId())) {
return;
}
RoomHabbo roomHabbo = habbo.getRoomUnit();
if(roomHabbo.getCurrentPosition() != null) {
if (roomHabbo.getCurrentPosition() != null) {
roomHabbo.getCurrentPosition().removeUnit(habbo.getRoomUnit());
}
@ -315,7 +210,7 @@ public class RoomUnitManager {
removeUnit(roomHabbo.getVirtualId());
}
roomHabbo.getRoom().sendComposer(new UserRemoveMessageComposer(roomHabbo).compose());
sendComposer(new UserRemoveMessageComposer(roomHabbo).compose());
//MOVE THIS TO RoomTile.java -> removeUnit()
RoomItem item = roomHabbo.getRoom().getRoomItemManager().getTopItemAt(roomHabbo.getCurrentPosition());
@ -332,97 +227,38 @@ public class RoomUnitManager {
roomHabbo.getRoom().getGame(habbo.getHabboInfo().getCurrentGame()).removeHabbo(habbo);
}
RoomTrade trade = roomHabbo.getRoom().getActiveTradeForHabbo(habbo);
RoomTrade trade = roomHabbo.getRoom().getRoomTradeManager().getActiveTradeForHabbo(habbo);
if (trade != null) {
trade.stopTrade(habbo);
}
if (!roomHabbo.getRoom().getRoomInfo().isRoomOwner(habbo)) {
this.pickUpMyPets(habbo);
roomPetManager.pickUpMyPets(habbo);
}
roomHabbo.getRoom().updateDatabaseUserCount();
roomHabbo.clear();
}
public Pet removePet(int petId) {
Pet pet = this.currentPets.get(petId);
removeUnit(pet.getRoomUnit().getVirtualId());
return this.currentPets.remove(petId);
}
public void removeAllPetsExceptRoomOwner() {
ArrayList<Pet> toRemovePets = new ArrayList<>();
ArrayList<Pet> removedPets = new ArrayList<>();
synchronized (this.currentPets) {
for (Pet pet : this.currentPets.values()) {
try {
if (pet.getUserId() != pet.getRoomUnit().getRoom().getRoomInfo().getOwnerInfo().getId()) {
toRemovePets.add(pet);
}
} catch (NoSuchElementException e) {
log.error("Caught exception", e);
break;
}
}
}
for (Pet pet : toRemovePets) {
removedPets.add(pet);
pet.removeFromRoom();
Habbo habbo = Emulator.getGameEnvironment().getHabboManager().getHabbo(pet.getUserId());
if (habbo != null) {
habbo.getInventory().getPetsComponent().addPet(pet);
habbo.getClient().sendResponse(new PetAddedToInventoryComposer(pet));
}
pet.setSqlUpdateNeeded(true);
pet.run();
}
for (Pet pet : removedPets) {
this.currentPets.remove(pet.getId());
removeUnit(pet.getRoomUnit().getVirtualId());
}
}
public void clear() {
synchronized (this.roomUnitLock) {
this.currentRoomUnits.clear();
this.currentHabbos.clear();
this.roomBotManager.clear();
this.currentPets.clear();
this.roomPetManager.clear();
this.roomUnitCounter = 0;
}
}
public void dispose() {
for(Habbo habbo : this.currentHabbos.values()) {
for (Habbo habbo : this.currentHabbos.values()) {
Emulator.getGameEnvironment().getRoomManager().leaveRoom(habbo, this.room, true);
}
this.currentHabbos.clear();
roomBotManager.dispose();
Iterator<Pet> petIterator = this.currentPets.values().iterator();
while(petIterator.hasNext()) {
try {
Pet pet = petIterator.next();
pet.setSqlUpdateNeeded(true);
Emulator.getThreading().run(pet);
} catch (NoSuchElementException e) {
log.error("Caught Exception", e);
break;
}
}
this.currentPets.clear();
roomBotManager.dispose();
roomPetManager.dispose();
this.currentRoomUnits.clear();
}
@ -430,7 +266,7 @@ public class RoomUnitManager {
this.currentRoomUnits.remove(virtualId);
}
public boolean cycle(boolean cycleOdd){
public boolean cycle(boolean cycleOdd) {
boolean foundRightHolder = false;
if (!getCurrentHabbos().isEmpty()) {
this.roomIdleCycles = 0;
@ -474,7 +310,7 @@ public class RoomUnitManager {
if (habbo.getHabboStats().isMutedBubbleTracker() && habbo.getHabboStats().allowTalk()) {
habbo.getHabboStats().setMutedBubbleTracker(false);
room.sendComposer(new IgnoreResultMessageComposer(habbo, IgnoreResultMessageComposer.UNIGNORED).compose());
sendComposer(new IgnoreResultMessageComposer(habbo, IgnoreResultMessageComposer.UNIGNORED).compose());
}
// Substract 1 from the chatCounter every odd cycle, which is every (500ms * 2).
@ -484,7 +320,7 @@ public class RoomUnitManager {
habbo.getRoomUnit().cycle();
if(habbo.getRoomUnit().isStatusUpdateNeeded()) {
if (habbo.getRoomUnit().isStatusUpdateNeeded()) {
habbo.getRoomUnit().setStatusUpdateNeeded(false);
updatedUnit.add(habbo.getRoomUnit());
}
@ -497,30 +333,7 @@ public class RoomUnitManager {
}
updatedUnit.addAll(roomBotManager.cycle());
if (!getCurrentPets().isEmpty() && room.isAllowBotsWalk()) {
Iterator<Pet> petIterator = getCurrentPets().values().iterator();
while(petIterator.hasNext()) {
final Pet pet;
try {
pet = petIterator.next();
} catch (Exception e) {
break;
}
pet.getRoomUnit().cycle();
pet.cycle();
if(pet.getRoomUnit().isStatusUpdateNeeded()) {
pet.getRoomUnit().setStatusUpdateNeeded(false);
updatedUnit.add(pet.getRoomUnit());
}
if (pet.getRoomUnit().isWalking() && pet.getRoomUnit().getPath().size() == 1 && pet.getRoomUnit().hasStatus(RoomUnitStatus.GESTURE)) {
pet.getRoomUnit().removeStatus(RoomUnitStatus.GESTURE);
updatedUnit.add(pet.getRoomUnit());
}
}
}
updatedUnit.addAll(roomPetManager.cycle());
if (room.getRoomInfo().getRollerSpeed() != -1 && this.rollerCycle >= room.getRoomInfo().getRollerSpeed()) {
@ -629,7 +442,7 @@ public class RoomUnitManager {
for (RoomUnit roomUnit : getRoomUnitsAt(rollerTile)) {
if (roomUnit instanceof RoomPet) {
Pet pet = getPetByRoomUnit(roomUnit);
Pet pet = roomPetManager.getPetByRoomUnit(roomUnit);
if (pet instanceof RideablePet rideablePet && rideablePet.getRider() != null) {
unitsOnTile.remove(roomUnit);
}
@ -641,7 +454,7 @@ public class RoomUnitManager {
for (RoomUnit roomUnit : unitsOnTile) {
if (rolledUnitIds.contains(roomUnit.getVirtualId())) continue;
if (usersRolledThisTile.size() >= Room.ROLLERS_MAXIMUM_ROLL_AVATARS) break;
if (usersRolledThisTile.size() >= RoomConfiguration.ROLLERS_MAXIMUM_ROLL_AVATARS) break;
if (stackContainsRoller && !allowFurniture && !(topItem != null && topItem.isWalkable()))
continue;
@ -701,7 +514,7 @@ public class RoomUnitManager {
if (!messages.isEmpty()) {
for (MessageComposer message : messages) {
room.sendComposer(message.compose());
sendComposer(message.compose());
}
messages.clear();
}
@ -715,9 +528,7 @@ public class RoomUnitManager {
if (newRoller == null || topItem == newRoller) {
List<RoomItem> sortedItems = new ArrayList<>(itemsOnRoller);
sortedItems.sort((o1, o2) -> {
return Double.compare(o2.getCurrentZ(), o1.getCurrentZ());
});
sortedItems.sort((o1, o2) -> Double.compare(o2.getCurrentZ(), o1.getCurrentZ()));
for (RoomItem item : sortedItems) {
if ((item.getCurrentPosition().getX() == roller.getCurrentPosition().getX() && item.getCurrentPosition().getY() == roller.getCurrentPosition().getY() && zOffset <= 0) && (item != roller)) {
@ -739,7 +550,7 @@ public class RoomUnitManager {
if (!messages.isEmpty()) {
for (MessageComposer message : messages) {
this.sendComposer(message.compose());
sendComposer(message.compose());
}
messages.clear();
}
@ -759,7 +570,7 @@ public class RoomUnitManager {
}
if (!updatedUnit.isEmpty()) {
this.sendComposer(new UserUpdateComposer(updatedUnit).compose());
sendComposer(new UserUpdateComposer(updatedUnit).compose());
}
room.getRoomTraxManager().cycle();
@ -774,7 +585,32 @@ public class RoomUnitManager {
return foundRightHolder;
}
private void sendComposer(ServerMessage serverMessage) {
room.sendComposer(serverMessage);
public void updateRoomUnit(RoomUnit roomUnit) {
RoomItem item = room.getRoomItemManager().getTopItemAt(roomUnit.getCurrentPosition().getX(), roomUnit.getCurrentPosition().getY());
if ((item == null && !roomUnit.isCmdSitEnabled()) || (item != null && !item.getBaseItem().allowSit()))
roomUnit.removeStatus(RoomUnitStatus.SIT);
double oldZ = roomUnit.getCurrentZ();
if (item != null) {
if (item.getBaseItem().allowSit()) {
roomUnit.setCurrentZ(item.getCurrentZ());
} else {
roomUnit.setCurrentZ(item.getCurrentZ() + Item.getCurrentHeight(item));
}
if (oldZ != roomUnit.getCurrentZ()) {
room.scheduledTasks.add(() -> {
try {
item.onWalkOn(roomUnit, room, null);
} catch (Exception ignored) {
}
});
}
}
this.sendComposer(new UserUpdateComposer(roomUnit).compose());
}
}

View File

@ -5,10 +5,10 @@ import com.eu.habbo.habbohotel.bots.Bot;
import com.eu.habbo.habbohotel.bots.BotManager;
import com.eu.habbo.habbohotel.items.Item;
import com.eu.habbo.habbohotel.permissions.Permission;
import com.eu.habbo.habbohotel.rooms.Room;
import com.eu.habbo.habbohotel.rooms.RoomTile;
import com.eu.habbo.habbohotel.rooms.RoomUnitManager;
import com.eu.habbo.habbohotel.rooms.bots.entities.RoomBot;
import com.eu.habbo.habbohotel.rooms.constants.RoomConfiguration;
import com.eu.habbo.habbohotel.rooms.constants.RoomTileState;
import com.eu.habbo.habbohotel.rooms.constants.RoomUnitStatus;
import com.eu.habbo.habbohotel.rooms.entities.RoomRotation;
@ -38,7 +38,7 @@ import java.util.concurrent.ConcurrentHashMap;
import java.util.stream.Collectors;
import static com.eu.habbo.database.DatabaseConstants.CAUGHT_SQL_EXCEPTION;
import static com.eu.habbo.habbohotel.rooms.Room.CAUGHT_EXCEPTION;
import static com.eu.habbo.habbohotel.rooms.constants.RoomConfiguration.CAUGHT_EXCEPTION;
@Slf4j
@ -118,6 +118,15 @@ public class RoomBotManager extends RoomUnitSubManager {
public Collection<Bot> getBotsAt(RoomTile tile) {
return this.currentBots.values().stream().filter(bot -> bot.getRoomUnit().getCurrentPosition().equals(tile)).collect(Collectors.toSet());
}
public Collection<? extends Bot> getBotsOnItem(RoomItem item) {
return currentBots.values().stream()
.filter(bot ->
bot.getRoomUnit().getCurrentPosition().getX() >= item.getCurrentPosition().getX() &&
bot.getRoomUnit().getCurrentPosition().getX() < item.getCurrentPosition().getX() + item.getBaseItem().getLength() &&
bot.getRoomUnit().getCurrentPosition().getY() >= item.getCurrentPosition().getY() &&
bot.getRoomUnit().getCurrentPosition().getY() < item.getCurrentPosition().getY() + item.getBaseItem().getWidth())
.toList();
}
public void placeBot(Bot bot, Habbo botOwner, int x, int y) {
synchronized (this.currentBots) {
@ -137,7 +146,7 @@ public class RoomBotManager extends RoomUnitSubManager {
}
}
if (this.currentBots.size() >= Room.MAXIMUM_BOTS && !botOwner.hasPermissionRight(Permission.ACC_UNLIMITED_BOTS)) {
if (this.currentBots.size() >= RoomConfiguration.MAXIMUM_BOTS && !botOwner.hasPermissionRight(Permission.ACC_UNLIMITED_BOTS)) {
botOwner.getClient().sendResponse(new BotErrorComposer(BotErrorComposer.ROOM_ERROR_MAX_BOTS));
return;
}

View File

@ -2,7 +2,7 @@ package com.eu.habbo.habbohotel.rooms.bots.entities;
import com.eu.habbo.Emulator;
import com.eu.habbo.habbohotel.bots.Bot;
import com.eu.habbo.habbohotel.rooms.RoomChatMessage;
import com.eu.habbo.habbohotel.rooms.chat.RoomChatMessage;
import com.eu.habbo.habbohotel.rooms.constants.RoomChatMessageBubbles;
import com.eu.habbo.habbohotel.rooms.RoomTile;
import com.eu.habbo.habbohotel.rooms.constants.RoomUserAction;

View File

@ -0,0 +1,301 @@
package com.eu.habbo.habbohotel.rooms.chat;
import com.eu.habbo.Emulator;
import com.eu.habbo.habbohotel.items.interactions.InteractionMuteArea;
import com.eu.habbo.habbohotel.items.interactions.InteractionTalkingFurniture;
import com.eu.habbo.habbohotel.permissions.Permission;
import com.eu.habbo.habbohotel.rooms.Room;
import com.eu.habbo.habbohotel.rooms.RoomLayout;
import com.eu.habbo.habbohotel.rooms.constants.RoomChatMessageBubbles;
import com.eu.habbo.habbohotel.rooms.constants.RoomChatType;
import com.eu.habbo.habbohotel.rooms.constants.RoomConfiguration;
import com.eu.habbo.habbohotel.rooms.items.entities.RoomItem;
import com.eu.habbo.habbohotel.rooms.types.IRoomManager;
import com.eu.habbo.habbohotel.users.Habbo;
import com.eu.habbo.habbohotel.wired.WiredHandler;
import com.eu.habbo.habbohotel.wired.WiredTriggerType;
import com.eu.habbo.messages.ServerMessage;
import com.eu.habbo.messages.outgoing.rooms.users.*;
import com.eu.habbo.messages.outgoing.users.RemainingMutePeriodComposer;
import com.eu.habbo.plugin.events.users.UserIdleEvent;
import com.eu.habbo.plugin.events.users.UsernameTalkEvent;
import com.eu.habbo.threading.runnables.YouAreAPirate;
import gnu.trove.set.hash.THashSet;
import lombok.Getter;
import lombok.Setter;
import lombok.extern.slf4j.Slf4j;
import java.awt.*;
import java.util.regex.Pattern;
import static com.eu.habbo.habbohotel.rooms.constants.RoomConfiguration.CAUGHT_EXCEPTION;
@Getter
@Slf4j
public class RoomChatManager extends IRoomManager {
@Setter
private volatile boolean muted;
private final int muteTime = Emulator.getConfig().getInt("hotel.flood.mute.time", 30);
public RoomChatManager(Room room) {
super(room);
}
public void talk(Habbo habbo, RoomChatMessage roomChatMessage, RoomChatType chatType) {
this.talk(habbo, roomChatMessage, chatType, false);
}
private void showTentChatMessageOutsideTentIfPermitted(Habbo receivingHabbo, RoomChatMessage roomChatMessage, Rectangle tentRectangle) {
if (receivingHabbo != null && receivingHabbo.hasPermissionRight(Permission.ACC_SEE_TENTCHAT) && tentRectangle != null && !RoomLayout.tileInSquare(tentRectangle, receivingHabbo.getRoomUnit().getCurrentPosition())) {
RoomChatMessage staffChatMessage = new RoomChatMessage(roomChatMessage);
staffChatMessage.setMessage("[" + Emulator.getTexts().getValue("hotel.room.tent.prefix") + "] " + staffChatMessage.getMessage());
final ServerMessage staffMessage = new WhisperMessageComposer(staffChatMessage).compose();
receivingHabbo.getClient().sendResponse(staffMessage);
}
}
public void talk(final Habbo habbo, final RoomChatMessage roomChatMessage, RoomChatType chatType, boolean ignoreWired) {
if (!habbo.getHabboStats().allowTalk()) return;
if (habbo.getRoomUnit().isInvisible() && Emulator.getConfig().getBoolean("invisible.prevent.chat", false)) {
if (!Emulator.getGameEnvironment().getCommandsManager().handleCommand(habbo.getClient(), roomChatMessage.getUnfilteredMessage())) {
habbo.whisper(Emulator.getTexts().getValue("invisible.prevent.chat.error"));
}
return;
}
if (habbo.getRoomUnit().getRoom() != room) return;
long millis = System.currentTimeMillis();
if (RoomConfiguration.HABBO_CHAT_DELAY && millis - habbo.getHabboStats().getLastChat() < 750) {
return;
}
habbo.getHabboStats().setLastChat(millis);
if (roomChatMessage != null && Emulator.getConfig().getBoolean("easter_eggs.enabled") && roomChatMessage.getMessage().equalsIgnoreCase("i am a pirate")) {
habbo.getHabboStats().getChatCounter().addAndGet(1);
Emulator.getThreading().run(new YouAreAPirate(habbo, room));
return;
}
UserIdleEvent event = new UserIdleEvent(habbo, UserIdleEvent.IdleReason.TALKED, false);
Emulator.getPluginManager().fireEvent(event);
if (!event.isCancelled() && !event.isIdle()) {
habbo.getRoomUnit().unIdle();
}
this.sendComposer(new UserTypingMessageComposer(habbo.getRoomUnit(), false).compose());
if (roomChatMessage == null || roomChatMessage.getMessage() == null || roomChatMessage.getMessage().isEmpty())
return;
if (!habbo.hasPermissionRight(Permission.ACC_NOMUTE) && (!RoomConfiguration.MUTEAREA_CAN_WHISPER || chatType != RoomChatType.WHISPER)) {
for (RoomItem area : room.getRoomSpecialTypes().getItemsOfType(InteractionMuteArea.class)) {
if (((InteractionMuteArea) area).inSquare(habbo.getRoomUnit().getCurrentPosition())) {
return;
}
}
}
if (!room.getRoomWordFilterManager().getFilteredWords().isEmpty() && !habbo.hasPermissionRight(Permission.ACC_CHAT_NO_FILTER)) {
for (String string : room.getRoomWordFilterManager().getFilteredWords()) {
roomChatMessage.setMessage(roomChatMessage.getMessage().replaceAll("(?i)" + Pattern.quote(string), "bobba"));
}
}
if (!habbo.hasPermissionRight(Permission.ACC_NOMUTE)) {
if (this.isMuted() && !room.getRoomRightsManager().hasRights(habbo)) {
return;
}
if (room.getRoomInfractionManager().isMuted(habbo)) {
habbo.getClient().sendResponse(new RemainingMutePeriodComposer(room.getRoomInfractionManager().getMutedHabbos().get(habbo.getHabboInfo().getId()) - Emulator.getIntUnixTimestamp()));
return;
}
}
if (chatType != RoomChatType.WHISPER) {
if (Emulator.getGameEnvironment().getCommandsManager().handleCommand(habbo.getClient(), roomChatMessage.getUnfilteredMessage())) {
WiredHandler.handle(WiredTriggerType.SAY_COMMAND, habbo.getRoomUnit(), habbo.getRoomUnit().getRoom(), new Object[]{roomChatMessage.getMessage()});
roomChatMessage.isCommand = true;
return;
}
if (!ignoreWired) {
if (WiredHandler.handle(WiredTriggerType.SAY_SOMETHING, habbo.getRoomUnit(), habbo.getRoomUnit().getRoom(), new Object[]{roomChatMessage.getMessage()})) {
habbo.getClient().sendResponse(new WhisperMessageComposer(new RoomChatMessage(roomChatMessage.getMessage(), habbo, habbo, roomChatMessage.getBubble())));
return;
}
}
}
if (!habbo.hasPermissionRight(Permission.ACC_CHAT_NO_FLOOD)) {
final int chatCounter = habbo.getHabboStats().getChatCounter().addAndGet(1);
if (chatCounter > 3) {
final boolean floodRights = Emulator.getConfig().getBoolean("flood.with.rights");
final boolean hasRights = room.getRoomRightsManager().hasRights(habbo);
if (floodRights || !hasRights) {
if (room.getRoomInfo().getChatProtection() == 0 || (room.getRoomInfo().getChatProtection() == 1 && chatCounter > 4) || (room.getRoomInfo().getChatProtection() == 2 && chatCounter > 5)) {
room.getRoomInfractionManager().floodMuteHabbo(habbo, muteTime);
return;
}
}
}
}
ServerMessage prefixMessage = null;
if (Emulator.getPluginManager().isRegistered(UsernameTalkEvent.class, true)) {
UsernameTalkEvent usernameTalkEvent = Emulator.getPluginManager().fireEvent(new UsernameTalkEvent(habbo, roomChatMessage, chatType));
if (usernameTalkEvent.hasCustomComposer()) {
prefixMessage = usernameTalkEvent.getCustomComposer();
}
}
if (prefixMessage == null) {
prefixMessage = roomChatMessage.getHabbo().getHabboInfo().getPermissionGroup().hasPrefix() ? new UserNameChangedMessageComposer(habbo, true).compose() : null;
}
ServerMessage clearPrefixMessage = prefixMessage != null ? new UserNameChangedMessageComposer(habbo).compose() : null;
Rectangle tentRectangle = room.getRoomSpecialTypes().tentAt(habbo.getRoomUnit().getCurrentPosition());
String trimmedMessage = roomChatMessage.getMessage().replaceAll("\\s+$", "");
if (trimmedMessage.isEmpty()) trimmedMessage = " ";
roomChatMessage.setMessage(trimmedMessage);
if (chatType == RoomChatType.WHISPER) {
if (roomChatMessage.getTargetHabbo() == null) {
return;
}
whisper(habbo, roomChatMessage, prefixMessage, clearPrefixMessage);
} else if (chatType == RoomChatType.TALK) {
talk(habbo, roomChatMessage, tentRectangle, prefixMessage, clearPrefixMessage);
} else if (chatType == RoomChatType.SHOUT) {
shout(habbo, roomChatMessage, tentRectangle, prefixMessage, clearPrefixMessage);
}
if (chatType == RoomChatType.TALK || chatType == RoomChatType.SHOUT) {
synchronized (room.getRoomUnitManager().getRoomBotManager().getCurrentBots()) {
room.getRoomUnitManager().getRoomBotManager().getCurrentBots().values().forEach(b -> b.onUserSay(roomChatMessage));
}
if (roomChatMessage.getBubble().triggersTalkingFurniture()) {
triggerTalkingFurni(habbo);
}
}
}
private void triggerTalkingFurni(Habbo habbo) {
THashSet<RoomItem> items = room.getRoomSpecialTypes().getItemsOfType(InteractionTalkingFurniture.class);
for (RoomItem item : items) {
if (room.getLayout().getTile(item.getCurrentPosition().getX(), item.getCurrentPosition().getY()).distance(habbo.getRoomUnit().getCurrentPosition()) <= Emulator.getConfig().getInt("furniture.talking.range")) {
int count = Emulator.getConfig().getInt(item.getBaseItem().getName() + ".message.count", 0);
if (count > 0) {
int randomValue = Emulator.getRandom().nextInt(count + 1);
RoomChatMessage itemMessage = new RoomChatMessage(Emulator.getTexts().getValue(item.getBaseItem().getName() + ".message." + randomValue, item.getBaseItem().getName() + ".message." + randomValue + " not found!"), habbo, RoomChatMessageBubbles.getBubble(Emulator.getConfig().getInt(item.getBaseItem().getName() + ".message.bubble", RoomChatMessageBubbles.PARROT.getType())));
this.sendComposer(new ChatMessageComposer(itemMessage).compose());
try {
item.onClick(habbo.getClient(), room, new Object[0]);
item.setExtraData("1");
room.updateItemState(item);
Emulator.getThreading().run(() -> {
item.setExtraData("0");
room.updateItemState(item);
}, 2000);
break;
} catch (Exception e) {
log.error(CAUGHT_EXCEPTION, e);
}
}
}
}
}
private void shout(Habbo habbo, RoomChatMessage roomChatMessage, Rectangle tentRectangle, ServerMessage prefixMessage, ServerMessage clearPrefixMessage) {
ServerMessage message = new ShoutMessageComposer(roomChatMessage).compose();
for (Habbo h : room.getRoomUnitManager().getCurrentHabbos().values()) {
// Show the message
// If the receiving Habbo has not ignored the sending Habbo
// AND the sending Habbo is NOT in a tent OR the receiving Habbo is in the same tent as the sending Habbo
if (!h.getHabboStats().userIgnored(habbo.getHabboInfo().getId()) && (tentRectangle == null || RoomLayout.tileInSquare(tentRectangle, h.getRoomUnit().getCurrentPosition()))) {
if (prefixMessage != null && !h.getHabboStats().isPreferOldChat()) {
h.getClient().sendResponse(prefixMessage);
}
h.getClient().sendResponse(message);
if (clearPrefixMessage != null && !h.getHabboStats().isPreferOldChat()) {
h.getClient().sendResponse(clearPrefixMessage);
}
continue;
}
// Staff should be able to see the tent chat anyhow, even when not in the same tent
showTentChatMessageOutsideTentIfPermitted(h, roomChatMessage, tentRectangle);
}
}
private void talk(Habbo habbo, RoomChatMessage roomChatMessage, Rectangle tentRectangle, ServerMessage prefixMessage, ServerMessage clearPrefixMessage) {
ServerMessage message = new ChatMessageComposer(roomChatMessage).compose();
boolean noChatLimit = habbo.hasPermissionRight(Permission.ACC_CHAT_NO_LIMIT);
for (Habbo h : room.getRoomUnitManager().getCurrentHabbos().values()) {
if ((h.getRoomUnit().getCurrentPosition().distance(habbo.getRoomUnit().getCurrentPosition()) <= room.getRoomInfo().getChatDistance() || h.equals(habbo) || room.getRoomRightsManager().hasRights(h) || noChatLimit) && (tentRectangle == null || RoomLayout.tileInSquare(tentRectangle, h.getRoomUnit().getCurrentPosition()))) {
if (!h.getHabboStats().userIgnored(habbo.getHabboInfo().getId())) {
if (prefixMessage != null && !h.getHabboStats().isPreferOldChat()) {
h.getClient().sendResponse(prefixMessage);
}
h.getClient().sendResponse(message);
if (clearPrefixMessage != null && !h.getHabboStats().isPreferOldChat()) {
h.getClient().sendResponse(clearPrefixMessage);
}
}
continue;
}
// Staff should be able to see the tent chat anyhow
showTentChatMessageOutsideTentIfPermitted(h, roomChatMessage, tentRectangle);
}
}
private void whisper(Habbo habbo, RoomChatMessage roomChatMessage, ServerMessage prefixMessage, ServerMessage clearPrefixMessage) {
RoomChatMessage staffChatMessage = new RoomChatMessage(roomChatMessage);
staffChatMessage.setMessage("To " + staffChatMessage.getTargetHabbo().getHabboInfo().getUsername() + ": " + staffChatMessage.getMessage());
final ServerMessage message = new WhisperMessageComposer(roomChatMessage).compose();
final ServerMessage staffMessage = new WhisperMessageComposer(staffChatMessage).compose();
for (Habbo h : room.getRoomUnitManager().getCurrentHabbos().values()) {
if (h == roomChatMessage.getTargetHabbo() || h == habbo) {
if (!h.getHabboStats().userIgnored(habbo.getHabboInfo().getId())) {
if (prefixMessage != null) {
h.getClient().sendResponse(prefixMessage);
}
h.getClient().sendResponse(message);
if (clearPrefixMessage != null) {
h.getClient().sendResponse(clearPrefixMessage);
}
}
continue;
}
if (h.hasPermissionRight(Permission.ACC_SEE_WHISPERS)) {
h.getClient().sendResponse(staffMessage);
}
}
}
}

View File

@ -1,4 +1,4 @@
package com.eu.habbo.habbohotel.rooms;
package com.eu.habbo.habbohotel.rooms.chat;
import com.eu.habbo.Emulator;
import com.eu.habbo.core.DatabaseLoggable;

View File

@ -0,0 +1,24 @@
package com.eu.habbo.habbohotel.rooms.constants;
import com.eu.habbo.habbohotel.rooms.Room;
import java.util.Comparator;
public class RoomConfiguration {
public static final double MAXIMUM_FURNI_HEIGHT = 40d;
public static final String CAUGHT_EXCEPTION = "Caught exception";
public static final Comparator<Room> SORT_SCORE = Comparator.comparingInt(room -> room.getRoomInfo().getScore());
public static final Comparator<Room> SORT_ID = Comparator.comparingInt(room -> room.getRoomInfo().getId());
public static final Comparator<Room> SORT_USERS_COUNT = Comparator.comparingInt((Room room) -> room.getRoomUnitManager().getRoomHabbosCount()).thenComparing(SORT_ID);
public static boolean HABBO_CHAT_DELAY = false;
public static int MAXIMUM_BOTS = 10;
public static int MAXIMUM_PETS = 10;
public static int MAXIMUM_FURNI = 2500;
public static int MAXIMUM_POSTITNOTES = 200;
public static int HAND_ITEM_TIME = 10;
public static int IDLE_CYCLES = 240;
public static int IDLE_CYCLES_KICK = 480;
public static String PREFIX_FORMAT = "[<font color=\"%color%\">%prefix%</font>] ";
public static int ROLLERS_MAXIMUM_ROLL_AVATARS = 1;
public static boolean MUTEAREA_CAN_WHISPER = false;
}

View File

@ -4,6 +4,7 @@ import com.eu.habbo.Emulator;
import com.eu.habbo.habbohotel.pets.PetTasks;
import com.eu.habbo.habbohotel.rooms.Room;
import com.eu.habbo.habbohotel.rooms.RoomTile;
import com.eu.habbo.habbohotel.rooms.constants.RoomConfiguration;
import com.eu.habbo.habbohotel.rooms.entities.units.RoomUnitType;
import com.eu.habbo.habbohotel.users.DanceType;
import com.eu.habbo.habbohotel.users.Habbo;
@ -116,11 +117,11 @@ public class RoomHabbo extends RoomAvatar {
}
public boolean isIdle() {
return this.idleTicks > Room.IDLE_CYCLES;
return this.idleTicks > RoomConfiguration.IDLE_CYCLES;
}
public void setIdle() {
this.idleTicks = Room.IDLE_CYCLES + 1;
this.idleTicks = RoomConfiguration.IDLE_CYCLES + 1;
}
public void incrementIdleTicks() {

View File

@ -1,4 +1,4 @@
package com.eu.habbo.habbohotel.rooms;
package com.eu.habbo.habbohotel.rooms.infractions;
import com.eu.habbo.Emulator;
import com.eu.habbo.database.DatabaseConstants;

View File

@ -0,0 +1,110 @@
package com.eu.habbo.habbohotel.rooms.infractions;
import com.eu.habbo.Emulator;
import com.eu.habbo.database.DatabaseConstants;
import com.eu.habbo.habbohotel.permissions.Permission;
import com.eu.habbo.habbohotel.rooms.Room;
import com.eu.habbo.habbohotel.rooms.types.IRoomManager;
import com.eu.habbo.habbohotel.users.Habbo;
import com.eu.habbo.messages.outgoing.rooms.users.UserUnbannedFromRoomComposer;
import gnu.trove.map.hash.TIntIntHashMap;
import gnu.trove.map.hash.TIntObjectHashMap;
import lombok.Getter;
import lombok.extern.slf4j.Slf4j;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import static com.eu.habbo.database.DatabaseConstants.CAUGHT_SQL_EXCEPTION;
@Getter
@Slf4j
public class RoomInfractionManager extends IRoomManager {
private final TIntObjectHashMap<RoomBan> bannedHabbos;
private final TIntIntHashMap mutedHabbos;
public RoomInfractionManager(Room room) {
super(room);
this.bannedHabbos = new TIntObjectHashMap<>();
this.mutedHabbos = new TIntIntHashMap();
}
public void loadBans(Connection connection) {
this.bannedHabbos.clear();
try (PreparedStatement statement = connection.prepareStatement("SELECT users.username, users.id, room_bans.* FROM room_bans INNER JOIN users ON room_bans.user_id = users.id WHERE ends > ? AND room_bans.room_id = ?")) {
statement.setInt(1, Emulator.getIntUnixTimestamp());
statement.setInt(2, room.getRoomInfo().getId());
try (ResultSet set = statement.executeQuery()) {
while (set.next()) {
if (this.bannedHabbos.containsKey(set.getInt(DatabaseConstants.USER_ID)))
continue;
this.bannedHabbos.put(set.getInt(DatabaseConstants.USER_ID), new RoomBan(set));
}
}
} catch (SQLException e) {
log.error(CAUGHT_SQL_EXCEPTION, e);
}
}
public void unbanHabbo(int userId) {
RoomBan ban = this.bannedHabbos.remove(userId);
if (ban != null) {
ban.delete();
}
this.sendComposer(new UserUnbannedFromRoomComposer(room, userId).compose());
}
public boolean isBanned(Habbo habbo) {
RoomBan ban = this.bannedHabbos.get(habbo.getHabboInfo().getId());
boolean banned = ban != null && ban.getEndTimestamp() > Emulator.getIntUnixTimestamp() && !habbo.hasPermissionRight(Permission.ACC_ANYROOMOWNER) && !habbo.hasPermissionRight(Permission.ACC_ENTERANYROOM);
if (!banned && ban != null) {
this.unbanHabbo(habbo.getHabboInfo().getId());
}
return banned;
}
public void addRoomBan(RoomBan roomBan) {
this.bannedHabbos.put(roomBan.getUserId(), roomBan);
}
public void muteHabbo(Habbo habbo, int minutes) {
synchronized (this.mutedHabbos) {
this.mutedHabbos.put(habbo.getHabboInfo().getId(), Emulator.getIntUnixTimestamp() + (minutes * 60));
}
}
public boolean isMuted(Habbo habbo) {
if (room.getRoomInfo().isRoomOwner(habbo) || room.getRoomRightsManager().hasRights(habbo))
return false;
if (this.mutedHabbos.containsKey(habbo.getHabboInfo().getId())) {
boolean time = this.mutedHabbos.get(habbo.getHabboInfo().getId()) > Emulator.getIntUnixTimestamp();
if (!time) {
this.mutedHabbos.remove(habbo.getHabboInfo().getId());
}
return time;
}
return false;
}
public void floodMuteHabbo(Habbo habbo, int timeOut) {
habbo.getHabboStats().setMutedCount(habbo.getHabboStats().getMutedCount() + 1);
timeOut += (timeOut * (int) Math.ceil(Math.pow(habbo.getHabboStats().getMutedCount(), 2)));
habbo.getHabboStats().getChatCounter().set(0);
habbo.mute(timeOut, true);
}
}

View File

@ -14,6 +14,7 @@ import com.eu.habbo.habbohotel.items.interactions.pets.*;
import com.eu.habbo.habbohotel.permissions.Permission;
import com.eu.habbo.habbohotel.rooms.*;
import com.eu.habbo.habbohotel.rooms.constants.FurnitureMovementError;
import com.eu.habbo.habbohotel.rooms.constants.RoomConfiguration;
import com.eu.habbo.habbohotel.rooms.constants.RoomRightLevels;
import com.eu.habbo.habbohotel.rooms.constants.RoomTileState;
import com.eu.habbo.habbohotel.rooms.items.entities.RoomItem;
@ -120,8 +121,8 @@ public class RoomItemManager {
}
public void addRoomItem(RoomItem item) {
if (this.currentItems.size() > Room.MAXIMUM_FURNI) {
log.error("Room ID: {} has exceeded the furniture limit ({} > {}).", this.room.getRoomInfo().getId(), this.currentItems.size(), Room.MAXIMUM_FURNI);
if (this.currentItems.size() > RoomConfiguration.MAXIMUM_FURNI) {
log.error("Room ID: {} has exceeded the furniture limit ({} > {}).", this.room.getRoomInfo().getId(), this.currentItems.size(), RoomConfiguration.MAXIMUM_FURNI);
}
synchronized (this.currentItems) {
@ -170,7 +171,7 @@ public class RoomItemManager {
}
public FurnitureMovementError canPlaceFurnitureAt(RoomItem item, Habbo habbo, RoomTile tile, int rotation) {
if (this.currentItems.size() >= Room.MAXIMUM_FURNI) {
if (this.currentItems.size() >= RoomConfiguration.MAXIMUM_FURNI) {
return FurnitureMovementError.MAX_ITEMS;
} else if (item instanceof InteractionMoodLight && !this.getItemsOfType(InteractionMoodLight.class).isEmpty()) {
return FurnitureMovementError.MAX_DIMMERS;
@ -345,7 +346,7 @@ public class RoomItemManager {
return FurnitureMovementError.TILE_HAS_HABBOS;
if (!this.room.getRoomUnitManager().getRoomBotManager().getBotsAt(t).isEmpty())
return FurnitureMovementError.TILE_HAS_BOTS;
if (this.room.getRoomUnitManager().hasPetsAt(t))
if (this.room.getRoomUnitManager().getRoomPetManager().hasPetsAt(t))
return FurnitureMovementError.TILE_HAS_PETS;
}
}
@ -380,7 +381,7 @@ public class RoomItemManager {
}
}
if ((stackHelper.isEmpty() && topItem != null && topItem != item && !topItem.getBaseItem().allowStack()) || (topItem != null && topItem != item && topItem.getCurrentZ() + Item.getCurrentHeight(topItem) + Item.getCurrentHeight(item) > Room.MAXIMUM_FURNI_HEIGHT)) {
if ((stackHelper.isEmpty() && topItem != null && topItem != item && !topItem.getBaseItem().allowStack()) || (topItem != null && topItem != item && topItem.getCurrentZ() + Item.getCurrentHeight(topItem) + Item.getCurrentHeight(item) > RoomConfiguration.MAXIMUM_FURNI_HEIGHT)) {
item.setRotation(oldRotation);
return FurnitureMovementError.CANT_STACK;
}
@ -405,7 +406,7 @@ public class RoomItemManager {
}
}
if (height > Room.MAXIMUM_FURNI_HEIGHT) {
if (height > RoomConfiguration.MAXIMUM_FURNI_HEIGHT) {
return FurnitureMovementError.CANT_STACK;
}
@ -420,7 +421,7 @@ public class RoomItemManager {
}
}
if (height > Room.MAXIMUM_FURNI_HEIGHT) {
if (height > RoomConfiguration.MAXIMUM_FURNI_HEIGHT) {
return FurnitureMovementError.CANT_STACK;
}
@ -436,8 +437,8 @@ public class RoomItemManager {
item.setExtraData(String.valueOf(item.getCurrentZ() * 100));
}
if (item.getCurrentZ() > Room.MAXIMUM_FURNI_HEIGHT) {
item.setCurrentZ(Room.MAXIMUM_FURNI_HEIGHT);
if (item.getCurrentZ() > RoomConfiguration.MAXIMUM_FURNI_HEIGHT) {
item.setCurrentZ(RoomConfiguration.MAXIMUM_FURNI_HEIGHT);
}
//Update Furniture
@ -608,7 +609,7 @@ public class RoomItemManager {
return FurnitureMovementError.TILE_HAS_HABBOS;
if (checkForUnits && this.room.getRoomUnitManager().getRoomBotManager().hasBotsAt(occupiedTile))
return FurnitureMovementError.TILE_HAS_BOTS;
if (checkForUnits && this.room.getRoomUnitManager().hasPetsAt(occupiedTile))
if (checkForUnits && this.room.getRoomUnitManager().getRoomPetManager().hasPetsAt(occupiedTile))
return FurnitureMovementError.TILE_HAS_PETS;
}
}

View File

@ -0,0 +1,256 @@
package com.eu.habbo.habbohotel.rooms.pets;
import com.eu.habbo.Emulator;
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.RoomTile;
import com.eu.habbo.habbohotel.rooms.RoomUnitManager;
import com.eu.habbo.habbohotel.rooms.constants.RoomTileState;
import com.eu.habbo.habbohotel.rooms.constants.RoomUnitStatus;
import com.eu.habbo.habbohotel.rooms.entities.RoomRotation;
import com.eu.habbo.habbohotel.rooms.entities.units.RoomUnit;
import com.eu.habbo.habbohotel.rooms.entities.units.RoomUnitType;
import com.eu.habbo.habbohotel.rooms.items.entities.RoomItem;
import com.eu.habbo.habbohotel.rooms.pets.entities.RoomPet;
import com.eu.habbo.habbohotel.rooms.entities.units.types.RoomUnitSubManager;
import com.eu.habbo.habbohotel.users.Habbo;
import com.eu.habbo.messages.outgoing.inventory.PetAddedToInventoryComposer;
import com.eu.habbo.messages.outgoing.rooms.pets.RoomPetComposer;
import gnu.trove.set.hash.THashSet;
import lombok.Getter;
import lombok.extern.slf4j.Slf4j;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.*;
import java.util.concurrent.ConcurrentHashMap;
import java.util.stream.Collectors;
import static com.eu.habbo.database.DatabaseConstants.CAUGHT_SQL_EXCEPTION;
@Slf4j
public class RoomPetManager extends RoomUnitSubManager {
@Getter
private final ConcurrentHashMap<Integer, Pet> currentPets;
public RoomPetManager(RoomUnitManager roomUnitManager) {
super(roomUnitManager);
this.currentPets = new ConcurrentHashMap<>();
}
public synchronized void loadPets(Connection connection) {
this.currentPets.clear();
try (PreparedStatement statement = connection.prepareStatement("SELECT users.username as pet_owner_name, users_pets.* FROM users_pets INNER JOIN users ON users_pets.user_id = users.id WHERE room_id = ?")) {
statement.setInt(1, this.room.getRoomInfo().getId());
try (ResultSet set = statement.executeQuery()) {
while (set.next()) {
Pet pet = PetManager.loadPet(set);
pet.setRoom(this.room);
pet.getRoomUnit().setRoom(this.room);
pet.getRoomUnit().setLocation(this.room.getLayout().getTile((short) set.getInt("x"), (short) set.getInt("y")));
if (pet.getRoomUnit().getCurrentPosition() == null || pet.getRoomUnit().getCurrentPosition().getState() == RoomTileState.INVALID) {
pet.getRoomUnit().setCurrentZ(this.room.getLayout().getDoorTile().getStackHeight());
pet.getRoomUnit().setLocation(this.room.getLayout().getDoorTile());
pet.getRoomUnit().setRotation(RoomRotation.fromValue(this.room.getLayout().getDoorDirection()));
} else {
pet.getRoomUnit().setCurrentZ(set.getDouble("z"));
pet.getRoomUnit().setRotation(RoomRotation.values()[set.getInt("rot")]);
}
pet.getRoomUnit().setRoomUnitType(RoomUnitType.PET);
pet.getRoomUnit().setCanWalk(true);
roomUnitManager.addRoomUnit(pet);
this.room.getFurniOwnerNames().put(pet.getUserId(), set.getString("pet_owner_name"));
}
}
} catch (SQLException e) {
log.error(CAUGHT_SQL_EXCEPTION, e);
} catch (Exception e) {
log.error("Caught Exception", e);
}
}
public void placePet(Pet pet, Room room, short x, short y, double z) {
synchronized (this.currentPets) {
RoomTile spawnTile = room.getLayout().getTile(x, y);
if (spawnTile == null) {
spawnTile = room.getLayout().getDoorTile();
}
pet.setRoom(room);
pet.getRoomUnit().walkTo(spawnTile);
pet.getRoomUnit().setLocation(spawnTile)
.setRoomUnitType(RoomUnitType.PET)
.setCanWalk(true)
.setCurrentZ(z);
if (pet.getRoomUnit().getCurrentPosition() == null) {
pet.getRoomUnit()
.setLocation(room.getLayout().getDoorTile())
.setRotation(RoomRotation.fromValue(room.getLayout().getDoorDirection()));
}
pet.setSqlUpdateNeeded(true);
room.getFurniOwnerNames().put(pet.getUserId(), roomUnitManager.getRoomHabboById(pet.getUserId()).getHabboInfo().getUsername());
roomUnitManager.addRoomUnit(pet);
room.sendComposer(new RoomPetComposer(pet).compose());
}
}
public boolean hasPetsAt(RoomTile tile) {
return this.currentPets.values().stream().anyMatch(pet -> pet.getRoomUnit().getCurrentPosition().equals(tile));
}
public Collection<Pet> getPetsAt(RoomTile tile) {
return this.currentPets.values().stream().filter(pet -> pet.getRoomUnit().getCurrentPosition().equals(tile)).collect(Collectors.toSet());
}
public Collection<? extends Pet> getPetsOnItem(RoomItem item) {
return currentPets.values().stream()
.filter(pet ->
pet.getRoomUnit().getCurrentPosition().getX() >= item.getCurrentPosition().getX() &&
pet.getRoomUnit().getCurrentPosition().getX() < item.getCurrentPosition().getX() + item.getBaseItem().getLength() &&
pet.getRoomUnit().getCurrentPosition().getY() >= item.getCurrentPosition().getY() &&
pet.getRoomUnit().getCurrentPosition().getY() < item.getCurrentPosition().getY() + item.getBaseItem().getWidth())
.toList();
}
public Pet getRoomPetById(int petId) {
return this.currentPets.get(petId);
}
public Pet getPetByRoomUnit(RoomUnit roomUnit) {
return this.currentPets.values().stream().filter(pet -> pet.getRoomUnit() == roomUnit).findFirst().orElse(null);
}
public void pickUpMyPets(Habbo owner) {
THashSet<Pet> pets = new THashSet<>();
synchronized (this.currentPets) {
for (Pet pet : this.currentPets.values()) {
if (pet.getUserId() == owner.getHabboInfo().getId()) {
pets.add(pet);
}
}
}
for (Pet pet : pets) {
pet.removeFromRoom();
Emulator.getThreading().run(pet);
owner.getInventory().getPetsComponent().addPet(pet);
owner.getClient().sendResponse(new PetAddedToInventoryComposer(pet));
this.currentPets.remove(pet.getId());
}
}
public Pet removePet(int petId) {
Pet pet = currentPets.get(petId);
roomUnitManager.removeUnit(pet.getRoomUnit().getVirtualId());
return remove(petId);
}
public void removeAllPetsExceptRoomOwner() {
ArrayList<Pet> toRemovePets = new ArrayList<>();
ArrayList<Pet> removedPets = new ArrayList<>();
synchronized (currentPets) {
for (Pet pet : currentPets.values()) {
try {
if (pet.getUserId() != pet.getRoomUnit().getRoom().getRoomInfo().getOwnerInfo().getId()) {
toRemovePets.add(pet);
}
} catch (NoSuchElementException e) {
log.error("Caught exception", e);
break;
}
}
}
for (Pet pet : toRemovePets) {
removedPets.add(pet);
pet.removeFromRoom();
Habbo habbo = Emulator.getGameEnvironment().getHabboManager().getHabbo(pet.getUserId());
if (habbo != null) {
habbo.getInventory().getPetsComponent().addPet(pet);
habbo.getClient().sendResponse(new PetAddedToInventoryComposer(pet));
}
pet.setSqlUpdateNeeded(true);
pet.run();
}
for (Pet pet : removedPets) {
currentPets.remove(pet.getId());
roomUnitManager.removeUnit(pet.getRoomUnit().getVirtualId());
}
}
@Override
public List<RoomPet> cycle() {
List<RoomPet> updatedUnits = new ArrayList<>();
if (!getCurrentPets().isEmpty() && room.isAllowBotsWalk()) {
Iterator<Pet> petIterator = getCurrentPets().values().iterator();
while (petIterator.hasNext()) {
final Pet pet;
try {
pet = petIterator.next();
} catch (Exception e) {
break;
}
pet.getRoomUnit().cycle();
pet.cycle();
if (pet.getRoomUnit().isStatusUpdateNeeded()) {
pet.getRoomUnit().setStatusUpdateNeeded(false);
updatedUnits.add(pet.getRoomUnit());
}
if (pet.getRoomUnit().isWalking() && pet.getRoomUnit().getPath().size() == 1 && pet.getRoomUnit().hasStatus(RoomUnitStatus.GESTURE)) {
pet.getRoomUnit().removeStatus(RoomUnitStatus.GESTURE);
updatedUnits.add(pet.getRoomUnit());
}
}
}
return updatedUnits;
}
public void addPet(Pet pet) {
currentPets.put(pet.getId(), pet);
}
public Pet remove(int petId) {
return currentPets.remove(petId);
}
public void clear() {
currentPets.clear();
}
public void dispose() {
Iterator<Pet> petIterator = this.currentPets.values().iterator();
while (petIterator.hasNext()) {
try {
Pet pet = petIterator.next();
pet.setSqlUpdateNeeded(true);
Emulator.getThreading().run(pet);
} catch (NoSuchElementException e) {
log.error("Caught Exception", e);
break;
}
}
this.currentPets.clear();
}
}

View File

@ -1,10 +1,11 @@
package com.eu.habbo.habbohotel.rooms.entities.units.types;
package com.eu.habbo.habbohotel.rooms.pets.entities;
import com.eu.habbo.habbohotel.pets.Pet;
import com.eu.habbo.habbohotel.pets.RideablePet;
import com.eu.habbo.habbohotel.rooms.constants.RoomUnitStatus;
import com.eu.habbo.habbohotel.rooms.entities.units.RoomUnit;
import com.eu.habbo.habbohotel.rooms.entities.units.RoomUnitType;
import com.eu.habbo.habbohotel.rooms.entities.units.types.RoomAvatar;
import com.eu.habbo.habbohotel.users.Habbo;
import lombok.Getter;
import lombok.Setter;

View File

@ -1,6 +1,7 @@
package com.eu.habbo.habbohotel.rooms;
package com.eu.habbo.habbohotel.rooms.promotions;
import com.eu.habbo.Emulator;
import com.eu.habbo.habbohotel.rooms.Room;
import lombok.Getter;
import lombok.Setter;
import lombok.extern.slf4j.Slf4j;

View File

@ -0,0 +1,86 @@
package com.eu.habbo.habbohotel.rooms.promotions;
import com.eu.habbo.Emulator;
import com.eu.habbo.habbohotel.rooms.Room;
import com.eu.habbo.habbohotel.rooms.types.IRoomManager;
import lombok.Getter;
import lombok.extern.slf4j.Slf4j;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import static com.eu.habbo.database.DatabaseConstants.CAUGHT_SQL_EXCEPTION;
@Slf4j
@Getter
public class RoomPromotionManager extends IRoomManager {
private RoomPromotion promotion;
public RoomPromotionManager(Room room) {
super(room);
}
public void loadPromotions(Connection connection) {
if (room.getRoomInfo().isPromoted()) {
try (PreparedStatement statement = connection.prepareStatement("SELECT * FROM room_promotions WHERE room_id = ? AND end_timestamp > ? LIMIT 1")) {
statement.setInt(1, room.getRoomInfo().getId());
statement.setInt(2, Emulator.getIntUnixTimestamp());
try (ResultSet promotionSet = statement.executeQuery()) {
room.getRoomInfo().setPromoted(false);
if (promotionSet.next()) {
room.getRoomInfo().setPromoted(true);
this.promotion = new RoomPromotion(room, promotionSet);
}
}
} catch (SQLException e) {
log.error(CAUGHT_SQL_EXCEPTION, e);
}
}
}
public boolean isPromoted() {
room.getRoomInfo().setPromoted(this.promotion != null && this.promotion.getEndTimestamp() > Emulator.getIntUnixTimestamp());
room.setNeedsUpdate(true);
return room.getRoomInfo().isPromoted();
}
public String getPromotionDesc() {
return this.promotion != null ? this.promotion.getDescription() : "";
}
public void createPromotion(String title, String description, int category) {
room.getRoomInfo().setPromoted(true);
if (this.promotion == null) {
this.promotion = new RoomPromotion(room, title, description, Emulator.getIntUnixTimestamp() + (120 * 60), Emulator.getIntUnixTimestamp(), category);
} else {
this.promotion.setTitle(title);
this.promotion.setDescription(description);
this.promotion.setEndTimestamp(Emulator.getIntUnixTimestamp() + (120 * 60));
this.promotion.setCategory(category);
}
try (Connection connection = Emulator.getDatabase().getDataSource().getConnection(); PreparedStatement statement = connection.prepareStatement("INSERT INTO room_promotions (room_id, title, description, end_timestamp, start_timestamp, category) VALUES (?, ?, ?, ?, ?, ?) ON DUPLICATE KEY UPDATE title = ?, description = ?, end_timestamp = ?, category = ?")) {
statement.setInt(1, room.getRoomInfo().getId());
statement.setString(2, title);
statement.setString(3, description);
statement.setInt(4, this.promotion.getEndTimestamp());
statement.setInt(5, this.promotion.getStartTimestamp());
statement.setInt(6, category);
statement.setString(7, this.promotion.getTitle());
statement.setString(8, this.promotion.getDescription());
statement.setInt(9, this.promotion.getEndTimestamp());
statement.setInt(10, this.promotion.getCategory());
statement.execute();
} catch (SQLException e) {
log.error(CAUGHT_SQL_EXCEPTION, e);
}
room.setNeedsUpdate(true);
}
}

View File

@ -1,6 +1,7 @@
package com.eu.habbo.habbohotel.rooms;
package com.eu.habbo.habbohotel.rooms.trades;
import com.eu.habbo.Emulator;
import com.eu.habbo.habbohotel.rooms.Room;
import com.eu.habbo.habbohotel.rooms.constants.RoomUnitStatus;
import com.eu.habbo.habbohotel.rooms.items.entities.RoomItem;
import com.eu.habbo.habbohotel.users.Habbo;
@ -134,7 +135,7 @@ public class RoomTrade {
this.sendMessageToUsers(new TradingNotOpenComposer());
}
this.room.stopTrade(this);
this.room.getRoomTradeManager().stopTrade(this);
}
}
@ -285,12 +286,12 @@ public class RoomTrade {
}
private void closeWindow() {
this.removeStatusses();
this.removeStatuses();
this.sendMessageToUsers(new TradeCloseWindowComposer());
}
public void stopTrade(Habbo habbo) {
this.removeStatusses();
this.removeStatuses();
this.clearAccepted();
this.returnItems();
for (RoomTradeUser user : this.users) {
@ -298,10 +299,10 @@ public class RoomTrade {
}
this.updateWindow();
this.sendMessageToUsers(new TradingCloseComposer(habbo.getHabboInfo().getId(), TradingCloseComposer.USER_CANCEL_TRADE));
this.room.stopTrade(this);
this.room.getRoomTradeManager().stopTrade(this);
}
private void removeStatusses() {
private void removeStatuses() {
for (RoomTradeUser user : this.users) {
Habbo habbo = user.getHabbo();

View File

@ -0,0 +1,41 @@
package com.eu.habbo.habbohotel.rooms.trades;
import com.eu.habbo.habbohotel.rooms.Room;
import com.eu.habbo.habbohotel.rooms.types.IRoomManager;
import com.eu.habbo.habbohotel.users.Habbo;
import gnu.trove.set.hash.THashSet;
public class RoomTradeManager extends IRoomManager {
private final THashSet<RoomTrade> activeTrades;
public RoomTradeManager(Room room) {
super(room);
this.activeTrades = new THashSet<>(0);
}
public void startTrade(Habbo userOne, Habbo userTwo) {
RoomTrade trade = new RoomTrade(userOne, userTwo, room);
synchronized (this.activeTrades) {
this.activeTrades.add(trade);
}
trade.start();
}
public void stopTrade(RoomTrade trade) {
synchronized (this.activeTrades) {
this.activeTrades.remove(trade);
}
}
public RoomTrade getActiveTradeForHabbo(Habbo user) {
synchronized (this.activeTrades) {
for (RoomTrade trade : this.activeTrades) {
for (RoomTradeUser habbo : trade.getRoomTradeUsers()) {
if (habbo.getHabbo() == user) return trade;
}
}
}
return null;
}
}

View File

@ -1,4 +1,4 @@
package com.eu.habbo.habbohotel.rooms;
package com.eu.habbo.habbohotel.rooms.trades;
import com.eu.habbo.habbohotel.rooms.items.entities.RoomItem;
import com.eu.habbo.habbohotel.users.Habbo;

View File

@ -0,0 +1,16 @@
package com.eu.habbo.habbohotel.rooms.types;
import com.eu.habbo.habbohotel.rooms.Room;
import com.eu.habbo.messages.ServerMessage;
import lombok.Getter;
import lombok.RequiredArgsConstructor;
@RequiredArgsConstructor
public abstract class IRoomManager {
@Getter
protected final Room room;
protected void sendComposer(ServerMessage message){
room.sendComposer(message);
}
}

View File

@ -2,6 +2,7 @@ package com.eu.habbo.habbohotel.rooms.utils.cycle;
import com.eu.habbo.Emulator;
import com.eu.habbo.habbohotel.rooms.Room;
import com.eu.habbo.habbohotel.rooms.constants.RoomConfiguration;
import com.eu.habbo.habbohotel.users.DanceType;
import com.eu.habbo.habbohotel.users.Habbo;
import com.eu.habbo.habbohotel.wired.WiredHandler;
@ -27,7 +28,7 @@ public class CycleFunctions {
} else {
habbo.getRoomUnit().incrementIdleTicks();
if (!room.getRoomInfo().isRoomOwner(habbo) && habbo.getRoomUnit().getIdleTicks() >= Room.IDLE_CYCLES_KICK) {
if (!room.getRoomInfo().isRoomOwner(habbo) && habbo.getRoomUnit().getIdleTicks() >= RoomConfiguration.IDLE_CYCLES_KICK) {
UserExitRoomEvent event = new UserExitRoomEvent(habbo, UserExitRoomEvent.UserExitRoomReason.KICKED_IDLE);
Emulator.getPluginManager().fireEvent(event);

View File

@ -0,0 +1,77 @@
package com.eu.habbo.habbohotel.rooms.wordquiz;
import com.eu.habbo.Emulator;
import com.eu.habbo.habbohotel.rooms.Room;
import com.eu.habbo.habbohotel.rooms.types.IRoomManager;
import com.eu.habbo.habbohotel.users.Habbo;
import com.eu.habbo.messages.outgoing.polls.infobus.QuestionAnsweredComposer;
import com.eu.habbo.messages.outgoing.polls.infobus.QuestionComposer;
import com.eu.habbo.messages.outgoing.polls.infobus.QuestionFinishedComposer;
import lombok.Getter;
import java.util.ArrayList;
import java.util.List;
@Getter
public class RoomWordQuizManager extends IRoomManager {
private final List<Integer> userVotes;
private String wordQuiz = "";
private int noVotes = 0;
private int yesVotes = 0;
private int wordQuizEnd = 0;
public RoomWordQuizManager(Room room) {
super(room);
this.userVotes = new ArrayList<>();
this.wordQuiz = "";
this.yesVotes = 0;
this.noVotes = 0;
}
public void handleWordQuiz(Habbo habbo, String answer) {
synchronized (this.userVotes) {
if (!this.wordQuiz.isEmpty() && !this.hasVotedInWordQuiz(habbo)) {
answer = answer.replace(":", "");
if (answer.equals("0")) {
this.noVotes++;
} else if (answer.equals("1")) {
this.yesVotes++;
}
this.sendComposer(new QuestionAnsweredComposer(habbo.getHabboInfo().getId(), answer, this.noVotes, this.yesVotes).compose());
this.userVotes.add(habbo.getHabboInfo().getId());
}
}
}
public void startWordQuiz(String question, int duration) {
if (!this.hasActiveWordQuiz()) {
this.wordQuiz = question;
this.noVotes = 0;
this.yesVotes = 0;
this.userVotes.clear();
this.wordQuizEnd = Emulator.getIntUnixTimestamp() + (duration / 1000);
this.sendComposer(new QuestionComposer(duration, question).compose());
}
}
public boolean hasActiveWordQuiz() {
return Emulator.getIntUnixTimestamp() < this.wordQuizEnd;
}
public boolean hasVotedInWordQuiz(Habbo habbo) {
return this.userVotes.contains(habbo.getHabboInfo().getId());
}
public void onHabboEntered(Habbo habbo) {
if (room.getRoomWordQuizManager().hasActiveWordQuiz()) {
habbo.getClient().sendResponse(new QuestionComposer((Emulator.getIntUnixTimestamp() - room.getRoomWordQuizManager().getWordQuizEnd()) * 1000, room.getRoomWordQuizManager().getWordQuiz()));
if (room.getRoomWordQuizManager().hasVotedInWordQuiz(habbo)) {
habbo.getClient().sendResponse(new QuestionFinishedComposer(room.getRoomWordQuizManager().getNoVotes(), room.getRoomWordQuizManager().getYesVotes()));
}
}
}
}

View File

@ -10,7 +10,7 @@ import com.eu.habbo.habbohotel.messenger.Messenger;
import com.eu.habbo.habbohotel.permissions.Permission;
import com.eu.habbo.habbohotel.pets.Pet;
import com.eu.habbo.habbohotel.rooms.Room;
import com.eu.habbo.habbohotel.rooms.RoomChatMessage;
import com.eu.habbo.habbohotel.rooms.chat.RoomChatMessage;
import com.eu.habbo.habbohotel.rooms.constants.RoomChatMessageBubbles;
import com.eu.habbo.habbohotel.rooms.constants.RoomUserAction;
import com.eu.habbo.habbohotel.rooms.items.entities.RoomItem;

View File

@ -8,7 +8,7 @@ import com.eu.habbo.habbohotel.campaign.CalendarRewardClaimed;
import com.eu.habbo.habbohotel.catalog.CatalogItem;
import com.eu.habbo.habbohotel.gameclients.GameClient;
import com.eu.habbo.habbohotel.rooms.constants.RoomChatMessageBubbles;
import com.eu.habbo.habbohotel.rooms.RoomTrade;
import com.eu.habbo.habbohotel.rooms.trades.RoomTrade;
import com.eu.habbo.habbohotel.users.cache.HabboOfferPurchase;
import com.eu.habbo.habbohotel.users.subscriptions.Subscription;
import com.eu.habbo.plugin.events.users.subscriptions.UserSubscriptionCreatedEvent;

View File

@ -4,6 +4,7 @@ import com.eu.habbo.Emulator;
import com.eu.habbo.habbohotel.items.interactions.InteractionGift;
import com.eu.habbo.habbohotel.permissions.Permission;
import com.eu.habbo.habbohotel.rooms.*;
import com.eu.habbo.habbohotel.rooms.chat.RoomChatMessage;
import com.eu.habbo.habbohotel.rooms.constants.RoomChatMessageBubbles;
import com.eu.habbo.habbohotel.rooms.items.entities.RoomItem;
import com.eu.habbo.messages.incoming.MessageHandler;

View File

@ -3,7 +3,7 @@ package com.eu.habbo.messages.incoming.friends;
import com.eu.habbo.Emulator;
import com.eu.habbo.habbohotel.messenger.MessengerBuddy;
import com.eu.habbo.habbohotel.permissions.Permission;
import com.eu.habbo.habbohotel.rooms.RoomChatMessage;
import com.eu.habbo.habbohotel.rooms.chat.RoomChatMessage;
import com.eu.habbo.habbohotel.rooms.constants.RoomChatMessageBubbles;
import com.eu.habbo.habbohotel.users.Habbo;
import com.eu.habbo.messages.incoming.MessageHandler;

View File

@ -55,7 +55,7 @@ public class DeleteRoomEvent extends MessageHandler {
Emulator.getGameEnvironment().getBotManager().pickUpBot(bot, null, room);
}
List<Pet> pets = new ArrayList<>(room.getRoomUnitManager().getCurrentPets().values());
List<Pet> pets = new ArrayList<>(room.getRoomUnitManager().getRoomPetManager().getCurrentPets().values());
for (Pet pet : pets) {
if (pet instanceof RideablePet rideablePet) {
if (rideablePet.getRider() != null) {

View File

@ -29,7 +29,7 @@ public class AnswerPollEvent extends MessageHandler {
if(answer.length() <= 0) return;
if (pollId == 0 && questionId <= 0) {
this.client.getHabbo().getRoomUnit().getRoom().handleWordQuiz(this.client.getHabbo(), answer.toString());
this.client.getHabbo().getRoomUnit().getRoom().getRoomWordQuizManager().handleWordQuiz(this.client.getHabbo(), answer.toString());
return;
}

View File

@ -11,7 +11,7 @@ public class MuteAllInRoomEvent extends MessageHandler {
if (room != null) {
if (room.getRoomInfo().isRoomOwner(this.client.getHabbo())) {
room.setMuted(!room.isMuted());
room.getRoomChatManager().setMuted(!room.getRoomChatManager().isMuted());
this.client.sendResponse(new MuteAllInRoomComposer(room));
}
}

View File

@ -119,7 +119,7 @@ public class SaveRoomSettingsEvent extends MessageHandler {
room.getRoomInfo().setAllowPets(this.packet.readBoolean());
if(!room.getRoomInfo().isAllowPets()) {
room.getRoomUnitManager().removeAllPetsExceptRoomOwner();
room.getRoomUnitManager().getRoomPetManager().removeAllPetsExceptRoomOwner();
}
boolean allowPetsEat = this.packet.readBoolean();

View File

@ -6,6 +6,7 @@ import com.eu.habbo.habbohotel.items.interactions.InteractionPostIt;
import com.eu.habbo.habbohotel.items.interactions.InteractionStickyPole;
import com.eu.habbo.habbohotel.rooms.constants.FurnitureMovementError;
import com.eu.habbo.habbohotel.rooms.Room;
import com.eu.habbo.habbohotel.rooms.constants.RoomConfiguration;
import com.eu.habbo.habbohotel.rooms.items.entities.RoomItem;
import com.eu.habbo.messages.incoming.MessageHandler;
import com.eu.habbo.messages.outgoing.generic.alerts.BubbleAlertKeys;
@ -26,7 +27,7 @@ public class PlacePostItEvent extends MessageHandler {
RoomItem item = this.client.getHabbo().getInventory().getItemsComponent().getHabboItem(itemId);
if (item instanceof InteractionPostIt) {
if (room.getPostItNotes().size() < Room.MAXIMUM_POSTITNOTES) {
if (room.getPostItNotes().size() < RoomConfiguration.MAXIMUM_POSTITNOTES) {
room.getRoomItemManager().addRoomItem(item);
item.setExtraData("FFFF33");
//Deprecated

View File

@ -3,6 +3,7 @@ package com.eu.habbo.messages.incoming.rooms.items;
import com.eu.habbo.habbohotel.items.interactions.InteractionStackHelper;
import com.eu.habbo.habbohotel.rooms.Room;
import com.eu.habbo.habbohotel.rooms.RoomTile;
import com.eu.habbo.habbohotel.rooms.constants.RoomConfiguration;
import com.eu.habbo.habbohotel.rooms.items.entities.RoomItem;
import com.eu.habbo.messages.incoming.MessageHandler;
import com.eu.habbo.messages.outgoing.rooms.HeightMapUpdateMessageComposer;
@ -34,7 +35,7 @@ public class SetCustomStackingHeightEvent extends MessageHandler {
}
}
} else {
stackerHeight = Math.min(Math.max(stackerHeight, itemTile.getZ() * 100.0), Room.MAXIMUM_FURNI_HEIGHT * 100);
stackerHeight = Math.min(Math.max(stackerHeight, itemTile.getZ() * 100.0), RoomConfiguration.MAXIMUM_FURNI_HEIGHT * 100);
}
double height = 0;

View File

@ -6,6 +6,7 @@ import com.eu.habbo.habbohotel.items.interactions.InteractionSpinningBottle;
import com.eu.habbo.habbohotel.items.interactions.pets.InteractionMonsterPlantSeed;
import com.eu.habbo.habbohotel.pets.MonsterplantPet;
import com.eu.habbo.habbohotel.rooms.Room;
import com.eu.habbo.habbohotel.rooms.constants.RoomConfiguration;
import com.eu.habbo.habbohotel.rooms.items.entities.RoomItem;
import com.eu.habbo.messages.incoming.MessageHandler;
import com.eu.habbo.messages.outgoing.rooms.items.RemoveFloorItemComposer;
@ -50,7 +51,7 @@ public class UseFurnitureEvent extends MessageHandler {
if (PET_PRESENTS.contains(item.getBaseItem().getName().toLowerCase())) {
if (room.getRoomUnitManager().getCurrentPets().size() < Room.MAXIMUM_PETS) {
if (room.getRoomUnitManager().getRoomPetManager().getCurrentPets().size() < RoomConfiguration.MAXIMUM_PETS) {
this.client.sendResponse(new OpenPetPackageRequestedMessageComposer(item));
return;
}
@ -73,7 +74,7 @@ public class UseFurnitureEvent extends MessageHandler {
room.sendComposer(new RemoveFloorItemComposer(item, true).compose());
room.getRoomItemManager().removeRoomItem(item);
room.updateTile(room.getLayout().getTile(item.getCurrentPosition().getX(), item.getCurrentPosition().getY()));
room.getRoomUnitManager().placePet(pet, room, item.getCurrentPosition().getX(), item.getCurrentPosition().getY(), item.getCurrentZ());
room.getRoomUnitManager().getRoomPetManager().placePet(pet, room, item.getCurrentPosition().getX(), item.getCurrentPosition().getY(), item.getCurrentZ());
pet.cycle();
room.sendComposer(new UserUpdateComposer(pet.getRoomUnit()).compose());
return true;

View File

@ -11,9 +11,9 @@ public class BreedPetsEvent extends MessageHandler {
if (unknownInt == 0) {
int petId1 = this.packet.readInt();
Pet petOne = this.client.getHabbo().getRoomUnit().getRoom().getRoomUnitManager().getRoomPetById(petId1);
Pet petOne = this.client.getHabbo().getRoomUnit().getRoom().getRoomUnitManager().getRoomPetManager().getRoomPetById(petId1);
int petId = this.packet.readInt();
Pet petTwo = this.client.getHabbo().getRoomUnit().getRoom().getRoomUnitManager().getRoomPetById(petId);
Pet petTwo = this.client.getHabbo().getRoomUnit().getRoom().getRoomUnitManager().getRoomPetManager().getRoomPetById(petId);
if (petOne == null || petTwo == null || petOne == petTwo) {
//TODO Add error

View File

@ -23,7 +23,7 @@ public class CompostPlantEvent extends MessageHandler {
int petId = this.packet.readInt();
Room room = this.client.getHabbo().getRoomUnit().getRoom();
Pet pet = room.getRoomUnitManager().getRoomPetById(petId);
Pet pet = room.getRoomUnitManager().getRoomPetManager().getRoomPetById(petId);
if (pet != null) {
if (pet instanceof MonsterplantPet) {

View File

@ -30,7 +30,7 @@ public class CustomizePetWithFurniEvent extends MessageHandler {
return;
int petId = this.packet.readInt();
Pet pet = this.client.getHabbo().getRoomUnit().getRoom().getRoomUnitManager().getRoomPetById(petId);
Pet pet = this.client.getHabbo().getRoomUnit().getRoom().getRoomUnitManager().getRoomPetManager().getRoomPetById(petId);
if (pet instanceof HorsePet) {
if (item.getBaseItem().getName().toLowerCase().startsWith("horse_dye")) {

View File

@ -12,7 +12,7 @@ public class GetPetCommandsEvent extends MessageHandler {
if (this.client.getHabbo().getRoomUnit().getRoom() == null)
return;
Pet pet = this.client.getHabbo().getRoomUnit().getRoom().getRoomUnitManager().getRoomPetById(petId);
Pet pet = this.client.getHabbo().getRoomUnit().getRoom().getRoomUnitManager().getRoomPetManager().getRoomPetById(petId);
if (pet != null)
this.client.sendResponse(new PetTrainingPanelComposer(pet));

View File

@ -15,7 +15,7 @@ public class GetPetInfoEvent extends MessageHandler {
if (room == null)
return;
Pet pet = room.getRoomUnitManager().getRoomPetById(petId);
Pet pet = room.getRoomUnitManager().getRoomPetManager().getRoomPetById(petId);
if (pet != null) {
this.client.sendResponse(new PetInfoMessageComposer(pet, room, this.client.getHabbo()));

View File

@ -22,7 +22,7 @@ public class MountPetEvent extends MessageHandler {
return;
}
Pet pet = room.getRoomUnitManager().getRoomPetById(petId);
Pet pet = room.getRoomUnitManager().getRoomPetManager().getRoomPetById(petId);
if (!(pet instanceof RideablePet rideablePet)) {
return;

View File

@ -11,7 +11,7 @@ public class MovePetEvent extends MessageHandler {
@Override
public void handle() {
int petId = this.packet.readInt();
Pet pet = this.client.getHabbo().getRoomUnit().getRoom().getRoomUnitManager().getRoomPetById(petId);
Pet pet = this.client.getHabbo().getRoomUnit().getRoom().getRoomUnitManager().getRoomPetManager().getRoomPetById(petId);
if (pet != null) {
Room room = this.client.getHabbo().getRoomUnit().getRoom();

View File

@ -55,7 +55,7 @@ public class OpenPetPackageEvent extends MessageHandler {
}
if (pet != null) {
room.getRoomUnitManager().placePet(pet, room, item.getCurrentPosition().getX(), item.getCurrentPosition().getY(), item.getCurrentZ());
room.getRoomUnitManager().getRoomPetManager().placePet(pet, room, item.getCurrentPosition().getX(), item.getCurrentPosition().getY(), item.getCurrentZ());
pet.setUserId(this.client.getHabbo().getHabboInfo().getId());
pet.setSqlUpdateNeeded(true);
pet.getRoomUnit().setLocation(room.getLayout().getTile(item.getCurrentPosition().getX(), item.getCurrentPosition().getY()));

View File

@ -5,9 +5,10 @@ import com.eu.habbo.habbohotel.permissions.Permission;
import com.eu.habbo.habbohotel.pets.Pet;
import com.eu.habbo.habbohotel.rooms.Room;
import com.eu.habbo.habbohotel.rooms.RoomTile;
import com.eu.habbo.habbohotel.rooms.constants.RoomConfiguration;
import com.eu.habbo.habbohotel.rooms.constants.RoomUnitStatus;
import com.eu.habbo.habbohotel.rooms.entities.units.RoomUnitType;
import com.eu.habbo.habbohotel.rooms.entities.units.types.RoomPet;
import com.eu.habbo.habbohotel.rooms.pets.entities.RoomPet;
import com.eu.habbo.messages.incoming.MessageHandler;
import com.eu.habbo.messages.outgoing.generic.alerts.PetPlacingErrorComposer;
import com.eu.habbo.messages.outgoing.inventory.PetRemovedFromInventoryComposer;
@ -36,7 +37,7 @@ public class PlacePetEvent extends MessageHandler {
if (pet == null) {
return;
}
if (room.getRoomUnitManager().getCurrentPets().size() >= Room.MAXIMUM_PETS && !this.client.getHabbo().hasPermissionRight(Permission.ACC_UNLIMITED_PETS)) {
if (room.getRoomUnitManager().getRoomPetManager().getCurrentPets().size() >= RoomConfiguration.MAXIMUM_PETS && !this.client.getHabbo().hasPermissionRight(Permission.ACC_UNLIMITED_PETS)) {
this.client.sendResponse(new PetPlacingErrorComposer(PetPlacingErrorComposer.ROOM_ERROR_MAX_PETS));
return;
}

View File

@ -20,7 +20,7 @@ public class RemovePetFromFlatEvent extends MessageHandler {
if (room == null)
return;
Pet pet = room.getRoomUnitManager().getRoomPetById(petId);
Pet pet = room.getRoomUnitManager().getRoomPetManager().getRoomPetById(petId);
if (pet != null) {
if (this.client.getHabbo().getHabboInfo().getId() == pet.getUserId() || room.getRoomInfo().getOwnerInfo().getId() == this.client.getHabbo().getHabboInfo().getId() || this.client.getHabbo().hasPermissionRight(Permission.ACC_ANYROOMOWNER)) {

View File

@ -25,7 +25,7 @@ public class RemoveSaddleFromPetEvent extends MessageHandler {
public void handle() {
Room room = this.client.getHabbo().getRoomUnit().getRoom();
int petId = this.packet.readInt();
Pet pet = room.getRoomUnitManager().getRoomPetById(petId);
Pet pet = room.getRoomUnitManager().getRoomPetManager().getRoomPetById(petId);
if (!(pet instanceof HorsePet horse) || pet.getUserId() != this.client.getHabbo().getHabboInfo().getId()) return;

View File

@ -24,7 +24,7 @@ public class RespectPetEvent extends MessageHandler {
final Room room = habbo.getRoomUnit().getRoom();
if (room == null) { return; }
final Pet pet = room.getRoomUnitManager().getRoomPetById(petId);
final Pet pet = room.getRoomUnitManager().getRoomPetManager().getRoomPetById(petId);
if (pet == null) { return; }
if (habbo.getHabboStats().getPetRespectPointsToGive() > 0 || pet instanceof MonsterplantPet) {

View File

@ -9,7 +9,7 @@ public class TogglePetBreedingPermissionEvent extends MessageHandler {
public void handle() {
int petId = this.packet.readInt();
Pet pet = this.client.getHabbo().getRoomUnit().getRoom().getRoomUnitManager().getRoomPetById(petId);
Pet pet = this.client.getHabbo().getRoomUnit().getRoom().getRoomUnitManager().getRoomPetManager().getRoomPetById(petId);
if (pet != null) {
if (pet.getUserId() == this.client.getHabbo().getHabboInfo().getId()) {

View File

@ -14,7 +14,7 @@ public class TogglePetRidingPermissionEvent extends MessageHandler {
if (this.client.getHabbo().getRoomUnit().getRoom() == null)
return;
Pet pet = this.client.getHabbo().getRoomUnit().getRoom().getRoomUnitManager().getRoomPetById(petId);
Pet pet = this.client.getHabbo().getRoomUnit().getRoom().getRoomUnitManager().getRoomPetManager().getRoomPetById(petId);
if (pet == null || pet.getUserId() != this.client.getHabbo().getHabboInfo().getId() || !(pet instanceof RideablePet rideablePet))
return;

View File

@ -3,7 +3,7 @@ package com.eu.habbo.messages.incoming.rooms.promotions;
import com.eu.habbo.Emulator;
import com.eu.habbo.habbohotel.permissions.Permission;
import com.eu.habbo.habbohotel.rooms.Room;
import com.eu.habbo.habbohotel.rooms.RoomPromotion;
import com.eu.habbo.habbohotel.rooms.promotions.RoomPromotion;
import com.eu.habbo.messages.incoming.MessageHandler;
import com.eu.habbo.messages.outgoing.rooms.promotions.RoomEventComposer;
@ -23,7 +23,7 @@ public class EditEventEvent extends MessageHandler {
return;
}
RoomPromotion roomPromotion = room.getPromotion();
RoomPromotion roomPromotion = room.getRoomPromotionManager().getPromotion();
if (roomPromotion != null) {

View File

@ -42,13 +42,13 @@ public class PurchaseRoomAdEvent extends MessageHandler {
return;
}
if (room.isPromoted()) {
room.getPromotion().addEndTimestamp(120 * 60);
if (room.getRoomPromotionManager().isPromoted()) {
room.getRoomPromotionManager().getPromotion().addEndTimestamp(120 * 60);
} else {
room.createPromotion(title, description, categoryId);
room.getRoomPromotionManager().createPromotion(title, description, categoryId);
}
if (room.isPromoted()) {
if (room.getRoomPromotionManager().isPromoted()) {
if (!this.client.getHabbo().hasPermissionRight(Permission.ACC_INFINITE_CREDITS)) {
this.client.getHabbo().giveCredits(-item.getCredits());
}
@ -58,7 +58,7 @@ public class PurchaseRoomAdEvent extends MessageHandler {
}
this.client.sendResponse(new PurchaseOKMessageComposer());
room.sendComposer(new RoomEventComposer(room, room.getPromotion()).compose());
room.sendComposer(new RoomEventComposer(room, room.getRoomPromotionManager().getPromotion()).compose());
if (!this.client.getHabbo().getInventory().getBadgesComponent().hasBadge(PurchaseRoomAdEvent.ROOM_PROMOTION_BADGE)) {
this.client.getHabbo().addBadge(PurchaseRoomAdEvent.ROOM_PROMOTION_BADGE);

View File

@ -3,7 +3,7 @@ package com.eu.habbo.messages.incoming.rooms.users;
import com.eu.habbo.Emulator;
import com.eu.habbo.habbohotel.modtool.ScripterManager;
import com.eu.habbo.habbohotel.rooms.Room;
import com.eu.habbo.habbohotel.rooms.RoomChatMessage;
import com.eu.habbo.habbohotel.rooms.chat.RoomChatMessage;
import com.eu.habbo.habbohotel.rooms.constants.RoomChatType;
import com.eu.habbo.messages.incoming.MessageHandler;
import com.eu.habbo.plugin.events.users.UserTalkEvent;
@ -30,7 +30,7 @@ public class ChatEvent extends MessageHandler {
return;
}
room.talk(this.client.getHabbo(), message, RoomChatType.TALK);
room.getRoomChatManager().talk(this.client.getHabbo(), message, RoomChatType.TALK);
if (!message.isCommand) {
if (RoomChatMessage.SAVE_ROOM_CHATS) {

View File

@ -4,7 +4,7 @@ import com.eu.habbo.Emulator;
import com.eu.habbo.habbohotel.achievements.AchievementManager;
import com.eu.habbo.habbohotel.permissions.Permission;
import com.eu.habbo.habbohotel.rooms.Room;
import com.eu.habbo.habbohotel.rooms.RoomChatMessage;
import com.eu.habbo.habbohotel.rooms.chat.RoomChatMessage;
import com.eu.habbo.habbohotel.rooms.constants.RoomChatMessageBubbles;
import com.eu.habbo.habbohotel.users.Habbo;
import com.eu.habbo.messages.incoming.MessageHandler;

View File

@ -22,7 +22,7 @@ public class RoomUserMuteEvent extends MessageHandler {
Habbo habbo = room.getRoomUnitManager().getRoomHabboById(userId);
if (habbo != null) {
room.muteHabbo(habbo, minutes);
room.getRoomInfractionManager().muteHabbo(habbo, minutes);
habbo.getClient().sendResponse(new RemainingMutePeriodComposer(minutes * 60));
AchievementManager.progressAchievement(this.client.getHabbo(), Emulator.getGameEnvironment().getAchievementManager().getAchievement("SelfModMuteSeen"));
}

View File

@ -2,7 +2,7 @@ package com.eu.habbo.messages.incoming.rooms.users;
import com.eu.habbo.Emulator;
import com.eu.habbo.habbohotel.modtool.ScripterManager;
import com.eu.habbo.habbohotel.rooms.RoomChatMessage;
import com.eu.habbo.habbohotel.rooms.chat.RoomChatMessage;
import com.eu.habbo.habbohotel.rooms.constants.RoomChatType;
import com.eu.habbo.messages.incoming.MessageHandler;
import com.eu.habbo.plugin.events.users.UserTalkEvent;
@ -27,7 +27,7 @@ public class ShoutEvent extends MessageHandler {
return;
}
this.client.getHabbo().getRoomUnit().getRoom().talk(this.client.getHabbo(), message, RoomChatType.SHOUT);
this.client.getHabbo().getRoomUnit().getRoom().getRoomChatManager().talk(this.client.getHabbo(), message, RoomChatType.SHOUT);
if (!message.isCommand) {
if (RoomChatMessage.SAVE_ROOM_CHATS) {

View File

@ -14,7 +14,7 @@ public class UnbanUserFromRoomEvent extends MessageHandler {
if (room != null) {
if (room.getRoomInfo().isRoomOwner(this.client.getHabbo())) {
room.unbanHabbo(userId);
room.getRoomInfractionManager().unbanHabbo(userId);
}
}

View File

@ -2,7 +2,7 @@ package com.eu.habbo.messages.incoming.rooms.users;
import com.eu.habbo.Emulator;
import com.eu.habbo.habbohotel.modtool.ScripterManager;
import com.eu.habbo.habbohotel.rooms.RoomChatMessage;
import com.eu.habbo.habbohotel.rooms.chat.RoomChatMessage;
import com.eu.habbo.habbohotel.rooms.constants.RoomChatType;
import com.eu.habbo.messages.incoming.MessageHandler;
import com.eu.habbo.plugin.events.users.UserTalkEvent;
@ -26,7 +26,7 @@ public class WhisperEvent extends MessageHandler {
return;
}
this.client.getHabbo().getRoomUnit().getRoom().talk(this.client.getHabbo(), chatMessage, RoomChatType.WHISPER, true);
this.client.getHabbo().getRoomUnit().getRoom().getRoomChatManager().talk(this.client.getHabbo(), chatMessage, RoomChatType.WHISPER, true);
if (RoomChatMessage.SAVE_ROOM_CHATS) {
Emulator.getThreading().run(chatMessage);

View File

@ -1,10 +1,9 @@
package com.eu.habbo.messages.incoming.trading;
import com.eu.habbo.habbohotel.rooms.RoomTrade;
import com.eu.habbo.habbohotel.rooms.trades.RoomTrade;
import com.eu.habbo.habbohotel.users.Habbo;
import com.eu.habbo.messages.incoming.MessageHandler;
public class AcceptTradingEvent extends MessageHandler {
public class AcceptTradingEvent extends TradingEvent {
@Override
public void handle() {
Habbo habbo = this.client.getHabbo();
@ -12,7 +11,7 @@ public class AcceptTradingEvent extends MessageHandler {
if (habbo == null || habbo.getHabboInfo() == null || habbo.getRoomUnit().getRoom() == null)
return;
RoomTrade trade = habbo.getRoomUnit().getRoom().getActiveTradeForHabbo(habbo);
RoomTrade trade = getActiveRoomTrade(habbo);
if (trade == null)
return;

View File

@ -1,16 +1,15 @@
package com.eu.habbo.messages.incoming.trading;
import com.eu.habbo.habbohotel.rooms.RoomTrade;
import com.eu.habbo.habbohotel.rooms.trades.RoomTrade;
import com.eu.habbo.habbohotel.rooms.items.entities.RoomItem;
import com.eu.habbo.messages.incoming.MessageHandler;
public class AddItemToTradeEvent extends MessageHandler {
public class AddItemToTradeEvent extends TradingEvent {
@Override
public void handle() {
if (this.client.getHabbo().getRoomUnit().getRoom() == null)
return;
RoomTrade trade = this.client.getHabbo().getRoomUnit().getRoom().getActiveTradeForHabbo(this.client.getHabbo());
RoomTrade trade = getActiveRoomTrade(this.client.getHabbo());
if (trade == null)
return;

View File

@ -1,17 +1,16 @@
package com.eu.habbo.messages.incoming.trading;
import com.eu.habbo.habbohotel.rooms.RoomTrade;
import com.eu.habbo.habbohotel.rooms.trades.RoomTrade;
import com.eu.habbo.habbohotel.rooms.items.entities.RoomItem;
import com.eu.habbo.messages.incoming.MessageHandler;
import gnu.trove.set.hash.THashSet;
public class AddItemsToTradeEvent extends MessageHandler {
public class AddItemsToTradeEvent extends TradingEvent {
@Override
public void handle() {
if (this.client.getHabbo().getRoomUnit().getRoom() == null)
return;
RoomTrade trade = this.client.getHabbo().getRoomUnit().getRoom().getActiveTradeForHabbo(this.client.getHabbo());
RoomTrade trade = getActiveRoomTrade(this.client.getHabbo());
if (trade == null)
return;

View File

@ -1,10 +1,5 @@
package com.eu.habbo.messages.incoming.trading;
import com.eu.habbo.habbohotel.rooms.Room;
import com.eu.habbo.habbohotel.rooms.RoomTrade;
import com.eu.habbo.habbohotel.users.Habbo;
import com.eu.habbo.messages.incoming.MessageHandler;
public class CloseTradingEvent extends TradingEvent {
@Override
public void handle() {

View File

@ -1,14 +1,13 @@
package com.eu.habbo.messages.incoming.trading;
import com.eu.habbo.habbohotel.rooms.RoomTrade;
import com.eu.habbo.habbohotel.rooms.trades.RoomTrade;
import com.eu.habbo.habbohotel.users.Habbo;
import com.eu.habbo.messages.incoming.MessageHandler;
public class ConfirmAcceptTradingEvent extends MessageHandler {
public class ConfirmAcceptTradingEvent extends TradingEvent {
@Override
public void handle() {
Habbo habbo = this.client.getHabbo();
RoomTrade trade = habbo.getRoomUnit().getRoom().getActiveTradeForHabbo(habbo);
RoomTrade trade = getActiveRoomTrade(habbo);
if (trade == null || !trade.getRoomTradeUserForHabbo(habbo).isAccepted())
return;

View File

@ -1,10 +1,5 @@
package com.eu.habbo.messages.incoming.trading;
import com.eu.habbo.habbohotel.rooms.Room;
import com.eu.habbo.habbohotel.rooms.RoomTrade;
import com.eu.habbo.habbohotel.users.Habbo;
import com.eu.habbo.messages.incoming.MessageHandler;
public class ConfirmDeclineTradingEvent extends TradingEvent {
@Override
public void handle() {

View File

@ -3,7 +3,7 @@ package com.eu.habbo.messages.incoming.trading;
import com.eu.habbo.Emulator;
import com.eu.habbo.habbohotel.permissions.Permission;
import com.eu.habbo.habbohotel.rooms.Room;
import com.eu.habbo.habbohotel.rooms.RoomTrade;
import com.eu.habbo.habbohotel.rooms.trades.RoomTrade;
import com.eu.habbo.habbohotel.rooms.constants.RoomUnitStatus;
import com.eu.habbo.habbohotel.users.Habbo;
import com.eu.habbo.messages.incoming.MessageHandler;
@ -57,7 +57,7 @@ public class OpenTradingEvent extends MessageHandler {
return;
}
room.startTrade(this.client.getHabbo(), targetUser);
room.getRoomTradeManager().startTrade(this.client.getHabbo(), targetUser);
}
}
}

View File

@ -1,15 +1,14 @@
package com.eu.habbo.messages.incoming.trading;
import com.eu.habbo.habbohotel.rooms.RoomTrade;
import com.eu.habbo.habbohotel.rooms.trades.RoomTrade;
import com.eu.habbo.habbohotel.rooms.items.entities.RoomItem;
import com.eu.habbo.messages.incoming.MessageHandler;
public class RemoveItemFromTradeEvent extends MessageHandler {
public class RemoveItemFromTradeEvent extends TradingEvent {
@Override
public void handle() {
int itemId = this.packet.readInt();
RoomTrade trade = this.client.getHabbo().getRoomUnit().getRoom().getActiveTradeForHabbo(this.client.getHabbo());
RoomTrade trade = getActiveRoomTrade(this.client.getHabbo());
if (trade != null) {
RoomItem item = trade.getRoomTradeUserForHabbo(this.client.getHabbo()).getItem(itemId);

View File

@ -1,23 +1,27 @@
package com.eu.habbo.messages.incoming.trading;
import com.eu.habbo.habbohotel.rooms.Room;
import com.eu.habbo.habbohotel.rooms.RoomTrade;
import com.eu.habbo.habbohotel.rooms.trades.RoomTrade;
import com.eu.habbo.habbohotel.users.Habbo;
import com.eu.habbo.messages.incoming.MessageHandler;
public abstract class TradingEvent extends MessageHandler {
protected RoomTrade getActiveRoomTrade(Habbo habbo){
return habbo.getRoomUnit().getRoom().getRoomTradeManager().getActiveTradeForHabbo(habbo);
}
protected void stopTrade(Habbo habbo) {
Room room = habbo.getRoomUnit().getRoom();
if (room == null)
return;
RoomTrade trade = room.getActiveTradeForHabbo(habbo);
RoomTrade trade = room.getRoomTradeManager().getActiveTradeForHabbo(habbo);
if (trade == null)
return;
trade.stopTrade(habbo);
room.stopTrade(trade);
room.getRoomTradeManager().stopTrade(trade);
}
}

View File

@ -1,14 +1,14 @@
package com.eu.habbo.messages.incoming.trading;
import com.eu.habbo.habbohotel.rooms.RoomTrade;
import com.eu.habbo.habbohotel.rooms.trades.RoomTrade;
import com.eu.habbo.habbohotel.users.Habbo;
import com.eu.habbo.messages.incoming.MessageHandler;
public class UnacceptTradingEvent extends MessageHandler {
public class UnacceptTradingEvent extends TradingEvent {
@Override
public void handle() {
Habbo habbo = this.client.getHabbo();
RoomTrade trade = habbo.getRoomUnit().getRoom().getActiveTradeForHabbo(habbo);
RoomTrade trade = getActiveRoomTrade(habbo);
if (trade == null)
return;

View File

@ -2,7 +2,7 @@ package com.eu.habbo.messages.outgoing.rooms;
import com.eu.habbo.Emulator;
import com.eu.habbo.habbohotel.rooms.Room;
import com.eu.habbo.habbohotel.rooms.RoomBan;
import com.eu.habbo.habbohotel.rooms.infractions.RoomBan;
import com.eu.habbo.messages.ServerMessage;
import com.eu.habbo.messages.outgoing.MessageComposer;
import com.eu.habbo.messages.outgoing.Outgoing;
@ -22,9 +22,9 @@ public class BannedUsersFromRoomComposer extends MessageComposer {
THashSet<RoomBan> roomBans = new THashSet<>();
TIntObjectIterator<RoomBan> iterator = this.room.getBannedHabbos().iterator();
TIntObjectIterator<RoomBan> iterator = this.room.getRoomInfractionManager().getBannedHabbos().iterator();
for (int i = this.room.getBannedHabbos().size(); i-- > 0; ) {
for (int i = this.room.getRoomInfractionManager().getBannedHabbos().size(); i-- > 0; ) {
try {
iterator.advance();

Some files were not shown because too many files have changed in this diff Show More