Skip to content

Commit

Permalink
make party name a component
Browse files Browse the repository at this point in the history
  • Loading branch information
jpenilla committed Sep 30, 2023
1 parent dd9c609 commit fbe2013
Show file tree
Hide file tree
Showing 14 changed files with 42 additions and 29 deletions.
3 changes: 2 additions & 1 deletion api/src/main/java/net/draycia/carbon/api/users/Party.java
Original file line number Diff line number Diff line change
Expand Up @@ -21,12 +21,13 @@

import java.util.Set;
import java.util.UUID;
import net.kyori.adventure.text.Component;
import org.checkerframework.checker.nullness.qual.NonNull;
import org.checkerframework.framework.qual.DefaultQualifier;

@DefaultQualifier(NonNull.class)
public interface Party {
String name();
Component name();

UUID id();

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@

import java.util.UUID;
import java.util.concurrent.CompletableFuture;
import net.kyori.adventure.text.Component;
import org.checkerframework.checker.nullness.qual.NonNull;
import org.checkerframework.checker.nullness.qual.Nullable;
import org.checkerframework.framework.qual.DefaultQualifier;
Expand All @@ -46,7 +47,7 @@ public interface UserManager<C extends CarbonPlayer> {
*/
CompletableFuture<C> user(UUID uuid);

Party createParty(String name);
Party createParty(Component name);

CompletableFuture<@Nullable Party> party(UUID id);

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -152,7 +152,7 @@ public List<String> commandAliases() {
sender.displayName(),
sender.username(),
message,
"null"
Component.text("null")
);
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,6 @@
*/
package net.draycia.carbon.common.channels;

import com.google.inject.Inject;
import java.util.ArrayList;
import java.util.List;
import java.util.Locale;
Expand All @@ -30,13 +29,11 @@
import net.draycia.carbon.api.users.Party;
import net.draycia.carbon.common.channels.messages.ConfigChannelMessageSource;
import net.draycia.carbon.common.messages.SourcedAudience;
import net.draycia.carbon.common.users.UserManagerInternal;
import net.draycia.carbon.common.users.WrappedCarbonPlayer;
import net.kyori.adventure.audience.Audience;
import net.kyori.adventure.key.Key;
import net.kyori.adventure.text.Component;
import net.kyori.adventure.text.format.NamedTextColor;
import org.checkerframework.checker.nullness.qual.MonotonicNonNull;
import org.checkerframework.checker.nullness.qual.NonNull;
import org.checkerframework.checker.nullness.qual.Nullable;
import org.checkerframework.framework.qual.DefaultQualifier;
Expand All @@ -47,8 +44,6 @@
@DefaultQualifier(NonNull.class)
public class PartyChatChannel extends ConfigChatChannel {

private transient @MonotonicNonNull @Inject UserManagerInternal<?> users;

public PartyChatChannel() {
this.key = Key.key("carbon", "partychat");
this.messageSource = new ConfigChannelMessageSource();
Expand Down Expand Up @@ -105,7 +100,7 @@ public List<Audience> recipients(final CarbonPlayer sender) {
sender.displayName(),
sender.username(),
message,
party == null ? "null" : party.name()
party == null ? Component.text("null") : party.name()
);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,7 @@ Component chatFormat(
@Placeholder("display_name") Component displayName,
@Placeholder String username,
@Placeholder Component message,
@Placeholder("party_name") String partyName
@Placeholder("party_name") Component partyName
);

}
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,7 @@
import net.draycia.carbon.common.config.ConfigManager;
import net.draycia.carbon.common.users.PartyInvites;
import net.draycia.carbon.common.users.UserManagerInternal;
import net.draycia.carbon.common.users.WrappedCarbonPlayer;
import net.kyori.adventure.audience.Audience;
import net.kyori.adventure.key.Key;
import net.kyori.adventure.text.Component;
Expand Down Expand Up @@ -123,7 +124,7 @@ private void info(final CommandContext<Commander> ctx) {
if (party == null) {
player.sendMessage(Component.text("You are not in a party.", NamedTextColor.RED));
} else {
player.sendMessage(Component.text("You are in the party '" + party.name() + "'"));
player.sendMessage(Component.text("You are in the party ").append(party.name()));
}
}

Expand All @@ -135,11 +136,14 @@ private void createParty(final CommandContext<Commander> ctx) {
return;
}
final String name = ctx.getOrDefault("name", player.username() + "'s party");
if (name.toCharArray().length > 256) {
final Component component = ((WrappedCarbonPlayer) player).parseMessageTags(name);
final Party party;
try {
party = this.userManager.createParty(component);
} catch (final IllegalArgumentException e) {
player.sendMessage(Component.text("Party name is too long.", NamedTextColor.RED));
return;
}
final Party party = this.userManager.createParty(name);
party.addMember(player.uuid());
}

Expand All @@ -152,7 +156,7 @@ private void invitePlayer(final CommandContext<Commander> ctx) {
return;
}
this.partyInvites.sendInvite(player.uuid(), recipient.uuid(), party.id());
recipient.sendMessage(Component.text("u got invited to " + party.name()));
recipient.sendMessage(Component.text("u got invited to ").append(party.name()));
}

private void acceptInvite(final CommandContext<Commander> ctx) {
Expand Down Expand Up @@ -191,7 +195,7 @@ private void acceptInvite(final CommandContext<Commander> ctx) {
}
this.partyInvites.invalidateInvite(inv.getFirst(), player.uuid());
party.addMember(player.uuid());
player.sendMessage(Component.text("u joined " + party.name()));
player.sendMessage(Component.text("u joined ").append(party.name()));
}

private void leaveParty(final CommandContext<Commander> ctx) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,7 @@
import net.draycia.carbon.common.messaging.packets.PartyChangePacket;
import net.draycia.carbon.common.users.db.DatabaseUserManager;
import net.draycia.carbon.common.util.ConcurrentUtil;
import net.kyori.adventure.text.Component;
import org.apache.logging.log4j.Logger;
import org.checkerframework.checker.nullness.qual.NonNull;
import org.checkerframework.checker.nullness.qual.Nullable;
Expand Down Expand Up @@ -103,7 +104,7 @@ private CompletableFuture<Void> save(final CarbonPlayerCommon player) {
}

@Override
public Party createParty(final String name) {
public Party createParty(final Component name) {
throw new UnsupportedOperationException();
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,8 @@
import java.util.function.BiConsumer;
import net.draycia.carbon.api.CarbonServer;
import net.draycia.carbon.api.users.Party;
import net.kyori.adventure.text.Component;
import net.kyori.adventure.text.serializer.gson.GsonComponentSerializer;
import org.apache.logging.log4j.Logger;
import org.checkerframework.checker.nullness.qual.MonotonicNonNull;
import org.checkerframework.checker.nullness.qual.NonNull;
Expand All @@ -38,33 +40,35 @@
@DefaultQualifier(NonNull.class)
public final class PartyImpl implements Party {

private final String name;
private final Component name;
private final UUID id;
private final Set<UUID> members;
private transient final String serializedName;
private transient final Map<UUID, ChangeType> changes;
private transient @MonotonicNonNull @Inject UserManagerInternal<?> userManager;
private transient @MonotonicNonNull @Inject CarbonServer server;
private transient @MonotonicNonNull @Inject Logger logger;
private transient volatile boolean disbanded = false;

private PartyImpl(
final String name,
final Component name,
final UUID id
) {
if (name.toCharArray().length > 256) {
throw new IllegalArgumentException("Party name is too long: '%s', %s > 256".formatted(name, name.toCharArray().length));
this.serializedName = GsonComponentSerializer.gson().serialize(name);
if (this.serializedName.toCharArray().length > 8192) {
throw new IllegalArgumentException("Serialized party name is too long: '%s', %s > 8192".formatted(name, this.serializedName.toCharArray().length));
}
this.name = name;
this.id = id;
this.members = ConcurrentHashMap.newKeySet();
this.changes = new ConcurrentHashMap<>();
}

public static PartyImpl create(final String name) {
public static PartyImpl create(final Component name) {
return create(name, UUID.randomUUID());
}

public static PartyImpl create(final String name, final UUID id) {
public static PartyImpl create(final Component name, final UUID id) {
return new PartyImpl(name, id);
}

Expand Down Expand Up @@ -146,10 +150,14 @@ public Map<UUID, ChangeType> pollChanges() {
}

@Override
public String name() {
public Component name() {
return this.name;
}

public String serializedName() {
return this.serializedName;
}

@Override
public UUID id() {
return this.id;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@
import java.util.concurrent.CompletableFuture;
import net.draycia.carbon.api.users.Party;
import net.draycia.carbon.common.messaging.packets.PartyChangePacket;
import net.kyori.adventure.text.Component;
import org.checkerframework.checker.nullness.qual.NonNull;
import org.checkerframework.checker.nullness.qual.Nullable;
import org.checkerframework.framework.qual.DefaultQualifier;
Expand Down Expand Up @@ -61,7 +62,7 @@ public CompletableFuture<WrappedCarbonPlayer> user(final UUID uuid) {
}

@Override
public Party createParty(final String name) {
public Party createParty(final Component name) {
final PartyImpl party = PartyImpl.create(name);
this.injector.injectMembers(party);
return party;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -199,7 +199,7 @@ protected void saveSync(final PartyImpl party, final Map<UUID, PartyImpl.ChangeT
if (existing == null) {
handle.createUpdate(this.locator.query("insert-party"))
.bind("partyid", party.id())
.bind("name", party.name())
.bind("name", party.serializedName())
.execute();
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@
import java.sql.SQLException;
import java.util.UUID;
import net.draycia.carbon.common.users.PartyImpl;
import net.kyori.adventure.text.Component;
import org.checkerframework.checker.nullness.qual.NonNull;
import org.checkerframework.framework.qual.DefaultQualifier;
import org.jdbi.v3.core.mapper.ColumnMapper;
Expand All @@ -34,9 +35,10 @@ public final class PartyRowMapper implements RowMapper<PartyImpl> {

@Override
public PartyImpl map(final ResultSet rs, final StatementContext ctx) throws SQLException {
final ColumnMapper<Component> component = ctx.findColumnMapperFor(Component.class).orElseThrow();
final ColumnMapper<UUID> uuid = ctx.findColumnMapperFor(UUID.class).orElseThrow();
return PartyImpl.create(
rs.getString("name"),
component.map(rs, "name", ctx),
uuid.map(rs, "partyid", ctx)
);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ CREATE TABLE carbon_party_members (

CREATE TABLE carbon_parties (
`partyid` UUID NOT NULL PRIMARY KEY,
`name` VARCHAR(256)
`name` VARCHAR(8192)
);

ALTER TABLE carbon_users ADD COLUMN party UUID;
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ CREATE TABLE carbon_party_members (

CREATE TABLE carbon_parties (
`partyid` BINARY(16) NOT NULL PRIMARY KEY,
`name` VARCHAR(256)
`name` VARCHAR(8192)
);

ALTER TABLE carbon_users ADD COLUMN party BINARY(16);
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ CREATE TABLE carbon_party_members (

CREATE TABLE carbon_parties (
partyid UUID NOT NULL PRIMARY KEY,
name VARCHAR(256)
name VARCHAR(8192)
);

ALTER TABLE carbon_users ADD COLUMN party UUID;

0 comments on commit fbe2013

Please sign in to comment.