mirror of
https://github.com/Coloryr/AllMusic.git
synced 2026-11-08 18:54:44 +00:00
bug
This commit is contained in:
1 parent
1b91c623a1
commit
4c83a39bff
6 files changed
+69
-31
No files matched your search
+10
-10
@@ -3,14 +3,14 @@ package com.coloryr.allmusic.client;
|
||||
import com.coloryr.allmusic.client.core.AllMusicCore;
|
||||
import com.coloryr.allmusic.client.core.CommandMusicClient;
|
||||
import com.mojang.brigadier.arguments.IntegerArgumentType;
|
||||
import net.fabricmc.fabric.api.client.command.v2.ClientCommandManager;
|
||||
import net.fabricmc.fabric.api.client.command.v2.ClientCommandRegistrationCallback;
|
||||
import net.fabricmc.fabric.api.client.command.v2.ClientCommands;
|
||||
|
||||
/**
|
||||
* Fabric(1.19.3+)的 /music_client 指令壳
|
||||
* Fabric(1.21.11+ / 26.x)的 /music_client 指令壳
|
||||
* <p>
|
||||
* 只负责注册指令(包括 Tab 补全用的子指令节点),具体逻辑都在通用的 {@link CommandMusicClient} 里。
|
||||
* 注意这里必须用 ClientCommandManager 建节点,客户端指令的 source 是 FabricClientCommandSource
|
||||
* 新版本 fabric-api 用 {@link ClientCommands} 取代了 ClientCommandManager。
|
||||
* 只负责注册指令(包括 Tab 补全用的子指令节点),具体逻辑都在通用的 {@link CommandMusicClient} 里
|
||||
*/
|
||||
public final class CommandMusicClientFabric {
|
||||
private CommandMusicClientFabric() {
|
||||
@@ -18,17 +18,17 @@ public final class CommandMusicClientFabric {
|
||||
|
||||
public static void register() {
|
||||
ClientCommandRegistrationCallback.EVENT.register((dispatcher, registryAccess) ->
|
||||
dispatcher.register(ClientCommandManager.literal(CommandMusicClient.NAME)
|
||||
dispatcher.register(ClientCommands.literal(CommandMusicClient.NAME)
|
||||
.executes(context -> CommandMusicClient.run(new String[0]))
|
||||
.then(ClientCommandManager.literal(CommandMusicClient.ARG_HELP)
|
||||
.then(ClientCommands.literal(CommandMusicClient.ARG_HELP)
|
||||
.executes(context -> CommandMusicClient.run(new String[]{CommandMusicClient.ARG_HELP})))
|
||||
.then(ClientCommandManager.literal(CommandMusicClient.ARG_INFO)
|
||||
.then(ClientCommands.literal(CommandMusicClient.ARG_INFO)
|
||||
.executes(context -> CommandMusicClient.run(new String[]{CommandMusicClient.ARG_INFO})))
|
||||
.then(ClientCommandManager.literal(CommandMusicClient.ARG_TEST)
|
||||
.then(ClientCommands.literal(CommandMusicClient.ARG_TEST)
|
||||
.executes(context -> CommandMusicClient.run(new String[]{CommandMusicClient.ARG_TEST})))
|
||||
.then(ClientCommandManager.literal(CommandMusicClient.ARG_IMAGE_SIZE)
|
||||
.then(ClientCommands.literal(CommandMusicClient.ARG_IMAGE_SIZE)
|
||||
.executes(context -> CommandMusicClient.run(new String[]{CommandMusicClient.ARG_IMAGE_SIZE}))
|
||||
.then(ClientCommandManager.argument("size", IntegerArgumentType.integer(AllMusicCore.MIN_PIC_SIZE, AllMusicCore.MAX_PIC_SIZE))
|
||||
.then(ClientCommands.argument("size", IntegerArgumentType.integer(AllMusicCore.MIN_PIC_SIZE, AllMusicCore.MAX_PIC_SIZE))
|
||||
.executes(context -> CommandMusicClient.run(new String[]{
|
||||
CommandMusicClient.ARG_IMAGE_SIZE,
|
||||
Integer.toString(IntegerArgumentType.getInteger(context, "size"))}))))));
|
||||
|
||||
+10
-10
@@ -3,14 +3,14 @@ package com.coloryr.allmusic.client;
|
||||
import com.coloryr.allmusic.client.core.AllMusicCore;
|
||||
import com.coloryr.allmusic.client.core.CommandMusicClient;
|
||||
import com.mojang.brigadier.arguments.IntegerArgumentType;
|
||||
import net.fabricmc.fabric.api.client.command.v2.ClientCommandManager;
|
||||
import net.fabricmc.fabric.api.client.command.v2.ClientCommandRegistrationCallback;
|
||||
import net.fabricmc.fabric.api.client.command.v2.ClientCommands;
|
||||
|
||||
/**
|
||||
* Fabric(1.19.3+)的 /music_client 指令壳
|
||||
* Fabric(1.21.11+ / 26.x)的 /music_client 指令壳
|
||||
* <p>
|
||||
* 只负责注册指令(包括 Tab 补全用的子指令节点),具体逻辑都在通用的 {@link CommandMusicClient} 里。
|
||||
* 注意这里必须用 ClientCommandManager 建节点,客户端指令的 source 是 FabricClientCommandSource
|
||||
* 新版本 fabric-api 用 {@link ClientCommands} 取代了 ClientCommandManager。
|
||||
* 只负责注册指令(包括 Tab 补全用的子指令节点),具体逻辑都在通用的 {@link CommandMusicClient} 里
|
||||
*/
|
||||
public final class CommandMusicClientFabric {
|
||||
private CommandMusicClientFabric() {
|
||||
@@ -18,17 +18,17 @@ public final class CommandMusicClientFabric {
|
||||
|
||||
public static void register() {
|
||||
ClientCommandRegistrationCallback.EVENT.register((dispatcher, registryAccess) ->
|
||||
dispatcher.register(ClientCommandManager.literal(CommandMusicClient.NAME)
|
||||
dispatcher.register(ClientCommands.literal(CommandMusicClient.NAME)
|
||||
.executes(context -> CommandMusicClient.run(new String[0]))
|
||||
.then(ClientCommandManager.literal(CommandMusicClient.ARG_HELP)
|
||||
.then(ClientCommands.literal(CommandMusicClient.ARG_HELP)
|
||||
.executes(context -> CommandMusicClient.run(new String[]{CommandMusicClient.ARG_HELP})))
|
||||
.then(ClientCommandManager.literal(CommandMusicClient.ARG_INFO)
|
||||
.then(ClientCommands.literal(CommandMusicClient.ARG_INFO)
|
||||
.executes(context -> CommandMusicClient.run(new String[]{CommandMusicClient.ARG_INFO})))
|
||||
.then(ClientCommandManager.literal(CommandMusicClient.ARG_TEST)
|
||||
.then(ClientCommands.literal(CommandMusicClient.ARG_TEST)
|
||||
.executes(context -> CommandMusicClient.run(new String[]{CommandMusicClient.ARG_TEST})))
|
||||
.then(ClientCommandManager.literal(CommandMusicClient.ARG_IMAGE_SIZE)
|
||||
.then(ClientCommands.literal(CommandMusicClient.ARG_IMAGE_SIZE)
|
||||
.executes(context -> CommandMusicClient.run(new String[]{CommandMusicClient.ARG_IMAGE_SIZE}))
|
||||
.then(ClientCommandManager.argument("size", IntegerArgumentType.integer(AllMusicCore.MIN_PIC_SIZE, AllMusicCore.MAX_PIC_SIZE))
|
||||
.then(ClientCommands.argument("size", IntegerArgumentType.integer(AllMusicCore.MIN_PIC_SIZE, AllMusicCore.MAX_PIC_SIZE))
|
||||
.executes(context -> CommandMusicClient.run(new String[]{
|
||||
CommandMusicClient.ARG_IMAGE_SIZE,
|
||||
Integer.toString(IntegerArgumentType.getInteger(context, "size"))}))))));
|
||||
|
||||
+10
-10
@@ -3,14 +3,14 @@ package com.coloryr.allmusic.client;
|
||||
import com.coloryr.allmusic.client.core.AllMusicCore;
|
||||
import com.coloryr.allmusic.client.core.CommandMusicClient;
|
||||
import com.mojang.brigadier.arguments.IntegerArgumentType;
|
||||
import net.fabricmc.fabric.api.client.command.v2.ClientCommandManager;
|
||||
import net.fabricmc.fabric.api.client.command.v2.ClientCommandRegistrationCallback;
|
||||
import net.fabricmc.fabric.api.client.command.v2.ClientCommands;
|
||||
|
||||
/**
|
||||
* Fabric(1.19.3+)的 /music_client 指令壳
|
||||
* Fabric(1.21.11+ / 26.x)的 /music_client 指令壳
|
||||
* <p>
|
||||
* 只负责注册指令(包括 Tab 补全用的子指令节点),具体逻辑都在通用的 {@link CommandMusicClient} 里。
|
||||
* 注意这里必须用 ClientCommandManager 建节点,客户端指令的 source 是 FabricClientCommandSource
|
||||
* 新版本 fabric-api 用 {@link ClientCommands} 取代了 ClientCommandManager。
|
||||
* 只负责注册指令(包括 Tab 补全用的子指令节点),具体逻辑都在通用的 {@link CommandMusicClient} 里
|
||||
*/
|
||||
public final class CommandMusicClientFabric {
|
||||
private CommandMusicClientFabric() {
|
||||
@@ -18,17 +18,17 @@ public final class CommandMusicClientFabric {
|
||||
|
||||
public static void register() {
|
||||
ClientCommandRegistrationCallback.EVENT.register((dispatcher, registryAccess) ->
|
||||
dispatcher.register(ClientCommandManager.literal(CommandMusicClient.NAME)
|
||||
dispatcher.register(ClientCommands.literal(CommandMusicClient.NAME)
|
||||
.executes(context -> CommandMusicClient.run(new String[0]))
|
||||
.then(ClientCommandManager.literal(CommandMusicClient.ARG_HELP)
|
||||
.then(ClientCommands.literal(CommandMusicClient.ARG_HELP)
|
||||
.executes(context -> CommandMusicClient.run(new String[]{CommandMusicClient.ARG_HELP})))
|
||||
.then(ClientCommandManager.literal(CommandMusicClient.ARG_INFO)
|
||||
.then(ClientCommands.literal(CommandMusicClient.ARG_INFO)
|
||||
.executes(context -> CommandMusicClient.run(new String[]{CommandMusicClient.ARG_INFO})))
|
||||
.then(ClientCommandManager.literal(CommandMusicClient.ARG_TEST)
|
||||
.then(ClientCommands.literal(CommandMusicClient.ARG_TEST)
|
||||
.executes(context -> CommandMusicClient.run(new String[]{CommandMusicClient.ARG_TEST})))
|
||||
.then(ClientCommandManager.literal(CommandMusicClient.ARG_IMAGE_SIZE)
|
||||
.then(ClientCommands.literal(CommandMusicClient.ARG_IMAGE_SIZE)
|
||||
.executes(context -> CommandMusicClient.run(new String[]{CommandMusicClient.ARG_IMAGE_SIZE}))
|
||||
.then(ClientCommandManager.argument("size", IntegerArgumentType.integer(AllMusicCore.MIN_PIC_SIZE, AllMusicCore.MAX_PIC_SIZE))
|
||||
.then(ClientCommands.argument("size", IntegerArgumentType.integer(AllMusicCore.MIN_PIC_SIZE, AllMusicCore.MAX_PIC_SIZE))
|
||||
.executes(context -> CommandMusicClient.run(new String[]{
|
||||
CommandMusicClient.ARG_IMAGE_SIZE,
|
||||
Integer.toString(IntegerArgumentType.getInteger(context, "size"))}))))));
|
||||
|
||||
@@ -27,6 +27,12 @@ public class PicRender extends PictureFrameBuffer {
|
||||
rotateTexture = new DynamicTexture(size, size, false);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void dispose() {
|
||||
sourceTexture.releaseId();
|
||||
rotateTexture.releaseId();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void update(byte[] source, byte[] rotate) {
|
||||
try {
|
||||
|
||||
@@ -134,7 +134,8 @@ public class TexRender extends TextureRender {
|
||||
float y1 = h1;
|
||||
float z = 0;
|
||||
float u0 = 0;
|
||||
float u1 = width;
|
||||
// 整张贴图铺满整个四边形,U/V 必须是 0~1,不能写成 width,否则底图会被横向平铺/拉伸
|
||||
float u1 = 1;
|
||||
float v0 = 0;
|
||||
float v1 = 1;
|
||||
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
package com.coloryr.allmusic.client.core;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
import java.util.Locale;
|
||||
|
||||
@@ -108,6 +109,36 @@ public class CommandMusicClient {
|
||||
return 1;
|
||||
}
|
||||
|
||||
/**
|
||||
* 处理一条聊天栏输入
|
||||
* <p>
|
||||
* 没有客户端指令 API 的版本(比如 1.16.5 Forge)在拦截「发送聊天/指令」时调用这里,
|
||||
* 命中 {@code /music_client} 就本地处理并返回 true,调用方把这条消息吞掉即可
|
||||
*
|
||||
* @param message 原始输入,例如 {@code /music_client imagesize 128}
|
||||
* @return 是否已处理(true 表示不要发给服务端)
|
||||
*/
|
||||
public static boolean handleChat(String message) {
|
||||
if (message == null) {
|
||||
return false;
|
||||
}
|
||||
|
||||
String text = message.trim();
|
||||
if (!text.startsWith("/")) {
|
||||
return false;
|
||||
}
|
||||
|
||||
String[] parts = text.substring(1).trim().split("\\s+");
|
||||
if (parts.length == 0 || parts[0].isEmpty() || !NAME.equalsIgnoreCase(parts[0])) {
|
||||
return false;
|
||||
}
|
||||
|
||||
String[] args = parts.length > 1 ? Arrays.copyOfRange(parts, 1, parts.length) : new String[0];
|
||||
run(args);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* 输出行的样式,方便各版本上色
|
||||
*
|
||||
|
||||
Reference in new issue
Block a user