Skip to content

Commit

Permalink
Track Client Side Initialization progress and only allow ticking if i…
Browse files Browse the repository at this point in the history
…t completed. Fixes #316
  • Loading branch information
AlgorithmX2 committed Oct 21, 2017
1 parent 74c106a commit dacf302
Show file tree
Hide file tree
Showing 2 changed files with 53 additions and 0 deletions.
12 changes: 12 additions & 0 deletions src/main/java/mod/chiselsandbits/core/ClientSide.java
Expand Up @@ -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;
Expand Down Expand Up @@ -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<IToolMode, SpriteIconPositioning> chiselModeIcons = new HashMap<IToolMode, SpriteIconPositioning>();
private KeyBinding rotateCCW;
private KeyBinding rotateCW;
Expand Down Expand Up @@ -172,13 +175,17 @@ public KeyBinding getKeyBinding(
public void preinit(
final ChiselsAndBits mod )
{
readyState = readyState.updateState( ReadyState.TRIGGER_PRE );

ChiselsAndBits.registerWithBus( new SmartModelManager() );
ChiselsAndBits.registerWithBus( instance );
}

public void init(
final ChiselsAndBits chiselsandbits )
{
readyState = readyState.updateState( ReadyState.TRIGGER_INIT );

ClientRegistry.bindTileEntitySpecialRenderer( TileEntityBlockChiseledTESR.class, new ChisledBlockRenderChunkTESR() );
ClientRegistry.bindTileEntitySpecialRenderer( TileEntityBitTank.class, new TileEntitySpecialRenderBitTank() );

Expand Down Expand Up @@ -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 )
Expand Down Expand Up @@ -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() )
Expand Down
41 changes: 41 additions & 0 deletions 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" );
}
}

0 comments on commit dacf302

Please sign in to comment.