MandreCompiler-1 / Dockerfile
sterepando's picture
Update Dockerfile
42c5fbf verified
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"]