diff --git a/src/main/java/mod/chiselsandbits/core/ClientSide.java b/src/main/java/mod/chiselsandbits/core/ClientSide.java index 9ed35f91..3cf9cef2 100644 --- a/src/main/java/mod/chiselsandbits/core/ClientSide.java +++ b/src/main/java/mod/chiselsandbits/core/ClientSide.java @@ -54,6 +54,7 @@ import mod.chiselsandbits.helpers.DeprecationHelper; import mod.chiselsandbits.helpers.LocalStrings; import mod.chiselsandbits.helpers.ModUtil; +import mod.chiselsandbits.helpers.ReadyState; import mod.chiselsandbits.helpers.VoxelRegionSrc; import mod.chiselsandbits.integration.mcmultipart.MCMultipartProxy; import mod.chiselsandbits.interfaces.IItemScrollWheel; @@ -135,6 +136,8 @@ public class ClientSide private static final Random RANDOM = new Random(); public static final ClientSide instance = new ClientSide(); + ReadyState readyState = ReadyState.PENDING_PRE; + private final HashMap chiselModeIcons = new HashMap(); private KeyBinding rotateCCW; private KeyBinding rotateCW; @@ -172,6 +175,8 @@ public KeyBinding getKeyBinding( public void preinit( final ChiselsAndBits mod ) { + readyState = readyState.updateState( ReadyState.TRIGGER_PRE ); + ChiselsAndBits.registerWithBus( new SmartModelManager() ); ChiselsAndBits.registerWithBus( instance ); } @@ -179,6 +184,8 @@ public void preinit( public void init( final ChiselsAndBits chiselsandbits ) { + readyState = readyState.updateState( ReadyState.TRIGGER_INIT ); + ClientRegistry.bindTileEntitySpecialRenderer( TileEntityBlockChiseledTESR.class, new ChisledBlockRenderChunkTESR() ); ClientRegistry.bindTileEntitySpecialRenderer( TileEntityBitTank.class, new TileEntitySpecialRenderBitTank() ); @@ -222,6 +229,8 @@ private KeyBinding registerKeybind( public void postinit( final ChiselsAndBits mod ) { + readyState = readyState.updateState( ReadyState.TRIGGER_POST ); + final ModItems modItems = ChiselsAndBits.getItems(); if ( modItems.itemBlockBit != null ) @@ -806,6 +815,9 @@ public void drawingInteractionPrevention( public void interaction( final TickEvent.ClientTickEvent event ) { + if ( !readyState.isReady() ) + return; + // used to prevent hyper chisels.. its actually far worse then you might // think... if ( event.side == Side.CLIENT && event.type == Type.CLIENT && event.phase == Phase.START && !Minecraft.getMinecraft().gameSettings.keyBindAttack.isKeyDown() ) diff --git a/src/main/java/mod/chiselsandbits/helpers/ReadyState.java b/src/main/java/mod/chiselsandbits/helpers/ReadyState.java new file mode 100644 index 00000000..a7f8c894 --- /dev/null +++ b/src/main/java/mod/chiselsandbits/helpers/ReadyState.java @@ -0,0 +1,41 @@ +package mod.chiselsandbits.helpers; + +public enum ReadyState +{ + PENDING_PRE, + PENDING_INIT, + PENDING_POST, + READY, + + TRIGGER_PRE, + TRIGGER_INIT, + TRIGGER_POST; + + public boolean isReady() + { + return this == READY; + } + + public ReadyState updateState( + ReadyState trigger ) + { + switch ( trigger ) + { + case TRIGGER_INIT: + if ( this == PENDING_INIT ) + return PENDING_POST; + throw new RuntimeException( "Triggered " + trigger.toString() + " but was " + this.toString() ); + case TRIGGER_POST: + if ( this == PENDING_POST ) + return READY; + throw new RuntimeException( "Triggered " + trigger.toString() + " but was " + this.toString() ); + case TRIGGER_PRE: + if ( this == PENDING_PRE ) + return PENDING_INIT; + throw new RuntimeException( "Triggered " + trigger.toString() + " but was " + this.toString() ); + default: + } + + throw new RuntimeException( "Invalid Trigger" ); + } +}