@@ -65,64 +65,60 @@ protected void sendMessage(
65
65
if ( isBroadcastChannel () ) {
66
66
// ブロードキャストチャンネル
67
67
68
- if ( isWorldRange () && player .isOnline () && player .getWorldName () != null ) {
69
-
70
- if ( player instanceof ChannelMemberBukkit ) {
71
- // ↑常にtrueだと思うが、念のため。
72
-
73
- World w = ((ChannelMemberBukkit )player ).getWorld ();
74
-
75
- if ( getChatRange () > 0 ) {
76
- // 範囲チャット
77
-
78
- Location origin = ((ChannelMemberBukkit )player ).getLocation ();
79
- for ( Player p : Bukkit .getOnlinePlayers () ) {
80
- ChannelMember cp = ChannelMember .getChannelMember (p );
81
- if ( p .getWorld ().equals (w ) &&
82
- origin .distance (p .getLocation ()) <= getChatRange () &&
83
- !getHided ().contains (cp ) ) {
84
- recipients .add (ChannelMember .getChannelMember (p ));
85
- }
86
- }
87
-
88
- } else {
89
- // ワールドチャット
90
-
91
- for ( Player p : Bukkit .getOnlinePlayers () ) {
92
- ChannelMember cp = ChannelMember .getChannelMember (p );
93
- if ( p .getWorld ().equals (w ) && !getHided ().contains (cp ) ) {
94
- recipients .add (ChannelMember .getChannelMember (p ));
95
- }
96
- }
97
- }
68
+ for ( Player p : Bukkit .getOnlinePlayers () ) {
69
+ ChannelMember cp = ChannelMember .getChannelMember (p );
70
+ if ( !getHided ().contains (cp ) ) {
71
+ recipients .add (cp );
72
+ }
73
+ }
74
+ } else {
75
+ // 通常チャンネル
76
+
77
+ for ( ChannelMember mem : getMembers () ) {
78
+ if ( mem != null && mem .isOnline () && !getHided ().contains (mem ) ) {
79
+ recipients .add (mem );
80
+ }
81
+ }
82
+ }
83
+
84
+ if ( isWorldRange () && player .isOnline () && player .getWorldName () != null ) {
85
+ // ワールドチャットや範囲チャットの場合は、範囲外のプレイヤーをrecipientsから抜く
86
+
87
+ List <ChannelMember > recipientsNew = new ArrayList <>();
88
+
89
+ if ( getChatRange () > 0 ) {
90
+ // 範囲チャット
98
91
99
- // 受信者が自分以外いない場合は、メッセージを表示する
100
- if ( Messages .noRecipientMessage ("" , "" ).length > 0 && (
101
- recipients .size () == 0 ||
102
- (recipients .size () == 1 &&
103
- recipients .get (0 ).getName ().equals (player .getName ()) ) ) ) {
104
- sendNoRecipientMessage = true ;
92
+ @ Nullable Location origin = ((ChannelMemberBukkit )player ).getLocation ();
93
+ for ( ChannelMember recipient : recipients ) {
94
+ @ Nullable Location target = ((ChannelMemberBukkit )recipient ).getLocation ();
95
+ if ( origin != null && target != null &&
96
+ origin .getWorld ().equals (target .getWorld ()) &&
97
+ origin .distance (target ) <= getChatRange () ) {
98
+ recipientsNew .add (recipient );
105
99
}
106
100
}
107
101
108
102
} else {
109
- // 通常ブロードキャスト(全員へ送信)
103
+ // ワールドチャット
110
104
111
- for ( Player p : Bukkit .getOnlinePlayers () ) {
112
- ChannelMember cp = ChannelMember .getChannelMember (p );
113
- if ( !getHided ().contains (cp ) ) {
114
- recipients .add (cp );
105
+ @ Nullable World w = ((ChannelMemberBukkit )player ).getWorld ();
106
+ for ( ChannelMember recipient : recipients ) {
107
+ @ Nullable World target = ((ChannelMemberBukkit )recipient ).getWorld ();
108
+ if ( w != null && target != null && w .equals (target ) ) {
109
+ recipientsNew .add (recipient );
115
110
}
116
111
}
117
112
}
118
113
119
- } else {
120
- // 通常チャンネル
114
+ recipients = recipientsNew ;
121
115
122
- for ( ChannelMember mem : getMembers () ) {
123
- if ( mem != null && mem .isOnline () && !getHided ().contains (mem ) ) {
124
- recipients .add (mem );
125
- }
116
+ // 受信者が自分以外いない場合は、メッセージを表示する
117
+ if ( Messages .noRecipientMessage ("" , "" ).length > 0 && (
118
+ recipients .size () == 0 ||
119
+ (recipients .size () == 1 &&
120
+ recipients .get (0 ).getName ().equals (player .getName ()) ) ) ) {
121
+ sendNoRecipientMessage = true ;
126
122
}
127
123
}
128
124
0 commit comments