diff --git a/.github/workflows/dev.yml b/.github/workflows/dev.yml index 4a14756..3bde34a 100644 --- a/.github/workflows/dev.yml +++ b/.github/workflows/dev.yml @@ -32,6 +32,13 @@ jobs: run: chmod +x gradlew - name: Build with Gradle run: ./gradlew clean build --no-daemon + # Fabric 1.21.8 + - name: Upload Artifact (Fabric 1.21.8) + uses: actions/upload-artifact@v4 + with: + name: 'ZMusic Fabric 1.21.8' + path: | + zmusic-fabric/zmusic-fabric-1.21.8/build/libs/**.jar # Fabric 1.21 - name: Upload Artifact (Fabric 1.21) uses: actions/upload-artifact@v4 diff --git a/build.gradle b/build.gradle index fe96186..3c53943 100644 --- a/build.gradle +++ b/build.gradle @@ -1,6 +1,6 @@ //https://github.com/FabricMC/fabric-loom/issues/1036 plugins { - id("fabric-loom") version "1.6-SNAPSHOT" apply false + id("fabric-loom") version "1.11-SNAPSHOT" apply false } def gitCommitHash = { diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 20db9ad..3c44eb1 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.7-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.14-bin.zip networkTimeout=10000 zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists diff --git a/settings.gradle b/settings.gradle index 1fb87e3..c84a4fb 100644 --- a/settings.gradle +++ b/settings.gradle @@ -18,6 +18,7 @@ rootProject.name = "ZMusic-Mod" include("zmusic-core") include( "zmusic-fabric", + "zmusic-fabric:zmusic-fabric-1.21.8", "zmusic-fabric:zmusic-fabric-1.21", "zmusic-fabric:zmusic-fabric-1.20.5", "zmusic-fabric:zmusic-fabric-1.20", diff --git a/zmusic-fabric/zmusic-fabric-1.14.4/build.gradle b/zmusic-fabric/zmusic-fabric-1.14.4/build.gradle index 31a8e54..ed96c64 100644 --- a/zmusic-fabric/zmusic-fabric-1.14.4/build.gradle +++ b/zmusic-fabric/zmusic-fabric-1.14.4/build.gradle @@ -1,5 +1,5 @@ plugins { - id("fabric-loom") version "1.6-SNAPSHOT" + id("fabric-loom") version "1.11-SNAPSHOT" } java { diff --git a/zmusic-fabric/zmusic-fabric-1.15.2/build.gradle b/zmusic-fabric/zmusic-fabric-1.15.2/build.gradle index 6273e21..50b4f21 100644 --- a/zmusic-fabric/zmusic-fabric-1.15.2/build.gradle +++ b/zmusic-fabric/zmusic-fabric-1.15.2/build.gradle @@ -1,5 +1,5 @@ plugins { - id("fabric-loom") version "1.6-SNAPSHOT" + id("fabric-loom") version "1.11-SNAPSHOT" } java { diff --git a/zmusic-fabric/zmusic-fabric-1.16.5/build.gradle b/zmusic-fabric/zmusic-fabric-1.16.5/build.gradle index f525a16..32e0edb 100644 --- a/zmusic-fabric/zmusic-fabric-1.16.5/build.gradle +++ b/zmusic-fabric/zmusic-fabric-1.16.5/build.gradle @@ -1,5 +1,5 @@ plugins { - id("fabric-loom") version "1.6-SNAPSHOT" + id("fabric-loom") version "1.11-SNAPSHOT" } java { diff --git a/zmusic-fabric/zmusic-fabric-1.17.1/build.gradle b/zmusic-fabric/zmusic-fabric-1.17.1/build.gradle index e5b337e..fd47291 100644 --- a/zmusic-fabric/zmusic-fabric-1.17.1/build.gradle +++ b/zmusic-fabric/zmusic-fabric-1.17.1/build.gradle @@ -1,5 +1,5 @@ plugins { - id("fabric-loom") version "1.6-SNAPSHOT" + id("fabric-loom") version "1.11-SNAPSHOT" } java { diff --git a/zmusic-fabric/zmusic-fabric-1.18.2/build.gradle b/zmusic-fabric/zmusic-fabric-1.18.2/build.gradle index 0c00899..a238a8b 100644 --- a/zmusic-fabric/zmusic-fabric-1.18.2/build.gradle +++ b/zmusic-fabric/zmusic-fabric-1.18.2/build.gradle @@ -1,5 +1,5 @@ plugins { - id("fabric-loom") version "1.6-SNAPSHOT" + id("fabric-loom") version "1.11-SNAPSHOT" } java { diff --git a/zmusic-fabric/zmusic-fabric-1.19.2/build.gradle b/zmusic-fabric/zmusic-fabric-1.19.2/build.gradle index 5a1dfad..20e1e61 100644 --- a/zmusic-fabric/zmusic-fabric-1.19.2/build.gradle +++ b/zmusic-fabric/zmusic-fabric-1.19.2/build.gradle @@ -1,5 +1,5 @@ plugins { - id("fabric-loom") version "1.6-SNAPSHOT" + id("fabric-loom") version "1.11-SNAPSHOT" } java { diff --git a/zmusic-fabric/zmusic-fabric-1.19.3/build.gradle b/zmusic-fabric/zmusic-fabric-1.19.3/build.gradle index d80fa3d..0f9511b 100644 --- a/zmusic-fabric/zmusic-fabric-1.19.3/build.gradle +++ b/zmusic-fabric/zmusic-fabric-1.19.3/build.gradle @@ -1,5 +1,5 @@ plugins { - id("fabric-loom") version "1.6-SNAPSHOT" + id("fabric-loom") version "1.11-SNAPSHOT" } java { diff --git a/zmusic-fabric/zmusic-fabric-1.19.4/build.gradle b/zmusic-fabric/zmusic-fabric-1.19.4/build.gradle index 8c2ef62..f3adb7c 100644 --- a/zmusic-fabric/zmusic-fabric-1.19.4/build.gradle +++ b/zmusic-fabric/zmusic-fabric-1.19.4/build.gradle @@ -1,5 +1,5 @@ plugins { - id("fabric-loom") version "1.6-SNAPSHOT" + id("fabric-loom") version "1.11-SNAPSHOT" } java { diff --git a/zmusic-fabric/zmusic-fabric-1.20.5/build.gradle b/zmusic-fabric/zmusic-fabric-1.20.5/build.gradle index 53e2290..4e08f82 100644 --- a/zmusic-fabric/zmusic-fabric-1.20.5/build.gradle +++ b/zmusic-fabric/zmusic-fabric-1.20.5/build.gradle @@ -1,5 +1,5 @@ plugins { - id("fabric-loom") version "1.6-SNAPSHOT" + id("fabric-loom") version "1.11-SNAPSHOT" } java { diff --git a/zmusic-fabric/zmusic-fabric-1.20/build.gradle b/zmusic-fabric/zmusic-fabric-1.20/build.gradle index 64d23be..7f1f1c2 100644 --- a/zmusic-fabric/zmusic-fabric-1.20/build.gradle +++ b/zmusic-fabric/zmusic-fabric-1.20/build.gradle @@ -1,5 +1,5 @@ plugins { - id("fabric-loom") version "1.6-SNAPSHOT" + id("fabric-loom") version "1.11-SNAPSHOT" } java { diff --git a/zmusic-fabric/zmusic-fabric-1.21.8/build.gradle b/zmusic-fabric/zmusic-fabric-1.21.8/build.gradle new file mode 100644 index 0000000..29ea39a --- /dev/null +++ b/zmusic-fabric/zmusic-fabric-1.21.8/build.gradle @@ -0,0 +1,21 @@ +plugins { + id("fabric-loom") version "1.11-SNAPSHOT" +} + +java { + sourceCompatibility = JavaVersion.VERSION_21 + targetCompatibility = JavaVersion.VERSION_21 +} + +dependencies { + minecraft("com.mojang:minecraft:1.21.8") + mappings("net.fabricmc:yarn:1.21.8+build.1") + modImplementation("net.fabricmc:fabric-loader:0.16.14") + modImplementation("net.fabricmc.fabric-api:fabric-api:0.129.0+1.21.8") + + implementation(project(":zmusic-core")) +} + +jar { + dependsOn(":zmusic-core:jar") +} \ No newline at end of file diff --git a/zmusic-fabric/zmusic-fabric-1.21.8/src/main/java/me/zhenxin/zmusic/ZMusicMod.java b/zmusic-fabric/zmusic-fabric-1.21.8/src/main/java/me/zhenxin/zmusic/ZMusicMod.java new file mode 100644 index 0000000..06ea909 --- /dev/null +++ b/zmusic-fabric/zmusic-fabric-1.21.8/src/main/java/me/zhenxin/zmusic/ZMusicMod.java @@ -0,0 +1,56 @@ +package me.zhenxin.zmusic; + +import me.zhenxin.zmusic.event.ClientEvent; +import me.zhenxin.zmusic.manager.SoundManagerImpl; +import net.fabricmc.api.ModInitializer; +import net.fabricmc.fabric.api.client.networking.v1.ClientPlayConnectionEvents; +import net.fabricmc.fabric.api.client.networking.v1.ClientPlayNetworking; +import net.fabricmc.fabric.api.networking.v1.PayloadTypeRegistry; +import net.minecraft.network.PacketByteBuf; +import net.minecraft.network.codec.PacketCodec; +import net.minecraft.network.packet.CustomPayload; +import net.minecraft.util.Identifier; + +import java.nio.charset.StandardCharsets; + +/** + * Mod 主入口 + * + * @author 真心 + * @email qgzhenxin@qq.com + * @since 2023/1/28 13:01 + */ +@SuppressWarnings("AlibabaClassNamingShouldBeCamel") +public class ZMusicMod implements ModInitializer { + + @Override + public void onInitialize() { + ZMusic.setSoundManager(new SoundManagerImpl()); + + record MusicPayload(String str) implements CustomPayload { + public static final Id ID = new CustomPayload.Id<>(Identifier.of("zmusic", "channel")); + public static final PacketCodec CODEC = PacketCodec.of((value, buf) -> { + }, buf -> { + byte[] buffer = new byte[buf.readableBytes()]; + buf.readBytes(buffer); + buffer[0] = 0; + String message = new String(buffer, StandardCharsets.UTF_8).substring(1); + return new MusicPayload(message); + }); + + + @Override + public Id getId() { + return ID; + } + } + + PayloadTypeRegistry.playS2C().register(MusicPayload.ID, MusicPayload.CODEC); + ClientPlayNetworking.registerGlobalReceiver(MusicPayload.ID, (payload, context) -> { + ClientEvent.onPacket(payload.str); + }); + + ClientPlayConnectionEvents.DISCONNECT.register((handler, client) -> ClientEvent.onDisconnect()); + ZMusic.onEnable(); + } +} \ No newline at end of file diff --git a/zmusic-fabric/zmusic-fabric-1.21.8/src/main/java/me/zhenxin/zmusic/manager/SoundManagerImpl.java b/zmusic-fabric/zmusic-fabric-1.21.8/src/main/java/me/zhenxin/zmusic/manager/SoundManagerImpl.java new file mode 100644 index 0000000..bc71b2b --- /dev/null +++ b/zmusic-fabric/zmusic-fabric-1.21.8/src/main/java/me/zhenxin/zmusic/manager/SoundManagerImpl.java @@ -0,0 +1,25 @@ +package me.zhenxin.zmusic.manager; + +import net.minecraft.client.MinecraftClient; +import net.minecraft.sound.SoundCategory; + +/** + * 音频管理器实现 + * + * @author 真心 + * @email qgzhenxin@qq.com + * @since 2023/1/29 23:29 + */ +public class SoundManagerImpl implements SoundManager { + + @Override + public float volume() { + return MinecraftClient.getInstance().options.getSoundVolume(SoundCategory.RECORDS); + } + + @Override + public void stop() { + MinecraftClient.getInstance().getSoundManager().stopSounds(null, SoundCategory.MUSIC); + MinecraftClient.getInstance().getSoundManager().stopSounds(null, SoundCategory.RECORDS); + } +} \ No newline at end of file diff --git a/zmusic-fabric/zmusic-fabric-1.21.8/src/main/java/me/zhenxin/zmusic/mixin/QuitServer.java b/zmusic-fabric/zmusic-fabric-1.21.8/src/main/java/me/zhenxin/zmusic/mixin/QuitServer.java new file mode 100644 index 0000000..44f6fad --- /dev/null +++ b/zmusic-fabric/zmusic-fabric-1.21.8/src/main/java/me/zhenxin/zmusic/mixin/QuitServer.java @@ -0,0 +1,16 @@ +package me.zhenxin.zmusic.mixin; + +import me.zhenxin.zmusic.event.ClientEvent; +import net.minecraft.server.network.ServerQueryNetworkHandler; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; + +@Mixin(ServerQueryNetworkHandler.class) +public class QuitServer { + @Inject(method = "onDisconnected", at = @At("HEAD")) + public void onDisconnected(CallbackInfo info) { + ClientEvent.onDisconnect(); + } +} \ No newline at end of file diff --git a/zmusic-fabric/zmusic-fabric-1.21.8/src/main/java/me/zhenxin/zmusic/mixin/SoundEvent.java b/zmusic-fabric/zmusic-fabric-1.21.8/src/main/java/me/zhenxin/zmusic/mixin/SoundEvent.java new file mode 100644 index 0000000..65b0f43 --- /dev/null +++ b/zmusic-fabric/zmusic-fabric-1.21.8/src/main/java/me/zhenxin/zmusic/mixin/SoundEvent.java @@ -0,0 +1,29 @@ +package me.zhenxin.zmusic.mixin; + +import me.zhenxin.zmusic.ZMusic; +import net.minecraft.client.sound.SoundInstance; +import net.minecraft.client.sound.SoundSystem; +import net.minecraft.sound.SoundCategory; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; + +@Mixin(SoundSystem.class) +public class SoundEvent { + @Inject(method = "play*", at = @At("HEAD"), cancellable = true) + public void play(SoundInstance soundInstance, CallbackInfoReturnable info) { + if (ZMusic.getPlayer().isPlay()) { + SoundCategory data = soundInstance.getCategory(); + if (data == SoundCategory.RECORDS || data == SoundCategory.MUSIC) { + info.setReturnValue(SoundSystem.PlayResult.NOT_STARTED); + } + } + } + + @Inject(method = "reloadSounds", at = @At("RETURN")) + public void reload(CallbackInfo info) { + ZMusic.getPlayer().setReload(); + } +} \ No newline at end of file diff --git a/zmusic-fabric/zmusic-fabric-1.21.8/src/main/java/me/zhenxin/zmusic/mixin/Tick.java b/zmusic-fabric/zmusic-fabric-1.21.8/src/main/java/me/zhenxin/zmusic/mixin/Tick.java new file mode 100644 index 0000000..b23da7c --- /dev/null +++ b/zmusic-fabric/zmusic-fabric-1.21.8/src/main/java/me/zhenxin/zmusic/mixin/Tick.java @@ -0,0 +1,17 @@ +package me.zhenxin.zmusic.mixin; + +import me.zhenxin.zmusic.ZMusic; +import net.minecraft.client.MinecraftClient; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; + +@Mixin(MinecraftClient.class) +public class Tick { + + @Inject(method = "tick", at = @At("TAIL")) + public void tick(CallbackInfo info) { + ZMusic.getPlayer().tick(); + } +} diff --git a/zmusic-fabric/zmusic-fabric-1.21.8/src/main/resources/fabric.mod.json b/zmusic-fabric/zmusic-fabric-1.21.8/src/main/resources/fabric.mod.json new file mode 100644 index 0000000..9ea8b9d --- /dev/null +++ b/zmusic-fabric/zmusic-fabric-1.21.8/src/main/resources/fabric.mod.json @@ -0,0 +1,32 @@ +{ + "schemaVersion": 1, + "id": "zmusic", + "version": "${version}", + "name": "ZMusic Mod", + "description": "Powerful Music System", + "authors": [ + "ZhenXin" + ], + "contact": { + "homepage": "https://m.zplu.cc", + "sources": "https://github.com/RealHeart/ZMusic-Mod", + "issues": "https://github.com/RealHeart/ZMusic-Mod/issues", + "discord": "https://discord.gg/twQgJNufYn" + }, + "license": "GPL-3.0", + "environment": "client", + "entrypoints": { + "main": [ + "me.zhenxin.zmusic.ZMusicMod" + ] + }, + "mixins": [ + "zmusic.mixins.json" + ], + "depends": { + "fabricloader": ">=0.16.14", + "fabric-api": "*", + "minecraft": ">=1.21.7", + "java": ">=21" + } +} \ No newline at end of file diff --git a/zmusic-fabric/zmusic-fabric-1.21.8/src/main/resources/zmusic.mixins.json b/zmusic-fabric/zmusic-fabric-1.21.8/src/main/resources/zmusic.mixins.json new file mode 100644 index 0000000..311a80d --- /dev/null +++ b/zmusic-fabric/zmusic-fabric-1.21.8/src/main/resources/zmusic.mixins.json @@ -0,0 +1,13 @@ +{ + "required": true, + "package": "me.zhenxin.zmusic.mixin", + "compatibilityLevel": "JAVA_21", + "injectors": { + "defaultRequire": 1 + }, + "client": [ + "QuitServer", + "SoundEvent", + "Tick" + ] +} \ No newline at end of file diff --git a/zmusic-fabric/zmusic-fabric-1.21/build.gradle b/zmusic-fabric/zmusic-fabric-1.21/build.gradle index 669e13f..e474a68 100644 --- a/zmusic-fabric/zmusic-fabric-1.21/build.gradle +++ b/zmusic-fabric/zmusic-fabric-1.21/build.gradle @@ -1,5 +1,5 @@ plugins { - id("fabric-loom") version "1.6-SNAPSHOT" + id("fabric-loom") version "1.11-SNAPSHOT" } java {