1
0
mirror of https://github.com/chylex/Better-Sprinting.git synced 2025-04-09 18:15:41 +02:00

Reimplement integrity check

This commit is contained in:
chylex 2017-06-14 00:19:42 +02:00
parent 5b211f1ed5
commit e158b7e313
5 changed files with 65 additions and 53 deletions

View File

@ -17,6 +17,8 @@ import net.minecraftforge.fml.relauncher.SideOnly;
import org.apache.commons.lang3.ArrayUtils;
import chylex.bettersprinting.client.gui.GuiButtonSprint;
import chylex.bettersprinting.client.gui.GuiSprint;
import chylex.bettersprinting.client.player.LivingUpdate;
import chylex.bettersprinting.client.player.impl.IntegrityCheck;
import chylex.bettersprinting.client.update.UpdateNotificationManager;
import chylex.bettersprinting.system.PacketPipeline;
@ -31,6 +33,7 @@ public final class ClientEventHandler{
@SubscribeEvent
public void onPlayerLoginClient(PlayerLoggedInEvent e){
IntegrityCheck.register();
UpdateNotificationManager.run();
}
@ -48,6 +51,8 @@ public final class ClientEventHandler{
@SubscribeEvent
public void onClientDisconnectedFromServer(ClientDisconnectionFromServerEvent e){
ClientModManager.svSurvivalFlyingBoost = ClientModManager.svRunInAllDirs = ClientModManager.svDisableMod = false;
IntegrityCheck.unregister();
LivingUpdate.cleanup();
stopChecking = false;
}

View File

@ -9,7 +9,6 @@ import net.minecraftforge.fml.common.event.FMLServerStartingEvent;
import org.apache.commons.lang3.ArrayUtils;
import chylex.bettersprinting.BetterSprintingConfig;
import chylex.bettersprinting.BetterSprintingProxy;
import chylex.bettersprinting.client.player.impl.LogicImplOverride;
import chylex.bettersprinting.client.player.impl.LogicImplPlayerAPI;
import chylex.bettersprinting.system.Log;
import chylex.bettersprinting.system.PacketPipeline;
@ -41,9 +40,6 @@ public class ClientProxy extends BetterSprintingProxy{
if (Loader.isModLoaded("PlayerAPI")){
LogicImplPlayerAPI.register();
}
else{
LogicImplOverride.register();
}
}
@Override

View File

@ -22,6 +22,7 @@ public final class LivingUpdate{
private static final Minecraft mc;
private static final MethodHandle mPushOutOfBlocks;
private static PlayerLogicHandler currentHandler;
private static boolean hasTriggered;
static{
mc = Minecraft.getMinecraft();
@ -33,10 +34,20 @@ public final class LivingUpdate{
}
}
public static boolean checkIntegrity(){
return hasTriggered;
}
public static void cleanup(){
currentHandler = null;
hasTriggered = false;
}
// UPDATE | EntityPlayerSP.onLivingUpdate | 1.12
public static void callPreSuper(EntityPlayerSP $this){
if (currentHandler == null || currentHandler.getPlayer() != $this){
currentHandler = new PlayerLogicHandler($this);
hasTriggered = true;
}
// VANILLA

View File

@ -0,0 +1,49 @@
package chylex.bettersprinting.client.player.impl;
import net.minecraft.client.Minecraft;
import net.minecraft.client.resources.I18n;
import net.minecraft.util.math.Vec3d;
import net.minecraft.util.text.TextComponentString;
import net.minecraftforge.common.MinecraftForge;
import net.minecraftforge.fml.common.eventhandler.SubscribeEvent;
import net.minecraftforge.fml.common.gameevent.TickEvent.ClientTickEvent;
import net.minecraftforge.fml.common.gameevent.TickEvent.Phase;
import net.minecraftforge.fml.relauncher.Side;
import net.minecraftforge.fml.relauncher.SideOnly;
import chylex.bettersprinting.client.ClientModManager;
import chylex.bettersprinting.client.player.LivingUpdate;
@SideOnly(Side.CLIENT)
public final class IntegrityCheck{
public static void register(){
MinecraftForge.EVENT_BUS.register(instance);
}
public static void unregister(){
MinecraftForge.EVENT_BUS.unregister(instance);
instance.initialPlayerPos = Vec3d.ZERO;
}
private static final IntegrityCheck instance = new IntegrityCheck();
private static final Minecraft mc = Minecraft.getMinecraft();
private Vec3d initialPlayerPos = Vec3d.ZERO;
private IntegrityCheck(){}
@SubscribeEvent
public void onPlayerTick(ClientTickEvent e){
if (e.phase == Phase.END && mc.player != null && mc.playerController != null){
if (LivingUpdate.checkIntegrity()){
unregister();
}
else if (initialPlayerPos.equals(Vec3d.ZERO)){
initialPlayerPos = mc.player.getPositionVector();
}
else if (mc.player.getPositionVector().distanceTo(initialPlayerPos) > 1D){
// TODO fix bs.game.integrity
mc.player.sendMessage(new TextComponentString(ClientModManager.chatPrefix+I18n.format("bs.game.integrity")));
unregister();
}
}
}
}

View File

@ -1,49 +0,0 @@
package chylex.bettersprinting.client.player.impl;
import net.minecraft.client.Minecraft;
import net.minecraft.client.gui.GuiDownloadTerrain;
import net.minecraft.client.resources.I18n;
import net.minecraft.util.text.TextComponentString;
import net.minecraftforge.client.event.GuiOpenEvent;
import net.minecraftforge.common.MinecraftForge;
import net.minecraftforge.fml.common.eventhandler.SubscribeEvent;
import net.minecraftforge.fml.common.gameevent.TickEvent.ClientTickEvent;
import net.minecraftforge.fml.common.gameevent.TickEvent.Phase;
import net.minecraftforge.fml.relauncher.Side;
import net.minecraftforge.fml.relauncher.SideOnly;
import chylex.bettersprinting.client.ClientModManager;
@SideOnly(Side.CLIENT)
public final class LogicImplOverride{
public static void register(){
MinecraftForge.EVENT_BUS.register(new LogicImplOverride());
}
private static final Minecraft mc = Minecraft.getMinecraft();
private byte checkTimer = -120;
private boolean stopChecking = false;
private LogicImplOverride(){}
@SubscribeEvent
public void onGuiOpen(GuiOpenEvent e){
if (e.getGui() != null && e.getGui().getClass() == GuiDownloadTerrain.class){
// TODO
}
}
@SubscribeEvent
public void onClientTick(ClientTickEvent e){
if (e.phase == Phase.END || mc.player == null || mc.playerController == null)return;
if (!stopChecking && --checkTimer < -125){
checkTimer = 120;
Class<?> controllerClass = mc.playerController.getClass();
if (false){ // TODO
mc.player.sendMessage(new TextComponentString(ClientModManager.chatPrefix+I18n.format("bs.game.integrity").replace("$", controllerClass.getName())));
stopChecking = true;
}
}
}
}