Skip to content

Commit

Permalink
there is no easter bunny. there is no tooth fairy. and there is no mu…
Browse files Browse the repository at this point in the history
…lti loader teabridge
  • Loading branch information
maximumpower55 committed May 21, 2024
1 parent b1d0ed5 commit 53d0f66
Show file tree
Hide file tree
Showing 7 changed files with 64 additions and 184 deletions.
106 changes: 0 additions & 106 deletions src/main/java/one/devos/nautical/teabridge/PlatformUtil.java

This file was deleted.

37 changes: 27 additions & 10 deletions src/main/java/one/devos/nautical/teabridge/TeaBridge.java
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,13 @@
import java.nio.file.Path;

import com.mojang.serialization.DataResult;
import net.fabricmc.api.DedicatedServerModInitializer;
import net.fabricmc.fabric.api.command.v2.CommandRegistrationCallback;
import net.fabricmc.fabric.api.event.lifecycle.v1.ServerLifecycleEvents;
import net.fabricmc.fabric.api.message.v1.ServerMessageEvents;
import net.fabricmc.loader.api.FabricLoader;
import net.minecraft.commands.CommandBuildContext;
import net.minecraft.resources.ResourceLocation;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

Expand All @@ -25,7 +31,7 @@
import one.devos.nautical.teabridge.util.CrashHandler;
import one.devos.nautical.teabridge.util.StyledChatCompat;

