HTTPS
https://git.nageyqma.icu/nageyqma/blade-addons-next.git
SSH
git@git.nageyqma.icu:nageyqma/blade-addons-next.git
HTTPS 链接可直接 git clone;推送代码请使用 SSH。
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596
package blade.addon.utils;
import com.mojang.brigadier.Command;
import config.practical.data.SoundData;
import net.fabricmc.fabric.api.client.event.lifecycle.v1.ClientTickEvents;
import net.minecraft.client.Minecraft;
import net.minecraft.client.gui.screens.Screen;
import net.minecraft.client.player.LocalPlayer;
import net.minecraft.sounds.SoundEvent;
import java.util.concurrent.CopyOnWriteArrayList;
public class Scheduler {
private static Screen scheduledScreen = null;
private static int screenTicks = 0;
private static String scheduledCommand = null;
static class Task {
Runnable task;
int delay;
public Task(Runnable task, int delay) {
this.task = task;
this.delay = delay;
}
}
private static final CopyOnWriteArrayList<Task> tasks = new CopyOnWriteArrayList<>();
public static void init() {
ClientTickEvents.START_CLIENT_TICK.register(minecraftClient -> {
if (scheduledScreen != null) {
screenTicks--;
if (screenTicks <= 0) {
minecraftClient.gui.setScreen(scheduledScreen);
scheduledScreen = null;
}
}
if (scheduledCommand != null) {
LocalPlayer player = minecraftClient.player;
if (player != null && player.connection != null) {
player.connection.sendCommand(scheduledCommand);
scheduledCommand = null;
}
}
for (int i = tasks.size() - 1; i >= 0; i--) {
Task task = tasks.get(i);
task.delay--;
if (task.delay <= 0) {
minecraftClient.execute(task.task);
tasks.remove(i);
}
}
});
}
public static int scheduleScreen(Screen screen) {
if (screen == null) return -1;
scheduledScreen = screen;
screenTicks = 1;
return Command.SINGLE_SUCCESS;
}
public static void scheduleSound(SoundEvent soundEvent, float volume, float pitch, int delay) {
tasks.add(new Task(() -> {
LocalPlayer player = Minecraft.getInstance().player;
if (player == null) return;
player.playSound(soundEvent, volume, pitch);
}, delay));
}
public static void scheduleSound(SoundEvent soundEvent, float volume, float pitch) {
scheduleSound(soundEvent, volume, pitch, 1);
}
public static void scheduleSound(SoundData soundData, int tick) {
scheduleSound(SoundEvent.createVariableRangeEvent(soundData.getSound()), soundData.getVolume(), soundData.getPitch(), tick);
}
public static void scheduleSound(SoundData soundData) {
scheduleSound(soundData, 1);
}
public static void scheduleCommand(String command) {
scheduledCommand = command;
}
public static void scheduleTask(Runnable runnable, int ticks) {
tasks.add(new Task(runnable, ticks));
}
}