/**
* Copyright (c) Lambda Innovation, 2013-2016
* This file is part of the AcademyCraft mod.
* https://github.com/LambdaInnovation/AcademyCraft
* Licensed under GPLv3, see project root for more information.
*/
package cn.academy.energy.block;
import cn.academy.core.block.TileGeneratorBase;
import cn.academy.energy.client.render.block.RenderCatEngine;
import cn.lambdalib.annoreg.core.Registrant;
import cn.lambdalib.annoreg.mc.RegTileEntity;
import cn.lambdalib.s11n.network.TargetPoints;
import cn.lambdalib.s11n.network.NetworkMessage;
import cn.lambdalib.s11n.network.NetworkMessage.Listener;
import cn.lambdalib.util.helper.TickScheduler;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
/**
* Cat Engine!
* @author WeAthFolD
*/
@Registrant
@RegTileEntity
@RegTileEntity.HasRender
public class TileCatEngine extends TileGeneratorBase {
@SideOnly(Side.CLIENT)
@RegTileEntity.Render
public static RenderCatEngine renderer;
private final TickScheduler scheduler = new TickScheduler();
// Sync
int syncTicker;
// Intrusive render parameters
public double thisTickGen;
public double rotation;
public long lastRender;
{
scheduler.every(20).atOnly(Side.SERVER).run(() -> {
NetworkMessage.sendToAllAround(TargetPoints.convert(this, 20), this, "sync_genspeed", thisTickGen);
});
}
public TileCatEngine() {
super("infinite_generator", 0, 2000, 200);
}
@Override
public void updateEntity() {
super.updateEntity();
scheduler.runTick();
}
@Override
public double getGeneration(double required) {
return (thisTickGen = Math.min(required, 500));
}
@Listener(channel="sync_genspeed", side=Side.CLIENT)
private void hSync(double genSpeed) {
this.thisTickGen = genSpeed;
}
}