Skip to content

Commit

Permalink
Fix /resetmusic
Browse files Browse the repository at this point in the history
  • Loading branch information
AsoDesu committed Jun 13, 2023
1 parent 62dd57a commit 8369814
Show file tree
Hide file tree
Showing 6 changed files with 66 additions and 25 deletions.
Original file line number Diff line number Diff line change
@@ -1,26 +1,24 @@
package net.asodev.islandutils;

import com.mojang.blaze3d.platform.InputConstants;
import com.mojang.brigadier.CommandDispatcher;
import com.mojang.brigadier.builder.LiteralArgumentBuilder;
import net.asodev.islandutils.discord.DiscordPresenceUpdator;
import net.asodev.islandutils.util.ChatUtils;
import net.asodev.islandutils.util.MusicUtil;
import net.fabricmc.api.ClientModInitializer;
import net.fabricmc.api.EnvType;
import net.fabricmc.api.Environment;
import net.fabricmc.fabric.api.client.command.v2.ClientCommandManager;
import net.fabricmc.fabric.api.client.command.v2.ClientCommandRegistrationCallback;
import net.fabricmc.fabric.api.client.keybinding.v1.KeyBindingHelper;
import net.fabricmc.fabric.api.command.v2.CommandRegistrationCallback;
import net.minecraft.client.KeyMapping;
import net.minecraft.commands.Commands;
import net.minecraft.commands.CommandSourceStack;
import net.minecraft.network.chat.ClickEvent;
import net.minecraft.network.chat.Component;
import net.minecraft.network.chat.Style;
import org.lwjgl.glfw.GLFW;

@Environment(EnvType.CLIENT)
public class IslandutilsClient implements ClientModInitializer {
public class IslandUtilsClient implements ClientModInitializer {
public static KeyMapping previewKeyBind;

@Override
Expand All @@ -31,13 +29,6 @@ public void onInitializeClient() {
GLFW.GLFW_KEY_P, // The keycode of the key
"category.islandutils.keys" // The translation key of the keybinding's category.
));

ClientCommandRegistrationCallback.EVENT.register((dispatcher, context) -> {
dispatcher.register(ClientCommandManager.literal("resetmusic").executes(ctx -> {
MusicUtil.resetMusic(ctx);
return 1;
}));
});
}

public static void onJoinMCCI() {
Expand All @@ -52,4 +43,11 @@ public static void onJoinMCCI() {
}
DiscordPresenceUpdator.create();
}

public static class Commands {
public static LiteralArgumentBuilder<?> resetMusic = net.minecraft.commands.Commands.literal("resetmusic").executes(ctx -> {
MusicUtil.resetMusic(ctx);
return 1;
});
}
}
Original file line number Diff line number Diff line change
@@ -1,6 +1,11 @@
package net.asodev.islandutils.mixins;

import com.mojang.brigadier.CommandDispatcher;
import com.mojang.brigadier.ParseResults;
import com.mojang.brigadier.builder.LiteralArgumentBuilder;
import com.mojang.brigadier.exceptions.CommandSyntaxException;
import com.mojang.brigadier.suggestion.Suggestion;
import net.asodev.islandutils.IslandUtilsClient;
import net.asodev.islandutils.discord.DiscordPresenceUpdator;
import net.asodev.islandutils.options.IslandOptions;
import net.asodev.islandutils.options.IslandSoundCategories;
Expand All @@ -16,20 +21,18 @@
import net.minecraft.ChatFormatting;
import net.minecraft.client.Minecraft;
import net.minecraft.client.multiplayer.ClientPacketListener;
import net.minecraft.client.multiplayer.ClientSuggestionProvider;
import net.minecraft.client.player.LocalPlayer;
import net.minecraft.client.resources.sounds.SimpleSoundInstance;
import net.minecraft.client.resources.sounds.SoundInstance;
import net.minecraft.client.sounds.WeighedSoundEvents;
import net.minecraft.commands.CommandSourceStack;
import net.minecraft.commands.SharedSuggestionProvider;
import net.minecraft.network.chat.Component;
import net.minecraft.network.chat.Style;
import net.minecraft.network.chat.TextColor;
import net.minecraft.network.protocol.PacketUtils;
import net.minecraft.network.protocol.game.*;
import net.minecraft.resources.ResourceKey;
import net.minecraft.resources.ResourceLocation;
import net.minecraft.server.packs.resources.Resource;
import net.minecraft.sounds.SoundSource;
import net.minecraft.util.RandomSource;
import net.minecraft.world.item.ItemStack;
import net.minecraft.world.level.Level;
import org.spongepowered.asm.mixin.Final;
Expand All @@ -38,6 +41,7 @@
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable;

