├── .github ├── ISSUE_TEMPLATE │ ├── other.md │ └── bug_report.yml └── workflows │ ├── build-all.yml │ ├── publish-forge-1.21.5.yml │ ├── publish-forge-1.20.1.yml │ ├── publish-forge-1.19.x.yml │ ├── publish-forge-1.20.x.yml │ ├── publish-fabric-1.21.5.yml │ ├── publish-forge-1.18.x.yml │ ├── publish-fabric-1.20.1.yml │ ├── publish-forge-1.21.x.yml │ ├── publish-fabric-1.19.x.yml │ ├── publish-fabric-1.20.x.yml │ ├── publish-fabric-1.18.x.yml │ ├── publish-fabric-1.21.x.yml │ ├── build-1.18.x.yml │ ├── build-1.19.x.yml │ ├── build-1.20.1.yml │ ├── build-1.20.x.yml │ ├── build-1.21.5.yml │ ├── build-1.21.x.yml │ └── publish-all.yml ├── mc2discord-1.18.x ├── buildSrc │ ├── build.gradle.kts │ └── src │ │ └── main │ │ └── kotlin │ │ └── readProperties.kt ├── common │ ├── src │ │ └── main │ │ │ ├── resources │ │ │ ├── pack.mcmeta │ │ │ ├── mc2discord.accesswidener │ │ │ └── mc2discord.mixins.json │ │ │ └── java │ │ │ └── fr │ │ │ └── denisd3d │ │ │ └── mc2discord │ │ │ └── minecraft │ │ │ ├── commands │ │ │ └── DiscordCommandImpl.java │ │ │ └── mixin │ │ │ └── CommandFunctionCommandEntryMixin.java │ └── build.gradle.kts ├── gradle │ └── wrapper │ │ ├── gradle-wrapper.jar │ │ └── gradle-wrapper.properties ├── forge │ └── src │ │ └── main │ │ ├── resources │ │ ├── META-INF │ │ │ ├── accesstransformer.cfg │ │ │ └── mods.toml │ │ └── mc2discord.forge.mixins.json │ │ └── java │ │ └── fr │ │ └── denisd3d │ │ └── mc2discord │ │ └── forge │ │ └── Mc2DiscordForge.java ├── .gitignore ├── .gitattributes ├── .idea │ └── scopes │ │ ├── Forge_sources.xml │ │ └── Fabric_sources.xml ├── gradle.properties ├── fabric │ └── src │ │ └── main │ │ ├── resources │ │ ├── mc2discord.fabric.mixins.json │ │ └── fabric.mod.json │ │ └── java │ │ └── fr │ │ └── denisd3d │ │ └── mc2discord │ │ └── fabric │ │ ├── events │ │ ├── ServerChatCallback.java │ │ ├── PlayerDeathCallback.java │ │ ├── PlayerCompletedAdvancementCallback.java │ │ └── CommandExecuteCallback.java │ │ ├── mixin │ │ ├── ServerPlayerMixin.java │ │ ├── ServerGamePacketListenerImplMixin.java │ │ ├── PlayerAdvancementsMixin.java │ │ └── CommandsMixin.java │ │ └── Mc2DiscordFabric.java └── settings.gradle ├── mc2discord-1.19.x ├── buildSrc │ ├── build.gradle.kts │ └── src │ │ └── main │ │ └── kotlin │ │ └── readProperties.kt ├── common │ ├── src │ │ └── main │ │ │ ├── resources │ │ │ ├── pack.mcmeta │ │ │ ├── mc2discord.accesswidener │ │ │ └── mc2discord.mixins.json │ │ │ └── java │ │ │ └── fr │ │ │ └── denisd3d │ │ │ └── mc2discord │ │ │ └── minecraft │ │ │ ├── commands │ │ │ └── DiscordCommandImpl.java │ │ │ └── mixin │ │ │ └── CommandFunctionCommandEntryMixin.java │ └── build.gradle.kts ├── gradle │ └── wrapper │ │ ├── gradle-wrapper.jar │ │ └── gradle-wrapper.properties ├── forge │ └── src │ │ └── main │ │ ├── resources │ │ ├── META-INF │ │ │ ├── accesstransformer.cfg │ │ │ └── mods.toml │ │ └── mc2discord.forge.mixins.json │ │ └── java │ │ └── fr │ │ └── denisd3d │ │ └── mc2discord │ │ └── forge │ │ └── Mc2DiscordForge.java ├── .gitignore ├── .gitattributes ├── .idea │ └── scopes │ │ ├── Forge_sources.xml │ │ └── Fabric_sources.xml ├── gradle.properties ├── fabric │ └── src │ │ └── main │ │ ├── resources │ │ ├── mc2discord.fabric.mixins.json │ │ └── fabric.mod.json │ │ └── java │ │ └── fr │ │ └── denisd3d │ │ └── mc2discord │ │ └── fabric │ │ ├── events │ │ ├── PlayerDeathCallback.java │ │ ├── PlayerCompletedAdvancementCallback.java │ │ └── CommandExecuteCallback.java │ │ ├── mixin │ │ ├── ServerPlayerMixin.java │ │ ├── CommandsMixin.java │ │ └── PlayerAdvancementsMixin.java │ │ └── Mc2DiscordFabric.java └── settings.gradle ├── mc2discord-1.20.1 ├── buildSrc │ ├── build.gradle.kts │ └── src │ │ └── main │ │ └── kotlin │ │ └── readProperties.kt ├── common │ ├── src │ │ └── main │ │ │ ├── resources │ │ │ ├── pack.mcmeta │ │ │ ├── mc2discord.accesswidener │ │ │ └── mc2discord.mixins.json │ │ │ └── java │ │ │ └── fr │ │ │ └── denisd3d │ │ │ └── mc2discord │ │ │ └── minecraft │ │ │ ├── commands │ │ │ └── DiscordCommandImpl.java │ │ │ └── mixin │ │ │ └── CommandFunctionCommandEntryMixin.java │ └── build.gradle.kts ├── gradle │ └── wrapper │ │ ├── gradle-wrapper.jar │ │ └── gradle-wrapper.properties ├── forge │ └── src │ │ └── main │ │ ├── resources │ │ ├── META-INF │ │ │ ├── accesstransformer.cfg │ │ │ └── mods.toml │ │ └── mc2discord.forge.mixins.json │ │ └── java │ │ └── fr │ │ └── denisd3d │ │ └── mc2discord │ │ └── forge │ │ └── Mc2DiscordForge.java ├── .gitignore ├── .gitattributes ├── .idea │ └── scopes │ │ ├── Forge_sources.xml │ │ └── Fabric_sources.xml ├── gradle.properties ├── fabric │ └── src │ │ └── main │ │ ├── resources │ │ ├── mc2discord.fabric.mixins.json │ │ └── fabric.mod.json │ │ └── java │ │ └── fr │ │ └── denisd3d │ │ └── mc2discord │ │ └── fabric │ │ ├── events │ │ ├── PlayerDeathCallback.java │ │ ├── PlayerCompletedAdvancementCallback.java │ │ └── CommandExecuteCallback.java │ │ ├── mixin │ │ ├── ServerPlayerMixin.java │ │ ├── CommandsMixin.java │ │ └── PlayerAdvancementsMixin.java │ │ └── Mc2DiscordFabric.java └── settings.gradle ├── mc2discord-1.20.x ├── buildSrc │ ├── build.gradle.kts │ └── src │ │ └── main │ │ └── kotlin │ │ └── readProperties.kt ├── common │ ├── src │ │ └── main │ │ │ ├── resources │ │ │ ├── pack.mcmeta │ │ │ ├── mc2discord.accesswidener │ │ │ └── mc2discord.mixins.json │ │ │ └── java │ │ │ └── fr │ │ │ └── denisd3d │ │ │ └── mc2discord │ │ │ └── minecraft │ │ │ ├── commands │ │ │ └── DiscordCommandImpl.java │ │ │ └── mixin │ │ │ └── EmoteCommandsMixin.java │ └── build.gradle.kts ├── gradle │ └── wrapper │ │ ├── gradle-wrapper.jar │ │ └── gradle-wrapper.properties ├── forge │ └── src │ │ └── main │ │ ├── resources │ │ ├── META-INF │ │ │ ├── accesstransformer.cfg │ │ │ └── mods.toml │ │ └── mc2discord.forge.mixins.json │ │ └── java │ │ └── fr │ │ └── denisd3d │ │ └── mc2discord │ │ └── forge │ │ └── Mc2DiscordForge.java ├── .gitignore ├── .gitattributes ├── .idea │ └── scopes │ │ ├── Forge_sources.xml │ │ └── Fabric_sources.xml ├── fabric │ └── src │ │ └── main │ │ ├── resources │ │ ├── mc2discord.fabric.mixins.json │ │ └── fabric.mod.json │ │ └── java │ │ └── fr │ │ └── denisd3d │ │ └── mc2discord │ │ └── fabric │ │ ├── events │ │ ├── PlayerDeathCallback.java │ │ ├── PlayerCompletedAdvancementCallback.java │ │ └── CommandExecuteCallback.java │ │ ├── mixin │ │ ├── ServerPlayerMixin.java │ │ ├── CommandsMixin.java │ │ └── PlayerAdvancementsMixin.java │ │ └── Mc2DiscordFabric.java ├── gradle.properties └── settings.gradle ├── mc2discord-1.21.5 ├── buildSrc │ ├── build.gradle.kts │ └── src │ │ └── main │ │ └── kotlin │ │ └── readProperties.kt ├── common │ ├── src │ │ └── main │ │ │ ├── resources │ │ │ ├── pack.mcmeta │ │ │ ├── mc2discord.accesswidener │ │ │ └── mc2discord.mixins.json │ │ │ └── java │ │ │ └── fr │ │ │ └── denisd3d │ │ │ └── mc2discord │ │ │ └── minecraft │ │ │ ├── commands │ │ │ └── DiscordCommandImpl.java │ │ │ └── mixin │ │ │ └── EmoteCommandsMixin.java │ └── build.gradle.kts ├── gradle │ └── wrapper │ │ ├── gradle-wrapper.jar │ │ └── gradle-wrapper.properties ├── forge │ └── src │ │ └── main │ │ ├── resources │ │ ├── META-INF │ │ │ ├── accesstransformer.cfg │ │ │ └── mods.toml │ │ └── mc2discord.forge.mixins.json │ │ └── java │ │ └── fr │ │ └── denisd3d │ │ └── mc2discord │ │ └── forge │ │ └── Mc2DiscordForge.java ├── .gitignore ├── .gitattributes ├── .idea │ └── scopes │ │ ├── Forge_sources.xml │ │ └── Fabric_sources.xml ├── fabric │ └── src │ │ └── main │ │ ├── resources │ │ ├── mc2discord.fabric.mixins.json │ │ └── fabric.mod.json │ │ └── java │ │ └── fr │ │ └── denisd3d │ │ └── mc2discord │ │ └── fabric │ │ ├── events │ │ ├── PlayerDeathCallback.java │ │ ├── PlayerCompletedAdvancementCallback.java │ │ └── CommandExecuteCallback.java │ │ ├── mixin │ │ ├── ServerPlayerMixin.java │ │ ├── CommandsMixin.java │ │ └── PlayerAdvancementsMixin.java │ │ └── Mc2DiscordFabric.java ├── gradle.properties └── settings.gradle ├── mc2discord-1.21.x ├── buildSrc │ ├── build.gradle.kts │ └── src │ │ └── main │ │ └── kotlin │ │ └── readProperties.kt ├── common │ ├── src │ │ └── main │ │ │ ├── resources │ │ │ ├── pack.mcmeta │ │ │ ├── mc2discord.accesswidener │ │ │ └── mc2discord.mixins.json │ │ │ └── java │ │ │ └── fr │ │ │ └── denisd3d │ │ │ └── mc2discord │ │ │ └── minecraft │ │ │ └── commands │ │ │ └── DiscordCommandImpl.java │ └── build.gradle.kts ├── gradle │ └── wrapper │ │ ├── gradle-wrapper.jar │ │ └── gradle-wrapper.properties ├── forge │ └── src │ │ └── main │ │ ├── resources │ │ ├── META-INF │ │ │ ├── accesstransformer.cfg │ │ │ └── mods.toml │ │ └── mc2discord.forge.mixins.json │ │ └── java │ │ └── fr │ │ └── denisd3d │ │ └── mc2discord │ │ └── forge │ │ └── Mc2DiscordForge.java ├── .gitignore ├── .gitattributes ├── .idea │ └── scopes │ │ ├── Forge_sources.xml │ │ └── Fabric_sources.xml ├── fabric │ └── src │ │ └── main │ │ ├── resources │ │ ├── mc2discord.fabric.mixins.json │ │ └── fabric.mod.json │ │ └── java │ │ └── fr │ │ └── denisd3d │ │ └── mc2discord │ │ └── fabric │ │ ├── events │ │ ├── PlayerDeathCallback.java │ │ ├── PlayerCompletedAdvancementCallback.java │ │ └── CommandExecuteCallback.java │ │ ├── mixin │ │ ├── ServerPlayerMixin.java │ │ ├── CommandsMixin.java │ │ └── PlayerAdvancementsMixin.java │ │ └── Mc2DiscordFabric.java ├── gradle.properties └── settings.gradle ├── mc2discord-core ├── .gitignore ├── src │ └── main │ │ ├── java │ │ └── fr │ │ │ └── denisd3d │ │ │ └── mc2discord │ │ │ └── core │ │ │ ├── config │ │ │ ├── General.java │ │ │ ├── Features.java │ │ │ ├── converters │ │ │ │ ├── RandomString.java │ │ │ │ ├── SnowflakeConverter.java │ │ │ │ ├── SnowflakeArrayConverter.java │ │ │ │ └── RandomStringConverter.java │ │ │ ├── Presence.java │ │ │ ├── Channels.java │ │ │ ├── StatusChannels.java │ │ │ ├── Messages.java │ │ │ └── Commands.java │ │ │ ├── storage │ │ │ ├── HiddenPlayerEntry.java │ │ │ ├── UserStorageEntry.java │ │ │ ├── LinkedPlayerEntry.java │ │ │ ├── HiddenPlayerList.java │ │ │ └── LinkedPlayerList.java │ │ │ ├── entities │ │ │ ├── MessageEntity.java │ │ │ ├── PlayerEntity.java │ │ │ ├── AdvancementEntity.java │ │ │ ├── DeathEntity.java │ │ │ ├── LogEntity.java │ │ │ ├── MemberEntity.java │ │ │ └── Entity.java │ │ │ └── Vars.java │ │ └── resources │ │ └── assets │ │ └── mc2discord │ │ └── m2d-lang │ │ └── core │ │ ├── ru_ru.json │ │ ├── zh_cn.json │ │ ├── ko_kr.json │ │ ├── tr_tr.json │ │ └── fr_fr.json └── build.gradle.kts ├── CHANGELOG.md ├── shared.properties └── update.json /.github/ISSUE_TEMPLATE/other.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: 💡 Other 3 | about: For everything except bug report 4 | --- 5 | -------------------------------------------------------------------------------- /mc2discord-1.18.x/buildSrc/build.gradle.kts: -------------------------------------------------------------------------------- 1 | plugins { 2 | `kotlin-dsl` 3 | } 4 | 5 | repositories { 6 | mavenCentral() 7 | } -------------------------------------------------------------------------------- /mc2discord-1.19.x/buildSrc/build.gradle.kts: -------------------------------------------------------------------------------- 1 | plugins { 2 | `kotlin-dsl` 3 | } 4 | 5 | repositories { 6 | mavenCentral() 7 | } -------------------------------------------------------------------------------- /mc2discord-1.20.1/buildSrc/build.gradle.kts: -------------------------------------------------------------------------------- 1 | plugins { 2 | `kotlin-dsl` 3 | } 4 | 5 | repositories { 6 | mavenCentral() 7 | } -------------------------------------------------------------------------------- /mc2discord-1.20.x/buildSrc/build.gradle.kts: -------------------------------------------------------------------------------- 1 | plugins { 2 | `kotlin-dsl` 3 | } 4 | 5 | repositories { 6 | mavenCentral() 7 | } -------------------------------------------------------------------------------- /mc2discord-1.21.5/buildSrc/build.gradle.kts: -------------------------------------------------------------------------------- 1 | plugins { 2 | `kotlin-dsl` 3 | } 4 | 5 | repositories { 6 | mavenCentral() 7 | } -------------------------------------------------------------------------------- /mc2discord-1.21.x/buildSrc/build.gradle.kts: -------------------------------------------------------------------------------- 1 | plugins { 2 | `kotlin-dsl` 3 | } 4 | 5 | repositories { 6 | mavenCentral() 7 | } -------------------------------------------------------------------------------- /mc2discord-1.18.x/common/src/main/resources/pack.mcmeta: -------------------------------------------------------------------------------- 1 | { 2 | "pack": { 3 | "description": "${modId}", 4 | "pack_format": 8 5 | } 6 | } -------------------------------------------------------------------------------- /mc2discord-1.18.x/gradle/wrapper/gradle-wrapper.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DenisD3D/Mc2Discord/HEAD/mc2discord-1.18.x/gradle/wrapper/gradle-wrapper.jar -------------------------------------------------------------------------------- /mc2discord-1.19.x/common/src/main/resources/pack.mcmeta: -------------------------------------------------------------------------------- 1 | { 2 | "pack": { 3 | "description": "${modId}", 4 | "pack_format": 8 5 | } 6 | } -------------------------------------------------------------------------------- /mc2discord-1.19.x/gradle/wrapper/gradle-wrapper.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DenisD3D/Mc2Discord/HEAD/mc2discord-1.19.x/gradle/wrapper/gradle-wrapper.jar -------------------------------------------------------------------------------- /mc2discord-1.20.1/common/src/main/resources/pack.mcmeta: -------------------------------------------------------------------------------- 1 | { 2 | "pack": { 3 | "description": "${modId}", 4 | "pack_format": 8 5 | } 6 | } -------------------------------------------------------------------------------- /mc2discord-1.20.1/gradle/wrapper/gradle-wrapper.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DenisD3D/Mc2Discord/HEAD/mc2discord-1.20.1/gradle/wrapper/gradle-wrapper.jar -------------------------------------------------------------------------------- /mc2discord-1.20.x/common/src/main/resources/pack.mcmeta: -------------------------------------------------------------------------------- 1 | { 2 | "pack": { 3 | "description": "${modId}", 4 | "pack_format": 8 5 | } 6 | } -------------------------------------------------------------------------------- /mc2discord-1.20.x/gradle/wrapper/gradle-wrapper.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DenisD3D/Mc2Discord/HEAD/mc2discord-1.20.x/gradle/wrapper/gradle-wrapper.jar -------------------------------------------------------------------------------- /mc2discord-1.21.5/common/src/main/resources/pack.mcmeta: -------------------------------------------------------------------------------- 1 | { 2 | "pack": { 3 | "description": "${modId}", 4 | "pack_format": 8 5 | } 6 | } -------------------------------------------------------------------------------- /mc2discord-1.21.5/gradle/wrapper/gradle-wrapper.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DenisD3D/Mc2Discord/HEAD/mc2discord-1.21.5/gradle/wrapper/gradle-wrapper.jar -------------------------------------------------------------------------------- /mc2discord-1.21.x/common/src/main/resources/pack.mcmeta: -------------------------------------------------------------------------------- 1 | { 2 | "pack": { 3 | "description": "${modId}", 4 | "pack_format": 8 5 | } 6 | } -------------------------------------------------------------------------------- /mc2discord-1.21.x/gradle/wrapper/gradle-wrapper.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DenisD3D/Mc2Discord/HEAD/mc2discord-1.21.x/gradle/wrapper/gradle-wrapper.jar -------------------------------------------------------------------------------- /mc2discord-core/.gitignore: -------------------------------------------------------------------------------- 1 | # Ignore Gradle project-specific cache directory 2 | .gradle 3 | 4 | # Ignore Gradle build output directory 5 | build 6 | 7 | # Ignore Idea cache directory 8 | .idea -------------------------------------------------------------------------------- /CHANGELOG.md: -------------------------------------------------------------------------------- 1 | ## 4.2.6 update 2 | + 1.21.5 support 3 | + fix death message being always generic on fabric (thanks to CavanCheeta) 4 | + add missing `${attachements}` variable in `minecraft_chat_format` 5 | -------------------------------------------------------------------------------- /mc2discord-1.18.x/buildSrc/src/main/kotlin/readProperties.kt: -------------------------------------------------------------------------------- 1 | import java.io.File 2 | import java.util.* 3 | 4 | fun readProperties(propertiesFile: File) = Properties().apply { 5 | propertiesFile.inputStream().use { fis -> 6 | load(fis) 7 | } 8 | } -------------------------------------------------------------------------------- /mc2discord-1.19.x/buildSrc/src/main/kotlin/readProperties.kt: -------------------------------------------------------------------------------- 1 | import java.io.File 2 | import java.util.* 3 | 4 | fun readProperties(propertiesFile: File) = Properties().apply { 5 | propertiesFile.inputStream().use { fis -> 6 | load(fis) 7 | } 8 | } -------------------------------------------------------------------------------- /mc2discord-1.20.1/buildSrc/src/main/kotlin/readProperties.kt: -------------------------------------------------------------------------------- 1 | import java.io.File 2 | import java.util.* 3 | 4 | fun readProperties(propertiesFile: File) = Properties().apply { 5 | propertiesFile.inputStream().use { fis -> 6 | load(fis) 7 | } 8 | } -------------------------------------------------------------------------------- /mc2discord-1.20.x/buildSrc/src/main/kotlin/readProperties.kt: -------------------------------------------------------------------------------- 1 | import java.io.File 2 | import java.util.* 3 | 4 | fun readProperties(propertiesFile: File) = Properties().apply { 5 | propertiesFile.inputStream().use { fis -> 6 | load(fis) 7 | } 8 | } -------------------------------------------------------------------------------- /mc2discord-1.21.5/buildSrc/src/main/kotlin/readProperties.kt: -------------------------------------------------------------------------------- 1 | import java.io.File 2 | import java.util.* 3 | 4 | fun readProperties(propertiesFile: File) = Properties().apply { 5 | propertiesFile.inputStream().use { fis -> 6 | load(fis) 7 | } 8 | } -------------------------------------------------------------------------------- /mc2discord-1.21.x/buildSrc/src/main/kotlin/readProperties.kt: -------------------------------------------------------------------------------- 1 | import java.io.File 2 | import java.util.* 3 | 4 | fun readProperties(propertiesFile: File) = Properties().apply { 5 | propertiesFile.inputStream().use { fis -> 6 | load(fis) 7 | } 8 | } -------------------------------------------------------------------------------- /mc2discord-1.18.x/gradle/wrapper/gradle-wrapper.properties: -------------------------------------------------------------------------------- 1 | distributionBase=GRADLE_USER_HOME 2 | distributionPath=wrapper/dists 3 | distributionUrl=https\://services.gradle.org/distributions/gradle-8.12-bin.zip 4 | zipStoreBase=GRADLE_USER_HOME 5 | zipStorePath=wrapper/dists 6 | -------------------------------------------------------------------------------- /mc2discord-1.19.x/gradle/wrapper/gradle-wrapper.properties: -------------------------------------------------------------------------------- 1 | distributionBase=GRADLE_USER_HOME 2 | distributionPath=wrapper/dists 3 | distributionUrl=https\://services.gradle.org/distributions/gradle-8.12-bin.zip 4 | zipStoreBase=GRADLE_USER_HOME 5 | zipStorePath=wrapper/dists 6 | -------------------------------------------------------------------------------- /mc2discord-1.20.1/gradle/wrapper/gradle-wrapper.properties: -------------------------------------------------------------------------------- 1 | distributionBase=GRADLE_USER_HOME 2 | distributionPath=wrapper/dists 3 | distributionUrl=https\://services.gradle.org/distributions/gradle-8.12-bin.zip 4 | zipStoreBase=GRADLE_USER_HOME 5 | zipStorePath=wrapper/dists 6 | -------------------------------------------------------------------------------- /mc2discord-1.20.x/gradle/wrapper/gradle-wrapper.properties: -------------------------------------------------------------------------------- 1 | distributionBase=GRADLE_USER_HOME 2 | distributionPath=wrapper/dists 3 | distributionUrl=https\://services.gradle.org/distributions/gradle-8.12-bin.zip 4 | zipStoreBase=GRADLE_USER_HOME 5 | zipStorePath=wrapper/dists 6 | -------------------------------------------------------------------------------- /mc2discord-1.21.5/gradle/wrapper/gradle-wrapper.properties: -------------------------------------------------------------------------------- 1 | distributionBase=GRADLE_USER_HOME 2 | distributionPath=wrapper/dists 3 | distributionUrl=https\://services.gradle.org/distributions/gradle-8.12-bin.zip 4 | zipStoreBase=GRADLE_USER_HOME 5 | zipStorePath=wrapper/dists 6 | -------------------------------------------------------------------------------- /mc2discord-1.21.x/gradle/wrapper/gradle-wrapper.properties: -------------------------------------------------------------------------------- 1 | distributionBase=GRADLE_USER_HOME 2 | distributionPath=wrapper/dists 3 | distributionUrl=https\://services.gradle.org/distributions/gradle-8.12-bin.zip 4 | zipStoreBase=GRADLE_USER_HOME 5 | zipStorePath=wrapper/dists 6 | -------------------------------------------------------------------------------- /mc2discord-1.18.x/forge/src/main/resources/META-INF/accesstransformer.cfg: -------------------------------------------------------------------------------- 1 | public net.minecraft.world.damagesource.CombatTracker f_19277_ # mob 2 | public net.minecraft.server.MinecraftServer f_129745_ # playerDataStorage 3 | public net.minecraft.world.level.storage.PlayerDataStorage f_78427_ # playerDir -------------------------------------------------------------------------------- /mc2discord-1.19.x/forge/src/main/resources/META-INF/accesstransformer.cfg: -------------------------------------------------------------------------------- 1 | public net.minecraft.world.damagesource.CombatTracker f_19277_ # mob 2 | public net.minecraft.server.MinecraftServer f_129745_ # playerDataStorage 3 | public net.minecraft.world.level.storage.PlayerDataStorage f_78427_ # playerDir -------------------------------------------------------------------------------- /mc2discord-1.20.1/forge/src/main/resources/META-INF/accesstransformer.cfg: -------------------------------------------------------------------------------- 1 | public net.minecraft.world.damagesource.CombatTracker f_19277_ # mob 2 | public net.minecraft.server.MinecraftServer f_129745_ # playerDataStorage 3 | public net.minecraft.world.level.storage.PlayerDataStorage f_78427_ # playerDir -------------------------------------------------------------------------------- /mc2discord-1.20.x/forge/src/main/resources/META-INF/accesstransformer.cfg: -------------------------------------------------------------------------------- 1 | public net.minecraft.world.damagesource.CombatTracker f_19277_ # mob 2 | public net.minecraft.server.MinecraftServer f_129745_ # playerDataStorage 3 | public net.minecraft.world.level.storage.PlayerDataStorage f_78427_ # playerDir -------------------------------------------------------------------------------- /mc2discord-1.21.5/forge/src/main/resources/META-INF/accesstransformer.cfg: -------------------------------------------------------------------------------- 1 | public net.minecraft.world.damagesource.CombatTracker f_19277_ # mob 2 | public net.minecraft.server.MinecraftServer f_129745_ # playerDataStorage 3 | public net.minecraft.world.level.storage.PlayerDataStorage f_78427_ # playerDir -------------------------------------------------------------------------------- /mc2discord-1.21.x/forge/src/main/resources/META-INF/accesstransformer.cfg: -------------------------------------------------------------------------------- 1 | public net.minecraft.world.damagesource.CombatTracker f_19277_ # mob 2 | public net.minecraft.server.MinecraftServer f_129745_ # playerDataStorage 3 | public net.minecraft.world.level.storage.PlayerDataStorage f_78427_ # playerDir -------------------------------------------------------------------------------- /mc2discord-1.18.x/.gitignore: -------------------------------------------------------------------------------- 1 | # eclipse 2 | bin 3 | *.launch 4 | .settings 5 | .metadata 6 | .classpath 7 | .project 8 | 9 | # idea 10 | out 11 | *.ipr 12 | *.iws 13 | *.iml 14 | .idea/* 15 | !.idea/scopes 16 | 17 | # gradle 18 | build 19 | .gradle 20 | 21 | # other 22 | eclipse 23 | run 24 | -------------------------------------------------------------------------------- /mc2discord-1.19.x/.gitignore: -------------------------------------------------------------------------------- 1 | # eclipse 2 | bin 3 | *.launch 4 | .settings 5 | .metadata 6 | .classpath 7 | .project 8 | 9 | # idea 10 | out 11 | *.ipr 12 | *.iws 13 | *.iml 14 | .idea/* 15 | !.idea/scopes 16 | 17 | # gradle 18 | build 19 | .gradle 20 | 21 | # other 22 | eclipse 23 | run 24 | -------------------------------------------------------------------------------- /mc2discord-1.20.1/.gitignore: -------------------------------------------------------------------------------- 1 | # eclipse 2 | bin 3 | *.launch 4 | .settings 5 | .metadata 6 | .classpath 7 | .project 8 | 9 | # idea 10 | out 11 | *.ipr 12 | *.iws 13 | *.iml 14 | .idea/* 15 | !.idea/scopes 16 | 17 | # gradle 18 | build 19 | .gradle 20 | 21 | # other 22 | eclipse 23 | run 24 | -------------------------------------------------------------------------------- /mc2discord-1.20.x/.gitignore: -------------------------------------------------------------------------------- 1 | # eclipse 2 | bin 3 | *.launch 4 | .settings 5 | .metadata 6 | .classpath 7 | .project 8 | 9 | # idea 10 | out 11 | *.ipr 12 | *.iws 13 | *.iml 14 | .idea/* 15 | !.idea/scopes 16 | 17 | # gradle 18 | build 19 | .gradle 20 | 21 | # other 22 | eclipse 23 | run 24 | -------------------------------------------------------------------------------- /mc2discord-1.21.5/.gitignore: -------------------------------------------------------------------------------- 1 | # eclipse 2 | bin 3 | *.launch 4 | .settings 5 | .metadata 6 | .classpath 7 | .project 8 | 9 | # idea 10 | out 11 | *.ipr 12 | *.iws 13 | *.iml 14 | .idea/* 15 | !.idea/scopes 16 | 17 | # gradle 18 | build 19 | .gradle 20 | 21 | # other 22 | eclipse 23 | run 24 | -------------------------------------------------------------------------------- /mc2discord-1.21.x/.gitignore: -------------------------------------------------------------------------------- 1 | # eclipse 2 | bin 3 | *.launch 4 | .settings 5 | .metadata 6 | .classpath 7 | .project 8 | 9 | # idea 10 | out 11 | *.ipr 12 | *.iws 13 | *.iml 14 | .idea/* 15 | !.idea/scopes 16 | 17 | # gradle 18 | build 19 | .gradle 20 | 21 | # other 22 | eclipse 23 | run 24 | -------------------------------------------------------------------------------- /mc2discord-1.18.x/.gitattributes: -------------------------------------------------------------------------------- 1 | * text eol=lf 2 | *.bat text eol=crlf 3 | *.patch text eol=lf 4 | *.java text eol=lf 5 | *.gradle text eol=crlf 6 | *.png binary 7 | *.gif binary 8 | *.exe binary 9 | *.dll binary 10 | *.jar binary 11 | *.lzma binary 12 | *.zip binary 13 | *.pyd binary 14 | *.cfg text eol=lf 15 | *.jks binary -------------------------------------------------------------------------------- /mc2discord-1.19.x/.gitattributes: -------------------------------------------------------------------------------- 1 | * text eol=lf 2 | *.bat text eol=crlf 3 | *.patch text eol=lf 4 | *.java text eol=lf 5 | *.gradle text eol=crlf 6 | *.png binary 7 | *.gif binary 8 | *.exe binary 9 | *.dll binary 10 | *.jar binary 11 | *.lzma binary 12 | *.zip binary 13 | *.pyd binary 14 | *.cfg text eol=lf 15 | *.jks binary -------------------------------------------------------------------------------- /mc2discord-1.20.1/.gitattributes: -------------------------------------------------------------------------------- 1 | * text eol=lf 2 | *.bat text eol=crlf 3 | *.patch text eol=lf 4 | *.java text eol=lf 5 | *.gradle text eol=crlf 6 | *.png binary 7 | *.gif binary 8 | *.exe binary 9 | *.dll binary 10 | *.jar binary 11 | *.lzma binary 12 | *.zip binary 13 | *.pyd binary 14 | *.cfg text eol=lf 15 | *.jks binary -------------------------------------------------------------------------------- /mc2discord-1.20.x/.gitattributes: -------------------------------------------------------------------------------- 1 | * text eol=lf 2 | *.bat text eol=crlf 3 | *.patch text eol=lf 4 | *.java text eol=lf 5 | *.gradle text eol=crlf 6 | *.png binary 7 | *.gif binary 8 | *.exe binary 9 | *.dll binary 10 | *.jar binary 11 | *.lzma binary 12 | *.zip binary 13 | *.pyd binary 14 | *.cfg text eol=lf 15 | *.jks binary -------------------------------------------------------------------------------- /mc2discord-1.21.5/.gitattributes: -------------------------------------------------------------------------------- 1 | * text eol=lf 2 | *.bat text eol=crlf 3 | *.patch text eol=lf 4 | *.java text eol=lf 5 | *.gradle text eol=crlf 6 | *.png binary 7 | *.gif binary 8 | *.exe binary 9 | *.dll binary 10 | *.jar binary 11 | *.lzma binary 12 | *.zip binary 13 | *.pyd binary 14 | *.cfg text eol=lf 15 | *.jks binary -------------------------------------------------------------------------------- /mc2discord-1.21.x/.gitattributes: -------------------------------------------------------------------------------- 1 | * text eol=lf 2 | *.bat text eol=crlf 3 | *.patch text eol=lf 4 | *.java text eol=lf 5 | *.gradle text eol=crlf 6 | *.png binary 7 | *.gif binary 8 | *.exe binary 9 | *.dll binary 10 | *.jar binary 11 | *.lzma binary 12 | *.zip binary 13 | *.pyd binary 14 | *.cfg text eol=lf 15 | *.jks binary -------------------------------------------------------------------------------- /mc2discord-1.18.x/forge/src/main/resources/mc2discord.forge.mixins.json: -------------------------------------------------------------------------------- 1 | { 2 | "required": true, 3 | "minVersion": "0.8", 4 | "package": "fr.denisd3d.mc2discord.forge.mixin", 5 | "refmap": "${modId}.refmap.json", 6 | "compatibilityLevel": "JAVA_17", 7 | "mixins": [ 8 | ], 9 | "injectors": { 10 | "defaultRequire": 1 11 | } 12 | } -------------------------------------------------------------------------------- /mc2discord-1.19.x/forge/src/main/resources/mc2discord.forge.mixins.json: -------------------------------------------------------------------------------- 1 | { 2 | "required": true, 3 | "minVersion": "0.8", 4 | "package": "fr.denisd3d.mc2discord.forge.mixin", 5 | "refmap": "${modId}.refmap.json", 6 | "compatibilityLevel": "JAVA_17", 7 | "mixins": [ 8 | ], 9 | "injectors": { 10 | "defaultRequire": 1 11 | } 12 | } -------------------------------------------------------------------------------- /mc2discord-1.20.1/forge/src/main/resources/mc2discord.forge.mixins.json: -------------------------------------------------------------------------------- 1 | { 2 | "required": true, 3 | "minVersion": "0.8", 4 | "package": "fr.denisd3d.mc2discord.forge.mixin", 5 | "refmap": "${modId}.refmap.json", 6 | "compatibilityLevel": "JAVA_17", 7 | "mixins": [ 8 | ], 9 | "injectors": { 10 | "defaultRequire": 1 11 | } 12 | } -------------------------------------------------------------------------------- /mc2discord-1.20.x/forge/src/main/resources/mc2discord.forge.mixins.json: -------------------------------------------------------------------------------- 1 | { 2 | "required": true, 3 | "minVersion": "0.8", 4 | "package": "fr.denisd3d.mc2discord.forge.mixin", 5 | "refmap": "${modId}.refmap.json", 6 | "compatibilityLevel": "JAVA_17", 7 | "mixins": [ 8 | ], 9 | "injectors": { 10 | "defaultRequire": 1 11 | } 12 | } -------------------------------------------------------------------------------- /mc2discord-1.21.5/forge/src/main/resources/mc2discord.forge.mixins.json: -------------------------------------------------------------------------------- 1 | { 2 | "required": true, 3 | "minVersion": "0.8", 4 | "package": "fr.denisd3d.mc2discord.forge.mixin", 5 | "refmap": "${modId}.refmap.json", 6 | "compatibilityLevel": "JAVA_17", 7 | "mixins": [ 8 | ], 9 | "injectors": { 10 | "defaultRequire": 1 11 | } 12 | } -------------------------------------------------------------------------------- /mc2discord-1.21.x/forge/src/main/resources/mc2discord.forge.mixins.json: -------------------------------------------------------------------------------- 1 | { 2 | "required": true, 3 | "minVersion": "0.8", 4 | "package": "fr.denisd3d.mc2discord.forge.mixin", 5 | "refmap": "${modId}.refmap.json", 6 | "compatibilityLevel": "JAVA_17", 7 | "mixins": [ 8 | ], 9 | "injectors": { 10 | "defaultRequire": 1 11 | } 12 | } -------------------------------------------------------------------------------- /mc2discord-1.18.x/.idea/scopes/Forge_sources.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | -------------------------------------------------------------------------------- /mc2discord-1.19.x/.idea/scopes/Forge_sources.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | -------------------------------------------------------------------------------- /mc2discord-1.20.1/.idea/scopes/Forge_sources.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | -------------------------------------------------------------------------------- /mc2discord-1.20.x/.idea/scopes/Forge_sources.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | -------------------------------------------------------------------------------- /mc2discord-1.21.5/.idea/scopes/Forge_sources.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | -------------------------------------------------------------------------------- /mc2discord-1.21.x/.idea/scopes/Forge_sources.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | -------------------------------------------------------------------------------- /shared.properties: -------------------------------------------------------------------------------- 1 | modId=mc2discord 2 | modName=Mc2Discord 3 | modGroup=fr.denisd3d.mc2discord 4 | modAuthors=DenisD3D 5 | modDescription=Link your Minecraft chat with your Discord server 6 | modIssueTrackerUrl=https://github.com/DenisD3D/Mc2Discord/issues 7 | modUpdateJsonUrl=https://raw.githubusercontent.com/DenisD3D/Mc2Discord/main/update.json 8 | modDisplayUrl=https://www.curseforge.com/minecraft/mc-mods/mc2discord 9 | -------------------------------------------------------------------------------- /mc2discord-1.18.x/common/src/main/resources/mc2discord.accesswidener: -------------------------------------------------------------------------------- 1 | accessWidener v1 named 2 | accessible field net/minecraft/world/damagesource/CombatTracker mob Lnet/minecraft/world/entity/LivingEntity; 3 | accessible field net/minecraft/server/MinecraftServer playerDataStorage Lnet/minecraft/world/level/storage/PlayerDataStorage; 4 | accessible field net/minecraft/world/level/storage/PlayerDataStorage playerDir Ljava/io/File; -------------------------------------------------------------------------------- /mc2discord-1.19.x/common/src/main/resources/mc2discord.accesswidener: -------------------------------------------------------------------------------- 1 | accessWidener v1 named 2 | accessible field net/minecraft/world/damagesource/CombatTracker mob Lnet/minecraft/world/entity/LivingEntity; 3 | accessible field net/minecraft/server/MinecraftServer playerDataStorage Lnet/minecraft/world/level/storage/PlayerDataStorage; 4 | accessible field net/minecraft/world/level/storage/PlayerDataStorage playerDir Ljava/io/File; -------------------------------------------------------------------------------- /mc2discord-1.20.1/common/src/main/resources/mc2discord.accesswidener: -------------------------------------------------------------------------------- 1 | accessWidener v1 named 2 | accessible field net/minecraft/world/damagesource/CombatTracker mob Lnet/minecraft/world/entity/LivingEntity; 3 | accessible field net/minecraft/server/MinecraftServer playerDataStorage Lnet/minecraft/world/level/storage/PlayerDataStorage; 4 | accessible field net/minecraft/world/level/storage/PlayerDataStorage playerDir Ljava/io/File; -------------------------------------------------------------------------------- /mc2discord-1.20.x/common/src/main/resources/mc2discord.accesswidener: -------------------------------------------------------------------------------- 1 | accessWidener v1 named 2 | accessible field net/minecraft/world/damagesource/CombatTracker mob Lnet/minecraft/world/entity/LivingEntity; 3 | accessible field net/minecraft/server/MinecraftServer playerDataStorage Lnet/minecraft/world/level/storage/PlayerDataStorage; 4 | accessible field net/minecraft/world/level/storage/PlayerDataStorage playerDir Ljava/io/File; -------------------------------------------------------------------------------- /mc2discord-1.21.5/common/src/main/resources/mc2discord.accesswidener: -------------------------------------------------------------------------------- 1 | accessWidener v1 named 2 | accessible field net/minecraft/world/damagesource/CombatTracker mob Lnet/minecraft/world/entity/LivingEntity; 3 | accessible field net/minecraft/server/MinecraftServer playerDataStorage Lnet/minecraft/world/level/storage/PlayerDataStorage; 4 | accessible field net/minecraft/world/level/storage/PlayerDataStorage playerDir Ljava/io/File; -------------------------------------------------------------------------------- /mc2discord-1.21.x/common/src/main/resources/mc2discord.accesswidener: -------------------------------------------------------------------------------- 1 | accessWidener v1 named 2 | accessible field net/minecraft/world/damagesource/CombatTracker mob Lnet/minecraft/world/entity/LivingEntity; 3 | accessible field net/minecraft/server/MinecraftServer playerDataStorage Lnet/minecraft/world/level/storage/PlayerDataStorage; 4 | accessible field net/minecraft/world/level/storage/PlayerDataStorage playerDir Ljava/io/File; -------------------------------------------------------------------------------- /mc2discord-1.18.x/common/src/main/resources/mc2discord.mixins.json: -------------------------------------------------------------------------------- 1 | { 2 | "required": true, 3 | "minVersion": "0.8", 4 | "package": "fr.denisd3d.mc2discord.minecraft.mixin", 5 | "compatibilityLevel": "JAVA_17", 6 | "refmap": "${modId}.refmap.json", 7 | "mixins": [ 8 | "CommandFunctionCommandEntryMixin", 9 | "PlayerListMixin" 10 | ], 11 | "injectors": { 12 | "defaultRequire": 1 13 | } 14 | } 15 | 16 | -------------------------------------------------------------------------------- /mc2discord-1.19.x/common/src/main/resources/mc2discord.mixins.json: -------------------------------------------------------------------------------- 1 | { 2 | "required": true, 3 | "minVersion": "0.8", 4 | "package": "fr.denisd3d.mc2discord.minecraft.mixin", 5 | "compatibilityLevel": "JAVA_17", 6 | "refmap": "${modId}.refmap.json", 7 | "mixins": [ 8 | "CommandFunctionCommandEntryMixin", 9 | "PlayerListMixin" 10 | ], 11 | "injectors": { 12 | "defaultRequire": 1 13 | } 14 | } 15 | 16 | -------------------------------------------------------------------------------- /mc2discord-1.20.1/common/src/main/resources/mc2discord.mixins.json: -------------------------------------------------------------------------------- 1 | { 2 | "required": true, 3 | "minVersion": "0.8", 4 | "package": "fr.denisd3d.mc2discord.minecraft.mixin", 5 | "compatibilityLevel": "JAVA_17", 6 | "refmap": "${modId}.refmap.json", 7 | "mixins": [ 8 | "CommandFunctionCommandEntryMixin", 9 | "PlayerListMixin" 10 | ], 11 | "injectors": { 12 | "defaultRequire": 1 13 | } 14 | } 15 | 16 | -------------------------------------------------------------------------------- /mc2discord-1.18.x/gradle.properties: -------------------------------------------------------------------------------- 1 | # Gradle 2 | org.gradle.jvmargs=-Xmx3G 3 | org.gradle.parallel=true 4 | 5 | # Common 6 | javaVersion=17 7 | minecraftVersion=1.18.2 8 | minecraftDisplayVersion=1.18.x 9 | 10 | # Fabric 11 | fabricLoaderVersion=0.14.22 12 | fabricVersion=0.76.0+1.18.2 13 | fabricMinecraftVersionRange=1.18.x 14 | 15 | # Forge 16 | forgeVersion=40.2.10 17 | forgeVersionRange=[38,) 18 | forgeMinecraftVersionRange=[1.18,1.19) -------------------------------------------------------------------------------- /mc2discord-1.20.1/gradle.properties: -------------------------------------------------------------------------------- 1 | # Gradle 2 | org.gradle.jvmargs=-Xmx3G 3 | org.gradle.parallel=true 4 | 5 | # Common 6 | javaVersion=17 7 | minecraftVersion=1.20.1 8 | minecraftDisplayVersion=1.20.1 9 | 10 | # Fabric 11 | fabricLoaderVersion=0.14.22 12 | fabricVersion=0.90.7+1.20.1 13 | fabricMinecraftVersionRange=1.20.x 14 | 15 | # Forge 16 | forgeVersion=47.2.0 17 | forgeVersionRange=[46,) 18 | forgeMinecraftVersionRange=[1.20,1.20.1] -------------------------------------------------------------------------------- /mc2discord-1.19.x/gradle.properties: -------------------------------------------------------------------------------- 1 | # Gradle 2 | org.gradle.jvmargs=-Xmx3G 3 | org.gradle.parallel=true 4 | 5 | # Common 6 | javaVersion=17 7 | minecraftVersion=1.19.4 8 | minecraftDisplayVersion=1.19.x 9 | 10 | # Fabric 11 | fabricLoaderVersion=0.14.22 12 | fabricVersion=0.87.0+1.19.4 13 | fabricMinecraftVersionRange=1.19.x 14 | 15 | # Forge 16 | forgeVersion=45.1.19 17 | forgeVersionRange=[41,) 18 | forgeMinecraftVersionRange=[1.19,1.20) 19 | -------------------------------------------------------------------------------- /mc2discord-1.19.x/fabric/src/main/resources/mc2discord.fabric.mixins.json: -------------------------------------------------------------------------------- 1 | { 2 | "required": true, 3 | "minVersion": "0.8", 4 | "package": "fr.denisd3d.mc2discord.fabric.mixin", 5 | "compatibilityLevel": "JAVA_17", 6 | "refmap": "${modId}.refmap.json", 7 | "mixins": [ 8 | "CommandsMixin", 9 | "PlayerAdvancementsMixin", 10 | "ServerPlayerMixin" 11 | ], 12 | "injectors": { 13 | "defaultRequire": 1 14 | } 15 | } -------------------------------------------------------------------------------- /mc2discord-1.20.1/fabric/src/main/resources/mc2discord.fabric.mixins.json: -------------------------------------------------------------------------------- 1 | { 2 | "required": true, 3 | "minVersion": "0.8", 4 | "package": "fr.denisd3d.mc2discord.fabric.mixin", 5 | "compatibilityLevel": "JAVA_17", 6 | "refmap": "${modId}.refmap.json", 7 | "mixins": [ 8 | "CommandsMixin", 9 | "PlayerAdvancementsMixin", 10 | "ServerPlayerMixin" 11 | ], 12 | "injectors": { 13 | "defaultRequire": 1 14 | } 15 | } -------------------------------------------------------------------------------- /mc2discord-1.20.x/common/src/main/resources/mc2discord.mixins.json: -------------------------------------------------------------------------------- 1 | { 2 | "required": true, 3 | "minVersion": "0.8", 4 | "package": "fr.denisd3d.mc2discord.minecraft.mixin", 5 | "compatibilityLevel": "JAVA_17", 6 | "refmap": "${modId}.refmap.json", 7 | "mixins": [ 8 | "EmoteCommandsMixin", 9 | "PlayerListMixin", 10 | "SayCommandMixin", 11 | "TellrawCommandMixin" 12 | ], 13 | "injectors": { 14 | "defaultRequire": 1 15 | } 16 | } 17 | 18 | -------------------------------------------------------------------------------- /mc2discord-1.20.x/fabric/src/main/resources/mc2discord.fabric.mixins.json: -------------------------------------------------------------------------------- 1 | { 2 | "required": true, 3 | "minVersion": "0.8", 4 | "package": "fr.denisd3d.mc2discord.fabric.mixin", 5 | "compatibilityLevel": "JAVA_17", 6 | "refmap": "${modId}.refmap.json", 7 | "mixins": [ 8 | "CommandsMixin", 9 | "PlayerAdvancementsMixin", 10 | "ServerPlayerMixin" 11 | ], 12 | "injectors": { 13 | "defaultRequire": 1 14 | } 15 | } -------------------------------------------------------------------------------- /mc2discord-1.21.5/common/src/main/resources/mc2discord.mixins.json: -------------------------------------------------------------------------------- 1 | { 2 | "required": true, 3 | "minVersion": "0.8", 4 | "package": "fr.denisd3d.mc2discord.minecraft.mixin", 5 | "compatibilityLevel": "JAVA_17", 6 | "refmap": "${modId}.refmap.json", 7 | "mixins": [ 8 | "EmoteCommandsMixin", 9 | "PlayerListMixin", 10 | "SayCommandMixin", 11 | "TellrawCommandMixin" 12 | ], 13 | "injectors": { 14 | "defaultRequire": 1 15 | } 16 | } 17 | 18 | -------------------------------------------------------------------------------- /mc2discord-1.21.5/fabric/src/main/resources/mc2discord.fabric.mixins.json: -------------------------------------------------------------------------------- 1 | { 2 | "required": true, 3 | "minVersion": "0.8", 4 | "package": "fr.denisd3d.mc2discord.fabric.mixin", 5 | "compatibilityLevel": "JAVA_17", 6 | "refmap": "${modId}.refmap.json", 7 | "mixins": [ 8 | "CommandsMixin", 9 | "PlayerAdvancementsMixin", 10 | "ServerPlayerMixin" 11 | ], 12 | "injectors": { 13 | "defaultRequire": 1 14 | } 15 | } -------------------------------------------------------------------------------- /mc2discord-1.21.x/common/src/main/resources/mc2discord.mixins.json: -------------------------------------------------------------------------------- 1 | { 2 | "required": true, 3 | "minVersion": "0.8", 4 | "package": "fr.denisd3d.mc2discord.minecraft.mixin", 5 | "compatibilityLevel": "JAVA_17", 6 | "refmap": "${modId}.refmap.json", 7 | "mixins": [ 8 | "EmoteCommandsMixin", 9 | "PlayerListMixin", 10 | "SayCommandMixin", 11 | "TellrawCommandMixin" 12 | ], 13 | "injectors": { 14 | "defaultRequire": 1 15 | } 16 | } 17 | 18 | -------------------------------------------------------------------------------- /mc2discord-1.21.x/fabric/src/main/resources/mc2discord.fabric.mixins.json: -------------------------------------------------------------------------------- 1 | { 2 | "required": true, 3 | "minVersion": "0.8", 4 | "package": "fr.denisd3d.mc2discord.fabric.mixin", 5 | "compatibilityLevel": "JAVA_17", 6 | "refmap": "${modId}.refmap.json", 7 | "mixins": [ 8 | "CommandsMixin", 9 | "PlayerAdvancementsMixin", 10 | "ServerPlayerMixin" 11 | ], 12 | "injectors": { 13 | "defaultRequire": 1 14 | } 15 | } -------------------------------------------------------------------------------- /mc2discord-1.20.x/gradle.properties: -------------------------------------------------------------------------------- 1 | # Gradle 2 | org.gradle.jvmargs=-Xmx3G 3 | org.gradle.parallel=true 4 | 5 | # Common 6 | javaVersion=21 7 | minecraftVersion=1.20.6 8 | minecraftDisplayVersion=1.20.6 9 | 10 | # Fabric 11 | fabricLoaderVersion=0.15.11 12 | fabricVersion=0.98.0+1.20.6 13 | fabricMinecraftVersionRange=~1.20.6 14 | # ~1.x.1 <-> 1.x.1, 1.x.2, ... 15 | 16 | # Forge 17 | forgeVersion=50.0.22 18 | forgeVersionRange=[46,) 19 | forgeMinecraftVersionRange=[1.20.6,1.21) -------------------------------------------------------------------------------- /mc2discord-1.18.x/.idea/scopes/Fabric_sources.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | -------------------------------------------------------------------------------- /mc2discord-1.19.x/.idea/scopes/Fabric_sources.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | -------------------------------------------------------------------------------- /mc2discord-1.20.1/.idea/scopes/Fabric_sources.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | -------------------------------------------------------------------------------- /mc2discord-1.20.x/.idea/scopes/Fabric_sources.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | -------------------------------------------------------------------------------- /mc2discord-1.21.5/.idea/scopes/Fabric_sources.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | -------------------------------------------------------------------------------- /mc2discord-1.21.5/gradle.properties: -------------------------------------------------------------------------------- 1 | # Gradle 2 | org.gradle.jvmargs=-Xmx3G 3 | org.gradle.parallel=true 4 | 5 | # Common 6 | javaVersion=21 7 | minecraftVersion=1.21.5 8 | minecraftDisplayVersion=1.21.5 9 | 10 | # Fabric 11 | fabricLoaderVersion=0.16.14 12 | fabricVersion=0.121.0+1.21.5 13 | fabricMinecraftVersionRange=~1.21 14 | # ~1.x.1 <-> 1.x.1, 1.x.2, ... 15 | 16 | # Forge 17 | forgeVersion=55.0.9 18 | forgeVersionRange=[53,) 19 | forgeMinecraftVersionRange=[1.21.2,1.22) 20 | -------------------------------------------------------------------------------- /mc2discord-1.21.x/.idea/scopes/Fabric_sources.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | -------------------------------------------------------------------------------- /mc2discord-1.21.x/gradle.properties: -------------------------------------------------------------------------------- 1 | # Gradle 2 | org.gradle.jvmargs=-Xmx3G 3 | org.gradle.parallel=true 4 | 5 | # Common 6 | javaVersion=21 7 | minecraftVersion=1.21.4 8 | minecraftDisplayVersion=1.21.x 9 | 10 | # Fabric 11 | fabricLoaderVersion=0.16.9 12 | fabricVersion=0.113.0+1.21.4 13 | fabricMinecraftVersionRange=~1.21 14 | # ~1.x.1 <-> 1.x.1, 1.x.2, ... 15 | 16 | # Forge 17 | forgeVersion=54.0.12 18 | forgeVersionRange=[53,) 19 | forgeMinecraftVersionRange=[1.21.2,1.22) 20 | -------------------------------------------------------------------------------- /mc2discord-1.18.x/fabric/src/main/resources/mc2discord.fabric.mixins.json: -------------------------------------------------------------------------------- 1 | { 2 | "required": true, 3 | "minVersion": "0.8", 4 | "package": "fr.denisd3d.mc2discord.fabric.mixin", 5 | "compatibilityLevel": "JAVA_17", 6 | "refmap": "${modId}.refmap.json", 7 | "mixins": [ 8 | "CommandsMixin", 9 | "PlayerAdvancementsMixin", 10 | "ServerGamePacketListenerImplMixin", 11 | "ServerPlayerMixin" 12 | ], 13 | "injectors": { 14 | "defaultRequire": 1 15 | } 16 | } -------------------------------------------------------------------------------- /mc2discord-core/src/main/java/fr/denisd3d/mc2discord/core/config/General.java: -------------------------------------------------------------------------------- 1 | package fr.denisd3d.mc2discord.core.config; 2 | 3 | import com.electronwill.nightconfig.core.conversion.Path; 4 | import com.electronwill.nightconfig.core.conversion.PreserveNotNull; 5 | import fr.denisd3d.config4j.Comment; 6 | 7 | public class General { 8 | @Path("token") 9 | @Comment("config.general.token.comment") 10 | @PreserveNotNull 11 | public String token = ""; 12 | 13 | @Path("comment") 14 | public String comment; 15 | } 16 | -------------------------------------------------------------------------------- /mc2discord-core/src/main/java/fr/denisd3d/mc2discord/core/storage/HiddenPlayerEntry.java: -------------------------------------------------------------------------------- 1 | package fr.denisd3d.mc2discord.core.storage; 2 | 3 | import com.google.gson.JsonObject; 4 | 5 | import java.util.UUID; 6 | 7 | public class HiddenPlayerEntry extends UserStorageEntry { 8 | public HiddenPlayerEntry(UUID playerUuid) { 9 | super(playerUuid); 10 | } 11 | 12 | @Override 13 | protected void serialize(JsonObject data) { 14 | data.addProperty("uuid", this.getPlayerUuid().toString()); 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /mc2discord-core/src/main/java/fr/denisd3d/mc2discord/core/storage/UserStorageEntry.java: -------------------------------------------------------------------------------- 1 | package fr.denisd3d.mc2discord.core.storage; 2 | 3 | import com.google.gson.JsonObject; 4 | 5 | import java.util.UUID; 6 | 7 | public abstract class UserStorageEntry { 8 | private final UUID playerUuid; 9 | public UserStorageEntry(UUID playerUuid) { 10 | this.playerUuid = playerUuid; 11 | } 12 | 13 | public UUID getPlayerUuid() { 14 | return this.playerUuid; 15 | } 16 | 17 | protected abstract void serialize(JsonObject pData); 18 | } 19 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/bug_report.yml: -------------------------------------------------------------------------------- 1 | name: "🐛 Bug report" 2 | description: Report errors or unexpected behavior 3 | labels: 4 | - bug 5 | body: 6 | - type: textarea 7 | attributes: 8 | label: Describe the bug 9 | placeholder: A clear and concise description of what the bug is. 10 | validations: 11 | required: true 12 | 13 | - type: input 14 | attributes: 15 | label: Your config file 16 | placeholder: | 17 | http://m2d.denisd3d.ml/uploads/view?key=xxx 18 | description: | 19 | Must be the link returned by the `/mc2discord upload` command (remove sensitive data) 20 | validations: 21 | required: false 22 | -------------------------------------------------------------------------------- /mc2discord-core/src/main/java/fr/denisd3d/mc2discord/core/entities/MessageEntity.java: -------------------------------------------------------------------------------- 1 | package fr.denisd3d.mc2discord.core.entities; 2 | 3 | import com.vdurmont.emoji.EmojiParser; 4 | 5 | import java.util.Map; 6 | import java.util.function.BiFunction; 7 | 8 | public class MessageEntity extends Entity { 9 | public String message; 10 | 11 | public MessageEntity(String message) { 12 | this.message = EmojiParser.parseToAliases(message); 13 | } 14 | 15 | @Override 16 | public void getReplacements(Map replacements, Map> formatters) { 17 | replacements.put("message", this.message); 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /mc2discord-core/src/main/resources/assets/mc2discord/m2d-lang/core/ru_ru.json: -------------------------------------------------------------------------------- 1 | { 2 | "config.messages.start.value": "Сервер запущен", 3 | "config.messages.stop.value": "Сервер остановлен", 4 | "config.messages.join.value": "${player_display_name} зашел на сервер", 5 | "config.messages.leave.value": "${player_display_name} вышел с сервера", 6 | "config.messages.death.value": "${death_message}", 7 | "config.messages.advancement.value": "${player_display_name} получил достижение ${advancement_title}. ${advancement_description}.", 8 | "config.style.presence.message.value": "${online_players} / ${max_players} игроков", 9 | "config.misc.discord_text.value": "Ссылка на приглашение не установлена" 10 | } -------------------------------------------------------------------------------- /mc2discord-1.18.x/fabric/src/main/java/fr/denisd3d/mc2discord/fabric/events/ServerChatCallback.java: -------------------------------------------------------------------------------- 1 | package fr.denisd3d.mc2discord.fabric.events; 2 | 3 | import net.fabricmc.fabric.api.event.Event; 4 | import net.fabricmc.fabric.api.event.EventFactory; 5 | import net.minecraft.server.level.ServerPlayer; 6 | 7 | public interface ServerChatCallback { 8 | Event EVENT = EventFactory.createArrayBacked(ServerChatCallback.class, (listeners) -> (message, serverPlayer) -> { 9 | for (ServerChatCallback listener : listeners) { 10 | listener.onServerChatMessage(message, serverPlayer); 11 | } 12 | }); 13 | 14 | void onServerChatMessage(String message, ServerPlayer serverPlayer); 15 | } -------------------------------------------------------------------------------- /mc2discord-core/src/main/java/fr/denisd3d/mc2discord/core/config/Features.java: -------------------------------------------------------------------------------- 1 | package fr.denisd3d.mc2discord.core.config; 2 | 3 | import com.electronwill.nightconfig.core.conversion.Path; 4 | import com.electronwill.nightconfig.core.conversion.PreserveNotNull; 5 | import fr.denisd3d.config4j.Comment; 6 | 7 | public class Features { 8 | @Path("status_channels") 9 | @Comment("config.features.status_channels.comment") 10 | @PreserveNotNull 11 | public boolean status_channels = false; 12 | 13 | @Path("account_linking") 14 | @Comment("config.features.account_linking.comment") 15 | @PreserveNotNull 16 | public boolean account_linking = false; 17 | 18 | @Path("comment") 19 | public String comment; 20 | } -------------------------------------------------------------------------------- /mc2discord-1.18.x/fabric/src/main/java/fr/denisd3d/mc2discord/fabric/events/PlayerDeathCallback.java: -------------------------------------------------------------------------------- 1 | package fr.denisd3d.mc2discord.fabric.events; 2 | 3 | import net.fabricmc.fabric.api.event.Event; 4 | import net.fabricmc.fabric.api.event.EventFactory; 5 | import net.minecraft.server.level.ServerPlayer; 6 | import net.minecraft.world.damagesource.DamageSource; 7 | 8 | public interface PlayerDeathCallback { 9 | Event EVENT = EventFactory.createArrayBacked(PlayerDeathCallback.class, (listeners) -> (player, source) -> { 10 | for (PlayerDeathCallback listener : listeners) { 11 | listener.onPlayerDeath(player, source); 12 | } 13 | }); 14 | 15 | void onPlayerDeath(ServerPlayer playerEntity, DamageSource source); 16 | } -------------------------------------------------------------------------------- /mc2discord-1.19.x/fabric/src/main/java/fr/denisd3d/mc2discord/fabric/events/PlayerDeathCallback.java: -------------------------------------------------------------------------------- 1 | package fr.denisd3d.mc2discord.fabric.events; 2 | 3 | import net.fabricmc.fabric.api.event.Event; 4 | import net.fabricmc.fabric.api.event.EventFactory; 5 | import net.minecraft.server.level.ServerPlayer; 6 | import net.minecraft.world.damagesource.DamageSource; 7 | 8 | public interface PlayerDeathCallback { 9 | Event EVENT = EventFactory.createArrayBacked(PlayerDeathCallback.class, (listeners) -> (player, source) -> { 10 | for (PlayerDeathCallback listener : listeners) { 11 | listener.onPlayerDeath(player, source); 12 | } 13 | }); 14 | 15 | void onPlayerDeath(ServerPlayer playerEntity, DamageSource source); 16 | } -------------------------------------------------------------------------------- /mc2discord-1.20.1/fabric/src/main/java/fr/denisd3d/mc2discord/fabric/events/PlayerDeathCallback.java: -------------------------------------------------------------------------------- 1 | package fr.denisd3d.mc2discord.fabric.events; 2 | 3 | import net.fabricmc.fabric.api.event.Event; 4 | import net.fabricmc.fabric.api.event.EventFactory; 5 | import net.minecraft.server.level.ServerPlayer; 6 | import net.minecraft.world.damagesource.DamageSource; 7 | 8 | public interface PlayerDeathCallback { 9 | Event EVENT = EventFactory.createArrayBacked(PlayerDeathCallback.class, (listeners) -> (player, source) -> { 10 | for (PlayerDeathCallback listener : listeners) { 11 | listener.onPlayerDeath(player, source); 12 | } 13 | }); 14 | 15 | void onPlayerDeath(ServerPlayer playerEntity, DamageSource source); 16 | } -------------------------------------------------------------------------------- /mc2discord-1.20.x/fabric/src/main/java/fr/denisd3d/mc2discord/fabric/events/PlayerDeathCallback.java: -------------------------------------------------------------------------------- 1 | package fr.denisd3d.mc2discord.fabric.events; 2 | 3 | import net.fabricmc.fabric.api.event.Event; 4 | import net.fabricmc.fabric.api.event.EventFactory; 5 | import net.minecraft.server.level.ServerPlayer; 6 | import net.minecraft.world.damagesource.DamageSource; 7 | 8 | public interface PlayerDeathCallback { 9 | Event EVENT = EventFactory.createArrayBacked(PlayerDeathCallback.class, (listeners) -> (player, source) -> { 10 | for (PlayerDeathCallback listener : listeners) { 11 | listener.onPlayerDeath(player, source); 12 | } 13 | }); 14 | 15 | void onPlayerDeath(ServerPlayer playerEntity, DamageSource source); 16 | } -------------------------------------------------------------------------------- /mc2discord-1.21.5/fabric/src/main/java/fr/denisd3d/mc2discord/fabric/events/PlayerDeathCallback.java: -------------------------------------------------------------------------------- 1 | package fr.denisd3d.mc2discord.fabric.events; 2 | 3 | import net.fabricmc.fabric.api.event.Event; 4 | import net.fabricmc.fabric.api.event.EventFactory; 5 | import net.minecraft.server.level.ServerPlayer; 6 | import net.minecraft.world.damagesource.DamageSource; 7 | 8 | public interface PlayerDeathCallback { 9 | Event EVENT = EventFactory.createArrayBacked(PlayerDeathCallback.class, (listeners) -> (player, source) -> { 10 | for (PlayerDeathCallback listener : listeners) { 11 | listener.onPlayerDeath(player, source); 12 | } 13 | }); 14 | 15 | void onPlayerDeath(ServerPlayer playerEntity, DamageSource source); 16 | } -------------------------------------------------------------------------------- /mc2discord-1.21.x/fabric/src/main/java/fr/denisd3d/mc2discord/fabric/events/PlayerDeathCallback.java: -------------------------------------------------------------------------------- 1 | package fr.denisd3d.mc2discord.fabric.events; 2 | 3 | import net.fabricmc.fabric.api.event.Event; 4 | import net.fabricmc.fabric.api.event.EventFactory; 5 | import net.minecraft.server.level.ServerPlayer; 6 | import net.minecraft.world.damagesource.DamageSource; 7 | 8 | public interface PlayerDeathCallback { 9 | Event EVENT = EventFactory.createArrayBacked(PlayerDeathCallback.class, (listeners) -> (player, source) -> { 10 | for (PlayerDeathCallback listener : listeners) { 11 | listener.onPlayerDeath(player, source); 12 | } 13 | }); 14 | 15 | void onPlayerDeath(ServerPlayer playerEntity, DamageSource source); 16 | } -------------------------------------------------------------------------------- /mc2discord-1.18.x/common/build.gradle.kts: -------------------------------------------------------------------------------- 1 | plugins { 2 | id("java-library") 3 | id("org.spongepowered.gradle.vanilla") 4 | } 5 | 6 | val sharedProperties = readProperties(file("../../shared.properties")) 7 | 8 | base { 9 | archivesName.set("${sharedProperties["modId"]}-common-${rootProject.extra["minecraftDisplayVersion"]}") 10 | } 11 | 12 | minecraft { 13 | version(rootProject.extra["minecraftVersion"] as String) 14 | accessWideners(file("src/main/resources/${sharedProperties["modId"]}.accesswidener")) 15 | } 16 | 17 | repositories { 18 | maven("https://jitpack.io") 19 | mavenCentral() 20 | } 21 | 22 | dependencies { 23 | compileOnly(group = "org.spongepowered", name = "mixin", version = "0.8.5") 24 | implementation(project(":mc2discord-core")) 25 | } -------------------------------------------------------------------------------- /mc2discord-1.19.x/common/build.gradle.kts: -------------------------------------------------------------------------------- 1 | plugins { 2 | id("java-library") 3 | id("org.spongepowered.gradle.vanilla") 4 | } 5 | 6 | val sharedProperties = readProperties(file("../../shared.properties")) 7 | 8 | base { 9 | archivesName.set("${sharedProperties["modId"]}-common-${rootProject.extra["minecraftDisplayVersion"]}") 10 | } 11 | 12 | minecraft { 13 | version(rootProject.extra["minecraftVersion"] as String) 14 | accessWideners(file("src/main/resources/${sharedProperties["modId"]}.accesswidener")) 15 | } 16 | 17 | repositories { 18 | maven("https://jitpack.io") 19 | mavenCentral() 20 | } 21 | 22 | dependencies { 23 | compileOnly(group = "org.spongepowered", name = "mixin", version = "0.8.5") 24 | implementation(project(":mc2discord-core")) 25 | } -------------------------------------------------------------------------------- /mc2discord-1.20.1/common/build.gradle.kts: -------------------------------------------------------------------------------- 1 | plugins { 2 | id("java-library") 3 | id("org.spongepowered.gradle.vanilla") 4 | } 5 | 6 | val sharedProperties = readProperties(file("../../shared.properties")) 7 | 8 | base { 9 | archivesName.set("${sharedProperties["modId"]}-common-${rootProject.extra["minecraftDisplayVersion"]}") 10 | } 11 | 12 | minecraft { 13 | version(rootProject.extra["minecraftVersion"] as String) 14 | accessWideners(file("src/main/resources/${sharedProperties["modId"]}.accesswidener")) 15 | } 16 | 17 | repositories { 18 | maven("https://jitpack.io") 19 | mavenCentral() 20 | } 21 | 22 | dependencies { 23 | compileOnly(group = "org.spongepowered", name = "mixin", version = "0.8.5") 24 | implementation(project(":mc2discord-core")) 25 | } -------------------------------------------------------------------------------- /mc2discord-1.20.x/common/build.gradle.kts: -------------------------------------------------------------------------------- 1 | plugins { 2 | id("java-library") 3 | id("org.spongepowered.gradle.vanilla") 4 | } 5 | 6 | val sharedProperties = readProperties(file("../../shared.properties")) 7 | 8 | base { 9 | archivesName.set("${sharedProperties["modId"]}-common-${rootProject.extra["minecraftDisplayVersion"]}") 10 | } 11 | 12 | minecraft { 13 | version(rootProject.extra["minecraftVersion"] as String) 14 | accessWideners(file("src/main/resources/${sharedProperties["modId"]}.accesswidener")) 15 | } 16 | 17 | repositories { 18 | maven("https://jitpack.io") 19 | mavenCentral() 20 | } 21 | 22 | dependencies { 23 | compileOnly(group = "org.spongepowered", name = "mixin", version = "0.8.5") 24 | implementation(project(":mc2discord-core")) 25 | } -------------------------------------------------------------------------------- /mc2discord-1.21.5/common/build.gradle.kts: -------------------------------------------------------------------------------- 1 | plugins { 2 | id("java-library") 3 | id("org.spongepowered.gradle.vanilla") 4 | } 5 | 6 | val sharedProperties = readProperties(file("../../shared.properties")) 7 | 8 | base { 9 | archivesName.set("${sharedProperties["modId"]}-common-${rootProject.extra["minecraftDisplayVersion"]}") 10 | } 11 | 12 | minecraft { 13 | version(rootProject.extra["minecraftVersion"] as String) 14 | accessWideners(file("src/main/resources/${sharedProperties["modId"]}.accesswidener")) 15 | } 16 | 17 | repositories { 18 | maven("https://jitpack.io") 19 | mavenCentral() 20 | } 21 | 22 | dependencies { 23 | compileOnly(group = "org.spongepowered", name = "mixin", version = "0.8.5") 24 | implementation(project(":mc2discord-core")) 25 | } -------------------------------------------------------------------------------- /mc2discord-1.21.x/common/build.gradle.kts: -------------------------------------------------------------------------------- 1 | plugins { 2 | id("java-library") 3 | id("org.spongepowered.gradle.vanilla") 4 | } 5 | 6 | val sharedProperties = readProperties(file("../../shared.properties")) 7 | 8 | base { 9 | archivesName.set("${sharedProperties["modId"]}-common-${rootProject.extra["minecraftDisplayVersion"]}") 10 | } 11 | 12 | minecraft { 13 | version(rootProject.extra["minecraftVersion"] as String) 14 | accessWideners(file("src/main/resources/${sharedProperties["modId"]}.accesswidener")) 15 | } 16 | 17 | repositories { 18 | maven("https://jitpack.io") 19 | mavenCentral() 20 | } 21 | 22 | dependencies { 23 | compileOnly(group = "org.spongepowered", name = "mixin", version = "0.8.5") 24 | implementation(project(":mc2discord-core")) 25 | } -------------------------------------------------------------------------------- /mc2discord-core/src/main/java/fr/denisd3d/mc2discord/core/config/converters/RandomString.java: -------------------------------------------------------------------------------- 1 | package fr.denisd3d.mc2discord.core.config.converters; 2 | 3 | import java.util.ArrayList; 4 | import java.util.List; 5 | import java.util.Random; 6 | 7 | public class RandomString { 8 | private final List values; 9 | private final Random rand = new Random(); 10 | 11 | public RandomString(String value) { 12 | this.values = new ArrayList<>(); 13 | this.values.add(value); 14 | } 15 | 16 | public RandomString(List values) { 17 | this.values = values; 18 | } 19 | 20 | public List getValues() { 21 | return values; 22 | } 23 | 24 | public String asString() { 25 | return this.values.get(this.rand.nextInt(this.values.size())); 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /mc2discord-core/src/main/java/fr/denisd3d/mc2discord/core/storage/LinkedPlayerEntry.java: -------------------------------------------------------------------------------- 1 | package fr.denisd3d.mc2discord.core.storage; 2 | 3 | import com.google.gson.JsonObject; 4 | import discord4j.common.util.Snowflake; 5 | 6 | import java.util.UUID; 7 | 8 | public class LinkedPlayerEntry extends UserStorageEntry { 9 | private final Snowflake discordId; 10 | 11 | public LinkedPlayerEntry(UUID playerUuid, Snowflake discordId) { 12 | super(playerUuid); 13 | this.discordId = discordId; 14 | } 15 | 16 | public Snowflake getDiscordId() { 17 | return discordId; 18 | } 19 | 20 | @Override 21 | protected void serialize(JsonObject data) { 22 | data.addProperty("uuid", this.getPlayerUuid().toString()); 23 | data.addProperty("discord_id", this.discordId.asLong()); 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /mc2discord-1.18.x/fabric/src/main/java/fr/denisd3d/mc2discord/fabric/events/PlayerCompletedAdvancementCallback.java: -------------------------------------------------------------------------------- 1 | package fr.denisd3d.mc2discord.fabric.events; 2 | 3 | import net.fabricmc.fabric.api.event.Event; 4 | import net.fabricmc.fabric.api.event.EventFactory; 5 | import net.minecraft.advancements.Advancement; 6 | import net.minecraft.server.level.ServerPlayer; 7 | 8 | public interface PlayerCompletedAdvancementCallback { 9 | Event EVENT = EventFactory.createArrayBacked(PlayerCompletedAdvancementCallback.class, (listeners) -> (player, advancement) -> { 10 | for (PlayerCompletedAdvancementCallback listener : listeners) { 11 | listener.onPlayerAdvancement(player, advancement); 12 | } 13 | }); 14 | 15 | void onPlayerAdvancement(ServerPlayer playerEntity, Advancement advancement); 16 | } -------------------------------------------------------------------------------- /mc2discord-1.19.x/fabric/src/main/java/fr/denisd3d/mc2discord/fabric/events/PlayerCompletedAdvancementCallback.java: -------------------------------------------------------------------------------- 1 | package fr.denisd3d.mc2discord.fabric.events; 2 | 3 | import net.fabricmc.fabric.api.event.Event; 4 | import net.fabricmc.fabric.api.event.EventFactory; 5 | import net.minecraft.advancements.Advancement; 6 | import net.minecraft.server.level.ServerPlayer; 7 | 8 | public interface PlayerCompletedAdvancementCallback { 9 | Event EVENT = EventFactory.createArrayBacked(PlayerCompletedAdvancementCallback.class, (listeners) -> (player, advancement) -> { 10 | for (PlayerCompletedAdvancementCallback listener : listeners) { 11 | listener.onPlayerAdvancement(player, advancement); 12 | } 13 | }); 14 | 15 | void onPlayerAdvancement(ServerPlayer playerEntity, Advancement advancement); 16 | } -------------------------------------------------------------------------------- /mc2discord-1.20.1/fabric/src/main/java/fr/denisd3d/mc2discord/fabric/events/PlayerCompletedAdvancementCallback.java: -------------------------------------------------------------------------------- 1 | package fr.denisd3d.mc2discord.fabric.events; 2 | 3 | import net.fabricmc.fabric.api.event.Event; 4 | import net.fabricmc.fabric.api.event.EventFactory; 5 | import net.minecraft.advancements.Advancement; 6 | import net.minecraft.server.level.ServerPlayer; 7 | 8 | public interface PlayerCompletedAdvancementCallback { 9 | Event EVENT = EventFactory.createArrayBacked(PlayerCompletedAdvancementCallback.class, (listeners) -> (player, advancement) -> { 10 | for (PlayerCompletedAdvancementCallback listener : listeners) { 11 | listener.onPlayerAdvancement(player, advancement); 12 | } 13 | }); 14 | 15 | void onPlayerAdvancement(ServerPlayer playerEntity, Advancement advancement); 16 | } -------------------------------------------------------------------------------- /mc2discord-1.18.x/forge/src/main/resources/META-INF/mods.toml: -------------------------------------------------------------------------------- 1 | modLoader = "javafml" 2 | loaderVersion = "${forgeVersionRange}" 3 | license = "Apache 2.0" 4 | issueTrackerURL = "${modIssueTrackerUrl}" 5 | 6 | [[mods]] 7 | modId = "${modId}" 8 | version = "${modVersion}" 9 | displayName = "${modName}" 10 | updateJSONURL = "${modUpdateJsonUrl}" 11 | displayURL = "${modDisplayUrl}" 12 | #logoFile = "" 13 | #credits = "" 14 | authors = "${modAuthors}" 15 | displayTest = "IGNORE_SERVER_VERSION" 16 | description = '''${modDescription}''' 17 | 18 | [[dependencies.${ modId }]] 19 | modId = "forge" 20 | mandatory = true 21 | versionRange = "${forgeVersionRange}" 22 | ordering = "NONE" 23 | side = "BOTH" 24 | 25 | [[dependencies.${ modId }]] 26 | modId = "minecraft" 27 | mandatory = true 28 | versionRange = "${forgeMinecraftVersionRange}" 29 | ordering = "NONE" 30 | side = "BOTH" 31 | -------------------------------------------------------------------------------- /mc2discord-1.19.x/forge/src/main/resources/META-INF/mods.toml: -------------------------------------------------------------------------------- 1 | modLoader = "javafml" 2 | loaderVersion = "${forgeVersionRange}" 3 | license = "Apache 2.0" 4 | issueTrackerURL = "${modIssueTrackerUrl}" 5 | 6 | [[mods]] 7 | modId = "${modId}" 8 | version = "${modVersion}" 9 | displayName = "${modName}" 10 | updateJSONURL = "${modUpdateJsonUrl}" 11 | displayURL = "${modDisplayUrl}" 12 | #logoFile = "" 13 | #credits = "" 14 | authors = "${modAuthors}" 15 | displayTest = "IGNORE_SERVER_VERSION" 16 | description = '''${modDescription}''' 17 | 18 | [[dependencies.${ modId }]] 19 | modId = "forge" 20 | mandatory = true 21 | versionRange = "${forgeVersionRange}" 22 | ordering = "NONE" 23 | side = "BOTH" 24 | 25 | [[dependencies.${ modId }]] 26 | modId = "minecraft" 27 | mandatory = true 28 | versionRange = "${forgeMinecraftVersionRange}" 29 | ordering = "NONE" 30 | side = "BOTH" 31 | -------------------------------------------------------------------------------- /mc2discord-1.20.1/forge/src/main/resources/META-INF/mods.toml: -------------------------------------------------------------------------------- 1 | modLoader = "javafml" 2 | loaderVersion = "${forgeVersionRange}" 3 | license = "Apache 2.0" 4 | issueTrackerURL = "${modIssueTrackerUrl}" 5 | 6 | [[mods]] 7 | modId = "${modId}" 8 | version = "${modVersion}" 9 | displayName = "${modName}" 10 | updateJSONURL = "${modUpdateJsonUrl}" 11 | displayURL = "${modDisplayUrl}" 12 | #logoFile = "" 13 | #credits = "" 14 | authors = "${modAuthors}" 15 | displayTest = "IGNORE_SERVER_VERSION" 16 | description = '''${modDescription}''' 17 | 18 | [[dependencies.${ modId }]] 19 | modId = "forge" 20 | mandatory = true 21 | versionRange = "${forgeVersionRange}" 22 | ordering = "NONE" 23 | side = "BOTH" 24 | 25 | [[dependencies.${ modId }]] 26 | modId = "minecraft" 27 | mandatory = true 28 | versionRange = "${forgeMinecraftVersionRange}" 29 | ordering = "NONE" 30 | side = "BOTH" 31 | -------------------------------------------------------------------------------- /mc2discord-1.20.x/forge/src/main/resources/META-INF/mods.toml: -------------------------------------------------------------------------------- 1 | modLoader = "javafml" 2 | loaderVersion = "${forgeVersionRange}" 3 | license = "Apache 2.0" 4 | issueTrackerURL = "${modIssueTrackerUrl}" 5 | 6 | [[mods]] 7 | modId = "${modId}" 8 | version = "${modVersion}" 9 | displayName = "${modName}" 10 | updateJSONURL = "${modUpdateJsonUrl}" 11 | displayURL = "${modDisplayUrl}" 12 | #logoFile = "" 13 | #credits = "" 14 | authors = "${modAuthors}" 15 | displayTest = "IGNORE_SERVER_VERSION" 16 | description = '''${modDescription}''' 17 | 18 | [[dependencies.${ modId }]] 19 | modId = "forge" 20 | mandatory = true 21 | versionRange = "${forgeVersionRange}" 22 | ordering = "NONE" 23 | side = "BOTH" 24 | 25 | [[dependencies.${ modId }]] 26 | modId = "minecraft" 27 | mandatory = true 28 | versionRange = "${forgeMinecraftVersionRange}" 29 | ordering = "NONE" 30 | side = "BOTH" 31 | -------------------------------------------------------------------------------- /mc2discord-1.21.5/forge/src/main/resources/META-INF/mods.toml: -------------------------------------------------------------------------------- 1 | modLoader = "javafml" 2 | loaderVersion = "${forgeVersionRange}" 3 | license = "Apache 2.0" 4 | issueTrackerURL = "${modIssueTrackerUrl}" 5 | 6 | [[mods]] 7 | modId = "${modId}" 8 | version = "${modVersion}" 9 | displayName = "${modName}" 10 | updateJSONURL = "${modUpdateJsonUrl}" 11 | displayURL = "${modDisplayUrl}" 12 | #logoFile = "" 13 | #credits = "" 14 | authors = "${modAuthors}" 15 | displayTest = "IGNORE_SERVER_VERSION" 16 | description = '''${modDescription}''' 17 | 18 | [[dependencies.${ modId }]] 19 | modId = "forge" 20 | mandatory = true 21 | versionRange = "${forgeVersionRange}" 22 | ordering = "NONE" 23 | side = "BOTH" 24 | 25 | [[dependencies.${ modId }]] 26 | modId = "minecraft" 27 | mandatory = true 28 | versionRange = "${forgeMinecraftVersionRange}" 29 | ordering = "NONE" 30 | side = "BOTH" 31 | -------------------------------------------------------------------------------- /mc2discord-1.21.x/forge/src/main/resources/META-INF/mods.toml: -------------------------------------------------------------------------------- 1 | modLoader = "javafml" 2 | loaderVersion = "${forgeVersionRange}" 3 | license = "Apache 2.0" 4 | issueTrackerURL = "${modIssueTrackerUrl}" 5 | 6 | [[mods]] 7 | modId = "${modId}" 8 | version = "${modVersion}" 9 | displayName = "${modName}" 10 | updateJSONURL = "${modUpdateJsonUrl}" 11 | displayURL = "${modDisplayUrl}" 12 | #logoFile = "" 13 | #credits = "" 14 | authors = "${modAuthors}" 15 | displayTest = "IGNORE_SERVER_VERSION" 16 | description = '''${modDescription}''' 17 | 18 | [[dependencies.${ modId }]] 19 | modId = "forge" 20 | mandatory = true 21 | versionRange = "${forgeVersionRange}" 22 | ordering = "NONE" 23 | side = "BOTH" 24 | 25 | [[dependencies.${ modId }]] 26 | modId = "minecraft" 27 | mandatory = true 28 | versionRange = "${forgeMinecraftVersionRange}" 29 | ordering = "NONE" 30 | side = "BOTH" 31 | -------------------------------------------------------------------------------- /mc2discord-1.20.x/fabric/src/main/java/fr/denisd3d/mc2discord/fabric/events/PlayerCompletedAdvancementCallback.java: -------------------------------------------------------------------------------- 1 | package fr.denisd3d.mc2discord.fabric.events; 2 | 3 | import net.fabricmc.fabric.api.event.Event; 4 | import net.fabricmc.fabric.api.event.EventFactory; 5 | import net.minecraft.advancements.AdvancementHolder; 6 | import net.minecraft.server.level.ServerPlayer; 7 | 8 | public interface PlayerCompletedAdvancementCallback { 9 | Event EVENT = EventFactory.createArrayBacked(PlayerCompletedAdvancementCallback.class, (listeners) -> (player, advancement) -> { 10 | for (PlayerCompletedAdvancementCallback listener : listeners) { 11 | listener.onPlayerAdvancement(player, advancement); 12 | } 13 | }); 14 | 15 | void onPlayerAdvancement(ServerPlayer playerEntity, AdvancementHolder advancement); 16 | } -------------------------------------------------------------------------------- /mc2discord-1.21.5/fabric/src/main/java/fr/denisd3d/mc2discord/fabric/events/PlayerCompletedAdvancementCallback.java: -------------------------------------------------------------------------------- 1 | package fr.denisd3d.mc2discord.fabric.events; 2 | 3 | import net.fabricmc.fabric.api.event.Event; 4 | import net.fabricmc.fabric.api.event.EventFactory; 5 | import net.minecraft.advancements.AdvancementHolder; 6 | import net.minecraft.server.level.ServerPlayer; 7 | 8 | public interface PlayerCompletedAdvancementCallback { 9 | Event EVENT = EventFactory.createArrayBacked(PlayerCompletedAdvancementCallback.class, (listeners) -> (player, advancement) -> { 10 | for (PlayerCompletedAdvancementCallback listener : listeners) { 11 | listener.onPlayerAdvancement(player, advancement); 12 | } 13 | }); 14 | 15 | void onPlayerAdvancement(ServerPlayer playerEntity, AdvancementHolder advancement); 16 | } -------------------------------------------------------------------------------- /mc2discord-1.21.x/fabric/src/main/java/fr/denisd3d/mc2discord/fabric/events/PlayerCompletedAdvancementCallback.java: -------------------------------------------------------------------------------- 1 | package fr.denisd3d.mc2discord.fabric.events; 2 | 3 | import net.fabricmc.fabric.api.event.Event; 4 | import net.fabricmc.fabric.api.event.EventFactory; 5 | import net.minecraft.advancements.AdvancementHolder; 6 | import net.minecraft.server.level.ServerPlayer; 7 | 8 | public interface PlayerCompletedAdvancementCallback { 9 | Event EVENT = EventFactory.createArrayBacked(PlayerCompletedAdvancementCallback.class, (listeners) -> (player, advancement) -> { 10 | for (PlayerCompletedAdvancementCallback listener : listeners) { 11 | listener.onPlayerAdvancement(player, advancement); 12 | } 13 | }); 14 | 15 | void onPlayerAdvancement(ServerPlayer playerEntity, AdvancementHolder advancement); 16 | } -------------------------------------------------------------------------------- /mc2discord-core/src/main/java/fr/denisd3d/mc2discord/core/storage/HiddenPlayerList.java: -------------------------------------------------------------------------------- 1 | package fr.denisd3d.mc2discord.core.storage; 2 | 3 | import com.google.gson.JsonObject; 4 | 5 | import java.io.File; 6 | import java.io.IOException; 7 | import java.util.UUID; 8 | 9 | public class HiddenPlayerList extends UserStorageList { 10 | private static final File HIDDEN_PLAYERS_FILE = new File("m2d-hidden-players.json"); 11 | 12 | public HiddenPlayerList() { 13 | super(HIDDEN_PLAYERS_FILE); 14 | 15 | try { 16 | this.load(); 17 | } catch (IOException e) { 18 | throw new RuntimeException(e); 19 | } 20 | } 21 | 22 | @Override 23 | protected HiddenPlayerEntry createEntry(JsonObject entryData) { 24 | return new HiddenPlayerEntry(UUID.fromString(entryData.get("uuid").getAsString())); 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /mc2discord-1.18.x/fabric/src/main/java/fr/denisd3d/mc2discord/fabric/mixin/ServerPlayerMixin.java: -------------------------------------------------------------------------------- 1 | package fr.denisd3d.mc2discord.fabric.mixin; 2 | 3 | import fr.denisd3d.mc2discord.fabric.events.PlayerDeathCallback; 4 | import net.minecraft.server.level.ServerPlayer; 5 | import net.minecraft.world.damagesource.DamageSource; 6 | import org.spongepowered.asm.mixin.Mixin; 7 | import org.spongepowered.asm.mixin.injection.At; 8 | import org.spongepowered.asm.mixin.injection.Inject; 9 | import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; 10 | 11 | @Mixin(ServerPlayer.class) 12 | public class ServerPlayerMixin { 13 | 14 | @Inject(method = "die", at = @At(value = "TAIL")) 15 | private void onPlayerDeath(DamageSource damageSource, CallbackInfo ci) { 16 | ServerPlayer player = (ServerPlayer) (Object) this; 17 | PlayerDeathCallback.EVENT.invoker().onPlayerDeath(player, damageSource); 18 | } 19 | } -------------------------------------------------------------------------------- /mc2discord-1.19.x/fabric/src/main/java/fr/denisd3d/mc2discord/fabric/mixin/ServerPlayerMixin.java: -------------------------------------------------------------------------------- 1 | package fr.denisd3d.mc2discord.fabric.mixin; 2 | 3 | import fr.denisd3d.mc2discord.fabric.events.PlayerDeathCallback; 4 | import net.minecraft.server.level.ServerPlayer; 5 | import net.minecraft.world.damagesource.DamageSource; 6 | import org.spongepowered.asm.mixin.Mixin; 7 | import org.spongepowered.asm.mixin.injection.At; 8 | import org.spongepowered.asm.mixin.injection.Inject; 9 | import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; 10 | 11 | @Mixin(ServerPlayer.class) 12 | public class ServerPlayerMixin { 13 | 14 | @Inject(method = "die", at = @At(value = "TAIL")) 15 | private void onPlayerDeath(DamageSource damageSource, CallbackInfo ci) { 16 | ServerPlayer player = (ServerPlayer) (Object) this; 17 | PlayerDeathCallback.EVENT.invoker().onPlayerDeath(player, damageSource); 18 | } 19 | } -------------------------------------------------------------------------------- /mc2discord-1.20.1/fabric/src/main/java/fr/denisd3d/mc2discord/fabric/mixin/ServerPlayerMixin.java: -------------------------------------------------------------------------------- 1 | package fr.denisd3d.mc2discord.fabric.mixin; 2 | 3 | import fr.denisd3d.mc2discord.fabric.events.PlayerDeathCallback; 4 | import net.minecraft.server.level.ServerPlayer; 5 | import net.minecraft.world.damagesource.DamageSource; 6 | import org.spongepowered.asm.mixin.Mixin; 7 | import org.spongepowered.asm.mixin.injection.At; 8 | import org.spongepowered.asm.mixin.injection.Inject; 9 | import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; 10 | 11 | @Mixin(ServerPlayer.class) 12 | public class ServerPlayerMixin { 13 | 14 | @Inject(method = "die", at = @At(value = "TAIL")) 15 | private void onPlayerDeath(DamageSource damageSource, CallbackInfo ci) { 16 | ServerPlayer player = (ServerPlayer) (Object) this; 17 | PlayerDeathCallback.EVENT.invoker().onPlayerDeath(player, damageSource); 18 | } 19 | } -------------------------------------------------------------------------------- /mc2discord-1.20.x/fabric/src/main/java/fr/denisd3d/mc2discord/fabric/mixin/ServerPlayerMixin.java: -------------------------------------------------------------------------------- 1 | package fr.denisd3d.mc2discord.fabric.mixin; 2 | 3 | import fr.denisd3d.mc2discord.fabric.events.PlayerDeathCallback; 4 | import net.minecraft.server.level.ServerPlayer; 5 | import net.minecraft.world.damagesource.DamageSource; 6 | import org.spongepowered.asm.mixin.Mixin; 7 | import org.spongepowered.asm.mixin.injection.At; 8 | import org.spongepowered.asm.mixin.injection.Inject; 9 | import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; 10 | 11 | @Mixin(ServerPlayer.class) 12 | public class ServerPlayerMixin { 13 | 14 | @Inject(method = "die", at = @At(value = "TAIL")) 15 | private void onPlayerDeath(DamageSource damageSource, CallbackInfo ci) { 16 | ServerPlayer player = (ServerPlayer) (Object) this; 17 | PlayerDeathCallback.EVENT.invoker().onPlayerDeath(player, damageSource); 18 | } 19 | } -------------------------------------------------------------------------------- /mc2discord-1.21.5/fabric/src/main/java/fr/denisd3d/mc2discord/fabric/mixin/ServerPlayerMixin.java: -------------------------------------------------------------------------------- 1 | package fr.denisd3d.mc2discord.fabric.mixin; 2 | 3 | import fr.denisd3d.mc2discord.fabric.events.PlayerDeathCallback; 4 | import net.minecraft.server.level.ServerPlayer; 5 | import net.minecraft.world.damagesource.DamageSource; 6 | import org.spongepowered.asm.mixin.Mixin; 7 | import org.spongepowered.asm.mixin.injection.At; 8 | import org.spongepowered.asm.mixin.injection.Inject; 9 | import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; 10 | 11 | @Mixin(ServerPlayer.class) 12 | public class ServerPlayerMixin { 13 | 14 | @Inject(method = "die", at = @At(value = "TAIL")) 15 | private void onPlayerDeath(DamageSource damageSource, CallbackInfo ci) { 16 | ServerPlayer player = (ServerPlayer) (Object) this; 17 | PlayerDeathCallback.EVENT.invoker().onPlayerDeath(player, damageSource); 18 | } 19 | } -------------------------------------------------------------------------------- /mc2discord-1.21.x/fabric/src/main/java/fr/denisd3d/mc2discord/fabric/mixin/ServerPlayerMixin.java: -------------------------------------------------------------------------------- 1 | package fr.denisd3d.mc2discord.fabric.mixin; 2 | 3 | import fr.denisd3d.mc2discord.fabric.events.PlayerDeathCallback; 4 | import net.minecraft.server.level.ServerPlayer; 5 | import net.minecraft.world.damagesource.DamageSource; 6 | import org.spongepowered.asm.mixin.Mixin; 7 | import org.spongepowered.asm.mixin.injection.At; 8 | import org.spongepowered.asm.mixin.injection.Inject; 9 | import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; 10 | 11 | @Mixin(ServerPlayer.class) 12 | public class ServerPlayerMixin { 13 | 14 | @Inject(method = "die", at = @At(value = "TAIL")) 15 | private void onPlayerDeath(DamageSource damageSource, CallbackInfo ci) { 16 | ServerPlayer player = (ServerPlayer) (Object) this; 17 | PlayerDeathCallback.EVENT.invoker().onPlayerDeath(player, damageSource); 18 | } 19 | } -------------------------------------------------------------------------------- /mc2discord-1.18.x/fabric/src/main/resources/fabric.mod.json: -------------------------------------------------------------------------------- 1 | { 2 | "schemaVersion": 1, 3 | "id": "${modId}", 4 | "version": "${modVersion}", 5 | "name": "${modName}", 6 | "description": "${modDescription}", 7 | "authors": [ 8 | "${modAuthors}" 9 | ], 10 | "contact": { 11 | "homepage": "${modDisplayUrl}" 12 | }, 13 | "license": "Apache 2.0", 14 | "environment": "*", 15 | "entrypoints": { 16 | "main": [ 17 | "fr.denisd3d.mc2discord.fabric.Mc2DiscordFabric" 18 | ] 19 | }, 20 | "mixins": [ 21 | "mc2discord.mixins.json", 22 | "mc2discord.fabric.mixins.json" 23 | ], 24 | "accessWidener" : "${modId}.accesswidener", 25 | "depends": { 26 | "fabricloader": ">=${fabricLoaderVersion}", 27 | "minecraft": "${fabricMinecraftVersionRange}", 28 | "java": ">=${javaVersion}", 29 | "fabric-api": "*" 30 | } 31 | } -------------------------------------------------------------------------------- /mc2discord-1.19.x/fabric/src/main/resources/fabric.mod.json: -------------------------------------------------------------------------------- 1 | { 2 | "schemaVersion": 1, 3 | "id": "${modId}", 4 | "version": "${modVersion}", 5 | "name": "${modName}", 6 | "description": "${modDescription}", 7 | "authors": [ 8 | "${modAuthors}" 9 | ], 10 | "contact": { 11 | "homepage": "${modDisplayUrl}" 12 | }, 13 | "license": "Apache 2.0", 14 | "environment": "*", 15 | "entrypoints": { 16 | "main": [ 17 | "fr.denisd3d.mc2discord.fabric.Mc2DiscordFabric" 18 | ] 19 | }, 20 | "mixins": [ 21 | "mc2discord.mixins.json", 22 | "mc2discord.fabric.mixins.json" 23 | ], 24 | "accessWidener" : "${modId}.accesswidener", 25 | "depends": { 26 | "fabricloader": ">=${fabricLoaderVersion}", 27 | "minecraft": "${fabricMinecraftVersionRange}", 28 | "java": ">=${javaVersion}", 29 | "fabric-api": "*" 30 | } 31 | } -------------------------------------------------------------------------------- /mc2discord-1.20.1/fabric/src/main/resources/fabric.mod.json: -------------------------------------------------------------------------------- 1 | { 2 | "schemaVersion": 1, 3 | "id": "${modId}", 4 | "version": "${modVersion}", 5 | "name": "${modName}", 6 | "description": "${modDescription}", 7 | "authors": [ 8 | "${modAuthors}" 9 | ], 10 | "contact": { 11 | "homepage": "${modDisplayUrl}" 12 | }, 13 | "license": "Apache 2.0", 14 | "environment": "*", 15 | "entrypoints": { 16 | "main": [ 17 | "fr.denisd3d.mc2discord.fabric.Mc2DiscordFabric" 18 | ] 19 | }, 20 | "mixins": [ 21 | "mc2discord.mixins.json", 22 | "mc2discord.fabric.mixins.json" 23 | ], 24 | "accessWidener" : "${modId}.accesswidener", 25 | "depends": { 26 | "fabricloader": ">=${fabricLoaderVersion}", 27 | "minecraft": "${fabricMinecraftVersionRange}", 28 | "java": ">=${javaVersion}", 29 | "fabric-api": "*" 30 | } 31 | } -------------------------------------------------------------------------------- /mc2discord-1.20.x/fabric/src/main/resources/fabric.mod.json: -------------------------------------------------------------------------------- 1 | { 2 | "schemaVersion": 1, 3 | "id": "${modId}", 4 | "version": "${modVersion}", 5 | "name": "${modName}", 6 | "description": "${modDescription}", 7 | "authors": [ 8 | "${modAuthors}" 9 | ], 10 | "contact": { 11 | "homepage": "${modDisplayUrl}" 12 | }, 13 | "license": "Apache 2.0", 14 | "environment": "*", 15 | "entrypoints": { 16 | "main": [ 17 | "fr.denisd3d.mc2discord.fabric.Mc2DiscordFabric" 18 | ] 19 | }, 20 | "mixins": [ 21 | "mc2discord.mixins.json", 22 | "mc2discord.fabric.mixins.json" 23 | ], 24 | "accessWidener" : "${modId}.accesswidener", 25 | "depends": { 26 | "fabricloader": ">=${fabricLoaderVersion}", 27 | "minecraft": "${fabricMinecraftVersionRange}", 28 | "java": ">=${javaVersion}", 29 | "fabric-api": "*" 30 | } 31 | } -------------------------------------------------------------------------------- /mc2discord-1.21.5/fabric/src/main/resources/fabric.mod.json: -------------------------------------------------------------------------------- 1 | { 2 | "schemaVersion": 1, 3 | "id": "${modId}", 4 | "version": "${modVersion}", 5 | "name": "${modName}", 6 | "description": "${modDescription}", 7 | "authors": [ 8 | "${modAuthors}" 9 | ], 10 | "contact": { 11 | "homepage": "${modDisplayUrl}" 12 | }, 13 | "license": "Apache 2.0", 14 | "environment": "*", 15 | "entrypoints": { 16 | "main": [ 17 | "fr.denisd3d.mc2discord.fabric.Mc2DiscordFabric" 18 | ] 19 | }, 20 | "mixins": [ 21 | "mc2discord.mixins.json", 22 | "mc2discord.fabric.mixins.json" 23 | ], 24 | "accessWidener" : "${modId}.accesswidener", 25 | "depends": { 26 | "fabricloader": ">=${fabricLoaderVersion}", 27 | "minecraft": "${fabricMinecraftVersionRange}", 28 | "java": ">=${javaVersion}", 29 | "fabric-api": "*" 30 | } 31 | } -------------------------------------------------------------------------------- /mc2discord-1.21.x/fabric/src/main/resources/fabric.mod.json: -------------------------------------------------------------------------------- 1 | { 2 | "schemaVersion": 1, 3 | "id": "${modId}", 4 | "version": "${modVersion}", 5 | "name": "${modName}", 6 | "description": "${modDescription}", 7 | "authors": [ 8 | "${modAuthors}" 9 | ], 10 | "contact": { 11 | "homepage": "${modDisplayUrl}" 12 | }, 13 | "license": "Apache 2.0", 14 | "environment": "*", 15 | "entrypoints": { 16 | "main": [ 17 | "fr.denisd3d.mc2discord.fabric.Mc2DiscordFabric" 18 | ] 19 | }, 20 | "mixins": [ 21 | "mc2discord.mixins.json", 22 | "mc2discord.fabric.mixins.json" 23 | ], 24 | "accessWidener" : "${modId}.accesswidener", 25 | "depends": { 26 | "fabricloader": ">=${fabricLoaderVersion}", 27 | "minecraft": "${fabricMinecraftVersionRange}", 28 | "java": ">=${javaVersion}", 29 | "fabric-api": "*" 30 | } 31 | } -------------------------------------------------------------------------------- /mc2discord-core/src/main/java/fr/denisd3d/mc2discord/core/storage/LinkedPlayerList.java: -------------------------------------------------------------------------------- 1 | package fr.denisd3d.mc2discord.core.storage; 2 | 3 | import com.google.gson.JsonObject; 4 | import discord4j.common.util.Snowflake; 5 | 6 | import java.io.File; 7 | import java.io.IOException; 8 | import java.util.UUID; 9 | 10 | public class LinkedPlayerList extends UserStorageList { 11 | private static final File LINKED_PLAYERS_FILE = new File("m2d-linked-players.json"); 12 | 13 | public LinkedPlayerList() { 14 | super(LINKED_PLAYERS_FILE); 15 | 16 | try { 17 | this.load(); 18 | } catch (IOException e) { 19 | throw new RuntimeException(e); 20 | } 21 | } 22 | 23 | @Override 24 | protected LinkedPlayerEntry createEntry(JsonObject entryData) { 25 | return new LinkedPlayerEntry(UUID.fromString(entryData.get("uuid").getAsString()), Snowflake.of(entryData.get("discord_id").getAsLong())); 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /mc2discord-1.18.x/fabric/src/main/java/fr/denisd3d/mc2discord/fabric/Mc2DiscordFabric.java: -------------------------------------------------------------------------------- 1 | package fr.denisd3d.mc2discord.fabric; 2 | 3 | import fr.denisd3d.mc2discord.minecraft.Mc2DiscordMinecraft; 4 | import net.fabricmc.api.ModInitializer; 5 | import net.fabricmc.fabric.api.command.v1.CommandRegistrationCallback; 6 | import net.fabricmc.fabric.api.event.lifecycle.v1.ServerLifecycleEvents; 7 | 8 | 9 | public class Mc2DiscordFabric implements ModInitializer { 10 | @Override 11 | public void onInitialize() { 12 | ServerLifecycleEvents.SERVER_STARTING.register(Mc2DiscordMinecraft::onServerStarting); 13 | ServerLifecycleEvents.SERVER_STARTED.register(Mc2DiscordMinecraft::onServerStarted); 14 | ServerLifecycleEvents.SERVER_STOPPED.register(Mc2DiscordMinecraft::onServerStopped); 15 | CommandRegistrationCallback.EVENT.register((dispatcher, dedicated) -> Mc2DiscordMinecraft.onRegisterCommands(dispatcher)); 16 | 17 | FabricEvents.register(); 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /mc2discord-1.18.x/settings.gradle: -------------------------------------------------------------------------------- 1 | pluginManagement { 2 | repositories { 3 | gradlePluginPortal() 4 | maven { 5 | name = 'Forge' 6 | url = 'https://maven.minecraftforge.net/' 7 | } 8 | maven { 9 | name = 'Fabric' 10 | url = 'https://maven.fabricmc.net/' 11 | } 12 | maven { 13 | name = 'Sponge Snapshots' 14 | url = 'https://repo.spongepowered.org/repository/maven-public/' 15 | } 16 | } 17 | } 18 | 19 | plugins { 20 | id("org.gradle.toolchains.foojay-resolver-convention") version("0.5.0") 21 | } 22 | 23 | // This should match the folder name of the project, or else IDEA may complain (see https://youtrack.jetbrains.com/issue/IDEA-317606) 24 | rootProject.name = 'mc2discord-1.18.x' 25 | include(":mc2discord-core") 26 | project(":mc2discord-core").projectDir = file("../mc2discord-core") 27 | 28 | include("common") 29 | include("fabric") 30 | include("forge") 31 | -------------------------------------------------------------------------------- /mc2discord-1.19.x/fabric/src/main/java/fr/denisd3d/mc2discord/fabric/Mc2DiscordFabric.java: -------------------------------------------------------------------------------- 1 | package fr.denisd3d.mc2discord.fabric; 2 | 3 | import fr.denisd3d.mc2discord.minecraft.Mc2DiscordMinecraft; 4 | import net.fabricmc.api.ModInitializer; 5 | import net.fabricmc.fabric.api.command.v2.CommandRegistrationCallback; 6 | import net.fabricmc.fabric.api.event.lifecycle.v1.ServerLifecycleEvents; 7 | 8 | 9 | public class Mc2DiscordFabric implements ModInitializer { 10 | @Override 11 | public void onInitialize() { 12 | ServerLifecycleEvents.SERVER_STARTING.register(Mc2DiscordMinecraft::onServerStarting); 13 | ServerLifecycleEvents.SERVER_STARTED.register(Mc2DiscordMinecraft::onServerStarted); 14 | ServerLifecycleEvents.SERVER_STOPPED.register(Mc2DiscordMinecraft::onServerStopped); 15 | CommandRegistrationCallback.EVENT.register((dispatcher, registryAccess, environment) -> Mc2DiscordMinecraft.onRegisterCommands(dispatcher)); 16 | 17 | FabricEvents.register(); 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /mc2discord-1.19.x/settings.gradle: -------------------------------------------------------------------------------- 1 | pluginManagement { 2 | repositories { 3 | gradlePluginPortal() 4 | maven { 5 | name = 'Forge' 6 | url = 'https://maven.minecraftforge.net/' 7 | } 8 | maven { 9 | name = 'Fabric' 10 | url = 'https://maven.fabricmc.net/' 11 | } 12 | maven { 13 | name = 'Sponge Snapshots' 14 | url = 'https://repo.spongepowered.org/repository/maven-public/' 15 | } 16 | } 17 | } 18 | 19 | plugins { 20 | id("org.gradle.toolchains.foojay-resolver-convention") version("0.5.0") 21 | } 22 | 23 | // This should match the folder name of the project, or else IDEA may complain (see https://youtrack.jetbrains.com/issue/IDEA-317606) 24 | rootProject.name = 'mc2discord-1.19.x' 25 | include(":mc2discord-core") 26 | project(":mc2discord-core").projectDir = file("../mc2discord-core") 27 | 28 | include("common") 29 | include("fabric") 30 | include("forge") 31 | -------------------------------------------------------------------------------- /mc2discord-1.20.1/fabric/src/main/java/fr/denisd3d/mc2discord/fabric/Mc2DiscordFabric.java: -------------------------------------------------------------------------------- 1 | package fr.denisd3d.mc2discord.fabric; 2 | 3 | import fr.denisd3d.mc2discord.minecraft.Mc2DiscordMinecraft; 4 | import net.fabricmc.api.ModInitializer; 5 | import net.fabricmc.fabric.api.command.v2.CommandRegistrationCallback; 6 | import net.fabricmc.fabric.api.event.lifecycle.v1.ServerLifecycleEvents; 7 | 8 | 9 | public class Mc2DiscordFabric implements ModInitializer { 10 | @Override 11 | public void onInitialize() { 12 | ServerLifecycleEvents.SERVER_STARTING.register(Mc2DiscordMinecraft::onServerStarting); 13 | ServerLifecycleEvents.SERVER_STARTED.register(Mc2DiscordMinecraft::onServerStarted); 14 | ServerLifecycleEvents.SERVER_STOPPED.register(Mc2DiscordMinecraft::onServerStopped); 15 | CommandRegistrationCallback.EVENT.register((dispatcher, registryAccess, environment) -> Mc2DiscordMinecraft.onRegisterCommands(dispatcher)); 16 | 17 | FabricEvents.register(); 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /mc2discord-1.20.1/settings.gradle: -------------------------------------------------------------------------------- 1 | pluginManagement { 2 | repositories { 3 | gradlePluginPortal() 4 | maven { 5 | name = 'Forge' 6 | url = 'https://maven.minecraftforge.net/' 7 | } 8 | maven { 9 | name = 'Fabric' 10 | url = 'https://maven.fabricmc.net/' 11 | } 12 | maven { 13 | name = 'Sponge Snapshots' 14 | url = 'https://repo.spongepowered.org/repository/maven-public/' 15 | } 16 | } 17 | } 18 | 19 | plugins { 20 | id("org.gradle.toolchains.foojay-resolver-convention") version("0.5.0") 21 | } 22 | 23 | // This should match the folder name of the project, or else IDEA may complain (see https://youtrack.jetbrains.com/issue/IDEA-317606) 24 | rootProject.name = 'mc2discord-1.20.1' 25 | include(":mc2discord-core") 26 | project(":mc2discord-core").projectDir = file("../mc2discord-core") 27 | 28 | include("common") 29 | include("fabric") 30 | include("forge") 31 | -------------------------------------------------------------------------------- /mc2discord-1.20.x/settings.gradle: -------------------------------------------------------------------------------- 1 | pluginManagement { 2 | repositories { 3 | gradlePluginPortal() 4 | maven { 5 | name = 'Forge' 6 | url = 'https://maven.minecraftforge.net/' 7 | } 8 | maven { 9 | name = 'Fabric' 10 | url = 'https://maven.fabricmc.net/' 11 | } 12 | maven { 13 | name = 'Sponge Snapshots' 14 | url = 'https://repo.spongepowered.org/repository/maven-public/' 15 | } 16 | } 17 | } 18 | 19 | plugins { 20 | id("org.gradle.toolchains.foojay-resolver-convention") version("0.8.0") 21 | } 22 | 23 | // This should match the folder name of the project, or else IDEA may complain (see https://youtrack.jetbrains.com/issue/IDEA-317606) 24 | rootProject.name = 'mc2discord-1.20.x' 25 | include(":mc2discord-core") 26 | project(":mc2discord-core").projectDir = file("../mc2discord-core") 27 | 28 | include("common") 29 | include("fabric") 30 | include("forge") 31 | -------------------------------------------------------------------------------- /mc2discord-1.21.5/settings.gradle: -------------------------------------------------------------------------------- 1 | pluginManagement { 2 | repositories { 3 | gradlePluginPortal() 4 | maven { 5 | name = 'Forge' 6 | url = 'https://maven.minecraftforge.net/' 7 | } 8 | maven { 9 | name = 'Fabric' 10 | url = 'https://maven.fabricmc.net/' 11 | } 12 | maven { 13 | name = 'Sponge Snapshots' 14 | url = 'https://repo.spongepowered.org/repository/maven-public/' 15 | } 16 | } 17 | } 18 | 19 | plugins { 20 | id("org.gradle.toolchains.foojay-resolver-convention") version("0.8.0") 21 | } 22 | 23 | // This should match the folder name of the project, or else IDEA may complain (see https://youtrack.jetbrains.com/issue/IDEA-317606) 24 | rootProject.name = 'mc2discord-1.21.x' 25 | include(":mc2discord-core") 26 | project(":mc2discord-core").projectDir = file("../mc2discord-core") 27 | 28 | include("common") 29 | include("fabric") 30 | include("forge") 31 | -------------------------------------------------------------------------------- /mc2discord-1.21.x/settings.gradle: -------------------------------------------------------------------------------- 1 | pluginManagement { 2 | repositories { 3 | gradlePluginPortal() 4 | maven { 5 | name = 'Forge' 6 | url = 'https://maven.minecraftforge.net/' 7 | } 8 | maven { 9 | name = 'Fabric' 10 | url = 'https://maven.fabricmc.net/' 11 | } 12 | maven { 13 | name = 'Sponge Snapshots' 14 | url = 'https://repo.spongepowered.org/repository/maven-public/' 15 | } 16 | } 17 | } 18 | 19 | plugins { 20 | id("org.gradle.toolchains.foojay-resolver-convention") version("0.8.0") 21 | } 22 | 23 | // This should match the folder name of the project, or else IDEA may complain (see https://youtrack.jetbrains.com/issue/IDEA-317606) 24 | rootProject.name = 'mc2discord-1.21.x' 25 | include(":mc2discord-core") 26 | project(":mc2discord-core").projectDir = file("../mc2discord-core") 27 | 28 | include("common") 29 | include("fabric") 30 | include("forge") 31 | -------------------------------------------------------------------------------- /mc2discord-1.18.x/fabric/src/main/java/fr/denisd3d/mc2discord/fabric/events/CommandExecuteCallback.java: -------------------------------------------------------------------------------- 1 | package fr.denisd3d.mc2discord.fabric.events; 2 | 3 | import com.mojang.brigadier.ParseResults; 4 | import net.fabricmc.fabric.api.event.Event; 5 | import net.fabricmc.fabric.api.event.EventFactory; 6 | import net.minecraft.commands.CommandSourceStack; 7 | import net.minecraft.world.InteractionResult; 8 | 9 | public interface CommandExecuteCallback { 10 | Event EVENT = EventFactory.createArrayBacked(CommandExecuteCallback.class, (listeners) -> (parseResults) -> { 11 | for (CommandExecuteCallback listener : listeners) { 12 | InteractionResult result = listener.onCommandExecute(parseResults); 13 | 14 | if(result != InteractionResult.PASS) { 15 | return result; 16 | } 17 | } 18 | 19 | return InteractionResult.PASS; 20 | }); 21 | 22 | InteractionResult onCommandExecute(ParseResults parseResults); 23 | } -------------------------------------------------------------------------------- /mc2discord-1.19.x/fabric/src/main/java/fr/denisd3d/mc2discord/fabric/events/CommandExecuteCallback.java: -------------------------------------------------------------------------------- 1 | package fr.denisd3d.mc2discord.fabric.events; 2 | 3 | import com.mojang.brigadier.ParseResults; 4 | import net.fabricmc.fabric.api.event.Event; 5 | import net.fabricmc.fabric.api.event.EventFactory; 6 | import net.minecraft.commands.CommandSourceStack; 7 | import net.minecraft.world.InteractionResult; 8 | 9 | public interface CommandExecuteCallback { 10 | Event EVENT = EventFactory.createArrayBacked(CommandExecuteCallback.class, (listeners) -> (parseResults) -> { 11 | for (CommandExecuteCallback listener : listeners) { 12 | InteractionResult result = listener.onCommandExecute(parseResults); 13 | 14 | if(result != InteractionResult.PASS) { 15 | return result; 16 | } 17 | } 18 | 19 | return InteractionResult.PASS; 20 | }); 21 | 22 | InteractionResult onCommandExecute(ParseResults parseResults); 23 | } -------------------------------------------------------------------------------- /mc2discord-1.20.1/fabric/src/main/java/fr/denisd3d/mc2discord/fabric/events/CommandExecuteCallback.java: -------------------------------------------------------------------------------- 1 | package fr.denisd3d.mc2discord.fabric.events; 2 | 3 | import com.mojang.brigadier.ParseResults; 4 | import net.fabricmc.fabric.api.event.Event; 5 | import net.fabricmc.fabric.api.event.EventFactory; 6 | import net.minecraft.commands.CommandSourceStack; 7 | import net.minecraft.world.InteractionResult; 8 | 9 | public interface CommandExecuteCallback { 10 | Event EVENT = EventFactory.createArrayBacked(CommandExecuteCallback.class, (listeners) -> (parseResults) -> { 11 | for (CommandExecuteCallback listener : listeners) { 12 | InteractionResult result = listener.onCommandExecute(parseResults); 13 | 14 | if(result != InteractionResult.PASS) { 15 | return result; 16 | } 17 | } 18 | 19 | return InteractionResult.PASS; 20 | }); 21 | 22 | InteractionResult onCommandExecute(ParseResults parseResults); 23 | } -------------------------------------------------------------------------------- /mc2discord-1.20.x/fabric/src/main/java/fr/denisd3d/mc2discord/fabric/events/CommandExecuteCallback.java: -------------------------------------------------------------------------------- 1 | package fr.denisd3d.mc2discord.fabric.events; 2 | 3 | import com.mojang.brigadier.ParseResults; 4 | import net.fabricmc.fabric.api.event.Event; 5 | import net.fabricmc.fabric.api.event.EventFactory; 6 | import net.minecraft.commands.CommandSourceStack; 7 | import net.minecraft.world.InteractionResult; 8 | 9 | public interface CommandExecuteCallback { 10 | Event EVENT = EventFactory.createArrayBacked(CommandExecuteCallback.class, (listeners) -> (parseResults) -> { 11 | for (CommandExecuteCallback listener : listeners) { 12 | InteractionResult result = listener.onCommandExecute(parseResults); 13 | 14 | if(result != InteractionResult.PASS) { 15 | return result; 16 | } 17 | } 18 | 19 | return InteractionResult.PASS; 20 | }); 21 | 22 | InteractionResult onCommandExecute(ParseResults parseResults); 23 | } -------------------------------------------------------------------------------- /mc2discord-1.21.5/fabric/src/main/java/fr/denisd3d/mc2discord/fabric/events/CommandExecuteCallback.java: -------------------------------------------------------------------------------- 1 | package fr.denisd3d.mc2discord.fabric.events; 2 | 3 | import com.mojang.brigadier.ParseResults; 4 | import net.fabricmc.fabric.api.event.Event; 5 | import net.fabricmc.fabric.api.event.EventFactory; 6 | import net.minecraft.commands.CommandSourceStack; 7 | import net.minecraft.world.InteractionResult; 8 | 9 | public interface CommandExecuteCallback { 10 | Event EVENT = EventFactory.createArrayBacked(CommandExecuteCallback.class, (listeners) -> (parseResults) -> { 11 | for (CommandExecuteCallback listener : listeners) { 12 | InteractionResult result = listener.onCommandExecute(parseResults); 13 | 14 | if(result != InteractionResult.PASS) { 15 | return result; 16 | } 17 | } 18 | 19 | return InteractionResult.PASS; 20 | }); 21 | 22 | InteractionResult onCommandExecute(ParseResults parseResults); 23 | } -------------------------------------------------------------------------------- /mc2discord-1.21.x/fabric/src/main/java/fr/denisd3d/mc2discord/fabric/events/CommandExecuteCallback.java: -------------------------------------------------------------------------------- 1 | package fr.denisd3d.mc2discord.fabric.events; 2 | 3 | import com.mojang.brigadier.ParseResults; 4 | import net.fabricmc.fabric.api.event.Event; 5 | import net.fabricmc.fabric.api.event.EventFactory; 6 | import net.minecraft.commands.CommandSourceStack; 7 | import net.minecraft.world.InteractionResult; 8 | 9 | public interface CommandExecuteCallback { 10 | Event EVENT = EventFactory.createArrayBacked(CommandExecuteCallback.class, (listeners) -> (parseResults) -> { 11 | for (CommandExecuteCallback listener : listeners) { 12 | InteractionResult result = listener.onCommandExecute(parseResults); 13 | 14 | if(result != InteractionResult.PASS) { 15 | return result; 16 | } 17 | } 18 | 19 | return InteractionResult.PASS; 20 | }); 21 | 22 | InteractionResult onCommandExecute(ParseResults parseResults); 23 | } -------------------------------------------------------------------------------- /mc2discord-1.20.x/fabric/src/main/java/fr/denisd3d/mc2discord/fabric/Mc2DiscordFabric.java: -------------------------------------------------------------------------------- 1 | package fr.denisd3d.mc2discord.fabric; 2 | 3 | import fr.denisd3d.mc2discord.minecraft.Mc2DiscordMinecraft; 4 | import net.fabricmc.api.ModInitializer; 5 | import net.fabricmc.fabric.api.command.v2.CommandRegistrationCallback; 6 | import net.fabricmc.fabric.api.event.lifecycle.v1.ServerLifecycleEvents; 7 | 8 | 9 | public class Mc2DiscordFabric implements ModInitializer { 10 | @Override 11 | public void onInitialize() { 12 | ServerLifecycleEvents.SERVER_STARTING.register(Mc2DiscordMinecraft::onServerStarting); 13 | ServerLifecycleEvents.SERVER_STARTED.register(Mc2DiscordMinecraft::onServerStarted); 14 | ServerLifecycleEvents.SERVER_STOPPED.register(Mc2DiscordMinecraft::onServerStopped); 15 | CommandRegistrationCallback.EVENT.register((dispatcher, registryAccess, environment) -> Mc2DiscordMinecraft.onRegisterCommands(dispatcher, registryAccess)); 16 | 17 | FabricEvents.register(); 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /mc2discord-1.21.5/fabric/src/main/java/fr/denisd3d/mc2discord/fabric/Mc2DiscordFabric.java: -------------------------------------------------------------------------------- 1 | package fr.denisd3d.mc2discord.fabric; 2 | 3 | import fr.denisd3d.mc2discord.minecraft.Mc2DiscordMinecraft; 4 | import net.fabricmc.api.ModInitializer; 5 | import net.fabricmc.fabric.api.command.v2.CommandRegistrationCallback; 6 | import net.fabricmc.fabric.api.event.lifecycle.v1.ServerLifecycleEvents; 7 | 8 | 9 | public class Mc2DiscordFabric implements ModInitializer { 10 | @Override 11 | public void onInitialize() { 12 | ServerLifecycleEvents.SERVER_STARTING.register(Mc2DiscordMinecraft::onServerStarting); 13 | ServerLifecycleEvents.SERVER_STARTED.register(Mc2DiscordMinecraft::onServerStarted); 14 | ServerLifecycleEvents.SERVER_STOPPED.register(Mc2DiscordMinecraft::onServerStopped); 15 | CommandRegistrationCallback.EVENT.register((dispatcher, registryAccess, environment) -> Mc2DiscordMinecraft.onRegisterCommands(dispatcher, registryAccess)); 16 | 17 | FabricEvents.register(); 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /mc2discord-1.21.x/fabric/src/main/java/fr/denisd3d/mc2discord/fabric/Mc2DiscordFabric.java: -------------------------------------------------------------------------------- 1 | package fr.denisd3d.mc2discord.fabric; 2 | 3 | import fr.denisd3d.mc2discord.minecraft.Mc2DiscordMinecraft; 4 | import net.fabricmc.api.ModInitializer; 5 | import net.fabricmc.fabric.api.command.v2.CommandRegistrationCallback; 6 | import net.fabricmc.fabric.api.event.lifecycle.v1.ServerLifecycleEvents; 7 | 8 | 9 | public class Mc2DiscordFabric implements ModInitializer { 10 | @Override 11 | public void onInitialize() { 12 | ServerLifecycleEvents.SERVER_STARTING.register(Mc2DiscordMinecraft::onServerStarting); 13 | ServerLifecycleEvents.SERVER_STARTED.register(Mc2DiscordMinecraft::onServerStarted); 14 | ServerLifecycleEvents.SERVER_STOPPED.register(Mc2DiscordMinecraft::onServerStopped); 15 | CommandRegistrationCallback.EVENT.register((dispatcher, registryAccess, environment) -> Mc2DiscordMinecraft.onRegisterCommands(dispatcher, registryAccess)); 16 | 17 | FabricEvents.register(); 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /mc2discord-core/src/main/java/fr/denisd3d/mc2discord/core/entities/PlayerEntity.java: -------------------------------------------------------------------------------- 1 | package fr.denisd3d.mc2discord.core.entities; 2 | 3 | import java.util.Map; 4 | import java.util.UUID; 5 | import java.util.function.BiFunction; 6 | 7 | public class PlayerEntity extends Entity { 8 | private static final String prefix = "player_"; 9 | 10 | public final String name; 11 | public final String displayName; 12 | public final UUID uuid; 13 | 14 | public PlayerEntity(String name, String displayName, UUID uuid) { 15 | this.name = name; 16 | this.displayName = displayName.replaceAll("§.", ""); 17 | this.uuid = uuid; 18 | } 19 | 20 | @Override 21 | public void getReplacements(Map replacements, Map> formatters) { 22 | replacements.put(prefix + "name", this.name); 23 | replacements.put(prefix + "display_name", this.displayName); 24 | replacements.put(prefix + "uuid", this.uuid != null ? this.uuid.toString() : ""); 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /mc2discord-core/src/main/java/fr/denisd3d/mc2discord/core/config/converters/SnowflakeConverter.java: -------------------------------------------------------------------------------- 1 | package fr.denisd3d.mc2discord.core.config.converters; 2 | 3 | import com.electronwill.nightconfig.core.conversion.Converter; 4 | import discord4j.common.util.Snowflake; 5 | import fr.denisd3d.mc2discord.core.M2DUtils; 6 | 7 | public class SnowflakeConverter implements Converter { 8 | @Override 9 | public Snowflake convertToField(Object value) { 10 | if (value == null) { 11 | return M2DUtils.NIL_SNOWFLAKE; 12 | } else if (value instanceof String) { 13 | return Snowflake.of((String) value); 14 | } else if (value instanceof Number) { 15 | return Snowflake.of(((Number) value).longValue()); 16 | } else { 17 | throw new IllegalArgumentException( 18 | "Cannot convert " + value + " to a Snowflake"); 19 | } 20 | } 21 | 22 | @Override 23 | public Object convertFromField(Snowflake value) { 24 | return value.asLong(); 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /mc2discord-1.19.x/fabric/src/main/java/fr/denisd3d/mc2discord/fabric/mixin/CommandsMixin.java: -------------------------------------------------------------------------------- 1 | package fr.denisd3d.mc2discord.fabric.mixin; 2 | 3 | import com.mojang.brigadier.ParseResults; 4 | import fr.denisd3d.mc2discord.fabric.events.CommandExecuteCallback; 5 | import net.minecraft.commands.CommandSourceStack; 6 | import net.minecraft.commands.Commands; 7 | import net.minecraft.world.InteractionResult; 8 | import org.spongepowered.asm.mixin.Mixin; 9 | import org.spongepowered.asm.mixin.injection.At; 10 | import org.spongepowered.asm.mixin.injection.Inject; 11 | import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; 12 | 13 | @Mixin(Commands.class) 14 | public class CommandsMixin { 15 | 16 | @Inject(method = "performCommand", at = @At("HEAD"), cancellable = true) 17 | private void execute(ParseResults parseResults, String command, CallbackInfoReturnable cir) { 18 | InteractionResult result = CommandExecuteCallback.EVENT.invoker().onCommandExecute(parseResults); 19 | 20 | if(result == InteractionResult.FAIL) { 21 | cir.setReturnValue(0); 22 | } 23 | } 24 | } -------------------------------------------------------------------------------- /mc2discord-1.20.1/fabric/src/main/java/fr/denisd3d/mc2discord/fabric/mixin/CommandsMixin.java: -------------------------------------------------------------------------------- 1 | package fr.denisd3d.mc2discord.fabric.mixin; 2 | 3 | import com.mojang.brigadier.ParseResults; 4 | import fr.denisd3d.mc2discord.fabric.events.CommandExecuteCallback; 5 | import net.minecraft.commands.CommandSourceStack; 6 | import net.minecraft.commands.Commands; 7 | import net.minecraft.world.InteractionResult; 8 | import org.spongepowered.asm.mixin.Mixin; 9 | import org.spongepowered.asm.mixin.injection.At; 10 | import org.spongepowered.asm.mixin.injection.Inject; 11 | import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; 12 | 13 | @Mixin(Commands.class) 14 | public class CommandsMixin { 15 | 16 | @Inject(method = "performCommand", at = @At("HEAD"), cancellable = true) 17 | private void execute(ParseResults parseResults, String command, CallbackInfoReturnable cir) { 18 | InteractionResult result = CommandExecuteCallback.EVENT.invoker().onCommandExecute(parseResults); 19 | 20 | if(result == InteractionResult.FAIL) { 21 | cir.setReturnValue(0); 22 | } 23 | } 24 | } -------------------------------------------------------------------------------- /.github/workflows/build-all.yml: -------------------------------------------------------------------------------- 1 | name: "Build all" 2 | run-name: Build all-${{ inputs.version }} 3 | 4 | on: 5 | workflow_dispatch: 6 | inputs: 7 | version: 8 | description: "Version" 9 | required: true 10 | default: "0.0.0-dev" 11 | workflow_call: 12 | inputs: 13 | version: 14 | required: true 15 | type: string 16 | 17 | jobs: 18 | build-1-18-x: 19 | uses: ./.github/workflows/build-1.18.x.yml 20 | with: 21 | version: ${{ inputs.version }} 22 | 23 | build-1-19-x: 24 | uses: ./.github/workflows/build-1.19.x.yml 25 | with: 26 | version: ${{ inputs.version }} 27 | 28 | build-1-20-1: 29 | uses: ./.github/workflows/build-1.20.1.yml 30 | with: 31 | version: ${{ inputs.version }} 32 | 33 | build-1-20-x: 34 | uses: ./.github/workflows/build-1.20.x.yml 35 | with: 36 | version: ${{ inputs.version }} 37 | 38 | build-1-21-x: 39 | uses: ./.github/workflows/build-1.21.x.yml 40 | with: 41 | version: ${{ inputs.version }} 42 | 43 | build-1-21-5: 44 | uses: ./.github/workflows/build-1.21.5.yml 45 | with: 46 | version: ${{ inputs.version }} 47 | -------------------------------------------------------------------------------- /mc2discord-core/src/main/java/fr/denisd3d/mc2discord/core/entities/AdvancementEntity.java: -------------------------------------------------------------------------------- 1 | package fr.denisd3d.mc2discord.core.entities; 2 | 3 | import java.util.Map; 4 | import java.util.function.BiFunction; 5 | 6 | public class AdvancementEntity extends Entity { 7 | private static final String prefix = "advancement_"; 8 | private final String path; 9 | private final String displayText; 10 | private final String title; 11 | private final String description; 12 | 13 | public AdvancementEntity(String path, String displayText, String title, String description) { 14 | 15 | this.path = path; 16 | this.displayText = displayText; 17 | this.title = title; 18 | this.description = description; 19 | } 20 | 21 | @Override 22 | public void getReplacements(Map replacements, Map> formatters) { 23 | replacements.put(prefix + "path", this.path); 24 | replacements.put(prefix + "display_text", this.displayText); 25 | replacements.put(prefix + "title", this.title); 26 | replacements.put(prefix + "description", this.description); 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /mc2discord-1.20.x/fabric/src/main/java/fr/denisd3d/mc2discord/fabric/mixin/CommandsMixin.java: -------------------------------------------------------------------------------- 1 | package fr.denisd3d.mc2discord.fabric.mixin; 2 | 3 | import com.mojang.brigadier.ParseResults; 4 | import fr.denisd3d.mc2discord.fabric.events.CommandExecuteCallback; 5 | import net.minecraft.commands.CommandSourceStack; 6 | import net.minecraft.commands.Commands; 7 | import net.minecraft.world.InteractionResult; 8 | import org.spongepowered.asm.mixin.Mixin; 9 | import org.spongepowered.asm.mixin.injection.At; 10 | import org.spongepowered.asm.mixin.injection.Inject; 11 | import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; 12 | import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; 13 | 14 | @Mixin(Commands.class) 15 | public class CommandsMixin { 16 | 17 | @Inject(method = "performCommand", at = @At("HEAD"), cancellable = true) 18 | private void execute(ParseResults parseResults, String command, CallbackInfo ci) { 19 | InteractionResult result = CommandExecuteCallback.EVENT.invoker().onCommandExecute(parseResults); 20 | 21 | if(result == InteractionResult.FAIL) { 22 | ci.cancel(); 23 | } 24 | } 25 | } -------------------------------------------------------------------------------- /mc2discord-1.21.5/fabric/src/main/java/fr/denisd3d/mc2discord/fabric/mixin/CommandsMixin.java: -------------------------------------------------------------------------------- 1 | package fr.denisd3d.mc2discord.fabric.mixin; 2 | 3 | import com.mojang.brigadier.ParseResults; 4 | import fr.denisd3d.mc2discord.fabric.events.CommandExecuteCallback; 5 | import net.minecraft.commands.CommandSourceStack; 6 | import net.minecraft.commands.Commands; 7 | import net.minecraft.world.InteractionResult; 8 | import org.spongepowered.asm.mixin.Mixin; 9 | import org.spongepowered.asm.mixin.injection.At; 10 | import org.spongepowered.asm.mixin.injection.Inject; 11 | import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; 12 | import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; 13 | 14 | @Mixin(Commands.class) 15 | public class CommandsMixin { 16 | 17 | @Inject(method = "performCommand", at = @At("HEAD"), cancellable = true) 18 | private void execute(ParseResults parseResults, String command, CallbackInfo ci) { 19 | InteractionResult result = CommandExecuteCallback.EVENT.invoker().onCommandExecute(parseResults); 20 | 21 | if(result == InteractionResult.FAIL) { 22 | ci.cancel(); 23 | } 24 | } 25 | } -------------------------------------------------------------------------------- /mc2discord-1.21.x/fabric/src/main/java/fr/denisd3d/mc2discord/fabric/mixin/CommandsMixin.java: -------------------------------------------------------------------------------- 1 | package fr.denisd3d.mc2discord.fabric.mixin; 2 | 3 | import com.mojang.brigadier.ParseResults; 4 | import fr.denisd3d.mc2discord.fabric.events.CommandExecuteCallback; 5 | import net.minecraft.commands.CommandSourceStack; 6 | import net.minecraft.commands.Commands; 7 | import net.minecraft.world.InteractionResult; 8 | import org.spongepowered.asm.mixin.Mixin; 9 | import org.spongepowered.asm.mixin.injection.At; 10 | import org.spongepowered.asm.mixin.injection.Inject; 11 | import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; 12 | import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; 13 | 14 | @Mixin(Commands.class) 15 | public class CommandsMixin { 16 | 17 | @Inject(method = "performCommand", at = @At("HEAD"), cancellable = true) 18 | private void execute(ParseResults parseResults, String command, CallbackInfo ci) { 19 | InteractionResult result = CommandExecuteCallback.EVENT.invoker().onCommandExecute(parseResults); 20 | 21 | if(result == InteractionResult.FAIL) { 22 | ci.cancel(); 23 | } 24 | } 25 | } -------------------------------------------------------------------------------- /mc2discord-1.18.x/common/src/main/java/fr/denisd3d/mc2discord/minecraft/commands/DiscordCommandImpl.java: -------------------------------------------------------------------------------- 1 | package fr.denisd3d.mc2discord.minecraft.commands; 2 | 3 | import com.mojang.brigadier.CommandDispatcher; 4 | import fr.denisd3d.mc2discord.core.M2DCommands; 5 | import net.minecraft.ChatFormatting; 6 | import net.minecraft.commands.CommandSourceStack; 7 | import net.minecraft.commands.Commands; 8 | import net.minecraft.network.chat.ClickEvent; 9 | import net.minecraft.network.chat.TextColor; 10 | import net.minecraft.network.chat.TextComponent; 11 | 12 | public class DiscordCommandImpl { 13 | public static void register(CommandDispatcher dispatcher) { 14 | dispatcher.register(Commands.literal("discord").executes(context -> { 15 | context.getSource().sendSuccess(new TextComponent(M2DCommands.getDiscordText()) 16 | .withStyle(style -> style.withClickEvent(new ClickEvent(ClickEvent.Action.OPEN_URL, M2DCommands.getDiscordLink())) 17 | .withColor(TextColor.fromLegacyFormat(ChatFormatting.BLUE)) 18 | .withUnderlined(true)), false); 19 | return 1; 20 | })); 21 | } 22 | } -------------------------------------------------------------------------------- /mc2discord-1.19.x/common/src/main/java/fr/denisd3d/mc2discord/minecraft/commands/DiscordCommandImpl.java: -------------------------------------------------------------------------------- 1 | package fr.denisd3d.mc2discord.minecraft.commands; 2 | 3 | import com.mojang.brigadier.CommandDispatcher; 4 | import fr.denisd3d.mc2discord.core.M2DCommands; 5 | import net.minecraft.ChatFormatting; 6 | import net.minecraft.commands.CommandSourceStack; 7 | import net.minecraft.commands.Commands; 8 | import net.minecraft.network.chat.ClickEvent; 9 | import net.minecraft.network.chat.Component; 10 | import net.minecraft.network.chat.TextColor; 11 | 12 | public class DiscordCommandImpl { 13 | public static void register(CommandDispatcher dispatcher) { 14 | dispatcher.register(Commands.literal("discord").executes(context -> { 15 | context.getSource().sendSuccess(Component.literal(M2DCommands.getDiscordText()) 16 | .withStyle(style -> style.withClickEvent(new ClickEvent(ClickEvent.Action.OPEN_URL, M2DCommands.getDiscordLink())) 17 | .withColor(TextColor.fromLegacyFormat(ChatFormatting.BLUE)) 18 | .withUnderlined(true)), false); 19 | return 1; 20 | })); 21 | } 22 | } -------------------------------------------------------------------------------- /mc2discord-1.20.1/common/src/main/java/fr/denisd3d/mc2discord/minecraft/commands/DiscordCommandImpl.java: -------------------------------------------------------------------------------- 1 | package fr.denisd3d.mc2discord.minecraft.commands; 2 | 3 | import com.mojang.brigadier.CommandDispatcher; 4 | import fr.denisd3d.mc2discord.core.M2DCommands; 5 | import net.minecraft.ChatFormatting; 6 | import net.minecraft.commands.CommandSourceStack; 7 | import net.minecraft.commands.Commands; 8 | import net.minecraft.network.chat.ClickEvent; 9 | import net.minecraft.network.chat.Component; 10 | import net.minecraft.network.chat.TextColor; 11 | 12 | public class DiscordCommandImpl { 13 | public static void register(CommandDispatcher dispatcher) { 14 | dispatcher.register(Commands.literal("discord").executes(context -> { 15 | context.getSource().sendSuccess(() -> Component.literal(M2DCommands.getDiscordText()) 16 | .withStyle(style -> style.withClickEvent(new ClickEvent(ClickEvent.Action.OPEN_URL, M2DCommands.getDiscordLink())) 17 | .withColor(TextColor.fromLegacyFormat(ChatFormatting.BLUE)) 18 | .withUnderlined(true)), false); 19 | return 1; 20 | })); 21 | } 22 | } -------------------------------------------------------------------------------- /mc2discord-1.20.x/common/src/main/java/fr/denisd3d/mc2discord/minecraft/commands/DiscordCommandImpl.java: -------------------------------------------------------------------------------- 1 | package fr.denisd3d.mc2discord.minecraft.commands; 2 | 3 | import com.mojang.brigadier.CommandDispatcher; 4 | import fr.denisd3d.mc2discord.core.M2DCommands; 5 | import net.minecraft.ChatFormatting; 6 | import net.minecraft.commands.CommandSourceStack; 7 | import net.minecraft.commands.Commands; 8 | import net.minecraft.network.chat.ClickEvent; 9 | import net.minecraft.network.chat.Component; 10 | import net.minecraft.network.chat.TextColor; 11 | 12 | public class DiscordCommandImpl { 13 | public static void register(CommandDispatcher dispatcher) { 14 | dispatcher.register(Commands.literal("discord").executes(context -> { 15 | context.getSource().sendSuccess(() -> Component.literal(M2DCommands.getDiscordText()) 16 | .withStyle(style -> style.withClickEvent(new ClickEvent(ClickEvent.Action.OPEN_URL, M2DCommands.getDiscordLink())) 17 | .withColor(TextColor.fromLegacyFormat(ChatFormatting.BLUE)) 18 | .withUnderlined(true)), false); 19 | return 1; 20 | })); 21 | } 22 | } -------------------------------------------------------------------------------- /mc2discord-1.21.x/common/src/main/java/fr/denisd3d/mc2discord/minecraft/commands/DiscordCommandImpl.java: -------------------------------------------------------------------------------- 1 | package fr.denisd3d.mc2discord.minecraft.commands; 2 | 3 | import com.mojang.brigadier.CommandDispatcher; 4 | import fr.denisd3d.mc2discord.core.M2DCommands; 5 | import net.minecraft.ChatFormatting; 6 | import net.minecraft.commands.CommandSourceStack; 7 | import net.minecraft.commands.Commands; 8 | import net.minecraft.network.chat.ClickEvent; 9 | import net.minecraft.network.chat.Component; 10 | import net.minecraft.network.chat.TextColor; 11 | 12 | public class DiscordCommandImpl { 13 | public static void register(CommandDispatcher dispatcher) { 14 | dispatcher.register(Commands.literal("discord").executes(context -> { 15 | context.getSource().sendSuccess(() -> Component.literal(M2DCommands.getDiscordText()) 16 | .withStyle(style -> style.withClickEvent(new ClickEvent(ClickEvent.Action.OPEN_URL, M2DCommands.getDiscordLink())) 17 | .withColor(TextColor.fromLegacyFormat(ChatFormatting.BLUE)) 18 | .withUnderlined(true)), false); 19 | return 1; 20 | })); 21 | } 22 | } -------------------------------------------------------------------------------- /mc2discord-1.18.x/fabric/src/main/java/fr/denisd3d/mc2discord/fabric/mixin/ServerGamePacketListenerImplMixin.java: -------------------------------------------------------------------------------- 1 | package fr.denisd3d.mc2discord.fabric.mixin; 2 | 3 | import fr.denisd3d.mc2discord.fabric.events.ServerChatCallback; 4 | import net.minecraft.server.level.ServerPlayer; 5 | import net.minecraft.server.network.ServerGamePacketListenerImpl; 6 | import net.minecraft.server.network.TextFilter; 7 | import org.spongepowered.asm.mixin.Mixin; 8 | import org.spongepowered.asm.mixin.Shadow; 9 | import org.spongepowered.asm.mixin.injection.At; 10 | import org.spongepowered.asm.mixin.injection.Inject; 11 | import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; 12 | 13 | @Mixin(ServerGamePacketListenerImpl.class) 14 | public class ServerGamePacketListenerImplMixin { 15 | @Shadow 16 | public ServerPlayer player; 17 | 18 | @Inject(method = "handleChat(Lnet/minecraft/server/network/TextFilter$FilteredText;)V", at = @At("HEAD")) 19 | private void execute(TextFilter.FilteredText filteredText, CallbackInfo ci) { 20 | String s = filteredText.getRaw(); 21 | if (!s.startsWith("/")) { 22 | ServerChatCallback.EVENT.invoker().onServerChatMessage(s, this.player); 23 | } 24 | } 25 | } -------------------------------------------------------------------------------- /mc2discord-1.21.5/common/src/main/java/fr/denisd3d/mc2discord/minecraft/commands/DiscordCommandImpl.java: -------------------------------------------------------------------------------- 1 | package fr.denisd3d.mc2discord.minecraft.commands; 2 | 3 | import com.mojang.brigadier.CommandDispatcher; 4 | import fr.denisd3d.mc2discord.core.M2DCommands; 5 | import net.minecraft.ChatFormatting; 6 | import net.minecraft.commands.CommandSourceStack; 7 | import net.minecraft.commands.Commands; 8 | import net.minecraft.network.chat.ClickEvent; 9 | import net.minecraft.network.chat.Component; 10 | import net.minecraft.network.chat.TextColor; 11 | 12 | import java.net.URI; 13 | 14 | public class DiscordCommandImpl { 15 | public static void register(CommandDispatcher dispatcher) { 16 | dispatcher.register(Commands.literal("discord").executes(context -> { 17 | context.getSource().sendSuccess(() -> Component.literal(M2DCommands.getDiscordText()) 18 | .withStyle(style -> style.withClickEvent(new ClickEvent.OpenUrl(URI.create(M2DCommands.getDiscordLink()))) 19 | .withColor(TextColor.fromLegacyFormat(ChatFormatting.BLUE)) 20 | .withUnderlined(true)), false); 21 | return 1; 22 | })); 23 | } 24 | } -------------------------------------------------------------------------------- /mc2discord-core/src/main/java/fr/denisd3d/mc2discord/core/config/converters/SnowflakeArrayConverter.java: -------------------------------------------------------------------------------- 1 | package fr.denisd3d.mc2discord.core.config.converters; 2 | 3 | import com.electronwill.nightconfig.core.conversion.Converter; 4 | import discord4j.common.util.Snowflake; 5 | 6 | import java.util.ArrayList; 7 | import java.util.List; 8 | 9 | public class SnowflakeArrayConverter implements Converter, List> { 10 | public List convertToField(List value) { 11 | if (value != null) { 12 | List list = new ArrayList<>(); 13 | value.forEach(object -> { 14 | if (object instanceof String) list.add(Snowflake.of((String) object)); 15 | else if (object instanceof Number) list.add(Snowflake.of(((Number) object).longValue())); 16 | }); 17 | return list; 18 | } else { 19 | return null; 20 | } 21 | } 22 | 23 | public List convertFromField(List value) { 24 | if (value != null) { 25 | List list = new ArrayList<>(); 26 | value.forEach(snowflake -> list.add(snowflake.asLong())); 27 | return list; 28 | } else { 29 | return null; 30 | } 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /mc2discord-core/src/main/java/fr/denisd3d/mc2discord/core/config/Presence.java: -------------------------------------------------------------------------------- 1 | package fr.denisd3d.mc2discord.core.config; 2 | 3 | import com.electronwill.nightconfig.core.conversion.Conversion; 4 | import com.electronwill.nightconfig.core.conversion.Path; 5 | import com.electronwill.nightconfig.core.conversion.PreserveNotNull; 6 | import fr.denisd3d.config4j.Comment; 7 | import fr.denisd3d.config4j.DefaultValue; 8 | import fr.denisd3d.mc2discord.core.config.converters.RandomString; 9 | import fr.denisd3d.mc2discord.core.config.converters.RandomStringConverter; 10 | 11 | public class Presence { 12 | @Path("message") 13 | @Comment("config.style.presence.message.comment") 14 | @DefaultValue("config.style.presence.message.value") 15 | @Conversion(RandomStringConverter.class) 16 | @PreserveNotNull 17 | public RandomString message; 18 | 19 | @Path("type") 20 | @Comment("config.status.presence.type.comment") 21 | @PreserveNotNull 22 | public String type = "PLAYING"; 23 | 24 | @Path("update") 25 | @Comment("config.status.presence.update.comment") 26 | @PreserveNotNull 27 | public long update = 60L; 28 | 29 | @Path("link") 30 | @Comment("config.status.presence.link.comment") 31 | @PreserveNotNull 32 | public String link = ""; 33 | 34 | @Path("comment") 35 | public String comment; 36 | } -------------------------------------------------------------------------------- /mc2discord-core/src/main/resources/assets/mc2discord/m2d-lang/core/zh_cn.json: -------------------------------------------------------------------------------- 1 | { 2 | "config.messages.start.value": "服务器已启动", 3 | "config.messages.stop.value": "服务器已关闭", 4 | "config.messages.join.value": "${player_display_name} 加入了游戏", 5 | "config.messages.leave.value": "${player_display_name} 离开了游戏", 6 | "config.messages.death.value": "${death_message}", 7 | "config.messages.advancement.value": "${player_display_name} 获得了成就:${advancement_title}. ${advancement_description}.", 8 | "config.account.discord_pseudo_format.value": "${member_name} (IG: ${player_name})", 9 | "config.account.messages.link_get_code.value": "请发送命令:${command} 至机器人:${bot_name}#${bot_discriminator} 的Discord私密对话,以获取绑定代码", 10 | "config.account.messages.link_successful.value": "您已成功链接了您的账户", 11 | "config.account.messages.link_invalid_code.value": "您发送的代码无效", 12 | "config.account.messages.link_error_already.value": "您已经绑定了一个账户", 13 | "config.account.messages.unlink_successful.value": "您已成功解绑了您的账户", 14 | "config.account.messages.unlink_error.value": "解绑失败", 15 | "config.account.messages.missing_roles.value": "您没有足够的权限来绑定您的账户", 16 | "config.style.reply_format.value": "回复给 ${member_nickname}: ", 17 | "config.style.presence.message.value": "当前有 ${online_players} / ${max_players} 个玩家", 18 | "config.misc.discord_text.value": "尚未设置邀请链接" 19 | } -------------------------------------------------------------------------------- /mc2discord-1.19.x/common/src/main/java/fr/denisd3d/mc2discord/minecraft/mixin/CommandFunctionCommandEntryMixin.java: -------------------------------------------------------------------------------- 1 | package fr.denisd3d.mc2discord.minecraft.mixin; 2 | 3 | import com.mojang.brigadier.ParseResults; 4 | import fr.denisd3d.mc2discord.minecraft.Mc2DiscordMinecraft; 5 | import net.minecraft.commands.CommandFunction; 6 | import net.minecraft.commands.CommandSourceStack; 7 | import net.minecraft.commands.Commands; 8 | import net.minecraft.server.ServerFunctionManager; 9 | import org.spongepowered.asm.mixin.Final; 10 | import org.spongepowered.asm.mixin.Mixin; 11 | import org.spongepowered.asm.mixin.Shadow; 12 | import org.spongepowered.asm.mixin.injection.At; 13 | import org.spongepowered.asm.mixin.injection.Inject; 14 | import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; 15 | 16 | @Mixin(CommandFunction.CommandEntry.class) 17 | public class CommandFunctionCommandEntryMixin { 18 | @Final 19 | @Shadow 20 | private ParseResults parse; 21 | 22 | @Inject(method = "execute(Lnet/minecraft/server/ServerFunctionManager;Lnet/minecraft/commands/CommandSourceStack;)I", at = @At("HEAD")) 23 | private void execute(ServerFunctionManager pFunctionManager, CommandSourceStack pSource, CallbackInfoReturnable cir) { 24 | Mc2DiscordMinecraft.onCommand(Commands.mapSource(this.parse, (ignored) -> pSource)); 25 | } 26 | } -------------------------------------------------------------------------------- /mc2discord-1.20.1/common/src/main/java/fr/denisd3d/mc2discord/minecraft/mixin/CommandFunctionCommandEntryMixin.java: -------------------------------------------------------------------------------- 1 | package fr.denisd3d.mc2discord.minecraft.mixin; 2 | 3 | import com.mojang.brigadier.ParseResults; 4 | import fr.denisd3d.mc2discord.minecraft.Mc2DiscordMinecraft; 5 | import net.minecraft.commands.CommandFunction; 6 | import net.minecraft.commands.CommandSourceStack; 7 | import net.minecraft.commands.Commands; 8 | import net.minecraft.server.ServerFunctionManager; 9 | import org.spongepowered.asm.mixin.Final; 10 | import org.spongepowered.asm.mixin.Mixin; 11 | import org.spongepowered.asm.mixin.Shadow; 12 | import org.spongepowered.asm.mixin.injection.At; 13 | import org.spongepowered.asm.mixin.injection.Inject; 14 | import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; 15 | 16 | @Mixin(CommandFunction.CommandEntry.class) 17 | public class CommandFunctionCommandEntryMixin { 18 | @Final 19 | @Shadow 20 | private ParseResults parse; 21 | 22 | @Inject(method = "execute(Lnet/minecraft/server/ServerFunctionManager;Lnet/minecraft/commands/CommandSourceStack;)I", at = @At("HEAD")) 23 | private void execute(ServerFunctionManager pFunctionManager, CommandSourceStack pSource, CallbackInfoReturnable cir) { 24 | Mc2DiscordMinecraft.onCommand(Commands.mapSource(this.parse, (ignored) -> pSource)); 25 | } 26 | } -------------------------------------------------------------------------------- /mc2discord-core/src/main/resources/assets/mc2discord/m2d-lang/core/ko_kr.json: -------------------------------------------------------------------------------- 1 | { 2 | "config.messages.start.value": "서버가 시작되었습니다", 3 | "config.messages.stop.value": "서버가 정지되었습니다", 4 | "config.messages.join.value": "${player_display_name} 님이 서버에 접속하셨습니다", 5 | "config.messages.leave.value": "${player_display_name} 님이 접속을 종료하셨습니다", 6 | "config.messages.death.value": "${death_message}", 7 | "config.messages.advancement.value": "${player_display_name} 님이 발전과제 ${advancement_title}을(를) 달성하셨습니다. ${advancement_description}.", 8 | "config.account.discord_pseudo_format.value": "${member_name} (인게임: ${player_name})", 9 | "config.account.messages.link_get_code.value": "계정 연동을 위해서는 ${bot_name}#${bot_discriminator} 봇에게 $c!code ${code}$r를 개인 메세지로 보내주세요.", 10 | "config.account.messages.link_successful.value": "성공적으로 연동되었습니다", 11 | "config.account.messages.link_invalid_code.value": "이 코드는 유효하지 않습니다", 12 | "config.account.messages.link_error_already.value": "이미 연동된 계정입니다", 13 | "config.account.messages.unlink_successful.value": "계정 연동이 해제되었습니다", 14 | "config.account.messages.unlink_error.value": "연동을 해제할 수 없습니다", 15 | "config.account.messages.missing_roles.value": "계정 연동을 위해서는 디스코드에서 추가 역할이 필요합니다", 16 | "config.style.presence.message.value": "${online_players} / ${max_players} 플레이어", 17 | "config.misc.discord_text.value": "초대 링크가 설정되어 있지 않습니다" 18 | } -------------------------------------------------------------------------------- /mc2discord-1.18.x/common/src/main/java/fr/denisd3d/mc2discord/minecraft/mixin/CommandFunctionCommandEntryMixin.java: -------------------------------------------------------------------------------- 1 | package fr.denisd3d.mc2discord.minecraft.mixin; 2 | 3 | import com.mojang.brigadier.ParseResults; 4 | import fr.denisd3d.mc2discord.minecraft.Mc2DiscordMinecraft; 5 | import net.minecraft.commands.CommandFunction; 6 | import net.minecraft.commands.CommandSourceStack; 7 | import net.minecraft.server.ServerFunctionManager; 8 | import org.spongepowered.asm.mixin.Final; 9 | import org.spongepowered.asm.mixin.Mixin; 10 | import org.spongepowered.asm.mixin.Shadow; 11 | import org.spongepowered.asm.mixin.injection.At; 12 | import org.spongepowered.asm.mixin.injection.Inject; 13 | import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; 14 | 15 | @Mixin(CommandFunction.CommandEntry.class) 16 | public class CommandFunctionCommandEntryMixin { 17 | @Final 18 | @Shadow 19 | private ParseResults parse; 20 | 21 | @Inject(method = "execute(Lnet/minecraft/server/ServerFunctionManager;Lnet/minecraft/commands/CommandSourceStack;)I", at = @At("HEAD")) 22 | private void execute(ServerFunctionManager pFunctionManager, CommandSourceStack pSource, CallbackInfoReturnable cir) { 23 | Mc2DiscordMinecraft.onCommand(new ParseResults<>(this.parse.getContext().withSource(pSource), this.parse.getReader(), this.parse.getExceptions())); 24 | } 25 | } -------------------------------------------------------------------------------- /mc2discord-core/src/main/java/fr/denisd3d/mc2discord/core/config/converters/RandomStringConverter.java: -------------------------------------------------------------------------------- 1 | package fr.denisd3d.mc2discord.core.config.converters; 2 | 3 | import com.electronwill.nightconfig.core.conversion.Converter; 4 | 5 | import java.util.ArrayList; 6 | import java.util.List; 7 | 8 | public class RandomStringConverter implements Converter { 9 | @Override 10 | public RandomString convertToField(Object value) { 11 | if (value == null) { 12 | return new RandomString(""); 13 | } else if (value instanceof String) { 14 | return new RandomString((String) value); 15 | } else if (value instanceof List) { 16 | List outputList = new ArrayList<>(((List) value).size()); 17 | for (Object obj : (List) value) { 18 | outputList.add(obj.toString()); 19 | } 20 | return new RandomString(outputList); 21 | } else { 22 | throw new IllegalArgumentException( 23 | "Cannot convert " + value + " to a RandomString"); 24 | } 25 | } 26 | 27 | @Override 28 | public Object convertFromField(RandomString value) { 29 | if (value == null) 30 | return null; 31 | else if (value.getValues().size() == 1) 32 | return value.getValues().get(0); 33 | else 34 | return value.getValues(); 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /.github/workflows/publish-forge-1.21.5.yml: -------------------------------------------------------------------------------- 1 | name: "Publish forge 1.21.5" 2 | run-name: Publish forge-1.21.5-${{ inputs.version }} 3 | 4 | on: 5 | workflow_call: 6 | inputs: 7 | version: 8 | required: true 9 | type: string 10 | secrets: 11 | MODRINTH_TOKEN: 12 | required: true 13 | CURSEFORGE_TOKEN: 14 | required: true 15 | WEBHOOK_URL: 16 | required: true 17 | 18 | jobs: 19 | publish-forge-1-21-5: 20 | runs-on: ubuntu-latest 21 | steps: 22 | - uses: actions/checkout@v4 23 | - uses: actions/download-artifact@v4 24 | - uses: Kir-Antipov/mc-publish@v3.3 25 | with: 26 | modrinth-id: Cfbcv7uF 27 | modrinth-token: ${{ secrets.MODRINTH_TOKEN }} 28 | curseforge-id: 325235 29 | curseforge-token: ${{ secrets.CURSEFORGE_TOKEN }} 30 | 31 | modrinth-unfeature-mode: intersection 32 | 33 | files: mc2discord-forge-1.21.5-${{ inputs.version }}/mc2discord-forge-1.21.5-${{ inputs.version }}.jar 34 | name: "[Forge 1.21.5] ${{ inputs.version }}" 35 | changelog-file: CHANGELOG.md 36 | loaders: | 37 | forge 38 | game-versions: | 39 | 1.21.5 40 | - uses: tsickert/discord-webhook@v5.3.0 41 | with: 42 | webhook-url: ${{ secrets.WEBHOOK_URL }} 43 | content: "New Mc2Discord version released: [Forge 1.21.5] ${{ inputs.version }}" 44 | -------------------------------------------------------------------------------- /.github/workflows/publish-forge-1.20.1.yml: -------------------------------------------------------------------------------- 1 | name: 'Publish forge 1.20.1' 2 | run-name: Publish forge-1.20.1-${{ inputs.version }} 3 | 4 | on: 5 | workflow_call: 6 | inputs: 7 | version: 8 | required: true 9 | type: string 10 | secrets: 11 | MODRINTH_TOKEN: 12 | required: true 13 | CURSEFORGE_TOKEN: 14 | required: true 15 | WEBHOOK_URL: 16 | required: true 17 | 18 | jobs: 19 | publish-forge-1-20-x: 20 | runs-on: ubuntu-latest 21 | steps: 22 | - uses: actions/checkout@v4 23 | - uses: actions/download-artifact@v4 24 | - uses: Kir-Antipov/mc-publish@v3.3 25 | with: 26 | modrinth-id: Cfbcv7uF 27 | modrinth-token: ${{ secrets.MODRINTH_TOKEN }} 28 | curseforge-id: 325235 29 | curseforge-token: ${{ secrets.CURSEFORGE_TOKEN }} 30 | 31 | modrinth-unfeature-mode: intersection 32 | 33 | files: mc2discord-forge-1.20.1-${{ inputs.version }}/mc2discord-forge-1.20.1-${{ inputs.version }}.jar 34 | name: '[Forge 1.20.1] ${{ inputs.version }}' 35 | changelog-file: CHANGELOG.md 36 | loaders: | 37 | forge 38 | game-versions: | 39 | 1.20 40 | 1.20.1 41 | - uses: tsickert/discord-webhook@v5.3.0 42 | with: 43 | webhook-url: ${{ secrets.WEBHOOK_URL }} 44 | content: 'New Mc2Discord version released: [Forge 1.20.1] ${{ inputs.version }}' 45 | -------------------------------------------------------------------------------- /.github/workflows/publish-forge-1.19.x.yml: -------------------------------------------------------------------------------- 1 | name: 'Publish forge 1.19.x' 2 | run-name: Publish forge-1.19.x-${{ inputs.version }} 3 | 4 | on: 5 | workflow_call: 6 | inputs: 7 | version: 8 | required: true 9 | type: string 10 | secrets: 11 | MODRINTH_TOKEN: 12 | required: true 13 | CURSEFORGE_TOKEN: 14 | required: true 15 | WEBHOOK_URL: 16 | required: true 17 | 18 | jobs: 19 | publish-forge-1-19-x: 20 | runs-on: ubuntu-latest 21 | steps: 22 | - uses: actions/checkout@v4 23 | - uses: actions/download-artifact@v4 24 | - uses: Kir-Antipov/mc-publish@v3.3 25 | with: 26 | modrinth-id: Cfbcv7uF 27 | modrinth-token: ${{ secrets.MODRINTH_TOKEN }} 28 | curseforge-id: 325235 29 | curseforge-token: ${{ secrets.CURSEFORGE_TOKEN }} 30 | 31 | modrinth-unfeature-mode: intersection 32 | 33 | files: mc2discord-forge-1.19.x-${{ inputs.version }}/mc2discord-forge-1.19.x-${{ inputs.version }}.jar 34 | name: '[Forge 1.19.x] ${{ inputs.version }}' 35 | changelog-file: CHANGELOG.md 36 | loaders: | 37 | forge 38 | game-versions: | 39 | 1.19.3 40 | 1.19.4 41 | - uses: tsickert/discord-webhook@v5.3.0 42 | with: 43 | webhook-url: ${{ secrets.WEBHOOK_URL }} 44 | content: 'New Mc2Discord version released: [Forge 1.19.x] ${{ inputs.version }}' 45 | -------------------------------------------------------------------------------- /.github/workflows/publish-forge-1.20.x.yml: -------------------------------------------------------------------------------- 1 | name: 'Publish forge 1.20.x' 2 | run-name: Publish forge-1.20.x-${{ inputs.version }} 3 | 4 | on: 5 | workflow_call: 6 | inputs: 7 | version: 8 | required: true 9 | type: string 10 | secrets: 11 | MODRINTH_TOKEN: 12 | required: true 13 | CURSEFORGE_TOKEN: 14 | required: true 15 | WEBHOOK_URL: 16 | required: true 17 | 18 | jobs: 19 | publish-forge-1-20-x: 20 | runs-on: ubuntu-latest 21 | steps: 22 | - uses: actions/checkout@v4 23 | - uses: actions/download-artifact@v4 24 | - uses: Kir-Antipov/mc-publish@v3.3 25 | with: 26 | modrinth-id: Cfbcv7uF 27 | modrinth-token: ${{ secrets.MODRINTH_TOKEN }} 28 | curseforge-id: 325235 29 | curseforge-token: ${{ secrets.CURSEFORGE_TOKEN }} 30 | 31 | modrinth-unfeature-mode: intersection 32 | 33 | files: mc2discord-forge-1.20.x-${{ inputs.version }}/mc2discord-forge-1.20.6-${{ inputs.version }}.jar 34 | name: '[Forge 1.20.6] ${{ inputs.version }}' 35 | changelog-file: CHANGELOG.md 36 | loaders: | 37 | forge 38 | game-versions: | 39 | 1.20.5 40 | 1.20.6 41 | - uses: tsickert/discord-webhook@v5.3.0 42 | with: 43 | webhook-url: ${{ secrets.WEBHOOK_URL }} 44 | content: 'New Mc2Discord version released: [Forge 1.20.x] ${{ inputs.version }}' 45 | -------------------------------------------------------------------------------- /.github/workflows/publish-fabric-1.21.5.yml: -------------------------------------------------------------------------------- 1 | name: "Publish fabric 1.21.5" 2 | run-name: Publish fabric-1.21.5-${{ inputs.version }} 3 | 4 | on: 5 | workflow_call: 6 | inputs: 7 | version: 8 | required: true 9 | type: string 10 | secrets: 11 | MODRINTH_TOKEN: 12 | required: true 13 | CURSEFORGE_TOKEN: 14 | required: true 15 | WEBHOOK_URL: 16 | required: true 17 | 18 | jobs: 19 | publish-fabric-1-21-5: 20 | runs-on: ubuntu-latest 21 | steps: 22 | - uses: actions/checkout@v4 23 | - uses: actions/download-artifact@v4 24 | - uses: Kir-Antipov/mc-publish@v3.3 25 | with: 26 | modrinth-id: Cfbcv7uF 27 | modrinth-token: ${{ secrets.MODRINTH_TOKEN }} 28 | curseforge-id: 325235 29 | curseforge-token: ${{ secrets.CURSEFORGE_TOKEN }} 30 | 31 | modrinth-unfeature-mode: intersection 32 | 33 | files: mc2discord-fabric-1.21.5-${{ inputs.version }}/mc2discord-fabric-1.21.5-${{ inputs.version }}.jar 34 | name: "[Fabric 1.21.5] ${{ inputs.version }}" 35 | changelog-file: CHANGELOG.md 36 | loaders: | 37 | fabric 38 | quilt 39 | game-versions: | 40 | 1.21.5 41 | - uses: tsickert/discord-webhook@v5.3.0 42 | with: 43 | webhook-url: ${{ secrets.WEBHOOK_URL }} 44 | content: "New Mc2Discord version released: [Fabric 1.21.5] ${{ inputs.version }}" 45 | -------------------------------------------------------------------------------- /mc2discord-1.18.x/fabric/src/main/java/fr/denisd3d/mc2discord/fabric/mixin/PlayerAdvancementsMixin.java: -------------------------------------------------------------------------------- 1 | package fr.denisd3d.mc2discord.fabric.mixin; 2 | 3 | import fr.denisd3d.mc2discord.fabric.events.PlayerCompletedAdvancementCallback; 4 | import net.minecraft.advancements.Advancement; 5 | import net.minecraft.advancements.AdvancementProgress; 6 | import net.minecraft.server.PlayerAdvancements; 7 | import net.minecraft.server.level.ServerPlayer; 8 | import org.spongepowered.asm.mixin.Mixin; 9 | import org.spongepowered.asm.mixin.Shadow; 10 | import org.spongepowered.asm.mixin.injection.At; 11 | import org.spongepowered.asm.mixin.injection.Inject; 12 | import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; 13 | 14 | @Mixin(PlayerAdvancements.class) 15 | public class PlayerAdvancementsMixin { 16 | 17 | @Shadow 18 | private ServerPlayer player; 19 | 20 | @SuppressWarnings("SameReturnValue") 21 | @Shadow 22 | public AdvancementProgress getOrStartProgress(Advancement advancement) { 23 | return null; 24 | } 25 | 26 | @Inject(method = "award", at = @At("RETURN")) 27 | private void grantCriterion(Advancement advancement, String string, CallbackInfoReturnable cir) { 28 | AdvancementProgress advancementProgress = this.getOrStartProgress(advancement); 29 | if (!advancementProgress.isDone()) return; 30 | PlayerCompletedAdvancementCallback.EVENT.invoker().onPlayerAdvancement(player, advancement); 31 | } 32 | } -------------------------------------------------------------------------------- /mc2discord-1.19.x/fabric/src/main/java/fr/denisd3d/mc2discord/fabric/mixin/PlayerAdvancementsMixin.java: -------------------------------------------------------------------------------- 1 | package fr.denisd3d.mc2discord.fabric.mixin; 2 | 3 | import fr.denisd3d.mc2discord.fabric.events.PlayerCompletedAdvancementCallback; 4 | import net.minecraft.advancements.Advancement; 5 | import net.minecraft.advancements.AdvancementProgress; 6 | import net.minecraft.server.PlayerAdvancements; 7 | import net.minecraft.server.level.ServerPlayer; 8 | import org.spongepowered.asm.mixin.Mixin; 9 | import org.spongepowered.asm.mixin.Shadow; 10 | import org.spongepowered.asm.mixin.injection.At; 11 | import org.spongepowered.asm.mixin.injection.Inject; 12 | import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; 13 | 14 | @Mixin(PlayerAdvancements.class) 15 | public class PlayerAdvancementsMixin { 16 | 17 | @Shadow 18 | private ServerPlayer player; 19 | 20 | @SuppressWarnings("SameReturnValue") 21 | @Shadow 22 | public AdvancementProgress getOrStartProgress(Advancement advancement) { 23 | return null; 24 | } 25 | 26 | @Inject(method = "award", at = @At("RETURN")) 27 | private void grantCriterion(Advancement advancement, String string, CallbackInfoReturnable cir) { 28 | AdvancementProgress advancementProgress = this.getOrStartProgress(advancement); 29 | if (!advancementProgress.isDone()) return; 30 | PlayerCompletedAdvancementCallback.EVENT.invoker().onPlayerAdvancement(player, advancement); 31 | } 32 | } -------------------------------------------------------------------------------- /mc2discord-1.20.1/fabric/src/main/java/fr/denisd3d/mc2discord/fabric/mixin/PlayerAdvancementsMixin.java: -------------------------------------------------------------------------------- 1 | package fr.denisd3d.mc2discord.fabric.mixin; 2 | 3 | import fr.denisd3d.mc2discord.fabric.events.PlayerCompletedAdvancementCallback; 4 | import net.minecraft.advancements.Advancement; 5 | import net.minecraft.advancements.AdvancementProgress; 6 | import net.minecraft.server.PlayerAdvancements; 7 | import net.minecraft.server.level.ServerPlayer; 8 | import org.spongepowered.asm.mixin.Mixin; 9 | import org.spongepowered.asm.mixin.Shadow; 10 | import org.spongepowered.asm.mixin.injection.At; 11 | import org.spongepowered.asm.mixin.injection.Inject; 12 | import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; 13 | 14 | @Mixin(PlayerAdvancements.class) 15 | public class PlayerAdvancementsMixin { 16 | 17 | @Shadow 18 | private ServerPlayer player; 19 | 20 | @SuppressWarnings("SameReturnValue") 21 | @Shadow 22 | public AdvancementProgress getOrStartProgress(Advancement advancement) { 23 | return null; 24 | } 25 | 26 | @Inject(method = "award", at = @At("RETURN")) 27 | private void grantCriterion(Advancement advancement, String string, CallbackInfoReturnable cir) { 28 | AdvancementProgress advancementProgress = this.getOrStartProgress(advancement); 29 | if (!advancementProgress.isDone()) return; 30 | PlayerCompletedAdvancementCallback.EVENT.invoker().onPlayerAdvancement(player, advancement); 31 | } 32 | } -------------------------------------------------------------------------------- /.github/workflows/publish-forge-1.18.x.yml: -------------------------------------------------------------------------------- 1 | name: 'Publish forge 1.18.x' 2 | run-name: Publish forge-1.18.x-${{ inputs.version }} 3 | 4 | on: 5 | workflow_call: 6 | inputs: 7 | version: 8 | required: true 9 | type: string 10 | secrets: 11 | MODRINTH_TOKEN: 12 | required: true 13 | CURSEFORGE_TOKEN: 14 | required: true 15 | WEBHOOK_URL: 16 | required: true 17 | 18 | jobs: 19 | publish-forge-1-18-x: 20 | runs-on: ubuntu-latest 21 | steps: 22 | - uses: actions/checkout@v4 23 | - uses: actions/download-artifact@v4 24 | - uses: Kir-Antipov/mc-publish@v3.3 25 | with: 26 | modrinth-id: Cfbcv7uF 27 | modrinth-token: ${{ secrets.MODRINTH_TOKEN }} 28 | curseforge-id: 325235 29 | curseforge-token: ${{ secrets.CURSEFORGE_TOKEN }} 30 | 31 | modrinth-unfeature-mode: intersection 32 | 33 | files: mc2discord-forge-1.18.x-${{ inputs.version }}/mc2discord-forge-1.18.x-${{ inputs.version }}.jar 34 | name: '[Forge 1.18.x] ${{ inputs.version }}' 35 | changelog-file: CHANGELOG.md 36 | loaders: | 37 | forge 38 | game-versions: | 39 | 1.18 40 | 1.18.1 41 | 1.18.2 42 | - uses: tsickert/discord-webhook@v5.3.0 43 | with: 44 | webhook-url: ${{ secrets.WEBHOOK_URL }} 45 | content: 'New Mc2Discord version released: [Forge 1.18.x] ${{ inputs.version }}' -------------------------------------------------------------------------------- /.github/workflows/publish-fabric-1.20.1.yml: -------------------------------------------------------------------------------- 1 | name: 'Publish fabric 1.20.1' 2 | run-name: Publish fabric-1.20.1-${{ inputs.version }} 3 | 4 | on: 5 | workflow_call: 6 | inputs: 7 | version: 8 | required: true 9 | type: string 10 | secrets: 11 | MODRINTH_TOKEN: 12 | required: true 13 | CURSEFORGE_TOKEN: 14 | required: true 15 | WEBHOOK_URL: 16 | required: true 17 | 18 | jobs: 19 | publish-fabric-1-20-x: 20 | runs-on: ubuntu-latest 21 | steps: 22 | - uses: actions/checkout@v4 23 | - uses: actions/download-artifact@v4 24 | - uses: Kir-Antipov/mc-publish@v3.3 25 | with: 26 | modrinth-id: Cfbcv7uF 27 | modrinth-token: ${{ secrets.MODRINTH_TOKEN }} 28 | curseforge-id: 325235 29 | curseforge-token: ${{ secrets.CURSEFORGE_TOKEN }} 30 | 31 | modrinth-unfeature-mode: intersection 32 | 33 | files: mc2discord-fabric-1.20.1-${{ inputs.version }}/mc2discord-fabric-1.20.1-${{ inputs.version }}.jar 34 | name: '[Fabric 1.20.1] ${{ inputs.version }}' 35 | changelog-file: CHANGELOG.md 36 | loaders: | 37 | fabric 38 | quilt 39 | game-versions: | 40 | 1.20 41 | 1.20.1 42 | - uses: tsickert/discord-webhook@v5.3.0 43 | with: 44 | webhook-url: ${{ secrets.WEBHOOK_URL }} 45 | content: 'New Mc2Discord version released: [Fabric 1.20.1] ${{ inputs.version }}' -------------------------------------------------------------------------------- /.github/workflows/publish-forge-1.21.x.yml: -------------------------------------------------------------------------------- 1 | name: "Publish forge 1.21.x" 2 | run-name: Publish forge-1.21.x-${{ inputs.version }} 3 | 4 | on: 5 | workflow_call: 6 | inputs: 7 | version: 8 | required: true 9 | type: string 10 | secrets: 11 | MODRINTH_TOKEN: 12 | required: true 13 | CURSEFORGE_TOKEN: 14 | required: true 15 | WEBHOOK_URL: 16 | required: true 17 | 18 | jobs: 19 | publish-forge-1-21-x: 20 | runs-on: ubuntu-latest 21 | steps: 22 | - uses: actions/checkout@v4 23 | - uses: actions/download-artifact@v4 24 | - uses: Kir-Antipov/mc-publish@v3.3 25 | with: 26 | modrinth-id: Cfbcv7uF 27 | modrinth-token: ${{ secrets.MODRINTH_TOKEN }} 28 | curseforge-id: 325235 29 | curseforge-token: ${{ secrets.CURSEFORGE_TOKEN }} 30 | 31 | modrinth-unfeature-mode: intersection 32 | 33 | files: mc2discord-forge-1.21.x-${{ inputs.version }}/mc2discord-forge-1.21.x-${{ inputs.version }}.jar 34 | name: "[Forge 1.21.x] ${{ inputs.version }}" 35 | changelog-file: CHANGELOG.md 36 | loaders: | 37 | forge 38 | game-versions: | 39 | 1.21.2 40 | 1.21.3 41 | 1.21.4 42 | - uses: tsickert/discord-webhook@v5.3.0 43 | with: 44 | webhook-url: ${{ secrets.WEBHOOK_URL }} 45 | content: "New Mc2Discord version released: [Forge 1.21.x] ${{ inputs.version }}" 46 | -------------------------------------------------------------------------------- /mc2discord-core/src/main/resources/assets/mc2discord/m2d-lang/core/tr_tr.json: -------------------------------------------------------------------------------- 1 | { 2 | "config.messages.start.value": "Sunucu başladı", 3 | "config.messages.stop.value": "Sunucu durduruldu", 4 | "config.messages.join.value": "${player_display_name} oyuna katıldı", 5 | "config.messages.leave.value": "${player_display_name} oyundan ayrıldı", 6 | "config.messages.death.value": "${death_message}", 7 | "config.messages.advancement.value": "${player_display_name} başarı elde etti ${advancement_title}. ${advancement_description}.", 8 | "config.account.messages.link_get_code.value": "Hesabınızı bağlamak için, ${command} mesajını ${bot_name}#${bot_discriminator}'ya Discord'da özel mesaj olarak gönderin", 9 | "config.account.messages.link_successful.value": "Hesabınız şimdi bağlı", 10 | "config.account.messages.link_invalid_code.value": "Bu kod geçersiz", 11 | "config.account.messages.link_error_already.value": "Hesabınız zaten bağlı", 12 | "config.account.messages.unlink_successful.value": "Hesabınız şimdi bağlantısı kesildi", 13 | "config.account.messages.unlink_error.value": "Hesabınızın bağlantısını kesemezsiniz", 14 | "config.account.messages.missing_roles.value": "Hesabınızı bağlamak için gerekli rollere sahip değilsiniz", 15 | "config.style.reply_format.value": "${member_nickname} yanıt olarak: ", 16 | "config.style.presence.message.value": "${online_players} / ${max_players} oyuncu", 17 | "config.misc.discord_text.value": "Davet bağlantısı tanımlanmamış" 18 | } -------------------------------------------------------------------------------- /.github/workflows/publish-fabric-1.19.x.yml: -------------------------------------------------------------------------------- 1 | name: 'Publish fabric 1.19.x' 2 | run-name: Publish fabric-1.19.x-${{ inputs.version }} 3 | 4 | on: 5 | workflow_call: 6 | inputs: 7 | version: 8 | required: true 9 | type: string 10 | secrets: 11 | MODRINTH_TOKEN: 12 | required: true 13 | CURSEFORGE_TOKEN: 14 | required: true 15 | WEBHOOK_URL: 16 | required: true 17 | 18 | jobs: 19 | publish-fabric-1-19-x: 20 | runs-on: ubuntu-latest 21 | steps: 22 | - uses: actions/checkout@v4 23 | - uses: actions/download-artifact@v4 24 | - uses: Kir-Antipov/mc-publish@v3.3 25 | with: 26 | modrinth-id: Cfbcv7uF 27 | modrinth-token: ${{ secrets.MODRINTH_TOKEN }} 28 | curseforge-id: 325235 29 | curseforge-token: ${{ secrets.CURSEFORGE_TOKEN }} 30 | 31 | modrinth-unfeature-mode: intersection 32 | 33 | files: mc2discord-fabric-1.19.x-${{ inputs.version }}/mc2discord-fabric-1.19.x-${{ inputs.version }}.jar 34 | name: '[Fabric 1.19.x] ${{ inputs.version }}' 35 | changelog-file: CHANGELOG.md 36 | loaders: | 37 | fabric 38 | quilt 39 | game-versions: | 40 | 1.19.3 41 | 1.19.4 42 | - uses: tsickert/discord-webhook@v5.3.0 43 | with: 44 | webhook-url: ${{ secrets.WEBHOOK_URL }} 45 | content: 'New Mc2Discord version released: [Fabric 1.19.x] ${{ inputs.version }}' 46 | -------------------------------------------------------------------------------- /.github/workflows/publish-fabric-1.20.x.yml: -------------------------------------------------------------------------------- 1 | name: 'Publish fabric 1.20.x' 2 | run-name: Publish fabric-1.20.x-${{ inputs.version }} 3 | 4 | on: 5 | workflow_call: 6 | inputs: 7 | version: 8 | required: true 9 | type: string 10 | secrets: 11 | MODRINTH_TOKEN: 12 | required: true 13 | CURSEFORGE_TOKEN: 14 | required: true 15 | WEBHOOK_URL: 16 | required: true 17 | 18 | jobs: 19 | publish-fabric-1-20-x: 20 | runs-on: ubuntu-latest 21 | steps: 22 | - uses: actions/checkout@v4 23 | - uses: actions/download-artifact@v4 24 | - uses: Kir-Antipov/mc-publish@v3.3 25 | with: 26 | modrinth-id: Cfbcv7uF 27 | modrinth-token: ${{ secrets.MODRINTH_TOKEN }} 28 | curseforge-id: 325235 29 | curseforge-token: ${{ secrets.CURSEFORGE_TOKEN }} 30 | 31 | modrinth-unfeature-mode: intersection 32 | 33 | files: mc2discord-fabric-1.20.x-${{ inputs.version }}/mc2discord-fabric-1.20.6-${{ inputs.version }}.jar 34 | name: '[Fabric 1.20.6] ${{ inputs.version }}' 35 | changelog-file: CHANGELOG.md 36 | loaders: | 37 | fabric 38 | quilt 39 | game-versions: | 40 | 1.20.5 41 | 1.20.6 42 | - uses: tsickert/discord-webhook@v5.3.0 43 | with: 44 | webhook-url: ${{ secrets.WEBHOOK_URL }} 45 | content: 'New Mc2Discord version released: [Fabric 1.20.x] ${{ inputs.version }}' 46 | -------------------------------------------------------------------------------- /.github/workflows/publish-fabric-1.18.x.yml: -------------------------------------------------------------------------------- 1 | name: 'Publish fabric 1.18.x' 2 | run-name: Publish fabric-1.18.x-${{ inputs.version }} 3 | 4 | on: 5 | workflow_call: 6 | inputs: 7 | version: 8 | required: true 9 | type: string 10 | secrets: 11 | MODRINTH_TOKEN: 12 | required: true 13 | CURSEFORGE_TOKEN: 14 | required: true 15 | WEBHOOK_URL: 16 | required: true 17 | 18 | jobs: 19 | publish-fabric-1-18-x: 20 | runs-on: ubuntu-latest 21 | steps: 22 | - uses: actions/checkout@v4 23 | - uses: actions/download-artifact@v4 24 | - uses: Kir-Antipov/mc-publish@v3.3 25 | with: 26 | modrinth-id: Cfbcv7uF 27 | modrinth-token: ${{ secrets.MODRINTH_TOKEN }} 28 | curseforge-id: 325235 29 | curseforge-token: ${{ secrets.CURSEFORGE_TOKEN }} 30 | 31 | modrinth-unfeature-mode: intersection 32 | 33 | files: mc2discord-fabric-1.18.x-${{ inputs.version }}/mc2discord-fabric-1.18.x-${{ inputs.version }}.jar 34 | name: '[Fabric 1.18.x] ${{ inputs.version }}' 35 | changelog-file: CHANGELOG.md 36 | loaders: | 37 | fabric 38 | quilt 39 | game-versions: | 40 | 1.18 41 | 1.18.1 42 | 1.18.2 43 | - uses: tsickert/discord-webhook@v5.3.0 44 | with: 45 | webhook-url: ${{ secrets.WEBHOOK_URL }} 46 | content: 'New Mc2Discord version released: [Fabric 1.18.x] ${{ inputs.version }}' -------------------------------------------------------------------------------- /mc2discord-1.20.x/fabric/src/main/java/fr/denisd3d/mc2discord/fabric/mixin/PlayerAdvancementsMixin.java: -------------------------------------------------------------------------------- 1 | package fr.denisd3d.mc2discord.fabric.mixin; 2 | 3 | import fr.denisd3d.mc2discord.fabric.events.PlayerCompletedAdvancementCallback; 4 | import net.minecraft.advancements.AdvancementHolder; 5 | import net.minecraft.advancements.AdvancementProgress; 6 | import net.minecraft.server.PlayerAdvancements; 7 | import net.minecraft.server.level.ServerPlayer; 8 | import org.spongepowered.asm.mixin.Mixin; 9 | import org.spongepowered.asm.mixin.Shadow; 10 | import org.spongepowered.asm.mixin.injection.At; 11 | import org.spongepowered.asm.mixin.injection.Inject; 12 | import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; 13 | 14 | @Mixin(PlayerAdvancements.class) 15 | public class PlayerAdvancementsMixin { 16 | 17 | @Shadow 18 | private ServerPlayer player; 19 | 20 | @SuppressWarnings("SameReturnValue") 21 | @Shadow 22 | public AdvancementProgress getOrStartProgress(AdvancementHolder advancementHolder) { 23 | return null; 24 | } 25 | 26 | @Inject(method = "award", at = @At("RETURN")) 27 | private void grantCriterion(AdvancementHolder advancementHolder, String string, CallbackInfoReturnable cir) { 28 | AdvancementProgress advancementProgress = this.getOrStartProgress(advancementHolder); 29 | if (!advancementProgress.isDone()) return; 30 | PlayerCompletedAdvancementCallback.EVENT.invoker().onPlayerAdvancement(player, advancementHolder); 31 | } 32 | } -------------------------------------------------------------------------------- /mc2discord-1.21.5/fabric/src/main/java/fr/denisd3d/mc2discord/fabric/mixin/PlayerAdvancementsMixin.java: -------------------------------------------------------------------------------- 1 | package fr.denisd3d.mc2discord.fabric.mixin; 2 | 3 | import fr.denisd3d.mc2discord.fabric.events.PlayerCompletedAdvancementCallback; 4 | import net.minecraft.advancements.AdvancementHolder; 5 | import net.minecraft.advancements.AdvancementProgress; 6 | import net.minecraft.server.PlayerAdvancements; 7 | import net.minecraft.server.level.ServerPlayer; 8 | import org.spongepowered.asm.mixin.Mixin; 9 | import org.spongepowered.asm.mixin.Shadow; 10 | import org.spongepowered.asm.mixin.injection.At; 11 | import org.spongepowered.asm.mixin.injection.Inject; 12 | import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; 13 | 14 | @Mixin(PlayerAdvancements.class) 15 | public class PlayerAdvancementsMixin { 16 | 17 | @Shadow 18 | private ServerPlayer player; 19 | 20 | @SuppressWarnings("SameReturnValue") 21 | @Shadow 22 | public AdvancementProgress getOrStartProgress(AdvancementHolder advancementHolder) { 23 | return null; 24 | } 25 | 26 | @Inject(method = "award", at = @At("RETURN")) 27 | private void grantCriterion(AdvancementHolder advancementHolder, String string, CallbackInfoReturnable cir) { 28 | AdvancementProgress advancementProgress = this.getOrStartProgress(advancementHolder); 29 | if (!advancementProgress.isDone()) return; 30 | PlayerCompletedAdvancementCallback.EVENT.invoker().onPlayerAdvancement(player, advancementHolder); 31 | } 32 | } -------------------------------------------------------------------------------- /mc2discord-1.21.x/fabric/src/main/java/fr/denisd3d/mc2discord/fabric/mixin/PlayerAdvancementsMixin.java: -------------------------------------------------------------------------------- 1 | package fr.denisd3d.mc2discord.fabric.mixin; 2 | 3 | import fr.denisd3d.mc2discord.fabric.events.PlayerCompletedAdvancementCallback; 4 | import net.minecraft.advancements.AdvancementHolder; 5 | import net.minecraft.advancements.AdvancementProgress; 6 | import net.minecraft.server.PlayerAdvancements; 7 | import net.minecraft.server.level.ServerPlayer; 8 | import org.spongepowered.asm.mixin.Mixin; 9 | import org.spongepowered.asm.mixin.Shadow; 10 | import org.spongepowered.asm.mixin.injection.At; 11 | import org.spongepowered.asm.mixin.injection.Inject; 12 | import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; 13 | 14 | @Mixin(PlayerAdvancements.class) 15 | public class PlayerAdvancementsMixin { 16 | 17 | @Shadow 18 | private ServerPlayer player; 19 | 20 | @SuppressWarnings("SameReturnValue") 21 | @Shadow 22 | public AdvancementProgress getOrStartProgress(AdvancementHolder advancementHolder) { 23 | return null; 24 | } 25 | 26 | @Inject(method = "award", at = @At("RETURN")) 27 | private void grantCriterion(AdvancementHolder advancementHolder, String string, CallbackInfoReturnable cir) { 28 | AdvancementProgress advancementProgress = this.getOrStartProgress(advancementHolder); 29 | if (!advancementProgress.isDone()) return; 30 | PlayerCompletedAdvancementCallback.EVENT.invoker().onPlayerAdvancement(player, advancementHolder); 31 | } 32 | } -------------------------------------------------------------------------------- /mc2discord-core/build.gradle.kts: -------------------------------------------------------------------------------- 1 | plugins { 2 | id("java-library") 3 | id("idea") 4 | } 5 | 6 | repositories { 7 | maven("https://jitpack.io") 8 | mavenCentral() 9 | } 10 | 11 | dependencies { 12 | // Discord4J 13 | api(group = "com.discord4j", name = "discord4j-core", version = "3.3.0-RC1") 14 | 15 | // Config 16 | implementation(group = "com.github.denisd3d", name = "config4j", version = "1.1.6") 17 | implementation(group = "com.electronwill.night-config", name = "toml", version = "3.6.6") 18 | 19 | // Messages 20 | @Suppress("VulnerableDependency") 21 | implementation(group = "com.vdurmont", name = "emoji-java", version = "5.1.1") 22 | 23 | // Account 24 | implementation(group = "org.apache.commons", name = "commons-collections4", version = "4.4") 25 | 26 | // Minecraft dependencies (Shipped in Minecraft) 27 | compileOnly(group = "com.google.code.gson", name = "gson", version = "2.10") 28 | compileOnly(group = "commons-io", name = "commons-io", version = "2.11.0") 29 | compileOnly(group = "org.apache.commons", name = "commons-lang3", version = "3.11") 30 | compileOnly(group = "org.slf4j", name = "slf4j-api", version = "2.0.1") 31 | compileOnly(group = "com.google.guava", name = "guava", version = "31.1-jre") 32 | compileOnly(group = "org.apache.logging.log4j", name = "log4j-core", version = "2.19.0") 33 | 34 | // MISC 35 | compileOnly(group = "com.google.code.findbugs", name = "jsr305", version = "3.0.2") // Remove compilation warning 36 | } -------------------------------------------------------------------------------- /.github/workflows/publish-fabric-1.21.x.yml: -------------------------------------------------------------------------------- 1 | name: "Publish fabric 1.21.x" 2 | run-name: Publish fabric-1.21.x-${{ inputs.version }} 3 | 4 | on: 5 | workflow_call: 6 | inputs: 7 | version: 8 | required: true 9 | type: string 10 | secrets: 11 | MODRINTH_TOKEN: 12 | required: true 13 | CURSEFORGE_TOKEN: 14 | required: true 15 | WEBHOOK_URL: 16 | required: true 17 | 18 | jobs: 19 | publish-fabric-1-21-x: 20 | runs-on: ubuntu-latest 21 | steps: 22 | - uses: actions/checkout@v4 23 | - uses: actions/download-artifact@v4 24 | - uses: Kir-Antipov/mc-publish@v3.3 25 | with: 26 | modrinth-id: Cfbcv7uF 27 | modrinth-token: ${{ secrets.MODRINTH_TOKEN }} 28 | curseforge-id: 325235 29 | curseforge-token: ${{ secrets.CURSEFORGE_TOKEN }} 30 | 31 | modrinth-unfeature-mode: intersection 32 | 33 | files: mc2discord-fabric-1.21.x-${{ inputs.version }}/mc2discord-fabric-1.21.x-${{ inputs.version }}.jar 34 | name: "[Fabric 1.21.x] ${{ inputs.version }}" 35 | changelog-file: CHANGELOG.md 36 | loaders: | 37 | fabric 38 | quilt 39 | game-versions: | 40 | 1.21.2 41 | 1.21.3 42 | 1.21.4 43 | - uses: tsickert/discord-webhook@v5.3.0 44 | with: 45 | webhook-url: ${{ secrets.WEBHOOK_URL }} 46 | content: "New Mc2Discord version released: [Fabric 1.21.x] ${{ inputs.version }}" 47 | -------------------------------------------------------------------------------- /mc2discord-core/src/main/resources/assets/mc2discord/m2d-lang/core/fr_fr.json: -------------------------------------------------------------------------------- 1 | { 2 | "config.messages.start.value": "Le serveur a démarré", 3 | "config.messages.stop.value": "Le serveur s'est arrêté", 4 | "config.messages.join.value": "${player_display_name} a rejoint le jeu", 5 | "config.messages.leave.value": "${player_display_name} a quitté le jeu", 6 | "config.messages.death.value": "${death_message}", 7 | "config.messages.advancement.value": "${player_display_name} vient d'obtenir le succès ${advancement_title}. ${advancement_description}.", 8 | "config.account.messages.link_get_code.value": "Pour lier votre compte, envoyez le message ${command} à ${bot_name}#${bot_discriminator} en message privé sur Discord", 9 | "config.account.messages.link_successful.value": "Votre compte est maintenant lié", 10 | "config.account.messages.link_invalid_code.value": "Ce code est invalide", 11 | "config.account.messages.link_error_already.value": "Votre compte est déjà lié", 12 | "config.account.messages.unlink_successful.value": "Votre compte est maintenant délié", 13 | "config.account.messages.unlink_error.value": "Vous ne pouvez pas délié votre compte", 14 | "config.account.messages.missing_roles.value": "Vous n'avez pas les roles requis pour lier votre compte", 15 | "config.style.reply_format.value": "En réponse à ${member_nickname}: ", 16 | "config.style.presence.message.value": "${online_players} / ${max_players} joueurs", 17 | "config.misc.discord_text.value": "Lien d'invitation non définit" 18 | } -------------------------------------------------------------------------------- /mc2discord-core/src/main/java/fr/denisd3d/mc2discord/core/entities/DeathEntity.java: -------------------------------------------------------------------------------- 1 | package fr.denisd3d.mc2discord.core.entities; 2 | 3 | import org.apache.commons.lang3.time.DurationFormatUtils; 4 | 5 | import java.util.Map; 6 | import java.util.function.BiFunction; 7 | 8 | public class DeathEntity extends Entity { 9 | private static final String prefix = "death_"; 10 | public final String damageType; 11 | public final String message; 12 | public final int combatDuration; 13 | public final String attackerName; 14 | public final float attackerHealth; 15 | 16 | public DeathEntity(String damageType, String message, int combatDuration, String attackerName, float attackerHealth) { 17 | this.damageType = damageType; 18 | this.message = message; 19 | this.combatDuration = combatDuration; 20 | this.attackerName = attackerName; 21 | this.attackerHealth = attackerHealth; 22 | } 23 | 24 | @Override 25 | public void getReplacements(Map replacements, Map> formatters) { 26 | replacements.put(prefix + "damage_type", this.damageType); 27 | replacements.put(prefix + "message", this.message); 28 | replacements.put(prefix + "combat_duration", Integer.toString(this.combatDuration)); 29 | replacements.put(prefix + "attacker_name", this.attackerName); 30 | replacements.put(prefix + "attacker_health", Float.toString(this.attackerHealth)); 31 | 32 | formatters.put(prefix + "combat_duration", (format, value) -> DurationFormatUtils.formatDuration(Long.parseLong(value), format)); 33 | 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /mc2discord-core/src/main/java/fr/denisd3d/mc2discord/core/entities/LogEntity.java: -------------------------------------------------------------------------------- 1 | package fr.denisd3d.mc2discord.core.entities; 2 | 3 | import org.apache.commons.lang3.time.DateFormatUtils; 4 | import org.apache.logging.log4j.Level; 5 | import org.apache.logging.log4j.message.Message; 6 | 7 | import java.util.Map; 8 | import java.util.function.BiFunction; 9 | 10 | public class LogEntity extends Entity { 11 | private static final String prefix = "log_"; 12 | public final String loggerName; 13 | public final String threadName; 14 | public final long time; 15 | public final Level level; 16 | public final Message message; 17 | 18 | 19 | public LogEntity(String loggerName, String threadName, long time, Level level, Message message) { 20 | 21 | this.loggerName = loggerName; 22 | this.threadName = threadName; 23 | this.time = time; 24 | this.level = level; 25 | this.message = message; 26 | } 27 | 28 | @Override 29 | public void getReplacements(Map replacements, Map> formatters) { 30 | replacements.put(prefix + "logger_name", this.loggerName.substring(this.loggerName.lastIndexOf(".") + 1)); 31 | replacements.put(prefix + "thread_name", this.threadName); 32 | replacements.put(prefix + "time", String.valueOf(this.time)); 33 | replacements.put(prefix + "level", this.level.name()); 34 | replacements.put(prefix + "message", this.message.getFormattedMessage()); 35 | 36 | formatters.put(prefix + "time", (format, value) -> DateFormatUtils.format(Long.parseLong(value), format)); 37 | 38 | } 39 | } 40 | 41 | -------------------------------------------------------------------------------- /mc2discord-1.18.x/fabric/src/main/java/fr/denisd3d/mc2discord/fabric/mixin/CommandsMixin.java: -------------------------------------------------------------------------------- 1 | package fr.denisd3d.mc2discord.fabric.mixin; 2 | 3 | import com.mojang.brigadier.CommandDispatcher; 4 | import com.mojang.brigadier.ParseResults; 5 | import com.mojang.brigadier.StringReader; 6 | import fr.denisd3d.mc2discord.fabric.events.CommandExecuteCallback; 7 | import net.minecraft.commands.CommandSourceStack; 8 | import net.minecraft.commands.Commands; 9 | import net.minecraft.world.InteractionResult; 10 | import org.spongepowered.asm.mixin.Final; 11 | import org.spongepowered.asm.mixin.Mixin; 12 | import org.spongepowered.asm.mixin.Shadow; 13 | import org.spongepowered.asm.mixin.injection.At; 14 | import org.spongepowered.asm.mixin.injection.Inject; 15 | import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; 16 | 17 | @Mixin(Commands.class) 18 | public class CommandsMixin { 19 | @Final 20 | @Shadow 21 | private CommandDispatcher dispatcher; 22 | 23 | @Inject(method = "performCommand", at = @At("HEAD"), cancellable = true) 24 | private void execute(CommandSourceStack commandSourceStack, String string, CallbackInfoReturnable cir) { 25 | StringReader stringReader = new StringReader(string); 26 | if (stringReader.canRead() && stringReader.peek() == '/') { 27 | stringReader.skip(); 28 | } 29 | 30 | ParseResults parseResults = dispatcher.parse(stringReader, commandSourceStack); 31 | 32 | InteractionResult result = CommandExecuteCallback.EVENT.invoker().onCommandExecute(parseResults); 33 | 34 | if(result == InteractionResult.FAIL) { 35 | cir.setReturnValue(0); 36 | } 37 | } 38 | } -------------------------------------------------------------------------------- /mc2discord-core/src/main/java/fr/denisd3d/mc2discord/core/Vars.java: -------------------------------------------------------------------------------- 1 | package fr.denisd3d.mc2discord.core; 2 | 3 | import com.google.common.collect.HashBasedTable; 4 | import com.google.common.collect.Table; 5 | import discord4j.common.util.Snowflake; 6 | import discord4j.discordjson.possible.Possible; 7 | import discord4j.rest.util.AllowedMentions; 8 | 9 | import java.util.HashMap; 10 | import java.util.Map; 11 | 12 | public class Vars { 13 | // Bot info 14 | public String bot_name = ""; 15 | public String bot_discriminator = ""; 16 | public Snowflake bot_id = M2DUtils.NIL_SNOWFLAKE; 17 | public String mc2discord_display_name = ""; 18 | public String mc2discord_avatar = ""; 19 | public String mc2discord_webhook_name = ""; 20 | 21 | public Table emojiCache = HashBasedTable.create(); // Store emojis to replace in messages :emoji: to <:name:id> for each guild () 22 | public Table channelCache = HashBasedTable.create(); // Store channels to replace in messages to #name for each guild () 23 | public Table memberCache = HashBasedTable.create(); // Store channels to replace in messages to #name for each guild () 24 | public Map channelCacheReverse = new HashMap<>(); // Store channels to get guild ids () 25 | 26 | /** 27 | * The time when the server started, used to calculate the uptime 28 | */ 29 | public static Long startTime = null; 30 | 31 | public Possible allowedMentions = Possible.absent(); 32 | public boolean missingMessageContentIntent = false; 33 | public boolean isStarted = false; 34 | } 35 | -------------------------------------------------------------------------------- /mc2discord-1.21.5/forge/src/main/java/fr/denisd3d/mc2discord/forge/Mc2DiscordForge.java: -------------------------------------------------------------------------------- 1 | package fr.denisd3d.mc2discord.forge; 2 | 3 | import fr.denisd3d.mc2discord.minecraft.Mc2DiscordMinecraft; 4 | import net.minecraftforge.common.MinecraftForge; 5 | import net.minecraftforge.event.RegisterCommandsEvent; 6 | import net.minecraftforge.event.server.ServerAboutToStartEvent; 7 | import net.minecraftforge.event.server.ServerStartedEvent; 8 | import net.minecraftforge.event.server.ServerStoppedEvent; 9 | import net.minecraftforge.eventbus.api.SubscribeEvent; 10 | import net.minecraftforge.fml.IExtensionPoint; 11 | import net.minecraftforge.fml.ModLoadingContext; 12 | import net.minecraftforge.fml.common.Mod; 13 | import net.minecraftforge.fml.javafmlmod.FMLJavaModLoadingContext; 14 | 15 | @Mod(Mc2DiscordForge.MOD_ID) 16 | public class Mc2DiscordForge { 17 | public static final String MOD_ID = "mc2discord"; 18 | 19 | public Mc2DiscordForge() { 20 | MinecraftForge.EVENT_BUS.register(this); 21 | MinecraftForge.EVENT_BUS.register(ForgeEvents.class); 22 | } 23 | 24 | @SubscribeEvent 25 | public void onRegisterCommands(RegisterCommandsEvent event) { 26 | Mc2DiscordMinecraft.onRegisterCommands(event.getDispatcher(), event.getBuildContext()); 27 | } 28 | 29 | @SubscribeEvent 30 | public void onServerAboutToStart(ServerAboutToStartEvent event) { 31 | Mc2DiscordMinecraft.onServerStarting(event.getServer()); 32 | } 33 | 34 | @SubscribeEvent 35 | public void onServerStarted(ServerStartedEvent event) { 36 | Mc2DiscordMinecraft.onServerStarted(event.getServer()); 37 | } 38 | 39 | @SubscribeEvent 40 | public void onServerStopped(ServerStoppedEvent event) { 41 | Mc2DiscordMinecraft.onServerStopped(event.getServer()); 42 | } 43 | } 44 | -------------------------------------------------------------------------------- /mc2discord-1.21.x/forge/src/main/java/fr/denisd3d/mc2discord/forge/Mc2DiscordForge.java: -------------------------------------------------------------------------------- 1 | package fr.denisd3d.mc2discord.forge; 2 | 3 | import fr.denisd3d.mc2discord.minecraft.Mc2DiscordMinecraft; 4 | import net.minecraftforge.common.MinecraftForge; 5 | import net.minecraftforge.event.RegisterCommandsEvent; 6 | import net.minecraftforge.event.server.ServerAboutToStartEvent; 7 | import net.minecraftforge.event.server.ServerStartedEvent; 8 | import net.minecraftforge.event.server.ServerStoppedEvent; 9 | import net.minecraftforge.eventbus.api.SubscribeEvent; 10 | import net.minecraftforge.fml.IExtensionPoint; 11 | import net.minecraftforge.fml.ModLoadingContext; 12 | import net.minecraftforge.fml.common.Mod; 13 | import net.minecraftforge.fml.javafmlmod.FMLJavaModLoadingContext; 14 | 15 | @Mod(Mc2DiscordForge.MOD_ID) 16 | public class Mc2DiscordForge { 17 | public static final String MOD_ID = "mc2discord"; 18 | 19 | public Mc2DiscordForge() { 20 | MinecraftForge.EVENT_BUS.register(this); 21 | MinecraftForge.EVENT_BUS.register(ForgeEvents.class); 22 | } 23 | 24 | @SubscribeEvent 25 | public void onRegisterCommands(RegisterCommandsEvent event) { 26 | Mc2DiscordMinecraft.onRegisterCommands(event.getDispatcher(), event.getBuildContext()); 27 | } 28 | 29 | @SubscribeEvent 30 | public void onServerAboutToStart(ServerAboutToStartEvent event) { 31 | Mc2DiscordMinecraft.onServerStarting(event.getServer()); 32 | } 33 | 34 | @SubscribeEvent 35 | public void onServerStarted(ServerStartedEvent event) { 36 | Mc2DiscordMinecraft.onServerStarted(event.getServer()); 37 | } 38 | 39 | @SubscribeEvent 40 | public void onServerStopped(ServerStoppedEvent event) { 41 | Mc2DiscordMinecraft.onServerStopped(event.getServer()); 42 | } 43 | } 44 | -------------------------------------------------------------------------------- /mc2discord-core/src/main/java/fr/denisd3d/mc2discord/core/entities/MemberEntity.java: -------------------------------------------------------------------------------- 1 | package fr.denisd3d.mc2discord.core.entities; 2 | 3 | import java.util.Map; 4 | import java.util.function.BiFunction; 5 | 6 | public class MemberEntity extends Entity { 7 | private static final String prefix = "member_"; 8 | public final String global_name; 9 | public final String username; 10 | public final String nickname; 11 | public final String avatarUrl; 12 | public final String top_role_color; 13 | 14 | public MemberEntity(String global_name, String username, String nickname, String avatarUrl, int top_role_color) { 15 | this.global_name = global_name; 16 | this.username = username; 17 | this.nickname = nickname; 18 | this.avatarUrl = avatarUrl; 19 | StringBuilder hex = new StringBuilder(Integer.toHexString(top_role_color & 0xffffff)); 20 | while (hex.length() < 6) { 21 | hex.insert(0, "0"); 22 | } 23 | this.top_role_color = "#" + hex; 24 | } 25 | 26 | @Override 27 | public void getReplacements(Map replacements, Map> formatters) { 28 | replacements.put(prefix + "display_name", !this.nickname.isEmpty() ? this.nickname : this.global_name); 29 | replacements.put(prefix + "global_name", this.global_name); 30 | replacements.put(prefix + "username", this.username); 31 | replacements.put(prefix + "nickname", this.nickname); 32 | replacements.put(prefix + "avatar_url", this.avatarUrl); 33 | replacements.put(prefix + "top_role_color", this.top_role_color); 34 | 35 | formatters.put("color_start", (format, value) -> "${color_start|" + (format.equals("top_role") ? this.top_role_color : format) + "}"); 36 | } 37 | } 38 | -------------------------------------------------------------------------------- /mc2discord-core/src/main/java/fr/denisd3d/mc2discord/core/config/Channels.java: -------------------------------------------------------------------------------- 1 | package fr.denisd3d.mc2discord.core.config; 2 | 3 | import com.electronwill.nightconfig.core.conversion.Conversion; 4 | import com.electronwill.nightconfig.core.conversion.Path; 5 | import com.electronwill.nightconfig.core.conversion.PreserveNotNull; 6 | import discord4j.common.util.Snowflake; 7 | import fr.denisd3d.config4j.Comment; 8 | import fr.denisd3d.mc2discord.core.M2DUtils; 9 | import fr.denisd3d.mc2discord.core.config.converters.SnowflakeConverter; 10 | 11 | import java.util.ArrayList; 12 | import java.util.Arrays; 13 | import java.util.List; 14 | 15 | public class Channels { 16 | @Path("Channel") 17 | @PreserveNotNull 18 | public List channels = new ArrayList<>(); 19 | 20 | public static class Channel { 21 | @Path("id") 22 | @Comment("config.channels.id.comment") 23 | @Conversion(SnowflakeConverter.class) 24 | @PreserveNotNull 25 | public Snowflake channel_id = M2DUtils.NIL_SNOWFLAKE; 26 | 27 | @Path("subscriptions") 28 | @Comment("config.channels.subscriptions.comment") 29 | @PreserveNotNull 30 | public List subscriptions = new ArrayList<>(); 31 | 32 | @Path("mode") 33 | @Comment("config.channels.mode.comment") 34 | @PreserveNotNull 35 | public SendMode mode = SendMode.WEBHOOK; 36 | 37 | @Path("comment") 38 | public String comment; 39 | 40 | public Channel(String... subscriptions) { 41 | this.subscriptions.addAll(Arrays.asList(subscriptions)); 42 | } 43 | 44 | @SuppressWarnings("unused") 45 | public Channel() { // Allow NightConfig to create new instances 46 | } 47 | 48 | public enum SendMode { 49 | WEBHOOK, PLAIN_TEXT, EMBED 50 | } 51 | } 52 | 53 | } 54 | -------------------------------------------------------------------------------- /mc2discord-1.20.1/forge/src/main/java/fr/denisd3d/mc2discord/forge/Mc2DiscordForge.java: -------------------------------------------------------------------------------- 1 | package fr.denisd3d.mc2discord.forge; 2 | 3 | import fr.denisd3d.mc2discord.minecraft.Mc2DiscordMinecraft; 4 | import net.minecraftforge.common.MinecraftForge; 5 | import net.minecraftforge.event.RegisterCommandsEvent; 6 | import net.minecraftforge.event.server.ServerAboutToStartEvent; 7 | import net.minecraftforge.event.server.ServerStartedEvent; 8 | import net.minecraftforge.event.server.ServerStoppedEvent; 9 | import net.minecraftforge.eventbus.api.SubscribeEvent; 10 | import net.minecraftforge.fml.IExtensionPoint; 11 | import net.minecraftforge.fml.ModLoadingContext; 12 | import net.minecraftforge.fml.common.Mod; 13 | 14 | @Mod(Mc2DiscordForge.MOD_ID) 15 | public class Mc2DiscordForge { 16 | public static final String MOD_ID = "mc2discord"; 17 | 18 | public Mc2DiscordForge() { 19 | ModLoadingContext.get().registerExtensionPoint(IExtensionPoint.DisplayTest.class, () -> new IExtensionPoint.DisplayTest(() -> IExtensionPoint.DisplayTest.IGNORESERVERONLY, (a, b) -> true)); 20 | MinecraftForge.EVENT_BUS.register(this); 21 | MinecraftForge.EVENT_BUS.register(ForgeEvents.class); 22 | } 23 | 24 | @SubscribeEvent 25 | public void onRegisterCommands(RegisterCommandsEvent event) { 26 | Mc2DiscordMinecraft.onRegisterCommands(event.getDispatcher()); 27 | } 28 | 29 | @SubscribeEvent 30 | public void onServerAboutToStart(ServerAboutToStartEvent event) { 31 | Mc2DiscordMinecraft.onServerStarting(event.getServer()); 32 | } 33 | 34 | @SubscribeEvent 35 | public void onServerStarted(ServerStartedEvent event) { 36 | Mc2DiscordMinecraft.onServerStarted(event.getServer()); 37 | } 38 | 39 | @SubscribeEvent 40 | public void onServerStopped(ServerStoppedEvent event) { 41 | Mc2DiscordMinecraft.onServerStopped(event.getServer()); 42 | } 43 | } 44 | -------------------------------------------------------------------------------- /.github/workflows/build-1.18.x.yml: -------------------------------------------------------------------------------- 1 | name: 'Build 1.18.x' 2 | run-name: Build 1.18.x-${{ inputs.version }} 3 | 4 | on: 5 | workflow_dispatch: 6 | inputs: 7 | version: 8 | description: 'Version' 9 | required: true 10 | default: '0.0.0-dev' 11 | workflow_call: 12 | inputs: 13 | version: 14 | required: true 15 | type: string 16 | 17 | jobs: 18 | build-1-18-x: 19 | runs-on: ubuntu-latest 20 | defaults: 21 | run: 22 | working-directory: mc2discord-1.18.x 23 | steps: 24 | - uses: actions/checkout@v4 25 | - name: Set up JDK 17 26 | uses: actions/setup-java@v4 27 | with: 28 | distribution: 'temurin' 29 | java-version: '17' 30 | - name: Cache Gradle 31 | uses: actions/cache@v4 32 | with: 33 | path: | 34 | ~/.gradle/caches 35 | ~/.gradle/wrapper 36 | key: gradle-1.18.x-${{ runner.os }}-${{ hashFiles('**/gradle.properties', '**/build.gradle.kts', '**/settings.gradle', '**/gradle-wrapper.jar') }} 37 | - name: Grant execute permission for gradlew 38 | run: chmod +x gradlew 39 | - name: Build with Gradle 40 | run: ./gradlew build 41 | env: 42 | INPUT_VERSION: ${{ inputs.version }} 43 | - uses: actions/upload-artifact@v4 44 | with: 45 | name: mc2discord-forge-1.18.x-${{ inputs.version }} 46 | path: | 47 | ${{ github.workspace }}/mc2discord-1.18.x/forge/build/libs/ 48 | !${{ github.workspace }}/mc2discord-1.18.x/forge/build/libs/*-slim.jar 49 | - uses: actions/upload-artifact@v4 50 | with: 51 | name: mc2discord-fabric-1.18.x-${{ inputs.version }} 52 | path: | 53 | ${{ github.workspace }}/mc2discord-1.18.x/fabric/build/libs/ 54 | !${{ github.workspace }}/mc2discord-1.18.x/fabric/build/libs/*-all.jar -------------------------------------------------------------------------------- /.github/workflows/build-1.19.x.yml: -------------------------------------------------------------------------------- 1 | name: 'Build 1.19.x' 2 | run-name: Build 1.19.x-${{ inputs.version }} 3 | 4 | on: 5 | workflow_dispatch: 6 | inputs: 7 | version: 8 | description: 'Version' 9 | required: true 10 | default: '0.0.0-dev' 11 | workflow_call: 12 | inputs: 13 | version: 14 | required: true 15 | type: string 16 | 17 | jobs: 18 | build-1-19-x: 19 | runs-on: ubuntu-latest 20 | defaults: 21 | run: 22 | working-directory: mc2discord-1.19.x 23 | steps: 24 | - uses: actions/checkout@v4 25 | - name: Set up JDK 17 26 | uses: actions/setup-java@v4 27 | with: 28 | distribution: 'temurin' 29 | java-version: '17' 30 | - name: Cache Gradle 31 | uses: actions/cache@v4 32 | with: 33 | path: | 34 | ~/.gradle/caches 35 | ~/.gradle/wrapper 36 | key: gradle-1.19.x-${{ runner.os }}-${{ hashFiles('**/gradle.properties', '**/build.gradle.kts', '**/settings.gradle', '**/gradle-wrapper.jar') }} 37 | - name: Grant execute permission for gradlew 38 | run: chmod +x gradlew 39 | - name: Build with Gradle 40 | run: ./gradlew build 41 | env: 42 | INPUT_VERSION: ${{ inputs.version }} 43 | - uses: actions/upload-artifact@v4 44 | with: 45 | name: mc2discord-forge-1.19.x-${{ inputs.version }} 46 | path: | 47 | ${{ github.workspace }}/mc2discord-1.19.x/forge/build/libs/ 48 | !${{ github.workspace }}/mc2discord-1.19.x/forge/build/libs/*-slim.jar 49 | - uses: actions/upload-artifact@v4 50 | with: 51 | name: mc2discord-fabric-1.19.x-${{ inputs.version }} 52 | path: | 53 | ${{ github.workspace }}/mc2discord-1.19.x/fabric/build/libs/ 54 | !${{ github.workspace }}/mc2discord-1.19.x/fabric/build/libs/*-all.jar -------------------------------------------------------------------------------- /.github/workflows/build-1.20.1.yml: -------------------------------------------------------------------------------- 1 | name: 'Build 1.20.1' 2 | run-name: Build 1.20.1-${{ inputs.version }} 3 | 4 | on: 5 | workflow_dispatch: 6 | inputs: 7 | version: 8 | description: 'Version' 9 | required: true 10 | default: '0.0.0-dev' 11 | workflow_call: 12 | inputs: 13 | version: 14 | required: true 15 | type: string 16 | 17 | jobs: 18 | build-1-20-1: 19 | runs-on: ubuntu-latest 20 | defaults: 21 | run: 22 | working-directory: mc2discord-1.20.1 23 | steps: 24 | - uses: actions/checkout@v4 25 | - name: Set up JDK 17 26 | uses: actions/setup-java@v4 27 | with: 28 | distribution: 'temurin' 29 | java-version: '17' 30 | - name: Cache Gradle 31 | uses: actions/cache@v4 32 | with: 33 | path: | 34 | ~/.gradle/caches 35 | ~/.gradle/wrapper 36 | key: gradle-1.20.1-${{ runner.os }}-${{ hashFiles('**/gradle.properties', '**/build.gradle.kts', '**/settings.gradle', '**/gradle-wrapper.jar') }} 37 | - name: Grant execute permission for gradlew 38 | run: chmod +x gradlew 39 | - name: Build with Gradle 40 | run: ./gradlew build 41 | env: 42 | INPUT_VERSION: ${{ inputs.version }} 43 | - uses: actions/upload-artifact@v4 44 | with: 45 | name: mc2discord-forge-1.20.1-${{ inputs.version }} 46 | path: | 47 | ${{ github.workspace }}/mc2discord-1.20.1/forge/build/libs/ 48 | !${{ github.workspace }}/mc2discord-1.20.1/forge/build/libs/*-slim.jar 49 | - uses: actions/upload-artifact@v4 50 | with: 51 | name: mc2discord-fabric-1.20.1-${{ inputs.version }} 52 | path: | 53 | ${{ github.workspace }}/mc2discord-1.20.1/fabric/build/libs/ 54 | !${{ github.workspace }}/mc2discord-1.20.1/fabric/build/libs/*-all.jar -------------------------------------------------------------------------------- /.github/workflows/build-1.20.x.yml: -------------------------------------------------------------------------------- 1 | name: 'Build 1.20.x' 2 | run-name: Build 1.20.x-${{ inputs.version }} 3 | 4 | on: 5 | workflow_dispatch: 6 | inputs: 7 | version: 8 | description: 'Version' 9 | required: true 10 | default: '0.0.0-dev' 11 | workflow_call: 12 | inputs: 13 | version: 14 | required: true 15 | type: string 16 | 17 | jobs: 18 | build-1-20-x: 19 | runs-on: ubuntu-latest 20 | defaults: 21 | run: 22 | working-directory: mc2discord-1.20.x 23 | steps: 24 | - uses: actions/checkout@v4 25 | - name: Set up JDK 21 26 | uses: actions/setup-java@v4 27 | with: 28 | distribution: 'temurin' 29 | java-version: '21' 30 | - name: Cache Gradle 31 | uses: actions/cache@v4 32 | with: 33 | path: | 34 | ~/.gradle/caches 35 | ~/.gradle/wrapper 36 | key: gradle-1.20.x-${{ runner.os }}-${{ hashFiles('**/gradle.properties', '**/build.gradle.kts', '**/settings.gradle', '**/gradle-wrapper.jar') }} 37 | - name: Grant execute permission for gradlew 38 | run: chmod +x gradlew 39 | - name: Build with Gradle 40 | run: ./gradlew build 41 | env: 42 | INPUT_VERSION: ${{ inputs.version }} 43 | - uses: actions/upload-artifact@v4 44 | with: 45 | name: mc2discord-forge-1.20.x-${{ inputs.version }} 46 | path: | 47 | ${{ github.workspace }}/mc2discord-1.20.x/forge/build/libs/ 48 | !${{ github.workspace }}/mc2discord-1.20.x/forge/build/libs/*-slim.jar 49 | - uses: actions/upload-artifact@v4 50 | with: 51 | name: mc2discord-fabric-1.20.x-${{ inputs.version }} 52 | path: | 53 | ${{ github.workspace }}/mc2discord-1.20.x/fabric/build/libs/ 54 | !${{ github.workspace }}/mc2discord-1.20.x/fabric/build/libs/*-all.jar 55 | -------------------------------------------------------------------------------- /.github/workflows/build-1.21.5.yml: -------------------------------------------------------------------------------- 1 | name: "Build 1.21.5" 2 | run-name: Build 1.21.5-${{ inputs.version }} 3 | 4 | on: 5 | workflow_dispatch: 6 | inputs: 7 | version: 8 | description: "Version" 9 | required: true 10 | default: "0.0.0-dev" 11 | workflow_call: 12 | inputs: 13 | version: 14 | required: true 15 | type: string 16 | 17 | jobs: 18 | build-1-21-5: 19 | runs-on: ubuntu-latest 20 | defaults: 21 | run: 22 | working-directory: mc2discord-1.21.5 23 | steps: 24 | - uses: actions/checkout@v4 25 | - name: Set up JDK 21 26 | uses: actions/setup-java@v4 27 | with: 28 | distribution: "temurin" 29 | java-version: "21" 30 | - name: Cache Gradle 31 | uses: actions/cache@v4 32 | with: 33 | path: | 34 | ~/.gradle/caches 35 | ~/.gradle/wrapper 36 | key: gradle-1.21.5-${{ runner.os }}-${{ hashFiles('**/gradle.properties', '**/build.gradle.kts', '**/settings.gradle', '**/gradle-wrapper.jar') }} 37 | - name: Grant execute permission for gradlew 38 | run: chmod +x gradlew 39 | - name: Build with Gradle 40 | run: ./gradlew build 41 | env: 42 | INPUT_VERSION: ${{ inputs.version }} 43 | - uses: actions/upload-artifact@v4 44 | with: 45 | name: mc2discord-forge-1.21.5-${{ inputs.version }} 46 | path: | 47 | ${{ github.workspace }}/mc2discord-1.21.5/forge/build/libs/ 48 | !${{ github.workspace }}/mc2discord-1.21.5/forge/build/libs/*-slim.jar 49 | - uses: actions/upload-artifact@v4 50 | with: 51 | name: mc2discord-fabric-1.21.5-${{ inputs.version }} 52 | path: | 53 | ${{ github.workspace }}/mc2discord-1.21.5/fabric/build/libs/ 54 | !${{ github.workspace }}/mc2discord-1.21.5/fabric/build/libs/*-all.jar 55 | -------------------------------------------------------------------------------- /.github/workflows/build-1.21.x.yml: -------------------------------------------------------------------------------- 1 | name: 'Build 1.21.x' 2 | run-name: Build 1.21.x-${{ inputs.version }} 3 | 4 | on: 5 | workflow_dispatch: 6 | inputs: 7 | version: 8 | description: 'Version' 9 | required: true 10 | default: '0.0.0-dev' 11 | workflow_call: 12 | inputs: 13 | version: 14 | required: true 15 | type: string 16 | 17 | jobs: 18 | build-1-21-x: 19 | runs-on: ubuntu-latest 20 | defaults: 21 | run: 22 | working-directory: mc2discord-1.21.x 23 | steps: 24 | - uses: actions/checkout@v4 25 | - name: Set up JDK 21 26 | uses: actions/setup-java@v4 27 | with: 28 | distribution: 'temurin' 29 | java-version: '21' 30 | - name: Cache Gradle 31 | uses: actions/cache@v4 32 | with: 33 | path: | 34 | ~/.gradle/caches 35 | ~/.gradle/wrapper 36 | key: gradle-1.21.x-${{ runner.os }}-${{ hashFiles('**/gradle.properties', '**/build.gradle.kts', '**/settings.gradle', '**/gradle-wrapper.jar') }} 37 | - name: Grant execute permission for gradlew 38 | run: chmod +x gradlew 39 | - name: Build with Gradle 40 | run: ./gradlew build 41 | env: 42 | INPUT_VERSION: ${{ inputs.version }} 43 | - uses: actions/upload-artifact@v4 44 | with: 45 | name: mc2discord-forge-1.21.x-${{ inputs.version }} 46 | path: | 47 | ${{ github.workspace }}/mc2discord-1.21.x/forge/build/libs/ 48 | !${{ github.workspace }}/mc2discord-1.21.x/forge/build/libs/*-slim.jar 49 | - uses: actions/upload-artifact@v4 50 | with: 51 | name: mc2discord-fabric-1.21.x-${{ inputs.version }} 52 | path: | 53 | ${{ github.workspace }}/mc2discord-1.21.x/fabric/build/libs/ 54 | !${{ github.workspace }}/mc2discord-1.21.x/fabric/build/libs/*-all.jar 55 | -------------------------------------------------------------------------------- /mc2discord-1.20.x/forge/src/main/java/fr/denisd3d/mc2discord/forge/Mc2DiscordForge.java: -------------------------------------------------------------------------------- 1 | package fr.denisd3d.mc2discord.forge; 2 | 3 | import fr.denisd3d.mc2discord.minecraft.Mc2DiscordMinecraft; 4 | import net.minecraftforge.common.MinecraftForge; 5 | import net.minecraftforge.event.RegisterCommandsEvent; 6 | import net.minecraftforge.event.server.ServerAboutToStartEvent; 7 | import net.minecraftforge.event.server.ServerStartedEvent; 8 | import net.minecraftforge.event.server.ServerStoppedEvent; 9 | import net.minecraftforge.eventbus.api.SubscribeEvent; 10 | import net.minecraftforge.fml.IExtensionPoint; 11 | import net.minecraftforge.fml.ModLoadingContext; 12 | import net.minecraftforge.fml.common.Mod; 13 | 14 | @Mod(Mc2DiscordForge.MOD_ID) 15 | public class Mc2DiscordForge { 16 | public static final String MOD_ID = "mc2discord"; 17 | 18 | public Mc2DiscordForge() { 19 | ModLoadingContext.get().registerExtensionPoint(IExtensionPoint.DisplayTest.class, () -> new IExtensionPoint.DisplayTest(() -> IExtensionPoint.DisplayTest.IGNORESERVERONLY, (a, b) -> true)); 20 | MinecraftForge.EVENT_BUS.register(this); 21 | MinecraftForge.EVENT_BUS.register(ForgeEvents.class); 22 | } 23 | 24 | @SubscribeEvent 25 | public void onRegisterCommands(RegisterCommandsEvent event) { 26 | Mc2DiscordMinecraft.onRegisterCommands(event.getDispatcher(), event.getBuildContext()); 27 | } 28 | 29 | @SubscribeEvent 30 | public void onServerAboutToStart(ServerAboutToStartEvent event) { 31 | Mc2DiscordMinecraft.onServerStarting(event.getServer()); 32 | } 33 | 34 | @SubscribeEvent 35 | public void onServerStarted(ServerStartedEvent event) { 36 | Mc2DiscordMinecraft.onServerStarted(event.getServer()); 37 | } 38 | 39 | @SubscribeEvent 40 | public void onServerStopped(ServerStoppedEvent event) { 41 | Mc2DiscordMinecraft.onServerStopped(event.getServer()); 42 | } 43 | } 44 | -------------------------------------------------------------------------------- /mc2discord-1.18.x/forge/src/main/java/fr/denisd3d/mc2discord/forge/Mc2DiscordForge.java: -------------------------------------------------------------------------------- 1 | package fr.denisd3d.mc2discord.forge; 2 | 3 | import fr.denisd3d.mc2discord.minecraft.Mc2DiscordMinecraft; 4 | import net.minecraftforge.common.MinecraftForge; 5 | import net.minecraftforge.event.RegisterCommandsEvent; 6 | import net.minecraftforge.event.server.ServerAboutToStartEvent; 7 | import net.minecraftforge.event.server.ServerStartedEvent; 8 | import net.minecraftforge.event.server.ServerStoppedEvent; 9 | import net.minecraftforge.eventbus.api.SubscribeEvent; 10 | import net.minecraftforge.fml.IExtensionPoint; 11 | import net.minecraftforge.fml.ModLoadingContext; 12 | import net.minecraftforge.fml.common.Mod; 13 | import net.minecraftforge.network.NetworkConstants; 14 | 15 | @Mod(Mc2DiscordForge.MOD_ID) 16 | public class Mc2DiscordForge { 17 | public static final String MOD_ID = "mc2discord"; 18 | 19 | public Mc2DiscordForge() { 20 | ModLoadingContext.get().registerExtensionPoint(IExtensionPoint.DisplayTest.class, () -> new IExtensionPoint.DisplayTest(() -> NetworkConstants.IGNORESERVERONLY, (a, b) -> true)); 21 | MinecraftForge.EVENT_BUS.register(this); 22 | MinecraftForge.EVENT_BUS.register(ForgeEvents.class); 23 | } 24 | 25 | @SubscribeEvent 26 | public void onRegisterCommands(RegisterCommandsEvent event) { 27 | Mc2DiscordMinecraft.onRegisterCommands(event.getDispatcher()); 28 | } 29 | 30 | @SubscribeEvent 31 | public void onServerAboutToStart(ServerAboutToStartEvent event) { 32 | Mc2DiscordMinecraft.onServerStarting(event.getServer()); 33 | } 34 | 35 | @SubscribeEvent 36 | public void onServerStarted(ServerStartedEvent event) { 37 | Mc2DiscordMinecraft.onServerStarted(event.getServer()); 38 | } 39 | 40 | @SubscribeEvent 41 | public void onServerStopped(ServerStoppedEvent event) { 42 | Mc2DiscordMinecraft.onServerStopped(event.getServer()); 43 | } 44 | } 45 | -------------------------------------------------------------------------------- /mc2discord-1.19.x/forge/src/main/java/fr/denisd3d/mc2discord/forge/Mc2DiscordForge.java: -------------------------------------------------------------------------------- 1 | package fr.denisd3d.mc2discord.forge; 2 | 3 | import fr.denisd3d.mc2discord.minecraft.Mc2DiscordMinecraft; 4 | import net.minecraftforge.common.MinecraftForge; 5 | import net.minecraftforge.event.RegisterCommandsEvent; 6 | import net.minecraftforge.event.server.ServerAboutToStartEvent; 7 | import net.minecraftforge.event.server.ServerStartedEvent; 8 | import net.minecraftforge.event.server.ServerStoppedEvent; 9 | import net.minecraftforge.eventbus.api.SubscribeEvent; 10 | import net.minecraftforge.fml.IExtensionPoint; 11 | import net.minecraftforge.fml.ModLoadingContext; 12 | import net.minecraftforge.fml.common.Mod; 13 | import net.minecraftforge.network.NetworkConstants; 14 | 15 | @Mod(Mc2DiscordForge.MOD_ID) 16 | public class Mc2DiscordForge { 17 | public static final String MOD_ID = "mc2discord"; 18 | 19 | public Mc2DiscordForge() { 20 | ModLoadingContext.get().registerExtensionPoint(IExtensionPoint.DisplayTest.class, () -> new IExtensionPoint.DisplayTest(() -> NetworkConstants.IGNORESERVERONLY, (a, b) -> true)); 21 | MinecraftForge.EVENT_BUS.register(this); 22 | MinecraftForge.EVENT_BUS.register(ForgeEvents.class); 23 | } 24 | 25 | @SubscribeEvent 26 | public void onRegisterCommands(RegisterCommandsEvent event) { 27 | Mc2DiscordMinecraft.onRegisterCommands(event.getDispatcher()); 28 | } 29 | 30 | @SubscribeEvent 31 | public void onServerAboutToStart(ServerAboutToStartEvent event) { 32 | Mc2DiscordMinecraft.onServerStarting(event.getServer()); 33 | } 34 | 35 | @SubscribeEvent 36 | public void onServerStarted(ServerStartedEvent event) { 37 | Mc2DiscordMinecraft.onServerStarted(event.getServer()); 38 | } 39 | 40 | @SubscribeEvent 41 | public void onServerStopped(ServerStoppedEvent event) { 42 | Mc2DiscordMinecraft.onServerStopped(event.getServer()); 43 | } 44 | } 45 | -------------------------------------------------------------------------------- /update.json: -------------------------------------------------------------------------------- 1 | { 2 | "homepage": "https://www.curseforge.com/minecraft/mc-mods/mc2discord", 3 | "promos": { 4 | "1.21.5-latest": "4.2.6", 5 | "1.21.5-recommended": "4.2.6", 6 | "1.21.4-latest": "4.2.6", 7 | "1.21.4-recommended": "4.2.6", 8 | "1.21.3-latest": "4.2.6", 9 | "1.21.3-recommended": "4.2.6", 10 | "1.21.2-latest": "4.2.6", 11 | "1.21.2-recommended": "4.2.6", 12 | 13 | "1.20.6-latest": "4.2.6", 14 | "1.20.6-recommended": "4.2.6", 15 | "1.20.5-latest": "4.2.6", 16 | "1.20.5-recommended": "4.2.6", 17 | "1.20.1-latest": "4.2.6", 18 | "1.20.1-recommended": "4.2.6", 19 | "1.20.0-latest": "4.2.6", 20 | "1.20.0-recommended": "4.2.6", 21 | 22 | "1.19.4-latest": "4.2.6", 23 | "1.19.4-recommended": "4.2.6", 24 | "1.19.3-latest": "4.2.6", 25 | "1.19.3-recommended": "4.2.6", 26 | 27 | "1.18.2-latest": "4.2.6", 28 | "1.18.2-recommended": "4.2.6", 29 | "1.18.1-latest": "4.2.6", 30 | "1.18.1-recommended": "4.2.6", 31 | "1.18-latest": "4.2.6", 32 | "1.18-recommended": "4.2.6", 33 | 34 | "1.12.2-latest": "3.3.2", 35 | "1.12.2-recommended": "3.3.2", 36 | 37 | "1.21.1-latest": "4.2.6", 38 | "1.21.1-recommended": "4.2.6", 39 | "1.21-latest": "4.2.6", 40 | "1.21-recommended": "4.2.6", 41 | 42 | 43 | "1.20.2-latest": "4.2.4", 44 | "1.20.2-recommended": "4.2.4", 45 | 46 | "1.19-latest": "3.2.8", 47 | "1.19-recommended": "3.2.8", 48 | "1.19.2-latest": "3.3.0", 49 | "1.19.2-recommended": "3.3.0", 50 | "1.19.1-latest": "3.3.0", 51 | "1.19.1-recommended": "3.3.0", 52 | 53 | "1.17.1-latest": "3.2.3", 54 | "1.17.1-recommended": "3.2.3", 55 | 56 | "1.16.5-latest": "3.3.0", 57 | "1.16.5-recommended": "3.3.0", 58 | "1.16.4-latest": "3.3.0", 59 | "1.16.4-recommended": "3.3.0", 60 | "1.16.3-latest": "3.3.0", 61 | "1.16.3-recommended": "3.3.0", 62 | "1.16.2-latest": "3.3.0", 63 | "1.16.2-recommended": "3.3.0", 64 | "1.16.1-latest": "3.3.0", 65 | "1.16.1-recommended": "3.3.0" 66 | } 67 | } 68 | -------------------------------------------------------------------------------- /mc2discord-core/src/main/java/fr/denisd3d/mc2discord/core/config/StatusChannels.java: -------------------------------------------------------------------------------- 1 | package fr.denisd3d.mc2discord.core.config; 2 | 3 | import com.electronwill.nightconfig.core.conversion.Conversion; 4 | import com.electronwill.nightconfig.core.conversion.Path; 5 | import com.electronwill.nightconfig.core.conversion.PreserveNotNull; 6 | import discord4j.common.util.Snowflake; 7 | import fr.denisd3d.config4j.Comment; 8 | import fr.denisd3d.mc2discord.core.M2DUtils; 9 | import fr.denisd3d.mc2discord.core.config.converters.RandomString; 10 | import fr.denisd3d.mc2discord.core.config.converters.RandomStringConverter; 11 | import fr.denisd3d.mc2discord.core.config.converters.SnowflakeConverter; 12 | 13 | import java.util.ArrayList; 14 | import java.util.List; 15 | 16 | public class StatusChannels { 17 | 18 | @Path("Channel") 19 | @PreserveNotNull 20 | public List channels = new ArrayList<>(); 21 | 22 | @Path("comment") 23 | public String comment; 24 | 25 | public static class StatusChannel { 26 | @Path("id") 27 | @Comment("config.status_channels.id.comment") 28 | @Conversion(SnowflakeConverter.class) 29 | @PreserveNotNull 30 | public Snowflake channel_id = M2DUtils.NIL_SNOWFLAKE; 31 | 32 | @Path("name_message") 33 | @Comment("config.status_channels.name_message.comment") 34 | @Conversion(RandomStringConverter.class) 35 | @PreserveNotNull 36 | public RandomString name_message = new RandomString("${online_players} / ${max_players}"); 37 | 38 | @Path("topic_message") 39 | @Comment("config.status_channels.topic_message.comment") 40 | @Conversion(RandomStringConverter.class) 41 | @PreserveNotNull 42 | public RandomString topic_message = new RandomString("${online_players} / ${max_players}"); 43 | 44 | @Path("update_period") 45 | @Comment("config.status_channels.update_period.comment") 46 | @PreserveNotNull 47 | public long update_period = 610; 48 | 49 | @Path("comment") 50 | public String comment; 51 | } 52 | } -------------------------------------------------------------------------------- /mc2discord-core/src/main/java/fr/denisd3d/mc2discord/core/config/Messages.java: -------------------------------------------------------------------------------- 1 | package fr.denisd3d.mc2discord.core.config; 2 | 3 | import com.electronwill.nightconfig.core.conversion.Conversion; 4 | import com.electronwill.nightconfig.core.conversion.Path; 5 | import com.electronwill.nightconfig.core.conversion.PreserveNotNull; 6 | import fr.denisd3d.config4j.Comment; 7 | import fr.denisd3d.config4j.DefaultValue; 8 | import fr.denisd3d.mc2discord.core.config.converters.RandomString; 9 | import fr.denisd3d.mc2discord.core.config.converters.RandomStringConverter; 10 | 11 | public class Messages { 12 | @Path("start") 13 | @Comment("config.messages.start.comment") 14 | @DefaultValue("config.messages.start.value") 15 | @Conversion(RandomStringConverter.class) 16 | @PreserveNotNull 17 | public RandomString start; 18 | 19 | @Path("stop") 20 | @Comment("config.messages.stop.comment") 21 | @DefaultValue("config.messages.stop.value") 22 | @Conversion(RandomStringConverter.class) 23 | @PreserveNotNull 24 | public RandomString stop; 25 | 26 | @Path("join") 27 | @Comment("config.messages.join.comment") 28 | @DefaultValue("config.messages.join.value") 29 | @Conversion(RandomStringConverter.class) 30 | @PreserveNotNull 31 | public RandomString join; 32 | 33 | @Path("leave") 34 | @Comment("config.messages.leave.comment") 35 | @DefaultValue("config.messages.leave.value") 36 | @Conversion(RandomStringConverter.class) 37 | @PreserveNotNull 38 | public RandomString leave; 39 | 40 | @Path("death") 41 | @Comment("config.messages.death.comment") 42 | @DefaultValue("config.messages.death.value") 43 | @Conversion(RandomStringConverter.class) 44 | @PreserveNotNull 45 | public RandomString death; 46 | 47 | @Path("advancement") 48 | @Comment("config.messages.advancement.comment") 49 | @DefaultValue("config.messages.advancement.value") 50 | @Conversion(RandomStringConverter.class) 51 | @PreserveNotNull 52 | public RandomString advancement; 53 | 54 | @Path("comment") 55 | public String comment; 56 | } 57 | -------------------------------------------------------------------------------- /mc2discord-core/src/main/java/fr/denisd3d/mc2discord/core/config/Commands.java: -------------------------------------------------------------------------------- 1 | package fr.denisd3d.mc2discord.core.config; 2 | 3 | import com.electronwill.nightconfig.core.conversion.Conversion; 4 | import com.electronwill.nightconfig.core.conversion.Path; 5 | import com.electronwill.nightconfig.core.conversion.PreserveNotNull; 6 | import discord4j.common.util.Snowflake; 7 | import fr.denisd3d.config4j.Comment; 8 | import fr.denisd3d.mc2discord.core.M2DUtils; 9 | import fr.denisd3d.mc2discord.core.config.converters.SnowflakeConverter; 10 | 11 | import java.util.ArrayList; 12 | import java.util.Arrays; 13 | import java.util.List; 14 | 15 | public class Commands { 16 | @Path("prefix") 17 | @Comment("config.commands.prefix.comment") 18 | @PreserveNotNull 19 | public String prefix = "!"; 20 | 21 | @Path("use_codeblocks") 22 | @Comment("config.commands.use_codeblocks.comment") 23 | @PreserveNotNull 24 | public boolean use_codeblocks = true; 25 | 26 | @Path("Permission") 27 | @Comment("config.commands.permission.comment") 28 | @PreserveNotNull 29 | public List permissions = new ArrayList<>(); 30 | 31 | @Path("comment") 32 | public String comment; 33 | 34 | public static class CommandPermission { 35 | @Path("id") 36 | @Comment("config.commands.permission.id.comment") 37 | @Conversion(SnowflakeConverter.class) 38 | @PreserveNotNull 39 | public Snowflake id = M2DUtils.NIL_SNOWFLAKE; 40 | 41 | @Path("permission_level") 42 | @Comment("config.commands.permission.permission_level.comment") 43 | @PreserveNotNull 44 | public Integer permission_level = -1; 45 | 46 | @Path("commands") 47 | @Comment("config.commands.permission.commands.comment") 48 | @PreserveNotNull 49 | public List commands = new ArrayList<>(); 50 | 51 | @Path("comment") 52 | public String comment; 53 | 54 | public CommandPermission(String... commands) { 55 | this.commands.addAll(Arrays.asList(commands)); 56 | } 57 | 58 | @SuppressWarnings("unused") 59 | public CommandPermission() { // Required for night-config to create instance 60 | } 61 | } 62 | } -------------------------------------------------------------------------------- /mc2discord-core/src/main/java/fr/denisd3d/mc2discord/core/entities/Entity.java: -------------------------------------------------------------------------------- 1 | package fr.denisd3d.mc2discord.core.entities; 2 | 3 | 4 | import fr.denisd3d.mc2discord.core.Mc2Discord; 5 | 6 | import java.util.Collections; 7 | import java.util.HashMap; 8 | import java.util.List; 9 | import java.util.Map; 10 | import java.util.function.BiFunction; 11 | import java.util.regex.Matcher; 12 | import java.util.regex.Pattern; 13 | 14 | public abstract class Entity { 15 | public static final Pattern VARIABLE_PATTERN = Pattern.compile("\\$\\{(.*?)(?:\\|(.*?))?}"); 16 | 17 | 18 | public static String replace(String content) { 19 | return replace(content, Collections.emptyList()); 20 | } 21 | 22 | public static String replace(String content, List entities) { 23 | Map replacements = new HashMap<>(); 24 | Map> formatters = new HashMap<>(); 25 | 26 | Mc2Discord.INSTANCE.minecraft.getServerData().getReplacements(replacements, formatters); 27 | 28 | for (Entity entity : entities) { 29 | entity.getReplacements(replacements, formatters); 30 | } 31 | 32 | return replace(content, replacements, formatters); 33 | } 34 | 35 | abstract void getReplacements(Map replacements, Map> formatters); 36 | 37 | private static String replace(String content, Map replacements, Map> formatters) { 38 | Matcher matcher = VARIABLE_PATTERN.matcher(content); 39 | StringBuilder builder = new StringBuilder(); 40 | 41 | while (matcher.find()) { 42 | String replacement = replacements.get(matcher.group(1)); 43 | 44 | if (matcher.group(2) != null) { 45 | replacement = formatters.getOrDefault(matcher.group(1), (format, value) -> value).apply(matcher.group(2), replacement); 46 | } 47 | 48 | if (replacement != null) { 49 | matcher.appendReplacement(builder, Matcher.quoteReplacement(replacement)); 50 | } 51 | } 52 | 53 | matcher.appendTail(builder); 54 | return builder.toString(); 55 | } 56 | } 57 | -------------------------------------------------------------------------------- /.github/workflows/publish-all.yml: -------------------------------------------------------------------------------- 1 | name: "Publish all" 2 | run-name: Publish all-${{ inputs.version }} 3 | 4 | on: 5 | workflow_dispatch: 6 | inputs: 7 | version: 8 | description: "Version" 9 | required: true 10 | default: "0.0.0-dev" 11 | 12 | jobs: 13 | build-all: 14 | uses: ./.github/workflows/build-all.yml 15 | with: 16 | version: ${{ inputs.version }} 17 | 18 | publish-forge-1-18-x: 19 | uses: ./.github/workflows/publish-forge-1.18.x.yml 20 | needs: build-all 21 | with: 22 | version: ${{ inputs.version }} 23 | secrets: inherit 24 | 25 | publish-forge-1-19-x: 26 | uses: ./.github/workflows/publish-forge-1.19.x.yml 27 | needs: publish-forge-1-18-x 28 | with: 29 | version: ${{ inputs.version }} 30 | secrets: inherit 31 | 32 | publish-forge-1-20-1: 33 | uses: ./.github/workflows/publish-forge-1.20.1.yml 34 | needs: publish-forge-1-19-x 35 | with: 36 | version: ${{ inputs.version }} 37 | secrets: inherit 38 | 39 | publish-forge-1-20-x: 40 | uses: ./.github/workflows/publish-forge-1.20.x.yml 41 | needs: publish-forge-1-20-1 42 | with: 43 | version: ${{ inputs.version }} 44 | secrets: inherit 45 | 46 | publish-fabric-1-20-x: 47 | uses: ./.github/workflows/publish-fabric-1.20.x.yml 48 | needs: publish-forge-1-20-x 49 | with: 50 | version: ${{ inputs.version }} 51 | secrets: inherit 52 | 53 | publish-forge-1-21-x: 54 | uses: ./.github/workflows/publish-forge-1.21.x.yml 55 | needs: publish-fabric-1-20-x 56 | with: 57 | version: ${{ inputs.version }} 58 | secrets: inherit 59 | 60 | publish-fabric-1-21-x: 61 | uses: ./.github/workflows/publish-fabric-1.21.x.yml 62 | needs: publish-forge-1-21-x 63 | with: 64 | version: ${{ inputs.version }} 65 | secrets: inherit 66 | 67 | publish-forge-1-21-5: 68 | uses: ./.github/workflows/publish-forge-1.21.5.yml 69 | needs: publish-fabric-1-21-x 70 | with: 71 | version: ${{ inputs.version }} 72 | secrets: inherit 73 | 74 | publish-fabric-1-21-5: 75 | uses: ./.github/workflows/publish-fabric-1.21.5.yml 76 | needs: publish-forge-1-21-5 77 | with: 78 | version: ${{ inputs.version }} 79 | secrets: inherit 80 | -------------------------------------------------------------------------------- /mc2discord-1.20.x/common/src/main/java/fr/denisd3d/mc2discord/minecraft/mixin/EmoteCommandsMixin.java: -------------------------------------------------------------------------------- 1 | package fr.denisd3d.mc2discord.minecraft.mixin; 2 | 3 | import com.mojang.brigadier.context.CommandContext; 4 | import fr.denisd3d.mc2discord.core.M2DUtils; 5 | import fr.denisd3d.mc2discord.core.Mc2Discord; 6 | import fr.denisd3d.mc2discord.core.MessageManager; 7 | import fr.denisd3d.mc2discord.core.entities.Entity; 8 | import fr.denisd3d.mc2discord.core.entities.PlayerEntity; 9 | import net.minecraft.commands.CommandSourceStack; 10 | import net.minecraft.network.chat.ChatType; 11 | import net.minecraft.network.chat.PlayerChatMessage; 12 | import net.minecraft.server.commands.EmoteCommands; 13 | import net.minecraft.server.level.ServerPlayer; 14 | import org.spongepowered.asm.mixin.Mixin; 15 | import org.spongepowered.asm.mixin.injection.At; 16 | import org.spongepowered.asm.mixin.injection.Inject; 17 | import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; 18 | 19 | import java.util.List; 20 | 21 | @Mixin(EmoteCommands.class) 22 | public class EmoteCommandsMixin { 23 | 24 | @SuppressWarnings({"target", "Duplicates"}) 25 | @Inject(method = {"lambda$register$0", "method_43645"}, at = @At("HEAD")) 26 | private static void execute(CommandContext commandContext, PlayerChatMessage message, CallbackInfo ci) { 27 | if (M2DUtils.isNotConfigured()) return; 28 | 29 | if (!Mc2Discord.INSTANCE.config.misc.broadcast_commands.contains("me")) return; 30 | 31 | ServerPlayer serverPlayer = commandContext.getSource().getPlayer(); 32 | String messageContent = ChatType.bind(ChatType.SAY_COMMAND, commandContext.getSource()).decorate(message.decoratedContent()).getString(); 33 | if (serverPlayer != null) { 34 | PlayerEntity player = new PlayerEntity(serverPlayer.getGameProfile().getName(), serverPlayer.getDisplayName().getString(), serverPlayer.getGameProfile().getId()); 35 | MessageManager.sendChatMessage(messageContent, Entity.replace(Mc2Discord.INSTANCE.config.style.webhook_display_name, List.of(player)), Entity.replace(Mc2Discord.INSTANCE.config.style.webhook_avatar_api, List.of(player))).subscribe(); 36 | } else { 37 | MessageManager.sendInfoMessage("relayed_command", messageContent).subscribe(); 38 | } 39 | } 40 | } -------------------------------------------------------------------------------- /mc2discord-1.21.5/common/src/main/java/fr/denisd3d/mc2discord/minecraft/mixin/EmoteCommandsMixin.java: -------------------------------------------------------------------------------- 1 | package fr.denisd3d.mc2discord.minecraft.mixin; 2 | 3 | import com.mojang.brigadier.context.CommandContext; 4 | import fr.denisd3d.mc2discord.core.M2DUtils; 5 | import fr.denisd3d.mc2discord.core.Mc2Discord; 6 | import fr.denisd3d.mc2discord.core.MessageManager; 7 | import fr.denisd3d.mc2discord.core.entities.Entity; 8 | import fr.denisd3d.mc2discord.core.entities.PlayerEntity; 9 | import net.minecraft.commands.CommandSourceStack; 10 | import net.minecraft.network.chat.ChatType; 11 | import net.minecraft.network.chat.PlayerChatMessage; 12 | import net.minecraft.server.commands.EmoteCommands; 13 | import net.minecraft.server.level.ServerPlayer; 14 | import org.spongepowered.asm.mixin.Mixin; 15 | import org.spongepowered.asm.mixin.injection.At; 16 | import org.spongepowered.asm.mixin.injection.Inject; 17 | import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; 18 | 19 | import java.util.List; 20 | 21 | @Mixin(EmoteCommands.class) 22 | public class EmoteCommandsMixin { 23 | 24 | @SuppressWarnings({"target", "Duplicates"}) 25 | @Inject(method = {"lambda$register$0", "method_43645"}, at = @At("HEAD")) 26 | private static void execute(CommandContext commandContext, PlayerChatMessage message, CallbackInfo ci) { 27 | if (M2DUtils.isNotConfigured()) return; 28 | 29 | if (!Mc2Discord.INSTANCE.config.misc.broadcast_commands.contains("me")) return; 30 | 31 | ServerPlayer serverPlayer = commandContext.getSource().getPlayer(); 32 | String messageContent = ChatType.bind(ChatType.SAY_COMMAND, commandContext.getSource()).decorate(message.decoratedContent()).getString(); 33 | if (serverPlayer != null) { 34 | PlayerEntity player = new PlayerEntity(serverPlayer.getGameProfile().getName(), serverPlayer.getDisplayName().getString(), serverPlayer.getGameProfile().getId()); 35 | MessageManager.sendChatMessage(messageContent, Entity.replace(Mc2Discord.INSTANCE.config.style.webhook_display_name, List.of(player)), Entity.replace(Mc2Discord.INSTANCE.config.style.webhook_avatar_api, List.of(player))).subscribe(); 36 | } else { 37 | MessageManager.sendInfoMessage("relayed_command", messageContent).subscribe(); 38 | } 39 | } 40 | } --------------------------------------------------------------------------------