diff --git a/.github/workflows/maven.yml b/.github/workflows/maven.yml index 01b1f93f0..5b1fc8633 100644 --- a/.github/workflows/maven.yml +++ b/.github/workflows/maven.yml @@ -27,6 +27,8 @@ jobs: java-version: "${{ matrix.java-version }}" distribution: 'adopt' cache: 'maven' + - name: Install VentureChat + run: mvn install:install-file -Dfile=libs/VentureChat-3.7.1.jar -DgroupId=mineverse.Aust1n46.chat -DartifactId=VentureChat -Dversion=3.7.1 -Dpackaging=jar -f pom.xml - name: Build with Maven run: ./mvnw -B -U package --file pom.xml - name: Upload Build Artifact diff --git a/.github/workflows/publish_curseforge.yml b/.github/workflows/publish_curseforge.yml deleted file mode 100644 index 67b6e0f5c..000000000 --- a/.github/workflows/publish_curseforge.yml +++ /dev/null @@ -1,31 +0,0 @@ -name: Publish to CurseForge -on: - release: - types: [created] - -jobs: - publish: - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v3 - - name: Set up JDK 16 - uses: actions/setup-java@v3 - with: - java-version: 16 - cache: 'maven' - distribution: 'adopt' - - name: Build with Maven - run: ./mvnw -B package --file pom.xml - - name: Upload artifact - uses: itsmeow/curseforge-upload@v3 - with: - token: ${{ secrets.CURSEFORGE_TOKEN }} - project_id: 380814 - game_endpoint: minecraft - file_path: target/SimpleClans.jar - changelog: ${{ github.event.release.body }} - changelog_type: markdown - display_name: ${{ github.event.release.tag_name }} - game_versions: 8849,8503,7915,7667,7330,7105,6588,630,591,585,531 - release_type: release - relations: vault:optionalDependency,worldguard:optionalDependency,grief-prevention:optionalDependency diff --git a/.github/workflows/publish_modrinth.yml b/.github/workflows/publish_modrinth.yml deleted file mode 100644 index ff10fb61e..000000000 --- a/.github/workflows/publish_modrinth.yml +++ /dev/null @@ -1,31 +0,0 @@ -name: Publish to Modrinth -on: - release: - types: [created] - -jobs: - publish: - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v3 - - name: Set up JDK 16 - uses: actions/setup-java@v3 - with: - java-version: 16 - cache: 'maven' - distribution: 'adopt' - - name: Build with Maven - run: ./mvnw -B package --file pom.xml - - name: Upload artifact - uses: RubixDev/modrinth-upload@v1.0.0 - with: - token: ${{ secrets.MODRINTH_TOKEN }} - project_id: quLDfyDl - file_path: target/SimpleClans.jar - changelog: ${{ github.event.release.body }} - name: ${{ github.event.release.tag_name }} - version: ${{ github.event.release.tag_name }} - game_versions: 1.19,1.18,1.17,1.16,1.15,1.14,1.13,1.12,1.11,1.10,1.9,1.8 - release_type: release - loaders: spigot - featured: true diff --git a/.github/workflows/publish_reposilite.yml b/.github/workflows/publish_reposilite.yml deleted file mode 100644 index 09033cb6a..000000000 --- a/.github/workflows/publish_reposilite.yml +++ /dev/null @@ -1,29 +0,0 @@ -name: Publish to Reposilite -on: - push: - branches: - - master - workflow_dispatch: - -jobs: - publish: - runs-on: ubuntu-latest - - steps: - - uses: actions/checkout@v3 - - name: Set up JDK 16 - uses: actions/setup-java@v3 - with: - java-version: 16 - server-id: reposilite # Value of the distributionManagement/repository/id field of the pom.xml - server-username: MAVEN_USERNAME - server-password: MAVEN_PASSWORD - cache: 'maven' - distribution: 'adopt' - - name: Build with Maven - run: ./mvnw -B package --file pom.xml - - name: Publish to Reposilite - run: ./mvnw -B deploy - env: - MAVEN_USERNAME: simpleclans - MAVEN_PASSWORD: ${{ secrets.REPOSILITE_TOKEN }} diff --git a/.github/workflows/release_please.yml b/.github/workflows/release_please.yml deleted file mode 100644 index 50cf2d9bf..000000000 --- a/.github/workflows/release_please.yml +++ /dev/null @@ -1,15 +0,0 @@ -on: - push: - branches: - - master -name: release-please -jobs: - release-please: - runs-on: ubuntu-latest - steps: - - uses: google-github-actions/release-please-action@v3 - with: - release-type: maven - package-name: SimpleClans - token: ${{ secrets.PAT_TOKEN }} - fork: false diff --git a/.gitignore b/.gitignore index 68ae5eb9c..dfa00f797 100644 --- a/.gitignore +++ b/.gitignore @@ -1,9 +1,9 @@ /target/ /.idea/ /bin/ +${env.TEST_SERVER}/ /.classpath /.project -*.jar .settings .factorypath SimpleClans.iml diff --git a/.run/SimpleClans [install-VentureChat].run.xml b/.run/SimpleClans [install-VentureChat].run.xml new file mode 100644 index 000000000..9194de329 --- /dev/null +++ b/.run/SimpleClans [install-VentureChat].run.xml @@ -0,0 +1,37 @@ + + + + + + + + \ No newline at end of file diff --git a/libs/VentureChat-3.7.1.jar b/libs/VentureChat-3.7.1.jar new file mode 100644 index 000000000..4e89ab5b0 Binary files /dev/null and b/libs/VentureChat-3.7.1.jar differ diff --git a/pom.xml b/pom.xml index 41e72ffa6..2cc891627 100644 --- a/pom.xml +++ b/pom.xml @@ -263,7 +263,11 @@ gson 2.10.1 - + + mineverse.Aust1n46.chat + VentureChat + 3.7.1 + org.junit.jupiter diff --git a/src/main/java/net/sacredlabyrinth/phaed/simpleclans/SimpleClans.java b/src/main/java/net/sacredlabyrinth/phaed/simpleclans/SimpleClans.java index e3b188055..cae56e6b8 100644 --- a/src/main/java/net/sacredlabyrinth/phaed/simpleclans/SimpleClans.java +++ b/src/main/java/net/sacredlabyrinth/phaed/simpleclans/SimpleClans.java @@ -126,6 +126,7 @@ public void onEnable() { startTasks(); startMetrics(); hookIntoPAPI(); + hookIntoVentureChat(); new UpdateChecker(this).check(); } @@ -154,6 +155,13 @@ private void hookIntoPAPI() { } } + private void hookIntoVentureChat() { + if (getPluginManager().getPlugin("VentureChat") != null) { + getLogger().info("VentureChat found. Registering hook..."); + getPluginManager().registerEvents(new VentureChatListener(this), this); + } + } + private void startMetrics() { Metrics metrics = new Metrics(this, 7131); SettingsManager sm = getSettingsManager(); diff --git a/src/main/java/net/sacredlabyrinth/phaed/simpleclans/commands/clan/AllyChatCommand.java b/src/main/java/net/sacredlabyrinth/phaed/simpleclans/commands/clan/AllyChatCommand.java index 3ad8bfee4..896cf6af0 100644 --- a/src/main/java/net/sacredlabyrinth/phaed/simpleclans/commands/clan/AllyChatCommand.java +++ b/src/main/java/net/sacredlabyrinth/phaed/simpleclans/commands/clan/AllyChatCommand.java @@ -1,11 +1,18 @@ package net.sacredlabyrinth.phaed.simpleclans.commands.clan; import co.aikar.commands.BaseCommand; -import co.aikar.commands.annotation.*; +import co.aikar.commands.annotation.CommandAlias; +import co.aikar.commands.annotation.CommandPermission; +import co.aikar.commands.annotation.Conditions; +import co.aikar.commands.annotation.Default; +import co.aikar.commands.annotation.Dependency; +import co.aikar.commands.annotation.Description; +import co.aikar.commands.annotation.HelpSearchTags; +import co.aikar.commands.annotation.Name; +import co.aikar.commands.annotation.Optional; import net.sacredlabyrinth.phaed.simpleclans.ChatBlock; import net.sacredlabyrinth.phaed.simpleclans.ClanPlayer; import net.sacredlabyrinth.phaed.simpleclans.managers.ChatManager; -import net.sacredlabyrinth.phaed.simpleclans.managers.SettingsManager; import net.sacredlabyrinth.phaed.simpleclans.managers.StorageManager; import static net.sacredlabyrinth.phaed.simpleclans.ClanPlayer.Channel.ALLY; @@ -22,13 +29,11 @@ public class AllyChatCommand extends BaseCommand { @Dependency private ChatManager chatManager; @Dependency - private SettingsManager settingsManager; - @Dependency private StorageManager storageManager; @Default @HelpSearchTags("chat") - public void sendMessage(ClanPlayer cp, @Name("message") String message) { + public void sendMessage(ClanPlayer cp, @Optional @Name("message") String message) { if (message == null || message.isBlank()) { if (cp.getChannel() == ALLY) { cp.setChannel(NONE); @@ -44,37 +49,37 @@ public void sendMessage(ClanPlayer cp, @Name("message") String message) { } } - @Subcommand("%join") - public void join(ClanPlayer clanPlayer) { - if (clanPlayer.getChannel() == ALLY) { - ChatBlock.sendMessage(clanPlayer, lang("already.joined.ally.chat")); - return; - } - - clanPlayer.setChannel(ALLY); - storageManager.updateClanPlayer(clanPlayer); - ChatBlock.sendMessage(clanPlayer, lang("joined.ally.chat")); - } - - @Subcommand("%leave") - public void leave(ClanPlayer clanPlayer) { - if (clanPlayer.getChannel() == ALLY) { - clanPlayer.setChannel(NONE); - storageManager.updateClanPlayer(clanPlayer); - ChatBlock.sendMessage(clanPlayer, lang("left.ally.chat", clanPlayer)); - } else { - ChatBlock.sendMessage(clanPlayer, lang("chat.didnt.join", clanPlayer)); - } - } - - @Subcommand("%mute") - public void mute(ClanPlayer clanPlayer) { - if (!clanPlayer.isMutedAlly()) { - clanPlayer.mute(ALLY, true); - ChatBlock.sendMessage(clanPlayer, lang("muted.ally.chat", clanPlayer)); - } else { - clanPlayer.mute(ALLY, false); - ChatBlock.sendMessage(clanPlayer, lang("unmuted.ally.chat", clanPlayer)); - } - } +// @Subcommand("%join") +// public void join(ClanPlayer clanPlayer) { +// if (clanPlayer.getChannel() == ALLY) { +// ChatBlock.sendMessage(clanPlayer, lang("already.joined.ally.chat")); +// return; +// } +// +// clanPlayer.setChannel(ALLY); +// storageManager.updateClanPlayer(clanPlayer); +// ChatBlock.sendMessage(clanPlayer, lang("joined.ally.chat")); +// } +// +// @Subcommand("%leave") +// public void leave(ClanPlayer clanPlayer) { +// if (clanPlayer.getChannel() == ALLY) { +// clanPlayer.setChannel(NONE); +// storageManager.updateClanPlayer(clanPlayer); +// ChatBlock.sendMessage(clanPlayer, lang("left.ally.chat", clanPlayer)); +// } else { +// ChatBlock.sendMessage(clanPlayer, lang("chat.didnt.join", clanPlayer)); +// } +// } +// +// @Subcommand("%mute") +// public void mute(ClanPlayer clanPlayer) { +// if (!clanPlayer.isMutedAlly()) { +// clanPlayer.mute(ALLY, true); +// ChatBlock.sendMessage(clanPlayer, lang("muted.ally.chat", clanPlayer)); +// } else { +// clanPlayer.mute(ALLY, false); +// ChatBlock.sendMessage(clanPlayer, lang("unmuted.ally.chat", clanPlayer)); +// } +// } } diff --git a/src/main/java/net/sacredlabyrinth/phaed/simpleclans/commands/clan/ChatCommand.java b/src/main/java/net/sacredlabyrinth/phaed/simpleclans/commands/clan/ChatCommand.java index ba28d9700..f340c220f 100644 --- a/src/main/java/net/sacredlabyrinth/phaed/simpleclans/commands/clan/ChatCommand.java +++ b/src/main/java/net/sacredlabyrinth/phaed/simpleclans/commands/clan/ChatCommand.java @@ -1,7 +1,15 @@ package net.sacredlabyrinth.phaed.simpleclans.commands.clan; import co.aikar.commands.BaseCommand; -import co.aikar.commands.annotation.*; +import co.aikar.commands.annotation.CommandAlias; +import co.aikar.commands.annotation.CommandPermission; +import co.aikar.commands.annotation.Conditions; +import co.aikar.commands.annotation.Default; +import co.aikar.commands.annotation.Dependency; +import co.aikar.commands.annotation.Description; +import co.aikar.commands.annotation.HelpSearchTags; +import co.aikar.commands.annotation.Name; +import co.aikar.commands.annotation.Optional; import net.sacredlabyrinth.phaed.simpleclans.ChatBlock; import net.sacredlabyrinth.phaed.simpleclans.ClanPlayer; import net.sacredlabyrinth.phaed.simpleclans.managers.ChatManager; @@ -13,7 +21,7 @@ import static net.sacredlabyrinth.phaed.simpleclans.chat.SCMessage.Source.SPIGOT; @CommandAlias("%clan_chat") -@Conditions("%basic_conditions|clan_member|can_chat:type=CLAN") +@Conditions("%basic_conditions|clan_member|can_chat:type=CLAN|rank:name=CLAN_CHAT") @CommandPermission("simpleclans.member.chat") @Description("{@@command.description.chat}") public class ChatCommand extends BaseCommand { @@ -25,7 +33,7 @@ public class ChatCommand extends BaseCommand { @Default @HelpSearchTags("chat") - public void sendMessage(ClanPlayer cp, @Name("message") String message) { + public void sendMessage(ClanPlayer cp, @Optional @Name("message") String message) { if (message == null || message.isBlank()) { if (cp.getChannel() == CLAN) { cp.setChannel(NONE); @@ -41,37 +49,37 @@ public void sendMessage(ClanPlayer cp, @Name("message") String message) { } } - @Subcommand("%join") - public void join(ClanPlayer clanPlayer) { - if (clanPlayer.getChannel() == CLAN) { - ChatBlock.sendMessage(clanPlayer, lang("already.joined.clan.chat")); - return; - } - - clanPlayer.setChannel(CLAN); - storageManager.updateClanPlayer(clanPlayer); - ChatBlock.sendMessage(clanPlayer, lang("joined.clan.chat")); - } - - @Subcommand("%leave") - public void leave(ClanPlayer clanPlayer) { - if (clanPlayer.getChannel() == CLAN) { - clanPlayer.setChannel(NONE); - storageManager.updateClanPlayer(clanPlayer); - ChatBlock.sendMessage(clanPlayer, lang("left.clan.chat", clanPlayer)); - } else { - ChatBlock.sendMessage(clanPlayer, lang("chat.didnt.join", clanPlayer)); - } - } - - @Subcommand("%mute") - public void mute(ClanPlayer clanPlayer) { - if (!clanPlayer.isMuted()) { - clanPlayer.mute(CLAN, true); - ChatBlock.sendMessage(clanPlayer, lang("muted.clan.chat", clanPlayer)); - } else { - clanPlayer.mute(CLAN, false); - ChatBlock.sendMessage(clanPlayer, lang("unmuted.clan.chat", clanPlayer)); - } - } +// @Subcommand("%join") +// public void join(ClanPlayer clanPlayer) { +// if (clanPlayer.getChannel() == CLAN) { +// ChatBlock.sendMessage(clanPlayer, lang("already.joined.clan.chat")); +// return; +// } +// +// clanPlayer.setChannel(CLAN); +// storageManager.updateClanPlayer(clanPlayer); +// ChatBlock.sendMessage(clanPlayer, lang("joined.clan.chat")); +// } +// +// @Subcommand("%leave") +// public void leave(ClanPlayer clanPlayer) { +// if (clanPlayer.getChannel() == CLAN) { +// clanPlayer.setChannel(NONE); +// storageManager.updateClanPlayer(clanPlayer); +// ChatBlock.sendMessage(clanPlayer, lang("left.clan.chat", clanPlayer)); +// } else { +// ChatBlock.sendMessage(clanPlayer, lang("chat.didnt.join", clanPlayer)); +// } +// } +// +// @Subcommand("%mute") +// public void mute(ClanPlayer clanPlayer) { +// if (!clanPlayer.isMuted()) { +// clanPlayer.mute(CLAN, true); +// ChatBlock.sendMessage(clanPlayer, lang("muted.clan.chat", clanPlayer)); +// } else { +// clanPlayer.mute(CLAN, false); +// ChatBlock.sendMessage(clanPlayer, lang("unmuted.clan.chat", clanPlayer)); +// } +// } } diff --git a/src/main/java/net/sacredlabyrinth/phaed/simpleclans/listeners/SCPlayerListener.java b/src/main/java/net/sacredlabyrinth/phaed/simpleclans/listeners/SCPlayerListener.java index 88190eebb..8aa9ddb15 100644 --- a/src/main/java/net/sacredlabyrinth/phaed/simpleclans/listeners/SCPlayerListener.java +++ b/src/main/java/net/sacredlabyrinth/phaed/simpleclans/listeners/SCPlayerListener.java @@ -152,10 +152,10 @@ public void onPlayerKick(PlayerKickEvent event) { private void registerChatListener() { EventPriority priority = EventPriority.valueOf(settingsManager.getString(CLANCHAT_LISTENER_PRIORITY)); plugin.getServer().getPluginManager().registerEvent(AsyncPlayerChatEvent.class, this, priority, (l, e) -> { - if (!(e instanceof AsyncPlayerChatEvent)) { + if (!(e instanceof AsyncPlayerChatEvent event)) { return; } - AsyncPlayerChatEvent event = (AsyncPlayerChatEvent) e; + Player player = event.getPlayer(); ClanPlayer cp = plugin.getClanManager().getClanPlayer(player.getUniqueId()); if (cp == null || isBlacklistedWorld(player)) { diff --git a/src/main/java/net/sacredlabyrinth/phaed/simpleclans/listeners/VentureChatListener.java b/src/main/java/net/sacredlabyrinth/phaed/simpleclans/listeners/VentureChatListener.java new file mode 100644 index 000000000..46bc099ea --- /dev/null +++ b/src/main/java/net/sacredlabyrinth/phaed/simpleclans/listeners/VentureChatListener.java @@ -0,0 +1,31 @@ +package net.sacredlabyrinth.phaed.simpleclans.listeners; + +import mineverse.Aust1n46.chat.api.events.ChannelJoinEvent; +import net.sacredlabyrinth.phaed.simpleclans.ClanPlayer; +import net.sacredlabyrinth.phaed.simpleclans.SimpleClans; +import net.sacredlabyrinth.phaed.simpleclans.managers.ClanManager; +import net.sacredlabyrinth.phaed.simpleclans.managers.StorageManager; +import org.bukkit.event.EventHandler; +import org.bukkit.event.EventPriority; +import org.bukkit.event.Listener; +import org.jetbrains.annotations.NotNull; + +public class VentureChatListener implements Listener { + private final ClanManager clanManager; + private final StorageManager storageManager; + + public VentureChatListener(@NotNull SimpleClans plugin) { + this.clanManager = plugin.getClanManager(); + this.storageManager = plugin.getStorageManager(); + } + + @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) + public void onVentureChat(@NotNull ChannelJoinEvent event) { + ClanPlayer clanPlayer = clanManager.getClanPlayer(event.getPlayer()); + if (clanPlayer == null) return; + if (clanPlayer.getChannel() == ClanPlayer.Channel.NONE) return; + clanPlayer.setChannel(ClanPlayer.Channel.NONE); + storageManager.updateClanPlayer(clanPlayer); + } + +} diff --git a/src/main/java/net/sacredlabyrinth/phaed/simpleclans/managers/ChatManager.java b/src/main/java/net/sacredlabyrinth/phaed/simpleclans/managers/ChatManager.java index 79697953f..732c5b7f5 100644 --- a/src/main/java/net/sacredlabyrinth/phaed/simpleclans/managers/ChatManager.java +++ b/src/main/java/net/sacredlabyrinth/phaed/simpleclans/managers/ChatManager.java @@ -19,15 +19,22 @@ import org.jetbrains.annotations.Nullable; import java.lang.reflect.InvocationTargetException; -import java.util.*; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.HashSet; +import java.util.List; +import java.util.Map; +import java.util.Objects; +import java.util.Set; import java.util.logging.Level; -import java.util.stream.Collectors; import static net.sacredlabyrinth.phaed.simpleclans.ClanPlayer.Channel; import static net.sacredlabyrinth.phaed.simpleclans.chat.SCMessage.Source; import static net.sacredlabyrinth.phaed.simpleclans.chat.SCMessage.Source.DISCORD; import static net.sacredlabyrinth.phaed.simpleclans.managers.SettingsManager.ConfigField; -import static net.sacredlabyrinth.phaed.simpleclans.managers.SettingsManager.ConfigField.*; +import static net.sacredlabyrinth.phaed.simpleclans.managers.SettingsManager.ConfigField.ALLYCHAT_ENABLE; +import static net.sacredlabyrinth.phaed.simpleclans.managers.SettingsManager.ConfigField.CLANCHAT_ENABLE; +import static net.sacredlabyrinth.phaed.simpleclans.managers.SettingsManager.ConfigField.DISCORDCHAT_ENABLE; import static org.bukkit.Bukkit.getPluginManager; public final class ChatManager { @@ -53,11 +60,8 @@ public void registerDiscord(DiscordReadyEvent event) { @Nullable public DiscordHook getDiscordHook() { - if (isDiscordHookEnabled()) { - // Manually instantiate, if JDA did load faster than SC - if (discordHook == null && DiscordSRV.getPlugin().getJda().getStatus() == JDA.Status.CONNECTED) { - registerDiscord(new DiscordReadyEvent()); - } + if (isDiscordHookEnabled() && discordHook == null && DiscordSRV.getPlugin().getJda().getStatus() == JDA.Status.CONNECTED) { + registerDiscord(new DiscordReadyEvent()); } return discordHook; @@ -74,17 +78,16 @@ public void processChat(@NotNull SCMessage message) { } receivers.addAll(getOnlineAllyMembers(clan).stream().filter(allyMember -> - !allyMember.isMutedAlly()).collect(Collectors.toList())); + !allyMember.isMutedAlly()).toList()); receivers.addAll(clan.getOnlineMembers().stream().filter(onlineMember -> - !onlineMember.isMutedAlly()).collect(Collectors.toList())); + !onlineMember.isMutedAlly()).toList()); break; case CLAN: if (!plugin.getSettingsManager().is(CLANCHAT_ENABLE)) { return; } - receivers.addAll(clan.getOnlineMembers().stream().filter(member -> !member.isMuted()). - collect(Collectors.toList())); + receivers.addAll(clan.getOnlineMembers().stream().filter(member -> !member.isMuted()).toList()); } message.setReceivers(receivers); @@ -123,12 +126,11 @@ public String parseChatFormat(String format, SCMessage message, Map handler : chatHandlers) { try { handlers.add(handler.getConstructor().newInstance()); - } catch (InstantiationException | IllegalAccessException | InvocationTargetException | NoSuchMethodException ex) { + } catch (InstantiationException | IllegalAccessException | InvocationTargetException | + NoSuchMethodException ex) { plugin.getLogger().log(Level.SEVERE, "Error while trying to register {0}: " + ex.getMessage(), handler.getSimpleName()); } @@ -172,7 +175,7 @@ private void registerHandlers() { private List getOnlineAllyMembers(Clan clan) { return clan.getAllAllyMembers().stream(). - filter(allyPlayer -> allyPlayer.toPlayer() != null). - collect(Collectors.toList()); + filter(allyPlayer -> allyPlayer.toPlayer() != null) + .toList(); } } diff --git a/src/main/resources/plugin.yml b/src/main/resources/plugin.yml index 855afe68e..818d2e6b9 100644 --- a/src/main/resources/plugin.yml +++ b/src/main/resources/plugin.yml @@ -7,6 +7,7 @@ softdepend: - LuckPerms - WorldGuard - DiscordSRV + - VentureChat loadbefore: - GriefPrevention - PlotSquared