add all stuff i have made

too lazy to list them lol
This commit is contained in:
Chayapak 2023-08-27 19:30:48 +07:00
parent 8fd31327b4
commit d3feb98040
8 changed files with 90 additions and 77 deletions

View file

@ -53,6 +53,7 @@ public class CommandProcessor {
commands.add(new announcementCommand());
commands.add(new songItemCommand());
commands.add(new testSongCommand());
commands.add(new pitchCommand());
for (Command command : commands) {
commandMap.put(command.getName().toLowerCase(Locale.ROOT), command);
@ -129,7 +130,7 @@ public class CommandProcessor {
if (args.length() == 0) {
StringBuilder helpMessage = new StringBuilder("§6Commands -");
for (Command c : commands) {
helpMessage.append(" " + Config.getConfig().prefix + c.getName());
helpMessage.append(" ").append(Config.getConfig().prefix).append(c.getName());
}
SongPlayer.addChatMessage(helpMessage.toString());
}
@ -239,7 +240,7 @@ public class CommandProcessor {
SongHandler.getInstance().stage.movePlayerToStagePosition();
}
SongHandler.getInstance().restoreStateAndCleanUp();
SongPlayer.addChatMessage("§6Stopped playing");
SongPlayer.addChatMessage("§6Stopped playing", true);
return true;
}
else {
@ -293,7 +294,7 @@ public class CommandProcessor {
try {
long time = Util.parseTime(args);
SongHandler.getInstance().currentSong.setTime(time);
SongPlayer.addChatMessage("§6Set song time to §3" + Util.formatTime(time));
SongPlayer.addChatMessage("§6Set song time to §3" + Util.formatTime(time), true);
return true;
} catch (IOException e) {
SongPlayer.addChatMessage("§cNot a valid time stamp");
@ -325,10 +326,10 @@ public class CommandProcessor {
SongHandler.getInstance().currentSong.looping = !SongHandler.getInstance().currentSong.looping;
SongHandler.getInstance().currentSong.loopCount = 0;
if (SongHandler.getInstance().currentSong.looping) {
SongPlayer.addChatMessage("§6Enabled looping");
SongPlayer.addChatMessage("§6Enabled looping", true);
}
else {
SongPlayer.addChatMessage("§6Disabled looping");
SongPlayer.addChatMessage("§6Disabled looping", true);
}
return true;
}
@ -432,8 +433,8 @@ public class CommandProcessor {
}
}
List<String> subdirectories = null;
List<String> songs = null;
List<String> subdirectories;
List<String> songs;
try {
subdirectories = Files.list(dir)
.filter(Files::isDirectory)
@ -592,9 +593,9 @@ public class CommandProcessor {
Config.getConfig().loopPlaylists = !Config.getConfig().loopPlaylists;
SongHandler.getInstance().setPlaylistLoop(Config.getConfig().loopPlaylists);
if (Config.getConfig().loopPlaylists) {
SongPlayer.addChatMessage("§6Enabled playlist looping");
SongPlayer.addChatMessage("§6Enabled playlist looping", true);
} else {
SongPlayer.addChatMessage("§6Disabled playlist looping");
SongPlayer.addChatMessage("§6Disabled playlist looping", true);
}
Config.saveConfigWithErrorHandling();
return true;
@ -604,9 +605,9 @@ public class CommandProcessor {
Config.getConfig().shufflePlaylists = !Config.getConfig().shufflePlaylists;
SongHandler.getInstance().setPlaylistShuffle(Config.getConfig().shufflePlaylists);
if (Config.getConfig().shufflePlaylists) {
SongPlayer.addChatMessage("§6Enabled playlist shuffling");
SongPlayer.addChatMessage("§6Enabled playlist shuffling", true);
} else {
SongPlayer.addChatMessage("§6Disabled playlist shuffling");
SongPlayer.addChatMessage("§6Disabled playlist shuffling", true);
}
Config.saveConfigWithErrorHandling();
return true;
@ -685,7 +686,7 @@ public class CommandProcessor {
if (playlistFiles == null) {
return null;
}
int max = playlistFiles.collect(Collectors.toList()).size();
int max = (int) playlistFiles.count();
Stream<String> suggestions = IntStream.range(1, max+1).mapToObj(Integer::toString);
return CommandSource.suggestMatching(suggestions, suggestionsBuilder);
}
@ -858,7 +859,7 @@ public class CommandProcessor {
try {
Stage.StageType stageType = Stage.StageType.valueOf(args.toUpperCase(Locale.ROOT));
Config.getConfig().stageType = stageType;
SongPlayer.addChatMessage("§6Set stage type to §3" + stageType.name());
SongPlayer.addChatMessage("§6Set stage type to §3" + stageType.name(), true);
Config.saveConfigWithErrorHandling();
}
catch (IllegalArgumentException e) {
@ -936,13 +937,11 @@ public class CommandProcessor {
public String[] getSyntax() {
return new String[] {
"enable",
"disable",
"getMessage",
"setMessage <message>",
"disable"
};
}
public String getDescription() {
return "Set an announcement message that is sent when you start playing a song. With setMessage, write [name] where the song name should go.";
return "Set an announcement message that is sent when you start playing a song.";
}
public boolean processCommand(String args) {
String[] split = args.split(" ", 2);
@ -950,23 +949,13 @@ public class CommandProcessor {
case "enable":
if (split.length != 1) return false;
Config.getConfig().doAnnouncement = true;
SongPlayer.addChatMessage("§6Enabled song announcements");
SongPlayer.addChatMessage("§6Enabled song announcements", true);
Config.saveConfigWithErrorHandling();
return true;
case "disable":
if (split.length != 1) return false;
Config.getConfig().doAnnouncement = false;
SongPlayer.addChatMessage("§6Disabled song announcements");
Config.saveConfigWithErrorHandling();
return true;
case "getmessage":
if (split.length != 1) return false;
SongPlayer.addChatMessage("§6Current announcement message is §r" + Config.getConfig().announcementMessage);
return true;
case "setmessage":
if (split.length != 2) return false;
Config.getConfig().announcementMessage = split[1];
SongPlayer.addChatMessage("§6Set announcement message to §r" + split[1]);
SongPlayer.addChatMessage("§6Disabled song announcements", true);
Config.saveConfigWithErrorHandling();
return true;
default:
@ -975,7 +964,7 @@ public class CommandProcessor {
}
public CompletableFuture<Suggestions> getSuggestions(String args, SuggestionsBuilder suggestionsBuilder) {
if (!args.contains(" ")) {
return CommandSource.suggestMatching(new String[]{"enable", "disable", "getMessage", "setMessage"}, suggestionsBuilder);
return CommandSource.suggestMatching(new String[]{"enable", "disable"}, suggestionsBuilder);
}
else {
return null;
@ -1087,6 +1076,25 @@ public class CommandProcessor {
}
}
private static class pitchCommand extends Command {
public String getName() { return "pitch"; }
public String[] getSyntax() { return new String[] { "<pitch>" }; }
public String getDescription() { return "Sets the pitch of the song"; }
public boolean processCommand(String args) {
if (args.length() == 0) return false;
try {
SongHandler.getInstance().pitch = Integer.parseInt(args);
SongPlayer.addChatMessage("§6Set the pitch to §3" + args, true);
} catch (NumberFormatException e) {
return false;
}
return true;
}
}
public static CompletableFuture<Suggestions> handleSuggestions(String text, SuggestionsBuilder suggestionsBuilder) {
if (!text.contains(" ")) {
List<String> names = commandCompletions

View file

@ -25,7 +25,6 @@ public class Config {
public boolean swing = false;
public boolean rotate = false;
public boolean doAnnouncement = false;
public String announcementMessage = "&6Now playing: &3[name]";
public static Config getConfig() {
if (config == null) {

View file

@ -1,5 +1,6 @@
package com.github.hhhzzzsss.songplayer;
import com.github.hhhzzzsss.songplayer.playing.SongHandler;
import net.fabricmc.api.ModInitializer;
import net.minecraft.block.Block;
import net.minecraft.block.Blocks;
@ -35,12 +36,18 @@ public class SongPlayer implements ModInitializer {
CommandProcessor.initCommands();
}
public static void addChatMessage(String message) {
MC.player.sendMessage(Text.of(message), false);
public static void addChatMessage(String message) { addChatMessage(message, false); }
public static void addChatMessage(String message, boolean broadcast) {
MC.player.sendMessage(Text.literal(message), false);
if (broadcast && Config.getConfig().doAnnouncement) SongHandler.getInstance().sendMessage(message.replace('§', '&'));
}
public static void addChatMessage(Text text) {
public static void addChatMessage(Text text) { addChatMessage(text, false); }
public static void addChatMessage(Text text, boolean broadcast) {
MC.player.sendMessage(text, false);
if (broadcast && Config.getConfig().doAnnouncement) SongHandler.getInstance().sendMessage(text.getString().replace('§', '&')); // Maybe parse the colors
}
public static void removeFakePlayer() {

View file

@ -1,5 +1,6 @@
package com.github.hhhzzzsss.songplayer.conversion;
import com.github.hhhzzzsss.songplayer.playing.SongHandler;
import com.github.hhhzzzsss.songplayer.song.DownloadUtils;
import com.github.hhhzzzsss.songplayer.song.Instrument;
import com.github.hhhzzzsss.songplayer.song.Note;
@ -25,7 +26,7 @@ public class MidiConverter {
public static final int NOTE_OFF = 0x80;
public static Song getSongFromUrl(URL url) throws IOException, InvalidMidiDataException, URISyntaxException, NoSuchAlgorithmException, KeyManagementException {
Sequence sequence = MidiSystem.getSequence(DownloadUtils.DownloadToInputStream(url, 5*1024*1024));
Sequence sequence = MidiSystem.getSequence(DownloadUtils.DownloadToInputStream(url));
return getSong(sequence, Paths.get(url.toURI().getPath()).getFileName().toString());
}
@ -146,7 +147,7 @@ public class MidiConverter {
return null;
}
int pitch = midiPitch-instrument.offset;
int pitch = (midiPitch-instrument.offset) + SongHandler.getInstance().pitch;
int noteId = pitch + instrument.instrumentId*25;
long time = microTime / 1000L;

View file

@ -1,5 +1,6 @@
package com.github.hhhzzzsss.songplayer.conversion;
import com.github.hhhzzzsss.songplayer.playing.SongHandler;
import com.github.hhhzzzsss.songplayer.song.Instrument;
import com.github.hhhzzzsss.songplayer.song.Note;
import com.github.hhhzzzsss.songplayer.song.Song;
@ -147,17 +148,18 @@ public class NBSConverter {
continue;
}
if (note.key < 33 || note.key > 57) {
continue;
}
byte layerVolume = 100;
if (nbsLayers.size() > note.layer) {
layerVolume = nbsLayers.get(note.layer).volume;
}
int pitch = note.key-33;
int noteId = pitch + instrument.instrumentId*25;
int key = note.key;
while (key < 33) key += 12;
while (key > 57) key -= 12;
int pitch = key-33;
int noteId = (pitch + instrument.instrumentId*25) + SongHandler.getInstance().pitch;
song.add(new Note(noteId, getMilliTime(note.tick, tempo)));
}

View file

@ -25,7 +25,9 @@ import net.minecraft.world.GameMode;
import java.io.IOException;
import java.nio.file.Path;
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
public class SongHandler {
private static SongHandler instance = null;
@ -47,6 +49,8 @@ public class SongHandler {
public boolean wasFlying = false;
public GameMode originalGamemode = GameMode.CREATIVE;
public int pitch = 0;
boolean playlistChecked = false;
public void onUpdate(boolean tick) {
@ -81,7 +85,7 @@ public class SongHandler {
// Check if loader thread is finished and handle accordingly
if (loaderThread != null && !loaderThread.isAlive()) {
if (loaderThread.exception != null) {
SongPlayer.addChatMessage("§cFailed to load song: §4" + loaderThread.exception.getMessage());
SongPlayer.addChatMessage("§cFailed to load song: §4" + loaderThread.exception.getMessage(), true);
} else {
if (currentSong == null) {
setSong(loaderThread.song);
@ -144,10 +148,10 @@ public class SongHandler {
else {
try {
loaderThread = new SongLoaderThread(location);
SongPlayer.addChatMessage("§6Loading §3" + location);
SongPlayer.addChatMessage("§6Loading §3" + location, true);
loaderThread.start();
} catch (IOException e) {
SongPlayer.addChatMessage("§cFailed to load song: §4" + e.getMessage());
SongPlayer.addChatMessage("§cFailed to load song: §4" + e.getMessage(), true);
}
}
}
@ -168,9 +172,6 @@ public class SongHandler {
currentSong = song;
building = true;
setCreativeIfNeeded();
if (Config.getConfig().doAnnouncement) {
sendMessage(Config.getConfig().announcementMessage.replaceAll("\\[name\\]", song.name));
}
if (stage == null) {
stage = new Stage();
stage.movePlayerToStagePosition();
@ -179,13 +180,13 @@ public class SongHandler {
stage.sendMovementPacketToStagePosition();
}
getAndSaveBuildSlot();
SongPlayer.addChatMessage("§6Building noteblocks");
SongPlayer.addChatMessage("§6Building noteblocks", true);
}
private void queueSong(Song song) {
songQueue.add(song);
SongPlayer.addChatMessage("§6Added song to queue: §3" + song.name);
SongPlayer.addChatMessage("§6Added song to queue: §3" + song.name, true);
}
public void setPlaylist(Path playlist) {
@ -270,7 +271,7 @@ public class SongHandler {
building = false;
setSurvivalIfNeeded();
stage.sendMovementPacketToStagePosition();
SongPlayer.addChatMessage("§6Now playing §3" + currentSong.name);
SongPlayer.addChatMessage("§6Now playing §3" + currentSong.name, true);
}
}
private void setBuildProgressDisplay() {
@ -321,7 +322,7 @@ public class SongHandler {
System.out.println("Missing note: " + Instrument.getInstrumentFromId(instrumentId).name() + ":" + pitch);
}
getAndSaveBuildSlot();
SongPlayer.addChatMessage("§6Stage was altered. Rebuilding!");
SongPlayer.addChatMessage("§6Stage was altered. Rebuilding!", true);
return;
}
}
@ -343,7 +344,7 @@ public class SongHandler {
}
if (currentSong.finished()) {
SongPlayer.addChatMessage("§6Done playing §3" + currentSong.name);
SongPlayer.addChatMessage("§6Done playing §3" + currentSong.name, true);
currentSong = null;
}
}
@ -411,40 +412,40 @@ public class SongHandler {
}
private long lastCommandTime = System.currentTimeMillis();
private String cachedCommand = null;
private String cachedMessage = null;
private List<String> cachedCommands = new ArrayList<>();
private List<String> cachedMessages = new ArrayList<>();
private void sendGamemodeCommand(String command) {
cachedCommand = command;
cachedCommands.add(command);
}
private void sendMessage(String message) {
cachedMessage = message;
public void sendMessage(String message) {
cachedMessages.add(message);
}
private void checkCommandCache() {
long currentTime = System.currentTimeMillis();
if (currentTime >= lastCommandTime + 1500 && cachedCommand != null) {
SongPlayer.MC.getNetworkHandler().sendCommand(cachedCommand);
cachedCommand = null;
if (currentTime >= lastCommandTime + 1500 && !cachedCommands.isEmpty()) {
SongPlayer.MC.getNetworkHandler().sendCommand(cachedCommands.get(0));
cachedCommands.remove(0);
lastCommandTime = currentTime;
}
else if (currentTime >= lastCommandTime + 500 && cachedMessage != null) {
if (cachedMessage.startsWith("/")) {
SongPlayer.MC.getNetworkHandler().sendCommand(cachedMessage.substring(1));
else if (currentTime >= lastCommandTime + 500 && !cachedMessages.isEmpty()) {
if (cachedMessages.get(0).startsWith("/")) {
SongPlayer.MC.getNetworkHandler().sendCommand(cachedMessages.get(0).substring(1));
}
else {
SongPlayer.MC.getNetworkHandler().sendChatMessage(cachedMessage);
SongPlayer.MC.getNetworkHandler().sendChatMessage(cachedMessages.get(0));
}
cachedMessage = null;
cachedMessages.remove(0);
lastCommandTime = currentTime;
}
}
private void setCreativeIfNeeded() {
cachedCommand = null;
cachedCommands.clear();
if (SongPlayer.MC.interactionManager.getCurrentGameMode() != GameMode.CREATIVE) {
sendGamemodeCommand(Config.getConfig().creativeCommand);
}
}
private void setSurvivalIfNeeded() {
cachedCommand = null;
cachedCommands.clear();
if (SongPlayer.MC.interactionManager.getCurrentGameMode() != GameMode.SURVIVAL) {
sendGamemodeCommand(Config.getConfig().survivalCommand);
}

View file

@ -29,7 +29,7 @@ public class DownloadUtils {
}
}
public static byte[] DownloadToByteArray(URL url, int maxSize) throws IOException, KeyManagementException, NoSuchAlgorithmException {
public static byte[] DownloadToByteArray(URL url) throws IOException, KeyManagementException, NoSuchAlgorithmException {
SSLContext ctx = SSLContext.getInstance("TLS");
ctx.init(new KeyManager[0], new TrustManager[] {new DefaultTrustManager()}, new SecureRandom());
SSLContext.setDefault(ctx);
@ -43,13 +43,8 @@ public class DownloadUtils {
try {
byte[] buf = new byte[1024];
int n;
int tot = 0;
while ((n = downloadStream.read(buf)) > 0) {
byteArrayStream.write(buf, 0, n);
tot += n;
if (tot > maxSize) {
throw new IOException("File is too large");
}
if (Thread.interrupted()) {
return null;
}
@ -61,7 +56,7 @@ public class DownloadUtils {
}
}
public static InputStream DownloadToInputStream(URL url, int maxSize) throws KeyManagementException, NoSuchAlgorithmException, IOException {
return new ByteArrayInputStream(DownloadToByteArray(url, maxSize));
public static InputStream DownloadToInputStream(URL url) throws KeyManagementException, NoSuchAlgorithmException, IOException {
return new ByteArrayInputStream(DownloadToByteArray(url));
}
}

View file

@ -55,7 +55,7 @@ public class SongLoaderThread extends Thread{
try {
byte[] bytes;
if (isUrl) {
bytes = DownloadUtils.DownloadToByteArray(songUrl, 10*1024*1024);
bytes = DownloadUtils.DownloadToByteArray(songUrl);
filename = Paths.get(songUrl.toURI().getPath()).getFileName().toString();
}
else {