diff --git a/bridge-1.18/build.gradle b/bridge-1.18/build.gradle new file mode 100644 index 0000000..bf7f243 --- /dev/null +++ b/bridge-1.18/build.gradle @@ -0,0 +1,171 @@ +buildscript { + repositories { + maven { url = 'https://maven.minecraftforge.net' } + jcenter() + mavenCentral() + maven { + url 'https://plugins.gradle.org/m2/' + } + } + dependencies { + classpath group: 'net.minecraftforge.gradle', name: 'ForgeGradle', version: '5.1.+', changing: true + classpath "gradle.plugin.com.matthewprenger:CurseGradle:1.4.0" + } +} +apply plugin: 'net.minecraftforge.gradle' +apply plugin: "com.matthewprenger.cursegradle" +// Only edit below this line, the above code adds and enables the necessary things for Forge to be setup. + +version = "1.18.2-${project.mod_version}" +group = "ru.glitchless.telegrambridge" // http://maven.apache.org/guides/mini/guide-naming-conventions.html +archivesBaseName = 'telegrambridge' + +java.toolchain.languageVersion = JavaLanguageVersion.of(17) + +minecraft { + // The mappings can be changed at any time, and must be in the following format. + // snapshot_YYYYMMDD Snapshot are built nightly. + // stable_# Stables are built at the discretion of the MCP team. + // Use non-default mappings at your own risk. they may not always work. + // Simply re-run your setup task after changing the mappings to update your workspace. + mappings channel: 'official', version: '1.18.2' + // makeObfSourceJar = false // an Srg named sources jar is made by default. uncomment this to disable. + + // accessTransformer = file('src/main/resources/META-INF/accesstransformer.cfg') + + // Default run configurations. + // These can be tweaked, removed, or duplicated as needed. + runs { + client { + workingDirectory project.file('run') + + // Recommended logging data for a userdev environment + property 'forge.logging.markers', 'SCAN,REGISTRIES,REGISTRYDUMP' + + // Recommended logging level for the console + property 'forge.logging.console.level', 'debug' + + mods { + examplemod { + source sourceSets.main + } + } + } + + server { + workingDirectory project.file('run') + + // Recommended logging data for a userdev environment + property 'forge.logging.markers', 'SCAN,REGISTRIES,REGISTRYDUMP' + + // Recommended logging level for the console + property 'forge.logging.console.level', 'debug' + + mods { + examplemod { + source sourceSets.main + } + } + } + + data { + workingDirectory project.file('run') + + // Recommended logging data for a userdev environment + property 'forge.logging.markers', 'SCAN,REGISTRIES,REGISTRYDUMP' + + // Recommended logging level for the console + property 'forge.logging.console.level', 'debug' + + args '--mod', 'examplemod', '--all', '--output', file('src/generated/resources/') + + mods { + examplemod { + source sourceSets.main + } + } + } + } +} + +processResources { + // this will ensure that this task is redone when the versions change. + inputs.property "version", project.mod_version + + filesMatching("*/mods.toml") { + expand "version": project.mod_version + } +} + +configurations { + embed + compile.extendsFrom(embed) +} + +dependencies { + // Specify the version of Minecraft to use, If this is any group other then 'net.minecraft' it is assumed + // that the dep is a ForgeGradle 'patcher' dependency. And it's patches will be applied. + // The userdev artifact is a special name and will get all sorts of transformations applied to it. + minecraft 'net.minecraftforge:forge:1.18.2-40.1.68' + + // You may put jars on which you depend on in ./libs or you may define them like so.. + // compile "some.group:artifact:version:classifier" + // compile "some.group:artifact:version" + + // Real examples + // compile 'com.mod-buildcraft:buildcraft:6.0.8:dev' // adds buildcraft to the dev env + // compile 'com.googlecode.efficient-java-matrix-library:ejml:0.24' // adds ejml to the dev env + + // The 'provided' configuration is for optional dependencies that exist at compile-time but might not at runtime. + // provided 'com.mod-buildcraft:buildcraft:6.0.8:dev' + + // These dependencies get remapped to your current MCP mappings + // deobf 'com.mod-buildcraft:buildcraft:6.0.8:dev' + + // For more info... + // http://www.gradle.org/docs/current/userguide/artifact_dependencies_tutorial.html + // http://www.gradle.org/docs/current/userguide/dependency_management.html + embed project(":core") + compileOnly project(":core") +} + +// Example for how to get properties into the manifest for reading by the runtime.. +jar { + manifest { + attributes([ + "Specification-Title" : "telegrambridge", + "Specification-Vendor" : "lionzxy", + "Specification-Version" : "1", // We are version 1 of ourselves + "Implementation-Title" : project.name, + "Implementation-Version" : "${project.mod_version}", + "Implementation-Vendor" : "lionzxy", + "Implementation-Timestamp": new Date().format("yyyy-MM-dd'T'HH:mm:ssZ") + ]) + } + from configurations.embed.collect { + exclude '.classpath' + exclude '.project' + exclude 'META-INF/LICENSE.txt' + exclude 'META-INF/LICENSE' + exclude 'module-info.class' + exclude 'META-INF/NOTICE' + it.isDirectory() ? it : zipTree(it) + } +} + +artifacts { + archives jar +} + +curseforge { + apiKey = "${CurseForgeApiToken}" + project { + id = '357271' + changelog = "${last_changelog}" + releaseType = "${mod_state}" + addGameVersion '1.18' + mainArtifact(jar) { + displayName = "TelegramBridge $project.version" + } + } +} diff --git a/bridge-1.18/src/main/java/ru/glitchless/telegrambridge/TelegramBridgeMod.java b/bridge-1.18/src/main/java/ru/glitchless/telegrambridge/TelegramBridgeMod.java new file mode 100644 index 0000000..f405c0d --- /dev/null +++ b/bridge-1.18/src/main/java/ru/glitchless/telegrambridge/TelegramBridgeMod.java @@ -0,0 +1,78 @@ +package ru.glitchless.telegrambridge; + +import net.minecraftforge.common.MinecraftForge; +import net.minecraftforge.event.server.ServerStartingEvent; +import net.minecraftforge.event.server.ServerStoppedEvent; +import net.minecraftforge.eventbus.api.SubscribeEvent; +import net.minecraftforge.fml.ModList; +import net.minecraftforge.fml.VersionChecker; +import net.minecraftforge.fml.common.Mod; +import net.minecraftforge.fml.event.lifecycle.FMLCommonSetupEvent; +import net.minecraftforge.fml.javafmlmod.FMLJavaModLoadingContext; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; +import ru.glitchless.telegrambridge.config.ForgeConfig; +import ru.glitchless.telegrambridge.core.config.TelegramBridgeConfig; +import ru.glitchless.telegrambridge.core.telegramapi.TelegramContext; +import ru.glitchless.telegrambridge.core.telegramapi.TelegramLoop; +import ru.glitchless.telegrambridge.handlers.PlayerList; +import ru.glitchless.telegrambridge.handlers.ToMinecraftResender; +import ru.glitchless.telegrambridge.handlers.ToTelegramEvent; + +@Mod(TelegramBridgeMod.MODID) +public class TelegramBridgeMod { + public static final String MODID = "telegrambridge"; + public static final String NAME = "Telegram Bridge"; + public static final String VERSION = "1.0"; + public static final String UPDATE_URL = "https://www.curseforge.com/minecraft/mc-mods/telegram-bridge"; + + private static final Logger logger = LogManager.getLogger(); + private static TelegramContext context; + private static TelegramLoop telegramLoop; + + public TelegramBridgeMod() { + FMLJavaModLoadingContext.get().getModEventBus().addListener(this::setup); + + ForgeConfig.initConfig(MODID); + + MinecraftForge.EVENT_BUS.register(this); + } + + public static TelegramContext getContext() { + return context; + } + + + public void setup(final FMLCommonSetupEvent event) { + context = new TelegramContext(logger); + telegramLoop = new TelegramLoop(context); + + context.addListener(new ToMinecraftResender()); + context.addListener(new PlayerList()); + } + + @SubscribeEvent + public void serverStarting(ServerStartingEvent event) { + telegramLoop.start(); + if (!TelegramBridgeConfig.relay_level.server_start) { + return; + } + ToTelegramEvent.broadcastToChats(TelegramBridgeConfig.text.server_start); + checkUpdate(); + } + + private void checkUpdate() { + if (VersionChecker.getResult(ModList.get().getModFileById(MODID).getMods().get(0)).status() + == VersionChecker.Status.OUTDATED) { + ToTelegramEvent.broadcastToChats("There's a new update for the mod! Download it [here](" + UPDATE_URL + ")!"); + } + } + + @SubscribeEvent + public void serverStopping(ServerStoppedEvent event) { + if (!TelegramBridgeConfig.relay_level.server_stop) { + return; + } + ToTelegramEvent.broadcastToChats(TelegramBridgeConfig.text.server_stop); + } +} diff --git a/bridge-1.18/src/main/java/ru/glitchless/telegrambridge/config/ForgeConfig.java b/bridge-1.18/src/main/java/ru/glitchless/telegrambridge/config/ForgeConfig.java new file mode 100644 index 0000000..7d51b6c --- /dev/null +++ b/bridge-1.18/src/main/java/ru/glitchless/telegrambridge/config/ForgeConfig.java @@ -0,0 +1,87 @@ +package ru.glitchless.telegrambridge.config; + +import com.electronwill.nightconfig.core.file.CommentedFileConfig; +import com.electronwill.nightconfig.core.io.WritingMode; +import net.minecraftforge.common.ForgeConfigSpec; +import net.minecraftforge.fml.loading.FMLPaths; +import ru.glitchless.telegrambridge.core.config.AbstractConfig; +import ru.glitchless.telegrambridge.core.config.ConfigPath; +import ru.glitchless.telegrambridge.core.config.ConfigWorkaround; +import ru.glitchless.telegrambridge.core.config.TelegramBridgeConfig; + +import javax.annotation.Nullable; +import java.nio.file.Path; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Objects; + +import static ru.glitchless.telegrambridge.core.utils.ArrayUtils.isNullOrContainsNull; + +public class ForgeConfig implements AbstractConfig { + private final Map> specs = new HashMap<>(); + private final ForgeConfigSpec.Builder builder; + + private ForgeConfig(final ForgeConfigSpec.Builder builder) { + this.builder = builder; + } + + public static void initConfig(String modid) { + final ForgeConfigSpec.Builder configBuilder = new ForgeConfigSpec.Builder(); + final AbstractConfig abstractConfig = new ForgeConfig(configBuilder); + ConfigWorkaround.init(abstractConfig, TelegramBridgeConfig.class); + final ForgeConfigSpec forgeConfigSpec = configBuilder.build(); + final Path configPath = FMLPaths.CONFIGDIR.get().resolve(modid + ".toml"); + + final CommentedFileConfig configData = CommentedFileConfig.builder(configPath) + .sync() + .autosave() + .writingMode(WritingMode.REPLACE) + .build(); + + configData.load(); + forgeConfigSpec.setConfig(configData); + ConfigWorkaround.onReload(); + } + + @Override + public Object getValue(ConfigPath path) { + final ForgeConfigSpec.ConfigValue configValue = specs.get(path); + if (configValue == null) { + return null; + } + return configValue.get(); + } + + @Override + public void setList(ConfigPath path, List value, String... comment) { + int level = pushTo(path.getParent()); + if (!isNullOrContainsNull(comment)) { + builder.comment(comment); + } + final ForgeConfigSpec.ConfigValue configValue = builder.define(path.getName(), value, Objects::nonNull); + specs.put(path, configValue); + builder.pop(level); + } + + @Override + public void setValue(ConfigPath path, Object value, String... comment) { + int level = pushTo(path.getParent()); + if (!isNullOrContainsNull(comment)) { + builder.comment(comment); + } + final ForgeConfigSpec.ConfigValue configValue = builder.define(path.getName(), value); + specs.put(path, configValue); + + builder.pop(level); + } + + private int pushTo(@Nullable ConfigPath path) { + if (path == null) { + return 0; + } + int level = pushTo(path.getParent()); + builder.push(path.getName()); + return level + 1; + } +} diff --git a/bridge-1.18/src/main/java/ru/glitchless/telegrambridge/handlers/PlayerList.java b/bridge-1.18/src/main/java/ru/glitchless/telegrambridge/handlers/PlayerList.java new file mode 100644 index 0000000..9f17dd6 --- /dev/null +++ b/bridge-1.18/src/main/java/ru/glitchless/telegrambridge/handlers/PlayerList.java @@ -0,0 +1,59 @@ +package ru.glitchless.telegrambridge.handlers; + +import net.minecraft.server.MinecraftServer; +import net.minecraft.server.level.ServerPlayer; +import net.minecraftforge.server.ServerLifecycleHooks; +import ru.glitchless.telegrambridge.TelegramBridgeMod; +import ru.glitchless.telegrambridge.core.config.TelegramBridgeConfig; +import ru.glitchless.telegrambridge.core.handlers.IMessageReceiver; +import ru.glitchless.telegrambridge.core.telegramapi.model.MessageObject; + +import javax.annotation.Nonnull; +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; + +public class PlayerList implements IMessageReceiver { + @Override + public boolean onTelegramObjectMessage(@Nonnull MessageObject messageObject) { + String messageText = messageObject.getText(); + + if (messageText == null || messageText.length() == 0) { + return false; + } + + if (!messageText.startsWith("/players")) { + return false; + } + + String chatId = messageObject.getChat().getId().toString(); + final List players = getPlayerList(); + if (players.isEmpty()) { + TelegramBridgeMod.getContext().sendMessage(chatId, TelegramBridgeConfig.text.player_empty); + return true; + } + + final StringBuilder sb = new StringBuilder(); + for (int i = 0; i < players.size(); i++) { + sb.append(i + 1).append(". ").append(players.get(i).replace("_", "\\_")).append('\n'); + } + final String message = TelegramBridgeConfig.text.player_list + .replace("${endline}", "\n").replace("${playerlist}", sb.toString()) + .replace("${playercount}", String.valueOf(players.size())); + TelegramBridgeMod.getContext().sendMessage(chatId, message); + return true; + } + + private List getPlayerList() { + MinecraftServer server = ServerLifecycleHooks.getCurrentServer(); + if (server == null) { + return Collections.emptyList(); + } + final List playerList = new ArrayList(); + for (ServerPlayer player : server.getPlayerList().getPlayers()) { + playerList.add(player.getGameProfile().getName()); + } + + return playerList; + } +} diff --git a/bridge-1.18/src/main/java/ru/glitchless/telegrambridge/handlers/ToMinecraftResender.java b/bridge-1.18/src/main/java/ru/glitchless/telegrambridge/handlers/ToMinecraftResender.java new file mode 100644 index 0000000..c781ae1 --- /dev/null +++ b/bridge-1.18/src/main/java/ru/glitchless/telegrambridge/handlers/ToMinecraftResender.java @@ -0,0 +1,46 @@ +package ru.glitchless.telegrambridge.handlers; + +import net.minecraft.network.chat.TextComponent; +import net.minecraft.server.MinecraftServer; +import net.minecraft.server.level.ServerPlayer; +import net.minecraftforge.server.ServerLifecycleHooks; +import ru.glitchless.telegrambridge.core.config.TelegramBridgeConfig; +import ru.glitchless.telegrambridge.core.handlers.BaseMessageReceiver; +import ru.glitchless.telegrambridge.core.telegramapi.model.MessageObject; +import ru.glitchless.telegrambridge.core.telegramapi.model.UserObject; + +import javax.annotation.Nonnull; +import java.util.ArrayList; +import java.util.List; + +public class ToMinecraftResender extends BaseMessageReceiver { + @Override + public boolean onTelegramObjectMessage(@Nonnull MessageObject messageObject) { + final String chatId = String.valueOf(messageObject.getChat().getId()); + + if (!findChatId(chatId)) { + return false; + } + return super.onTelegramObjectMessage(messageObject); + } + + @Override + public boolean onTelegramMessage(UserObject userObject, @Nonnull String message) { + if (isCommand(message)) { + return false; + } + if (TelegramBridgeConfig.relay_mode != TelegramBridgeConfig.RelayMode.TWO_SIDE + && TelegramBridgeConfig.relay_mode != TelegramBridgeConfig.RelayMode.TO_MINECRAFT) { + return true; // ignore + } + + String textMessage = TelegramBridgeConfig.text.chatmessage_to_minecraft.replace("${nickname}", userObject.getUsername()).replace("${message}", message); + + MinecraftServer server = ServerLifecycleHooks.getCurrentServer(); + final List players = new ArrayList<>(server.getPlayerList().getPlayers()); + for (ServerPlayer player : players) { + player.sendMessage(new TextComponent(textMessage), player.getUUID()); + } + return true; + } +} diff --git a/bridge-1.18/src/main/java/ru/glitchless/telegrambridge/handlers/ToTelegramEvent.java b/bridge-1.18/src/main/java/ru/glitchless/telegrambridge/handlers/ToTelegramEvent.java new file mode 100644 index 0000000..3070018 --- /dev/null +++ b/bridge-1.18/src/main/java/ru/glitchless/telegrambridge/handlers/ToTelegramEvent.java @@ -0,0 +1,64 @@ +package ru.glitchless.telegrambridge.handlers; + +import net.minecraft.network.chat.Component; +import net.minecraft.server.level.ServerPlayer; +import net.minecraft.world.entity.player.Player; +import net.minecraftforge.event.entity.living.LivingDeathEvent; +import net.minecraftforge.event.entity.player.PlayerEvent; +import net.minecraftforge.eventbus.api.SubscribeEvent; +import net.minecraftforge.fml.common.Mod; +import ru.glitchless.telegrambridge.TelegramBridgeMod; +import ru.glitchless.telegrambridge.core.config.TelegramBridgeConfig; +import ru.glitchless.telegrambridge.core.utils.TextUtils; + +import javax.annotation.Nonnull; + +@Mod.EventBusSubscriber +public class ToTelegramEvent { + @SubscribeEvent + public static void onPlayerDeath(LivingDeathEvent event) { + if (!(event.getEntityLiving() instanceof ServerPlayer)) { + return; + } + final ServerPlayer player = (ServerPlayer) event.getEntityLiving(); + final Component textComponent = player.getCombatTracker().getDeathMessage(); + final String deathmessage = TextUtils.boldInText(textComponent.getString(), + player.getGameProfile().getName()); + final String message = TelegramBridgeConfig.text.death_message.replace("${deathmessage}", deathmessage); + if (event.getSource().getEntity() instanceof Player + && TelegramBridgeConfig.relay_level.user_kill_by_user) { + broadcastToChats(message); + return; + } + + if (TelegramBridgeConfig.relay_level.user_kill_by_other) { + broadcastToChats(message); + } + } + + @SubscribeEvent + public static void onPlayerJoin(PlayerEvent.PlayerLoggedInEvent event) { + if (!TelegramBridgeConfig.relay_level.user_join) { + return; + } + final String message = TelegramBridgeConfig.text.player_join + .replace("${nickname}", event.getPlayer().getDisplayName().getString()); + broadcastToChats(message); + } + + @SubscribeEvent + public static void onPlayerDisconnect(PlayerEvent.PlayerLoggedOutEvent event) { + if (!TelegramBridgeConfig.relay_level.user_leave) { + return; + } + final String message = TelegramBridgeConfig.text.player_leave + .replace("${nickname}", event.getPlayer().getDisplayName().getString()); + broadcastToChats(message); + } + + public static void broadcastToChats(@Nonnull String message) { + for (String id : TelegramBridgeConfig.chat_ids) { + TelegramBridgeMod.getContext().sendMessage(id, message); + } + } +} diff --git a/bridge-1.18/src/main/java/ru/glitchless/telegrambridge/handlers/ToTelegramResender.java b/bridge-1.18/src/main/java/ru/glitchless/telegrambridge/handlers/ToTelegramResender.java new file mode 100644 index 0000000..43ed81f --- /dev/null +++ b/bridge-1.18/src/main/java/ru/glitchless/telegrambridge/handlers/ToTelegramResender.java @@ -0,0 +1,29 @@ +package ru.glitchless.telegrambridge.handlers; + +import net.minecraftforge.event.ServerChatEvent; +import net.minecraftforge.eventbus.api.SubscribeEvent; +import net.minecraftforge.fml.common.Mod; +import ru.glitchless.telegrambridge.core.config.TelegramBridgeConfig; + +import static ru.glitchless.telegrambridge.handlers.ToTelegramEvent.broadcastToChats; + +@Mod.EventBusSubscriber +public class ToTelegramResender { + @SubscribeEvent + public static void onChatMessage(ServerChatEvent event) { + if (TelegramBridgeConfig.relay_mode != TelegramBridgeConfig.RelayMode.TWO_SIDE + && TelegramBridgeConfig.relay_mode != TelegramBridgeConfig.RelayMode.TO_TELEGRAM) { + return; // ignore + } + + final String message = event.getMessage(); + + if (message == null || message.isEmpty()) { + return; + } + + final String textMessage = TelegramBridgeConfig.text.chatmessage_to_telegram.replace("${nickname}", event.getUsername()).replace("${message}", message); + broadcastToChats(textMessage); + } + +} diff --git a/bridge-1.18/src/main/resources/META-INF/mods.toml b/bridge-1.18/src/main/resources/META-INF/mods.toml new file mode 100644 index 0000000..2dde2a4 --- /dev/null +++ b/bridge-1.18/src/main/resources/META-INF/mods.toml @@ -0,0 +1,53 @@ +# This is an example mods.toml file. It contains the data relating to the loading mods. +# There are several mandatory fields (#mandatory), and many more that are optional (#optional). +# The overall format is standard TOML format, v0.5.0. +# Note that there are a couple of TOML lists in this file. +# Find more information on toml format here: https://github.com/toml-lang/toml +# The name of the mod loader type to load - for regular FML @Mod mods it should be javafml +modLoader="javafml" #mandatory +# A version range to match for said mod loader - for regular FML @Mod it will be the forge version +loaderVersion="[30,)" #mandatory (30 is current forge version) +# A URL to refer people to when problems occur with this mod +issueTrackerURL="https://github.com/glitchless/MinecraftTelegramBridge/issues" #optional +# A list of mods - how many allowed here is determined by the individual mod loader +license="All rights reserved" +[[mods]] #mandatory +# The modid of the mod +modId="telegrambridge" #mandatory +# The version number of the mod - there's a few well known ${} variables useable here or just hardcode it +version="${version}" #mandatory + # A display name for the mod +displayName="Telegram Bridge" #mandatory +# A URL to query for updates for this mod. See the JSON update specification +updateJSONURL="https://raw.githubusercontent.com/glitchless/MinecraftTelegramBridge/master/static/update.json" #optional +# A URL for the "homepage" for this mod, displayed in the mod UI +displayURL="https://www.curseforge.com/minecraft/mc-mods/telegram-bridge" #optional +# A file name (in the root of the mod JAR) containing a logo for display +logoFile="telegrambridge.png" #optional +# A text field displayed in the mod UI +credits="StealthTech for beautiful mod icon" #optional +# A text field displayed in the mod UI +authors="LionZXY" #optional +# The description text for the mod (multi line!) (#mandatory) +description=''' +Bridge between game and real world +''' +# A dependency - use the . to indicate dependency for a specific modid. Dependencies are optional. +[[dependencies.telegrambridge]] #optional + # the modid of the dependency + modId="forge" #mandatory + # Does this dependency have to exist - if not, ordering below must be specified + mandatory=true #mandatory + # The version range of the dependency + versionRange="[30,)" #mandatory + # An ordering relationship for the dependency - BEFORE or AFTER required if the relationship is not mandatory + ordering="NONE" + # Side this dependency is applied on - BOTH, CLIENT or SERVER + side="BOTH" +# Here's another dependency +[[dependencies.telegrambridge]] + modId="minecraft" + mandatory=true + versionRange="[1.18,)" + ordering="NONE" + side="BOTH" diff --git a/bridge-1.18/src/main/resources/assets/telegrambridge/lang/en_us.lang b/bridge-1.18/src/main/resources/assets/telegrambridge/lang/en_us.lang new file mode 100644 index 0000000..24b8fd2 --- /dev/null +++ b/bridge-1.18/src/main/resources/assets/telegrambridge/lang/en_us.lang @@ -0,0 +1,8 @@ +telegrambridge.deathmessage=\[ ${deathmessage} ] +telegrambridge.serverstart=\[ Сервер запущен ] +telegrambridge.serverstop=\[ Сервер остановлен ] +telegrambridge.playerjoin=\[ Игрок *${nickname}* зашел в игру ] +telegrambridge.playerleave=\[ Игрок *${nickname}* вышел из игры ] +telegrambridge.telegramchatmessage=*${nickname}:* ${message} +telegrambridge.minecraftchatmessage=§3Ретранслятор§f / <§b${nickname}§f> ${message} +telegrambridge.notfoundchat=Чата `${chatid}` не найдено в списке разрешенных. Вы можете его добавить в `config/telegrambridge.cfg` diff --git a/bridge-1.18/src/main/resources/assets/telegrambridge/lang/ru_ru.lang b/bridge-1.18/src/main/resources/assets/telegrambridge/lang/ru_ru.lang new file mode 100644 index 0000000..023f6e4 --- /dev/null +++ b/bridge-1.18/src/main/resources/assets/telegrambridge/lang/ru_ru.lang @@ -0,0 +1,7 @@ +telegrambridge.serverstart=\[ Сервер запущен ] +telegrambridge.serverstop=\[ Сервер остановлен ] +telegrambridge.playerjoin=\[ Игрок *${nickname}* зашел в игру ] +telegrambridge.playerleave=\[ Игрок *${nickname}* вышел из игры ] +telegrambridge.telegramchatmessage=*${nickname}:* ${message} +telegrambridge.minecraftchatmessage=§3Ретранслятор§f / <§b${nickname}§f> ${message} +telegrambridge.notfoundchat=Чата `${chatid}` не найдено в списке разрешенных. Вы можете его добавить в `config/telegrambridge.cfg` diff --git a/bridge-1.18/src/main/resources/pack.mcmeta b/bridge-1.18/src/main/resources/pack.mcmeta new file mode 100644 index 0000000..700e07e --- /dev/null +++ b/bridge-1.18/src/main/resources/pack.mcmeta @@ -0,0 +1,7 @@ +{ + "pack": { + "description": "examplemod resources", + "pack_format": 5, + "_comment": "A pack_format of 5 requires json lang files and some texture changes from 1.15. Note: we require v5 pack meta for all mods." + } +} diff --git a/bridge-1.18/src/main/resources/telegrambridge.png b/bridge-1.18/src/main/resources/telegrambridge.png new file mode 100644 index 0000000..2931baf Binary files /dev/null and b/bridge-1.18/src/main/resources/telegrambridge.png differ diff --git a/core/build.gradle b/core/build.gradle index 7b8539c..b241e3a 100644 --- a/core/build.gradle +++ b/core/build.gradle @@ -11,8 +11,8 @@ repositories { } dependencies { - compile "com.google.code.findbugs:jsr305:+" - compile "org.apache.logging.log4j:log4j-api:2.8.1" - compile "com.google.code.gson:gson:2.8.0" - compile "org.apache.commons:commons-lang3:3.5" + compileOnly "com.google.code.findbugs:jsr305:+" + compileOnly "org.apache.logging.log4j:log4j-api:2.8.1" + compileOnly "com.google.code.gson:gson:2.8.0" + compileOnly "org.apache.commons:commons-lang3:3.5" } diff --git a/settings.gradle b/settings.gradle index 7f27a37..27717e4 100644 --- a/settings.gradle +++ b/settings.gradle @@ -3,5 +3,6 @@ include 'bridge-1.7' include 'bridge-1.14' include 'bridge-1.15' include 'bridge-1.16' +include 'bridge-1.18' include 'bukkit'