package mcjty.rftools; import cpw.mods.fml.common.eventhandler.SubscribeEvent; import cpw.mods.fml.common.gameevent.PlayerEvent; import cpw.mods.fml.common.gameevent.TickEvent; import cpw.mods.fml.common.network.FMLNetworkEvent; import cpw.mods.fml.common.network.FMLOutboundHandler; import cpw.mods.fml.common.network.handshake.NetworkDispatcher; import cpw.mods.fml.relauncher.Side; import mcjty.lib.preferences.PlayerPreferencesProperties; import mcjty.lib.varia.Logging; import mcjty.rftools.blocks.dimlets.DimletSetup; import mcjty.rftools.blocks.endergen.EndergenicSetup; import mcjty.rftools.dimension.RfToolsDimensionManager; import mcjty.rftools.network.DimensionSyncPacket; import mcjty.rftools.network.RFToolsMessages; import mcjty.rftools.playerprops.PlayerExtendedProperties; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.Item; import net.minecraft.item.ItemBlock; import net.minecraft.item.ItemStack; import net.minecraft.network.NetHandlerPlayServer; import net.minecraftforge.common.IExtendedEntityProperties; public class FMLEventHandlers { @SubscribeEvent public void onPlayerTickEvent(TickEvent.PlayerTickEvent event) { if (event.phase == TickEvent.Phase.START && !event.player.worldObj.isRemote) { IExtendedEntityProperties properties = event.player.getExtendedProperties(PlayerExtendedProperties.ID); if (properties instanceof PlayerExtendedProperties) { PlayerExtendedProperties playerExtendedProperties = (PlayerExtendedProperties) properties; playerExtendedProperties.tick(); } properties = event.player.getExtendedProperties(PlayerPreferencesProperties.ID); if (properties instanceof PlayerPreferencesProperties) { PlayerPreferencesProperties preferencesProperties = (PlayerPreferencesProperties) properties; preferencesProperties.tick(RFToolsMessages.INSTANCE); } } } @SubscribeEvent public void onItemPickupEvent(PlayerEvent.ItemPickupEvent event) { if (event.pickedUp != null) { ItemStack stack = event.pickedUp.getEntityItem(); if (stack != null) { Item item = stack.getItem(); if (item == DimletSetup.unknownDimlet) { Achievements.trigger(event.player, Achievements.theFirstStep); } else if (item == DimletSetup.dimensionalShard) { Achievements.trigger(event.player, Achievements.specialOres); } } } } @SubscribeEvent public void onItemCraftedEvent(PlayerEvent.ItemCraftedEvent event) { if (event.crafting != null) { Item item = event.crafting.getItem(); if (item instanceof ItemBlock) { ItemBlock itemBlock = (ItemBlock) item; if (itemBlock.field_150939_a == EndergenicSetup.endergenicBlock) { Achievements.trigger(event.player, Achievements.hardPower); } } } } @SubscribeEvent public void onPlayerLoggedIn(PlayerEvent.PlayerLoggedInEvent event) { Logging.log("SMP: Player logged in: Sync diminfo to clients"); EntityPlayer player = event.player; RfToolsDimensionManager manager = RfToolsDimensionManager.getDimensionManager(player.getEntityWorld()); manager.syncDimInfoToClients(player.getEntityWorld()); manager.checkDimletConfig(player); } @SubscribeEvent public void onConnectionCreated(FMLNetworkEvent.ServerConnectionFromClientEvent event) { Logging.log("SMP: Sync dimensions to client"); DimensionSyncPacket packet = new DimensionSyncPacket(); EntityPlayer player = ((NetHandlerPlayServer) event.handler).playerEntity; RfToolsDimensionManager manager = RfToolsDimensionManager.getDimensionManager(player.getEntityWorld()); for (Integer id : manager.getDimensions().keySet()) { Logging.log("Sending over dimension " + id + " to the client"); packet.addDimension(id); } RFTools.channels.get(Side.SERVER).attr(FMLOutboundHandler.FML_MESSAGETARGET).set(FMLOutboundHandler.OutboundTarget.DISPATCHER); RFTools.channels.get(Side.SERVER).attr(FMLOutboundHandler.FML_MESSAGETARGETARGS).set(event.manager.channel().attr(NetworkDispatcher.FML_DISPATCHER).get()); RFTools.channels.get(Side.SERVER).writeOutbound(packet); } }