From 7ee8d5d71c3d1e8e2ee3ab923d64a227d8747d8a Mon Sep 17 00:00:00 2001 From: Aspw-w <0kcabtuo0@gmail.com> Date: Sat, 6 Apr 2024 11:59:40 +0900 Subject: [PATCH] yazyu renderer --- src/main/java/net/aspw/client/Launch.kt | 22 ++++++++++++++++-- .../module/impl/visual/SilentRotations.kt | 2 ++ .../aspw/client/protocol/ProtocolBase.java | 5 ---- .../net/aspw/client/protocol/ProtocolMod.java | 7 ------ .../client/protocol/api/ProtocolSelector.java | 8 +++---- .../aspw/client/protocol/api/VFPlatform.java | 8 ------- .../assets/minecraft/client/cape/nightx.png | Bin 6280 -> 10009 bytes 7 files changed, 26 insertions(+), 26 deletions(-) diff --git a/src/main/java/net/aspw/client/Launch.kt b/src/main/java/net/aspw/client/Launch.kt index 12661cbe..711a5aa7 100644 --- a/src/main/java/net/aspw/client/Launch.kt +++ b/src/main/java/net/aspw/client/Launch.kt @@ -1,5 +1,6 @@ package net.aspw.client +import com.viaversion.viaversion.api.protocol.version.ProtocolVersion import net.aspw.client.config.FileManager import net.aspw.client.event.ClientShutdownEvent import net.aspw.client.event.EventManager @@ -24,15 +25,16 @@ import net.aspw.client.utils.ClassUtils.hasForge import net.aspw.client.utils.misc.sound.TipSoundManager import net.aspw.client.visual.client.clickgui.dropdown.ClickGui import net.aspw.client.visual.font.semi.Fonts +import net.raphimc.vialoader.util.ProtocolVersionList object Launch { // Client information const val CLIENT_BEST = "NightX" const val CLIENT_FOLDER = "NightX-Client" - const val CLIENT_VERSION = "B104" + const val CLIENT_VERSION = "B105" const val CLIENT_CHAT = "§c$CLIENT_BEST: §r" - const val CLIENT_PROTOCOL_RANGE = "1.8 to 1.20.5" + const val CLIENT_PROTOCOL_RANGE = "1.8 to 1.20.4" var isStarting = false @@ -55,6 +57,9 @@ object Launch { // Discord RPC lateinit var discordRPC: DiscordRPC + // ViaVersion + var versions = mutableListOf() + /** * Execute if client will be started */ @@ -62,10 +67,23 @@ object Launch { isStarting = true ClientUtils.getLogger().info("Launching...") + lastTick = System.currentTimeMillis() ProtocolBase.init(ProtocolMod.PLATFORM) + versions.addAll(ProtocolVersionList.getProtocolsNewToOld()) + + try { + for (i in versions) { + if (i == ProtocolVersion.unknown || i == ProtocolVersion.v1_20_5) { + versions.remove(i) + ClientUtils.getLogger().info("Removed Unknown Protocols ($i)") + } + } + } catch (_: Exception) { + } + // Check update APIConnecter.checkStaffList() APIConnecter.checkStatus() diff --git a/src/main/java/net/aspw/client/features/module/impl/visual/SilentRotations.kt b/src/main/java/net/aspw/client/features/module/impl/visual/SilentRotations.kt index 06dbed6d..4622a78c 100644 --- a/src/main/java/net/aspw/client/features/module/impl/visual/SilentRotations.kt +++ b/src/main/java/net/aspw/client/features/module/impl/visual/SilentRotations.kt @@ -73,6 +73,8 @@ class SilentRotations : Module() { if (mc.thePlayer == null || RotationUtils.targetRotation == null) { if (rotating) rotating = false + mc.thePlayer.prevRotationYaw = RotationUtils.prevCameraYaw + mc.thePlayer.prevRotationPitch = RotationUtils.prevCameraPitch mc.thePlayer.rotationYaw = RotationUtils.cameraYaw mc.thePlayer.rotationPitch = RotationUtils.cameraPitch return diff --git a/src/main/java/net/aspw/client/protocol/ProtocolBase.java b/src/main/java/net/aspw/client/protocol/ProtocolBase.java index 75758c2e..99befd79 100644 --- a/src/main/java/net/aspw/client/protocol/ProtocolBase.java +++ b/src/main/java/net/aspw/client/protocol/ProtocolBase.java @@ -30,11 +30,6 @@ public static void init(final VFPlatform platform) { return; } - final ProtocolVersion version = ProtocolVersion.getProtocol(platform.getGameVersion()); - - if (version == ProtocolVersion.unknown) - throw new IllegalArgumentException("Unknown Version " + platform.getGameVersion()); - manager = new ProtocolBase(); ViaLoader.init(new ViaVersionPlatformImpl(null), new ProtocolVLLoader(platform), new ProtocolVLInjector(), null, ViaBackwardsPlatformImpl::new, ViaRewindPlatformImpl::new, null, null); diff --git a/src/main/java/net/aspw/client/protocol/ProtocolMod.java b/src/main/java/net/aspw/client/protocol/ProtocolMod.java index cb29356b..3ff3f01e 100644 --- a/src/main/java/net/aspw/client/protocol/ProtocolMod.java +++ b/src/main/java/net/aspw/client/protocol/ProtocolMod.java @@ -1,16 +1,9 @@ package net.aspw.client.protocol; import net.aspw.client.protocol.api.VFPlatform; -import net.minecraft.realms.RealmsSharedConstants; import net.minecraftforge.fml.common.Mod; @Mod(modid = "NightX", version = "Release") public class ProtocolMod implements VFPlatform { - public static final ProtocolMod PLATFORM = new ProtocolMod(); - - @Override - public int getGameVersion() { - return RealmsSharedConstants.NETWORK_PROTOCOL_VERSION; - } } \ No newline at end of file diff --git a/src/main/java/net/aspw/client/protocol/api/ProtocolSelector.java b/src/main/java/net/aspw/client/protocol/api/ProtocolSelector.java index 9a8a7804..046f46a7 100644 --- a/src/main/java/net/aspw/client/protocol/api/ProtocolSelector.java +++ b/src/main/java/net/aspw/client/protocol/api/ProtocolSelector.java @@ -2,13 +2,13 @@ import com.mojang.realmsclient.gui.ChatFormatting; import com.viaversion.viaversion.api.protocol.version.ProtocolVersion; +import net.aspw.client.Launch; import net.aspw.client.protocol.ProtocolBase; import net.aspw.client.visual.font.smooth.FontLoaders; import net.minecraft.client.Minecraft; import net.minecraft.client.gui.GuiButton; import net.minecraft.client.gui.GuiScreen; import net.minecraft.client.gui.GuiSlot; -import net.raphimc.vialoader.util.ProtocolVersionList; import org.lwjgl.input.Keyboard; import java.io.IOException; @@ -75,12 +75,12 @@ public SlotList(Minecraft client, int width, int height, int top, int bottom, in @Override protected int getSize() { - return ProtocolVersionList.getProtocolsNewToOld().size() - 2; + return Launch.INSTANCE.getVersions().size() - 2; } @Override protected void elementClicked(int index, boolean b, int i1, int i2) { - finishedCallback.finished(ProtocolVersionList.getProtocolsNewToOld().get(index), parent); + finishedCallback.finished(Launch.INSTANCE.getVersions().get(index), parent); } @Override @@ -96,7 +96,7 @@ protected void drawBackground() { @Override protected void drawSlot(int index, int x, int y, int slotHeight, int mouseX, int mouseY) { final ProtocolVersion targetVersion = ProtocolBase.getManager().getTargetVersion(); - final ProtocolVersion version = ProtocolVersionList.getProtocolsNewToOld().get(index); + final ProtocolVersion version = Launch.INSTANCE.getVersions().get(index); String color; if (targetVersion == version) { diff --git a/src/main/java/net/aspw/client/protocol/api/VFPlatform.java b/src/main/java/net/aspw/client/protocol/api/VFPlatform.java index cb55e287..0215ada7 100644 --- a/src/main/java/net/aspw/client/protocol/api/VFPlatform.java +++ b/src/main/java/net/aspw/client/protocol/api/VFPlatform.java @@ -1,12 +1,4 @@ package net.aspw.client.protocol.api; -/** - * This interface is used to access platform specific fields. - */ public interface VFPlatform { - - /** - * @return the native version of the platform - */ - int getGameVersion(); } \ No newline at end of file diff --git a/src/main/resources/assets/minecraft/client/cape/nightx.png b/src/main/resources/assets/minecraft/client/cape/nightx.png index 236744361c4d829ae5ffb87e727cb44665be4279..aa7bfa7ac44a7c35e675862e4cfccbf944f5d62e 100644 GIT binary patch literal 10009 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

=ydyk5PI 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 Rs#+f|I-_Tz`$`)d`Cnlthjjn| literal 6280 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 Jxx87>e*sT?FY5pR