Skip to content

Commit d2d701b

Browse files
committed
fix(#63, #64): 服务端可能尝试加载客户端的类
1 parent 1a9190e commit d2d701b

23 files changed

+81
-66
lines changed

src/main/java/top/gregtao/concerto/ConcertoClient.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
2323
import top.gregtao.concerto.player.MusicPlayer;
2424
import top.gregtao.concerto.util.ConcertoHotkeys;
2525
import top.gregtao.concerto.util.ConcertoOptions;
26+
import top.gregtao.concerto.util.ConcertoRunner;
2627

2728
import java.util.List;
2829

@@ -70,7 +71,7 @@ public Identifier getFabricId() {
7071

7172
@Override
7273
public void reload(ResourceManager manager) {
73-
MusicPlayer.run(() -> {
74+
ConcertoRunner.run(() -> {
7475
ClientConfig.INSTANCE.readOptions();
7576
ConcertoOptions.INSTANCE.readOptions();
7677
MusicPlayer.INSTANCE.reloadConfig(() -> LOGGER.info("Loaded general music playlist"));

src/main/java/top/gregtao/concerto/command/ConcertoServerCommand.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@
1616
import top.gregtao.concerto.network.MusicDataPacket;
1717
import top.gregtao.concerto.network.room.ServerMusicAgent;
1818
import top.gregtao.concerto.network.ServerMusicNetworkHandler;
19-
import top.gregtao.concerto.player.MusicPlayer;
19+
import top.gregtao.concerto.util.ConcertoRunner;
2020
import top.gregtao.concerto.util.TextUtil;
2121

2222
import java.util.Iterator;
@@ -49,7 +49,7 @@ public static void register(CommandDispatcher<ServerCommandSource> dispatcher, C
4949
).then(
5050
CommandManager.literal("list").then(
5151
CommandManager.argument("page", IntegerArgumentType.integer(1)).executes(context -> {
52-
MusicPlayer.run(() -> {
52+
ConcertoRunner.run(() -> {
5353
int page = IntegerArgumentType.getInteger(context, "page");
5454
Map<UUID, MusicDataPacket> map = ServerMusicNetworkHandler.WAIT_AUDITION;
5555
Iterator<Map.Entry<UUID, MusicDataPacket>> iterator = map.entrySet().iterator();

src/main/java/top/gregtao/concerto/command/MusicCommand.java

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@
2929
import top.gregtao.concerto.music.meta.music.list.PlaylistMetaData;
3030
import top.gregtao.concerto.player.MusicPlayer;
3131
import top.gregtao.concerto.player.MusicPlayerHandler;
32+
import top.gregtao.concerto.util.ConcertoRunner;
3233
import top.gregtao.concerto.util.Pair;
3334
import top.gregtao.concerto.util.TextUtil;
3435

@@ -150,7 +151,7 @@ public static LiteralArgumentBuilder<FabricClientCommandSource> registerPlayerCo
150151
ClientCommandManager.literal("list").then(
151152
ClientCommandManager.argument("page", IntegerArgumentType.integer(1)).executes(context -> {
152153
ClientPlayerEntity clientPlayer = context.getSource().getPlayer();
153-
MusicPlayer.run(() -> {
154+
ConcertoRunner.run(() -> {
154155
int page = IntegerArgumentType.getInteger(context, "page");
155156
List<Music> list = MusicPlayerHandler.INSTANCE.getMusicList();
156157
page = Math.min(page, (int) Math.ceil(list.size() / 10f));
@@ -173,7 +174,7 @@ public static LiteralArgumentBuilder<FabricClientCommandSource> registerPlayerCo
173174
if (MusicPlayerHandler.INSTANCE.currentMusic == null) {
174175
clientPlayer.sendMessage(Text.translatable("concerto.unknown"), false);
175176
} else if (MusicPlayerHandler.INSTANCE.currentMusic instanceof CacheableMusic music) {
176-
MusicPlayer.run(() -> {
177+
ConcertoRunner.run(() -> {
177178
try {
178179
MusicCacheManager.INSTANCE.addMusic(music);
179180
clientPlayer.sendMessage(Text.translatable("concerto.success"), false);
@@ -191,10 +192,10 @@ public static LiteralArgumentBuilder<FabricClientCommandSource> registerPlayerCo
191192
ClientPlayerEntity clientPlayer = context.getSource().getPlayer();
192193
Music music = MusicPlayerHandler.INSTANCE.getCurrentMusic();
193194
if (music instanceof Likeable likeable) {
194-
CompletableFuture.supplyAsync(likeable::likeIt, MusicPlayer.RUNNERS_POOL).thenAcceptAsync(success ->
195+
CompletableFuture.supplyAsync(likeable::likeIt, ConcertoRunner.RUNNERS_POOL).thenAcceptAsync(success ->
195196
clientPlayer.sendMessage(success ? Text.translatable("concerto.like",
196197
music.getMeta().title(), music.getMeta().getSource()) :
197-
Text.translatable("concerto.fail"), false), MusicPlayer.RUNNERS_POOL);
198+
Text.translatable("concerto.fail"), false), ConcertoRunner.RUNNERS_POOL);
198199
} else {
199200
clientPlayer.sendMessage(Text.translatable("concerto.error.unsupported_operation"), false);
200201
}
@@ -205,10 +206,10 @@ public static LiteralArgumentBuilder<FabricClientCommandSource> registerPlayerCo
205206
ClientPlayerEntity clientPlayer = context.getSource().getPlayer();
206207
Music music = MusicPlayerHandler.INSTANCE.getCurrentMusic();
207208
if (music instanceof Likeable likeable) {
208-
CompletableFuture.supplyAsync(likeable::dislikeIt, MusicPlayer.RUNNERS_POOL).thenAcceptAsync(success ->
209+
CompletableFuture.supplyAsync(likeable::dislikeIt, ConcertoRunner.RUNNERS_POOL).thenAcceptAsync(success ->
209210
clientPlayer.sendMessage(success ? Text.translatable("concerto.dislike",
210211
music.getMeta().title(), music.getMeta().getSource()) :
211-
Text.translatable("concerto.fail"), false), MusicPlayer.RUNNERS_POOL);
212+
Text.translatable("concerto.fail"), false), ConcertoRunner.RUNNERS_POOL);
212213
} else {
213214
clientPlayer.sendMessage(Text.translatable("concerto.error.unsupported_operation"), false);
214215
}

src/main/java/top/gregtao/concerto/command/ShareMusicCommand.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -14,8 +14,8 @@
1414
import top.gregtao.concerto.music.Music;
1515
import top.gregtao.concerto.network.ClientMusicNetworkHandler;
1616
import top.gregtao.concerto.network.MusicDataPacket;
17-
import top.gregtao.concerto.player.MusicPlayer;
1817
import top.gregtao.concerto.player.MusicPlayerHandler;
18+
import top.gregtao.concerto.util.ConcertoRunner;
1919
import top.gregtao.concerto.util.TextUtil;
2020

2121
import java.util.Iterator;
@@ -30,7 +30,7 @@ public static void register(CommandDispatcher<FabricClientCommandSource> dispatc
3030
ClientCommandManager.literal("to").then(
3131
ClientCommandManager.argument("target", ShareMusicTargetArgumentType.create()).executes(context -> {
3232
String target = ShareMusicTargetArgumentType.get(context, "target");
33-
MusicPlayer.run(() -> {
33+
ConcertoRunner.run(() -> {
3434
Music current = MusicPlayerHandler.INSTANCE.getCurrentMusic();
3535
if (current != null) {
3636
TextUtil.commandMessageClient(context, Text.translatable("concerto.share.sent"));
@@ -68,7 +68,7 @@ public static void register(CommandDispatcher<FabricClientCommandSource> dispatc
6868
).then(
6969
ClientCommandManager.literal("list").then(
7070
ClientCommandManager.argument("page", IntegerArgumentType.integer(1)).executes(context -> {
71-
MusicPlayer.run(() -> {
71+
ConcertoRunner.run(() -> {
7272
int page = IntegerArgumentType.getInteger(context, "page");
7373
Map<UUID, MusicDataPacket> map = ClientMusicNetworkHandler.WAIT_CONFIRMATION;
7474
Iterator<Map.Entry<UUID, MusicDataPacket>> iterator = map.entrySet().iterator();

src/main/java/top/gregtao/concerto/config/CacheManager.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
import top.gregtao.concerto.ConcertoClient;
44
import top.gregtao.concerto.ConcertoServer;
5-
import top.gregtao.concerto.player.MusicPlayer;
5+
import top.gregtao.concerto.util.ConcertoRunner;
66
import top.gregtao.concerto.util.Pair;
77

88
import java.io.File;
@@ -121,6 +121,6 @@ public void addFile(String filename, InputStream inputStream) throws IOException
121121
outputStream.write(inputStream.readAllBytes());
122122
}
123123
inputStream.close();
124-
if (this.getTotalSize() > this.maxSize) MusicPlayer.run(this::removeEarliest);
124+
if (this.getTotalSize() > this.maxSize) ConcertoRunner.run(this::removeEarliest);
125125
}
126126
}

src/main/java/top/gregtao/concerto/mixin/ChatHudMixin.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -16,8 +16,8 @@
1616
import top.gregtao.concerto.music.Music;
1717
import top.gregtao.concerto.network.ClientMusicNetworkHandler;
1818
import top.gregtao.concerto.network.MusicDataPacket;
19-
import top.gregtao.concerto.player.MusicPlayer;
2019
import top.gregtao.concerto.screen.InGameHudRenderer;
20+
import top.gregtao.concerto.util.ConcertoRunner;
2121
import top.gregtao.concerto.util.JsonUtil;
2222

2323
import java.util.Base64;
@@ -53,12 +53,12 @@ private static void handleMessage(Text text) {
5353

5454
@Inject(method = "addMessage(Lnet/minecraft/text/Text;)V", at = @At("HEAD"))
5555
public void addMessageInject1(Text message, CallbackInfo ci){
56-
MusicPlayer.run(() -> handleMessage(message));
56+
ConcertoRunner.run(() -> handleMessage(message));
5757
}
5858

5959
@Inject(method = "addMessage(Lnet/minecraft/text/Text;Lnet/minecraft/network/message/MessageSignatureData;Lnet/minecraft/client/gui/hud/MessageIndicator;)V ", at = @At("HEAD"))
6060
public void addMessageInject2(Text message, MessageSignatureData signature, MessageIndicator indicator, CallbackInfo ci){
61-
MusicPlayer.run(() -> handleMessage(message));
61+
ConcertoRunner.run(() -> handleMessage(message));
6262
}
6363

6464
@Inject(method = "render(Lnet/minecraft/client/gui/DrawContext;IIIZ)V", at = @At("HEAD"))

src/main/java/top/gregtao/concerto/mixin/GameMenuScreenMixin.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,12 +6,13 @@
66
import org.spongepowered.asm.mixin.injection.Inject;
77
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
88
import top.gregtao.concerto.player.MusicPlayer;
9+
import top.gregtao.concerto.util.ConcertoRunner;
910

1011
@Mixin(GameMenuScreen.class)
1112
public class GameMenuScreenMixin {
1213

1314
@Inject(at = @At("HEAD"), method = "disconnect()V")
1415
private void disconnectInject(CallbackInfo ci) {
15-
MusicPlayer.run(MusicPlayer.INSTANCE::pause);
16+
ConcertoRunner.run(MusicPlayer.INSTANCE::pause);
1617
}
1718
}

src/main/java/top/gregtao/concerto/network/ClientMusicNetworkHandler.java

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
import top.gregtao.concerto.player.MusicPlayerHandler;
2020
import top.gregtao.concerto.screen.MusicAuditionScreen;
2121
import top.gregtao.concerto.screen.PresetRadiosScreen;
22+
import top.gregtao.concerto.util.ConcertoRunner;
2223
import top.gregtao.concerto.util.JsonUtil;
2324
import top.gregtao.concerto.util.TextUtil;
2425

@@ -126,7 +127,7 @@ public static void addToWaitList(MinecraftClient client, MusicDataPacket packet,
126127
if (WAIT_CONFIRMATION.size() > ConcertoNetworking.WAIT_LIST_MAX_SIZE) {
127128
removeFirst();
128129
}
129-
MusicPlayer.run(() -> {
130+
ConcertoRunner.run(() -> {
130131
if (ClientConfig.INSTANCE.options.confirmAfterReceived) {
131132
self.sendMessage(TextUtil.PAGE_SPLIT, false);
132133
self.sendMessage(ShareMusicCommand.chatMessageBuilder(uuid, packet.from, packet.music.getMeta().title()), false);
@@ -197,7 +198,7 @@ public static void auditionDataSyncReceiver(ConcertoPayload payload, ClientPlayN
197198
}
198199

199200
public static void presetRadiosReceiver(ConcertoPayload payload, ClientPlayNetworking.Context context) {
200-
MusicPlayer.run(() -> ConcertoClient.presetRadios = PresetPlaylistsConfig.fromJson(payload.string).stream().filter(playlist ->
201+
ConcertoRunner.run(() -> ConcertoClient.presetRadios = PresetPlaylistsConfig.fromJson(payload.string).stream().filter(playlist ->
201202
playlist.getList().stream().allMatch(MusicDataPacket::isMusicSafe)).toList(), () -> {
202203
// .peek(playlist -> MusicPlayerHandler.loadInThreadPool(playlist.getList())).toList(), () -> {
203204
MinecraftClient client = context.client();
@@ -244,7 +245,7 @@ public static boolean musicAgentAddMusic(Music music) {
244245

245246
public static void musicAgentMusicReceiver(ConcertoPayload payload, ClientPlayNetworking.Context context) {
246247
if (ConcertoClient.clientState != ConcertoClient.ClientState.MUSIC_AGENT) return;
247-
MusicPlayer.run(() -> {
248+
ConcertoRunner.run(() -> {
248249
if (payload.string.equals("Stop")) {
249250
MusicPlayer.INSTANCE.stop();
250251
} else {

src/main/java/top/gregtao/concerto/network/room/ServerMusicAgent.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
import top.gregtao.concerto.music.Music;
1010
import top.gregtao.concerto.music.SharedMusic;
1111
import top.gregtao.concerto.network.ServerMusicNetworkHandler;
12-
import top.gregtao.concerto.player.MusicPlayer;
12+
import top.gregtao.concerto.util.ConcertoRunner;
1313

1414
import java.util.ArrayList;
1515
import java.util.HashMap;
@@ -200,7 +200,7 @@ public synchronized void addMusic(ServerPlayerEntity player, Music music) {
200200
player.sendMessage(Text.translatable("concerto.agent.add.too_quick", wait));
201201
return;
202202
}
203-
MusicPlayer.run(() -> {
203+
ConcertoRunner.run(() -> {
204204
ConcertoServer.LOGGER.info("Added music {}", music.getMeta().title());
205205
this.musicQueue.offer(music);
206206
this.members.put(player, System.currentTimeMillis());
@@ -219,7 +219,7 @@ public synchronized void playerJoin(ServerPlayerEntity player) {
219219
if (!this.isPlaying.get() && this.hasNextMusic()) {
220220
this.schedulePlayNext(0, false);
221221
} else if (this.isPlaying.get() && this.currentSharedMusic != null) {
222-
MusicPlayer.run(() -> {
222+
ConcertoRunner.run(() -> {
223223
if (this.currentSharedMusic instanceof SharedMusic shared) {
224224
shared.startTime = System.currentTimeMillis() - this.playTime;
225225
shared.startByte = this.totalBytes * (System.currentTimeMillis() - this.playTime) /

src/main/java/top/gregtao/concerto/player/MusicPlayer.java

Lines changed: 11 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -14,15 +14,13 @@
1414
import top.gregtao.concerto.api.MusicJsonParsers;
1515
import top.gregtao.concerto.music.Music;
1616
import top.gregtao.concerto.network.room.MusicRoom;
17+
import top.gregtao.concerto.util.ConcertoRunner;
1718

1819
import java.io.File;
1920
import java.io.IOException;
2021
import java.io.InputStream;
2122
import java.util.List;
2223
import java.util.Map;
23-
import java.util.concurrent.CompletableFuture;
24-
import java.util.concurrent.Executor;
25-
import java.util.concurrent.Executors;
2624
import java.util.concurrent.atomic.AtomicBoolean;
2725
import java.util.function.Consumer;
2826
import java.util.function.Supplier;
@@ -83,16 +81,6 @@ public MusicPlayer(Logger logger) {
8381
this.addStreamPlayerListener(this);
8482
}
8583

86-
public static final Executor RUNNERS_POOL = Executors.newFixedThreadPool(16);
87-
88-
public static void run(Runnable runnable) {
89-
CompletableFuture.runAsync(runnable, RUNNERS_POOL);
90-
}
91-
92-
public static void run(Runnable runnable, Runnable callback) {
93-
CompletableFuture.runAsync(runnable, RUNNERS_POOL).thenRunAsync(callback, RUNNERS_POOL);
94-
}
95-
9684
public void addMusic(Music music) {
9785
this.addMusic(music, () -> {});
9886
}
@@ -102,23 +90,23 @@ public void addMusic(List<Music> musics) {
10290
}
10391

10492
public void addMusic(Music music, Runnable callback) {
105-
run(() -> MusicPlayerHandler.INSTANCE.addMusic(music), callback);
93+
ConcertoRunner.run(() -> MusicPlayerHandler.INSTANCE.addMusic(music), callback);
10694
}
10795

10896
public void addMusic(List<Music> musics, Runnable callback) {
109-
run(() -> MusicPlayerHandler.INSTANCE.addMusic(musics), callback);
97+
ConcertoRunner.run(() -> MusicPlayerHandler.INSTANCE.addMusic(musics), callback);
11098
}
11199

112100
public void addMusic(Supplier<List<Music>> musicListAdder, Runnable callback) {
113-
run(() -> MusicPlayerHandler.INSTANCE.addMusic(musicListAdder.get()), callback);
101+
ConcertoRunner.run(() -> MusicPlayerHandler.INSTANCE.addMusic(musicListAdder.get()), callback);
114102
}
115103

116104
public void addMusicHere(Music music, boolean skip) {
117105
this.addMusicHere(music, skip, () -> {});
118106
}
119107

120108
public void addMusicHere(Music music, boolean skip, Runnable callback) {
121-
run(() -> {
109+
ConcertoRunner.run(() -> {
122110
MusicPlayerHandler.INSTANCE.addMusicHere(music);
123111
if (skip) {
124112
this.skipTo(MusicPlayerHandler.INSTANCE.getCurrentIndex() + 1);
@@ -214,7 +202,7 @@ public void statusUpdated(StreamPlayerEvent event) {
214202
}
215203

216204
public void playTempMusic(Music music, Runnable callback) {
217-
run(() -> {
205+
ConcertoRunner.run(() -> {
218206
ClientPlayerEntity player = MinecraftClient.getInstance().player;
219207
InputStream source = music.getMusicSourceOrNull();
220208
if (source == null) return;
@@ -261,7 +249,7 @@ public void playNext(int forward, Runnable callback) {
261249
}
262250

263251
public void playNext(int forward, Consumer<Integer> callback) {
264-
run(() -> {
252+
ConcertoRunner.run(() -> {
265253
ClientPlayerEntity player = MinecraftClient.getInstance().player;
266254
try {
267255
if (!this.started || MusicPlayerHandler.INSTANCE.isEmpty()) {
@@ -330,23 +318,23 @@ public void start() {
330318
}
331319

332320
public void clear() {
333-
run(() -> {
321+
ConcertoRunner.run(() -> {
334322
this.started = false;
335323
this.stop();
336324
MusicPlayerHandler.INSTANCE.clear();
337325
});
338326
}
339327

340328
public void reloadConfig(Runnable callback) {
341-
run(() -> {
329+
ConcertoRunner.run(() -> {
342330
this.started = false;
343331
this.stop();
344332
MusicPlayerHandler.INSTANCE = MusicJsonParsers.fromRaw(ConcertoClient.MUSIC_CONFIG.read());
345333
}, callback);
346334
}
347335

348336
public void cut(Runnable callback) {
349-
run(() -> {
337+
ConcertoRunner.run(() -> {
350338
if (!this.isPlayingTemp) {
351339
MusicPlayerHandler.INSTANCE.removeCurrent();
352340
}
@@ -357,7 +345,7 @@ public void cut(Runnable callback) {
357345
public void remove(int index, Runnable callback) {
358346
if (index == MusicPlayerHandler.INSTANCE.getCurrentIndex()) this.cut(callback);
359347
else {
360-
run(() -> {
348+
ConcertoRunner.run(() -> {
361349
MusicPlayerHandler.INSTANCE.remove(index);
362350
if (MusicPlayerHandler.INSTANCE.isEmpty()) this.cut(() -> {});
363351
}, callback);

0 commit comments

Comments
 (0)