import java.util.*;
import java.util.regex.Matcher;
Expand All @@ -54,6 +58,14 @@ public abstract class PacketListenerMixin {

@Shadow @Final private Minecraft minecraft; // I love minecraft

@Shadow private CommandDispatcher<CommandSourceStack> commands;

@Shadow public abstract ClientSuggestionProvider getSuggestionsProvider();

@Shadow public abstract void sendCommand(String string2);

@Shadow protected abstract ParseResults<SharedSuggestionProvider> parseCommand(String string);

@Inject(method = "handleAddObjective", at = @At("TAIL")) // Checks which game we're playing!
public void handleAddObjective(ClientboundSetObjectivePacket clientboundSetObjectivePacket, CallbackInfo ci) {
if (!MccIslandState.isOnline()) return; // We have to be online
Expand Down Expand Up @@ -318,4 +330,33 @@ private String changeName(String originalTrap) {
};
}

// MCCI Commands
@Inject(method = "handleCommands", at = @At("TAIL"))
private void handleCommands(ClientboundCommandsPacket clientboundCommandsPacket, CallbackInfo ci) {
if (!MccIslandState.isOnline()) return;
this.commands.register((LiteralArgumentBuilder<CommandSourceStack>)IslandUtilsClient.Commands.resetMusic);
}

@Inject(method = "sendUnsignedCommand", at = @At("HEAD"), cancellable = true)
private void sendUnsignedCommand(String string, CallbackInfoReturnable<Boolean> cir) {
if (!MccIslandState.isOnline()) return;
if (string.startsWith("resetmusic")) {
executeCommand();
cir.setReturnValue(true);
}
}
@Inject(method = "sendCommand", at = @At("HEAD"), cancellable = true)
private void sendCommand(String string, CallbackInfo ci) {
if (!MccIslandState.isOnline()) return;
if (string.startsWith("resetmusic")) {
executeCommand();
ci.cancel();
}
}

private static void executeCommand() {
try { IslandUtilsClient.Commands.resetMusic.getCommand().run(null); }
catch (CommandSyntaxException e) { e.printStackTrace(); }
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
import com.mojang.blaze3d.platform.InputConstants;
import com.mojang.blaze3d.systems.RenderSystem;
import com.mojang.blaze3d.vertex.PoseStack;
import net.asodev.islandutils.IslandutilsClient;
import net.asodev.islandutils.IslandUtilsClient;
import net.asodev.islandutils.options.IslandOptions;
import net.asodev.islandutils.state.COSMETIC_TYPE;
import net.asodev.islandutils.state.MccIslandState;
Expand All @@ -27,7 +27,6 @@
import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable;

import static net.asodev.islandutils.state.cosmetics.CosmeticState.customModelData;
import static net.asodev.islandutils.state.cosmetics.CosmeticState.itemsMatch;


@Mixin(AbstractContainerScreen.class)
Expand Down Expand Up @@ -87,7 +86,7 @@ private void keyPressed(int keyCode, int scanCode, int modifiers, CallbackInfoRe
if (!MccIslandState.isOnline()) return;
if (hoveredSlot == null || !hoveredSlot.hasItem()) return;

InputConstants.Key previewBind = KeyBindingHelper.getBoundKeyOf(IslandutilsClient.previewKeyBind);
InputConstants.Key previewBind = KeyBindingHelper.getBoundKeyOf(IslandUtilsClient.previewKeyBind);
if (keyCode == previewBind.getValue()) {
if (hoveredSlot.getItem().is(Items.GHAST_TEAR) || hoveredSlot.getItem().is(Items.AIR)) return;
COSMETIC_TYPE type = CosmeticState.getType(hoveredSlot.getItem());
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@
import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;

import static net.asodev.islandutils.IslandutilsClient.onJoinMCCI;
import static net.asodev.islandutils.IslandUtilsClient.onJoinMCCI;

@Mixin(ClientHandshakePacketListenerImpl.class)
public class JoinMCCIMixin {
Expand Down
7 changes: 4 additions & 3 deletions src/main/java/net/asodev/islandutils/util/MusicUtil.java
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@
import net.minecraft.client.Minecraft;
import net.minecraft.client.resources.sounds.SimpleSoundInstance;
import net.minecraft.client.resources.sounds.SoundInstance;
import net.minecraft.commands.CommandSourceStack;
import net.minecraft.network.protocol.game.ClientboundSoundPacket;
import net.minecraft.resources.ResourceLocation;
import net.minecraft.sounds.SoundEvent;
Expand Down Expand Up @@ -136,9 +137,9 @@ public static void stopMusic(Boolean instant) {
Minecraft.getInstance().getSoundManager().stop(location, IslandSoundCategories.GAME_MUSIC);
}

public static void resetMusic(CommandContext<FabricClientCommandSource> ctx) {
public static void resetMusic(CommandContext<?> ctx) {
if (currentlyPlayingSound == null) {
ctx.getSource().sendError(literal("There is no music currently playing.").withStyle(ChatFormatting.RED));
ChatUtils.send(literal("There is no music currently playing.").withStyle(ChatFormatting.RED));
return;
}

Expand All @@ -162,7 +163,7 @@ public static void resetMusic(CommandContext<FabricClientCommandSource> ctx) {
false);
currentlyPlayingSound = instance;
Minecraft.getInstance().getSoundManager().play(instance);
ctx.getSource().sendFeedback(literal("Reset your music!").withStyle(ChatFormatting.GREEN));
ChatUtils.send(literal("Reset your music!").withStyle(ChatFormatting.GREEN));
}

}
4 changes: 3 additions & 1 deletion src/main/resources/fabric.mod.json
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,9 @@
"icon": "assets/island/icon.png",
"environment": "client",
"entrypoints": {
"client": [ "net.asodev.islandutils.IslandutilsClient" ],
"client": [
"net.asodev.islandutils.IslandUtilsClient"
],
"main": [ "net.asodev.islandutils.IslandUtils" ],
"modmenu": [ "net.asodev.islandutils.options.ModMenuIntegration" ]
},
Expand Down

0 comments on commit 8369814

Please sign in to comment.