Skip to content

Commit

Permalink
Merge branch 'release/V0.1.0' into stable
Browse files Browse the repository at this point in the history
  • Loading branch information
Jordonbc committed Jul 1, 2023
2 parents f1d09fd + 8646912 commit 3d88ee9
Show file tree
Hide file tree
Showing 48 changed files with 1,429 additions and 446 deletions.
4 changes: 2 additions & 2 deletions .gitattributes
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
# Disable autocrlf on generated files, they always generate with LF
# Add any extra files or paths here to make git stop saying they
# are changed when only line endings change.
src/generated/**/.cache/cache text eol=lf
src/generated/**/*.json text eol=lf
forge/src/generated/**/.cache/cache text eol=lf
forge/src/generated/**/*.json text eol=lf
40 changes: 40 additions & 0 deletions .github/workflows/build.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
# Automatically build the project and run any configured tests for every push
# and submitted pull request. This can help catch issues that only occur on
# certain platforms or Java versions, and provides a first line of defence
# against bad commits.

name: build
on: [pull_request, push]

jobs:
build:
strategy:
matrix:
# Use these Java versions
java: [
17, # Current Java LTS & minimum supported by Minecraft
]
# and run on both Linux and Windows
os: [ubuntu-22.04, windows-2022]
runs-on: ${{ matrix.os }}
steps:
- name: checkout repository
uses: actions/checkout@v3
- name: validate gradle wrapper
uses: gradle/wrapper-validation-action@v1
- name: setup jdk ${{ matrix.java }}
uses: actions/setup-java@v3
with:
java-version: ${{ matrix.java }}
distribution: 'microsoft'
- name: make gradle wrapper executable
if: ${{ runner.os != 'Windows' }}
run: chmod +x ./gradlew
- name: build
run: ./gradlew build
- name: capture build artifacts
if: ${{ runner.os == 'Linux' && matrix.java == '17' }} # Only upload artifacts built from latest java on one OS
uses: actions/upload-artifact@v3
with:
name: Artifacts
path: build/libs/
42 changes: 20 additions & 22 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -1,25 +1,23 @@
# eclipse
bin
*.launch
.settings
.metadata
.classpath
.project
*
!*/
!.gitignore
!.github/**
.idea/.gitignore

# idea
out
*.ipr
*.iws
*.iml
.idea
!build.gradle
!gradle.properties
!gradlew
!gradlew.bat
!LICENSE
!README.md
!settings.gradle

# gradle
build
.gradle
!common/build.gradle
!forge/build.gradle
!fabric/build.gradle
!Resources/**

# other
eclipse
run

# Files from Forge MDK
forge*changelog.txt
!gradle/wrapper/**
!forge/src/**
!fabric/src/**
!common/src/**
31 changes: 17 additions & 14 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,33 +1,36 @@
![MCVer](https://img.shields.io/badge/MC-1.19.4-green) ![ModLoader](https://img.shields.io/badge/Mod_Loader-Forge-green)
<p align="center">
<img src="Resources/HarmonyLinkBanner.png" alt="HarmonyLinkMC"/>
</p>

![MCVer](https://img.shields.io/badge/MC-1.19.4-blue)
![ModLoader](https://img.shields.io/badge/Mod_Loader-Forge_/_Fabric-blue)
![HLAPIVer](https://img.shields.io/badge/HarmonyLink_API_Version-V1-blue)

Welcome to the HarmonyLink Minecraft Mod! This mod integrates the HarmonyLink API into Minecraft, providing an enhanced gaming experience on handheld devices, including the Steam Deck. With HarmonyLink, you can access real-time system metrics and adapt your gameplay settings for a more personalized and immersive adventure.

### Features

- Real-Time Metrics: Gain access to critical system metrics, such as power usage and docking status, in real-time while playing Minecraft on handheld devices.
- Device Identification: Identify the specific handheld device you are playing Minecraft on, ensuring optimal compatibility and performance.
- Customized Gaming Experience: Adapt your game settings based on the power metrics and docking status, creating a tailored experience that suits your preferences and device capabilities.
- Cross-Platform Compatibility: Enjoy the benefits of HarmonyLink not only on native platforms but also on Windows games running through Proton/Wine, expanding its functionality to a wider range of handheld devices.
- **Automated Graphics Settings:** The mod can automatically adjust graphics settings based on your device's power source: battery, charging, or docked mode.
- **Docked Mode Option:** Docked mode is an optional feature. If you prefer, you can choose to turn it off.
- **Customizable Settings:** Change a variety of settings to suit your preferences, including Graphics mode (Fast, Fancy, Fabulous), Render distance, Simulation distance, Biome blend radius, and GUI scale.
- **Full User Control:** As a user, you maintain complete control over all settings. Whether your device is running on battery or charging, you can define the graphics quality and other settings as you wish.

### Getting Started

To get started with the HarmonyLink Minecraft Mod, follow these steps:
Follow these detailed steps to set up and start using the HarmonyLink Minecraft Mod:

1. Install Minecraft Forge: Make sure you have Minecraft Forge installed on your device.
2. Download HarmonyLink Mod: Download the latest version of the HarmonyLink Minecraft Mod from the [GitHub repository](https://github.com/Jordonbc/HarmonyLink-MC/releases).
3. Install HarmonyLink Mod: Place the downloaded mod file into the "mods" folder in your Minecraft directory.
4. Download and run [HarmonyLinkServer](https://github.com/Jordonbc/HarmonyLinkServer).
4. Launch Minecraft: Start Minecraft with the HarmonyLink Mod installed.
5. Enjoy the Enhanced Experience: Play Minecraft on your handheld device and witness the real-time system metrics and adaptive gameplay features provided by HarmonyLink.
1. **Install Minecraft Forge / Fabric:** The first step is to ensure you have Minecraft Forge or Fabric installed on your device. These are mod loaders that allow Minecraft to use mods like HarmonyLink. You can download these from their official websites.
2. **Download HarmonyLink Mod:** Next, navigate to the HarmonyLink Minecraft Mod page on the [modrinth](https://modrinth.com/mod/harmonylinkmc) website. Select the latest version of the mod and download it to your device.
3. **Install HarmonyLink Mod:** Once downloaded, move the HarmonyLink Mod file into the "mods" folder in your Minecraft directory. If you can't find this folder, it's typically located within the '.minecraft' folder.
4. **Install HarmonyLinkServer:** To take full advantage of HarmonyLink's features, you need to install the HarmonyLinkServer. You can download it from [here](https://github.com/Jordonbc/HarmonyLinkServer/releases/latest/download/harmonylink_installer.desktop). Follow the instructions on the website to install it correctly.
5. **Launch Minecraft:** Now that everything is set up, it's time to launch Minecraft. Ensure that the game is launched with Forge or Fabric, which will then load the HarmonyLink Mod.
6. **Configure Settings:** Once in the game, navigate to the mod settings to configure the graphics settings for different power modes (battery, charging, docked). Remember, docked mode can be turned off if you prefer.
7. **Enjoy the Enhanced Experience:** You're all set! Now you can enjoy a more personalized Minecraft gaming experience with adaptive gameplay settings provided by HarmonyLink.

Note: To get this working in gamemode, HarmonyLinkServer needs to be installed as a service to run in the background.

### Contributing

We welcome contributions from the Minecraft and programming community to further improve the HarmonyLink Minecraft Mod. If you have any suggestions, bug reports, or feature requests, please open an issue in the [GitHub repository](https://github.com/Jordonbc/HarmonyLink-MC/issues).
We welcome contributions from the Minecraft and programming community to further improve the HarmonyLink Minecraft Mod. If you have any suggestions, bug reports, or feature requests, please open an issue in the [GitHub repository](https://github.com/Jordonbc/HarmonyLinkMC/issues).

### License

Expand Down
200 changes: 35 additions & 165 deletions build.gradle
Original file line number Diff line number Diff line change
@@ -1,181 +1,51 @@
plugins {
id 'eclipse'
id 'maven-publish'
id 'net.minecraftforge.gradle' version '5.1.+'
id "architectury-plugin" version "3.4-SNAPSHOT"
id "dev.architectury.loom" version "1.1-SNAPSHOT" apply false
}

version = '0.0.1-1.19-Forge'
group = 'net.jordon.harmonylink' // http://maven.apache.org/guides/mini/guide-naming-conventions.html
archivesBaseName = 'harmonylink'

// Mojang ships Java 17 to end users in 1.18+, so your mod should target Java 17.
java.toolchain.languageVersion = JavaLanguageVersion.of(17)

println "Java: ${System.getProperty 'java.version'}, JVM: ${System.getProperty 'java.vm.version'} (${System.getProperty 'java.vendor'}), Arch: ${System.getProperty 'os.arch'}"
minecraft {
// The mappings can be changed at any time and must be in the following format.
// Channel: Version:
// official MCVersion Official field/method names from Mojang mapping files
// parchment YYYY.MM.DD-MCVersion Open community-sourced parameter names and javadocs layered on top of official
//
// You must be aware of the Mojang license when using the 'official' or 'parchment' mappings.
// See more information here: https://github.com/MinecraftForge/MCPConfig/blob/master/Mojang.md
//
// Parchment is an unofficial project maintained by ParchmentMC, separate from MinecraftForge
// Additional setup is needed to use their mappings: https://parchmentmc.org/docs/getting-started
//
// 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.19.4'

// accessTransformer = file('src/main/resources/META-INF/accesstransformer.cfg') // Currently, this location cannot be changed from the default.

// 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
// The markers can be added/remove as needed separated by commas.
// "SCAN": For mods scan.
// "REGISTRIES": For firing of registry events.
// "REGISTRYDUMP": For getting the contents of all registries.
property 'forge.logging.markers', 'REGISTRIES'

// Recommended logging level for the console
// You can set various levels here.
// Please read: https://stackoverflow.com/questions/2031163/when-to-use-the-different-log-levels
property 'forge.logging.console.level', 'debug'

// Comma-separated list of namespaces to load gametests from. Empty = all namespaces.
property 'forge.enabledGameTestNamespaces', 'harmonylink'

mods {
harmonylink {
source sourceSets.main
}
}
}

server {
workingDirectory project.file('run')

property 'forge.logging.markers', 'REGISTRIES'

property 'forge.logging.console.level', 'debug'

property 'forge.enabledGameTestNamespaces', 'harmonylink'

mods {
harmonylink {
source sourceSets.main
}
}
}

// This run config launches GameTestServer and runs all registered gametests, then exits.
// By default, the server will crash when no gametests are provided.
// The gametest system is also enabled by default for other run configs under the /test command.
gameTestServer {
workingDirectory project.file('run')

property 'forge.logging.markers', 'REGISTRIES'

property 'forge.logging.console.level', 'debug'

property 'forge.enabledGameTestNamespaces', 'harmonylink'

mods {
harmonylink {
source sourceSets.main
}
}
}

data {
workingDirectory project.file('run')

property 'forge.logging.markers', 'REGISTRIES'

property 'forge.logging.console.level', 'debug'

// Specify the modid for data generation, where to output the resulting resource, and where to look for existing resources.
args '--mod', 'harmonylink', '--all', '--output', file('src/generated/resources/'), '--existing', file('src/main/resources/')

mods {
harmonylink {
source sourceSets.main
}
}
}
}
architectury {
minecraft = rootProject.minecraft_version
}

// Include resources generated by data generators.
sourceSets.main.resources { srcDir 'src/generated/resources' }
subprojects {
apply plugin: "dev.architectury.loom"

repositories {
// Put repositories for dependencies here
// ForgeGradle automatically adds the Forge maven and Maven Central for you
loom {
silentMojangMappingsLicense()
}

// If you have mod jar dependencies in ./libs, you can declare them as a repository like so:
// flatDir {
// dir 'libs'
// }
dependencies {
minecraft "com.mojang:minecraft:${rootProject.minecraft_version}"
// The following line declares the mojmap mappings, you may use other mappings as well
mappings loom.officialMojangMappings()
// The following line declares the yarn mappings you may select this one as well.
// mappings "net.fabricmc:yarn:1.19.4+build.2:v2"
}
}

dependencies {
// Specify the version of Minecraft to use. If this is any group other than 'net.minecraft', it is assumed
// that the dep is a ForgeGradle 'patcher' dependency, and its 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.19.4-45.1.0'

// Real mod deobf dependency examples - these get remapped to your current mappings
// implementation fg.deobf("com.tterrag.registrate:Registrate:MC${mc_version}-${registrate_version}") // Adds registrate as a dependency
allprojects {
apply plugin: "java"
apply plugin: "architectury-plugin"
apply plugin: "maven-publish"

// Examples using mod jars from ./libs
// implementation fg.deobf("blank:coolmod-${mc_version}:${coolmod_version}")
archivesBaseName = rootProject.archives_base_name
version = rootProject.mod_version
group = rootProject.maven_group

// For more info...
// http://www.gradle.org/docs/current/userguide/artifact_dependencies_tutorial.html
// http://www.gradle.org/docs/current/userguide/dependency_management.html
}

// Example for how to get properties into the manifest for reading at runtime.
jar {
manifest {
attributes([
"Specification-Title" : "harmonylink",
"Specification-Vendor" : "harmonylinksareus",
"Specification-Version" : "1", // We are version 1 of ourselves
"Implementation-Title" : project.name,
"Implementation-Version" : project.jar.archiveVersion,
"Implementation-Vendor" : "harmonylinksareus",
"Implementation-Timestamp": new Date().format("yyyy-MM-dd'T'HH:mm:ssZ")
])
repositories {
// Add repositories to retrieve artifacts from in here.
// You should only use this when depending on other mods because
// Loom adds the essential maven repositories to download Minecraft and libraries from automatically.
// See https://docs.gradle.org/current/userguide/declaring_repositories.html
// for more information about repositories.
}
}

// Example configuration to allow publishing using the maven-publish plugin
// This is the preferred method to reobfuscate your jar file
jar.finalizedBy('reobfJar')
// However if you are in a multi-project build, dev time needs unobfed jar files, so you can delay the obfuscation until publishing by doing
// publish.dependsOn('reobfJar')

publishing {
publications {
mavenJava(MavenPublication) {
artifact jar
}
tasks.withType(JavaCompile) {
options.encoding = "UTF-8"
options.release = 17
}
repositories {
maven {
url "file://${project.projectDir}/mcmodsrepo"
}
}
}

tasks.withType(JavaCompile).configureEach {
options.encoding = 'UTF-8' // Use the UTF-8 charset for Java compilation
java {
withSourcesJar()
}
}
29 changes: 29 additions & 0 deletions common/build.gradle
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
architectury {
common(rootProject.enabled_platforms.split(","))
}

loom {
accessWidenerPath = file("src/main/resources/harmonylink.accesswidener")
}

dependencies {
// We depend on fabric loader here to use the fabric @Environment annotations and get the mixin dependencies
// Do NOT use other classes from fabric loader
modImplementation "net.fabricmc:fabric-loader:${rootProject.fabric_loader_version}"
// Remove the next line if you don't want to depend on the API
modApi "dev.architectury:architectury:${rootProject.architectury_version}"
}

publishing {
publications {
mavenCommon(MavenPublication) {
artifactId = rootProject.archives_base_name
from components.java
}
}

// See https://docs.gradle.org/current/userguide/publishing_maven.html for information on how to set up publishing.
repositories {
// Add repositories to publish to here.
}
}
Loading

0 comments on commit 3d88ee9

Please sign in to comment.