Skip to content

Commit 77fbfab

Browse files
authored
Merge pull request #42 from FTBTeam/dev
Dev
2 parents 029609b + b8721f3 commit 77fbfab

File tree

14 files changed

+142
-36
lines changed

14 files changed

+142
-36
lines changed

CHANGELOG.md

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,17 @@ All notable changes to this project will be documented in this file.
44
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
55
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
66

7+
## [2001.1.3]
8+
9+
### Fixed
10+
* Fixed `/ftbteams party join` and `/ftbteams party decline` commands not working correctly
11+
12+
## [2001.1.2]
13+
14+
### Added
15+
* Ported to Minecraft 1.20.1
16+
* Equivalent in functionality to the 1902.2.14 release
17+
718
## [1902.2.12]
819

920
### Added

common/src/main/java/dev/ftb/mods/ftbteams/client/FTBTeamsClient.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
import dev.ftb.mods.ftbteams.api.property.TeamPropertyCollection;
1313
import dev.ftb.mods.ftbteams.client.gui.MyTeamScreen;
1414
import dev.ftb.mods.ftbteams.data.ClientTeamManagerImpl;
15+
import dev.ftb.mods.ftbteams.data.PlayerPermissions;
1516
import dev.ftb.mods.ftbteams.net.OpenGUIMessage;
1617
import net.minecraft.client.KeyMapping;
1718
import net.minecraft.client.Minecraft;
@@ -52,8 +53,8 @@ private static EventResult keyPressed(Minecraft client, int keyCode, int scanCod
5253
return EventResult.pass();
5354
}
5455

