Spaces:
Paused
Paused
| FROM eclipse-temurin:17-jdk-jammy | |
| # Установка необходимых пакетов | |
| RUN apt-get update && apt-get install -y \ | |
| git \ | |
| python3 \ | |
| python3-pip \ | |
| wget \ | |
| unzip \ | |
| && rm -rf /var/lib/apt/lists/* | |
| # Создание рабочей директории | |
| WORKDIR /workspace | |
| # Создание структуры мода | |
| RUN mkdir -p src/main/java/com/freecam/mod src/main/resources | |
| # Создание settings.gradle | |
| RUN echo 'pluginManagement {\n\ | |
| repositories {\n\ | |
| maven {\n\ | |
| name = "Fabric"\n\ | |
| url = "https://maven.fabricmc.net/"\n\ | |
| }\n\ | |
| mavenCentral()\n\ | |
| gradlePluginPortal()\n\ | |
| }\n\ | |
| }\n\ | |
| \n\ | |
| rootProject.name = "freecam-minecraft-mod"' > settings.gradle | |
| # Создание gradle.properties | |
| RUN echo 'org.gradle.jvmargs=-Xmx3G\n\ | |
| org.gradle.daemon=false\n\ | |
| \n\ | |
| minecraft_version=1.20.1\n\ | |
| yarn_mappings=1.20.1+build.10\n\ | |
| loader_version=0.15.0\n\ | |
| \n\ | |
| fabric_version=0.92.0+1.20.1\n\ | |
| \n\ | |
| mod_version=1.0.0\n\ | |
| maven_group=com.freecam\n\ | |
| archives_base_name=freecam' > gradle.properties | |
| # Создание build.gradle | |
| RUN echo 'plugins {\n\ | |
| id "fabric-loom" version "1.7-SNAPSHOT"\n\ | |
| id "maven-publish"\n\ | |
| }\n\ | |
| \n\ | |
| version = project.mod_version\n\ | |
| group = project.maven_group\n\ | |
| \n\ | |
| base {\n\ | |
| archivesName = project.archives_base_name\n\ | |
| }\n\ | |
| \n\ | |
| repositories {\n\ | |
| mavenCentral()\n\ | |
| }\n\ | |
| \n\ | |
| dependencies {\n\ | |
| minecraft "com.mojang:minecraft:${project.minecraft_version}"\n\ | |
| mappings "net.fabricmc:yarn:${project.yarn_mappings}:v2"\n\ | |
| modImplementation "net.fabricmc:fabric-loader:${project.loader_version}"\n\ | |
| modImplementation "net.fabricmc.fabric-api:fabric-api:${project.fabric_version}"\n\ | |
| }\n\ | |
| \n\ | |
| processResources {\n\ | |
| inputs.property "version", project.version\n\ | |
| \n\ | |
| filesMatching("fabric.mod.json") {\n\ | |
| expand "version": project.version\n\ | |
| }\n\ | |
| }\n\ | |
| \n\ | |
| tasks.withType(JavaCompile).configureEach {\n\ | |
| it.options.release = 17\n\ | |
| }\n\ | |
| \n\ | |
| java {\n\ | |
| withSourcesJar()\n\ | |
| \n\ | |
| sourceCompatibility = JavaVersion.VERSION_17\n\ | |
| targetCompatibility = JavaVersion.VERSION_17\n\ | |
| }\n\ | |
| \n\ | |
| jar {\n\ | |
| from("LICENSE") {\n\ | |
| rename { "${it}_${project.base.archivesName.get()}"}\n\ | |
| }\n\ | |
| }' > build.gradle | |
| # Создание основного класса мода | |
| RUN echo 'package com.freecam.mod;\n\ | |
| \n\ | |
| import net.fabricmc.api.ClientModInitializer;\n\ | |
| import net.fabricmc.fabric.api.client.event.lifecycle.v1.ClientTickEvents;\n\ | |
| import net.fabricmc.fabric.api.client.keybinding.v1.KeyBindingHelper;\n\ | |
| import net.minecraft.client.MinecraftClient;\n\ | |
| import net.minecraft.client.option.KeyBinding;\n\ | |
| import net.minecraft.client.util.InputUtil;\n\ | |
| import org.lwjgl.glfw.GLFW;\n\ | |
| \n\ | |
| public class FreeCamMod implements ClientModInitializer {\n\ | |
| private static KeyBinding freecamKey;\n\ | |
| private static boolean freecamActive = false;\n\ | |
| private static double savedX, savedY, savedZ;\n\ | |
| private static float savedYaw, savedPitch;\n\ | |
| \n\ | |
| @Override\n\ | |
| public void onInitializeClient() {\n\ | |
| freecamKey = KeyBindingHelper.registerKeyBinding(new KeyBinding(\n\ | |
| "key.freecam.toggle",\n\ | |
| InputUtil.Type.KEYSYM,\n\ | |
| GLFW.GLFW_KEY_H,\n\ | |
| "category.freecam"\n\ | |
| ));\n\ | |
| \n\ | |
| ClientTickEvents.END_CLIENT_TICK.register(client -> {\n\ | |
| if (freecamKey.wasPressed() && client.player != null) {\n\ | |
| if (InputUtil.isKeyPressed(MinecraftClient.getInstance().getWindow().getHandle(), GLFW.GLFW_KEY_LEFT_CONTROL)) {\n\ | |
| toggleFreecam(client);\n\ | |
| }\n\ | |
| }\n\ | |
| });\n\ | |
| }\n\ | |
| \n\ | |
| private void toggleFreecam(MinecraftClient client) {\n\ | |
| if (client.player == null) return;\n\ | |
| \n\ | |
| freecamActive = !freecamActive;\n\ | |
| \n\ | |
| if (freecamActive) {\n\ | |
| savedX = client.player.getX();\n\ | |
| savedY = client.player.getY();\n\ | |
| savedZ = client.player.getZ();\n\ | |
| savedYaw = client.player.getYaw();\n\ | |
| savedPitch = client.player.getPitch();\n\ | |
| client.player.noClip = true;\n\ | |
| } else {\n\ | |
| client.player.setPosition(savedX, savedY, savedZ);\n\ | |
| client.player.setYaw(savedYaw);\n\ | |
| client.player.setPitch(savedPitch);\n\ | |
| client.player.noClip = false;\n\ | |
| }\n\ | |
| }\n\ | |
| }' > src/main/java/com/freecam/mod/FreeCamMod.java | |
| # Создание fabric.mod.json | |
| RUN echo '{\n\ | |
| "schemaVersion": 1,\n\ | |
| "id": "freecam",\n\ | |
| "version": "${version}",\n\ | |
| "name": "FreeCam Mod",\n\ | |
| "description": "FreeCam with Ctrl+H",\n\ | |
| "authors": ["Author"],\n\ | |
| "contact": {},\n\ | |
| "license": "MIT",\n\ | |
| "environment": "client",\n\ | |
| "entrypoints": {\n\ | |
| "client": [\n\ | |
| "com.freecam.mod.FreeCamMod"\n\ | |
| ]\n\ | |
| },\n\ | |
| "depends": {\n\ | |
| "fabricloader": ">=0.15.0",\n\ | |
| "minecraft": "~1.20.1",\n\ | |
| "java": ">=17",\n\ | |
| "fabric-api": "*"\n\ | |
| }\n\ | |
| }' > src/main/resources/fabric.mod.json | |
| # Установка Gradle 8.8 | |
| RUN wget https://services.gradle.org/distributions/gradle-8.8-bin.zip && \ | |
| unzip gradle-8.8-bin.zip && \ | |
| rm gradle-8.8-bin.zip && \ | |
| mv gradle-8.8 /opt/gradle | |
| ENV PATH="/opt/gradle/bin:${PATH}" | |
| # Сборка мода | |
| RUN gradle build --no-daemon | |
| # Копирование JAR в доступное место | |
| RUN mkdir -p /download && \ | |
| find build/libs -name "*.jar" ! -name "*-sources.jar" -exec cp {} /download/freecam-mod.jar \; | |
| # Создание простого Python HTTP сервера | |
| RUN echo 'from http.server import HTTPServer, SimpleHTTPRequestHandler\n\ | |
| import os\n\ | |
| os.chdir("/download")\n\ | |
| server = HTTPServer(("0.0.0.0", 7860), SimpleHTTPRequestHandler)\n\ | |
| print("Server running on port 7860")\n\ | |
| server.serve_forever()' > /server.py | |
| EXPOSE 7860 | |
| CMD ["python3", "/server.py"] |