FINALLY fix useCore

This commit is contained in:
Chayapak 2023-06-29 21:25:03 +07:00
parent 7afcc606fe
commit 3328fa4ff1
5 changed files with 62 additions and 8 deletions

View file

@ -0,0 +1,12 @@
package land.chipmunk.chipmunkmod.mixin;
import net.minecraft.network.ClientConnection;
import net.minecraft.network.listener.PacketListener;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.gen.Accessor;
@Mixin(ClientConnection.class)
public interface ClientConnectionAccessor {
@Accessor("packetListener")
PacketListener packetListener ();
}

View file

@ -0,0 +1,15 @@
package land.chipmunk.chipmunkmod.mixin;
import net.minecraft.network.ClientConnection;
import net.minecraft.network.listener.PacketListener;
import net.minecraft.network.packet.Packet;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.gen.Invoker;
@Mixin(ClientConnection.class)
public interface ClientConnectionInvoker {
@Invoker("handlePacket")
static <T extends PacketListener> void handlePacket (Packet<T> packet, PacketListener listener) {
throw new AssertionError();
}
}

View file

@ -1,6 +1,7 @@
package land.chipmunk.chipmunkmod.mixin; package land.chipmunk.chipmunkmod.mixin;
import net.minecraft.client.network.PlayerListEntry; import net.minecraft.client.network.PlayerListEntry;
import net.minecraft.network.ClientConnection;
import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.gen.Accessor; import org.spongepowered.asm.mixin.gen.Accessor;
import net.minecraft.text.Text; import net.minecraft.text.Text;
@ -14,6 +15,9 @@ public interface ClientPlayNetworkHandlerAccessor {
@Accessor("CHAT_VALIDATION_FAILED_TEXT") @Accessor("CHAT_VALIDATION_FAILED_TEXT")
static Text chatValidationFailedText () { throw new AssertionError(); } static Text chatValidationFailedText () { throw new AssertionError(); }
@Accessor("connection")
ClientConnection connection();
@Accessor("playerListEntries") @Accessor("playerListEntries")
Map<UUID, PlayerListEntry> playerListEntries(); Map<UUID, PlayerListEntry> playerListEntries();

View file

@ -1,5 +1,8 @@
package land.chipmunk.chipmunkmod.modules; package land.chipmunk.chipmunkmod.modules;
import land.chipmunk.chipmunkmod.mixin.ClientConnectionAccessor;
import land.chipmunk.chipmunkmod.mixin.ClientConnectionInvoker;
import land.chipmunk.chipmunkmod.mixin.ClientPlayNetworkHandlerAccessor;
import land.chipmunk.chipmunkmod.song.Note; import land.chipmunk.chipmunkmod.song.Note;
import land.chipmunk.chipmunkmod.song.Song; import land.chipmunk.chipmunkmod.song.Song;
import land.chipmunk.chipmunkmod.song.SongLoaderException; import land.chipmunk.chipmunkmod.song.SongLoaderException;
@ -13,15 +16,17 @@ import net.kyori.adventure.text.serializer.gson.GsonComponentSerializer;
import net.minecraft.client.MinecraftClient; import net.minecraft.client.MinecraftClient;
import net.minecraft.client.network.ClientPlayNetworkHandler; import net.minecraft.client.network.ClientPlayNetworkHandler;
import net.minecraft.client.network.ClientPlayerEntity; import net.minecraft.client.network.ClientPlayerEntity;
import net.minecraft.network.packet.s2c.play.PlaySoundS2CPacket;
import net.minecraft.registry.entry.RegistryEntry;
import net.minecraft.sound.SoundCategory; import net.minecraft.sound.SoundCategory;
import net.minecraft.sound.SoundEvent; import net.minecraft.sound.SoundEvent;
import net.minecraft.text.Text; import net.minecraft.text.Text;
import net.minecraft.util.Identifier; import net.minecraft.util.Identifier;
import net.minecraft.util.math.random.Random;
import java.io.File; import java.io.File;
import java.net.URL; import java.net.URL;
import java.nio.file.Path; import java.nio.file.Path;
import java.util.Arrays;
import java.util.LinkedList; import java.util.LinkedList;
import java.util.Timer; import java.util.Timer;
import java.util.TimerTask; import java.util.TimerTask;
@ -141,7 +146,7 @@ public class SongPlayer {
} }
}; };
playTimer.schedule(playTask, 50, 50); playTimer.schedule(playTask, 60, 50);
if (currentSong != null) currentSong.play(); if (currentSong != null) currentSong.play();
} }
@ -211,15 +216,31 @@ public class SongPlayer {
final float floatingPitch = MathUtilities.clamp((float) (0.5 * (Math.pow(2, ((note.pitch + (pitch / 10)) / 12)))), 0F, 2F); final float floatingPitch = MathUtilities.clamp((float) (0.5 * (Math.pow(2, ((note.pitch + (pitch / 10)) / 12)))), 0F, 2F);
try { try {
if (!useCore) { if (!useCore && client.player != null) {
if (floatingPitch < 0 || floatingPitch > 2) return;
final String[] thing = note.instrument.sound.split(":"); final String[] thing = note.instrument.sound.split(":");
if (thing[1] == null) return; // idk if this can be null but ill just protect it for now i guess if (thing[1] == null) return; // idk if this can be null but ill just protect it for now i guess
client.player.playSound(SoundEvent.of(Identifier.of(thing[0], thing[1])), SoundCategory.RECORDS, note.volume, floatingPitch); final ClientPlayNetworkHandlerAccessor networkHandlerAccessor = (ClientPlayNetworkHandlerAccessor) client.getNetworkHandler();
} else CommandCore.INSTANCE.run("execute as " + SELECTOR + " at @s run playsound " + note.instrument.sound + " record @s ~ ~ ~ " + note.volume + " " + floatingPitch);
final ClientConnectionAccessor clientConnectionAccessor = (ClientConnectionAccessor) networkHandlerAccessor.connection();
ClientConnectionInvoker.handlePacket(
new PlaySoundS2CPacket(
RegistryEntry.of(SoundEvent.of(Identifier.of(thing[0], thing[1]))),
SoundCategory.RECORDS,
client.player.getX(),
client.player.getY(),
client.player.getZ(),
note.volume,
floatingPitch,
Random.create().nextLong()
),
clientConnectionAccessor.packetListener()
);
} else {
CommandCore.INSTANCE.run("execute as " + SELECTOR + " at @s run playsound " + note.instrument.sound + " record @s ~ ~ ~ " + note.volume + " " + floatingPitch);
}
} catch (Exception e) { } catch (Exception e) {
e.printStackTrace(); e.printStackTrace();
} }

View file

@ -21,7 +21,9 @@
"ElderGuardianAppearanceParticleMixin", "ElderGuardianAppearanceParticleMixin",
"IdentifierMixin", "IdentifierMixin",
"DecoratedPotBlockEntitySherdsMixin", "DecoratedPotBlockEntitySherdsMixin",
"TextMixin" "TextMixin",
"ClientConnectionInvoker",
"ClientConnectionAccessor"
], ],
"injectors": { "injectors": {
"defaultRequire": 1 "defaultRequire": 1