Expose ability to map instruments via command
This commit is contained in:
parent
3e359b6435
commit
8de17aacc8
@ -5,19 +5,32 @@ import com.mojang.brigadier.arguments.FloatArgumentType;
|
||||
import com.mojang.brigadier.arguments.StringArgumentType;
|
||||
import com.mojang.brigadier.context.CommandContext;
|
||||
import net.fabricmc.fabric.api.client.command.v2.FabricClientCommandSource;
|
||||
import net.minecraft.block.enums.Instrument;
|
||||
import net.minecraft.client.MinecraftClient;
|
||||
import net.minecraft.command.CommandSource;
|
||||
import net.minecraft.text.Text;
|
||||
import net.minecraft.util.Formatting;
|
||||
import semmiedev.disc_jockey.gui.screen.DiscJockeyScreen;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.Map;
|
||||
import java.util.Optional;
|
||||
|
||||
import static net.fabricmc.fabric.api.client.command.v2.ClientCommandManager.argument;
|
||||
import static net.fabricmc.fabric.api.client.command.v2.ClientCommandManager.literal;
|
||||
|
||||
public class DiscjockeyCommand {
|
||||
|
||||
|
||||
public static void register(CommandDispatcher<FabricClientCommandSource> commandDispatcher) {
|
||||
final ArrayList<String> instrumentNames = new ArrayList<>();
|
||||
for (Instrument instrument : Instrument.values()) {
|
||||
instrumentNames.add(instrument.toString().toLowerCase());
|
||||
}
|
||||
final ArrayList<String> instrumentNamesAndAll = new ArrayList<>(instrumentNames);
|
||||
instrumentNamesAndAll.add("all");
|
||||
|
||||
commandDispatcher.register(
|
||||
literal("discjockey")
|
||||
.executes(context -> {
|
||||
@ -98,6 +111,109 @@ public class DiscjockeyCommand {
|
||||
}
|
||||
})
|
||||
)
|
||||
.then(literal("remapInstruments")
|
||||
.executes(context -> {
|
||||
context.getSource().sendFeedback(Text.translatable(Main.MOD_ID + ".instrument_info"));
|
||||
return 0;
|
||||
})
|
||||
.then(literal("map")
|
||||
.then(argument("originalInstrument", StringArgumentType.word())
|
||||
.suggests((context, builder) -> CommandSource.suggestMatching(instrumentNamesAndAll, builder))
|
||||
.then(argument("newInstrument", StringArgumentType.word())
|
||||
.suggests((context, builder) -> CommandSource.suggestMatching(instrumentNames, builder))
|
||||
.executes(context -> {
|
||||
String originalInstrumentStr = StringArgumentType.getString(context, "originalInstrument");
|
||||
String newInstrumentStr = StringArgumentType.getString(context, "newInstrument");
|
||||
Instrument originalInstrument = null, newInstrument = null;
|
||||
for(Instrument maybeInstrument : Instrument.values()) {
|
||||
if(maybeInstrument.toString().equalsIgnoreCase(originalInstrumentStr)) {
|
||||
originalInstrument = maybeInstrument;
|
||||
}
|
||||
if(maybeInstrument.toString().equalsIgnoreCase(newInstrumentStr)) {
|
||||
newInstrument = maybeInstrument;
|
||||
}
|
||||
}
|
||||
|
||||
if(originalInstrument == null && !originalInstrumentStr.equalsIgnoreCase("all")) {
|
||||
context.getSource().sendFeedback(Text.translatable(Main.MOD_ID + ".invalid_instrument", originalInstrumentStr));
|
||||
return 0;
|
||||
}
|
||||
|
||||
if(newInstrument == null) {
|
||||
context.getSource().sendFeedback(Text.translatable(Main.MOD_ID + ".invalid_instrument", newInstrumentStr));
|
||||
return 0;
|
||||
}
|
||||
|
||||
if(originalInstrument == null) {
|
||||
// All instruments
|
||||
for(Instrument instrument : Instrument.values()) {
|
||||
Main.SONG_PLAYER.instrumentMap.put(instrument, newInstrument);
|
||||
}
|
||||
context.getSource().sendFeedback(Text.translatable(Main.MOD_ID + ".instrument_mapped_all", newInstrumentStr.toLowerCase()));
|
||||
}else {
|
||||
Main.SONG_PLAYER.instrumentMap.put(originalInstrument, newInstrument);
|
||||
context.getSource().sendFeedback(Text.translatable(Main.MOD_ID + ".instrument_mapped", originalInstrumentStr.toLowerCase(), newInstrumentStr.toLowerCase()));
|
||||
}
|
||||
return 1;
|
||||
})
|
||||
)
|
||||
)
|
||||
)
|
||||
.then(literal("unmap")
|
||||
.then(argument("instrument", StringArgumentType.word())
|
||||
.suggests((context, builder) -> CommandSource.suggestMatching(instrumentNames, builder))
|
||||
.executes(context -> {
|
||||
String instrumentStr = StringArgumentType.getString(context, "instrument");
|
||||
|
||||
Instrument instrument = null;
|
||||
for(Instrument maybeInstrument : Instrument.values()) {
|
||||
if(maybeInstrument.toString().equalsIgnoreCase(instrumentStr)) {
|
||||
instrument = maybeInstrument;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if(instrument == null) {
|
||||
context.getSource().sendFeedback(Text.translatable(Main.MOD_ID + ".invalid_instrument", instrumentStr));
|
||||
return 0;
|
||||
}
|
||||
|
||||
Main.SONG_PLAYER.instrumentMap.remove(instrument);
|
||||
context.getSource().sendFeedback(Text.translatable(Main.MOD_ID + ".instrument_unmapped", instrumentStr.toLowerCase()));
|
||||
return 1;
|
||||
})
|
||||
)
|
||||
)
|
||||
.then(literal("show")
|
||||
.executes(context -> {
|
||||
if(Main.SONG_PLAYER.instrumentMap.isEmpty()) {
|
||||
context.getSource().sendFeedback(Text.translatable(Main.MOD_ID + ".no_mapped_instruments"));
|
||||
return 1;
|
||||
}
|
||||
|
||||
StringBuilder maps = new StringBuilder();
|
||||
for(Map.Entry<Instrument, Instrument> entry : Main.SONG_PLAYER.instrumentMap.entrySet()) {
|
||||
if(maps.length() > 0) {
|
||||
maps.append(", ");
|
||||
}
|
||||
maps
|
||||
.append(entry.getKey().toString().toLowerCase())
|
||||
.append(" -> ")
|
||||
.append(entry.getValue().toString().toLowerCase());
|
||||
}
|
||||
context.getSource().sendFeedback(Text.translatable(Main.MOD_ID + ".mapped_instruments", maps.toString()));
|
||||
return 1;
|
||||
})
|
||||
)
|
||||
.then(literal("clear")
|
||||
.executes(context -> {
|
||||
Main.SONG_PLAYER.instrumentMap.clear();
|
||||
context.getSource().sendFeedback(Text.translatable(Main.MOD_ID + ".instrument_maps_cleared"));
|
||||
return 1;
|
||||
})
|
||||
)
|
||||
)
|
||||
|
||||
|
||||
);
|
||||
}
|
||||
|
@ -23,6 +23,14 @@
|
||||
"disc_jockey.info_tuning": "Tuning: (Speed: %s)",
|
||||
"disc_jockey.info_playing": "Playing: [%s/%s] %s (Speed: %s)",
|
||||
"disc_jockey.info_finished": "Finished: %s (Speed: %s)",
|
||||
"disc_jockey.instrument_info": "This maps instruments to be played by noteblocks for a different instrument instead.",
|
||||
"disc_jockey.invalid_instrument": "Invalid instrument: %s",
|
||||
"disc_jockey.instrument_mapped": "Mapped %s to %s",
|
||||
"disc_jockey.instrument_mapped_all": "Mapped all instruments to %s",
|
||||
"disc_jockey.instrument_unmapped": "Unmapped %s",
|
||||
"disc_jockey.mapped_instruments": "Mapped instruments: %s",
|
||||
"disc_jockey.no_mapped_instruments": "No instruments mapped, yet.",
|
||||
"disc_jockey.instrument_maps_cleared": "Instrument mappings cleared.",
|
||||
"disc_jockey.warning": "WARNING!!! This mod is very likely to get false flagged as hacks, please contact a server administrator before using this mod! (You can disable this warning in the mod settings)",
|
||||
"key.category.disc_jockey": "Disc Jockey",
|
||||
"disc_jockey.key_bind.open_screen": "Open song selection screen",
|
||||
|
Loading…
x
Reference in New Issue
Block a user