55-
public static void openMyTeamGui(TeamPropertyCollection properties) {
56-
new MyTeamScreen(properties).openGui();
56+
public static void openMyTeamGui(TeamPropertyCollection properties, PlayerPermissions permissions) {
57+
new MyTeamScreen(properties, permissions).openGui();
5758
}
5859

5960
public static void updateSettings(UUID id, TeamPropertyCollection properties) {

common/src/main/java/dev/ftb/mods/ftbteams/client/gui/CreatePartyButton.java

Lines changed: 19 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -7,25 +7,37 @@
77
import dev.ftb.mods.ftblibrary.util.TooltipList;
88
import dev.ftb.mods.ftbteams.FTBTeamsAPIImpl;
99
import dev.ftb.mods.ftbteams.api.FTBTeamsAPI;
10+
import net.minecraft.ChatFormatting;
1011
import net.minecraft.network.chat.Component;
12+
import net.minecraft.network.chat.MutableComponent;
1113

1214
public class CreatePartyButton extends NordButton {
13-
CreatePartyButton(Panel panel) {
14-
super(panel, Component.translatable("ftbteams.create_party"), Icons.ADD);
15+
private final boolean enabled;
16+
17+
CreatePartyButton(Panel panel, boolean enabled) {
18+
super(panel, makeTitle(enabled), Icons.ADD);
19+
this.enabled = enabled;
20+
}
21+
22+
private static Component makeTitle(boolean enabled) {
23+
MutableComponent c = Component.translatable("ftbteams.create_party");
24+
return enabled ? c : c.withStyle(ChatFormatting.DARK_GRAY);
1525
}
1626

1727
@Override
1828
public void addMouseOverText(TooltipList list) {
19-
list.translate("ftbteams.create_party.info");
29+
list.translate(enabled ? "ftbteams.create_party.info" : "ftbteams.server_permissions_prevent");
2030
list.maxWidth = 130;
2131
}
2232

2333
@Override
2434
public void onClicked(MouseButton button) {
25-
if (FTBTeamsAPI.api().getCustomPartyCreationHandler() != null) {
26-
FTBTeamsAPIImpl.INSTANCE.getCustomPartyCreationHandler().createParty(button);
27-
} else {
28-
new CreatePartyScreen().openGui();
35+
if (enabled) {
36+
if (FTBTeamsAPI.api().getCustomPartyCreationHandler() != null) {
37+
FTBTeamsAPIImpl.INSTANCE.getCustomPartyCreationHandler().createParty(button);
38+
} else {
39+
new CreatePartyScreen().openGui();
40+
}
2941
}
3042
}
3143
}

common/src/main/java/dev/ftb/mods/ftbteams/client/gui/MyTeamScreen.java

Lines changed: 10 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -16,10 +16,7 @@
1616
import dev.ftb.mods.ftbteams.api.client.KnownClientPlayer;
1717
import dev.ftb.mods.ftbteams.api.property.TeamProperties;
1818
import dev.ftb.mods.ftbteams.api.property.TeamPropertyCollection;
19-
import dev.ftb.mods.ftbteams.data.ClientTeamManagerImpl;
20-
import dev.ftb.mods.ftbteams.data.FTBTUtils;
21-
import dev.ftb.mods.ftbteams.data.TeamPropertyCollectionImpl;
22-
import dev.ftb.mods.ftbteams.data.TeamType;
19+
import dev.ftb.mods.ftbteams.data.*;
2320
import dev.ftb.mods.ftbteams.net.SendMessageMessage;
2421
import dev.ftb.mods.ftbteams.net.UpdatePropertiesRequestMessage;
2522
import net.minecraft.ChatFormatting;
@@ -34,6 +31,7 @@
3431

3532
public class MyTeamScreen extends BaseScreen implements NordColors {
3633
private final TeamPropertyCollection properties;
34+
private final PlayerPermissions permissions;
3735
private final UUID teamID;
3836
private Button settingsButton;
3937
private Button infoButton;
@@ -50,8 +48,9 @@ public class MyTeamScreen extends BaseScreen implements NordColors {
5048

5149
private static final int MIN_MEMBER_PANEL_WIDTH = 80;
5250

53-
public MyTeamScreen(TeamPropertyCollection props) {
54-
properties = props;
51+
public MyTeamScreen(TeamPropertyCollection properties, PlayerPermissions permissions) {
52+
this.properties = properties;
53+
this.permissions = permissions;
5554
teamID = getManager().selfTeam().getId();
5655
}
5756

@@ -183,14 +182,14 @@ public void refreshChat() {
183182
chatPanel.refreshWidgets();
184183
}
185184

186-
private static class InviteButton extends SimpleButton {
185+
private class InviteButton extends SimpleButton {
187186
public InviteButton(Panel panel) {
188187
super(panel, Component.translatable("ftbteams.gui.invite"), Icons.ADD, (w, mb) -> new InviteScreen().openGui());
189188
}
190189

191190
@Override
192191
public boolean isEnabled() {
193-
if (ClientTeamManagerImpl.getInstance().selfTeam().getType() != TeamType.PARTY) {
192+
if (ClientTeamManagerImpl.getInstance().selfTeam().getType() != TeamType.PARTY || !permissions.canInvitePlayer()) {
194193
return false;
195194
}
196195
KnownClientPlayer knownPlayer = ClientTeamManagerImpl.getInstance().self();
@@ -203,15 +202,14 @@ public boolean shouldDraw() {
203202
}
204203
}
205204

206-
207-
private static class AllyButton extends SimpleButton {
205+
private class AllyButton extends SimpleButton {
208206
public AllyButton(Panel panel) {
209207
super(panel, Component.translatable("ftbteams.gui.manage_allies"), Icons.FRIENDS, (w, mb) -> new AllyScreen().openGui());
210208
}
211209

212210
@Override
213211
public boolean isEnabled() {
214-
if (ClientTeamManagerImpl.getInstance().selfTeam().getType() != TeamType.PARTY) {
212+
if (ClientTeamManagerImpl.getInstance().selfTeam().getType() != TeamType.PARTY || !permissions.canAddAlly()) {
215213
return false;
216214
}
217215
KnownClientPlayer knownPlayer = ClientTeamManagerImpl.getInstance().self();
@@ -311,7 +309,7 @@ public void addWidgets() {
311309
}
312310

313311
if (manager.selfTeam().isPlayerTeam()) {
314-
add(new CreatePartyButton(this));
312+
add(new CreatePartyButton(this, permissions.canCreateParty()));
315313
}
316314
}
317315

common/src/main/java/dev/ftb/mods/ftbteams/data/FTBTUtils.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,18 @@
11
package dev.ftb.mods.ftbteams.data;
22

33
import com.mojang.authlib.GameProfile;
4+
import com.mojang.brigadier.tree.CommandNode;
45
import com.mojang.util.UUIDTypeAdapter;
56
import dev.ftb.mods.ftblibrary.icon.Color4I;
67
import dev.ftb.mods.ftblibrary.math.MathUtils;
78
import net.minecraft.Util;
9+
import net.minecraft.commands.CommandSourceStack;
810
import net.minecraft.server.MinecraftServer;
911
import net.minecraft.server.level.ServerPlayer;
1012
import org.jetbrains.annotations.Nullable;
1113

14+
import java.util.Arrays;
15+
import java.util.List;
1216
import java.util.UUID;
1317

1418
public class FTBTUtils {
@@ -57,4 +61,10 @@ public static GameProfile deserializeProfile(String string) {
5761
public static Color4I randomColor() {
5862
return Color4I.hsb(MathUtils.RAND.nextFloat(), 0.65F, 1F);
5963
}
64+
65+
public static boolean canPlayerUseCommand(ServerPlayer player, String command) {
66+
List<String> parts = Arrays.asList(command.split("\\."));
67+
CommandNode<CommandSourceStack> node = player.getServer().getCommands().getDispatcher().findNode(parts);
68+
return node != null && node.canUse(player.createCommandSourceStack());
69+
}
6070
}

common/src/main/java/dev/ftb/mods/ftbteams/data/FTBTeamsCommands.java

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -243,9 +243,8 @@ public void register(CommandDispatcher<CommandSourceStack> dispatcher) {
243243
.executes(ctx -> serverId(ctx.getSource()))
244244
)
245245
.then(teamArg()
246-
.executes(ctx -> info(ctx.getSource(), teamArg(ctx))
247-
)
248-
.executes(ctx -> info(ctx.getSource(), getTeam(ctx))))
246+
.executes(ctx -> info(ctx.getSource(), teamArg(ctx)))
247+
.executes(ctx -> info(ctx.getSource(), getTeam(ctx))))
249248
)
250249
.then(Commands.literal("list")
251250
.executes(ctx -> list(ctx.getSource(), null))

common/src/main/java/dev/ftb/mods/ftbteams/data/PartyTeam.java

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -87,7 +87,11 @@ public int join(ServerPlayer player) throws CommandSyntaxException {
8787
return Command.SINGLE_SUCCESS;
8888
}
8989

90-
public int invite(ServerPlayer inviter, Collection<GameProfile> profiles) {
90+
public int invite(ServerPlayer inviter, Collection<GameProfile> profiles) throws CommandSyntaxException {
91+
if (!FTBTUtils.canPlayerUseCommand(inviter, "ftbteams.party.invite")) {
92+
throw TeamArgument.NO_PERMISSION.create();
93+
}
94+
9195
for (GameProfile profile : profiles) {
9296
FTBTeamsAPI.api().getManager().getTeamForPlayerID(profile.getId()).ifPresent(team -> {
9397
if (!(team instanceof PartyTeam)) {
@@ -106,7 +110,7 @@ public int invite(ServerPlayer inviter, Collection<GameProfile> profiles) {
106110
Component acceptButton = makeInviteButton("ftbteams.accept", ChatFormatting.GREEN,
107111
"/ftbteams party join " + getShortName());
108112
Component declineButton = makeInviteButton("ftbteams.decline", ChatFormatting.RED,
109-
"/ftbteams party decline_invite " + getShortName());
113+
"/ftbteams party decline " + getShortName());
110114
invitee.displayClientMessage(Component.literal("[")
111115
.append(acceptButton).append("] [")
112116
.append(declineButton).append("]"),
@@ -287,6 +291,10 @@ public int leave(UUID id) throws CommandSyntaxException {
287291
}
288292

289293
public int addAlly(CommandSourceStack source, Collection<GameProfile> players) throws CommandSyntaxException {
294+
if (source.getPlayer() != null && !FTBTUtils.canPlayerUseCommand(source.getPlayer(), "ftbteams.party.allies.add")) {
295+
throw TeamArgument.NO_PERMISSION.create();
296+
}
297+
290298
UUID from = source.getEntity() == null ? Util.NIL_UUID : source.getEntity().getUUID();
291299

292300
List<GameProfile> addedPlayers = new ArrayList<>();
Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
package dev.ftb.mods.ftbteams.data;
2+
3+
import net.minecraft.network.FriendlyByteBuf;
4+
import net.minecraft.server.level.ServerPlayer;
5+
6+
public class PlayerPermissions {
7+
private final boolean createParty;
8+
private final boolean invitePlayer;
9+
private final boolean addAlly;
10+
11+
private PlayerPermissions(boolean createParty, boolean invitePlayer, boolean addAlly) {
12+
this.createParty = createParty;
13+
this.invitePlayer = invitePlayer;
14+
this.addAlly = addAlly;
15+
}
16+
17+
public PlayerPermissions(ServerPlayer player) {
18+
this(
19+
FTBTUtils.canPlayerUseCommand(player, "ftbteams.party.create"),
20+
FTBTUtils.canPlayerUseCommand(player, "ftbteams.party.invite"),
21+
FTBTUtils.canPlayerUseCommand(player, "ftbteams.party.allies.add")
22+
);
23+
}
24+
25+
public static PlayerPermissions fromNetwork(FriendlyByteBuf buf) {
26+
byte flags = buf.readByte();
27+
return new PlayerPermissions(
28+
(flags & 0x1) != 0,
29+
(flags & 0x2) != 0,
30+
(flags & 0x4) != 0
31+
);
32+
}
33+
34+
public void toNetwork(FriendlyByteBuf buf) {
35+
byte flags = 0;
36+
if (createParty) flags |= 0x1;
37+
if (invitePlayer) flags |= 0x2;
38+
if (addAlly) flags |= 0x4;
39+
buf.writeByte(flags);
40+
}
41+
42+
public boolean canCreateParty() {
43+
return createParty;
44+
}
45+
46+
public boolean canInvitePlayer() {
47+
return invitePlayer;
48+
}
49+
50+
public boolean canAddAlly() {
51+
return addAlly;
52+
}
53+
}

common/src/main/java/dev/ftb/mods/ftbteams/data/TeamArgument.java

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525
import net.minecraft.server.level.ServerPlayer;
2626

2727
import java.util.LinkedHashSet;
28+
import java.util.Optional;
2829
import java.util.concurrent.CompletableFuture;
2930

3031
/**
@@ -43,6 +44,7 @@ public class TeamArgument implements ArgumentType<TeamArgumentProvider> {
4344
public static final SimpleCommandExceptionType CANT_KICK_OWNER = new SimpleCommandExceptionType(Component.translatable("ftbteams.cant_kick_owner"));
4445
public static final SimpleCommandExceptionType API_OVERRIDE = new SimpleCommandExceptionType(Component.translatable("ftbteams.api_override"));
4546
public static final SimpleCommandExceptionType NAME_TOO_SHORT = new SimpleCommandExceptionType(Component.translatable("ftbteams.name_too_short"));
47+
public static final SimpleCommandExceptionType NO_PERMISSION = new SimpleCommandExceptionType(Component.translatable("ftbteams.server_permissions_prevent"));
4648

4749
public static TeamArgument create() {
4850
return new TeamArgument();
@@ -83,13 +85,16 @@ private CommandSyntaxException error() {
8385

8486
@Override
8587
public Team getTeam(CommandSourceStack source) throws CommandSyntaxException {
86-
return FTBTeamsAPI.api().getManager().getTeamByName(id)
87-
.orElse(source.getServer().getProfileCache().get(id)
88+
Optional<Team> t = FTBTeamsAPI.api().getManager().getTeamByName(id);
89+
if (t.isPresent()) {
90+
return t.get();
91+
}
92+
93+
return source.getServer().getProfileCache().get(id)
8894
.map(GameProfile::getId)
8995
.map(FTBTeamsAPI.api().getManager()::getTeamForPlayerID)
9096
.orElseThrow()
91-
.orElseThrow(this::error)
92-
);
97+
.orElseThrow(this::error);
9398
}
9499
}
95100

common/src/main/java/dev/ftb/mods/ftbteams/data/TeamManagerImpl.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -378,6 +378,10 @@ public Pair<Integer, PartyTeam> createParty(ServerPlayer player, String name, @N
378378
throw TeamArgument.API_OVERRIDE.create();
379379
}
380380

381+
if (!FTBTUtils.canPlayerUseCommand(player, "ftbteams.party.create")) {
382+
throw TeamArgument.NO_PERMISSION.create();
383+
}
384+
381385
UUID id = player.getUUID();
382386
Team oldTeam = getTeamForPlayer(player).orElseThrow(() -> TeamArgument.TEAM_NOT_FOUND.create(player.getUUID()));
383387

0 commit comments

Comments
 (0)