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 @@ -26,6 +26,10 @@ public class GreeterBroConfig extends PartitioningSerializer.GlobalData {
@ConfigEntry.Gui.TransitiveObject
public NameChangeConfig nameChangeConfig = new NameChangeConfig();

@ConfigEntry.Category("specialGreetings")
@ConfigEntry.Gui.TransitiveObject
public SpecialGreetingsConfig specialGreetings = new SpecialGreetingsConfig();

@ConfigEntry.Category("blacklist")
@ConfigEntry.Gui.TransitiveObject
public BlacklistConfig blacklistConfig = new BlacklistConfig();
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
package com.padbro.greeterbro.client.config;

import java.util.List;
import java.util.Objects;
import java.util.Optional;
import me.shedaniel.autoconfig.ConfigData;
import me.shedaniel.autoconfig.annotation.Config;
import me.shedaniel.autoconfig.annotation.ConfigEntry;

@Config(name = "specialGreetings")
public class SpecialGreetingsConfig implements ConfigData {
@ConfigEntry.Gui.Tooltip public List<SpecialGreeting> specialGreetings = List.of();

public static class SpecialGreeting {
@ConfigEntry.Gui.Tooltip String player;

@ConfigEntry.Gui.Tooltip
@ConfigEntry.BoundedDiscrete(max = 100)
public int greetingChance;

@ConfigEntry.Gui.Tooltip public List<String> greetings;

@ConfigEntry.Gui.Tooltip public List<String> returningGreetings;

SpecialGreeting() {
this.player = "";
this.greetingChance = 100;
this.greetings = List.of("Good to see you", "I was waiting for you");
this.returningGreetings = List.of("You are back :D", "Where have you been?");
}
}

public Optional<SpecialGreeting> getForPlayer(String player) {
return this.specialGreetings.stream()
.filter(specialGreeting -> player.equals(specialGreeting.player))
.findFirst();
}

@Override
public void validatePostLoad() {
this.specialGreetings =
this.specialGreetings.stream()
.filter(
specialGreeting -> {
if (Objects.equals(specialGreeting.player, "")) {
return false;
}
specialGreeting.greetings =
specialGreeting.greetings.stream().filter(s -> !s.trim().isEmpty()).toList();
specialGreeting.returningGreetings =
specialGreeting.returningGreetings.stream()
.filter(s -> !s.trim().isEmpty())
.toList();
return true;
})
.toList();
}
}
21 changes: 17 additions & 4 deletions src/client/java/com/padbro/greeterbro/client/mixin/ChatMixin.java
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,10 @@
import com.padbro.greeterbro.client.TickManager;
import com.padbro.greeterbro.client.TickManager.ScheduledTask;
import com.padbro.greeterbro.client.config.GreeterBroConfig;
import com.padbro.greeterbro.client.config.SpecialGreetingsConfig.SpecialGreeting;
import java.util.List;
import java.util.Objects;
import java.util.Optional;
import java.util.Random;
import java.util.regex.Pattern;
import net.minecraft.client.MinecraftClient;
Expand Down Expand Up @@ -64,20 +66,31 @@ public void onMessage(Text message, boolean overlay, CallbackInfo ci) {
if (config.blacklistConfig.players.contains(player)) {
return;
}

if (!config.generalConfig.enableOwnJoin && player.equals(currentPlayerName)) {
return;
}

Optional<SpecialGreeting> specialGreeting = config.specialGreetings.getForPlayer(player);
if (specialGreeting.isPresent()) {
greetingList = specialGreeting.get().greetings;
chance = specialGreeting.get().greetingChance;
}

JoinCache joinCache = GreeterBroClient.getJoinCache();

if (config.returningPlayerConfig.enable) {
if (joinCache.hasRecentlyJoined(player)) {
return;
}
if (joinCache.hasJoined(player)
&& !player.equals(MinecraftClient.getInstance().player.getName().getString())) {
greetingList = config.returningPlayerConfig.greetings;
chance = config.returningPlayerConfig.greetingChance;
if (joinCache.hasJoined(player) && !player.equals(currentPlayerName)) {
if (specialGreeting.isPresent()) {
greetingList = specialGreeting.get().returningGreetings;
chance = specialGreeting.get().greetingChance;
} else {
greetingList = config.returningPlayerConfig.greetings;
chance = config.returningPlayerConfig.greetingChance;
}
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -47,11 +47,15 @@ public void onReady(GameJoinS2CPacket packet, CallbackInfo ci) {
new TickManager.ScheduledTask(
config.generalConfig.delayRange.getRandomDelay(),
() -> {
ClientPlayerEntity currentPlayer = MinecraftClient.getInstance().player;
if (currentPlayer == null) {
return;
}
Random rand = new Random();
String greetingTemplate = greetingList.get(rand.nextInt(greetingList.size()));
String greeting = greetingTemplate.replaceAll("\\s*%player%", "");
if (!greeting.isEmpty()) {
player.networkHandler.sendChatMessage(greeting);
currentPlayer.networkHandler.sendChatMessage(greeting);
}
},
player.getName().getString()));
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,16 +15,22 @@
public class OnPlayerListMixin {
@Inject(method = "onPlayerList", at = @At("TAIL"))
private void onPlayerList(PlayerListS2CPacket packet, CallbackInfo ci) {
if (!GreeterBroClient.isJoining) {
return;
}

GreeterBroConfig config = GreeterBroClient.getConfig();
if (GreeterBroClient.isJoining && config.returningPlayerConfig.cacheOnJoin) {
List<PlayerListS2CPacket.Entry> players = packet.getPlayerAdditionEntries();
JoinCache joinCache = GreeterBroClient.getJoinCache();
for (PlayerListS2CPacket.Entry entry : players) {
if (entry.profile() != null) {
joinCache.add(entry.profile().name());
}
if (!config.returningPlayerConfig.cacheOnJoin) {
return;
}

List<PlayerListS2CPacket.Entry> players = packet.getPlayerAdditionEntries();
JoinCache joinCache = GreeterBroClient.getJoinCache();
for (PlayerListS2CPacket.Entry entry : players) {
if (entry.profile() != null) {
joinCache.add(entry.profile().name());
}
GreeterBroClient.isJoining = false;
}
GreeterBroClient.isJoining = false;
}
}
14 changes: 14 additions & 0 deletions src/client/resources/assets/greeterbro/lang/en_us.json
Original file line number Diff line number Diff line change
Expand Up @@ -60,6 +60,20 @@
"text.autoconfig.GreeterBro.option.returningPlayerConfig.cacheClearType.never": "Never",
"text.autoconfig.GreeterBro.option.returningPlayerConfig.greetings": "Greetings",
"text.autoconfig.GreeterBro.option.returningPlayerConfig.greetings.@Tooltip": "List of greetings to choose from.",

"text.autoconfig.GreeterBro.category.specialGreetings": "Special Greetings",
"text.autoconfig.GreeterBro.option.specialGreetings.specialGreetings": "List of special greetings",
"text.autoconfig.GreeterBro.option.specialGreetings.specialGreetings.@Tooltip": "The list of all special greetings for specific players.",
"text.autoconfig.GreeterBro.option.SpecialGreeting": "Special greeting",
"text.autoconfig.GreeterBro.option.SpecialGreeting.player": "Player name",
"text.autoconfig.GreeterBro.option.SpecialGreeting.player.@Tooltip": "The player this special greeting applies to.",
"text.autoconfig.GreeterBro.option.SpecialGreeting.greetingChance": "Chance to greet a player",
"text.autoconfig.GreeterBro.option.SpecialGreeting.greetingChance.@Tooltip": "100 = greet always",
"text.autoconfig.GreeterBro.option.SpecialGreeting.greetings": "Greetings",
"text.autoconfig.GreeterBro.option.SpecialGreeting.greetings.@Tooltip": "List of greetings to choose from.",
"text.autoconfig.GreeterBro.option.SpecialGreeting.returningGreetings": "Returning greetings",
"text.autoconfig.GreeterBro.option.SpecialGreeting.returningGreetings.@Tooltip": "List of greetings to use when the player returns.\nRequires the \"Returning player\" config to be enabled.",

"text.autoconfig.GreeterBro.category.blacklist": "Blacklist",
"text.autoconfig.GreeterBro.option.blacklistConfig.players": "Players",
"text.autoconfig.GreeterBro.title": "GreeterBro",
Expand Down