public class TeaBridge {
public class TeaBridge implements DedicatedServerModInitializer {
public static final Logger LOGGER = LoggerFactory.getLogger("TeaBridge");

public static final HttpClient CLIENT = HttpClient.newBuilder().build();
Expand All @@ -35,44 +41,55 @@ public class TeaBridge {

public static Config config = Config.DEFAULT;

public static void initialize() {
public void onInitializeServer() {
ServerLifecycleEvents.SERVER_STARTING.register(this::onServerStarting);
ServerLifecycleEvents.SERVER_STARTED.register(this::onServerStart);
ServerLifecycleEvents.SERVER_STOPPED.register(this::onServerStop);

ResourceLocation phaseId = new ResourceLocation(MOD_ID, "mirror");
ServerMessageEvents.CHAT_MESSAGE.addPhaseOrdering(new ResourceLocation("switchy_proxy", "set_args"), phaseId);
ServerMessageEvents.CHAT_MESSAGE.addPhaseOrdering(phaseId, new ResourceLocation("switchy_proxy", "clear"));
ServerMessageEvents.CHAT_MESSAGE.register(phaseId, this::onChatMessage);

ServerMessageEvents.COMMAND_MESSAGE.register(this::onCommandMessage);

CommandRegistrationCallback.EVENT.register(this::registerCommands);

Config.load(CONFIG_PATH)
.ifError(e -> LOGGER.error("Failed to load config using defaults : {}", e))
.ifSuccess(loaded -> config = loaded);
Discord.start();

PlatformUtil.registerCommand(TeaBridge::registerCommands);
}

public static void onServerStarting(MinecraftServer server) {
private void onServerStarting(MinecraftServer server) {
if (TeaBridge.config.debug()) TeaBridge.LOGGER.warn("DEBUG MODE IS ENABLED, THIS WILL LOG EVERYTHING WILL CAUSE LAG SPIKES!!!!!!");
Discord.send(TeaBridge.config.game().serverStartingMessage());
}

public static void onServerStart(MinecraftServer server) {
private void onServerStart(MinecraftServer server) {
ChannelListener.INSTANCE.setServer(server);
Discord.send(TeaBridge.config.game().serverStartMessage());
}

public static void onServerStop(MinecraftServer server) {
private void onServerStop(MinecraftServer server) {
if (!CrashHandler.CRASH_VALUE.get()) Discord.send(TeaBridge.config.game().serverStopMessage());
Discord.stop();
}

public static void onChatMessage(PlayerChatMessage message, ServerPlayer sender, ChatType.Bound params) {
private void onChatMessage(PlayerChatMessage message, ServerPlayer sender, ChatType.Bound params) {
if (sender != null) {
((PlayerWebHook) sender).send(message);
} else {
Discord.send(StyledChatCompat.modify(message).getLeft());
}
}

public static void onCommandMessage(PlayerChatMessage message, CommandSourceStack source, ChatType.Bound params) {
private void onCommandMessage(PlayerChatMessage message, CommandSourceStack source, ChatType.Bound params) {
if (!TeaBridge.config.game().mirrorCommandMessages()) return;
if (!source.isPlayer()) Discord.send(message.signedContent());
}

private static void registerCommands(CommandDispatcher<CommandSourceStack> dispatcher) {
private void registerCommands(CommandDispatcher<CommandSourceStack> dispatcher, CommandBuildContext registryAccess, Commands.CommandSelection environment) {
dispatcher.register(Commands.literal("teabridge")
.requires(source -> source.hasPermission(2))
.then(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,9 +5,9 @@
import net.dv8tion.jda.api.events.message.MessageReceivedEvent;
import net.dv8tion.jda.api.hooks.ListenerAdapter;
import net.minecraft.ChatFormatting;
import net.minecraft.network.chat.Component;
import net.minecraft.network.chat.MutableComponent;
import net.minecraft.server.MinecraftServer;
import one.devos.nautical.teabridge.PlatformUtil;
import one.devos.nautical.teabridge.TeaBridge;
import one.devos.nautical.teabridge.util.FormattingUtils;
import org.jetbrains.annotations.NotNull;
Expand All @@ -32,11 +32,11 @@ public void onMessageReceived(@NotNull MessageReceivedEvent receivedEvent) {
if (server == null) return;

if (
!event.isFromGuild() ||
event.getChannel().getIdLong() != channel ||
event.getAuthor().getIdLong() == Discord.selfMember.get().getUser().getIdLong() ||
(event.isWebhookMessage() && !proxied) ||
(!event.isWebhookMessage() && proxied)
!event.isFromGuild() ||
event.getChannel().getIdLong() != channel ||
event.getAuthor().getIdLong() == Discord.selfMember.get().getUser().getIdLong() ||
(event.isWebhookMessage() && !proxied) ||
(!event.isWebhookMessage() && proxied)
) return;

final var playerList = server.getPlayerList();
Expand All @@ -46,7 +46,7 @@ public void onMessageReceived(@NotNull MessageReceivedEvent receivedEvent) {
formattedMessage = FormattingUtils.formatMessage(event.getMessage());
} catch (Exception e) {
TeaBridge.LOGGER.error("Exception when handling message : ", e);
formattedMessage = Optional.of(PlatformUtil.literal("Exception when handling message, check log for details!").withStyle(ChatFormatting.RED, ChatFormatting.BOLD));
formattedMessage = Optional.of(Component.literal("Exception when handling message, check log for details!").withStyle(ChatFormatting.RED, ChatFormatting.BOLD));
}
formattedMessage.ifPresent(mutableComponent -> playerList.broadcastSystemMessage(mutableComponent, false));
});
Expand Down

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -56,7 +56,7 @@ public static void start() {

jda = JDABuilder.createDefault(TeaBridge.config.discord().token())
.enableIntents(GatewayIntent.MESSAGE_CONTENT)
.addEventListeners(ChannelListener.INSTANCE, CommandUtils.INSTANCE)
.addEventListeners(ChannelListener.INSTANCE)
.build();

selfMember = Suppliers.memoize(() -> {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
import java.util.Collection;
import java.util.Optional;

import net.minecraft.network.chat.*;
import org.jetbrains.annotations.Nullable;

import net.dv8tion.jda.api.entities.Member;
Expand All @@ -12,70 +13,64 @@
import net.dv8tion.jda.api.entities.Role;
import net.dv8tion.jda.api.entities.User;
import net.minecraft.ChatFormatting;
import net.minecraft.network.chat.ClickEvent;
import net.minecraft.network.chat.HoverEvent;
import net.minecraft.network.chat.MutableComponent;
import net.minecraft.network.chat.Style;
import net.minecraft.network.chat.TextColor;
import one.devos.nautical.teabridge.PlatformUtil;
import one.devos.nautical.teabridge.TeaBridge;

public class FormattingUtils {
public static MutableComponent formatUser(final boolean arrows, final User user, @Nullable final Member member) {
var mention = PlatformUtil.literal("@" + (member != null ? member.getEffectiveName() : user.getEffectiveName()));
var mention = Component.literal("@" + (member != null ? member.getEffectiveName() : user.getEffectiveName()));

var hoverText = PlatformUtil.literal("@" + user.getName());
var hoverText = Component.literal("@" + user.getName());

if (member != null) {
mention.withStyle(Style.EMPTY.withColor(TextColor.fromRgb(member.getColorRaw())));
hoverText.append("\n\n").append(FormattingUtils.formatRoles(member.getRoles()));
}

var prefix = PlatformUtil.empty();
var suffix = PlatformUtil.empty();
var prefix = Component.empty();
var suffix = Component.empty();
if (arrows) {
prefix = PlatformUtil.literal("<");
suffix = PlatformUtil.literal(">");
prefix = Component.literal("<");
suffix = Component.literal(">");
}

return prefix.append(mention.withStyle(Style.EMPTY.withHoverEvent(new HoverEvent(HoverEvent.Action.SHOW_TEXT, hoverText)))).append(suffix);
}

public static MutableComponent formatRoles(final Collection<Role> roles) {
var formatted = PlatformUtil.literal("NO ROLES").withStyle(ChatFormatting.BOLD);
var formatted = Component.literal("NO ROLES").withStyle(ChatFormatting.BOLD);

if (roles.size() != 0) {
formatted = PlatformUtil.literal("ROLES").withStyle(ChatFormatting.BOLD);
if (!roles.isEmpty()) {
formatted = Component.literal("ROLES").withStyle(ChatFormatting.BOLD);
for (Role role : roles) {
formatted.append(
PlatformUtil.literal("\n■ ").withStyle(Style.EMPTY.withColor(TextColor.fromRgb(role.getColorRaw()))).append(
PlatformUtil.literal(role.getName()).withStyle(Style.EMPTY.withBold(false))));
Component.literal("\n■ ").withStyle(Style.EMPTY.withColor(TextColor.fromRgb(role.getColorRaw()))).append(
Component.literal(role.getName()).withStyle(Style.EMPTY.withBold(false))));
}
}

return formatted;
}

public static Optional<MutableComponent> formatMessage(final Message message) throws Exception {
var formatted = PlatformUtil.empty();
public static Optional<MutableComponent> formatMessage(final Message message) {
var formatted = Component.empty();

// Handle non default message types
switch (message.getType()) {
case CHANNEL_PINNED_ADD:
formatted
.append(PlatformUtil.literal("[").withStyle(ChatFormatting.GRAY, ChatFormatting.ITALIC))
.append(formatUser(false, message.getAuthor(), message.getMember()).withStyle(ChatFormatting.ITALIC))
.append(PlatformUtil.literal(" has pinned a message").withStyle(ChatFormatting.GRAY, ChatFormatting.ITALIC))
.append(PlatformUtil.literal("]").withStyle(ChatFormatting.GRAY, ChatFormatting.ITALIC));
.append(Component.literal("[").withStyle(ChatFormatting.GRAY, ChatFormatting.ITALIC))
.append(formatUser(false, message.getAuthor(), message.getMember()).withStyle(ChatFormatting.ITALIC))
.append(Component.literal(" has pinned a message").withStyle(ChatFormatting.GRAY, ChatFormatting.ITALIC))
.append(Component.literal("]").withStyle(ChatFormatting.GRAY, ChatFormatting.ITALIC));
return Optional.of(formatted);
case INLINE_REPLY:
var referencedMessage = message.getReferencedMessage();
if (referencedMessage != null) {
var formattedReferencedMessage = formatMessage(referencedMessage);
if (formattedReferencedMessage.isPresent()) formatted
.append("Reply to ")
.append(formattedReferencedMessage.get())
.append("\n");
formattedReferencedMessage.ifPresent(mutableComponent -> formatted
.append("Reply to ")
.append(mutableComponent)
.append("\n"));
}
break;
case THREAD_CREATED:
Expand All @@ -86,22 +81,22 @@ public static Optional<MutableComponent> formatMessage(final Message message) th
case DEFAULT:
break;
default:
TeaBridge.LOGGER.error("Message: " + message.getContentRaw() + " has a unknown message type: " + message.getType().toString());
TeaBridge.LOGGER.error("Message: {} has a unknown message type: {}", message.getContentRaw(), message.getType());
return Optional.empty();
}

var messageContent = PlatformUtil.formatText(message.getContentDisplay());
var messageContent = Component.literal(message.getContentDisplay());

for (Attachment attachment : message.getAttachments()) {
messageContent.append(
PlatformUtil.literal(" [" + attachment.getFileName() + "]")
.withStyle(Style.EMPTY.withClickEvent(new ClickEvent(ClickEvent.Action.OPEN_URL, attachment.getUrl())).withColor(ChatFormatting.BLUE)));
Component.literal(" [" + attachment.getFileName() + "]")
.withStyle(Style.EMPTY.withClickEvent(new ClickEvent(ClickEvent.Action.OPEN_URL, attachment.getUrl())).withColor(ChatFormatting.BLUE)));
}

for (Sticker sticker : message.getStickers()) {
messageContent.append(
PlatformUtil.literal(" [" + sticker.getName() + "]")
.withStyle(Style.EMPTY.withClickEvent(new ClickEvent(ClickEvent.Action.OPEN_URL, sticker.getIconUrl())).withColor(ChatFormatting.BLUE)));
Component.literal(" [" + sticker.getName() + "]")
.withStyle(Style.EMPTY.withClickEvent(new ClickEvent(ClickEvent.Action.OPEN_URL, sticker.getIconUrl())).withColor(ChatFormatting.BLUE)));
}

formatted.append(formatUser(true, message.getAuthor(), message.getMember()).append(" ").append(messageContent));
Expand Down
Loading

0 comments on commit 53d0f66

Please sign in to comment.