fix chat (/say and /me) i guess

This commit is contained in:
ChomeNS
2023-04-24 14:16:14 +07:00
parent 6e91fe82d4
commit a49b078a6f
5 changed files with 71 additions and 46 deletions

View File

@@ -9,7 +9,7 @@ public class ConsoleCommandContext extends CommandContext {
private final Bot bot;
public ConsoleCommandContext (Bot bot, String prefix) {
super(bot, prefix, bot.players().getEntry(bot.username()) /* real */, null, null);
super(bot, prefix, bot.players().getBotEntry() /* real */, null, null);
this.bot = bot;
}
@@ -21,6 +21,6 @@ public class ConsoleCommandContext extends CommandContext {
@Override
public Component displayName () {
return Component.text(bot.username()).color(NamedTextColor.YELLOW);
return sender().displayName().color(NamedTextColor.YELLOW);
}
}

View File

@@ -26,6 +26,6 @@ public class PlayerCommandContext extends CommandContext {
@Override
public Component displayName () {
return Component.text(playerName);
return sender().displayName();
}
}

View File

@@ -36,7 +36,7 @@ public class TestCommand implements Command {
public Component execute(CommandContext context, String[] args, String[] fullArgs) {
final Component component = Component.translatable(
"Hello, World! Username: %s, Sender UUID: %s, Prefix: %s, Args: %s",
context.displayName(),
context.sender().profile().getName(),
Component.text(context.sender().profile().getIdAsString()),
Component.text(context.prefix()),
Component.text(String.join(", ", args))

View File

@@ -96,43 +96,69 @@ public class ChatPlugin extends SessionAdapter {
if (entry == null) return;
final PlayerMessage playerMessage = new PlayerMessage(entry, packet.getName(), Component.text(packet.getContent()));
final PlayerMessage playerMessage = new PlayerMessage(
entry,
packet.getName(),
Component.text(packet.getContent())
);
for (ChatListener listener : listeners) {
listener.playerMessageReceived(playerMessage);
final Component component = Component.translatable(
"chat.type.text",
entry.displayName(),
Component.text(packet.getContent())
);
listener.systemMessageReceived(
ComponentUtilities.stringify(component),
component
);
if (packet.getChatType() == 4) { // type 4 is /say
final Component component = Component.translatable(
"chat.type.announcement",
playerMessage.displayName(),
playerMessage.contents()
);
listener.systemMessageReceived(
ComponentUtilities.stringify(component),
component
);
} else {
final Component unsignedContent = packet.getUnsignedContent();
if (unsignedContent == null) return;
listener.systemMessageReceived(
ComponentUtilities.stringify(unsignedContent),
unsignedContent
);
}
}
}
public void packetReceived (ClientboundDisguisedChatPacket packet) {
// totallynotskidded™ from chipmunkbot
PlayerMessage parsedFromMessage = null;
final Component component = packet.getMessage();
// totallynotskidded™ from chipmunkbot and modified a bit i guess
// PlayerMessage parsedFromMessage = null;
for (ChatParser parser : chatParsers) {
parsedFromMessage = parser.parse(component);
if (parsedFromMessage != null) break;
}
// i think im missing other types
if (packet.getChatType() == 1) { // type 1 is /me
final Component name = packet.getName();
final Component content = packet.getMessage();
if (parsedFromMessage == null) return;
for (ChatParser parser : chatParsers) {
final Component component = Component.translatable(
"chat.type.emote",
name,
content
);
final PlayerMessage playerMessage = new PlayerMessage(parsedFromMessage.sender(), packet.getName(), parsedFromMessage.contents());
final PlayerMessage parsed = parser.parse(component);
for (ChatListener listener : listeners) {
listener.playerMessageReceived(playerMessage);
listener.systemMessageReceived(
ComponentUtilities.stringify(component),
component
);
if (parsed == null) continue;
final PlayerMessage playerMessage = new PlayerMessage(parsed.sender(), packet.getName(), parsed.contents());
for (ChatListener listener : listeners) {
listener.playerMessageReceived(playerMessage);
listener.systemMessageReceived(
ComponentUtilities.stringify(component),
component
);
}
}
}
}