Files
ReplayModCinematic/src/main/java/com/replaymod/pathing/player/ReplayTimer.java
2023-12-03 18:51:37 +01:00

78 lines
2.0 KiB
Java

package com.replaymod.pathing.player;
import com.replaymod.core.utils.WrappedTimer;
import de.johni0702.minecraft.gui.utils.Event;
import net.minecraft.client.render.RenderTickCounter;
/**
* Wrapper around the current timer that prevents the timer from advancing by itself.
*/
public class ReplayTimer extends WrappedTimer {
//#if MC>=12003
//$$ private final RenderTickCounter state = new RenderTickCounter(0, 0, f -> f);
//#elseif MC>=11400
private final RenderTickCounter state = new RenderTickCounter(0, 0);
//#else
//$$ private final Timer state = new Timer(0);
//#endif
//#if MC>=11600
public int ticksThisFrame;
//#endif
public ReplayTimer(RenderTickCounter wrapped) {
super(wrapped);
}
@Override
// This should be handled by Remap but it isn't (was handled before a9724e3).
//#if MC>=11400
public
//#if MC>=11600
int
//#else
//$$ void
//#endif
beginRenderTick(
//#else
//$$ public void updateTimer(
//#endif
//#if MC>=11400
long sysClock
//#endif
) {
copy(this, state); // Save our current state
try {
//#if MC>=11600
ticksThisFrame =
//#endif
wrapped.beginRenderTick(
//#if MC>=11400
sysClock
//#endif
); // Update current state
} finally {
copy(state, this); // Restore our old state
UpdatedCallback.EVENT.invoker().onUpdate();
}
//#if MC>=11600
return ticksThisFrame;
//#endif
}
public RenderTickCounter getWrapped() {
return wrapped;
}
public interface UpdatedCallback {
Event<UpdatedCallback> EVENT = Event.create((listeners) ->
() -> {
for (UpdatedCallback listener : listeners) {
listener.onUpdate();
}
}
);
void onUpdate();
}
}