diff --git a/src/main/java/com/projectswg/holocore/intents/support/global/chat/ChatRoomMessageIntent.java b/src/main/java/com/projectswg/holocore/intents/support/global/chat/ChatRoomMessageIntent.java new file mode 100644 index 000000000..46cbabaa1 --- /dev/null +++ b/src/main/java/com/projectswg/holocore/intents/support/global/chat/ChatRoomMessageIntent.java @@ -0,0 +1,37 @@ +package com.projectswg.holocore.intents.support.global.chat; + +import com.projectswg.holocore.resources.support.global.player.Player; +import me.joshlarson.jlcommon.control.Intent; +import org.jetbrains.annotations.NotNull; + +public class ChatRoomMessageIntent extends Intent { + + private final Player player; + private final String roomPath; + private final String message; + + public ChatRoomMessageIntent(@NotNull Player player, @NotNull String roomPath, @NotNull String message) { + this.player = player; + this.roomPath = roomPath; + this.message = message; + } + + @NotNull + public Player getPlayer() { + return player; + } + + @NotNull + public String getRoomPath() { + return roomPath; + } + + @NotNull + public String getMessage() { + return message; + } + + public static void broadcast(@NotNull Player player, @NotNull String roomPath, @NotNull String message) { + new ChatRoomMessageIntent(player, roomPath, message).broadcast(); + } +} diff --git a/src/main/java/com/projectswg/holocore/intents/support/global/chat/ChatRoomUpdateIntent.java b/src/main/java/com/projectswg/holocore/intents/support/global/chat/ChatRoomUpdateIntent.java index d52ba8c65..772bab8a3 100644 --- a/src/main/java/com/projectswg/holocore/intents/support/global/chat/ChatRoomUpdateIntent.java +++ b/src/main/java/com/projectswg/holocore/intents/support/global/chat/ChatRoomUpdateIntent.java @@ -59,9 +59,6 @@ public class ChatRoomUpdateIntent extends Intent { case CREATE: this.title = title; break; - case SEND_MESSAGE: - this.message = message; - break; default: this.target = target; break; @@ -135,7 +132,7 @@ public class ChatRoomUpdateIntent extends Intent { BANNED_ADD_TARGET, BANNED_REMOVE_TARGET, INVITED_ADD_TARGET, - INVITED_REMOVE_TARGET, - SEND_MESSAGE + INVITED_REMOVE_TARGET } + } diff --git a/src/main/java/com/projectswg/holocore/resources/support/global/commands/callbacks/group/CmdGroupChat.java b/src/main/java/com/projectswg/holocore/resources/support/global/commands/callbacks/group/CmdGroupChat.java index 39e59c980..cc6527d37 100644 --- a/src/main/java/com/projectswg/holocore/resources/support/global/commands/callbacks/group/CmdGroupChat.java +++ b/src/main/java/com/projectswg/holocore/resources/support/global/commands/callbacks/group/CmdGroupChat.java @@ -1,15 +1,31 @@ package com.projectswg.holocore.resources.support.global.commands.callbacks.group; +import com.projectswg.holocore.intents.support.global.chat.ChatRoomMessageIntent; +import com.projectswg.holocore.intents.support.global.chat.ChatRoomUpdateIntent; import com.projectswg.holocore.resources.support.global.commands.ICmdCallback; import com.projectswg.holocore.resources.support.global.player.Player; import com.projectswg.holocore.resources.support.objects.swg.SWGObject; +import com.projectswg.holocore.resources.support.objects.swg.creature.CreatureObject; +import com.projectswg.holocore.resources.support.objects.swg.group.GroupObject; +import com.projectswg.holocore.services.support.objects.ObjectStorageService.ObjectLookup; import org.jetbrains.annotations.NotNull; public final class CmdGroupChat implements ICmdCallback { @Override public void execute(@NotNull Player player, SWGObject target, @NotNull String args) { + CreatureObject creature = player.getCreatureObject(); + if (creature == null) + return; + long groupId = creature.getGroupId(); + if (groupId == 0) + return; + + GroupObject group = (GroupObject) ObjectLookup.getObjectById(groupId); + assert group != null : "groupId is set but no GroupObject exists"; + + ChatRoomMessageIntent.broadcast(player, group.getChatRoomPath(), args); } } diff --git a/src/main/java/com/projectswg/holocore/resources/support/objects/swg/group/GroupObject.java b/src/main/java/com/projectswg/holocore/resources/support/objects/swg/group/GroupObject.java index c5f4920b1..1f5eb96e1 100644 --- a/src/main/java/com/projectswg/holocore/resources/support/objects/swg/group/GroupObject.java +++ b/src/main/java/com/projectswg/holocore/resources/support/objects/swg/group/GroupObject.java @@ -31,6 +31,7 @@ import com.projectswg.common.encoding.Encodable; import com.projectswg.common.encoding.StringType; import com.projectswg.common.network.NetBuffer; import com.projectswg.common.network.packets.swg.zone.baselines.Baseline; +import com.projectswg.holocore.ProjectSWG; import com.projectswg.holocore.intents.gameplay.player.group.GroupEventIntent; import com.projectswg.holocore.intents.gameplay.player.group.GroupEventIntent.GroupEventType; import com.projectswg.holocore.resources.support.data.collections.SWGList; @@ -128,6 +129,10 @@ public class GroupObject extends SWGObject { return size() >= 8; } + public String getChatRoomPath() { + return "SWG." + ProjectSWG.getGalaxy().getName() + ".group." + getObjectId() + ".GroupChat"; + } + public long getLeaderId() { return leader.getObjectId(); } diff --git a/src/main/java/com/projectswg/holocore/services/gameplay/player/group/GroupService.java b/src/main/java/com/projectswg/holocore/services/gameplay/player/group/GroupService.java index 45ecefa12..f4c805427 100644 --- a/src/main/java/com/projectswg/holocore/services/gameplay/player/group/GroupService.java +++ b/src/main/java/com/projectswg/holocore/services/gameplay/player/group/GroupService.java @@ -362,15 +362,13 @@ public class GroupService extends Service { new ObjectCreatedIntent(group).broadcast(); - String galaxy = leader.getGalaxyName(); - new ChatRoomUpdateIntent(leader, new ChatAvatar(leader.getCharacterChatName()), getGroupChatPath(group.getObjectId(), galaxy), String.valueOf(group.getObjectId()), false).broadcast(); + new ChatRoomUpdateIntent(leader, new ChatAvatar(leader.getCharacterChatName()), group.getChatRoomPath(), String.valueOf(group.getObjectId()), false).broadcast(); sendSystemMessage(leader, "formed_self", "TT", leader.getCreatureObject().getObjectId()); onJoinGroup(member.getCreatureObject(), group); } private void destroyGroup(GroupObject group, Player player) { - String galaxy = player.getGalaxyName(); - new ChatRoomUpdateIntent(getGroupChatPath(group.getObjectId(), galaxy), String.valueOf(group.getObjectId()), null, new ChatAvatar(player.getCharacterChatName()), null, ChatRoomUpdateIntent.UpdateType.DESTROY).broadcast(); + new ChatRoomUpdateIntent(group.getChatRoomPath(), String.valueOf(group.getObjectId()), null, new ChatAvatar(player.getCharacterChatName()), null, ChatRoomUpdateIntent.UpdateType.DESTROY).broadcast(); sendGroupSystemMessage(group, "disbanded"); group.disbandGroup(); @@ -422,7 +420,7 @@ public class GroupService extends Service { } private void updateChatRoom(Player player, GroupObject group, UpdateType updateType) { - new ChatRoomUpdateIntent(player, getGroupChatPath(group.getObjectId(), player.getGalaxyName()), updateType).broadcast(); + new ChatRoomUpdateIntent(player, group.getChatRoomPath(), updateType).broadcast(); } private void clearInviteData(CreatureObject creature) { @@ -457,10 +455,6 @@ public class GroupService extends Service { } } - private String getGroupChatPath(long groupId, String galaxy) { - return "SWG." + galaxy + ".group." + groupId + ".GroupChat"; - } - private GroupObject getGroup(long groupId) { return groups.get(groupId); } diff --git a/src/main/java/com/projectswg/holocore/services/support/global/chat/ChatRoomService.java b/src/main/java/com/projectswg/holocore/services/support/global/chat/ChatRoomService.java index 2abf4d5cd..fe49f8a03 100644 --- a/src/main/java/com/projectswg/holocore/services/support/global/chat/ChatRoomService.java +++ b/src/main/java/com/projectswg/holocore/services/support/global/chat/ChatRoomService.java @@ -34,6 +34,7 @@ import com.projectswg.common.data.encodables.oob.OutOfBandPackage; import com.projectswg.common.network.packets.SWGPacket; import com.projectswg.common.network.packets.swg.zone.chat.*; import com.projectswg.common.network.packets.swg.zone.insertion.ChatRoomList; +import com.projectswg.holocore.intents.support.global.chat.ChatRoomMessageIntent; import com.projectswg.holocore.intents.support.global.zone.PlayerEventIntent; import com.projectswg.holocore.intents.support.global.chat.ChatRoomUpdateIntent; import com.projectswg.holocore.intents.support.global.network.InboundPacketIntent; @@ -142,14 +143,16 @@ public class ChatRoomService extends Service { case LEAVE: chatRoomHandler.leaveChatChannel(crui.getPlayer(), crui.getPath()); break; - case SEND_MESSAGE: - chatRoomHandler.sendMessageToRoom(crui.getPlayer(), crui.getPath(), 0, crui.getMessage(), new OutOfBandPackage()); - break; default: break; } } + @IntentHandler + private void handleChatRoomMessageIntent(ChatRoomMessageIntent crmi) { + chatRoomHandler.sendMessageToRoom(crmi.getPlayer(), crmi.getRoomPath(), 0, crmi.getMessage(), new OutOfBandPackage()); + } + /* Chat Rooms */ private ChatResult performModeratedChecks(ChatRoom room, Player senderPlayer, ChatAvatar senderAvatar) {