Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -293,8 +293,14 @@ private boolean dispatchCommand(CommandSender sender, Command cmd, String label,
return true;
}
Guild g = FactionManager.getGuildByMember(Members.key(p));
if(g.isBase()) {
p.sendMessage("§cYou are in the main guild of your faction. Use /faction leave to leave the faction.");
return true;
}
// Leaving a guild keeps you in the faction, back in its main guild.
g.kick(Members.key(p));
p.sendMessage("§aLeft "+g.getName());
g.getFaction().addMember(Members.key(p));
p.sendMessage("§aLeft "+g.getName()+" §aand returned to the main guild of "+g.getFaction().getName());
return true;
} else if(cmd.getName().equalsIgnoreCase(cmd2) && args[0].equalsIgnoreCase("kick") && args.length >= 2) {
Guild guild = FactionManager.getGuildByLeader(Members.key(p));
Expand All @@ -315,9 +321,12 @@ private boolean dispatchCommand(CommandSender sender, Command cmd, String label,
p.sendMessage("§cYou cannot dismiss the leader!");
return true;
}
// A guild leader can only remove someone from the guild; they stay in the faction's main guild.
guild.kick(kicked);
guild.getFaction().addMember(kicked);
p.sendMessage("§aKicked "+Members.display(kicked));
Members.online(kicked).ifPresent(pl -> pl.sendMessage("§a"+Members.name(p)+ " kicked you from "+guild.getName()));
Members.online(kicked).ifPresent(pl -> pl.sendMessage("§a"+Members.name(p)+ " kicked you from "+guild.getName()
+ "§a. You are back in the main guild of "+guild.getFaction().getName()));
return true;
} else if(cmd.getName().equalsIgnoreCase(cmd2) && args[0].equalsIgnoreCase("setbank") && args.length == 1) {
if(FactionManager.getGuildByLeader(Members.key(p)) != null) {
Expand Down Expand Up @@ -1070,7 +1079,7 @@ private boolean dispatchCommand(CommandSender sender, Command cmd, String label,
}
Faction f = FactionManager.getByMember(Members.key(p));
if(f.isInGuild(Members.key(p))) {
p.sendMessage("§cYou are in a guild, use /guild leave instead");
p.sendMessage("§cYou are in a guild. Use /guild leave first, then /faction leave");
return true;
}
f.forceRemoveMember(Members.key(p));
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,16 +18,20 @@
import org.mockito.MockedStatic;

import net.tfminecraft.simplefactions.managers.CommandManager;
import net.tfminecraft.simplefactions.objects.Faction;
import net.tfminecraft.simplefactions.managers.FactionManager;
import net.tfminecraft.simplefactions.utils.TabCompletion;

class GuildKickCommandTest {

@Test
void leaderRemovesAMemberAndNotifiesThem() {
void leaderRemovesAMemberFromTheGuildButKeepsThemInTheFaction() {
Player leader = player("Leader");
Player member = player("Steve");
Guild guild = guild(false, "Smiths", "Leader", "Leader", "Steve");
Faction realm = mock(Faction.class);
when(realm.getName()).thenReturn("Avalon");
when(guild.getFaction()).thenReturn(realm);
Command command = guildCommand();

try (MockedStatic<FactionManager> factions = mockStatic(FactionManager.class);
Expand All @@ -39,8 +43,9 @@ void leaderRemovesAMemberAndNotifiesThem() {

// The typed name finds the member by character name; the stored key is what leaves.
verify(guild).kick("Steve");
verify(realm).addMember("Steve");
verify(leader).sendMessage("§aKicked Steve");
verify(member).sendMessage("§aLeader kicked you from Smiths");
verify(member).sendMessage("§aLeader kicked you from Smiths§a. You are back in the main guild of Avalon");
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -895,14 +895,24 @@ void leavingRequiresMembershipAndNonLeadership(String name) {
if (name.equals("faction")) {
when(faction.isInGuild("Leader")).thenReturn(true);
assertTrue(run(name, "leave"));
verify(player).sendMessage(contains("use /guild leave"));
verify(player).sendMessage(contains("Use /guild leave first"));
when(faction.isInGuild("Leader")).thenReturn(false);
} else {
when(guild.isBase()).thenReturn(true);
assertTrue(run(name, "leave"));
verify(player).sendMessage(contains("Use /faction leave"));
verify(guild, never()).kick("Leader");
when(guild.isBase()).thenReturn(false);
when(guild.getFaction()).thenReturn(faction);
}
assertTrue(run(name, "leave"));
if (name.equals("faction")) {
verify(faction).forceRemoveMember("Leader");
verify(faction).updatePrestige();
} else verify(guild).kick("Leader");
} else {
verify(guild).kick("Leader");
verify(faction).addMember("Leader");
}
verify(player).sendMessage(contains("Left "));
}

Expand Down
Loading