Skip to content
This repository was archived by the owner on Apr 21, 2024. It is now read-only.

Commit f77baa5

Browse files
committed
exp: 添加 Mixin
1 parent 22acee1 commit f77baa5

File tree

6 files changed

+106
-32
lines changed

6 files changed

+106
-32
lines changed

.github/workflows/ci.yml

Lines changed: 27 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,10 @@ on:
77
pull_request:
88
workflow_dispatch:
99

10+
permissions:
11+
contents: write
12+
discussions: write
13+
1014
jobs:
1115
build:
1216
if: github.event_name != 'pull_request'
@@ -34,11 +38,30 @@ jobs:
3438
- name: Get short SHA
3539
run: echo "SHORT_SHA=${GITHUB_SHA::7}" >> $GITHUB_ENV
3640

37-
- name: Upload Artifacts
38-
uses: actions/upload-artifact@v4
41+
- name: Read Properties mod info
42+
id: prop_info
43+
uses: christian-draeger/[email protected]
44+
with:
45+
path: gradle.properties
46+
properties: "release_version"
47+
48+
# - name: Upload Artifacts
49+
# uses: actions/upload-artifact@v4
50+
# with:
51+
# name: GrassLauncher-${{ env.SHORT_SHA }}
52+
# path: build/libs/
53+
54+
- name: Publish GitHub Pre-Release
55+
uses: softprops/action-gh-release@v1
3956
with:
40-
name: GrassLauncher-${{ env.SHORT_SHA }}
41-
path: build/libs/
57+
prerelease: true
58+
files: |
59+
build/libs/*.jar
60+
tag_name: "${{ steps.prop_info.outputs.release_version }}-${{ env.SHORT_SHA }}"
61+
target_commitish: ${{ github.event.ref }}
62+
discussion_category_name: Announcement
63+
generate_release_notes: true
64+
token: ${{ secrets.PUBLISH_TOKEN }}
4265

4366
test:
4467
runs-on: ubuntu-latest

build.gradle

Lines changed: 35 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -109,6 +109,7 @@ publishing {
109109
}
110110

111111
configurations {
112+
implementation.extendsFrom shadow
112113
}
113114

114115
dependencies {
@@ -122,33 +123,34 @@ dependencies {
122123
implementation 'com.google.code.findbugs:jsr305:3.0.2'
123124

124125
// Logging
125-
implementation "org.apache.logging.log4j:log4j-api:2.23.0"
126-
implementation "org.apache.logging.log4j:log4j-core:2.23.0"
127-
implementation "org.apache.logging.log4j:log4j-slf4j-impl:2.23.0"
126+
shadow "org.apache.logging.log4j:log4j-api:2.23.0"
127+
shadow "org.apache.logging.log4j:log4j-core:2.23.0"
128+
shadow "org.apache.logging.log4j:log4j-slf4j-impl:2.23.0"
128129

129130
// Common
130-
implementation "com.fasterxml.jackson.core:jackson-databind:2.16.1"
131-
implementation "com.fasterxml.jackson.dataformat:jackson-dataformat-yaml:2.16.1"
132-
implementation "com.fasterxml.jackson.dataformat:jackson-dataformat-properties:2.16.1"
133-
implementation "com.fasterxml.jackson.module:jackson-module-parameter-names:2.16.1"
134-
implementation "com.fasterxml.jackson.datatype:jackson-datatype-jdk8:2.16.1"
135-
implementation "com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.16.1"
136-
137-
implementation "com.squareup.okhttp3:okhttp:4.12.0"
138-
implementation "io.netty:netty-all:4.1.107.Final"
139-
//implementation "commons-codec:commons-codec:1.16.0"
140-
//implementation "commons-net:commons-net:3.10.0"
141-
implementation "commons-io:commons-io:2.15.1"
142-
//implementation "org.apache.commons:commons-collections4:4.4"
143-
//implementation "org.apache.commons:commons-compress:1.25.0"
144-
//implementation "org.apache.commons:commons-rng-bom:1.5"
145-
//implementation "org.apache.commons:commons-text:1.11.0"
146-
implementation "org.apache.commons:commons-lang3:3.14.0"
147-
148-
// implementation "org.spongepowered:mixin:0.8.5"
149-
implementation "net.fabricmc:sponge-mixin:0.13.0+mixin.0.8.5"
150-
implementation "com.google.guava:guava:33.0.0-jre"
151-
implementation "com.google.code.gson:gson:2.10.1"
131+
shadow "com.fasterxml.jackson.core:jackson-databind:2.16.1"
132+
shadow "com.fasterxml.jackson.dataformat:jackson-dataformat-yaml:2.16.1"
133+
shadow "com.fasterxml.jackson.dataformat:jackson-dataformat-properties:2.16.1"
134+
shadow "com.fasterxml.jackson.module:jackson-module-parameter-names:2.16.1"
135+
shadow "com.fasterxml.jackson.datatype:jackson-datatype-jdk8:2.16.1"
136+
shadow "com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.16.1"
137+
138+
shadow "com.squareup.okhttp3:okhttp:4.12.0"
139+
shadow "io.netty:netty-all:4.1.107.Final"
140+
//shadow "commons-codec:commons-codec:1.16.0"
141+
//shadow "commons-net:commons-net:3.10.0"
142+
shadow "commons-io:commons-io:2.15.1"
143+
//shadow "org.apache.commons:commons-collections4:4.4"
144+
//shadow "org.apache.commons:commons-compress:1.25.0"
145+
//shadow "org.apache.commons:commons-rng-bom:1.5"
146+
//shadow "org.apache.commons:commons-text:1.11.0"
147+
shadow "org.apache.commons:commons-lang3:3.14.0"
148+
149+
// shadow "org.spongepowered:mixin:0.8.5"
150+
shadow(annotationProcessor("net.fabricmc:sponge-mixin:0.13.0+mixin.0.8.5"))
151+
shadow "com.google.guava:guava:33.0.0-jre"
152+
shadow "com.google.code.gson:gson:2.10.1"
153+
shadow(annotationProcessor("io.github.llamalad7:mixinextras-common:0.3.5"))
152154

153155
// Tests
154156
annotationProcessor(testImplementation("org.projectlombok:lombok:1.18.30"))
@@ -191,6 +193,14 @@ jar {
191193
}
192194

193195
shadowJar {
196+
configurations = [project.configurations.shadow]
197+
198+
def reloc = {
199+
p -> relocate((String) p, "xyz.mrcraftteammc.library.$p")
200+
}
201+
202+
mergeGroovyExtensionModules()
203+
mergeServiceFiles()
194204
zip64 true
195205
}
196206

gradle.properties

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,5 +2,5 @@ org.gradle.daemon=false
22
org.gradle.jvmargs=-Xmx1G
33

44
maven_group = xyz.mrcraftteammc.grasslauncher
5-
release_version = 1.0.0-SNAPSHOT
5+
release_version = 1.0.0
66
archives_base_name = grasslauncher

src/main/java/xyz/mrcraftteammc/grasslauncher/extension/Extension.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,9 @@
77
import xyz.mrcraftteammc.grasslauncher.common.GrassLauncher;
88
import xyz.mrcraftteammc.grasslauncher.extension.exception.ExtensionException;
99

10+
import java.util.ArrayList;
11+
import java.util.List;
12+
1013
@Getter
1114
@AllArgsConstructor
1215
public abstract class Extension {
@@ -20,6 +23,10 @@ public void onEnabled() throws ExtensionException {
2023
public void onDisabled() throws ExtensionException {
2124
}
2225

26+
public String[] getMixinConfigs() {
27+
return null;
28+
}
29+
2330
public Logger getLogger() {
2431
return LoggerFactory.getLogger(String.format("GrassLauncher Extension | %s", this.id));
2532
}

src/main/java/xyz/mrcraftteammc/grasslauncher/extension/ExtensionLoader.java

Lines changed: 31 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import com.fasterxml.jackson.dataformat.yaml.YAMLMapper;
44
import org.slf4j.Logger;
55
import org.slf4j.LoggerFactory;
6+
import org.spongepowered.asm.mixin.Mixins;
67
import xyz.mrcraftteammc.grasslauncher.common.CommonConstants;
78
import xyz.mrcraftteammc.grasslauncher.common.DefaultExtension;
89
import xyz.mrcraftteammc.grasslauncher.extension.annotations.ExtensionInstance;
@@ -21,13 +22,19 @@
2122

2223
// TODO: Complete Loader
2324
public final class ExtensionLoader {
25+
private static boolean Initialized = false;
2426
private final Logger logger = LoggerFactory.getLogger("GrassLauncher Extension Loader");
2527
private final File file = new File(CommonConstants.EXTENSIONS_DIR);
2628
private final YAMLMapper mapper = new YAMLMapper();
27-
private final List<Extension> extensionList;
29+
private List<Extension> extensionList = new ArrayList<>();
2830

2931
public ExtensionLoader() throws IOException, ClassNotFoundException, InstantiationException, IllegalAccessException {
30-
this.extensionList = this.getExtensions();
32+
if (!Initialized) {
33+
Initialized = true;
34+
this.extensionList = this.getExtensions();
35+
} else {
36+
logger.error("Cannot create `ExtensionLoader` instance again!");
37+
}
3138
}
3239

3340
public List<Extension> getExtensions() throws IOException, ClassNotFoundException, InstantiationException, IllegalAccessException {
@@ -79,16 +86,38 @@ public List<Extension> getExtensions() throws IOException, ClassNotFoundExceptio
7986
}
8087

8188
public void loadExtensions() {
89+
if (this.extensionList.isEmpty()) {
90+
logger.warn("No Extensions!");
91+
}
92+
93+
logger.info("Pre-Load Extensions Mixin...");
94+
95+
this.extensionList.forEach(extension -> {
96+
if (extension.getMixinConfigs() != null) {
97+
Mixins.addConfigurations();
98+
return;
99+
}
100+
logger.warn(String.format("No Mixin found in Extension `%s`.", extension.getId()));
101+
});
102+
82103
logger.info("Loading Extensions...");
83104

84105
this.extensionList.forEach(Extension::onLoad);
85106
}
86107

87108
public void enableExtensions() {
109+
if (this.extensionList.isEmpty()) {
110+
logger.warn("No Extensions!");
111+
}
112+
88113
this.extensionList.forEach(Extension::onEnabled);
89114
}
90115

91116
public void disableExtensions() {
117+
if (this.extensionList.isEmpty()) {
118+
logger.warn("No Extensions!");
119+
}
120+
92121
logger.info("Disabling Extensions...");
93122

94123
this.extensionList.forEach(Extension::onDisabled);

src/main/java/xyz/mrcraftteammc/grasslauncher/main/Main.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,15 @@
11
package xyz.mrcraftteammc.grasslauncher.main;
22

3+
import com.llamalad7.mixinextras.MixinExtrasBootstrap;
4+
import org.spongepowered.asm.launch.MixinBootstrap;
35
import xyz.mrcraftteammc.grasslauncher.common.GrassLauncher;
46
import xyz.mrcraftteammc.grasslauncher.extension.ExtensionLoader;
57

68
public class Main {
79
public static void main(String[] args) {
10+
MixinBootstrap.init();
11+
MixinExtrasBootstrap.init();
12+
813
ExtensionLoader loader;
914
try {
1015
loader = new ExtensionLoader();

0 commit comments

Comments
 (0)