/* * This file is part of Matter Overdrive * Copyright (c) 2015., Simeon Radivoev, All rights reserved. * * Matter Overdrive is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * Matter Overdrive is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with Matter Overdrive. If not, see <http://www.gnu.org/licenses>. */ package matteroverdrive.handler; import cpw.mods.fml.common.event.FMLServerStartedEvent; import cpw.mods.fml.common.eventhandler.SubscribeEvent; import cpw.mods.fml.common.gameevent.TickEvent; import cpw.mods.fml.relauncher.Side; import matteroverdrive.MatterOverdrive; import matteroverdrive.api.network.IMatterNetworkHandler; import matteroverdrive.proxy.ClientProxy; import matteroverdrive.tile.IMOTickable; import net.minecraft.client.Minecraft; import net.minecraft.tileentity.TileEntity; import net.minecraft.world.World; import org.apache.logging.log4j.Level; /** * Created by Simeon on 4/26/2015. */ public class TickHandler { private MatterNetworkTickHandler matterNetworkTickHandler; private PlayerEventHandler playerEventHandler; private boolean worldStartFired = false; private long lastTickTime; private int lastTickLength; public TickHandler(ConfigurationHandler configurationHandler,PlayerEventHandler playerEventHandler) { this.playerEventHandler = playerEventHandler; this.matterNetworkTickHandler = new MatterNetworkTickHandler(); configurationHandler.subscribe(matterNetworkTickHandler); } //Called when the client ticks. @SubscribeEvent public void onClientTick(TickEvent.ClientTickEvent event) { if (Minecraft.getMinecraft().thePlayer == null || Minecraft.getMinecraft().theWorld == null) return; if (ClientProxy.instance().getClientWeaponHandler() != null) ClientProxy.instance().getClientWeaponHandler().onClientTick(event); if (!Minecraft.getMinecraft().isGamePaused() && event.phase.equals(TickEvent.Phase.START)) { ClientProxy.questHud.onTick(); } } //Called when the server ticks. Usually 20 ticks a second. @SubscribeEvent public void onServerTick(TickEvent.ServerTickEvent event) { playerEventHandler.onServerTick(event); lastTickLength = (int)(System.nanoTime() - lastTickTime); lastTickTime = System.nanoTime(); } public void onServerStart(FMLServerStartedEvent event) { } //Called when a new frame is displayed (See fps) @SubscribeEvent public void onRenderTick(TickEvent.RenderTickEvent event) { ClientProxy.instance().getClientWeaponHandler().onTick(event); } //Called when the world ticks @SubscribeEvent public void onWorldTick(TickEvent.WorldTickEvent event) { if (!worldStartFired) { onWorldStart(event.side,event.world); worldStartFired = true; } if (event.side.isServer()) { matterNetworkTickHandler.onWorldTickPre(event.phase, event.world); int tileEntityListSize = event.world.loadedTileEntityList.size(); for (int i = 0;i < tileEntityListSize;i++) { try { TileEntity tileEntity = (TileEntity)event.world.loadedTileEntityList.get(i); if (tileEntity instanceof IMOTickable) { if (tileEntity instanceof IMatterNetworkHandler) { matterNetworkTickHandler.updateHandler((IMatterNetworkHandler) tileEntity, event.phase, event.world); } else { ((IMOTickable) tileEntity).onServerTick(event.phase, event.world); } } }catch (Throwable e) { MatterOverdrive.log.log(Level.ERROR,e,"There was an Error while updating Matter Overdrive Tile Entities."); return; } } matterNetworkTickHandler.onWorldTickPost(event.phase, event.world); } MatterOverdrive.moWorld.onWorldTick(event); } public void onWorldStart(Side side,World world) { } public int getLastTickLength() { return lastTickLength; } }