From c40f8e737c62c8dadef294f8621716529d354796 Mon Sep 17 00:00:00 2001 From: BuildTools Date: Fri, 5 Feb 2021 03:52:39 +0800 Subject: PRE15 --- .../notenoughupdates/miscfeatures/FlyFix.java | 70 ++++++++++++++++++++++ 1 file changed, 70 insertions(+) create mode 100644 src/main/java/io/github/moulberry/notenoughupdates/miscfeatures/FlyFix.java (limited to 'src/main/java/io/github/moulberry/notenoughupdates/miscfeatures/FlyFix.java') diff --git a/src/main/java/io/github/moulberry/notenoughupdates/miscfeatures/FlyFix.java b/src/main/java/io/github/moulberry/notenoughupdates/miscfeatures/FlyFix.java new file mode 100644 index 00000000..9ccaff31 --- /dev/null +++ b/src/main/java/io/github/moulberry/notenoughupdates/miscfeatures/FlyFix.java @@ -0,0 +1,70 @@ +package io.github.moulberry.notenoughupdates.miscfeatures; + +import io.github.moulberry.notenoughupdates.NotEnoughUpdates; +import io.github.moulberry.notenoughupdates.util.SBInfo; +import net.minecraft.client.Minecraft; +import net.minecraft.network.play.client.C13PacketPlayerAbilities; +import net.minecraft.network.play.server.S39PacketPlayerAbilities; + +public class FlyFix { + + private static boolean serverWantFly = false; + private static boolean clientWantFly = false; + private static long lastAbilitySend = 0; + + public static void onSendAbilities(C13PacketPlayerAbilities packet) { + if(!NotEnoughUpdates.INSTANCE.config.misc.flyFix) return; + if(Minecraft.getMinecraft().thePlayer == null) return; + if(!Minecraft.getMinecraft().thePlayer.capabilities.allowFlying) return; + if(!NotEnoughUpdates.INSTANCE.hasSkyblockScoreboard()) return; + if(SBInfo.getInstance().getLocation() == null) return; + if(!SBInfo.getInstance().getLocation().equals("dynamic")) return; + + long currentTime = System.currentTimeMillis(); + + clientWantFly = packet.isFlying(); + if(clientWantFly != serverWantFly) lastAbilitySend = currentTime; + } + + public static void onReceiveAbilities(S39PacketPlayerAbilities packet) { + if(!NotEnoughUpdates.INSTANCE.config.misc.flyFix) return; + if(Minecraft.getMinecraft().thePlayer == null) return; + if(!Minecraft.getMinecraft().thePlayer.capabilities.allowFlying) return; + if(!NotEnoughUpdates.INSTANCE.hasSkyblockScoreboard()) return; + if(SBInfo.getInstance().getLocation() == null) return; + if(!SBInfo.getInstance().getLocation().equals("dynamic")) return; + + long currentTime = System.currentTimeMillis(); + + serverWantFly = packet.isFlying(); + if(serverWantFly != clientWantFly) { + if(currentTime - lastAbilitySend > 0 && currentTime - lastAbilitySend < 500) { + packet.setFlying(clientWantFly); + } else { + clientWantFly = serverWantFly; + } + } + } + + public static void tick() { + if(!NotEnoughUpdates.INSTANCE.config.misc.flyFix) return; + if(Minecraft.getMinecraft().thePlayer == null) return; + if(!Minecraft.getMinecraft().thePlayer.capabilities.allowFlying) return; + if(!NotEnoughUpdates.INSTANCE.hasSkyblockScoreboard()) return; + if(SBInfo.getInstance().getLocation() == null) return; + if(!SBInfo.getInstance().getLocation().equals("dynamic")) return; + + long currentTime = System.currentTimeMillis(); + + if(currentTime - lastAbilitySend > 1000 && currentTime - lastAbilitySend < 5000) { + if(clientWantFly != serverWantFly) { + Minecraft.getMinecraft().thePlayer.capabilities.isFlying = serverWantFly; + Minecraft.getMinecraft().thePlayer.sendPlayerAbilities(); + clientWantFly = serverWantFly; + } + } else { + clientWantFly = Minecraft.getMinecraft().thePlayer.capabilities.isFlying; + } + } + +} -- cgit